This new option cause that pppd would not send our local IPv6 interface
identifier to peer during IPv6 interface identifier negotiation. Like
nosendip option for IPv4.
Signed-off-by: Pali Rohár <pali@kernel.org>
{ "ipv6cp-noremote", o_bool, &ipv6cp_noremote,
"Allow peer to have no interface identifier", 1 },
#endif
{ "ipv6cp-noremote", o_bool, &ipv6cp_noremote,
"Allow peer to have no interface identifier", 1 },
#endif
+ { "ipv6cp-nosend", o_bool, &ipv6cp_wantoptions[0].neg_ifaceid,
+ "Don't send local interface identifier to peer", OPT_A2CLR },
{ "ipv6cp-restart", o_int, &ipv6cp_fsm[0].timeouttime,
"Set timeout for IPv6CP", OPT_PRIO },
{ "ipv6cp-restart", o_int, &ipv6cp_fsm[0].timeouttime,
"Set timeout for IPv6CP", OPT_PRIO },
static int
ipv6cp_nakci(fsm *f, u_char *p, int len, int treat_as_reject)
{
static int
ipv6cp_nakci(fsm *f, u_char *p, int len, int treat_as_reject)
{
+ ipv6cp_options *wo = &ipv6cp_wantoptions[f->unit];
ipv6cp_options *go = &ipv6cp_gotoptions[f->unit];
u_char citype, cilen, *next;
u_short cishort;
ipv6cp_options *go = &ipv6cp_gotoptions[f->unit];
u_char citype, cilen, *next;
u_short cishort;
try.neg_ifaceid = 0;
} else if (go->accept_local && !eui64_iszero(ifaceid) && !eui64_equals(ifaceid, go->hisid)) {
try.ourid = ifaceid;
try.neg_ifaceid = 0;
} else if (go->accept_local && !eui64_iszero(ifaceid) && !eui64_equals(ifaceid, go->hisid)) {
try.ourid = ifaceid;
- } else if (eui64_iszero(ifaceid) && !go->opt_local) {
+ } else if (eui64_iszero(ifaceid) && !go->opt_local && wo->neg_ifaceid) {
while (eui64_iszero(ifaceid) ||
eui64_equals(ifaceid, go->hisid)) /* bad luck */
eui64_magic(ifaceid);
while (eui64_iszero(ifaceid) ||
eui64_equals(ifaceid, go->hisid)) /* bad luck */
eui64_magic(ifaceid);
eui64_get(ifaceid, p);
if (go->accept_local && !eui64_iszero(ifaceid) && !eui64_equals(ifaceid, go->hisid)) {
try.ourid = ifaceid;
eui64_get(ifaceid, p);
if (go->accept_local && !eui64_iszero(ifaceid) && !eui64_equals(ifaceid, go->hisid)) {
try.ourid = ifaceid;
- } else if (eui64_iszero(ifaceid) && !go->opt_local) {
+ } else if (eui64_iszero(ifaceid) && !go->opt_local && wo->neg_ifaceid) {
while (eui64_iszero(ifaceid) ||
eui64_equals(ifaceid, go->hisid)) /* bad luck */
eui64_magic(ifaceid);
while (eui64_iszero(ifaceid) ||
eui64_equals(ifaceid, go->hisid)) /* bad luck */
eui64_magic(ifaceid);
Router Advertisement or ICMPv6 Neighbor Advertisement packets. Note that IPv6
router must announce ICMPv6 Router Advertisement packets.
.TP
Router Advertisement or ICMPv6 Neighbor Advertisement packets. Note that IPv6
router must announce ICMPv6 Router Advertisement packets.
.TP
+.B ipv6cp\-nosendip
+Don't send our local IPv6 interface identifier to peer during IPv6 interface
+identifier negotiation.
+.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).