4 #include <netinet/in.h>
5 #include <netinet/in_systm.h>
15 u_int8_t __u6_addr8[16];
16 u_int16_t __u6_addr16[8];
17 u_int32_t __u6_addr32[4];
20 #define s6_addr __u6_addr.__u6_addr8
21 #define s6_addr8 __u6_addr.__u6_addr8
22 #define s6_addr16 __u6_addr.__u6_addr16
23 #define s6_addr32 __u6_addr.__u6_addr32
56 #define TH_DO_MASK 0xf0
58 #define TH_FLAGS_MASK 0x3f
72 #define PACKET_HDR_LEN sizeof(struct pkt_hdr)
74 #define CHECKSUM_CARRY(x) do { \
75 x = ((x & 0xffff) + (x >> 16)); \
80 static inline uint16_t checksum(u_int16_t *data,
int len) {
95 pad.b[0] = *(u_int8_t *)data;
104 static inline void ipv6_tcp_checksum(
struct pkt_hdr *hdr) {
108 sum = checksum((uint16_t*)&hdr->
ipv6.ip_src, 2*
sizeof(
struct in6_addr));
109 sum += htons(IPPROTO_TCP + ntohs(hdr->
ipv6.
ip_len));
110 sum += checksum((uint16_t*)&hdr->
tcp, ntohs(hdr->
ipv6.
ip_len));
116 static inline int min(
int a,
int b) {
117 return (a < b) ? a: b;
119 static inline int max(
int a,
int b) {
120 return (a < b) ? b: a;
u_int8_t th_data_off
Definition: rmitm.h:49
uint8_t data[0]
Definition: rmitm.h:69
struct in6_addr ip_src ip_dst
Definition: rmitm.h:37
struct ipv6_hdr ipv6
Definition: rmitm.h:67
u_int16_t th_sport
Definition: rmitm.h:45
u_int8_t ip_flags[4]
Definition: rmitm.h:33
u_int8_t ip_hl
Definition: rmitm.h:36
struct tcp_hdr tcp
Definition: rmitm.h:68
u_int16_t th_urgptr
Definition: rmitm.h:53
u_int32_t th_ack_nr
Definition: rmitm.h:48
u_int16_t th_sum
Definition: rmitm.h:52
u_int8_t ip_nh
Definition: rmitm.h:35
u_int16_t ip_len
Definition: rmitm.h:34
u_int16_t th_window
Definition: rmitm.h:51
u_int8_t th_flags
Definition: rmitm.h:50
#define CHECKSUM_CARRY(x)
Definition: rmitm.h:74
u_int32_t th_seq_nr
Definition: rmitm.h:47
u_int16_t th_dport
Definition: rmitm.h:46