linux内核网络-列表管理函数“每日读书”

这些函数会操作sk_buff 元素列表列表也称为队列(queue), 函数完整列表参见<include/linux/skbuff.h><net/core/skbuff.c> 一些常用函数如下

skb_queue_head_init

用一个元素为空队列sk_buff_head

skb_queue_head, skb_queue_tail

一个缓冲区分别添加到队列

skb_dequeue,skb_dequeue_tail

一个元素分别从队列或者去掉第二个函数可能应该成为skb_dequeue_head, 才能其他队列函数之名相称

skb_queue_purge

队列变为队列

skb_queue_walk

依次循环运行队列里每个元素

这类函数都必须原子方式执行也就是说, 他们必须为此队列抓住sk_buff_head结构所提供回转锁否则可能会被指向队列添加元素或者队列中删除元素异步事件终端到期定时器调用函数导致竞争情况race condition

因此每个函数按照以下方式实现

static inline function_name(parameter_list)

{

unsigned long flags;

spinlock_irqsave(...);

__function_name(parameter_list);

spin_unlock_irqrestore();

}

函数有一个包裹函数取得会转锁然后调用一个两个下划线符号开头命名函数接着放开

关键数据结构

net_device结构

net_device数据结构存储着特定网络设备所有信息每个设备都有一个这种结构无论真实设备还是虚拟设备本节接口设备量词交替使用不过其他情况下这两个词之间的差异是很重要

所有设备net_device 结构放在一个全局变量dev_base全局列表数据结构定义Include/linux/netdevice.h网络设备注册第八章描述第八章详细描述net_device 大多数字段如何初始化以及初始化时机

如同sk_buff,这个结构相当庞大包括EthernetToken Ring虽然同一种类型所有设备而言net_device 结构某些字段置成相同但是有些字段必须每种设备模型做不同设置因此几乎所有类型而言linux都提供一个通用函数可以对一些参数初始化使所有模型之间都一样除了针对模型设置那些具有特定值字段每个设备驱动程序都会启用函数驱动程序还可以改写一些已经内核初始字段更多细节参见第八章

net_device 结构字段可以分成以下几种类型

配置 configuration

统计数据 statistics

设备状态 Device status

列表管理 list management

bonding 也称为etherChannel trunking 允许一组接口群集起来视为单一接口系统需要带宽支持点对点联机这种功能就有用处速度增加计划可以达到线性虚拟接口吞吐几乎等于个别接口吞吐量

VLAN 指的是virtual LANVLAN使用是一种方便方式通过Ethernet附加VLAN标签就可以使用相同L2交换在不同广播流量隔离出来

流量管理Traffic management

功能专用 Feature specific

通用 Generic

函数指针 VFT

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值