我已经在StackOverflow上阅读了很多有关如何将消息从内核发送到用户空间的信息,包括this article on lwn,the documentation on infrared以及与此主题相关的很多问题,但我仍然坚持以正确的方式做到这一点。我现在正在做的是:
nl_socket_alloc()
分配一个套接字genl_connect()
genl_ctrl_resolve()
来解决这个家庭nl_socket_modify_cb()
配置套接字的默认回调nl_recvmsgs_default()
等待来自内核的响应struct sk_buff *buff
和struct genl_info *info
的回调函数(我们将其称为cb
)cb
然后执行以下操作:
genlmsg_new()
分配新的套接字缓冲区genlmsg_put_reply()
genlmsg_end()
完成消息genlmsg_reply()
我已经进行了所有错误检查,我知道我的消息已成功发送,但是我没有在用户空间端收到这些消息,我想错误是在用户的回调函数的配置上这是因为,当我禁用libnl的auto_ack
功能时,会收到来自内核的所有消息。我想知道我的接收消息的协议是否正确,如果正确,为什么在启用auto_ack
的情况下不起作用?