On Thu, Feb 13, 2025 at 2:54 PM Kuniyuki Iwashima kuniyu@amazon.com wrote:
[...]
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.
+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);
[...]
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?
- @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 {
[...]
+/* 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.