《TCP/IP详解 卷2:实现》 —2.6.2 mtod和dtom宏
【摘要】 本节书摘来自华章计算机《TCP/IP详解 卷2:实现》一书中第2章,第2.6.2节,作者是[美]加里R.赖特(Gary R.Wright),W. 理查德史蒂文斯(W.Richard Stevens),陆雪莹 蒋慧 等译 谢希仁 校。
2.6.2 mtod和dtom宏
宏mtod和dtom也定义在文件mbuf.h中。它们简化了复杂的mbuf结构表达式。
mtod(“mbuf到数据”)返回一个指向mbuf数据的指针,并把指针声明为指定类型。例如代码
存储在mbuf的数据(m_data)指针ip中。C编译器要求进行类型转换,然后代码用指针ip引用IP首部。我们可以看到当一个C结构(通常是一个协议首部)存储在一个mbuf中时会用到这个宏。当数据存放在mbuf本身(图2-14和图2-15)或存放在一个簇(图2-16)中时,可以用这个宏。
宏dtom(“数据到mbuf”)取得一个存放在mbuf中任意位置的数据的指针,并返回这个mbuf结构本身的指针。例如,若我们知道ip指向一个mbuf的数据区,下面的语句序列
把指向这个mbuf开始的指针存放到m中。我们知道MSIZE(128)是2的幂,并且内核存储器分配器总是为mbuf分配连续的MSIZE字节的存储块,dtom仅仅是清除参数中指针的低位来发现这个mbuf的起始位置。
宏dtom有一个问题:当它的参数指向一个簇或在一个簇内时,如图2-16所示,它不能正确执行。因为那里没有指针从簇内指回mbuf结构,不能使用dtom。这导致了下一个函数:m_pullup。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)