diff options
author | Vladislav Grishenko <themiron@mail.ru> | 2014-09-01 15:47:22 +0600 |
---|---|---|
committer | Dmitry Kozlov <xeb@mail.ru> | 2014-09-13 11:02:06 +0400 |
commit | ae5f0170e8b532a60d7a672e6b326615368a7a46 (patch) | |
tree | d51197d78866e349162c1c106938ac89c3034505 /accel-pppd/ipv6/nd.c | |
parent | ee8cbd4169e70ea7abed730a58bcc579f8971927 (diff) | |
download | accel-ppp-ae5f0170e8b532a60d7a672e6b326615368a7a46.tar.gz accel-ppp-ae5f0170e8b532a60d7a672e6b326615368a7a46.zip |
ipv6: announce non-/64 prefixes as not usable for stateless address configuration
Diffstat (limited to 'accel-pppd/ipv6/nd.c')
-rw-r--r-- | accel-pppd/ipv6/nd.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/accel-pppd/ipv6/nd.c b/accel-pppd/ipv6/nd.c index 669840a3..8eb4b5ef 100644 --- a/accel-pppd/ipv6/nd.c +++ b/accel-pppd/ipv6/nd.c @@ -127,14 +127,12 @@ static void ipv6_nd_send_ra(struct ipv6_nd_handler_t *h, struct sockaddr_in6 *ad pinfo = (struct nd_opt_prefix_info *)(adv + 1); list_for_each_entry(a, &h->ses->ipv6->addr_list, entry) { - if (a->prefix_len != 64) - continue; - memset(pinfo, 0, sizeof(*pinfo)); pinfo->nd_opt_pi_type = ND_OPT_PREFIX_INFORMATION; pinfo->nd_opt_pi_len = 4; pinfo->nd_opt_pi_prefix_len = a->prefix_len; - pinfo->nd_opt_pi_flags_reserved = ND_OPT_PI_FLAG_ONLINK | ((a->flag_auto || conf_AdvPrefixAutonomousFlag) ? ND_OPT_PI_FLAG_AUTO : 0); + pinfo->nd_opt_pi_flags_reserved = ND_OPT_PI_FLAG_ONLINK | + (a->flag_auto || (conf_AdvPrefixAutonomousFlag && a->prefix_len == 64)) ? ND_OPT_PI_FLAG_AUTO : 0; pinfo->nd_opt_pi_valid_time = htonl(conf_AdvPrefixValidLifetime); pinfo->nd_opt_pi_preferred_time = htonl(conf_AdvPrefixPreferredLifetime); memcpy(&pinfo->nd_opt_pi_prefix, &a->addr, 8); |