在Linux内核中注册传输协议的协议处理程序

时间:2016-06-06 13:49:01

标签: linux linux-kernel udp kernel protocol-handler

我试图在Linux内核中实现QUIC协议。由于QUIC正在使用UDP,我一直在使用UDP代码作为学习基础。 现在我想注册QUIC协议的协议处理程序,但我不知道如何以及在何处执行它,因为我无法在UDP源文件中找到相关的代码段。 我在互联网上搜索过,但所有的例子都谈到了为IPv4注册处理程序,而我在UDP(或TCP)中找不到类似的实现。 有人能指出我如何注册UDP协议处理程序?这将帮助我用QUIC做同样的事情。

1 个答案:

答案 0 :(得分:1)

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协议处理程序是.handler结构中的udp_protocol字段:

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,
};