34#define DEV_TYPE_UNDEF 0
52#define OPENVPN_ETH_ALEN 6
58#define OPENVPN_ETH_P_IPV4 0x0800
59#define OPENVPN_ETH_P_IPV6 0x86DD
60#define OPENVPN_ETH_P_ARP 0x0806
61#define OPENVPN_ETH_P_8021Q 0x8100
71#define OPENVPN_8021Q_MASK_PCP htons(0xE000)
72#define OPENVPN_8021Q_MASK_CFI htons(0x1000)
73#define OPENVPN_8021Q_MASK_VID htons(0x0FFF)
82#define SIZE_ETH_TO_8021Q_HDR (sizeof(struct openvpn_8021qhdr) - sizeof(struct openvpn_ethhdr))
87#define OPENVPN_IN6_ARE_ADDR_EQUAL(a, b) (memcmp(a, b, sizeof(struct in6_addr)) == 0)
91#define OPENVPN_IPH_GET_VER(v) (((v) >> 4) & 0x0F)
92#define OPENVPN_IPH_GET_LEN(v) (((v) & 0x0F) << 2)
99#define OPENVPN_IP_OFFMASK 0x1fff
104#define OPENVPN_IPPROTO_IGMP 2
105#define OPENVPN_IPPROTO_TCP 6
106#define OPENVPN_IPPROTO_UDP 17
107#define OPENVPN_IPPROTO_ICMPV6 58
136#define OPENVPN_ICMP6_DESTINATION_UNREACHABLE 1
137#define OPENVPN_ND_ROUTER_SOLICIT 133
138#define OPENVPN_ND_ROUTER_ADVERT 134
139#define OPENVPN_ND_NEIGHBOR_SOLICIT 135
140#define OPENVPN_ND_NEIGHBOR_ADVERT 136
141#define OPENVPN_ND_INVERSE_SOLICIT 141
142#define OPENVPN_ND_INVERSE_ADVERT 142
144#define OPENVPN_ICMP6_DU_NOROUTE 0
145#define OPENVPN_ICMP6_DU_COMMUNICATION_PROHIBTED 1
172#define OPENVPN_TCPH_GET_DOFF(d) (((d) & 0xF0) >> 2)
175#define OPENVPN_TCPH_FIN_MASK (1 << 0)
176#define OPENVPN_TCPH_SYN_MASK (1 << 1)
177#define OPENVPN_TCPH_RST_MASK (1 << 2)
178#define OPENVPN_TCPH_PSH_MASK (1 << 3)
179#define OPENVPN_TCPH_ACK_MASK (1 << 4)
180#define OPENVPN_TCPH_URG_MASK (1 << 5)
181#define OPENVPN_TCPH_ECE_MASK (1 << 6)
182#define OPENVPN_TCPH_CWR_MASK (1 << 7)
190#define OPENVPN_TCPOPT_EOL 0
191#define OPENVPN_TCPOPT_NOP 1
192#define OPENVPN_TCPOPT_MAXSEG 2
193#define OPENVPN_TCPOLEN_MAXSEG 4
215#define ADJUST_CHECKSUM(acc, cksum) \
222 _acc = (_acc >> 16) + (_acc & 0xffff); \
223 _acc += _acc >> 16; \
224 (cksum) = (uint16_t)~_acc; \
228 _acc = (_acc >> 16) + (_acc & 0xffff); \
229 _acc += _acc >> 16; \
230 (cksum) = (uint16_t)_acc; \
234#define ADD_CHECKSUM_32(acc, u32) \
236 acc += (u32) & 0xffff; \
237 acc += (u32) >> 16; \
240#define SUB_CHECKSUM_32(acc, u32) \
242 acc -= (u32) & 0xffff; \
243 acc -= (u32) >> 16; \
308 const uint8_t *src_addr,
const uint8_t *dest_addr,
const int proto);
310#ifdef PACKET_TRUNCATION_CHECK
311void ipv4_packet_size_verify(
const uint8_t *data,
const int size,
const int tunnel_type,
316#define OPENVPN_8021Q_MIN_VID 1
317#define OPENVPN_8021Q_MAX_VID 4094
static int get_tun_ip_ver(int tunnel_type, struct buffer *buf, int *ip_hdr_offset)
bool is_ipv4(int tunnel_type, struct buffer *buf)
bool is_ipv6(int tunnel_type, struct buffer *buf)
#define OPENVPN_ETH_P_IPV6
#define OPENVPN_ETH_P_IPV4
uint16_t ip_checksum(const sa_family_t af, const uint8_t *payload, const int len_payload, const uint8_t *src_addr, const uint8_t *dest_addr, const int proto)
Calculates an IP or IPv6 checksum with a pseudo header as required by TCP, UDP and ICMPv6.
#define OPENVPN_IPH_GET_VER(v)
Wrapper structure for dynamically allocated memory.
union ip_tcp_udp_hdr::@23 u
struct openvpn_udphdr udp
struct openvpn_tcphdr tcp
uint8_t source[OPENVPN_ETH_ALEN]
uint8_t dest[OPENVPN_ETH_ALEN]
uint8_t dest[OPENVPN_ETH_ALEN]
uint8_t source[OPENVPN_ETH_ALEN]
unsigned short sa_family_t