]> git.ozlabs.org Git - ppp.git/commitdiff
Add ipv6cp-accept-remote option
authorDavid Woodhouse <dwmw2@redhat.com>
Sat, 25 Apr 2020 16:37:48 +0000 (18:37 +0200)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Sun, 19 Jul 2020 11:56:36 +0000 (13:56 +0200)
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Fixes #76

pppd/ipv6cp.c
pppd/ipv6cp.h
pppd/pppd.8

index 47e34229e0cdff4b044200a5c28fc4a33f868cc3..58573363ea8d9b9c6b0145118d97c4798b65bf18 100644 (file)
@@ -245,6 +245,8 @@ static option_t ipv6cp_option_list[] = {
 
     { "ipv6cp-accept-local", o_bool, &ipv6cp_allowoptions[0].accept_local,
       "Accept peer's interface identifier for us", 1 },
 
     { "ipv6cp-accept-local", o_bool, &ipv6cp_allowoptions[0].accept_local,
       "Accept peer's interface identifier for us", 1 },
+    { "ipv6cp-accept-remote", o_bool, &ipv6cp_allowoptions[0].accept_remote,
+      "Accept peer's interface identifier for itself", 1 },
 
     { "defaultroute6", o_bool, &ipv6cp_wantoptions[0].default_route,
       "Add default IPv6 route", OPT_ENABLE|1, &ipv6cp_allowoptions[0].default_route },
 
     { "defaultroute6", o_bool, &ipv6cp_wantoptions[0].default_route,
       "Add default IPv6 route", OPT_ENABLE|1, &ipv6cp_allowoptions[0].default_route },
@@ -444,6 +446,7 @@ ipv6cp_init(unit)
     memset(ao, 0, sizeof(*ao));
 
     wo->accept_local = 0;
     memset(ao, 0, sizeof(*ao));
 
     wo->accept_local = 0;
+    wo->accept_remote = 0;
     wo->neg_ifaceid = 1;
     ao->neg_ifaceid = 1;
 
     wo->neg_ifaceid = 1;
     ao->neg_ifaceid = 1;
 
@@ -547,6 +550,8 @@ ipv6cp_resetci(f)
        wo->accept_local = 1;
        eui64_magic_nz(wo->ourid);
     }
        wo->accept_local = 1;
        eui64_magic_nz(wo->ourid);
     }
+    if (!wo->opt_remote)
+       wo->accept_remote = 1;
     
     *go = *wo;
     eui64_zero(go->hisid);     /* last proposed interface identifier */
     
     *go = *wo;
     eui64_zero(go->hisid);     /* last proposed interface identifier */
@@ -974,7 +979,7 @@ ipv6cp_reqci(f, inp, len, reject_if_disagree)
                orc = CONFREJ;          /* Reject CI */
                break;
            }
                orc = CONFREJ;          /* Reject CI */
                break;
            }
-           if (!eui64_iszero(wo->hisid) && 
+           if (!eui64_iszero(wo->hisid) && !wo->accept_remote &&
                !eui64_equals(ifaceid, wo->hisid) && 
                eui64_iszero(go->hisid)) {
                    
                !eui64_equals(ifaceid, wo->hisid) && 
                eui64_iszero(go->hisid)) {
                    
index 25235d27fd2313e202a8817fe48b58cf0128e1b6..3eb7b2a77cf805f309561aade049379aa8d64afc 100644 (file)
@@ -151,7 +151,8 @@ typedef struct ipv6cp_options {
     int neg_ifaceid;           /* Negotiate interface identifier? */
     int req_ifaceid;           /* Ask peer to send interface identifier? */
     int default_route;         /* Assign default route through interface? */
     int neg_ifaceid;           /* Negotiate interface identifier? */
     int req_ifaceid;           /* Ask peer to send interface identifier? */
     int default_route;         /* Assign default route through interface? */
-    int accept_local;          /* accept peer's value for iface id? */
+    int accept_local;          /* accept peer's value for our iface id? */
+    int accept_remote;         /* accept peer's value for his iface id? */
     int opt_local;             /* ourtoken set by option */
     int opt_remote;            /* histoken set by option */
     int use_ip;                        /* use IP as interface identifier */
     int opt_local;             /* ourtoken set by option */
     int opt_remote;            /* histoken set by option */
     int use_ip;                        /* use IP as interface identifier */
index 540d62a1337ef79a31ff69889bfd8fbf6f5fca85..53b1c12e419882a5fed175ae48a2f631c5467e9a 100644 (file)
@@ -470,6 +470,11 @@ With this option, pppd will accept the peer's idea of our local IPv6
 interface identifier, even if the local IPv6 interface identifier
 was specified in an option.
 .TP
 interface identifier, even if the local IPv6 interface identifier
 was specified in an option.
 .TP
+.B ipv6cp\-accept\-remote
+With this option, pppd will accept the peer's idea of its (remote)
+IPv6 interface identifier, even if the remote IPv6 interface
+identifier was specified in an option.
+.TP
 .B ipv6cp\-max\-configure \fIn
 Set the maximum number of IPv6CP configure-request transmissions to
 \fIn\fR (default 10).
 .B ipv6cp\-max\-configure \fIn
 Set the maximum number of IPv6CP configure-request transmissions to
 \fIn\fR (default 10).