ip数据结构
- 本文摘自 linux kernel ip.h,感谢开源的GNU
- struct ip
- {
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- unsigned int ip_hl:4; /* header length */
- unsigned int ip_v:4; /* version */
- #endif
- #if __BYTE_ORDER == __BIG_ENDIAN
- unsigned int ip_v:4; /* version */
- unsigned int ip_hl:4; /* header length */
- #endif
- u_int8_t 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_RF 0x8000 /* reserved fragment flag */
- #define IP_DF 0x4000 /* dont fragment flag */
- #define IP_MF 0x2000 /* more fragments flag */
- #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
- u_int8_t ip_ttl; /* time to live */
- u_int8_t ip_p; /* protocol */
- u_short ip_sum; /* checksum */
- struct in_addr ip_src, ip_dst; /* source and dest address */
- };
- struct timestamp
- {
- u_int8_t len;
- u_int8_t ptr;
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- unsigned int flags:4;
- unsigned int overflow:4;
- #elif __BYTE_ORDER == __BIG_ENDIAN
- unsigned int overflow:4;
- unsigned int flags:4;
- #else
- # error "Please fix <bits/endian.h>"
- #endif
- u_int32_t data[9];
- };
- struct iphdr
- {
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- unsigned int ihl:4;
- unsigned int version:4;
- #elif __BYTE_ORDER == __BIG_ENDIAN
- unsigned int version:4;
- unsigned int ihl:4;
- #else
- # error "Please fix <bits/endian.h>"
- #endif
- u_int8_t tos;
- u_int16_t tot_len;
- u_int16_t id;
- u_int16_t frag_off;
- u_int8_t ttl;
- u_int8_t protocol;
- u_int16_t check;
- u_int32_t saddr;
- u_int32_t daddr;
- /*The options start here. */
- };
- /*
- * Time stamp option structure.
- */
- struct ip_timestamp
- {
- u_int8_t ipt_code; /* IPOPT_TS */
- u_int8_t ipt_len; /* size of structure (variable) */
- u_int8_t ipt_ptr; /* index of current entry */
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- unsigned int ipt_flg:4; /* flags, see below */
- unsigned int ipt_oflw:4; /* overflow counter */
- #endif
- #if __BYTE_ORDER == __BIG_ENDIAN
- unsigned int ipt_oflw:4; /* overflow counter */
- unsigned int ipt_flg:4; /* flags, see below */
- #endif
- u_int32_t data[9];
- };
版权声明:本文为guxuanqing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。