#ifndef __LINUX_GRE_H
#define __LINUX_GRE_H
#include <linux/skbuff.h>
#include <net/ip_tunnels.h>
struct gre_base_hdr { … } __packed;
struct gre_full_hdr { … } __packed;
#define GRE_HEADER_SECTION …
#define GREPROTO_CISCO …
#define GREPROTO_PPTP …
#define GREPROTO_MAX …
#define GRE_IP_PROTO_MAX …
struct gre_protocol { … };
int gre_add_protocol(const struct gre_protocol *proto, u8 version);
int gre_del_protocol(const struct gre_protocol *proto, u8 version);
struct net_device *gretap_fb_dev_create(struct net *net, const char *name,
u8 name_assign_type);
int gre_parse_header(struct sk_buff *skb, struct tnl_ptk_info *tpi,
bool *csum_err, __be16 proto, int nhs);
static inline bool netif_is_gretap(const struct net_device *dev)
{ … }
static inline bool netif_is_ip6gretap(const struct net_device *dev)
{ … }
static inline int gre_calc_hlen(const unsigned long *o_flags)
{ … }
static inline void gre_flags_to_tnl_flags(unsigned long *dst, __be16 flags)
{ … }
static inline __be16 gre_tnl_flags_to_gre_flags(const unsigned long *tflags)
{ … }
static inline void gre_build_header(struct sk_buff *skb, int hdr_len,
const unsigned long *flags, __be16 proto,
__be32 key, __be32 seq)
{ … }
#endif