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];
      };
  • 相关阅读:
    Unity---游戏设计模式(6)之策略模式
    Unity---游戏设计模式(5)之桥接模式
    Unity---游戏设计模式(3)之单例模式
    ThinkPHP钩子和行为
    如何理解ThinkPHP框架里的依赖注入
    MySql读写分离实现
    PHP 微服务集群搭建
    详解MySQL的主从复制、读写分离、备份恢复
    索引差异
    nginx高可用
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/4812105.html
Copyright © 2011-2022 走看看