Commit | Line | Data |
---|---|---|
f09943fe PM |
1 | #ifndef _CONNTRACK_PROTO_GRE_H |
2 | #define _CONNTRACK_PROTO_GRE_H | |
3 | #include <asm/byteorder.h> | |
4 | ||
5 | /* GRE PROTOCOL HEADER */ | |
6 | ||
7 | /* GRE Version field */ | |
8 | #define GRE_VERSION_1701 0x0 | |
9 | #define GRE_VERSION_PPTP 0x1 | |
10 | ||
11 | /* GRE Protocol field */ | |
12 | #define GRE_PROTOCOL_PPTP 0x880B | |
13 | ||
14 | /* GRE Flags */ | |
15 | #define GRE_FLAG_C 0x80 | |
16 | #define GRE_FLAG_R 0x40 | |
17 | #define GRE_FLAG_K 0x20 | |
18 | #define GRE_FLAG_S 0x10 | |
19 | #define GRE_FLAG_A 0x80 | |
20 | ||
21 | #define GRE_IS_C(f) ((f)&GRE_FLAG_C) | |
22 | #define GRE_IS_R(f) ((f)&GRE_FLAG_R) | |
23 | #define GRE_IS_K(f) ((f)&GRE_FLAG_K) | |
24 | #define GRE_IS_S(f) ((f)&GRE_FLAG_S) | |
25 | #define GRE_IS_A(f) ((f)&GRE_FLAG_A) | |
26 | ||
27 | /* GRE is a mess: Four different standards */ | |
28 | struct gre_hdr { | |
29 | #if defined(__LITTLE_ENDIAN_BITFIELD) | |
30 | __u16 rec:3, | |
31 | srr:1, | |
32 | seq:1, | |
33 | key:1, | |
34 | routing:1, | |
35 | csum:1, | |
36 | version:3, | |
37 | reserved:4, | |
38 | ack:1; | |
39 | #elif defined(__BIG_ENDIAN_BITFIELD) | |
40 | __u16 csum:1, | |
41 | routing:1, | |
42 | key:1, | |
43 | seq:1, | |
44 | srr:1, | |
45 | rec:3, | |
46 | ack:1, | |
47 | reserved:4, | |
48 | version:3; | |
49 | #else | |
50 | #error "Adjust your <asm/byteorder.h> defines" | |
51 | #endif | |
52 | __be16 protocol; | |
53 | }; | |
54 | ||
55 | /* modified GRE header for PPTP */ | |
56 | struct gre_hdr_pptp { | |
57 | __u8 flags; /* bitfield */ | |
58 | __u8 version; /* should be GRE_VERSION_PPTP */ | |
59 | __be16 protocol; /* should be GRE_PROTOCOL_PPTP */ | |
60 | __be16 payload_len; /* size of ppp payload, not inc. gre header */ | |
61 | __be16 call_id; /* peer's call_id for this session */ | |
62 | __be32 seq; /* sequence number. Present if S==1 */ | |
25985edc | 63 | __be32 ack; /* seq number of highest packet received by */ |
f09943fe PM |
64 | /* sender in this session */ |
65 | }; | |
66 | ||
67 | struct nf_ct_gre { | |
68 | unsigned int stream_timeout; | |
69 | unsigned int timeout; | |
70 | }; | |
71 | ||
72 | #ifdef __KERNEL__ | |
73 | #include <net/netfilter/nf_conntrack_tuple.h> | |
74 | ||
75 | struct nf_conn; | |
76 | ||
77 | /* structure for original <-> reply keymap */ | |
78 | struct nf_ct_gre_keymap { | |
79 | struct list_head list; | |
80 | struct nf_conntrack_tuple tuple; | |
81 | }; | |
82 | ||
83 | /* add new tuple->key_reply pair to keymap */ | |
84 | int nf_ct_gre_keymap_add(struct nf_conn *ct, enum ip_conntrack_dir dir, | |
85 | struct nf_conntrack_tuple *t); | |
86 | ||
87 | /* delete keymap entries */ | |
88 | void nf_ct_gre_keymap_destroy(struct nf_conn *ct); | |
89 | ||
3bb0d1c0 | 90 | extern void nf_ct_gre_keymap_flush(struct net *net); |
f09943fe PM |
91 | extern void nf_nat_need_gre(void); |
92 | ||
93 | #endif /* __KERNEL__ */ | |
94 | #endif /* _CONNTRACK_PROTO_GRE_H */ |