Commit 5ff4ff4f authored by Ido Schimmel's avatar Ido Schimmel Committed by David S. Miller

net: Add netif_is_vxlan()

Add the ability to determine whether a netdev is a VxLAN netdev by
calling the above mentioned function that checks the netdev's
rtnl_link_ops.

This will allow modules to identify netdev events involving a VxLAN
netdev and act accordingly. For example, drivers capable of VxLAN
offload will need to configure the underlying device when a VxLAN netdev
is being enslaved to an offloaded bridge.

Convert nfp to use the newly introduced helper.
Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
Reviewed-by: default avatarPetr Machata <petrm@mellanox.com>
Acked-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4cf178d7
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/inetdevice.h> #include <linux/inetdevice.h>
#include <net/netevent.h> #include <net/netevent.h>
#include <net/vxlan.h>
#include <linux/idr.h> #include <linux/idr.h>
#include <net/dst_metadata.h> #include <net/dst_metadata.h>
#include <net/arp.h> #include <net/arp.h>
...@@ -187,7 +188,7 @@ static bool nfp_tun_is_netdev_to_offload(struct net_device *netdev) ...@@ -187,7 +188,7 @@ static bool nfp_tun_is_netdev_to_offload(struct net_device *netdev)
return false; return false;
if (!strcmp(netdev->rtnl_link_ops->kind, "openvswitch")) if (!strcmp(netdev->rtnl_link_ops->kind, "openvswitch"))
return true; return true;
if (!strcmp(netdev->rtnl_link_ops->kind, "vxlan")) if (netif_is_vxlan(netdev))
return true; return true;
return false; return false;
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <linux/if_vlan.h> #include <linux/if_vlan.h>
#include <net/udp_tunnel.h> #include <net/udp_tunnel.h>
#include <net/dst_metadata.h> #include <net/dst_metadata.h>
#include <net/rtnetlink.h>
/* VXLAN protocol (RFC 7348) header: /* VXLAN protocol (RFC 7348) header:
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...@@ -402,4 +403,10 @@ static inline bool vxlan_addr_multicast(const union vxlan_addr *ipa) ...@@ -402,4 +403,10 @@ static inline bool vxlan_addr_multicast(const union vxlan_addr *ipa)
#endif /* IS_ENABLED(CONFIG_IPV6) */ #endif /* IS_ENABLED(CONFIG_IPV6) */
static inline bool netif_is_vxlan(const struct net_device *dev)
{
return dev->rtnl_link_ops &&
!strcmp(dev->rtnl_link_ops->kind, "vxlan");
}
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment