gpt4 book ai didi

linux - 如何从内核识别消息并将消息发送到应用程序?

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:25 26 4
gpt4 key购买 nike

我正在编写一个发送和接收互联网数据包的内核模块,我正在使用通用网络链接在内核和用户空间之间进行通信。

当应用程序想要发送互联网消息时(不管协议(protocol)是什么),我可以通过我在通用 netlink 系列中定义的函数之一毫无问题地将它发送到内核,然后模块发送它通过电线。一切都很好。

但是当模块收到一个数据包时,我怎样才能到达适当的进程来传递消息呢?我的问题不在于确定正确的过程:这是通过自定义协议(protocol)(例如 IP 表)完成的;但它包含我应该存储哪些信息以通知正确的进程?

到目前为止,我只保留进程的 portid(因为它启动了通信)并且我一直在尝试使用函数 genlmsg_unicast(),但它是在 2009 的内核版本中进行了更改,需要一个额外的参数(除了 skb *bufferportid):一个指向 struct net 的指针。我找到的所有教程都没有解决这个问题。

我尝试使用 &init_net 作为新参数,但计算机死机了,我必须通过电源按钮重新启动它。

感谢任何帮助。

最佳答案

发现导致问题的原因:结果是我在函数结束时释放了缓冲区。 #facepalm

我不应该这样做,因为缓冲区会排队并在那里等待,直到它实际交付。因此,如果函数 genlmsg_unicast() 成功,则释放缓冲区不是调用者的责任。

现在它可以与 &init_net 一起使用。

关于linux - 如何从内核识别消息并将消息发送到应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52653556/

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