Получение экземпляра глобального сетевого пространства имен в модуле ядра Linux - PullRequest
0 голосов
/ 23 июня 2019

Я пишу модуль ядра 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);

Makefile:

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*.

1 Ответ

0 голосов
/ 24 июня 2019

Как упоминал @ Цыварев, я добавил следующую строку в конец файла, и она работала нормально:

MODULE_LICENSE("GPL");
...