fm10k: Replace ndo_add/del_vxlan_port with ndo_add/del_udp_enc_port
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 if VXLAN we can maintain the same functionality. Signed-off-by: Alexander Duyck <aduyck@mirantis.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
bde6b7cdae
commit
f174cdbe5b
|
@ -307,15 +307,4 @@ config FM10K
|
||||||
To compile this driver as a module, choose M here. The module
|
To compile this driver as a module, choose M here. The module
|
||||||
will be called fm10k. MSI-X interrupt support is required
|
will be called fm10k. MSI-X interrupt support is required
|
||||||
|
|
||||||
config FM10K_VXLAN
|
|
||||||
bool "Virtual eXtensible Local Area Network Support"
|
|
||||||
default n
|
|
||||||
depends on FM10K && VXLAN && !(FM10K=y && VXLAN=m)
|
|
||||||
---help---
|
|
||||||
This allows one to create VXLAN virtual interfaces that provide
|
|
||||||
Layer 2 Networks over Layer 3 Networks. VXLAN is often used
|
|
||||||
to tunnel virtual network infrastructure in virtualized environments.
|
|
||||||
Say Y here if you want to use Virtual eXtensible Local Area Network
|
|
||||||
(VXLAN) in the driver.
|
|
||||||
|
|
||||||
endif # NET_VENDOR_INTEL
|
endif # NET_VENDOR_INTEL
|
||||||
|
|
|
@ -20,9 +20,7 @@
|
||||||
|
|
||||||
#include "fm10k.h"
|
#include "fm10k.h"
|
||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
#ifdef CONFIG_FM10K_VXLAN
|
#include <net/udp_tunnel.h>
|
||||||
#include <net/vxlan.h>
|
|
||||||
#endif /* CONFIG_FM10K_VXLAN */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fm10k_setup_tx_resources - allocate Tx resources (Descriptors)
|
* fm10k_setup_tx_resources - allocate Tx resources (Descriptors)
|
||||||
|
@ -436,6 +434,7 @@ static void fm10k_restore_vxlan_port(struct fm10k_intfc *interface)
|
||||||
* @netdev: network interface device structure
|
* @netdev: network interface device structure
|
||||||
* @sa_family: Address family of new port
|
* @sa_family: Address family of new port
|
||||||
* @port: port number used for VXLAN
|
* @port: port number used for VXLAN
|
||||||
|
* @type: Enumerated value specifying udp encapsulation type
|
||||||
*
|
*
|
||||||
* This function is called when a new VXLAN interface has added a new port
|
* This function is called when a new VXLAN interface has added a new port
|
||||||
* number to the range that is currently in use for VXLAN. The new port
|
* number to the range that is currently in use for VXLAN. The new port
|
||||||
|
@ -444,18 +443,21 @@ static void fm10k_restore_vxlan_port(struct fm10k_intfc *interface)
|
||||||
* is always used as the VXLAN port number for offloads.
|
* is always used as the VXLAN port number for offloads.
|
||||||
**/
|
**/
|
||||||
static void fm10k_add_vxlan_port(struct net_device *dev,
|
static void fm10k_add_vxlan_port(struct net_device *dev,
|
||||||
sa_family_t sa_family, __be16 port) {
|
struct udp_tunnel_info *ti)
|
||||||
|
{
|
||||||
struct fm10k_intfc *interface = netdev_priv(dev);
|
struct fm10k_intfc *interface = netdev_priv(dev);
|
||||||
struct fm10k_vxlan_port *vxlan_port;
|
struct fm10k_vxlan_port *vxlan_port;
|
||||||
|
|
||||||
|
if (ti->type != UDP_TUNNEL_TYPE_VXLAN)
|
||||||
|
return;
|
||||||
/* only the PF supports configuring tunnels */
|
/* only the PF supports configuring tunnels */
|
||||||
if (interface->hw.mac.type != fm10k_mac_pf)
|
if (interface->hw.mac.type != fm10k_mac_pf)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* existing ports are pulled out so our new entry is always last */
|
/* existing ports are pulled out so our new entry is always last */
|
||||||
fm10k_vxlan_port_for_each(vxlan_port, interface) {
|
fm10k_vxlan_port_for_each(vxlan_port, interface) {
|
||||||
if ((vxlan_port->port == port) &&
|
if ((vxlan_port->port == ti->port) &&
|
||||||
(vxlan_port->sa_family == sa_family)) {
|
(vxlan_port->sa_family == ti->sa_family)) {
|
||||||
list_del(&vxlan_port->list);
|
list_del(&vxlan_port->list);
|
||||||
goto insert_tail;
|
goto insert_tail;
|
||||||
}
|
}
|
||||||
|
@ -465,8 +467,8 @@ static void fm10k_add_vxlan_port(struct net_device *dev,
|
||||||
vxlan_port = kmalloc(sizeof(*vxlan_port), GFP_ATOMIC);
|
vxlan_port = kmalloc(sizeof(*vxlan_port), GFP_ATOMIC);
|
||||||
if (!vxlan_port)
|
if (!vxlan_port)
|
||||||
return;
|
return;
|
||||||
vxlan_port->port = port;
|
vxlan_port->port = ti->port;
|
||||||
vxlan_port->sa_family = sa_family;
|
vxlan_port->sa_family = ti->sa_family;
|
||||||
|
|
||||||
insert_tail:
|
insert_tail:
|
||||||
/* add new port value to list */
|
/* add new port value to list */
|
||||||
|
@ -480,6 +482,7 @@ insert_tail:
|
||||||
* @netdev: network interface device structure
|
* @netdev: network interface device structure
|
||||||
* @sa_family: Address family of freed port
|
* @sa_family: Address family of freed port
|
||||||
* @port: port number used for VXLAN
|
* @port: port number used for VXLAN
|
||||||
|
* @type: Enumerated value specifying udp encapsulation type
|
||||||
*
|
*
|
||||||
* This function is called when a new VXLAN interface has freed a port
|
* This function is called when a new VXLAN interface has freed a port
|
||||||
* number from the range that is currently in use for VXLAN. The freed
|
* number from the range that is currently in use for VXLAN. The freed
|
||||||
|
@ -487,17 +490,20 @@ insert_tail:
|
||||||
* the port number for offloads.
|
* the port number for offloads.
|
||||||
**/
|
**/
|
||||||
static void fm10k_del_vxlan_port(struct net_device *dev,
|
static void fm10k_del_vxlan_port(struct net_device *dev,
|
||||||
sa_family_t sa_family, __be16 port) {
|
struct udp_tunnel_info *ti)
|
||||||
|
{
|
||||||
struct fm10k_intfc *interface = netdev_priv(dev);
|
struct fm10k_intfc *interface = netdev_priv(dev);
|
||||||
struct fm10k_vxlan_port *vxlan_port;
|
struct fm10k_vxlan_port *vxlan_port;
|
||||||
|
|
||||||
|
if (ti->type != UDP_TUNNEL_TYPE_VXLAN)
|
||||||
|
return;
|
||||||
if (interface->hw.mac.type != fm10k_mac_pf)
|
if (interface->hw.mac.type != fm10k_mac_pf)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* find the port in the list and free it */
|
/* find the port in the list and free it */
|
||||||
fm10k_vxlan_port_for_each(vxlan_port, interface) {
|
fm10k_vxlan_port_for_each(vxlan_port, interface) {
|
||||||
if ((vxlan_port->port == port) &&
|
if ((vxlan_port->port == ti->port) &&
|
||||||
(vxlan_port->sa_family == sa_family)) {
|
(vxlan_port->sa_family == ti->sa_family)) {
|
||||||
list_del(&vxlan_port->list);
|
list_del(&vxlan_port->list);
|
||||||
kfree(vxlan_port);
|
kfree(vxlan_port);
|
||||||
break;
|
break;
|
||||||
|
@ -553,10 +559,8 @@ int fm10k_open(struct net_device *netdev)
|
||||||
if (err)
|
if (err)
|
||||||
goto err_set_queues;
|
goto err_set_queues;
|
||||||
|
|
||||||
#ifdef CONFIG_FM10K_VXLAN
|
|
||||||
/* update VXLAN port configuration */
|
/* update VXLAN port configuration */
|
||||||
vxlan_get_rx_port(netdev);
|
udp_tunnel_get_rx_info(netdev);
|
||||||
#endif
|
|
||||||
|
|
||||||
fm10k_up(interface);
|
fm10k_up(interface);
|
||||||
|
|
||||||
|
@ -1375,8 +1379,8 @@ static const struct net_device_ops fm10k_netdev_ops = {
|
||||||
.ndo_set_vf_vlan = fm10k_ndo_set_vf_vlan,
|
.ndo_set_vf_vlan = fm10k_ndo_set_vf_vlan,
|
||||||
.ndo_set_vf_rate = fm10k_ndo_set_vf_bw,
|
.ndo_set_vf_rate = fm10k_ndo_set_vf_bw,
|
||||||
.ndo_get_vf_config = fm10k_ndo_get_vf_config,
|
.ndo_get_vf_config = fm10k_ndo_get_vf_config,
|
||||||
.ndo_add_vxlan_port = fm10k_add_vxlan_port,
|
.ndo_udp_tunnel_add = fm10k_add_vxlan_port,
|
||||||
.ndo_del_vxlan_port = fm10k_del_vxlan_port,
|
.ndo_udp_tunnel_del = fm10k_del_vxlan_port,
|
||||||
.ndo_dfwd_add_station = fm10k_dfwd_add_station,
|
.ndo_dfwd_add_station = fm10k_dfwd_add_station,
|
||||||
.ndo_dfwd_del_station = fm10k_dfwd_del_station,
|
.ndo_dfwd_del_station = fm10k_dfwd_del_station,
|
||||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||||
|
|
Loading…
Reference in New Issue