From: Justin Pettit Date: Tue, 17 Nov 2009 01:51:31 +0000 (-0800) Subject: datapath: Calculate proper checksum for set_tp_src/dst action X-Git-Tag: v0.99.0~39 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=985224ac0c6a2eeebf71c58b12893eafe2386a3d;hp=fb344b867b96a6d6b9ec32e277cae6db68f2f236;p=sliver-openvswitch.git datapath: Calculate proper checksum for set_tp_src/dst action When the set_tp_src or set_tp_dst action is used, the calculation for where the checksum is located was wrong. This caused the checksum to not be updated and packet corruption in the bad offset. --- diff --git a/datapath/actions.c b/datapath/actions.c index 8a3e8abb5..a21bce840 100644 --- a/datapath/actions.c +++ b/datapath/actions.c @@ -259,8 +259,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;