From 8945d9b7679bb4f83d096db3caae4749e44886d8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Pali=20Roh=C3=A1r?= Date: Sat, 9 Jan 2021 14:37:00 +0100 Subject: [PATCH] ipv6cp: Allow to use demand mode without specifying IPv6 address/identifier MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Support is similar as in IPv4, pppd generates random temporary identifier for LL address and after connection is established then LL address is changed to the real one. Signed-off-by: Pali Rohár --- pppd/ipv6cp.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/pppd/ipv6cp.c b/pppd/ipv6cp.c index 431cb62..98b9e95 100644 --- a/pppd/ipv6cp.c +++ b/pppd/ipv6cp.c @@ -528,7 +528,8 @@ ipv6cp_resetci(fsm *f) if (!wo->opt_local) { wo->accept_local = 1; - eui64_magic_nz(wo->ourid); + if (!demand) + eui64_magic_nz(wo->ourid); } if (!wo->opt_remote) wo->accept_remote = 1; @@ -1140,11 +1141,6 @@ ipv6_check_options(void) wo->opt_remote = 1; } } - - if (demand && (eui64_iszero(wo->ourid) || eui64_iszero(wo->hisid))) { - option_error("local/remote LL address required for demand-dialling\n"); - exit(EXIT_OPTION_ERROR); - } } @@ -1157,6 +1153,15 @@ ipv6_demand_conf(int u) { ipv6cp_options *wo = &ipv6cp_wantoptions[u]; + if (eui64_iszero(wo->hisid)) { + /* make up an arbitrary identifier for the peer */ + eui64_magic_nz(wo->hisid); + } + if (eui64_iszero(wo->ourid)) { + /* make up an arbitrary identifier for us */ + eui64_magic_nz(wo->ourid); + } + if (!sif6up(u)) return 0; if (!sif6addr(u, wo->ourid, wo->hisid)) -- 2.39.2