X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Fvport-netdev.c;h=727194e3e767fd1671b7cc53254265c0fc453d9b;hb=0cc70daec76f59571d56a96bd86a960e18d13e9f;hp=78f149341ad3353defa2aaf264319ed2cb6e52a9;hpb=85b20fd6ee585f462e012fbcc7f966a81edab2ed;p=sliver-openvswitch.git diff --git a/datapath/vport-netdev.c b/datapath/vport-netdev.c index 78f149341..727194e3e 100644 --- a/datapath/vport-netdev.c +++ b/datapath/vport-netdev.c @@ -193,29 +193,12 @@ static void netdev_destroy(struct vport *vport) call_rcu(&netdev_vport->rcu, free_port_rcu); } -int ovs_netdev_set_addr(struct vport *vport, const unsigned char *addr) -{ - struct netdev_vport *netdev_vport = netdev_vport_priv(vport); - struct sockaddr sa; - - sa.sa_family = ARPHRD_ETHER; - memcpy(sa.sa_data, addr, ETH_ALEN); - - return dev_set_mac_address(netdev_vport->dev, &sa); -} - const char *ovs_netdev_get_name(const struct vport *vport) { const struct netdev_vport *netdev_vport = netdev_vport_priv(vport); return netdev_vport->dev->name; } -const unsigned char *ovs_netdev_get_addr(const struct vport *vport) -{ - const struct netdev_vport *netdev_vport = netdev_vport_priv(vport); - return netdev_vport->dev->dev_addr; -} - int ovs_netdev_get_ifindex(const struct vport *vport) { const struct netdev_vport *netdev_vport = netdev_vport_priv(vport); @@ -225,10 +208,11 @@ int ovs_netdev_get_ifindex(const struct vport *vport) /* Must be called with rcu_read_lock. */ static void netdev_port_receive(struct vport *vport, struct sk_buff *skb) { - if (unlikely(!vport)) { - kfree_skb(skb); - return; - } + if (unlikely(!vport)) + goto error; + + if (unlikely(skb_warn_if_lro(skb))) + goto error; /* Make our own copy of the packet. Otherwise we will mangle the * packet for anyone who came before us (e.g. tcpdump via AF_PACKET). @@ -240,13 +224,16 @@ static void netdev_port_receive(struct vport *vport, struct sk_buff *skb) skb_push(skb, ETH_HLEN); - if (unlikely(compute_ip_summed(skb, false))) { - kfree_skb(skb); - return; - } + if (unlikely(compute_ip_summed(skb, false))) + goto error; + vlan_copy_skb_tci(skb); ovs_vport_receive(vport, skb); + return; + +error: + kfree_skb(skb); } static unsigned int packet_length(const struct sk_buff *skb) @@ -285,9 +272,6 @@ static int netdev_send(struct vport *vport, struct sk_buff *skb) goto error; } - if (unlikely(skb_warn_if_lro(skb))) - goto error; - skb->dev = netdev_vport->dev; forward_ip_summed(skb, true); @@ -382,9 +366,7 @@ const struct vport_ops ovs_netdev_vport_ops = { .exit = netdev_exit, .create = netdev_create, .destroy = netdev_destroy, - .set_addr = ovs_netdev_set_addr, .get_name = ovs_netdev_get_name, - .get_addr = ovs_netdev_get_addr, .get_ifindex = ovs_netdev_get_ifindex, .send = netdev_send, };