On Thu, Feb 13, 2025 at 2:54 PM Kuniyuki Iwashima <kuniyu@xxxxxxxxxx> 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.