c语言 - 我需要从内核空间调用套接字"setopt"例程



我需要从内核空间对TCP套接字进行更改(尽管我想保持通用(。USB 驱动程序将收到一条消息,需要对给定的socket结构进行此更改。

直接调用函数需要用户空间内存,解决方法不是我可以放置在生产环境中的东西。因此,直接打电话似乎不太可能。我看到的另一个解决方案是复制需要用户空间内存的部分,但这个解决方案也不是我想要投入生产的东西。

我正在考虑编写一个用户空间程序,通过procfs与驱动程序交谈并拨打电话。驱动程序会将数据放在文件中,以指示用户空间应用执行各种操作。

有没有更好的方法来实现这一目标?

根据选项,您可以从内核空间内调用sock_setsockopttcp_setsockopt。还有用于IPv4和IPv6选项的功能。

或者,如果您只想操作特定选项,则可以查看这些函数的实现方式,然后对特定选项使用相同的实现。例如,如果要直接调整TCP_CONGESTIONtcp_setsockopt执行以下操作(在验证传入的值之后(:

lock_sock(sk);
err = tcp_set_congestion_control(sk, name, true, true,
ns_capable(sock_net(sk)->user_ns,
CAP_NET_ADMIN));
release_sock(sk);

最新更新