在内核模块init函数中注册该nf_hook_ops static int simple_nf_init(void) { #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0) nf_register_net_hook(&init_net, &packet_simple_nf_opt); #else nf_register_hook(&packet_simple_nf_opt); #endif printk("[simple_nf_test] network hooks success....
(1) ssk:为函数 netlink_kernel_create()返回的socket。 (2) skb:存放消息,它的data字段指向要发送的netlink消息结构,而 skb的控制块保存了消息的地址信息,宏NETLINK_CB(skb)就用于方便设置该控制块。 (3) pid:为接收此消息进程的pid,即目标地址,如果目标为组或内核,它设置为 0。 (4) nonblock:表示该函...
include/ --- 内核头文件,需要提供给外部模块(例如用户空间代码)使用。 kernel/ --- Linux内核的核心代码,包含了3.2小节所描述的进程调度子系统,以及和进程调度相关的模块。 mm/ --- 内存管理子系统(3.3小节)。 fs/ --- VFS子系统(3.4小节)。 net/ --- 不包括网络设备驱动的网络子系统(3.5小节)。 ipc/...
1.创建 netlink socket struct sock *netlink_kernel_create(struct net *net, int unit,unsignedint groups, void (*input)(struct sk_buff *skb), struct mutex *cb_mutex,structmodule *module); 参数说明: (1) net:是一个网络名字空间namespace,在不同的名字空间里面可以有自己的转发信息库,有自己的一...
kernel/ --- Linux内核的核心代码,包含了3.2小节所描述的进程调度子系统,以及和进程调度相关的模块。 mm/ --- 内存管理子系统(3.3小节)。 fs/ --- VFS子系统(3.4小节)。 net/ --- 不包括网络设备驱动的网络子系统(3.5小节)。 ipc/ --- IPC(进程间通信)子系统。 arch// ...
kernel_init函数在内核态运行,是内核代码 init进程是内核启动并运行的第一个用户进程,运行在用户态下。 一号内核进程调用execve()从文件/etc/inittab中加载可执行程序init并执行,这个过程并没有使用调用do_fork(),因此两个进程都是1号进程。 当内核启动了自己之后(已被装入内存、已经开始运行、已经初始化了所有的...
(1) ssk:为函数 netlink_kernel_create()返回的socket。 (2) skb:存放消息,它的data字段指向要发送的netlink消息结构,而 skb的控制块保存了消息的地址信息,宏NETLINK_CB(skb)就用于方便设置该控制块。 (3) pid:为接收此消息进程的pid,即目标地址,如果目标为组或内核,它设置为 0。
Netlink通信机制的简易流程如下图所示,本文将从用户态通过系统调用创建netlink socket、内核态调用netlink_kernel_create创建内核Netlink套接字进行分析,并在文章最后编写使用Netlink的案例。 二、用户态创建Netlink套接字 1、用户态创建Netlink socket 的相关分析 ...
3.1 进程与网络命名空间 Linux 上存在一个默认的网络命名空间,Linux 中的 1 号进程初始使用该默认空间。..., }; 初始的 init_nsproxy 里将多个命名空间都进行了初始化,其中我们关注的网络命名空间,用的是默认网络空间 init_net。...setup_net(&init_net, &i...
static void netlink_kernel_rcv(struct sk_buff *skb) { int res; res = netlink_rcv_skb(skb, &netlink_kernel_rcv_msg); return; } // 模块入口函数 static int __init nlkernel_init(void) { log("nlkernel init \r\n"); // 注册netlink协议 ...