Message ID | 7ca53d743ffa48f671c35335473798c66d908d56.1383915401.git.mkubecek@suse.cz |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
On 11/8/2013 5:41 AM, Michal Kubecek wrote: > Introduce IFF_MACVLAN flag to recognize macvlan devices and two > helper functions, is_macvlan_dev() and macvlan_dev_real_dev(). > These work like similar functions for 802.1q VLAN devices. > > Signed-off-by: Michal Kubecek <mkubecek@suse.cz> > --- > drivers/net/macvlan.c | 2 +- > include/linux/if_macvlan.h | 26 ++++++++++++++++++++++++++ > include/uapi/linux/if.h | 1 + > 3 files changed, 28 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c > index 9bf46bd..3bdac0a 100644 > --- a/drivers/net/macvlan.c > +++ b/drivers/net/macvlan.c > @@ -685,7 +685,7 @@ void macvlan_common_setup(struct net_device *dev) > ether_setup(dev); > > dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING); > - dev->priv_flags |= IFF_UNICAST_FLT; > + dev->priv_flags |= IFF_UNICAST_FLT | IFF_MACVLAN; > dev->netdev_ops = &macvlan_netdev_ops; > dev->destructor = free_netdev; > dev->header_ops = &macvlan_hard_header_ops; > diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h > index ddd33fd..8f355f9 100644 > --- a/include/linux/if_macvlan.h > +++ b/include/linux/if_macvlan.h > @@ -118,4 +118,30 @@ extern int macvlan_link_register(struct rtnl_link_ops *ops); > extern netdev_tx_t macvlan_start_xmit(struct sk_buff *skb, > struct net_device *dev); > > +#if IS_ENABLED(CONFIG_MACVLAN) > +static inline bool is_macvlan_dev(struct net_device *dev) > +{ > + return dev->priv_flags & IFF_MACVLAN; > +} > + I just added this to netdevice.h here, +static inline bool netif_is_macvlan(struct net_device *dev) +{ + return dev->priv_flags & IFF_MACVLAN; +} + although I didn't wrap it in the IS_ENABLED if/else, but a bitmask in slow path probably doesn't matter. As a precedent none of the other netif_is_* bitmasks are wrapped like this. The patch is commit 2a47fa45d4dfbc54659d28de311a1f764b296a3c Author: John Fastabend <john.r.fastabend@intel.com> Date: Wed Nov 6 09:54:52 2013 -0800 ixgbe: enable l2 forwarding acceleration for macvlans I think you need to respin the patch with just the macvlan_dev_real_dev() part. Thanks, John -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Nov 08, 2013 at 07:06:15AM -0800, John Fastabend wrote: > > I just added this to netdevice.h here, > > +static inline bool netif_is_macvlan(struct net_device *dev) > +{ > + return dev->priv_flags & IFF_MACVLAN; > +} > + > > although I didn't wrap it in the IS_ENABLED if/else, but a > bitmask in slow path probably doesn't matter. As a precedent > none of the other netif_is_* bitmasks are wrapped like this. > > The patch is > > commit 2a47fa45d4dfbc54659d28de311a1f764b296a3c > Author: John Fastabend <john.r.fastabend@intel.com> > Date: Wed Nov 6 09:54:52 2013 -0800 > > ixgbe: enable l2 forwarding acceleration for macvlans > > > I think you need to respin the patch with just the > macvlan_dev_real_dev() part. My patch also conflicts with a6cc0cfa net: Add layer 2 hardware acceleration operations for macvlan devices which introduced the IFF_MACVLAN flags (but sets it in macvlan_common_newlink()). Both of yours are in net-next while mine are against net (as 2/2 is a bugfix) which is why I didn't notice them. I'm not sure what to do in such case. Michal Kubecek -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 9bf46bd..3bdac0a 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -685,7 +685,7 @@ void macvlan_common_setup(struct net_device *dev) ether_setup(dev); dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING); - dev->priv_flags |= IFF_UNICAST_FLT; + dev->priv_flags |= IFF_UNICAST_FLT | IFF_MACVLAN; dev->netdev_ops = &macvlan_netdev_ops; dev->destructor = free_netdev; dev->header_ops = &macvlan_hard_header_ops; diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h index ddd33fd..8f355f9 100644 --- a/include/linux/if_macvlan.h +++ b/include/linux/if_macvlan.h @@ -118,4 +118,30 @@ extern int macvlan_link_register(struct rtnl_link_ops *ops); extern netdev_tx_t macvlan_start_xmit(struct sk_buff *skb, struct net_device *dev); +#if IS_ENABLED(CONFIG_MACVLAN) +static inline bool is_macvlan_dev(struct net_device *dev) +{ + return dev->priv_flags & IFF_MACVLAN; +} + +static inline struct net_device * +macvlan_dev_real_dev(const struct net_device *dev) +{ + struct macvlan_dev *macvlan = netdev_priv(dev); + + return macvlan->lowerdev; +} +#else +static inline bool is_macvlan_dev(struct net_device *dev) +{ + return false; +} + +static inline struct net_device * +macvlan_dev_real_dev(const struct net_device *dev) +{ + return NULL; +} +#endif + #endif /* _LINUX_IF_MACVLAN_H */ diff --git a/include/uapi/linux/if.h b/include/uapi/linux/if.h index 1ec407b..d8e48f8 100644 --- a/include/uapi/linux/if.h +++ b/include/uapi/linux/if.h @@ -83,6 +83,7 @@ #define IFF_SUPP_NOFCS 0x80000 /* device supports sending custom FCS */ #define IFF_LIVE_ADDR_CHANGE 0x100000 /* device supports hardware address * change when it's running */ +#define IFF_MACVLAN 0x200000 /* macvlan device */ #define IF_GET_IFACE 0x0001 /* for querying only */
Introduce IFF_MACVLAN flag to recognize macvlan devices and two helper functions, is_macvlan_dev() and macvlan_dev_real_dev(). These work like similar functions for 802.1q VLAN devices. Signed-off-by: Michal Kubecek <mkubecek@suse.cz> --- drivers/net/macvlan.c | 2 +- include/linux/if_macvlan.h | 26 ++++++++++++++++++++++++++ include/uapi/linux/if.h | 1 + 3 files changed, 28 insertions(+), 1 deletion(-)