1 #ifndef __LINUX_GRE_H 2 #define __LINUX_GRE_H 3 4 #include <linux/skbuff.h> 5 #include <net/ip_tunnels.h> 6 7 #define GREPROTO_CISCO 0 8 #define GREPROTO_PPTP 1 9 #define GREPROTO_MAX 2 10 11 struct gre_protocol { 12 int (*handler)(struct sk_buff *skb); 13 void (*err_handler)(struct sk_buff *skb, u32 info); 14 }; 15 16 struct gre_base_hdr { 17 __be16 flags; 18 __be16 protocol; 19 }; 20 #define GRE_HEADER_SECTION 4 21 22 int gre_add_protocol(const struct gre_protocol *proto, u8 version); 23 int gre_del_protocol(const struct gre_protocol *proto, u8 version); 24 25 static inline __be16 gre_flags_to_tnl_flags(__be16 flags) 26 { 27 __be16 tflags = 0; 28 29 if (flags & GRE_CSUM) 30 tflags |= TUNNEL_CSUM; 31 if (flags & GRE_ROUTING) 32 tflags |= TUNNEL_ROUTING; 33 if (flags & GRE_KEY) 34 tflags |= TUNNEL_KEY; 35 if (flags & GRE_SEQ) 36 tflags |= TUNNEL_SEQ; 37 if (flags & GRE_STRICT) 38 tflags |= TUNNEL_STRICT; 39 if (flags & GRE_REC) 40 tflags |= TUNNEL_REC; 41 if (flags & GRE_VERSION) 42 tflags |= TUNNEL_VERSION; 43 44 return tflags; 45 } 46 47 static inline __be16 tnl_flags_to_gre_flags(__be16 tflags) 48 { 49 __be16 flags = 0; 50 51 if (tflags & TUNNEL_CSUM) 52 flags |= GRE_CSUM; 53 if (tflags & TUNNEL_ROUTING) 54 flags |= GRE_ROUTING; 55 if (tflags & TUNNEL_KEY) 56 flags |= GRE_KEY; 57 if (tflags & TUNNEL_SEQ) 58 flags |= GRE_SEQ; 59 if (tflags & TUNNEL_STRICT) 60 flags |= GRE_STRICT; 61 if (tflags & TUNNEL_REC) 62 flags |= GRE_REC; 63 if (tflags & TUNNEL_VERSION) 64 flags |= GRE_VERSION; 65 66 return flags; 67 } 68 69 #endif 70