《TCP/IP详解 卷2:实现》 —3.12 ifinit函数

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

3.12   ifinit函数

接口结构被初始化并链接到一起后,main (图3-23)调用ifinit,如图3-42所示。

image.png

图3-42   函数ifinit

43-51   for循环遍历接口列表,并把没有被接口的attach函数设置的每个接口输出队列的最大长度设置为50 (ifqmaxlen)。

输出队列的大小关键要考虑的是发送最大长度数据报的分组的个数。例如以太网,若一个进程调用sendto发送65 507字节的数据,它被分为45个数据报片,并且每个数据报片被放进接口的输出队列。若队列非常小,由于队列没有空间,进程可能不能发送大的数据报。

if_slowtimo启动接口的监视(watchdog)定时器。当一个接口的定时器到期,内核会调用这个接口的监视定时器函数。一个接口可以提前重设定时器来阻止监视定时器函数的调用,或者,若不需要监视定时器函数,则可以把if_timer设置为0。图3-43所示的是函数if_slowtimo。

338-343   if_slowtimo函数有一个参数arg没有使用,但慢超时函数的原型(7.4节)要求有这个参数。

image.png

图3-43   函数if_slowtimo

344-352   if_slowtimo忽略if_timer为0的接口;若if_timer不等于0,if_slowtimo把if_timer减1,并在这个定时器到达0时调用这个接口关联的if_watchdog函数。在调用if_slowtimo时,分组处理进程被splimp阻塞。返回前,ip_slowtimo调用timeout,以hz/IFNET_SLOWHZ时钟频率调度对它自己的调用。hz是1秒内时钟滴答数(通常是100)。它在系统初始化时设置,并保持不变。因为IFNET_SLOWHZ被定义为1,因此内核每赫兹调用一次if_slowtimo,即每秒一次。

函数timeout调度的函数被内核的函数callout回调。详见[Leffler er al. 1989]。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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