Linux Netfilter NF_HOOK解析

NF_HOOK在Linux内核中被转化为NF_HOOK_THRESH宏,用于处理网络数据包过滤。该宏设定阈值,仅执行优先级高于设定值的hook回调。主要功能包括通过nf_iterate遍历注册的hook并调用,以及依据hook回调返回值决定报文的命运。
摘要由CSDN通过智能技术生成

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,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值