使用genetlink将数据发送到内核

时间:2014-03-18 08:42:39

标签: linux netlink

到目前为止,我已经使用Genetlink使用户能够向我的模块发送一些基本命令,而不需要任何参数。时代已经改变,我需要让用户在消息中添加更多数据。具体来说,我需要它们能够发送charintenum值的数组。

在哪里可以将所需数据添加到邮件中?

到目前为止我见过的例子(如this one)更简单,没有帮助。

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

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

但我找不到任何使用sk_buff的例子,只有genl_info。这可能是我正在寻找的吗?

1 个答案:

答案 0 :(得分:1)

这可能不是您正在寻找的最佳答案,但这里有。我已经完成了一些netlink套接字,但我不确定我所知道的是否适用于“Genetlink”。无论如何,我认为你应该发现skb->数据应该是你放置数据的地方。 (这就是套接字的用途。说实话,我不确定如果没有套接字,你怎么能沟通。)

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

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

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”的完整示例。 example