nf_hook_ops数据结构 1structnf_hook_ops2{3structlist_head list;//链表成员4/*User fills in from here down.*/5nf_hookfn *hook;//钩子函数指针6structmodule *owner;7intpf;//协议簇,对于ipv4而言,是PF_INET8inthooknum;//hook类型9/*Hooks are ordered in ascending priority.*/10intpriority;//...
成员hook即用户定义的勾子函数;owner表示注册这个勾子函数的模块,因为netfilter是内核空间的,所以一般为模块来完成勾子函数注册;pf与hooknum一起索引到特定协议特定编号的勾子函数队列,用于索引nf_hooks;priority决定在同一队列(pf与hooknum相同)的顺序,priority越小则排列越靠前。 struct nf_hook_ops只是存储勾子的数...
NF_IP_PRE_ROUTING: 接收到的包进入协议栈后立即触发此 hook,在进行任何路由判断 (将包发往哪里)之前 NF_IP_LOCAL_IN: 接收到的包经过路由判断,如果目的是本机,将触发此 hook NF_IP_FORWARD: 接收到的包经过路由判断,如果目的是其他机器,将触发此 hook NF_IP_LOCAL_OUT: 本机产生的准备发送的包,在进入...
static int ipt_nat_register_lookups(struct net *net) { int i, ret; for (i = 0; i < ARRAY_SIZE(nf_nat_ipv4_ops); i++) { ret = nf_nat_ipv4_register_fn(net, &nf_nat_ipv4_ops[i]); if (ret) { while (i) nf_nat_ipv4_unregister_fn(net, &nf_nat_ipv4_ops[--i]); retu...
1、使用struct ethhdr结构体来表示以太网帧的头部。这个struct ethhdr结构体位于#include<linux/if_ether.h>之中。 #define ETH_ALEN 6 //定义了以太网接口的MAC地址的长度为6个字节 #define ETH_HLAN 14 //定义了以太网帧的头长度为14个字节 #define ETH_ZLEN 60 //定义了以太网帧的最小长度为 ETH_Z...
[XPS_MAPS_MAX]; #endif #ifdef CONFIG_NET_CLS_ACT struct mini_Qdisc __rcu *miniq_egress; #endif #ifdef CONFIG_NETFILTER_EGRESS struct nf_hook_entries __rcu *nf_hooks_egress; #endif #ifdef CONFIG_NET_SCHED DECLARE_HASHTABLE (qdisc_hash, 4); #endif /* These may be needed for future...
Expand DownExpand Up@@ -1601,7 +1583,6 @@ MODULE_DEVICE_TABLE(of, rk_pcie_of_match); staticconststructdw_pcie_opsdw_pcie_ops={ .start_link=rk_pcie_establish_link, .link_up=rk_pcie_link_up, }; staticintrk1808_pcie_fixup(structrk_pcie*rk_pcie,structdevice_node*np) Expand Down...
// 这是我们的hook函数,当内核在调用ipv4_conntrack_in的时候,将会到达这个函数。 static unsigned int hook_ipv4_conntrack_in(const struct nf_hook_ops *ops, struct sk_buff *skb, const struct net_device *in, const struct net_device *out, const struct nf_hook_state *state) ...
4. 对于 mode l3s,在 ipvlan_handle_frame 中会直接返回 RX_HANDLER_PASS,也就是说,mode l3s 的报文会在主设备就进入到网络层的处理阶段,对于 mode l3s 来说,预先注册的 nf_hook 会在 NF_INET_LOCAL_IN 时触发,执行 ipvlan_l3_rcv 操作,通过 addr 找到子设备,更换报文的网络层目的地址,然后直接进入...
NF_IP_POST_ROUTING: 本机产生的准备发送的包或者转发的包,在经过路由判断之后, 将触发此 hook 以ip_rcv为例,它主要负责接收和处理 IPv4 数据包,在处理完核心逻辑后,会进入内核预义的钩子进行后续处理。 intip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt,struct net_device...