NF_HOOK实际是转成NF_HOOK_THRESH宏函数调用。
注意,thresh表示只执行优先级大于thresh的注册的hook回调。
NF_HOOK原型:
#define NF_HOOK(pf, hook, skb, indev, outdev, okfn) \
NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, INT_MIN)
NF_HOOK_THRESH定义原型:
#define NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, thresh) \
({int __ret; \
if ((__ret=nf_hook_thresh(pf, hook, (skb), indev, outdev, okfn, thresh, 1)) == 1)\
__ret = (okfn)(skb); \
__ret;})
NF_HOOK_THRESH宏调用nf_hook_thresh函数,实际是调用nf_hook_slow函数完成完成具体功能:
1、调用nf_iterate对注册链表的遍历及hook调用;
2、根据返回值对报文作不同行为处理;
/* pf 协议号
* hook hook点
* sdk 数据报文
* indev 数据报文入口设备
* outdev 出口设备
* okfn hook点结束后的回调函数,当前函数返回后再执行
* hook_thresh 优先级,只执行hook点上大于当前值的注册回调
*/
int nf_hook_slow(u_int8_t pf,