OVS tunnel compat code depends on this function pointer to
handle GSO packet. Currently we do not initialize for all
GRE GSO packets. Following patch fixes that.

Signed-off-by: Pravin B Shelar <pshe...@nicira.com>
---
 datapath/linux/compat/gre.c |    2 ++
 datapath/linux/compat/gso.h |    4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/datapath/linux/compat/gre.c b/datapath/linux/compat/gre.c
index 07b270a..8c133de 100644
--- a/datapath/linux/compat/gre.c
+++ b/datapath/linux/compat/gre.c
@@ -292,6 +292,8 @@ struct sk_buff *gre_handle_offloads(struct sk_buff *skb, 
bool gre_csum)
        if (skb_is_gso(skb)) {
                if (gre_csum)
                        OVS_GSO_CB(skb)->fix_segment = gre_csum_fix;
+               else
+                       OVS_GSO_CB(skb)->fix_segment = NULL;
        } else {
                if (skb->ip_summed == CHECKSUM_PARTIAL && gre_csum) {
                        err = skb_checksum_help(skb);
diff --git a/datapath/linux/compat/gso.h b/datapath/linux/compat/gso.h
index 6281f29..20ec55c 100644
--- a/datapath/linux/compat/gso.h
+++ b/datapath/linux/compat/gso.h
@@ -12,13 +12,13 @@
 
 struct ovs_gso_cb {
        struct ovs_skb_cb dp_cb;
+       void (*fix_segment)(struct sk_buff *);
+       sk_buff_data_t  inner_mac_header;       /* Offset from skb->head */
 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
        __be16          inner_protocol;
 #endif
        u16             inner_network_header;   /* Offset from
                                                 * inner_mac_header */
-       sk_buff_data_t  inner_mac_header;       /* Offset from skb->head */
-       void (*fix_segment)(struct sk_buff *);
 };
 #define OVS_GSO_CB(skb) ((struct ovs_gso_cb *)(skb)->cb)
 
-- 
1.7.1

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

Reply via email to