summaryrefslogtreecommitdiffstats
path: root/drivers/net/ipvlan
diff options
context:
space:
mode:
authorPaolo Abeni <pabeni@redhat.com>2018-03-06 04:56:31 -0500
committerDavid S. Miller <davem@davemloft.net>2018-03-07 12:38:24 -0500
commit1ec54cb44e6731c3cb251bcf9251d65a4b4f6306 (patch)
tree6ba70c6dc5096396e17e71e6a620eeccfb108277 /drivers/net/ipvlan
parentb2b19494b80adc9d0e1e5631a69a24af47a5502c (diff)
net: unpollute priv_flags space
the ipvlan device driver defines and uses 2 bits inside the priv_flags net_device field. Such bits and the related helper are used only inside the ipvlan device driver, and the core networking does not need to be aware of them. This change moves netif_is_ipvlan* helper in the ipvlan driver and re-implement them looking for ipvlan specific symbols instead of using priv_flags. Overall this frees two bits inside priv_flags - and move the following ones to avoid gaps - without any intended functional change. Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ipvlan')
-rw-r--r--drivers/net/ipvlan/ipvlan.h6
-rw-r--r--drivers/net/ipvlan/ipvlan_main.c10
2 files changed, 12 insertions, 4 deletions
diff --git a/drivers/net/ipvlan/ipvlan.h b/drivers/net/ipvlan/ipvlan.h
index a115f12bf130..c818b9bdab6e 100644
--- a/drivers/net/ipvlan/ipvlan.h
+++ b/drivers/net/ipvlan/ipvlan.h
@@ -177,4 +177,10 @@ int ipvlan_link_new(struct net *src_net, struct net_device *dev,
177void ipvlan_link_delete(struct net_device *dev, struct list_head *head); 177void ipvlan_link_delete(struct net_device *dev, struct list_head *head);
178void ipvlan_link_setup(struct net_device *dev); 178void ipvlan_link_setup(struct net_device *dev);
179int ipvlan_link_register(struct rtnl_link_ops *ops); 179int ipvlan_link_register(struct rtnl_link_ops *ops);
180
181static inline bool netif_is_ipvlan_port(const struct net_device *dev)
182{
183 return dev->rx_handler == ipvlan_handle_frame;
184}
185
180#endif /* __IPVLAN_H */ 186#endif /* __IPVLAN_H */
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
index 4cbe9e27287d..23fd5ab180e8 100644
--- a/drivers/net/ipvlan/ipvlan_main.c
+++ b/drivers/net/ipvlan/ipvlan_main.c
@@ -129,7 +129,6 @@ static int ipvlan_port_create(struct net_device *dev)
129 if (err) 129 if (err)
130 goto err; 130 goto err;
131 131
132 dev->priv_flags |= IFF_IPVLAN_MASTER;
133 return 0; 132 return 0;
134 133
135err: 134err:
@@ -142,7 +141,6 @@ static void ipvlan_port_destroy(struct net_device *dev)
142 struct ipvl_port *port = ipvlan_port_get_rtnl(dev); 141 struct ipvl_port *port = ipvlan_port_get_rtnl(dev);
143 struct sk_buff *skb; 142 struct sk_buff *skb;
144 143
145 dev->priv_flags &= ~IFF_IPVLAN_MASTER;
146 if (port->mode == IPVLAN_MODE_L3S) { 144 if (port->mode == IPVLAN_MODE_L3S) {
147 dev->priv_flags &= ~IFF_L3MDEV_MASTER; 145 dev->priv_flags &= ~IFF_L3MDEV_MASTER;
148 ipvlan_unregister_nf_hook(dev_net(dev)); 146 ipvlan_unregister_nf_hook(dev_net(dev));
@@ -423,6 +421,12 @@ static const struct header_ops ipvlan_header_ops = {
423 .cache_update = eth_header_cache_update, 421 .cache_update = eth_header_cache_update,
424}; 422};
425 423
424static bool netif_is_ipvlan(const struct net_device *dev)
425{
426 /* both ipvlan and ipvtap devices use the same netdev_ops */
427 return dev->netdev_ops == &ipvlan_netdev_ops;
428}
429
426static int ipvlan_ethtool_get_link_ksettings(struct net_device *dev, 430static int ipvlan_ethtool_get_link_ksettings(struct net_device *dev,
427 struct ethtool_link_ksettings *cmd) 431 struct ethtool_link_ksettings *cmd)
428{ 432{
@@ -600,8 +604,6 @@ int ipvlan_link_new(struct net *src_net, struct net_device *dev,
600 */ 604 */
601 memcpy(dev->dev_addr, phy_dev->dev_addr, ETH_ALEN); 605 memcpy(dev->dev_addr, phy_dev->dev_addr, ETH_ALEN);
602 606
603 dev->priv_flags |= IFF_IPVLAN_SLAVE;
604
605 err = register_netdevice(dev); 607 err = register_netdevice(dev);
606 if (err < 0) 608 if (err < 0)
607 return err; 609 return err;