mlx4_en: Replace ndo_add/del_vxlan_port with ndo_add/del_udp_enc_port
authorAlexander Duyck <aduyck@mirantis.com>
Thu, 16 Jun 2016 19:22:30 +0000 (12:22 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 18 Jun 2016 03:23:31 +0000 (20:23 -0700)
This change replaces the network device operations for adding or removing a
VXLAN port with operations that are more generically defined to be used for
any UDP offload port but provide a type.  As such by just adding a line to
verify that the offload type is VXLAN we can maintain the same
functionality.

In addition I updated the socket address family check so that instead of
excluding IPv6 we instead abort of type is not IPv4.  This makes much more
sense as we should only be supporting IPv4 outer addresses on this
hardware.

Signed-off-by: Alexander Duyck <aduyck@mirantis.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/Kconfig
drivers/net/ethernet/mellanox/mlx4/en_netdev.c
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h

index 9ca3734ebb6b84fdb5e58c0def6c461ed924ba5b..5098e7f21987c85bd82ce0c68403893290b7c706 100644 (file)
@@ -24,13 +24,6 @@ config MLX4_EN_DCB
 
          If unsure, set to Y
 
-config MLX4_EN_VXLAN
-       bool "VXLAN offloads Support"
-       default y
-       depends on MLX4_EN && VXLAN && !(MLX4_EN=y && VXLAN=m)
-       ---help---
-         Say Y here if you want to use VXLAN offloads in the driver.
-
 config MLX4_CORE
        tristate
        depends on PCI
index 973391bfe286b1143d189659e8298850c46d9126..8e318d21321f0cf4cdfb94a7d4c0288bb1ce8753 100644 (file)
@@ -1692,10 +1692,9 @@ int mlx4_en_start_port(struct net_device *dev)
        /* Schedule multicast task to populate multicast list */
        queue_work(mdev->workqueue, &priv->rx_mode_task);
 
-#ifdef CONFIG_MLX4_EN_VXLAN
        if (priv->mdev->dev->caps.tunnel_offload_mode == MLX4_TUNNEL_OFFLOAD_MODE_VXLAN)
-               vxlan_get_rx_port(dev);
-#endif
+               udp_tunnel_get_rx_info(dev);
+
        priv->port_up = true;
        netif_tx_start_all_queues(dev);
        netif_device_attach(dev);
@@ -2342,7 +2341,6 @@ static int mlx4_en_get_phys_port_id(struct net_device *dev,
        return 0;
 }
 
-#ifdef CONFIG_MLX4_EN_VXLAN
 static void mlx4_en_add_vxlan_offloads(struct work_struct *work)
 {
        int ret;
@@ -2392,15 +2390,19 @@ static void mlx4_en_del_vxlan_offloads(struct work_struct *work)
 }
 
 static void mlx4_en_add_vxlan_port(struct  net_device *dev,
-                                  sa_family_t sa_family, __be16 port)
+                                  struct udp_tunnel_info *ti)
 {
        struct mlx4_en_priv *priv = netdev_priv(dev);
+       __be16 port = ti->port;
        __be16 current_port;
 
-       if (priv->mdev->dev->caps.tunnel_offload_mode != MLX4_TUNNEL_OFFLOAD_MODE_VXLAN)
+       if (ti->type != UDP_TUNNEL_TYPE_VXLAN)
                return;
 
-       if (sa_family == AF_INET6)
+       if (ti->sa_family != AF_INET)
+               return;
+
+       if (priv->mdev->dev->caps.tunnel_offload_mode != MLX4_TUNNEL_OFFLOAD_MODE_VXLAN)
                return;
 
        current_port = priv->vxlan_port;
@@ -2415,15 +2417,19 @@ static void mlx4_en_add_vxlan_port(struct  net_device *dev,
 }
 
 static void mlx4_en_del_vxlan_port(struct  net_device *dev,
-                                  sa_family_t sa_family, __be16 port)
+                                  struct udp_tunnel_info *ti)
 {
        struct mlx4_en_priv *priv = netdev_priv(dev);
+       __be16 port = ti->port;
        __be16 current_port;
 
-       if (priv->mdev->dev->caps.tunnel_offload_mode != MLX4_TUNNEL_OFFLOAD_MODE_VXLAN)
+       if (ti->type != UDP_TUNNEL_TYPE_VXLAN)
                return;
 
-       if (sa_family == AF_INET6)
+       if (ti->sa_family != AF_INET)
+               return;
+
+       if (priv->mdev->dev->caps.tunnel_offload_mode != MLX4_TUNNEL_OFFLOAD_MODE_VXLAN)
                return;
 
        current_port = priv->vxlan_port;
@@ -2453,7 +2459,6 @@ static netdev_features_t mlx4_en_features_check(struct sk_buff *skb,
 
        return features;
 }
-#endif
 
 static int mlx4_en_set_tx_maxrate(struct net_device *dev, int queue_index, u32 maxrate)
 {
@@ -2506,11 +2511,9 @@ static const struct net_device_ops mlx4_netdev_ops = {
        .ndo_rx_flow_steer      = mlx4_en_filter_rfs,
 #endif
        .ndo_get_phys_port_id   = mlx4_en_get_phys_port_id,
-#ifdef CONFIG_MLX4_EN_VXLAN
-       .ndo_add_vxlan_port     = mlx4_en_add_vxlan_port,
-       .ndo_del_vxlan_port     = mlx4_en_del_vxlan_port,
+       .ndo_udp_tunnel_add     = mlx4_en_add_vxlan_port,
+       .ndo_udp_tunnel_del     = mlx4_en_del_vxlan_port,
        .ndo_features_check     = mlx4_en_features_check,
-#endif
        .ndo_set_tx_maxrate     = mlx4_en_set_tx_maxrate,
 };
 
@@ -2544,11 +2547,9 @@ static const struct net_device_ops mlx4_netdev_ops_master = {
        .ndo_rx_flow_steer      = mlx4_en_filter_rfs,
 #endif
        .ndo_get_phys_port_id   = mlx4_en_get_phys_port_id,
-#ifdef CONFIG_MLX4_EN_VXLAN
-       .ndo_add_vxlan_port     = mlx4_en_add_vxlan_port,
-       .ndo_del_vxlan_port     = mlx4_en_del_vxlan_port,
+       .ndo_udp_tunnel_add     = mlx4_en_add_vxlan_port,
+       .ndo_udp_tunnel_del     = mlx4_en_del_vxlan_port,
        .ndo_features_check     = mlx4_en_features_check,
-#endif
        .ndo_set_tx_maxrate     = mlx4_en_set_tx_maxrate,
 };
 
@@ -2839,10 +2840,8 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
        INIT_WORK(&priv->linkstate_task, mlx4_en_linkstate);
        INIT_DELAYED_WORK(&priv->stats_task, mlx4_en_do_get_stats);
        INIT_DELAYED_WORK(&priv->service_task, mlx4_en_service_task);
-#ifdef CONFIG_MLX4_EN_VXLAN
        INIT_WORK(&priv->vxlan_add_task, mlx4_en_add_vxlan_offloads);
        INIT_WORK(&priv->vxlan_del_task, mlx4_en_del_vxlan_offloads);
-#endif
 #ifdef CONFIG_RFS_ACCEL
        INIT_LIST_HEAD(&priv->filters);
        spin_lock_init(&priv->filters_lock);
index 467d47ed2c394093ca8be3fa0ce1f1a26dc1a038..6b3b0fefabadfed48b2af18b8ba295a8d16ece13 100644 (file)
@@ -545,10 +545,8 @@ struct mlx4_en_priv {
        struct work_struct linkstate_task;
        struct delayed_work stats_task;
        struct delayed_work service_task;
-#ifdef CONFIG_MLX4_EN_VXLAN
        struct work_struct vxlan_add_task;
        struct work_struct vxlan_del_task;
-#endif
        struct mlx4_en_perf_stats pstats;
        struct mlx4_en_pkt_stats pkstats;
        struct mlx4_en_counter_stats pf_stats;