我在使用netlink套接字和新的netlink family...in时遇到了一些问题,特别是在组方面。我在内核空间中使用netlink_broadcast或nlmsg_multicast方法将消息发送到用户空间。例如,我有一个带有defs的标题:
#define NETLINK_MYFAMILY 20
#define NL_MYGRP 2以及打开套接字并绑定到netlink地址的进程:
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));
...在内核空间中,我不由自主地调用:
struct sock *s = netlink_kernel_create(&init_net,
NETLINK_MYFAMILY,
NL_MYGRP,
recv_cb,
NULL, THIS_MODULE);其中recv_cb是进程从用户空间发送消息时调用的回调。
现在我尝试使用以下命令向用户空间发送一条消息:
netlink_broadcast(s, skb, 0, NL_MYGRP, GFP_ATOMIC);只有当NL_MYGRP为1时,我才能正确读取进程中的消息。我无法确定linux/netlink.h中指定的是problem...All netlink系列,并且数字20不存在,所以我认为可以用它来指定我的新系列。怎么啦?谢谢你们所有人。
发布于 2016-02-18 05:43:03
20已经被NETLINK_RDMA使用。你为什么不直接使用NETLINK_USERSOCK作为你的netlink系列呢?
#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 https://stackoverflow.com/questions/9490651
复制相似问题