20 #include <linux/if_vlan.h>
21 #include <linux/kernel.h>
22 #include <linux/netdevice.h>
24 #include <linux/ethtool.h>
40 return netdev_priv(netdev);
56 stats->
rx_bytes = vport_stats.tx_bytes;
57 stats->
tx_bytes = vport_stats.rx_bytes;
70 if (!is_valid_ether_addr(addr->
sa_data))
86 static int internal_dev_open(
struct net_device *netdev)
88 netif_start_queue(netdev);
92 static int internal_dev_stop(
struct net_device *netdev)
94 netif_stop_queue(netdev);
98 static void internal_dev_getinfo(
struct net_device *netdev,
104 static const struct ethtool_ops internal_dev_ethtool_ops = {
105 .get_drvinfo = internal_dev_getinfo,
109 static int internal_dev_change_mtu(
struct net_device *netdev,
int new_mtu)
114 netdev->
mtu = new_mtu;
118 static void internal_dev_destructor(
struct net_device *dev)
127 .ndo_open = internal_dev_open,
128 .ndo_stop = internal_dev_stop,
129 .ndo_start_xmit = internal_dev_xmit,
130 .ndo_set_mac_address = internal_dev_mac_addr,
131 .ndo_change_mtu = internal_dev_change_mtu,
132 .ndo_get_stats64 = internal_dev_get_stats,
135 static void do_setup(
struct net_device *netdev)
139 netdev->
netdev_ops = &internal_dev_netdev_ops;
152 eth_hw_addr_random(netdev);
165 err = PTR_ERR(vport);
169 netdev_vport = netdev_vport_priv(vport);
172 parms->
name, do_setup);
173 if (!netdev_vport->
dev) {
175 goto error_free_vport;
178 dev_net_set(netdev_vport->
dev, ovs_dp_get_net(vport->
dp));
179 internal_dev = internal_dev_priv(netdev_vport->
dev);
188 goto error_free_netdev;
191 netif_start_queue(netdev_vport->
dev);
203 static void internal_dev_destroy(
struct vport *vport)
205 struct netdev_vport *netdev_vport = netdev_vport_priv(vport);
207 netif_stop_queue(netdev_vport->
dev);
211 unregister_netdevice(netdev_vport->
dev);
214 static int internal_dev_recv(
struct vport *vport,
struct sk_buff *skb)
236 .create = internal_dev_create,
237 .destroy = internal_dev_destroy,
240 .send = internal_dev_recv,
245 return netdev->
netdev_ops == &internal_dev_netdev_ops;
253 return internal_dev_priv(netdev)->vport;