- 论坛徽章:
- 36
|
嗯,这个函数 nf_register_hook 实现的也很清楚
int nf_register_hook(struct nf_hook_ops *reg)
{
struct nf_hook_ops *elem;
int err;
err = mutex_lock_interruptible(&nf_hook_mutex);
if (err < 0)
return err;
list_for_each_entry(elem, &nf_hooks[reg->pf][reg->hooknum], list) {
if (reg->priority < elem->priority)
break;
}
list_add_rcu(®->list, elem->list.prev);
mutex_unlock(&nf_hook_mutex);
return 0;
}
只有当带注册的 hook 优先级低于全局链表中的某个元素的优先级时,才会插到该元素的前面。
因此,如果两个同优先级的 hook 函数,注册在通过一个 hook 点,先注册的先执行。
但是,不建议这样做。优先级最好不要和已经注册的 优先级相同。 |
|