summaryrefslogtreecommitdiffstats
path: root/net/openvswitch/actions.c
diff options
context:
space:
mode:
authorPravin B Shelar <pshelar@nicira.com>2014-12-24 01:20:28 +0100
committerDavid S. Miller <davem@davemloft.net>2014-12-24 05:57:31 +0100
commitcbe7e76d94f59e89302bd514e4b685e03d1ebbe4 (patch)
tree3d02656f1f35aac57b126e710be98ad68afd6949 /net/openvswitch/actions.c
parentopenvswitch: Fix MPLS action validation. (diff)
downloadlinux-cbe7e76d94f59e89302bd514e4b685e03d1ebbe4.tar.xz
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 '')
-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);