Each skb segment needs a dst entry.

Signed-off-by: Pravin B Shelar <pshe...@ovn.org>
---
 datapath/linux/compat/gso.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/datapath/linux/compat/gso.c b/datapath/linux/compat/gso.c
index 8812253..9d478f8 100644
--- a/datapath/linux/compat/gso.c
+++ b/datapath/linux/compat/gso.c
@@ -189,6 +189,7 @@ static struct sk_buff *tnl_skb_gso_segment(struct sk_buff 
*skb,
        int outer_l3_offset = skb_network_offset(skb);
        int outer_l4_offset = skb_transport_offset(skb);
        struct sk_buff *skb1 = skb;
+       struct dst_entry *dst = skb_dst(skb);
        struct sk_buff *segs;
        __be16 proto = skb->protocol;
        char cb[sizeof(skb->cb)];
@@ -235,6 +236,10 @@ static struct sk_buff *tnl_skb_gso_segment(struct sk_buff 
*skb,
                OVS_GSO_CB(skb)->fix_segment(skb);
 
                skb->protocol = proto;
+               if (skb->next)
+                       dst = dst_clone(dst);
+
+               skb_dst_set(skb, dst);
                skb = skb->next;
        }
 free:
-- 
1.9.1

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

Reply via email to