📄 ip_conntrack_proto_gre.h
字号:
#ifndef _CONNTRACK_PROTO_GRE_H#define _CONNTRACK_PROTO_GRE_H#include <asm/byteorder.h>/* GRE PROTOCOL HEADER *//* GRE Version field */#define GRE_VERSION_1701 0x0#define GRE_VERSION_PPTP 0x1/* GRE Protocol field */#define GRE_PROTOCOL_PPTP 0x880B/* GRE Flags */#define GRE_FLAG_C 0x80#define GRE_FLAG_R 0x40#define GRE_FLAG_K 0x20#define GRE_FLAG_S 0x10#define GRE_FLAG_A 0x80#define GRE_IS_C(f) ((f)&GRE_FLAG_C)#define GRE_IS_R(f) ((f)&GRE_FLAG_R)#define GRE_IS_K(f) ((f)&GRE_FLAG_K)#define GRE_IS_S(f) ((f)&GRE_FLAG_S)#define GRE_IS_A(f) ((f)&GRE_FLAG_A)/* GRE is a mess: Four different standards */struct gre_hdr {#if defined(__LITTLE_ENDIAN_BITFIELD) __u16 rec:3, srr:1, seq:1, key:1, routing:1, csum:1, version:3, reserved:4, ack:1;#elif defined(__BIG_ENDIAN_BITFIELD) __u16 csum:1, routing:1, key:1, seq:1, srr:1, rec:3, ack:1, reserved:4, version:3;#else#error "Adjust your <asm/byteorder.h> defines"#endif __u16 protocol;};/* modified GRE header for PPTP */struct gre_hdr_pptp { __u8 flags; /* bitfield */ __u8 version; /* should be GRE_VERSION_PPTP */ __u16 protocol; /* should be GRE_PROTOCOL_PPTP */ __u16 payload_len; /* size of ppp payload, not inc. gre header */ __u16 call_id; /* peer's call_id for this session */ __u32 seq; /* sequence number. Present if S==1 */ __u32 ack; /* seq number of highest packet recieved by */ /* sender in this session */};/* this is part of ip_conntrack */struct ip_ct_gre { unsigned int stream_timeout; unsigned int timeout;};#ifdef __KERNEL__struct ip_conntrack_expect;struct ip_conntrack;/* structure for original <-> reply keymap */struct ip_ct_gre_keymap { struct list_head list; struct ip_conntrack_tuple tuple;};/* add new tuple->key_reply pair to keymap */int ip_ct_gre_keymap_add(struct ip_conntrack *ct, struct ip_conntrack_tuple *t, int reply);/* delete keymap entries */void ip_ct_gre_keymap_destroy(struct ip_conntrack *ct);/* get pointer to gre key, if present */static inline u_int32_t *gre_key(struct gre_hdr *greh){ if (!greh->key) return NULL; if (greh->csum || greh->routing) return (u_int32_t *) (greh+sizeof(*greh)+4); return (u_int32_t *) (greh+sizeof(*greh));}/* get pointer ot gre csum, if present */static inline u_int16_t *gre_csum(struct gre_hdr *greh){ if (!greh->csum) return NULL; return (u_int16_t *) (greh+sizeof(*greh));}#endif /* __KERNEL__ */#endif /* _CONNTRACK_PROTO_GRE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -