首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将套接字netlink与新的netlink系列一起使用

如何将套接字netlink与新的netlink系列一起使用
EN

Stack Overflow用户
提问于 2012-02-29 06:18:05
回答 1查看 2.5K关注 0票数 2

我在使用netlink套接字和新的netlink family...in时遇到了一些问题,特别是在组方面。我在内核空间中使用netlink_broadcastnlmsg_multicast方法将消息发送到用户空间。例如,我有一个带有defs的标题:

代码语言:javascript
复制
 #define NETLINK_MYFAMILY 20
 #define NL_MYGRP         2

以及打开套接字并绑定到netlink地址的进程:

代码语言:javascript
复制
int sock = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_MYFAMILY);
...
struct sockaddr_nl nl_addr;
memset(&nl_addr, 0, sizeof(struct sockaddr_nl));
nl_addr.nl_family = AF_NETLINK;
nl_addr.nl_pid = getpid();
nl_addr.nl_groups = NL_MYGRP;

int r = bind(sock, (struct sockaddr *)&nl_addr, sizeof(struct sockaddr_nl));
...

在内核空间中,我不由自主地调用:

代码语言:javascript
复制
struct sock *s = netlink_kernel_create(&init_net,
                                       NETLINK_MYFAMILY,
                                       NL_MYGRP,
                                       recv_cb,
                                       NULL, THIS_MODULE);

其中recv_cb是进程从用户空间发送消息时调用的回调。

现在我尝试使用以下命令向用户空间发送一条消息:

代码语言:javascript
复制
netlink_broadcast(s, skb, 0, NL_MYGRP, GFP_ATOMIC);

只有当NL_MYGRP为1时,我才能正确读取进程中的消息。我无法确定linux/netlink.h中指定的是problem...All netlink系列,并且数字20不存在,所以我认为可以用它来指定我的新系列。怎么啦?谢谢你们所有人。

EN

回答 1

Stack Overflow用户

发布于 2016-02-18 05:43:03

20已经被NETLINK_RDMA使用。你为什么不直接使用NETLINK_USERSOCK作为你的netlink系列呢?

代码语言:javascript
复制
#define NETLINK_ROUTE       0   /* Routing/device hook              */
#define NETLINK_UNUSED      1   /* Unused number                */
#define NETLINK_USERSOCK    2   /* Reserved for user mode socket protocols  */
#define NETLINK_FIREWALL    3   /* Unused number, formerly ip_queue     */
#define NETLINK_SOCK_DIAG   4   /* socket monitoring                */
#define NETLINK_NFLOG       5   /* netfilter/iptables ULOG */
#define NETLINK_XFRM        6   /* ipsec */
#define NETLINK_SELINUX     7   /* SELinux event notifications */

#define NETLINK_ISCSI       8   /* Open-iSCSI */
#define NETLINK_AUDIT       9   /* auditing */
#define NETLINK_FIB_LOOKUP  10  
#define NETLINK_CONNECTOR   11
#define NETLINK_NETFILTER   12  /* netfilter subsystem */
#define NETLINK_IP6_FW      13
#define NETLINK_DNRTMSG     14  /* DECnet routing messages */
#define NETLINK_KOBJECT_UEVENT  15  /* Kernel messages to userspace */
#define NETLINK_GENERIC     16

/* leave room for NETLINK_DM (DM Events) */
#define NETLINK_SCSITRANSPORT   18  /* SCSI Transports */
#define NETLINK_ECRYPTFS    19
#define NETLINK_RDMA        20
#define NETLINK_CRYPTO      21  /* Crypto layer */

#define NETLINK_INET_DIAG   NETLINK_SOCK_DIAG

#define MAX_LINKS 32     
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9490651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档