gpt4 book ai didi

linux - 在 linux 内核模块中获取全局网络命名空间的实例

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:53 24 4
gpt4 key购买 nike

我正在编写一个 Linux 内核模块,并希望获得一个指向设备上的全局网络命名空间的 struct net* 指针。我在模块初始化函数中尝试了以下代码:

// test-module.c
#include <linux/kernel.h>
#include <linux/module.h>
#include <net/net_namespace.h>

int init_dev (void)
{
struct net *net1;

printk ("Init Module\n");

net1 = get_net_ns_by_pid(1); // getting NS for PID 1 (init process)
if(net1 != NULL){
printk ("Init Module --- Got net ns pointer \n");
}
else {
printk ("Init Module --- Blank net ns pointer \n");
}

return 0;
}

void cleanup (void)
{
printk ("Cleaning Up the Module\n");
return;
}

module_init (init_dev);
module_exit (cleanup);

生成文件:

obj-m += test-module.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

我可以编译模块,但是当我尝试使用 sudo insmod test-module.ko 插入模块时,我在 dmesg 中收到错误:

test-module: Unknown symbol get_net_ns_by_pid (err 0)

想请问有没有人知道如何获取struct net*指针。

最佳答案

正如@Tsyvarev 所提到的,我在文件末尾添加了以下行并且它运行良好:

MODULE_LICENSE("GPL");

关于linux - 在 linux 内核模块中获取全局网络命名空间的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56727544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com