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.