Неустранимая ошибка: net / sock.h: нет такого файла или каталога (ядро - связь с приложением в пользовательском пространстве) [C] - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь разработать модуль для связи между ядром и приложением Userspace. Я попробовал ответ, предоставленный в https://stackoverflow.com/a/25071310/4190159

Проблема в том, что у меня есть следующий код:

#include <net/sock.h>
#include <net/netlink.h>
#include <linux/skbuff.h>
#include <string.h>

#define MY_GROUP    1

struct sock* socket;
struct sk_buff* socket_buff;

static void nl_receive_callback (struct sk_buff *skb)
{
    nlmsg_free(skb);
}

static void kernel_send_nl_msg(void)
{
    struct nlmsghdr *nlsk_mh;
    char* msg = "hello kernel";

    socket = netlink_kernel_create(&init_net, NETLINK_USERSOCK, 1, nl_receive_callback, NULL, THIS_MODULE);

    socket_buff = nlmsg_new(256, GFP_KERNEL);
    nlsk_mh = nlmsg_put(socket_buff, 0, 0, NLMSG_DONE, strlen(msg), 0);
    NETLINK_CB(socket_buff).pid = 0;    // kernel pid
    NETLINK_CB(socket_buff).dst_group = MY_GROUP;
    strcpy(nlmsg_data(nlsk_mh), msg);

    nlmsg_multicast(socket, socket_buff, 0, MY_GROUP, GFP_KERNEL);

    return;
}

Когда я пытаюсь скомпилировать вышеупомянутый код, используя:

gcc netlink_module.c -o netlink.o

Я получаю следующую ошибку:

netlink_module.c: 2: 10: фатальная ошибка: net / sock.h: такого файла нет или каталог #include компиляция прекращена.

Я пытался найти ошибку, но большая часть результатов поиска возвращается для файла sys / socket.h, а не для net / sock.h

Может кто-то указать, что идет не так?

...