linux - 在 Linux 内核中为传输协议(protocol)注册协议(protocol)处理程序

标签 linux linux-kernel udp kernel protocol-handler

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

最佳答案

UDP 协议(protocol)在 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协议(protocol)处理器是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 - 在 Linux 内核中为传输协议(protocol)注册协议(protocol)处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37659213/

相关文章:

Python 文件中的空格

ruby 守护程序脚本在注销 ssh 时停止

php - socket_create 与 fsockopen php

regex - 匹配输入字符串中的 URL 链接

linux - 不使用用户名和密码访问 firebird

c - 如果我使用两个 alloc_pages 进行检查,则 alloc_pages 返回的地址相同

linux - 在 Linux 2.6 驱动程序模块 makefile 中创建调试目标

linux - 静态插入linux内核模块

java - Java中的UDP数据包路由

c# - UDP 打洞帮助