From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk0-f195.google.com ([209.85.220.195]:46903 "EHLO mail-qk0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751834AbeBVC1B (ORCPT ); Wed, 21 Feb 2018 21:27:01 -0500 Received: by mail-qk0-f195.google.com with SMTP id t13so4684282qkj.13 for ; Wed, 21 Feb 2018 18:27:01 -0800 (PST) From: Donald Sharp To: netdev@vger.kernel.org, stephen@networkplumber.org Subject: [PATCH iproute2] ip: Properly display AF_BRIDGE address information for neighbor events Date: Wed, 21 Feb 2018 21:26:50 -0500 Message-Id: <20180222022650.14316-1-sharpd@cumulusnetworks.com> Sender: netdev-owner@vger.kernel.org List-ID: 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 --- lib/utils.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/utils.c b/lib/utils.c index 24aeddd8..e01e18a7 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -1004,6 +1004,24 @@ 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: + { + unsigned short family = ((struct sockaddr *)addr)->sa_family; + struct sockaddr_in6 *sin6; + struct sockaddr_in *sin; + + switch(family) { + case AF_INET: + sin = (struct sockaddr_in *)addr; + return inet_ntop(AF_INET, &sin->sin_addr, buf, buflen); + case AF_INET6: + sin6 = (struct sockaddr_in6 *)addr; + return inet_ntop(AF_INET6, &sin6->sin6_addr, + buf, buflen); + } + + /* fallthrough */ + } default: return "???"; } -- 2.14.3