Blame view
include/net/gre.h
3.3 KB
b24413180 License cleanup: ... |
1 |
/* SPDX-License-Identifier: GPL-2.0 */ |
00959ade3 PPTP: PPP over IP... |
2 3 4 5 |
#ifndef __LINUX_GRE_H #define __LINUX_GRE_H #include <linux/skbuff.h> |
c54419321 GRE: Refactor GRE... |
6 |
#include <net/ip_tunnels.h> |
00959ade3 PPTP: PPP over IP... |
7 |
|
9f57c67c3 gre: Remove suppo... |
8 9 10 |
struct gre_base_hdr { __be16 flags; __be16 protocol; |
ab10dccb1 rps: Inspect PPTP... |
11 12 13 14 15 16 17 18 19 |
} __packed; struct gre_full_hdr { struct gre_base_hdr fixed_header; __be16 csum; __be16 reserved1; __be32 key; __be32 seq; } __packed; |
9f57c67c3 gre: Remove suppo... |
20 |
#define GRE_HEADER_SECTION 4 |
00959ade3 PPTP: PPP over IP... |
21 22 23 |
#define GREPROTO_CISCO 0 #define GREPROTO_PPTP 1 #define GREPROTO_MAX 2 |
bda7bb463 gre: Allow multip... |
24 |
#define GRE_IP_PROTO_MAX 2 |
00959ade3 PPTP: PPP over IP... |
25 26 27 28 29 30 31 32 |
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 ... |
33 34 |
struct net_device *gretap_fb_dev_create(struct net *net, const char *name, u8 name_assign_type); |
95f5c64c3 gre: Move utility... |
35 |
int gre_parse_header(struct sk_buff *skb, struct tnl_ptk_info *tpi, |
e582615ad gre: fix error ha... |
36 |
bool *csum_err, __be16 proto, int nhs); |
95f5c64c3 gre: Move utility... |
37 |
|
0621e6fc5 net: Add netif_is... |
38 39 40 41 42 43 44 45 46 47 48 |
static inline bool netif_is_gretap(const struct net_device *dev) { return dev->rtnl_link_ops && !strcmp(dev->rtnl_link_ops->kind, "gretap"); } static inline bool netif_is_ip6gretap(const struct net_device *dev) { return dev->rtnl_link_ops && !strcmp(dev->rtnl_link_ops->kind, "ip6gretap"); } |
d1b2a6c4b net: GRE: Add is_... |
49 |
|
95f5c64c3 gre: Move utility... |
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 93 94 95 96 97 98 99 100 101 102 103 104 105 |
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... |
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
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... |
124 |
skb_set_inner_protocol(skb, proto); |
182a352d2 gre: Create commo... |
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
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... |
149 |
#endif |