在 Linux 内核中为传输协议注册协议处理程序
register protocol handler for a transport protocol in Linux kernel
我正在尝试在 Linux 内核中实现 QUIC 协议。由于 QUIC 在 UDP 之上工作,我一直在使用 UDP 代码作为学习基础。
现在我想为 QUIC 协议注册协议处理程序,但我不知道如何以及在何处进行注册,因为我在 UDP 源文件中找不到相关的代码片段。
我在互联网上搜索过,但所有示例都在谈论为 IPv4 注册处理程序,但我没有在 UDP(或 TCP)中找到类似的实现。
有人可以指出 UDP 协议处理程序是如何注册的吗?这将帮助我用 QUIC 做同样的事情。
UDP 协议在 inet_init()
函数中注册(在 net/ipv4/af_inet.c 文件中):
if (inet_add_protocol(&udp_protocol, IPPROTO_UDP) < 0)
pr_crit("%s: Cannot add UDP protocol\n", __func__);
UDP 协议处理程序是 udp_protocol
结构中的 .handler
字段:
static const struct net_protocol udp_protocol = {
.early_demux = udp_v4_early_demux,
.handler = udp_rcv,
.err_handler = udp_err,
.no_policy = 1,
.netns_ok = 1,
};
我正在尝试在 Linux 内核中实现 QUIC 协议。由于 QUIC 在 UDP 之上工作,我一直在使用 UDP 代码作为学习基础。 现在我想为 QUIC 协议注册协议处理程序,但我不知道如何以及在何处进行注册,因为我在 UDP 源文件中找不到相关的代码片段。 我在互联网上搜索过,但所有示例都在谈论为 IPv4 注册处理程序,但我没有在 UDP(或 TCP)中找到类似的实现。 有人可以指出 UDP 协议处理程序是如何注册的吗?这将帮助我用 QUIC 做同样的事情。
UDP 协议在 inet_init()
函数中注册(在 net/ipv4/af_inet.c 文件中):
if (inet_add_protocol(&udp_protocol, IPPROTO_UDP) < 0)
pr_crit("%s: Cannot add UDP protocol\n", __func__);
UDP 协议处理程序是 udp_protocol
结构中的 .handler
字段:
static const struct net_protocol udp_protocol = {
.early_demux = udp_v4_early_demux,
.handler = udp_rcv,
.err_handler = udp_err,
.no_policy = 1,
.netns_ok = 1,
};