]> git.ozlabs.org Git - ppp.git/commitdiff
ipv6cp: Allow to use demand mode without specifying IPv6 address/identifier
authorPali Rohár <pali@kernel.org>
Sat, 9 Jan 2021 13:37:00 +0000 (14:37 +0100)
committerPali Rohár <pali@kernel.org>
Sat, 9 Jan 2021 13:37:00 +0000 (14:37 +0100)
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 <pali@kernel.org>
pppd/ipv6cp.c

index 431cb62211bff1d28de4ca8151c070199a615877..98b9e95cf21b212d851500d83a02f69010b3038e 100644 (file)
@@ -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))