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.
1 Answer
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, };