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

本文详细解释了net_device数据结构在系统中的应用,涉及全局列表、hash表的组织,以及链路层多播的处理,包括多播地址的监听、管理和dev_mc_list结构的使用。allmulti字段的引用计数机制也在文中得到讨论。
摘要由CSDN通过智能技术生成

列表管理

net_device 数据结构插入一个全局列表两个hash对此第八章予以描述下列字段用于完成这些任务

struct net_device *next

每个net_device 数据结构链接全局列表下一个元素

struct hlist_node name_hlist

struct hlist_node index_hlist

net_device 结构链接两个hashbucket列表

链路层多播

多播是一种数据传递多位接受着机制多播可以L3网络层以及L2链路层Ethernet使用在本节我们关心后者

链路层多播传送可以通过链路层报头使用特殊地址或者控制信息Ethernet本省就支持多播十三章会看到一个Ethernet地址如何划分多播或者广播

利用一个特定多播地址其他范围地址区分开来这意味着可能地址50%是多播2^4850%可是很大数字一个借口要求加入一大堆多播群组接口只简单监听所有多播地址这比维护一份很长劣币哦啊根据列表费时过滤

输入L2多播更有效快速net_device数据结构flags之一就是用于表示设备是否监听所有地址决定何时设置或者清楚标识本节说明allmulti字段控制

每个设备都会监听每个链路层多播地址保存一个dev_mc_list结构实例链路层多播地址可以分别dev_mc_adddev_mc_delete函数添加或者删除net_device结构中相关字段包括

struct dev_mc_list *mc_list

指向设备dev_mc_list结构列表表头指针

int mc_count

设备多播地址数目也就是mc_list所指列表长度

int allmulti

非零引起设备监听所有多播地址如同本章稍早讨论promiscuity, allmulti引用计数一个简单布尔这是因为多台设备可能各自都需要监听所有地址变量0变为非零就会调用dev_set_allmulti 函数指示接口监听所有多播地址allmulti 变为0就会发生相反事情

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值