/* Extracts the mac, IPv4 and IPv6 addresses from the
* "nbrec_logical_router_port" parameter 'lrp'. Stores the IPv4 and
* IPv6 addresses in the 'ipv4_addrs' and 'ipv6_addrs' fields of
- * 'laddrs', respectively.
+ * 'laddrs', respectively. In addition, a link local IPv6 address
+ * based on the 'mac' member of 'lrp' is added to the 'ipv6_addrs'
+ * field.
*
- * Return true if at least 'MAC' is found in 'lrp', false otherwise.
+ * Return true if a valid 'mac' address is found in 'lrp', false otherwise.
*
* The caller must call destroy_lport_addresses(). */
bool
}
}
+ /* Always add the IPv6 link local address. */
+ struct in6_addr lla;
+ in6_generate_lla(laddrs->ea, &lla);
+ add_ipv6_netaddr(laddrs, lla, 64);
+
return true;
}
Instead, if the route is from a configured static route, <var>G</var>
is the next hop IP address. Else it is <code>ip6.dst</code>.
</p>
+
+ <p>
+ If the address <var>A</var> is in the link-local scope, the
+ route will be limited to sending on the ingress port.
+ </p>
</li>
</ul>
const char *gateway)
{
bool is_ipv4 = strchr(network_s, '.') ? true : false;
+ struct ds match = DS_EMPTY_INITIALIZER;
- char *match = xasprintf("ip%s.dst == %s/%d", is_ipv4 ? "4" : "6",
- network_s, plen);
+ /* IPv6 link-local addresses must be scoped to the local router port. */
+ if (!is_ipv4) {
+ struct in6_addr network;
+ ovs_assert(ipv6_parse(network_s, &network));
+ if (in6_is_lla(&network)) {
+ ds_put_format(&match, "inport == %s && ", op->json_key);
+ }
+ }
+ ds_put_format(&match, "ip%s.dst == %s/%d", is_ipv4 ? "4" : "6",
+ network_s, plen);
struct ds actions = DS_EMPTY_INITIALIZER;
ds_put_format(&actions, "ip.ttl--; %sreg0 = ", is_ipv4 ? "" : "xx");
/* The priority here is calculated to implement longest-prefix-match
* routing. */
- ovn_lflow_add(lflows, op->od, S_ROUTER_IN_IP_ROUTING, plen, match,
- ds_cstr(&actions));
+ ovn_lflow_add(lflows, op->od, S_ROUTER_IN_IP_ROUTING, plen,
+ ds_cstr(&match), ds_cstr(&actions));
+ ds_destroy(&match);
ds_destroy(&actions);
- free(match);
}
static void
address is 192.168.0.1 and that packets destined to
192.168.0.<var>x</var> should be routed to this port.
</p>
+
+ <p>
+ A logical router port always adds a link-local IPv6 address
+ (fe80::/64) automatically generated from the interface's MAC
+ address using the modified EUI-64 format.
+ </p>
</column>
<column name="mac">