linux/include/linux/netfilter/nf_conntrack_proto_gre.h
<<
>>
Prefs
   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 */
  28struct 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 */
  56struct 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
  67struct 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
  75struct nf_conn;
  76
  77/* structure for original <-> reply keymap */
  78struct 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 */
  84int 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 */
  88void nf_ct_gre_keymap_destroy(struct nf_conn *ct);
  89
  90extern void nf_ct_gre_keymap_flush(struct net *net);
  91extern void nf_nat_need_gre(void);
  92
  93#endif /* __KERNEL__ */
  94#endif /* _CONNTRACK_PROTO_GRE_H */
  95