《TCP/IP详解 卷2:实现》 —3.9 SLIP初始化

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

3.9   SLIP初始化

依赖标准异步串行设备的SLIP接口在调用cpu_startup时初始化。当main直接通过SLIP的pdevinit结构中的指针pdev_attach调用slattach时,SLIP伪设备被初始化。

每个SLIP接口由图3-28中的一个sl_softc结构来描述。

image.png

图3-28   结构sl_softc

43-54   与所有接口结构一样,sl_softc有一个ifnet结构并且后面跟着设备专用信息。

除了在ifnet结构中的输出队列外,一个SLIP设备还维护另一个队列sc_fastq,它用于要求低时延服务的分组—一般由交互应用产生。

sc_ttyp指向关联的终端设备。指针sc_buf和sc_ep分别指向一个接收SLIP分组的缓存的第一个字节和最后一个字节。sc_mp指向下一个接收字节的地址,并在另一个字节到达时向前移动。

SLIP定义的4个标志显示在图3-29中。

image.png

图3-29   SLIP的if_flags和sc_flags值

SLIP在ifnet结构中定义了3个接口标志预留给设备驱动程序,另一个标志定义在结构sl_softc中。

sc_escape用于串行线的IP封装机制(5.3节),而TCP首部压缩信息(29.13节)保留在sc_comp中。

指针sc_bpf指向SLIP设备的BPF信息。

结构sl_softc由slattach初始化,如图3-30所示。

135-152   不像leattach一次仅初始化一个接口,内核只调用一次slattach,并且slattach初始化所有的SLIP接口。硬件设备在内核执行cpu_startup过程中被发现时进行初始化,而伪设备都是在main为这个设备调用pdev_attach函数时被初始化的。一个SLIP设备的if_mtu为296字节(SLMTU)。这包括标准的20字节IP首部、标准的20字节TCP首部和256字节的用户数据(5.3节)。

image.png

图3-30   函数slattach

SLIP网络由位于串行通信线两端的两个接口组成。slattach在if_flags中设置IFF_POINTOPOINT、SC_AUTOCOMP和IFF_MULTICAST。

SLIP接口限制它的输出分组队列if_snd的长度为50,并且它自己的接口队列sc_fastq的长度为32。图3-42显示,如果驱动程序没有设置长度,if_snd队列的长度默认为50(ifqmaxlen),因此这里的初始化是多余的。

以太网设备驱动程序不显式地设置它的输出队列的长度,它依赖于ifinit (图3-42)把它设置为系统的默认值。

if_attach需要一个指向ifnet结构的指针,因此slattach将sc_if的地址传递给if_attach,sc_if是一个第一个成员为结构sl_softc的ifnet结构。

专用程序slattach在内核初始化后运行(从初始化文件/etc/netstart),并通过打开串行设备和执行ioctl命令(5.3节)添加SLIP接口和异步串行设备。

153-155   对于每个SLIP设备,slattach调用bpfattach来登记带BPF的接口。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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