zoukankan      html  css  js  c++  java
  • 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];
      };
  • 相关阅读:
    SQL Server 2008 Windows身份验证改为混合模式身份验证
    SQL中给datetime类型变量赋值
    结婚三周年特此@Mark一下
    搞笑的【国庆出游五大注意事项】
    利用SVNListParentPath增加http浏览仓库根目录的功能
    如果年底买不到CC就出手小指吧
    svn备份策略
    缺乏配置管理造成的常见问题
    高速公路开车必看的注意事项
    山雨欲来踏上Java学习之路
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/4812105.html
Copyright © 2011-2022 走看看