与netlink的内核空间用户空间通信

时间:2010-12-14 15:11:43

标签: c kernel netlink

我的目标是始终在内核内存中有一个数组或列表,以便始终可以从内核空间访问它。为此,我在这里推荐使用netlink套接字。我按照this example进行操作,其中显示了如何发送字符串。我不确定如何在套接字中发送结构数组或结构列表。

typedef struct {
    int fiveDollarBills;
    int denDollarBills;
} Bills;

是否可以使用netlink发送列表或数组?

1 个答案:

答案 0 :(得分:1)

NetLink本身并不关心数据是字符串,整数,结构等。它只需要一个void *和一个长度并复制数据而不用看它。您可以将结构转换为void *并使用sizeof确定长度并通过netlink发送该数据。

另一方面,你只需要得到void *和length,验证长度是它应该是什么,然后将void *转换回指向你的struct的指针。要验证的两个重要事项是:

  1. UserSpace和KernelSpace代码都同意结构的内存布局。这意味着针对相同的.h进行编译,并确保编译选项使得内存布局和对齐方式相同。

  2. Struct将作为原始内存副本进行传输,没有用于修复指针的智能,因此您的结构不能包含任何指针等。

  3. 另一种选择不是直接发送原始数据,而是通过将数据从已知格式的字符串转换为“序列化”数据。这将允许您以额外的CPU和内存开销为代价处理更复杂的数据结构