From owner-freebsd-net@freebsd.org Thu Mar 14 00:32:43 2019 Return-Path: Delivered-To: freebsd-net@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A71D71545CD4 for ; Thu, 14 Mar 2019 00:32:43 +0000 (UTC) (envelope-from kempe@lysator.liu.se) Received: from mail.lysator.liu.se (mail.lysator.liu.se [IPv6:2001:6b0:17:f0a0::3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E2A1D76E3A for ; Thu, 14 Mar 2019 00:32:42 +0000 (UTC) (envelope-from kempe@lysator.liu.se) Received: from mail.lysator.liu.se (localhost [127.0.0.1]) by mail.lysator.liu.se (Postfix) with ESMTP id 5E7C140003 for ; Thu, 14 Mar 2019 01:32:39 +0100 (CET) Received: by mail.lysator.liu.se (Postfix, from userid 1004) id 486CC40004; Thu, 14 Mar 2019 01:32:38 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on bernadotte.lysator.liu.se X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=disabled version=3.4.1 X-Spam-Score: -1.0 Received: from drd1812.nothing.org (unknown [10.253.254.205]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.lysator.liu.se (Postfix) with ESMTPSA id 77A3740003 for ; Thu, 14 Mar 2019 01:32:38 +0100 (CET) To: freebsd-net@freebsd.org From: Andreas Kempe Subject: Infiniband: IPv6 neighbour discovery issues using Mellanox MT26418 between Linux and FreeBSD Openpgp: preference=signencrypt Autocrypt: addr=kempe@lysator.liu.se; keydata= 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 Message-ID: <19d07d9c-aa07-41a5-26fb-5fd2c9df99ca@lysator.liu.se> Date: Thu, 14 Mar 2019 01:32:38 +0100 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------2A3F9CC92A10F5FDE9880DF5" Content-Language: en-US X-Virus-Scanned: ClamAV using ClamSMTP X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Mar 2019 00:32:43 -0000 This is a multi-part message in MIME format. --------------2A3F9CC92A10F5FDE9880DF5 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hello! We have been trying to use IPv6 together with Mellanox MT26418 and are having issues with neighbour discovery responses not getting back to the requesting machine when connecting a Linux machine to a FreeBSD machine. The request is visible in tcpdump on both machines. On the responding machine, the outgoing response message is visible, but on the requesting machine, the response is not visible. It didn't matter whether the Linux box or the FreeBSD box was the requester. We applied the attached patch to ndp (since ndp is currently lacking support for link layer addresses larger than 6 bytes) to be able to set static neighbours and then the traffic got through. When running traffic between two FreeBSD hosts, it worked without any manual intervention. The Linux machine is running Gentoo with Linux 4.14.83 and was acting as the OpenSM master, while the FreeBSD machines are running 11.2-RELEASE-p9. Does anyone recognise these issues? Thank you for any assistance! Cordially, Andreas Kempe --------------2A3F9CC92A10F5FDE9880DF5 Content-Type: text/x-patch; name="ndp-ib-lladdr-fix.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="ndp-ib-lladdr-fix.patch" --- usr.sbin/ndp/ndp.c.old 2019-03-13 22:06:05.472614000 +0100 +++ usr.sbin/ndp/ndp.c 2019-03-14 01:10:30.049934000 +0100 @@ -388,7 +388,7 @@ register struct sockaddr_dl *sdl; register struct rt_msghdr *rtm =3D &(m_rtmsg.m_rtm); struct addrinfo hints, *res; - int gai_error; + int gai_error, l; u_char *ea; char *host =3D argv[0], *eaddr =3D argv[1]; =20 @@ -410,8 +410,9 @@ sin->sin6_scope_id =3D ((struct sockaddr_in6 *)res->ai_addr)->sin6_scope_id; ea =3D (u_char *)LLADDR(&sdl_m); - if (ndp_ether_aton(eaddr, ea) =3D=3D 0) - sdl_m.sdl_alen =3D 6; + l =3D ndp_ether_aton(eaddr, ea); + if (l !=3D -1) + sdl_m.sdl_alen =3D l; flags =3D expire_time =3D 0; while (argc-- > 0) { if (strncmp(argv[0], "temp", 4) =3D=3D 0) { @@ -804,17 +805,33 @@ static int ndp_ether_aton(char *a, u_char *n) { - int i, o[6]; + int i, l, o[20]; + char buf[60]; + char *p; =20 - i =3D sscanf(a, "%x:%x:%x:%x:%x:%x", &o[0], &o[1], &o[2], - &o[3], &o[4], &o[5]); - if (i !=3D 6) { - fprintf(stderr, "ndp: invalid Ethernet address '%s'\n", a); - return (1); + l =3D 0; + p =3D strncpy(buf, a, sizeof(buf)); + if (p < (buf + sizeof(buf))) { + for (p =3D strtok(buf, ":"); p; l++, p =3D strtok(NULL, ":")) { + if (l > 19) { + /* l =3D 0 to indicate an error */ + l =3D 0; + break; + } + + if (sscanf(p, "%x", &o[l]) !=3D 1) { + break; + } + } } - for (i =3D 0; i < 6; i++) + if (l > 20 || (l !=3D 6 && l !=3D 20)) { + fprintf(stderr, "ndp: invalid Ethernet address '%s'\n", + a); + return (-1); + } + for (i =3D 0; i < l; i++) n[i] =3D o[i]; - return (0); + return (l); } =20 static void --------------2A3F9CC92A10F5FDE9880DF5--