From: shemminger Date: Tue, 21 Mar 2006 23:57:50 +0000 (+0000) Subject: The ip(8) command has a bug when dealing with IPoIB link layer X-Git-Tag: ss-060323~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7b5657545dc246ae37690d660597e8fa37040205;p=thirdparty%2Fiproute2.git The ip(8) command has a bug when dealing with IPoIB link layer addresses. Specifically it does not correctly handle the addition of new entries in the neighbor/arp table. For example, this command will fail: ip neigh add 192.168.0.138 lladdr 00:00:04:04:fe:80:00:00:00:00:00:00:00:01:73:00:00:00:8a:91 nud permanent dev ib0 An IPoIB link layer address is 20-bytes (see http://www.ietf.org/internet-drafts/draft-ietf-ipoib-ip-over-infiniband-09.txt, section 9.1.1). The command line parsing code expects link layer addresses to be a maximum of 16-bytes. Addresses over 16-bytes are truncated. --- diff --git a/ChangeLog b/ChangeLog index f9eb65209..27d4c1b0a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-03-21 James Lentini + + * Increase size of hw address allowed for ip neigh to allow + for IB. + 2006-03-14 Russell Stuart * Fix missing memset in tc sample diff --git a/ip/iplink.c b/ip/iplink.c index 77b1eeaef..ffc9f0632 100644 --- a/ip/iplink.c +++ b/ip/iplink.c @@ -216,7 +216,8 @@ static int get_address(const char *dev, int *htype) return me.sll_halen; } -static int parse_address(const char *dev, int hatype, int halen, char *lla, struct ifreq *ifr) +static int parse_address(const char *dev, int hatype, int halen, + char *lla, struct ifreq *ifr) { int alen; diff --git a/ip/ipneigh.c b/ip/ipneigh.c index 9e12befc3..249ee680b 100644 --- a/ip/ipneigh.c +++ b/ip/ipneigh.c @@ -165,7 +165,7 @@ static int ipneigh_modify(int cmd, int flags, int argc, char **argv) addattr_l(&req.n, sizeof(req), NDA_DST, &dst.data, dst.bytelen); if (lla && strcmp(lla, "null")) { - char llabuf[16]; + char llabuf[20]; int l; l = ll_addr_a2n(llabuf, sizeof(llabuf), lla);