linux内核网络源码 链上通知事件

通知信息定义于kernel/sys.cnotifier_call_chain产生函数只是按照优先级次序调用对此注册所有函数注意回调函数是在调用notifier_call_chain 进程上下文 ontext 执行然而回调函数也可以实现通知信息某处队列然后唤醒查看通知信息进程

int notifier_call_chain(struct notifier_block **n, unsigned longval, void *v)

{

int ret = NOTIFY_DONE;

struct notifier_block *nb = *n;

while (nb)

{

ret = nb->notifier_call(nb,val, v);

if (ret & NOTIFY_STOP_MASK) {

    return ret; 

        }

nb = nb->next;

    }

return ret;

}

以下三个输入参数的意义

n 通知

val 事件类型本身标识一组事件val明确标识一种事件类型

v 输入参数可由各种各样注册处理函数使用在不同情况下可以有不同用途

例如当一个新的网络设备内核注册时相关的通知信息会使用v标识net_device数据结构

notifier_call_chain调用回调函数可以返回定义include/linux/notifier.h任何NOTIFY_XXX

NOTIFY_OK 通知信息正确处理

NOTIFY_DONE 通知对信息不感兴趣

NOTIFY_BAD 事情出错停止调用事件回调函数

NOTIFY_STOP 函数调用然而不需要进一步调用其他毁掉函数

NOTIFY_STOP_MASK

标识notifier_call_chain检查了解是否停止调用回调函数或者继续调用下去NOTIFY_BADNOTIFY_STOP定义都包括了标识

notifier_call_chain 捕获返回最后一个调用回调函数接受的返回值无论是否所有回调函数都已经调用或者其中之一由于NOTIFY_BAD或者NOTIFY_STOP返回值中断了循环都是如此

在同一时间不同CPU相同通知有可能同时调用notifier_call_chain 回调函数责任必要地方处理互斥串行化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值