Page MenuHomeFreeBSD

D38715.id117764.diff
No OneTemporary

D38715.id117764.diff

diff --git a/sys/compat/linux/linux_netlink.c b/sys/compat/linux/linux_netlink.c
--- a/sys/compat/linux/linux_netlink.c
+++ b/sys/compat/linux/linux_netlink.c
@@ -224,10 +224,46 @@
return (false);
}
+/*
+ * Replace a FreeBSD interface name by 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));
+}
+
+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 (-1);
+}
+
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;
@@ -238,7 +274,10 @@
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 == -1)
+ ret = nlmsg_copy_nla(nla, nw);
+ if (!ret)
return (false);
}
return (true);

File Metadata

Mime Type
text/plain
Expires
Wed, Nov 26, 6:15 PM (7 h, 4 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26221843
Default Alt Text
D38715.id117764.diff (1 KB)

Event Timeline