《深入理解Linux网络技术内幕》阅读笔记(四)
来源:互联网 发布:从哪里查淘宝消费总额 编辑:程序博客网 时间:2024/05/22 01:46
通知链
数据结构:
14 struct notifier_block 15 { 16 int (*notifier_call)(struct notifier_block *self, unsigned long, void *); 17 struct notifier_block *next; 18 int priority; 19 };
模型:
通知链就是一份简单的函数列表,当给定的事件发生时予以执行。每个函数都让另一个子系统知道,调用此函数的子系统内所发生的一个事件或者子系统所侦测到的一个事件。
因此,通知链是所谓的发布-订阅模型:
1.被通知者就是要求接收某事件的子系统,而且会提供回调函数予以调用。
2.通知者就是感受到一个事件并调用回调函数的子系统。
通知链的注册接口实现:
83 int notifier_chain_register(struct notifier_block **list, struct notifier_block *n) 84 { 85 write_lock(¬ifier_lock); 86 while(*list) 87 { 88 if(n->priority > (*list)->priority) 89 break; 90 list= &((*list)->next); 91 } 92 n->next = *list; 93 *list=n; 94 write_unlock(¬ifier_lock); 95 return 0; 96 }
其中的语句(用的是>而不是>=):
if(n->priority > (*list)->priority)
决定了对于每条链条而言,那些notifier_block实体被插入到一个按优先级排序的列表中。相同的优先级的元素则按插入时间排序:新的元素排在尾端。
实现通知:
141 int notifier_call_chain(struct notifier_block **n, unsigned long val, void *v)142 {143 int ret=NOTIFY_DONE;144 struct notifier_block *nb = *n;145 146 while(nb)147 {148 ret=nb->notifier_call(nb,val,v);149 if(ret&NOTIFY_STOP_MASK)150 {151 return ret;152 }153 nb=nb->next;154 }155 return ret;156 }
网络子系统几条重要的通知链:
inetaddr_chain:
发送有关本地接口上的IPv4地址的插入,删除以及变更的通知信息。
netdev_chain:
发送有关网络设备注册状态的通知信息。
其它:
网络代码也可以注册其他内核组件产生的通知信息。例如,某些NIC设备驱动程序可以用reboot_notifier_list链注册,当系统重新引导时,此链会发出警告。
0 0
- 《深入理解Linux网络技术内幕》阅读笔记(四)
- 深入理解网络技术内幕 阅读笔记(四)
- 《深入理解Linux网络技术内幕》阅读笔记(一)
- 《深入理解Linux网络技术内幕》阅读笔记(二)
- 《深入理解Linux网络技术内幕》阅读笔记(三)
- 《深入理解Linux网络技术内幕》阅读笔记(五)
- 《深入理解Linux网络技术内幕》阅读笔记(六)
- 《深入理解Linux网络技术内幕》阅读笔记(七)
- 《深入理解Linux网络技术内幕》阅读笔记(八)
- 《深入理解Linux网络技术内幕》阅读笔记(九)
- 《深入理解Linux网络技术内幕》阅读笔记(十)
- 《深入理解Linux网络技术内幕》阅读笔记(十一)
- 《深入理解Linux网络技术内幕》阅读笔记(十二)
- 《深入理解Linux网络技术内幕》阅读笔记(十三)
- 《深入理解Linux网络技术内幕》阅读笔记(十四)
- 《深入理解Linux网络技术内幕》阅读笔记(十五)
- 《深入理解Linux网络技术内幕》阅读笔记(十六)
- 《深入理解Linux网络技术内幕》阅读笔记(十七)
- 【转载,自己有做批注】struct用法深入探索
- solr自定义分词报错:casused by NoMethodException <init>(map<string,string>)
- Scala深入浅出进阶经典 第52讲:Scala中路径依赖代码实战详解
- IOS TableView的Cell高度自适应,UILabel自动换行适应
- 极大似然函数估计Matlab子函数
- 《深入理解Linux网络技术内幕》阅读笔记(四)
- 创建守护进程
- 高斯消元学模板
- Scala深入浅出进阶经典 第53讲:Scala中结构类型实战详解
- 12864无字库液晶显示(一)
- 欢聚时代笔试题,滴滴出行编程题
- 代码风格的问题
- 点击 li 弹出其 index
- 数字金额转化为汉字大写金额