From nobody Mon Feb 27 18:16:56 2023
X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
	by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4PQTGw6xLYz3vRHw;
	Mon, 27 Feb 2023 18:16:56 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256
	 client-signature RSA-PSS (4096 bits) client-digest SHA256)
	(Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK))
	by mx1.freebsd.org (Postfix) with ESMTPS id 4PQTGw5zFqz3xVN;
	Mon, 27 Feb 2023 18:16:56 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1677521816;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=PtCUK7v+qsEUMFqEMsil2yTIV+pVCxCP/5p7kqXtWcU=;
	b=sYQhbWsck2xbMrYZfu1OwSUwwJDxOCm3chaNhevsqv/TYk7Pw6f7UvwgsJ0SjPTO3OcLBj
	cy0D75SmO1zRR4GIHVQ2npoO5M/1LTzDKxbpA6W/POcisnzwgOSx1TT3OcQSLtrwxCAs/Q
	fKAXigBZN7/nX3/H4Pldkouvu3m/pVK5uEN3ktvWDv+XJ2nS/V+V7jIg5HKqxRvZsYYkw9
	feOio8HmvnjShP998Lo9qmVsUUHFJirgJyW5FJ+NnWKrr/gOcFhIkOY6MR2vFsBLZERjOB
	03Q+ZC+j6bwU/XCH/1fGJJFtdJDRx0mt3VqokqMETUk+CaNapn4OXoFUW0a/TA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1677521816;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=PtCUK7v+qsEUMFqEMsil2yTIV+pVCxCP/5p7kqXtWcU=;
	b=fptC6QoD8Q5MGGB0vFjWQ5shJYBWzJJea1ri39WVIU1/Gkjopp8JJKAFnb7LsEqQLrlC0z
	VsAH6ik4fSDLmz6zLCC4IbU8olRb03CclwzEg+xKdeRhudZGnDKzIw5wkFQywLedrrS1Py
	4qPDTXi1XkQp9ZFYLMsSc11Nk0h884tXLHOSx3IuoRa13xu3MJYiob5HzYrlPoBCYpBC4E
	eI2onH25RrdS7Tr1VqZxBNE5hV+9/qSgk7JJmJYVugr3pywWMnFQ5iRUbV2PnPtSWGCxlP
	DY+Wv1M/0OMnNyEEMAVi67we9qZ/PfojqTCYnoOa/nE7FyYE+c5Y+PjPKIucGg==
ARC-Authentication-Results: i=1;
	mx1.freebsd.org;
	none
ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1677521816; a=rsa-sha256; cv=none;
	b=CSU3PwfRIeLxu9DZ8CUuo3LkKs5ryoWcxup1E1Uj8hbyHzoYZ4W15UF0ZgTDbTxejx1vyg
	aEcaG5U4Fk0+hwBMYzyMJowkYLniqImQOFW3yKvTjztPTsnKULDHL43s2cj9/ClO2SQ/jw
	Twki/hFouNzSnXoarOAmpiPc1TMrW81Puj8kh+oh9B35iSAG7ygKL9ALVRUOVw2k2Vd6oV
	x+d49C0RN/DW0IDBEz1Uz+AYGah1Z7wMngXJQem9ueJ2Rp4MYpGn02MXFsheGuDRbJ74E2
	E17WjhAgFAt99/1zh7BmqtoOA2gp5kweZl/f90IR2wpzxsZrWFt4PqMNgobbFg==
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
	(Client did not present a certificate)
	by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4PQTGw4kC4zbq7;
	Mon, 27 Feb 2023 18:16:56 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
	by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 31RIGuQk034167;
	Mon, 27 Feb 2023 18:16:56 GMT
	(envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
	by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 31RIGuWS034166;
	Mon, 27 Feb 2023 18:16:56 GMT
	(envelope-from git)
Date: Mon, 27 Feb 2023 18:16:56 GMT
Message-Id: <202302271816.31RIGuWS034166@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
        dev-commits-src-branches@FreeBSD.org
From: Dmitry Chagin <dchagin@FreeBSD.org>
Subject: git: 9006cd0fd543 - releng/13.2 - linux(4): Fixup the interface name translation in netlink
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
Sender: owner-dev-commits-src-branches@freebsd.org
X-BeenThere: dev-commits-src-branches@freebsd.org
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: dchagin
X-Git-Repository: src
X-Git-Refname: refs/heads/releng/13.2
X-Git-Reftype: branch
X-Git-Commit: 9006cd0fd543379c13de8fe274abc0f71710e93a
Auto-Submitted: auto-generated
X-ThisMailContainsUnwantedMimeParts: N

The branch releng/13.2 has been updated by dchagin:

URL: https://cgit.FreeBSD.org/src/commit/?id=9006cd0fd543379c13de8fe274abc0f71710e93a

commit 9006cd0fd543379c13de8fe274abc0f71710e93a
Author:     Dmitry Chagin <dchagin@FreeBSD.org>
AuthorDate: 2023-02-23 08:01:18 +0000
Commit:     Dmitry Chagin <dchagin@FreeBSD.org>
CommitDate: 2023-02-27 18:16:36 +0000

    linux(4): Fixup the interface name translation in netlink
    
    Netlink should translate a FreeBSD interface name to a Linux
    interface name.
    
    Approved by:            re (cperciva)
    Reviewed by:            melifaro
    Differential Revision:  https://reviews.freebsd.org/D38715
    MFC after:              3 days
    
    (cherry picked from commit e55e4a6ba3f4cd31d47b74574ea7370d5ab14b48)
    (cherry picked from commit 123ca9ab11896f356245537ee41207fb6943fccd)
---
 sys/compat/linux/linux_netlink.c | 48 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/sys/compat/linux/linux_netlink.c b/sys/compat/linux/linux_netlink.c
index 4cf872b3722d..86b861fdbc47 100644
--- a/sys/compat/linux/linux_netlink.c
+++ b/sys/compat/linux/linux_netlink.c
@@ -220,10 +220,52 @@ nlmsg_copy_nla(const struct nlattr *nla_orig, struct nl_writer *nw)
 	return (false);
 }
 
+/*
+ * Translate a FreeBSD interface name to a Linux interface name.
+ */
+static bool
+nlmsg_translate_ifname_nla(struct nlattr *nla, struct nl_writer *nw)
+{
+	char ifname[LINUX_IFNAMSIZ];
+
+	if (ifname_bsd_to_linux_name((char *)(nla + 1), ifname,
+	    sizeof(ifname)) <= 0)
+		return (false);
+	return (nlattr_add_string(nw, IFLA_IFNAME, ifname));
+}
+
+#define	LINUX_NLA_UNHANDLED	-1
+/*
+ * Translate a FreeBSD attribute to a Linux attribute.
+ * Returns LINUX_NLA_UNHANDLED when the attribute is not processed
+ * and the caller must take care of it, otherwise the result is returned.
+ */
+static int
+nlmsg_translate_all_nla(struct nlmsghdr *hdr, struct nlattr *nla,
+    struct nl_writer *nw)
+{
+
+	switch (hdr->nlmsg_type) {
+	case NL_RTM_NEWLINK:
+	case NL_RTM_DELLINK:
+	case NL_RTM_GETLINK:
+		switch (nla->nla_type) {
+		case IFLA_IFNAME:
+			return (nlmsg_translate_ifname_nla(nla, nw));
+		default:
+			break;
+		}
+	default:
+		break;
+	}
+	return (LINUX_NLA_UNHANDLED);
+}
+
 static bool
 nlmsg_copy_all_nla(struct nlmsghdr *hdr, int raw_hdrlen, struct nl_writer *nw)
 {
 	struct nlattr *nla;
+	int ret;
 
 	int hdrlen = NETLINK_ALIGN(raw_hdrlen);
 	int attrs_len = hdr->nlmsg_len - sizeof(struct nlmsghdr) - hdrlen;
@@ -234,11 +276,15 @@ nlmsg_copy_all_nla(struct nlmsghdr *hdr, int raw_hdrlen, struct nl_writer *nw)
 		if (nla->nla_len < sizeof(struct nlattr)) {
 			return (false);
 		}
-		if (!nlmsg_copy_nla(nla, nw))
+		ret = nlmsg_translate_all_nla(hdr, nla, nw);
+		if (ret == LINUX_NLA_UNHANDLED)
+			ret = nlmsg_copy_nla(nla, nw);
+		if (!ret)
 			return (false);
 	}
 	return (true);
 }
+#undef LINUX_NLA_UNHANDLED
 
 static unsigned int
 rtnl_if_flags_to_linux(unsigned int if_flags)