Thread (26 messages) 26 messages, 3 authors, 2025-02-14

Re: [PATCH net-next v9 02/11] rtnetlink: Pack newlink() params into struct

From: Xiao Liang <hidden>
Date: 2025-02-13 08:36:41
Also in: batman, bpf, bridge, linux-can, linux-kselftest, linux-rdma, linux-wireless, lkml

On Thu, Feb 13, 2025 at 2:54 PM Kuniyuki Iwashima [off-list ref] wrote:
[...]
quoted
diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h
index 523025106a64..0f7281e3e448 100644
--- a/include/linux/if_macvlan.h
+++ b/include/linux/if_macvlan.h
@@ -59,8 +59,10 @@ static inline void macvlan_count_rx(const struct macvlan_dev *vlan,

 extern void macvlan_common_setup(struct net_device *dev);

-extern int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
-                               struct nlattr *tb[], struct nlattr *data[],
+struct rtnl_newlink_params;
You can just include <net/rtnetlink.h> and remove it from .c
files, then this forward declaration will be unnecessary.
OK. Was not sure if it's desirable to include include/net files from
include/linux.
quoted
+
+extern int macvlan_common_newlink(struct net_device *dev,
+                               struct rtnl_newlink_params *params,
                                struct netlink_ext_ack *extack);

 extern void macvlan_dellink(struct net_device *dev, struct list_head *head);

[...]
quoted
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h
index bc0069a8b6ea..00c086ca0c11 100644
--- a/include/net/rtnetlink.h
+++ b/include/net/rtnetlink.h
@@ -69,6 +69,42 @@ static inline int rtnl_msg_family(const struct nlmsghdr *nlh)
              return AF_UNSPEC;
 }

+/**
+ *   struct rtnl_newlink_params - parameters of rtnl_link_ops::newlink()
The '\t' after '*' should be single '\s'.

Same for lines below.
This is copied from other structs in the same file. Should I change it?
quoted
+ *
+ *   @net: Netns of interest
+ *   @src_net: Source netns of rtnetlink socket
+ *   @link_net: Link netns by IFLA_LINK_NETNSID, NULL if not specified
+ *   @peer_net: Peer netns
+ *   @tb: IFLA_* attributes
+ *   @data: IFLA_INFO_DATA attributes
+ */
+struct rtnl_newlink_params {
[...]
quoted
+/* Get effective link netns from newlink params. Generally, this is link_net
+ * and falls back to src_net. But for compatibility, a driver may * choose to
+ * use dev_net(dev) instead.
+ */
+static inline struct net *rtnl_newlink_link_net(struct rtnl_newlink_params *p)
+{
+     return p->link_net ? : p->src_net;
+}
+
+/* Get peer netns from newlink params. Fallback to link netns if peer netns is
+ * not specified explicitly.
+ */
+static inline struct net *rtnl_newlink_peer_net(struct rtnl_newlink_params *p)
+{
+     return p->peer_net ? : rtnl_newlink_link_net(p);
+}
These helpers should belong to patch 2 ?
I was trying to split API and driver changes. Can move this to
next patch if it's better.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help