From fbd9b7676f59ac8e3e1a678fc07506cc919df8a5 Mon Sep 17 00:00:00 2001 From: Justin Pettit Date: Wed, 22 Jun 2016 18:20:08 -0700 Subject: [PATCH] ovn-util: Add solicited node addresses to ipv6_netaddr. Every IPv6 host has a link-local solicited node multicast address for neighbor discovery. This commit defines the solicited node address for each IPv6 address added to a logical switch or router port. Signed-off-by: Justin Pettit Acked-by: Ben Pfaff --- ovn/lib/ovn-util.c | 4 ++++ ovn/lib/ovn-util.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/ovn/lib/ovn-util.c b/ovn/lib/ovn-util.c index 402991761..de546245d 100644 --- a/ovn/lib/ovn-util.c +++ b/ovn/lib/ovn-util.c @@ -53,9 +53,12 @@ add_ipv6_netaddr(struct lport_addresses *laddrs, struct in6_addr addr, na->mask = ipv6_create_mask(plen); na->network = ipv6_addr_bitand(&addr, &na->mask); na->plen = plen; + in6_addr_solicited_node(&na->sn_addr, &addr); na->addr_s = xmalloc(INET6_ADDRSTRLEN); inet_ntop(AF_INET6, &addr, na->addr_s, INET6_ADDRSTRLEN); + na->sn_addr_s = xmalloc(INET6_ADDRSTRLEN); + inet_ntop(AF_INET6, &na->sn_addr, na->sn_addr_s, INET6_ADDRSTRLEN); na->network_s = xmalloc(INET6_ADDRSTRLEN); inet_ntop(AF_INET6, &na->network, na->network_s, INET6_ADDRSTRLEN); } @@ -189,6 +192,7 @@ destroy_lport_addresses(struct lport_addresses *laddrs) for (int i = 0; i < laddrs->n_ipv6_addrs; i++) { free(laddrs->ipv6_addrs[i].addr_s); + free(laddrs->ipv6_addrs[i].sn_addr_s); free(laddrs->ipv6_addrs[i].network_s); } free(laddrs->ipv6_addrs); diff --git a/ovn/lib/ovn-util.h b/ovn/lib/ovn-util.h index b550ece7b..e9f3ec239 100644 --- a/ovn/lib/ovn-util.h +++ b/ovn/lib/ovn-util.h @@ -34,10 +34,12 @@ struct ipv4_netaddr { struct ipv6_netaddr { struct in6_addr addr; /* fc00::1 */ struct in6_addr mask; /* ffff:ffff:ffff:ffff:: */ + struct in6_addr sn_addr; /* ff02:1:ff00::1 */ struct in6_addr network; /* fc00:: */ unsigned int plen; /* CIDR Prefix: 64 */ char *addr_s; /* "fc00::1" */ + char *sn_addr_s; /* "ff02:1:ff00::1" */ char *network_s; /* "fc00::" */ }; -- 2.20.1