Merge branch 'mainstream'
[sliver-openvswitch.git] / datapath / linux / compat / include / net / gre.h
index bd0c3d4..a6f29c4 100644 (file)
@@ -4,57 +4,33 @@
 #include <linux/skbuff.h>
 #include <net/ip_tunnels.h>
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37) || \
+   defined(HAVE_GRE_CISCO_REGISTER)
 #include_next <net/gre.h>
-
-#else /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) */
-
-#define GREPROTO_CISCO         0
-#define GREPROTO_MAX           2
-
-struct gre_protocol {
-       int  (*handler)(struct sk_buff *skb);
-};
-
-int gre_add_protocol(const struct gre_protocol *proto, u8 version);
-int gre_del_protocol(const struct gre_protocol *proto, u8 version);
-
 #endif
 
-struct gre_base_hdr {
-       __be16 flags;
-       __be16 protocol;
-};
-#define GRE_HEADER_SECTION 4
+#ifndef HAVE_GRE_CISCO_REGISTER
 
+/* GRE demux not available, implement our own demux. */
 #define MAX_GRE_PROTO_PRIORITY 255
+
 struct gre_cisco_protocol {
        int (*handler)(struct sk_buff *skb, const struct tnl_ptk_info *tpi);
        u8 priority;
 };
 
-#define gre_build_header rpl_gre_build_header
-void gre_build_header(struct sk_buff *skb, const struct tnl_ptk_info *tpi,
-                     int hdr_len);
-
-#define gre_handle_offloads rpl_gre_handle_offloads
-struct sk_buff *gre_handle_offloads(struct sk_buff *skb, bool gre_csum);
-
+#define gre_cisco_register rpl_gre_cisco_register
 int gre_cisco_register(struct gre_cisco_protocol *proto);
-int gre_cisco_unregister(struct gre_cisco_protocol *proto);
 
-static inline int ip_gre_calc_hlen(__be16 o_flags)
-{
-       int addend = 4;
+#define gre_cisco_unregister rpl_gre_cisco_unregister
+int gre_cisco_unregister(struct gre_cisco_protocol *proto);
 
-       if (o_flags & TUNNEL_CSUM)
-               addend += 4;
-       if (o_flags & TUNNEL_KEY)
-               addend += 4;
-       if (o_flags & TUNNEL_SEQ)
-               addend += 4;
-       return addend;
-}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
+struct gre_base_hdr {
+       __be16 flags;
+       __be16 protocol;
+};
+#define GRE_HEADER_SECTION 4
 
 static inline __be16 gre_flags_to_tnl_flags(__be16 flags)
 {
@@ -99,4 +75,28 @@ static inline __be16 tnl_flags_to_gre_flags(__be16 tflags)
 
        return flags;
 }
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) */
+#endif /* HAVE_GRE_CISCO_REGISTER */
+
+#define gre_build_header rpl_gre_build_header
+void gre_build_header(struct sk_buff *skb, const struct tnl_ptk_info *tpi,
+                     int hdr_len);
+
+#define gre_handle_offloads rpl_gre_handle_offloads
+struct sk_buff *gre_handle_offloads(struct sk_buff *skb, bool gre_csum);
+
+#define ip_gre_calc_hlen rpl_ip_gre_calc_hlen
+static inline int ip_gre_calc_hlen(__be16 o_flags)
+{
+       int addend = 4;
+
+       if (o_flags & TUNNEL_CSUM)
+               addend += 4;
+       if (o_flags & TUNNEL_KEY)
+               addend += 4;
+       if (o_flags & TUNNEL_SEQ)
+               addend += 4;
+       return addend;
+}
+
 #endif