Thread (34 messages) 34 messages, 6 authors, 2019-03-22

Re: [PATCH net-next v4 01/22] rtnetlink: provide permanent hardware address in RTM_NEWLINK

From: Michal Kubecek <hidden>
Date: 2019-03-22 06:32:16
Also in: lkml

On Thu, Mar 21, 2019 at 01:35:05PM -0700, Jakub Kicinski wrote:
On Thu, 21 Mar 2019 14:40:21 +0100 (CET), Michal Kubecek wrote:
quoted
Permanent hardware address of a network device was traditionally provided
via ethtool ioctl interface but as Jiri Pirko pointed out in a review of
ethtool netlink interface, rtnetlink is much more suitable for it so let's
add it to the RTM_NEWLINK message.

As permanent address is not modifiable, reject userspace requests
containing IFLA_PERM_ADDRESS attribute.

Note: we already provide permanent hardware address for bond slaves;
unfortunately we cannot drop that attribute for backward compatibility
reasons.

Signed-off-by: Michal Kubecek <redacted>
---
 include/uapi/linux/if_link.h | 1 +
 net/core/rtnetlink.c         | 4 ++++
 2 files changed, 5 insertions(+)
diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h
index 5b225ff63b48..351ef746b8b0 100644
--- a/include/uapi/linux/if_link.h
+++ b/include/uapi/linux/if_link.h
@@ -167,6 +167,7 @@ enum {
 	IFLA_NEW_IFINDEX,
 	IFLA_MIN_MTU,
 	IFLA_MAX_MTU,
+	IFLA_PERM_ADDRESS,
 	__IFLA_MAX
 };
 
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index a51cab95ba64..a72e8f4d777b 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -1026,6 +1026,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev,
 	       + nla_total_size(4)  /* IFLA_CARRIER_DOWN_COUNT */
 	       + nla_total_size(4)  /* IFLA_MIN_MTU */
 	       + nla_total_size(4)  /* IFLA_MAX_MTU */
+	       + nla_total_size(MAX_ADDR_LEN) /* IFLA_PERM_ADDRESS */
 	       + 0;
 }
 
@@ -1683,6 +1684,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb,
 	    nla_put_s32(skb, IFLA_NEW_IFINDEX, new_ifindex) < 0)
 		goto nla_put_failure;
 
+	if (nla_put(skb, IFLA_PERM_ADDRESS, dev->addr_len, dev->perm_addr))
Should we check the perm_addr is non-zero, i.e. it has been filled in
by the driver?
It makes sense logically but there is IMHO one practical problem: if we
omit the attribute when the address is zero (i.e. not set or maybe
a device which does not have permanent address), userspace won't be able
to distinguish this case from an older kernel not implementing the
attribute.

For the iproute2 patch, I plan to show the permanent address in the
output of "ip link show" only if it differs from current address.
I think it would be desirable to distinguish "current address is the
permanent one" from "no/unknown permanent address" but absence of the
attribute could also mean "kernel does not provide the information".

Michal
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help