網路驅動有關結構體的含義

2021-06-18 19:27:34 字數 3464 閱讀 8600

首先看一下網路驅動必用結構體struct sk_buff

不怎麼使用的就沒有出現解釋:

struct sk_buff ;

};__u32   priority;  //包的優先順序

kmemcheck_bitfield_begin(flags1);

__u8   local_df:1,   //是否允許分片

cloned:1,   //頭部被複製到子分片

ip_summed:2,  //ip校驗和

nohdr:1,   //有效載荷的參考

nfctinfo:3;

__u8   pkt_type:3,   //包的型別

fclone:2,   //skbuff clone狀態

ipvs_property:1, //ipvs擁有

peeked:1,   //此包已傳送過

nf_trace:1;   //網路過濾包的追蹤標誌

__be16   protocol:16;  //協議版本

kmemcheck_bitfield_end(flags1);

void   (*destructor)(struct sk_buff *skb);   //自動釋放

#if defined(config_nf_conntrack) || defined(config_nf_conntrack_module)

struct nf_conntrack *nfct;

struct sk_buff  *nfct_reasm;

#endif

#ifdef config_bridge_netfilter

struct nf_bridge_info *nf_bridge;

#endif

int   iif;

#ifdef config_net_sched

__u16   tc_index; /* traffic control index */

#ifdef config_net_cls_act

__u16   tc_verd; /* traffic control verdict */

#endif

#endif

/* 0/14 bit hole */

#ifdef config_net_dma

dma_cookie_t  dma_cookie;

#endif

#ifdef config_network_secmark

__u32   secmark;

#endif

__u32   mark;

__u16   vlan_tci;

sk_buff_data_t  transport_header; //如tcp/udp頭部

sk_buff_data_t  network_header;  //ip頭部

sk_buff_data_t  mac_header;   //資料鏈路層頭部 mac頭部

/* these elements must be at the end, see alloc_skb() for details.  */

sk_buff_data_t  tail;    //有效資料指標尾部

sk_buff_data_t  end;    //緩衝區結束處

unsigned char  *head,    //緩衝區頭部

*data;      //緩衝真正的資料頭部指標

unsigned int  truesize;   //緩衝的真正資料的長度

atomic_t  users;     //使用的人數};

下乙個就是struct net_device,這個裡面的確較為麻煩,連linux核心都這麼注釋

* the device structure.

* actually, this whole structure is a big mistake.  it mixes i/o

* data with strictly "high-level" data, and it has to know about

* almost every data structure used in the inet module.

在使用中用到後,再注釋其他的

struct net_device

reg_state;

/* called from unregister, can be used to call free_netdev */

void (*destructor)(struct net_device *dev);

#ifdef config_netpoll

struct netpoll_info *npinfo;

#endif

#ifdef config_net_ns

/* network namespace this network device is inside */

struct net  *nd_net;

#endif

/* mid-layer private */

void   *ml_priv;

/* bridge stuff */

struct net_bridge_port *br_port;

/* macvlan */

struct macvlan_port *macvlan_port;

/* garp */

struct garp_port *garp_port;

/* class/net/name entry */

struct device  dev;

/* space for optional statistics and wireless sysfs groups */

const struct attribute_group *sysfs_groups[3];

/* rtnetlink link ops */

const struct rtnl_link_ops *rtnl_link_ops;

/* vlan feature mask */

unsigned long vlan_features;

/* for setting kernel sock attribute on tcp connection setup */

#define gso_max_size  65536

unsigned int  gso_max_size;

#ifdef config_dcb

/* data center bridging netlink ops */

struct dcbnl_rtnl_ops *dcbnl_ops;

#endif

#if defined(config_fcoe) || defined(config_fcoe_module)

/* max exchange id for fcoe lro by ddp */

unsigned int  fcoe_ddp_xid;

#endif};

結構體對齊的具體含義

結構體對齊的具體含義 關於位元組對齊,這可能是我找到的解釋最為準確的一篇文章了,尤其對於 pragma pack的解釋.之前看了好幾篇文章,都解釋為是設定預設對齊位元組數.唯有該篇指出是設定位元組對齊時所允許的最大值.經linux下驗證,符合事實.似乎網上的文章以訛傳訛的情況越來越多了.以至於關於集...

結構體對齊的具體含義( pragma pack)

結構體對齊的具體含義 pragma pack 現在去掉第乙個成員變數為如下 pragma pack 4 class testc int nsize sizeof testc 按照正常的填充方式nsize的結果應該是8,為什麼結果顯示nsize為6呢?事實上,很多人對 pragma pack的理解是錯...

結構體對齊的具體含義( pragma pack)

結構體對齊的具體含義 pragma pack 朋友帖了如下一段 pragma pack 4 class testb int nsize sizeof testb 這裡nsize結果為12,在預料之中。現在去掉第乙個成員變數為如下 pragma pack 4 class testc int nsize...