Linux Audio

Check our new training course

Loading...
v3.1
 1#ifndef __LINUX_GRE_H
 2#define __LINUX_GRE_H
 3
 4#include <linux/skbuff.h>
 
 5
 6#define GREPROTO_CISCO		0
 7#define GREPROTO_PPTP		1
 8#define GREPROTO_MAX		2
 
 9
10struct gre_protocol {
11	int  (*handler)(struct sk_buff *skb);
12	void (*err_handler)(struct sk_buff *skb, u32 info);
13};
14
 
 
 
 
 
 
15int gre_add_protocol(const struct gre_protocol *proto, u8 version);
16int gre_del_protocol(const struct gre_protocol *proto, u8 version);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
18#endif
v3.15
  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#define GRE_IP_PROTO_MAX	2
 11
 12struct gre_protocol {
 13	int  (*handler)(struct sk_buff *skb);
 14	void (*err_handler)(struct sk_buff *skb, u32 info);
 15};
 16
 17struct gre_base_hdr {
 18	__be16 flags;
 19	__be16 protocol;
 20};
 21#define GRE_HEADER_SECTION 4
 22
 23int gre_add_protocol(const struct gre_protocol *proto, u8 version);
 24int gre_del_protocol(const struct gre_protocol *proto, u8 version);
 25
 26struct gre_cisco_protocol {
 27	int (*handler)(struct sk_buff *skb, const struct tnl_ptk_info *tpi);
 28	int (*err_handler)(struct sk_buff *skb, u32 info,
 29			   const struct tnl_ptk_info *tpi);
 30	u8 priority;
 31};
 32
 33int gre_cisco_register(struct gre_cisco_protocol *proto);
 34int gre_cisco_unregister(struct gre_cisco_protocol *proto);
 35
 36void gre_build_header(struct sk_buff *skb, const struct tnl_ptk_info *tpi,
 37		      int hdr_len);
 38
 39static inline struct sk_buff *gre_handle_offloads(struct sk_buff *skb,
 40						  bool gre_csum)
 41{
 42	return iptunnel_handle_offloads(skb, gre_csum, SKB_GSO_GRE);
 43}
 44
 45
 46static inline int ip_gre_calc_hlen(__be16 o_flags)
 47{
 48	int addend = 4;
 49
 50	if (o_flags&TUNNEL_CSUM)
 51		addend += 4;
 52	if (o_flags&TUNNEL_KEY)
 53		addend += 4;
 54	if (o_flags&TUNNEL_SEQ)
 55		addend += 4;
 56	return addend;
 57}
 58
 59static inline __be16 gre_flags_to_tnl_flags(__be16 flags)
 60{
 61	__be16 tflags = 0;
 62
 63	if (flags & GRE_CSUM)
 64		tflags |= TUNNEL_CSUM;
 65	if (flags & GRE_ROUTING)
 66		tflags |= TUNNEL_ROUTING;
 67	if (flags & GRE_KEY)
 68		tflags |= TUNNEL_KEY;
 69	if (flags & GRE_SEQ)
 70		tflags |= TUNNEL_SEQ;
 71	if (flags & GRE_STRICT)
 72		tflags |= TUNNEL_STRICT;
 73	if (flags & GRE_REC)
 74		tflags |= TUNNEL_REC;
 75	if (flags & GRE_VERSION)
 76		tflags |= TUNNEL_VERSION;
 77
 78	return tflags;
 79}
 80
 81static inline __be16 tnl_flags_to_gre_flags(__be16 tflags)
 82{
 83	__be16 flags = 0;
 84
 85	if (tflags & TUNNEL_CSUM)
 86		flags |= GRE_CSUM;
 87	if (tflags & TUNNEL_ROUTING)
 88		flags |= GRE_ROUTING;
 89	if (tflags & TUNNEL_KEY)
 90		flags |= GRE_KEY;
 91	if (tflags & TUNNEL_SEQ)
 92		flags |= GRE_SEQ;
 93	if (tflags & TUNNEL_STRICT)
 94		flags |= GRE_STRICT;
 95	if (tflags & TUNNEL_REC)
 96		flags |= GRE_REC;
 97	if (tflags & TUNNEL_VERSION)
 98		flags |= GRE_VERSION;
 99
100	return flags;
101}
102
103#endif