I'm trying to implement the QUIC protocol in the Linux kernel. Since QUIC is working on top of UDP, I've been using the UDP code as a learning base. Now I want to register the protocol handler for the QUIC protocol but I don't understand how and where to do it as I can't find the relevant code piece in the UDP source file. I've searched on the internet but all the examples talk about registering the handler for IPv4 and I don't find a similar implementation in UDP (or TCP). Can someone point me to how the UDP protocol handler is registered? That'll help me in doing the same thing with QUIC.
UDP protocol is registered in inet_init()
function (in net/ipv4/af_inet.c file):
if (inet_add_protocol(&udp_protocol, IPPROTO_UDP) < 0)
pr_crit("%s: Cannot add UDP protocol\n", __func__);
And UDP protocol handler is .handler
field in udp_protocol
structure:
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,
};