return;
}
- if (addr_mode_stateful && prefix_set) {
- lexer_error(ctx->lexer, "prefix option can't be"
- " set when address mode is dhcpv6_stateful.");
- return;
- }
-
if (!addr_mode_stateful && !prefix_set) {
lexer_error(ctx->lexer, "prefix option needs "
"to be set when address mode is slaac/dhcpv6_stateless.");
struct ovs_nd_prefix_opt *prefix_opt =
ofpbuf_put_uninit(ofpacts, sizeof *prefix_opt);
uint8_t prefix_len = ipv6_count_cidr_bits(&c->mask.ipv6);
+ struct ovs_ra_msg *ra = ofpbuf_at(ofpacts, ra_offset, sizeof *ra);
prefix_opt->type = ND_OPT_PREFIX_INFORMATION;
prefix_opt->len = 4;
prefix_opt->prefix_len = prefix_len;
- prefix_opt->la_flags = IPV6_ND_RA_OPT_PREFIX_FLAGS;
+ prefix_opt->la_flags = IPV6_ND_RA_OPT_PREFIX_ON_LINK;
+ if (!(ra->mo_flags & IPV6_ND_RA_FLAG_MANAGED_ADDR_CONFIG)) {
+ prefix_opt->la_flags |= IPV6_ND_RA_OPT_PREFIX_AUTONOMOUS;
+ }
put_16aligned_be32(&prefix_opt->valid_lifetime,
htonl(IPV6_ND_RA_OPT_PREFIX_VALID_LIFETIME));
put_16aligned_be32(&prefix_opt->preferred_lifetime,
#define IPV6_ND_RA_REACHABLE_TIME 0
#define IPV6_ND_RA_RETRANSMIT_TIMER 0
-#define IPV6_ND_RA_OPT_PREFIX_FLAGS 0xc0
+#define IPV6_ND_RA_OPT_PREFIX_ON_LINK 0x80
+#define IPV6_ND_RA_OPT_PREFIX_AUTONOMOUS 0x40
#define IPV6_ND_RA_OPT_PREFIX_VALID_LIFETIME 0xffffffff
#define IPV6_ND_RA_OPT_PREFIX_PREFERRED_LIFETIME 0xffffffff
continue;
}
- /* Add the prefix option if the address mode is slaac or
- * dhcpv6_stateless. */
- if (strcmp(address_mode, "dhcpv6_stateful")) {
- ds_put_format(&actions, ", prefix = %s/%u",
- op->lrp_networks.ipv6_addrs[i].network_s,
- op->lrp_networks.ipv6_addrs[i].plen);
- }
+ ds_put_format(&actions, ", prefix = %s/%u",
+ op->lrp_networks.ipv6_addrs[i].network_s,
+ op->lrp_networks.ipv6_addrs[i].plen);
+
add_rs_response_flow = true;
}
reg1[0] = put_nd_ra_opts(addr_mode = "slaac", mtu = 1500, prefix = aef0::/64);
slla option not present
reg1[0] = put_nd_ra_opts(addr_mode = "dhcpv6_stateful", mtu = 1450, prefix = aef0::/64, prefix = bef0::/64, slla = ae:01:02:03:04:10);
- prefix option can't be set when address mode is dhcpv6_stateful.
+ encodes as controller(userdata=00.00.00.08.00.00.00.00.00.01.de.10.00.00.00.40.86.00.00.00.ff.80.ff.ff.00.00.00.00.00.00.00.00.05.01.00.00.00.00.05.aa.03.04.40.80.ff.ff.ff.ff.ff.ff.ff.ff.00.00.00.00.ae.f0.00.00.00.00.00.00.00.00.00.00.00.00.00.00.03.04.40.80.ff.ff.ff.ff.ff.ff.ff.ff.00.00.00.00.be.f0.00.00.00.00.00.00.00.00.00.00.00.00.00.00.01.01.ae.01.02.03.04.10,pause)
+ has prereqs ip6
reg1[0] = put_nd_ra_opts(addr_mode = "dhcpv6_stateful", mtu = 1450, prefix = aef0::/64, prefix = bef0::/64, slla = ae:01:02:03:04:10);
- prefix option can't be set when address mode is dhcpv6_stateful.
+ encodes as controller(userdata=00.00.00.08.00.00.00.00.00.01.de.10.00.00.00.40.86.00.00.00.ff.80.ff.ff.00.00.00.00.00.00.00.00.05.01.00.00.00.00.05.aa.03.04.40.80.ff.ff.ff.ff.ff.ff.ff.ff.00.00.00.00.ae.f0.00.00.00.00.00.00.00.00.00.00.00.00.00.00.03.04.40.80.ff.ff.ff.ff.ff.ff.ff.ff.00.00.00.00.be.f0.00.00.00.00.00.00.00.00.00.00.00.00.00.00.01.01.ae.01.02.03.04.10,pause)
+ has prereqs ip6
reg1[0] = put_nd_ra_opts(addr_mode = "slaac", slla = ae:01:02:03:04:10);
prefix option needs to be set when address mode is slaac/dhcpv6_stateless.
reg1[0] = put_nd_ra_opts(addr_mode = "dhcpv6_stateless", slla = ae:01:02:03:04:10);
OVS_WAIT_UNTIL([test 1 = `as hv1 ovs-ofctl dump-flows br-int | grep -c "ipv6_dst=ff02::2,nw_ttl=255,icmp_type=133,icmp_code=0"`])
addr_mode=80
-default_prefix_option_config=""
+default_prefix_option_config=03044080ffffffffffffffff00000000
src_mac=fa163e000004
src_lla=fe80000000000000f8163efffe000004
mtu=000005dc