include/linux/netfilter/nf_conntrack_proto_gre.h
changeset 0 aa628870c1d3
equal deleted inserted replaced
-1:000000000000 0:aa628870c1d3
       
     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 */
       
    63 	__be32 ack;		/* seq number of highest packet recieved by */
       
    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 
       
    90 extern void nf_ct_gre_keymap_flush(struct net *net);
       
    91 extern void nf_nat_need_gre(void);
       
    92 
       
    93 #endif /* __KERNEL__ */
       
    94 #endif /* _CONNTRACK_PROTO_GRE_H */