0

到目前为止,我一直Genetlink让用户能够向我的模块发送一些基本命令,而无需任何参数。时代变了,我需要让用户向消息中添加更多数据。具体来说,我需要他们能够发送char,intenum值的数组。

在哪里可以将所需的数据添加到消息中?

到目前为止我看到的例子(比如这个)更简单并且没有帮助。

我看到GENL操作定义回调如下:

int (*doit)(struct sk_buff *skb, struct genl_info *info);

但我找不到任何使用 sk_buff 的示例,只有 genl_info。这可能是我要找的吗?

4

1 回答 1

1

这可能不是您正在寻找的最佳答案,但在这里。我对 netlink 套接字做了一些工作,但我不确定我所知道的是否适用于“Genetlink”。无论如何,我认为你应该发现 skb->data 应该是你放置数据的地方。(这就是套接字的用途。老实说,我不确定没有它你怎么能交流任何东西。)

至于发送任意数量的数据以及不同类型的数据,我发现最好使用模块和用户空间应用程序同意的结构。

例如,我使用这样的东西:

struct IntArrayMessage  {
  u_int32_t message_type;
  u_int32_t length;
  // Buffer data goes at the end
};

“message_type”基本上是一个枚举,它告诉接收程序它是一个“IntArrayMessage”并将数据转换为“IntArrayMessage”。投射后,您可以读取长度以了解要从套接字读取多少内容。您读取的那些值是 int 数组。

显然,您必须确保从另一端发送额外的信息。

无论如何,希望这会有所帮助,总比没有答案好。

同样,我不熟悉“Genetlink”,但如果这有帮助,那就太好了。

另外,这里有一个使用 netlink 发送“hello”的完整示例。例子

于 2014-03-21T23:12:56.980 回答