at v3.10 69 lines 1.4 kB view raw
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 11struct gre_protocol { 12 int (*handler)(struct sk_buff *skb); 13 void (*err_handler)(struct sk_buff *skb, u32 info); 14}; 15 16struct gre_base_hdr { 17 __be16 flags; 18 __be16 protocol; 19}; 20#define GRE_HEADER_SECTION 4 21 22int gre_add_protocol(const struct gre_protocol *proto, u8 version); 23int gre_del_protocol(const struct gre_protocol *proto, u8 version); 24 25static 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 47static 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