> On Jul 29, 2016, at 12:46 PM, Ben Pfaff <[email protected]> wrote:
>
> On Thu, Jul 28, 2016 at 11:26:19PM -0700, Justin Pettit wrote:
>> Every IPv6-enabled interface is supposed to have a link-local address
>> available to it. This commit adds a link local interface to each router
>> port and scopes link-local routes to the ingress port that received the
>> packet.
>>
>> Signed-off-by: Justin Pettit <[email protected]>
>
> In add_route() in ovn-northd.c, I don't think that it's ideal to use a
> string comparison to compare an IPv6 address:
> + struct ds match = DS_EMPTY_INITIALIZER;
> + if (!strcmp("fe80::", network_s) && plen == 64) {
Fair point. How about the incremental at the end?
--Justin
-=-=-=-=-=-=-=-
diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c
index f0f72f0..14ce1ba 100644
--- a/ovn/northd/ovn-northd.c
+++ b/ovn/northd/ovn-northd.c
@@ -2777,11 +2777,15 @@ add_route(struct hmap *lflows, const struct ovn_port
*op,
const char *gateway)
{
bool is_ipv4 = strchr(network_s, '.') ? true : false;
-
struct ds match = DS_EMPTY_INITIALIZER;
- if (!strcmp("fe80::", network_s) && plen == 64) {
- /* Scope IPv6 link-local addresses to the local router port. */
- ds_put_format(&match, "inport == %s && ", op->json_key);
+
+ /* 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);
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev