diff options
Diffstat (limited to 'net/openvswitch/vport-internal_dev.c')
| -rw-r--r-- | net/openvswitch/vport-internal_dev.c | 24 | 
1 files changed, 22 insertions, 2 deletions
diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c index 789af9280e77..84516126e5f3 100644 --- a/net/openvswitch/vport-internal_dev.c +++ b/net/openvswitch/vport-internal_dev.c @@ -26,6 +26,7 @@  #include <net/dst.h>  #include <net/xfrm.h> +#include <net/rtnetlink.h>  #include "datapath.h"  #include "vport-internal_dev.h" @@ -121,6 +122,10 @@ static const struct net_device_ops internal_dev_netdev_ops = {  	.ndo_get_stats64 = internal_dev_get_stats,  }; +static struct rtnl_link_ops internal_dev_link_ops __read_mostly = { +	.kind = "openvswitch", +}; +  static void do_setup(struct net_device *netdev)  {  	ether_setup(netdev); @@ -131,14 +136,18 @@ static void do_setup(struct net_device *netdev)  	netdev->priv_flags |= IFF_LIVE_ADDR_CHANGE;  	netdev->destructor = internal_dev_destructor;  	netdev->ethtool_ops = &internal_dev_ethtool_ops; +	netdev->rtnl_link_ops = &internal_dev_link_ops;  	netdev->tx_queue_len = 0;  	netdev->features = NETIF_F_LLTX | NETIF_F_SG | NETIF_F_FRAGLIST | -			   NETIF_F_HIGHDMA | NETIF_F_HW_CSUM | NETIF_F_GSO_SOFTWARE; +			   NETIF_F_HIGHDMA | NETIF_F_HW_CSUM | +			   NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ENCAP_ALL;  	netdev->vlan_features = netdev->features; +	netdev->hw_enc_features = netdev->features;  	netdev->features |= NETIF_F_HW_VLAN_CTAG_TX;  	netdev->hw_features = netdev->features & ~NETIF_F_LLTX; +  	eth_hw_addr_random(netdev);  } @@ -159,7 +168,8 @@ static struct vport *internal_dev_create(const struct vport_parms *parms)  	netdev_vport = netdev_vport_priv(vport);  	netdev_vport->dev = alloc_netdev(sizeof(struct internal_dev), -					 parms->name, do_setup); +					 parms->name, NET_NAME_UNKNOWN, +					 do_setup);  	if (!netdev_vport->dev) {  		err = -ENOMEM;  		goto error_free_vport; @@ -248,3 +258,13 @@ struct vport *ovs_internal_dev_get_vport(struct net_device *netdev)  	return internal_dev_priv(netdev)->vport;  } + +int ovs_internal_dev_rtnl_link_register(void) +{ +	return rtnl_link_register(&internal_dev_link_ops); +} + +void ovs_internal_dev_rtnl_link_unregister(void) +{ +	rtnl_link_unregister(&internal_dev_link_ops); +}  |