在看到内核网络子系统部分时,涉及到了很多通用的应用部分,就比如此篇的 通知链机制。
一、什么是通知链
Linux内核中各个子系统相互依赖,当其中某个子系统状态发生改变时,就必须使用一定的机制告知使用其服务的其他子系统,以便其他子系统采取相应的措施。为满足这样的需求,内核实现了事件通知链机制(notificationchain)。通知链只能用在各个子系统之间,而不能在内核和用户空间进行事件的通知。组成内核的核心系统代码均位于kernel目录下,通知链表位于kernel/notifier.c中,对应的头文件为<linux/notifier.h>。事件通知链表是一个事件处理函数的列表,每个通知链都与某个或某些事件有关,当特定的事件发生时,就调用相应的事件通知链中的回调函数,进行相应的处理。
二、通知链做了什么
通知链,那么就分为通知者和被通知者,它们的行为如下:
通知者:当指定的事件发生的时候,通知者会通过通知链来将时间发送给被通知者。
被通知者:定义了当事件发生时,对应的事件处理函数。
逻辑流程为:
1、通知者定义通知链。
2、被通知者向通知者定义的通知链中注册事件处理函数。
3、当事件发生的时候,通知者向被通知者发送信息,被通知者来处理该事件。
三、通知链的具体应用和实例
不重复造轮子了,下面这篇博客介绍的很清楚,本文就摘自这篇博客,给的例子也很通俗易懂:
Linux内核通知链_哈哈一笑-CSDN博客_linux 内核通知链
Linux内核通知链 使用和简析_DecJ的博客-CSDN博客
Linux内核基础--事件通知链(notifier chain)_fishOnFly的博客-CSDN博客
以路由接口为实际导向的例子