到目前为止,我已经使用Genetlink
使用户能够向我的模块发送一些基本命令,而不需要任何参数。时代已经改变,我需要让用户在消息中添加更多数据。具体来说,我需要它们能够发送char
,int
和enum
值的数组。
在哪里可以将所需数据添加到邮件中?
到目前为止我见过的例子(如this one)更简单,没有帮助。
我看到GENL操作定义回调如下:
int (*doit)(struct sk_buff *skb, struct genl_info *info);
但我找不到任何使用sk_buff的例子,只有genl_info。这可能是我正在寻找的吗?
答案 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