终于下决心开始看TCP/IP部分的源码了,从《TCI/IP详解,卷二》作为入口。。。
首先来分析一下存取数据的buff,
在书上,强调的是mbuf,不过好像现在新版本的内核改动比较大,更重要的还是sk_buff,不过还是先来看看mbuff吧,
文件在:Driver/net/skfp/h/mbuf.h
struct s_mbuf {
struct s_mbuf *sm_next ; /* low level linked list */ //用于构成链表
short sm_off ; /* offset in m_data */ //偏移位
u_int sm_len ; /* len of data */ //数据的长度
#ifdef PCI
int sm_use_count ;
#endif
char sm_data[M_SIZE] ; //用于实际的数据存储
} ;
typedef struct s_mbuf SMbuf ;
定义其实很简单了,与书上差异很大。。。不过重点还是来看看sk_buff的定义吧,首先是head的定义,其实他是一个占位节点,用于将sk_buff连接起来:
//sk_buff的头部的定义,其实是用于组织成一个链表
struct sk_buff_head {
/* The