《TCP/IP详解 卷2:实现》 —3.6 ifnet与ifaddr的专用化

举报
华章计算机 发表于 2019/11/21 11:24:33 2019/11/21
【摘要】 本节书摘来自华章计算机《TCP/IP详解 卷2:实现》一书中第3章,第3.6节,作者是[美]加里R.赖特(Gary R.Wright),W. 理查德史蒂文斯(W.Richard Stevens),陆雪莹 蒋慧 等译 谢希仁 校。

3.6   ifnet与ifaddr的专用化

结构ifnet和ifaddr包含适用于所有网络接口和协议地址的通用信息。为了容纳其他设备和协议专用信息,每个驱动程序都定义了且每个协议都分配了一个专用化版本的ifnet和ifaddr结构。这些专用化的结构总是包含一个ifnet或ifaddr结构作为它们的第一个成员,这样无须考虑其他专用信息就能访问这些公共信息。

多数设备驱动程序通过分配一个专用化的ifnet结构的数组来处理同一类型的多个接口,但有些设备(例如环回设备)仅处理一个接口。图3-20所示的是我们的例子接口的专用化ifnet结构的组织。

image.png

图3-20   设备相关的结构中的ifnet结构的组织

注意,每个设备的结构以一个ifnet开始,接下来全是设备相关的数据。环回接口只声明了一个ifnet结构,因为它不要求任何设备相关的数据。在图3-20中,我们显示的以太网和SLIP驱动程序的结构softc带有数组下标0,因为两个设备都支持多个接口。任何给定类型的接口的最大个数由内核建立时的配置参数来限制。

结构arpcom(图3-26)对于所有以太网设备是通用的,并且包含地址解析协议(ARP)和以太网多播信息。结构le_softc(图3-25)包含专用于LANCE以太网设备驱动程序的其他信息。

image.png

每个协议把每个接口的地址信息存储在一个专用化的ifaddr结构的列表中。以太网协议使用一个in_ifaddr结构(6.5节),而OSI协议使用一个iso_ifaddr结构。另外,当接口被初始化时,内核为每个接口分配了一个链路层地址,它在内核中标识这个接口。

内核通过分配一个ifaddr结构和两个sockaddr_dl结构(一个是链路层地址本身,一个是地址掩码)来构造一个链路层地址。结构sockaddr_dl可被OSI、ARP和路由算法访问。图3-21显示的是一个带有链路层地址、Internet地址和OSI地址的以太网接口。3.11节说明了链路层地址(ifaddr和两个sockaddr_ld结构)的构造和初始化。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。