深入理解linux网络技术-P179

上锁

net_device结构的组织一节可知,dev_base列表以及dev_name_head和dev_name_index两张hash表由dev_base_list锁保护。然而,该锁只用于对列表和hash表的访问予以串行化,而不是对net_device数据结构内容变更予以串行化。net_device内容的变更是由Routing Netlink信号量(rtnl_sem)负责;而此锁的取得和释放分别通过rtnl_lock和rtnl_unlock完成。此信号量可用于net_device实例的变更的串行化,而这些变更来自于:

运行期间事件

  例如,当连接状态变更时(例如,网络电缆插入或者拔除时),内核也必须通过修改dev-flags改变设备状态。

配置变更

  当用户应用来自net-tools套件的ifconfig和route命令,或者来自IPROUTE2套件的ip命令改变配置时,内核会通过ioctl命令和Netlink套接字的ip命令改变配置时,内核会通过ioctl命令和NetLink套接字接收到通知。由这些接口启用的函数都必须使用锁。

net_device数据结构包括一些可用于上锁的字段

ingress_lock

queue_lock

  当处理入口和出口流量调度是,分别由流量控制使用。

xmit_lock

xmit_lock_owner

  用于同步设备驱动程序hard_start_xmit函数的访问。

原文地址:https://www.cnblogs.com/flintlovesam/p/5118486.html