我有一些問題使用netlink套接字與新的netlink系列...特別是與組。我在內核空間中使用netlink_broadcast
或nlmsg_multicast
方法將消息發送到用戶空間。我有一個頭,例如,與DEFS:如何使用套接字netlink與新的netlink系列
#define NETLINK_MYFAMILY 20
#define NL_MYGRP 2
,並打開一個套接字並綁定到網絡鏈路地址的過程:
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));
...
obsiously在內核空間我打電話:
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。我不能找出問題...所有netlink系列在linux/netlink.h
中指定,數字20不存在,所以我認爲它可以用來指定我的新家庭。哪裏不對?謝謝你們。
也許你可以接受的一些 – Coren 2012-02-28 22:23:36
謝謝科倫你過去的問題的答案,但我認爲「有用和清晰」和「接受」是不一樣的。 – MirkoBanchi 2012-02-28 22:52:49