一、mbuf分为四类:以m_flag类型为区分
1. 为0:单个mbuf,m_data指向缓存的任意位置
2. 为M_PKTHDR:说明是一个mbuf链表的第一个头mbuf,后面还有更多的mbuf,m_data指向后面缓存的任意位置
3. 为M_EXT:说明该mbuf使用了外部缓存(1024字节能节省存储器容量,2048能提升以太网性能)。m_data和m_ext.ext_buf共同指向外部缓存的地址,前者可以指向任何位置,后者只能指向地址的首部
4. 为M_EXT和M_PKTHDR:表明这是一个mbuf链的头mbuf,同时该mbuf也使用了外部缓存
二、mbuf中还有m_pkthdr.len和m_pkthdr.rcvif两个字段,这两个字段在mbuf承载输入分组的时候存在,负责指向一个接收接口的指针
三、在mbuf链中,如果承载的是一个完整的数据包,mbuf链中的第一个mbuf会单独承载数据包的首部(以太网、IP和TCP/UDP首部)
四、以接收以太网帧为例,讲述m_devget函数和m_pullup函数: