summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorPravin B Shelar <pshelar@nicira.com>2014-12-23 16:20:28 -0800
committerDavid S. Miller <davem@davemloft.net>2014-12-23 23:57:31 -0500
commitcbe7e76d94f59e89302bd514e4b685e03d1ebbe4 (patch)
tree3d02656f1f35aac57b126e710be98ad68afd6949 /net
parentec449f40bb3e19c77f62ddabf7c1fe3ccefece6f (diff)
downloadlinux-cbe7e76d94f59e89302bd514e4b685e03d1ebbe4.tar.gz
linux-cbe7e76d94f59e89302bd514e4b685e03d1ebbe4.tar.bz2
linux-cbe7e76d94f59e89302bd514e4b685e03d1ebbe4.zip
openvswitch: Fix GSO with multiple MPLS label.
MPLS GSO needs to know inner most protocol to process GSO packets. Fixes: 25cd9ba0abc ("openvswitch: Add basic MPLS support to kernel"). Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/openvswitch/actions.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
index 764fdc39c63b..770064c83711 100644
--- a/net/openvswitch/actions.c
+++ b/net/openvswitch/actions.c
@@ -147,7 +147,8 @@ static int push_mpls(struct sk_buff *skb, struct sw_flow_key *key,
hdr = eth_hdr(skb);
hdr->h_proto = mpls->mpls_ethertype;
- skb_set_inner_protocol(skb, skb->protocol);
+ if (!skb->inner_protocol)
+ skb_set_inner_protocol(skb, skb->protocol);
skb->protocol = mpls->mpls_ethertype;
invalidate_flow_key(key);