X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Factions.c;h=4f23c83d5841cc38ee2d844052b0490c2d81f3af;hb=d17ee8689bff22541dccaa792b70a848641f3646;hp=15263281b4a3f5b67a4cea18992da8a6de8f49ac;hpb=0cd8a05ec036ca8f950d4d4034a80bf485581b6a;p=sliver-openvswitch.git diff --git a/datapath/actions.c b/datapath/actions.c index 15263281b..4f23c83d5 100644 --- a/datapath/actions.c +++ b/datapath/actions.c @@ -112,7 +112,7 @@ modify_vlan_tci(struct datapath *dp, struct sk_buff *skb, * when we send the packet out on the wire, and it will fail at * that point because skb_checksum_setup() will not look inside * an 802.1Q header. */ - skb_checksum_setup(skb); + vswitch_skb_checksum_setup(skb); /* GSO is not implemented for packets with an 802.1Q header, so * we have to do segmentation before we add that header. @@ -275,8 +275,8 @@ set_tp_port(struct sk_buff *skb, struct odp_flow_key *key, u16 *f = a->type == ODPAT_SET_TP_SRC ? &th->source : &th->dest; u16 old = *f; u16 new = a->tp_port; - update_csum((u16*)((u8*)skb->data + check_ofs), - skb, old, new, 1); + update_csum((u16*)(skb_transport_header(skb) + check_ofs), + skb, old, new, 1); *f = new; } return skb; @@ -323,7 +323,7 @@ do_output(struct datapath *dp, struct sk_buff *skb, int out_port) dev = skb->dev = p->dev; if (is_dp_dev(dev)) dp_dev_recv(dev, skb); - else + else dp_xmit_skb(skb); return; @@ -377,7 +377,7 @@ int execute_actions(struct datapath *dp, struct sk_buff *skb, * then freeing the original skbuff is wasteful. So the following code * is slightly obscure just to avoid that. */ int prev_port = -1; - int err = 0; + int err; for (; n_actions > 0; a++, n_actions--) { WARN_ON_ONCE(skb_shared(skb)); if (prev_port != -1) { @@ -436,5 +436,5 @@ int execute_actions(struct datapath *dp, struct sk_buff *skb, do_output(dp, skb, prev_port); else kfree_skb(skb); - return err; + return 0; }