| #ifndef VJBSDHDR_H |
| #define VJBSDHDR_H |
| |
| #include "lwip/tcp.h" |
| |
| /* |
| * Structure of an internet header, naked of options. |
| * |
| * We declare ip_len and ip_off to be short, rather than u_short |
| * pragmatically since otherwise unsigned comparisons can result |
| * against negative integers quite easily, and fail in subtle ways. |
| */ |
| PACK_STRUCT_BEGIN |
| struct ip |
| { |
| #if defined(NO_CHAR_BITFIELDS) |
| u_char ip_hl_v; /* bug in GCC for mips means the bitfield stuff will sometimes break - so we use a char for both and get round it with macro's instead... */ |
| #else |
| #if BYTE_ORDER == LITTLE_ENDIAN |
| unsigned ip_hl:4, /* header length */ |
| ip_v :4; /* version */ |
| #elif BYTE_ORDER == BIG_ENDIAN |
| unsigned ip_v :4, /* version */ |
| ip_hl:4; /* header length */ |
| #else |
| COMPLAIN - NO BYTE ORDER SELECTED! |
| #endif |
| #endif |
| u_char ip_tos; /* type of service */ |
| u_short ip_len; /* total length */ |
| u_short ip_id; /* identification */ |
| u_short ip_off; /* fragment offset field */ |
| #define IP_DF 0x4000 /* dont fragment flag */ |
| #define IP_MF 0x2000 /* more fragments flag */ |
| #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ |
| u_char ip_ttl; /* time to live */ |
| u_char ip_p; /* protocol */ |
| u_short ip_sum; /* checksum */ |
| struct in_addr ip_src,ip_dst; /* source and dest address */ |
| }; |
| PACK_STRUCT_END |
| |
| typedef u32_t tcp_seq; |
| |
| /* |
| * TCP header. |
| * Per RFC 793, September, 1981. |
| */ |
| PACK_STRUCT_BEGIN |
| struct tcphdr |
| { |
| u_short th_sport; /* source port */ |
| u_short th_dport; /* destination port */ |
| tcp_seq th_seq; /* sequence number */ |
| tcp_seq th_ack; /* acknowledgement number */ |
| #if defined(NO_CHAR_BITFIELDS) |
| u_char th_x2_off; |
| #else |
| #if BYTE_ORDER == LITTLE_ENDIAN |
| unsigned th_x2 :4, /* (unused) */ |
| th_off:4; /* data offset */ |
| #endif |
| #if BYTE_ORDER == BIG_ENDIAN |
| unsigned th_off:4, /* data offset */ |
| th_x2 :4; /* (unused) */ |
| #endif |
| #endif |
| u_char th_flags; |
| u_short th_win; /* window */ |
| u_short th_sum; /* checksum */ |
| u_short th_urp; /* urgent pointer */ |
| }; |
| PACK_STRUCT_END |
| |
| #endif /* VJBSDHDR_H */ |