When an MPLS header is extracted the skb is updated.
This should include updating the transport and network headers.

Signed-off-by: Simon Horman <ho...@verge.net.au>
---
 datapath/flow.c |    6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/datapath/flow.c b/datapath/flow.c
index fa9c86b..3c83426 100644
--- a/datapath/flow.c
+++ b/datapath/flow.c
@@ -738,6 +738,12 @@ int ovs_flow_extract(struct sk_buff *skb, u16 in_port, 
struct sw_flow_key *key,
 
                key_len = SW_FLOW_KEY_OFFSET(mpls.top_label);
                memcpy(&key->mpls.top_label, skb_network_header(skb), 
MPLS_HLEN);
+
+               /* Update network and transport headers */
+               skb_set_network_header(skb, skb_network_header(skb) -
+                                      skb->data + MPLS_HLEN);
+               skb_set_transport_header(skb, skb_transport_header(skb) -
+                                      skb->data + MPLS_HLEN);
        } else if (key->eth.type == htons(ETH_P_IPV6)) {
                int nh_len;             /* IPv6 Header + Extensions */
 
-- 
1.7.10.4

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to