From: Donald Sharp Date: Fri, 23 Feb 2018 19:10:09 +0000 (-0500) Subject: ip: Properly display AF_BRIDGE address information for neighbor events X-Git-Tag: v4.16.0~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=728eb8d00b3b87adcaf25b19cf5fb2dbb1965b60;p=thirdparty%2Fiproute2.git ip: Properly display AF_BRIDGE address information for neighbor events The vxlan driver when a neighbor add/delete event occurs sends NDA_DST filled with a union: union vxlan_addr { struct sockaddr_in sin; struct sockaddr_in6 sin6; struct sockaddr sa; }; This eventually calls rt_addr_n2a_r which had no handler for the AF_BRIDGE family and "???" was being printed. Add code to properly display this data when requested. Signed-off-by: Donald Sharp Signed-off-by: Stephen Hemminger --- diff --git a/lib/utils.c b/lib/utils.c index 8e15625e0..379739d61 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -983,6 +983,25 @@ const char *rt_addr_n2a_r(int af, int len, } case AF_PACKET: return ll_addr_n2a(addr, len, ARPHRD_VOID, buf, buflen); + case AF_BRIDGE: + { + const union { + struct sockaddr sa; + struct sockaddr_in sin; + struct sockaddr_in6 sin6; + } *sa = addr; + + switch (sa->sa.sa_family) { + case AF_INET: + return inet_ntop(AF_INET, &sa->sin.sin_addr, + buf, buflen); + case AF_INET6: + return inet_ntop(AF_INET6, &sa->sin6.sin6_addr, + buf, buflen); + } + + /* fallthrough */ + } default: return "???"; }