Viewing file: gre.h (2.19 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#ifndef __LINUX_GRE_H #define __LINUX_GRE_H
#include <linux/skbuff.h> #include <net/ip_tunnels.h>
#define GREPROTO_CISCO 0 #define GREPROTO_PPTP 1 #define GREPROTO_MAX 2 #define GRE_IP_PROTO_MAX 2
struct gre_protocol { int (*handler)(struct sk_buff *skb); void (*err_handler)(struct sk_buff *skb, u32 info); };
struct gre_base_hdr { __be16 flags; __be16 protocol; }; #define GRE_HEADER_SECTION 4
int gre_add_protocol(const struct gre_protocol *proto, u8 version); int gre_del_protocol(const struct gre_protocol *proto, u8 version);
struct gre_cisco_protocol { int (*handler)(struct sk_buff *skb, const struct tnl_ptk_info *tpi); int (*err_handler)(struct sk_buff *skb, u32 info, const struct tnl_ptk_info *tpi); u8 priority; };
int gre_cisco_register(struct gre_cisco_protocol *proto); int gre_cisco_unregister(struct gre_cisco_protocol *proto);
void gre_build_header(struct sk_buff *skb, const struct tnl_ptk_info *tpi, int hdr_len);
static inline struct sk_buff *gre_handle_offloads(struct sk_buff *skb, bool gre_csum) { return iptunnel_handle_offloads(skb, gre_csum, SKB_GSO_GRE); }
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; }
static inline __be16 gre_flags_to_tnl_flags(__be16 flags) { __be16 tflags = 0;
if (flags & GRE_CSUM) tflags |= TUNNEL_CSUM; if (flags & GRE_ROUTING) tflags |= TUNNEL_ROUTING; if (flags & GRE_KEY) tflags |= TUNNEL_KEY; if (flags & GRE_SEQ) tflags |= TUNNEL_SEQ; if (flags & GRE_STRICT) tflags |= TUNNEL_STRICT; if (flags & GRE_REC) tflags |= TUNNEL_REC; if (flags & GRE_VERSION) tflags |= TUNNEL_VERSION;
return tflags; }
static inline __be16 tnl_flags_to_gre_flags(__be16 tflags) { __be16 flags = 0;
if (tflags & TUNNEL_CSUM) flags |= GRE_CSUM; if (tflags & TUNNEL_ROUTING) flags |= GRE_ROUTING; if (tflags & TUNNEL_KEY) flags |= GRE_KEY; if (tflags & TUNNEL_SEQ) flags |= GRE_SEQ; if (tflags & TUNNEL_STRICT) flags |= GRE_STRICT; if (tflags & TUNNEL_REC) flags |= GRE_REC; if (tflags & TUNNEL_VERSION) flags |= GRE_VERSION;
return flags; }
#endif
|