gpt4 book ai didi

c - 允许创建多少个 netlink 协议(protocol)?

转载 作者:太空宇宙 更新时间:2023-11-04 11:07:41 28 4
gpt4 key购买 nike

我正在测试以下 netlink 示例代码(内核版本 3.3.4)并发现如果 NETLINK_PROTOCOL 设置为大于 31 的数字,模块插入将失败。如果 NETLINK_PROTOCOL 设置为,模块插入将成功1,2,3,5,17,19,21-31

这是否意味着只允许创建 32 个 netlink 协议(protocol)?

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

static int NETLINK_PROTOCOL = 31;
module_param(NETLINK_PROTOCOL, int, S_IRUGO);

struct sock *nl_sk = NULL;


static void hello_nl_recv_msg(struct sk_buff *skb) {

struct nlmsghdr *nlh;
int pid;
struct sk_buff *skb_out;
int msg_size;
char *msg = "Hello from kernel";
int res;

printk(KERN_INFO "Entering: %s\n", __FUNCTION__);

msg_size = strlen(msg);

nlh = (struct nlmsghdr*)skb->data;

printk( KERN_INFO "Netlink received msg payload: %s\n",
(char*)nlmsg_data(nlh));

pid = nlh->nlmsg_pid; /*pid of sending process */

skb_out = nlmsg_new(msg_size,0);

if ( !skb_out ) {

printk(KERN_ERR "Failed to allocate new skb\n");
return;
}

nlh = nlmsg_put(skb_out,0,0,NLMSG_DONE,msg_size,0);

NETLINK_CB(skb_out).dst_group = 0; /* not in mcast group */
strncpy(nlmsg_data(nlh),msg,msg_size);

res = nlmsg_unicast(nl_sk,skb_out,pid);


if (res < 0) {

printk(KERN_INFO "Error while sending bak to user\n");
}
}


static int __init hello_init(void)
{
printk("Entering: %s\n", __FUNCTION__);

nl_sk = netlink_kernel_create( &init_net,
NETLINK_PROTOCOL, 0,
hello_nl_recv_msg,
NULL, THIS_MODULE);
if(!nl_sk) {

printk(KERN_ALERT "Error creating socket.\n");
return -10;

}

return 0;
}

static void __exit hello_exit(void) {

printk(KERN_INFO "exiting hello module\n");
netlink_kernel_release(nl_sk);

}


module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");

最佳答案

是的。虽然没有具体记录,但

static inline struct sock *
netlink_kernel_create(struct net *net, int unit, struct netlink_kernel_cfg *cfg);

必须有一个 < MAX_LINKS 的单位,从内核版本 3.15 开始是 32。


关于c - 允许创建多少个 netlink 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24547246/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com