X-Git-Url: https://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Fipv6cp.c;h=c01b84639e674246224812914afb13c29b3deb5a;hp=bda91e90afb0b38ca303c666393deec19756e223;hb=2937722f04389ad1464ce8e76d357963e3bda126;hpb=388597eee99beac6e5b7430d24c377169f51bd57 diff --git a/pppd/ipv6cp.c b/pppd/ipv6cp.c index bda91e9..c01b846 100644 --- a/pppd/ipv6cp.c +++ b/pppd/ipv6cp.c @@ -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-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 }, @@ -301,7 +303,7 @@ struct protent ipv6cp_protent = { ipv6cp_close, ipv6cp_printpkt, NULL, - 0, + 1, "IPV6CP", "IPV6", ipv6cp_option_list, @@ -443,7 +445,8 @@ ipv6cp_init(unit) memset(wo, 0, sizeof(*wo)); memset(ao, 0, sizeof(*ao)); - wo->accept_local = 1; + wo->accept_local = 0; + wo->accept_remote = 0; wo->neg_ifaceid = 1; ao->neg_ifaceid = 1; @@ -544,8 +547,11 @@ ipv6cp_resetci(f) wo->req_ifaceid = wo->neg_ifaceid && ipv6cp_allowoptions[f->unit].neg_ifaceid; if (!wo->opt_local) { + 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 */ @@ -973,7 +979,7 @@ ipv6cp_reqci(f, inp, len, reject_if_disagree) 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)) {