|
@@ -24,12 +24,7 @@
|
|
|
#include <linux/netdev_features.h>
|
|
|
#include <linux/udp.h>
|
|
|
#include <linux/tcp.h>
|
|
|
-#ifdef CONFIG_QEDE_VXLAN
|
|
|
-#include <net/vxlan.h>
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_QEDE_GENEVE
|
|
|
-#include <net/geneve.h>
|
|
|
-#endif
|
|
|
+#include <net/udp_tunnel.h>
|
|
|
#include <linux/ip.h>
|
|
|
#include <net/ipv6.h>
|
|
|
#include <net/tcp.h>
|
|
@@ -2112,75 +2107,75 @@ int qede_set_features(struct net_device *dev, netdev_features_t features)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_QEDE_VXLAN
|
|
|
-static void qede_add_vxlan_port(struct net_device *dev,
|
|
|
- sa_family_t sa_family, __be16 port)
|
|
|
+static void qede_udp_tunnel_add(struct net_device *dev,
|
|
|
+ struct udp_tunnel_info *ti)
|
|
|
{
|
|
|
struct qede_dev *edev = netdev_priv(dev);
|
|
|
- u16 t_port = ntohs(port);
|
|
|
+ u16 t_port = ntohs(ti->port);
|
|
|
|
|
|
- if (edev->vxlan_dst_port)
|
|
|
- return;
|
|
|
+ switch (ti->type) {
|
|
|
+ case UDP_TUNNEL_TYPE_VXLAN:
|
|
|
+ if (edev->vxlan_dst_port)
|
|
|
+ return;
|
|
|
|
|
|
- edev->vxlan_dst_port = t_port;
|
|
|
+ edev->vxlan_dst_port = t_port;
|
|
|
|
|
|
- DP_VERBOSE(edev, QED_MSG_DEBUG, "Added vxlan port=%d", t_port);
|
|
|
+ DP_VERBOSE(edev, QED_MSG_DEBUG, "Added vxlan port=%d",
|
|
|
+ t_port);
|
|
|
|
|
|
- set_bit(QEDE_SP_VXLAN_PORT_CONFIG, &edev->sp_flags);
|
|
|
- schedule_delayed_work(&edev->sp_task, 0);
|
|
|
-}
|
|
|
+ set_bit(QEDE_SP_VXLAN_PORT_CONFIG, &edev->sp_flags);
|
|
|
+ break;
|
|
|
+ case UDP_TUNNEL_TYPE_GENEVE:
|
|
|
+ if (edev->geneve_dst_port)
|
|
|
+ return;
|
|
|
|
|
|
-static void qede_del_vxlan_port(struct net_device *dev,
|
|
|
- sa_family_t sa_family, __be16 port)
|
|
|
-{
|
|
|
- struct qede_dev *edev = netdev_priv(dev);
|
|
|
- u16 t_port = ntohs(port);
|
|
|
+ edev->geneve_dst_port = t_port;
|
|
|
|
|
|
- if (t_port != edev->vxlan_dst_port)
|
|
|
+ DP_VERBOSE(edev, QED_MSG_DEBUG, "Added geneve port=%d",
|
|
|
+ t_port);
|
|
|
+ set_bit(QEDE_SP_GENEVE_PORT_CONFIG, &edev->sp_flags);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
return;
|
|
|
+ }
|
|
|
|
|
|
- edev->vxlan_dst_port = 0;
|
|
|
-
|
|
|
- DP_VERBOSE(edev, QED_MSG_DEBUG, "Deleted vxlan port=%d", t_port);
|
|
|
-
|
|
|
- set_bit(QEDE_SP_VXLAN_PORT_CONFIG, &edev->sp_flags);
|
|
|
schedule_delayed_work(&edev->sp_task, 0);
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
-#ifdef CONFIG_QEDE_GENEVE
|
|
|
-static void qede_add_geneve_port(struct net_device *dev,
|
|
|
- sa_family_t sa_family, __be16 port)
|
|
|
+static void qede_udp_tunnel_del(struct net_device *dev,
|
|
|
+ struct udp_tunnel_info *ti)
|
|
|
{
|
|
|
struct qede_dev *edev = netdev_priv(dev);
|
|
|
- u16 t_port = ntohs(port);
|
|
|
+ u16 t_port = ntohs(ti->port);
|
|
|
|
|
|
- if (edev->geneve_dst_port)
|
|
|
- return;
|
|
|
+ switch (ti->type) {
|
|
|
+ case UDP_TUNNEL_TYPE_VXLAN:
|
|
|
+ if (t_port != edev->vxlan_dst_port)
|
|
|
+ return;
|
|
|
|
|
|
- edev->geneve_dst_port = t_port;
|
|
|
+ edev->vxlan_dst_port = 0;
|
|
|
|
|
|
- DP_VERBOSE(edev, QED_MSG_DEBUG, "Added geneve port=%d", t_port);
|
|
|
- set_bit(QEDE_SP_GENEVE_PORT_CONFIG, &edev->sp_flags);
|
|
|
- schedule_delayed_work(&edev->sp_task, 0);
|
|
|
-}
|
|
|
+ DP_VERBOSE(edev, QED_MSG_DEBUG, "Deleted vxlan port=%d",
|
|
|
+ t_port);
|
|
|
|
|
|
-static void qede_del_geneve_port(struct net_device *dev,
|
|
|
- sa_family_t sa_family, __be16 port)
|
|
|
-{
|
|
|
- struct qede_dev *edev = netdev_priv(dev);
|
|
|
- u16 t_port = ntohs(port);
|
|
|
+ set_bit(QEDE_SP_VXLAN_PORT_CONFIG, &edev->sp_flags);
|
|
|
+ break;
|
|
|
+ case UDP_TUNNEL_TYPE_GENEVE:
|
|
|
+ if (t_port != edev->geneve_dst_port)
|
|
|
+ return;
|
|
|
|
|
|
- if (t_port != edev->geneve_dst_port)
|
|
|
- return;
|
|
|
+ edev->geneve_dst_port = 0;
|
|
|
|
|
|
- edev->geneve_dst_port = 0;
|
|
|
+ DP_VERBOSE(edev, QED_MSG_DEBUG, "Deleted geneve port=%d",
|
|
|
+ t_port);
|
|
|
+ set_bit(QEDE_SP_GENEVE_PORT_CONFIG, &edev->sp_flags);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- DP_VERBOSE(edev, QED_MSG_DEBUG, "Deleted geneve port=%d", t_port);
|
|
|
- set_bit(QEDE_SP_GENEVE_PORT_CONFIG, &edev->sp_flags);
|
|
|
schedule_delayed_work(&edev->sp_task, 0);
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
static const struct net_device_ops qede_netdev_ops = {
|
|
|
.ndo_open = qede_open,
|
|
@@ -2204,14 +2199,8 @@ static const struct net_device_ops qede_netdev_ops = {
|
|
|
.ndo_get_vf_config = qede_get_vf_config,
|
|
|
.ndo_set_vf_rate = qede_set_vf_rate,
|
|
|
#endif
|
|
|
-#ifdef CONFIG_QEDE_VXLAN
|
|
|
- .ndo_add_vxlan_port = qede_add_vxlan_port,
|
|
|
- .ndo_del_vxlan_port = qede_del_vxlan_port,
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_QEDE_GENEVE
|
|
|
- .ndo_add_geneve_port = qede_add_geneve_port,
|
|
|
- .ndo_del_geneve_port = qede_del_geneve_port,
|
|
|
-#endif
|
|
|
+ .ndo_udp_tunnel_add = qede_udp_tunnel_add,
|
|
|
+ .ndo_udp_tunnel_del = qede_udp_tunnel_del,
|
|
|
};
|
|
|
|
|
|
/* -------------------------------------------------------------------------
|
|
@@ -3579,12 +3568,8 @@ static int qede_open(struct net_device *ndev)
|
|
|
if (rc)
|
|
|
return rc;
|
|
|
|
|
|
-#ifdef CONFIG_QEDE_VXLAN
|
|
|
- vxlan_get_rx_port(ndev);
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_QEDE_GENEVE
|
|
|
- geneve_get_rx_port(ndev);
|
|
|
-#endif
|
|
|
+ udp_tunnel_get_rx_info(ndev);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|