小编guo*_*ger的帖子

通过C中的Netlink从内核到用户空间的多播

我试图编写一个使用Netlink在内核和用户空间之间进行通信的简单程序.基本上这就是我想要实现的目标:

  1. 用户空间程序开始绑定到用户定义的多播组.
  2. 插入内核模块
  3. 内核模块向此多播组发送消息
  4. 用户空间程序接收消息

这是我的代码:

======用户空间程序======

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<linux/netlink.h>
#include<sys/types.h>
#include<unistd.h>

#define MYPROTO NETLINK_USERSOCK
#define MYMGRP 0x21 //User defined group, consistent in both kernel prog and user prog

int open_netlink()
{
        int sock = socket(AF_NETLINK,SOCK_RAW,MYPROTO);
        struct sockaddr_nl addr;

        memset((void *)&addr, 0, sizeof(addr));

        if (sock<0)
                return sock;
        addr.nl_family = AF_NETLINK;
        addr.nl_pid = getpid();
        addr.nl_groups = MYMGRP;
        if (bind(sock,(struct sockaddr *)&addr,sizeof(addr))<0)
                return -1;
        return sock;
}

int read_event(int sock)
{
        struct sockaddr_nl nladdr;
        struct msghdr msg;
        struct iovec iov[2]; …
Run Code Online (Sandbox Code Playgroud)

c kernel multicast linux-kernel netlink

3
推荐指数
1
解决办法
8070
查看次数

标签 统计

c ×1

kernel ×1

linux-kernel ×1

multicast ×1

netlink ×1