mbuf : 存储器缓存

2019-05-30  本文已影响0人  食梦狸猫

mbuf的主要用途就是保存在进程和网络接口之间相互传递的用户数据,以及源与目标地址,插口选项等等。根据在成员m_flags中填写不同标志,有4种不同的mbuf:

  1. 若m_flags为0,mbuf只包含数据。 3.08.04.png
  2. 若m_flags为M_PKTHDR,则这是一个分组首部,描述一个分组数据的第一个mbuf。


    3.09.16.png
  3. 若m_flags为M_EXT,则这是不包含分组首部,但包含超过208字节的数据,这用到了一个叫“簇”的外部缓存。 3.21.14.png

4 最后一类mbuf包含一个分组首部,并包含超过208字节的数据。同时设置了标志M_PKTHDR和M_EXT。


3.24.36.png

另外有几点:

3.36.00.png

代码介绍:

3.44.57.png 有一个全局变量为mbstat,用于mbuf的统计信息,其中所维护的各种统计,如图: 3.49.16.png

可通过netstat -m检测。(内核在一个全局变量中保持对某些统计信息的跟踪,当内核在运行时,一个进程对这些信息进行检查)

m_flags的独立的值:


3.55.28.png

m_devget函数

当接收到一个以太网帧时,设备驱动程序调用m_devget来创建一个mbuf链表,并把所接收到的帧复制到这个链表中。根据所接收到的帧的长度不同,导致以下4种不同的mbuf链表。


4.06.15.png 4.06.23.png 4.06.28.png

m_pullup函数

m_pullup函数有两个目的:

只有头指针的mbuf链表


4.41.38.png

有头尾指针的链表


4.43.18.png

使用簇的好处在于:

上一篇 下一篇

猜你喜欢

热点阅读