/* fl0p - portable TCP/IP headers ------------------------------ Well. Copyright (C) 2006 by Michal Zalewski */ #ifndef _HAVE_IP_H #define _HAVE_IP_H #include "types.h" #define IP_DF 0x4000 /* dont fragment flag */ #define IP_MF 0x2000 /* more fragments flag */ #define TH_FIN 0x01 #define TH_SYN 0x02 #define TH_RST 0x04 #define TH_ACK 0x10 #define TH_MASK (TH_FIN | TH_SYN | TH_RST | TH_ACK) struct ip_header { _u8 ihl, /* IHL */ tos; /* type of service */ _u16 tot_len, /* total length */ id, /* identification */ off; /* fragment offset + DF/MF */ _u8 ttl, /* time to live */ proto; /* protocol */ _u16 cksum; /* checksum */ _u32 saddr, /* source */ daddr; /* destination */ }; struct udp_header { _u16 sport, /* source port */ dport, /* destination port */ len, /* packet length */ cksum; /* checksum */ }; struct icmp_header { _u8 type, /* message type */ code; /* message code */ _u16 cksum; /* checksum */ }; struct tcp_header { _u16 sport, /* source port */ dport; /* destination port */ _u32 seq, /* sequence number */ ack; /* ack number */ #if BYTE_ORDER == LITTLE_ENDIAN _u8 _x2:4, /* unused */ doff:4; /* data offset */ #else /* BYTE_ORDER == BIG_ENDIAN */ _u8 doff:4, /* data offset */ _x2:4; /* unused */ #endif _u8 flags; /* flags, d'oh */ _u16 win; /* wss */ _u16 cksum; /* checksum */ _u16 urg; /* urgent pointer */ }; #endif /* ! _HAVE_IP_H */