On 6/1/2018 1:07 PM, Greg Rose wrote:
A recent patch to gre.c added a call to skb_checksum_simple_complete()
which is not present in kernels before 3.16.  Fix up the compatability
layer to allow compile on older kernels that do not have it.

Signed-off-by: Greg Rose <[email protected]>

NACK - I'll send a V2 that doesn't cause compile warnings.

- Greg


---
  acinclude.m4                                 |  5 +++++
  datapath/linux/compat/include/linux/skbuff.h | 19 +++++++++++++++++++
  2 files changed, 24 insertions(+)

diff --git a/acinclude.m4 b/acinclude.m4
index 7a653cb..991a627 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -872,6 +872,11 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
                    [IFLA_GRE_ERSPAN_HWID])
    OVS_GREP_IFELSE([$KSRC/include/uapi/linux/if_tunnel.h],
                    [IFLA_IPTUN_FWMARK])
+  OVS_FIND_FIELD_IFELSE([$KSRC/include/linux/skbuff.h], [sk_buff],
+                        [csum_valid],
+                        [OVS_DEFINE([HAVE_SKBUFF_CSUM_VALID])])
+  OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h],
+                  [skb_checksum_simple_validate])
if cmp -s datapath/linux/kcompat.h.new \
              datapath/linux/kcompat.h >/dev/null 2>&1; then
diff --git a/datapath/linux/compat/include/linux/skbuff.h 
b/datapath/linux/compat/include/linux/skbuff.h
index 63ffcaa..c50cac2 100644
--- a/datapath/linux/compat/include/linux/skbuff.h
+++ b/datapath/linux/compat/include/linux/skbuff.h
@@ -32,7 +32,11 @@ static inline __wsum null_compute_pseudo(struct sk_buff 
*skb, int proto)
  #ifndef HAVE_SKB_CHECKSUM_CONVERT
  static inline bool __skb_checksum_convert_check(struct sk_buff *skb)
  {
+#ifdef HAVE_SKBUFF_CSUM_VALID
        return (skb->ip_summed == CHECKSUM_NONE && skb->csum_valid);
+#else
+       return skb->ip_summed == CHECKSUM_NONE;
+#endif
  }
static inline void __skb_checksum_convert(struct sk_buff *skb,
@@ -50,6 +54,21 @@ do {                                                         
        \
  } while (0)
#endif
+
+#ifndef SKB_CHECKSUM_SIMPLE_VALIDATE
+
+#define __skb_checksum_validate(skb, proto, complete,                  \
+                               zero_okay, check, compute_pseudo)       \
+({                                                                     \
+       __sum16 __ret = 0;                                              \
+       __ret;                                                          \
+})
+
+
+#define skb_checksum_simple_validate(skb)                              \
+       __skb_checksum_validate(skb, 0, true, false, 0, null_compute_pseudo)
+#endif
+
  #ifndef HAVE_SKB_COPY_FROM_LINEAR_DATA_OFFSET
  static inline void skb_copy_from_linear_data_offset(const struct sk_buff *skb,
                                                    const int offset, void *to,

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to