Blame view
include/net/gre.h
2.96 KB
00959ade3 PPTP: PPP over IP... |
1 2 3 4 |
#ifndef __LINUX_GRE_H #define __LINUX_GRE_H #include <linux/skbuff.h> |
c54419321 GRE: Refactor GRE... |
5 |
#include <net/ip_tunnels.h> |
00959ade3 PPTP: PPP over IP... |
6 |
|
9f57c67c3 gre: Remove suppo... |
7 8 9 |
struct gre_base_hdr { __be16 flags; __be16 protocol; |
ab10dccb1 rps: Inspect PPTP... |
10 11 12 13 14 15 16 17 18 |
} __packed; struct gre_full_hdr { struct gre_base_hdr fixed_header; __be16 csum; __be16 reserved1; __be32 key; __be32 seq; } __packed; |
9f57c67c3 gre: Remove suppo... |
19 |
#define GRE_HEADER_SECTION 4 |
00959ade3 PPTP: PPP over IP... |
20 21 22 |
#define GREPROTO_CISCO 0 #define GREPROTO_PPTP 1 #define GREPROTO_MAX 2 |
bda7bb463 gre: Allow multip... |
23 |
#define GRE_IP_PROTO_MAX 2 |
00959ade3 PPTP: PPP over IP... |
24 25 26 27 28 29 30 31 |
struct gre_protocol { int (*handler)(struct sk_buff *skb); void (*err_handler)(struct sk_buff *skb, u32 info); }; int gre_add_protocol(const struct gre_protocol *proto, u8 version); int gre_del_protocol(const struct gre_protocol *proto, u8 version); |
b2acd1dc3 openvswitch: Use ... |
32 33 |
struct net_device *gretap_fb_dev_create(struct net *net, const char *name, u8 name_assign_type); |
95f5c64c3 gre: Move utility... |
34 |
int gre_parse_header(struct sk_buff *skb, struct tnl_ptk_info *tpi, |
e582615ad gre: fix error ha... |
35 |
bool *csum_err, __be16 proto, int nhs); |
95f5c64c3 gre: Move utility... |
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
static inline int 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 gre_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; } |
182a352d2 gre: Create commo... |
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
static inline __sum16 gre_checksum(struct sk_buff *skb) { __wsum csum; if (skb->ip_summed == CHECKSUM_PARTIAL) csum = lco_csum(skb); else csum = skb_checksum(skb, 0, skb->len, 0); return csum_fold(csum); } static inline void gre_build_header(struct sk_buff *skb, int hdr_len, __be16 flags, __be16 proto, __be32 key, __be32 seq) { struct gre_base_hdr *greh; skb_push(skb, hdr_len); |
3d7b33209 gre: set inner_pr... |
111 |
skb_set_inner_protocol(skb, proto); |
182a352d2 gre: Create commo... |
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
skb_reset_transport_header(skb); greh = (struct gre_base_hdr *)skb->data; greh->flags = gre_tnl_flags_to_gre_flags(flags); greh->protocol = proto; if (flags & (TUNNEL_KEY | TUNNEL_CSUM | TUNNEL_SEQ)) { __be32 *ptr = (__be32 *)(((u8 *)greh) + hdr_len - 4); if (flags & TUNNEL_SEQ) { *ptr = seq; ptr--; } if (flags & TUNNEL_KEY) { *ptr = key; ptr--; } if (flags & TUNNEL_CSUM && !(skb_shinfo(skb)->gso_type & (SKB_GSO_GRE | SKB_GSO_GRE_CSUM))) { *ptr = 0; *(__sum16 *)ptr = gre_checksum(skb); } } } |
00959ade3 PPTP: PPP over IP... |
136 |
#endif |