[翻译] Chapter 11. Frame Transmission 帧传输

Transmission 是 帧从Linux系统中出去的 术语,这时帧由系统发送出去或者是转发出去的情况。在本章会涉及到帧传输过程中的主要任务,有以下:

1、启动和禁用帧传输

2、调度网口设备传输帧

3、在设备的出口队列中选择等待的下一帧进行传输

4、传输本身(transmission实现函数)

帧传输在很多情况下是在第十章介绍的帧接收的逆过程,比如传输的软中断是NET_TX_SOFTIRQ,接收的软中断是NET_RX_SOFTIRQ,传输的软中断处理函数net_tx_action对应接收的就是net_rx_action等等。因此如果已经学习了上一章,这一章的内容就比较容易理解。图11-1比较了设备接收和传输帧的逻辑。这里有一些相似点:

1、poll_list 是轮询的设备列表,因为这些设备有非空的接收队列。output_queue是有帧需要传输的设备列表。poll_list和output_queue都是softnet_data结构体的两个元素,在第9章中描述

2、设备想要被调度传输帧必需先打开,即设置了_ _LINK_STATE_START flag;并且还要使能传输,即_ _LINK_STATE_XOFF flag 清除

3、当一个设备被接收调度,它的_ _LINK_STATE_RX_SCHED标识位被设置;当一个设备被传输调度,它的_ _LINK_STATE_SCHED被设置

dev_queue_xmit 在传输中发挥作用与netif_rx 在接收中相同,都是在驱动缓冲区和内核缓冲区之间传输帧。当设备需要帧传输时或者需要对一些不用的缓冲区做清扫动作时,net_tx_action函数就会被调用。与入口有队列可以用之外,出口同样有队列可以使用。出口队列,被流量控制模块调用(QoS layer)实际上要比入口队列复杂一些:不同于入口队列是一个先进先出的模型,出口队列是一个树形结构。尽管流量控制也同样对入口队列支持,但它更多的是用来管理和维护并不是真正的控制流量。

猜你喜欢

转载自blog.csdn.net/qq_28351465/article/details/82838299
今日推荐