gpt4 book ai didi

c - 如何知道linux内核在哪里解析tuntap接口(interface)上的MLD连接?

转载 作者:行者123 更新时间:2023-11-30 19:24:44 24 4
gpt4 key购买 nike

我一直在开发一个程序,该程序在运行于 Linux 内核之上的路由设备上使用 TUNTAP 接口(interface)(TUN 模式)。它是一个多播隧道协议(protocol),我正在尝试通过我的应用程序将 MLD 连接发送到内核,以便可以在其他地方接收它。然而,即使我已经对接口(interface)上发送的数据包进行了四重检查,Linux 内核还是会在数据包被传递之前将其丢弃。

乏味地,我一直在通过 linuxkernel 跟踪数据包的路径,试图找出它被丢弃的原因,并且我想我已经在某种程度上弄清楚了为什么它没有被处理。 Hop-by-Hop 选项(包含 MLD 必需的 Router-Alert 选项)正在 ipv6_rcv 函数中的 net/ipv6/ip6_input.c 中进行解析,但不是继续在 ip6_rcv_finish 中处理数据包,而是将数据包由于 ipv6_rcv 函数末尾的 NF_HOOK 以某种方式将数据包解释为正在由其他东西处理,因此被丢弃。 (NF_STOLEN 而不是 NF_ACCEPT)

一旦 ipv6_rcv 函数完成执行,其他东西就会执行 ip6_mc_input(仍然在 net/ipv6/ip6_input.c 中),但从这里开始,Hop-by-Hop 选项不会被处理,这意味着当内核最终处理该层时-4 协议(protocol),它没有任何东西来处理协议(protocol),因为逐跳选项是要预先处理的。这意味着内核由于未知协议(protocol)而丢弃了数据包。

我想弄清楚是什么在调用 ip6_mc_input。我在 Elixir 上查找了很多关于它的名称,但是有很多可能性,因为它是从 rt6_info 结构中的指针调用的,而该结构很难跟踪,因为很多东西都使用它。有谁知道什么可以帮助我进行搜索?

IGMP 加入工作正常,但 IPv4 的内容可能非常相似,因此来自该上下文的信息可能也会有所帮助。

供引用,使用的linux内核版本是v4.4.6

最佳答案

我知道发生了什么事。

使用打印出 ip6_mc_input 调用者的文件位置的宏,我发现数据包来 self 的 ipt_netmap.c 文件。看起来数据包是由 IPTables 获取的,而 IPTables 没有编程来处理跃点选项。事实证明,我设置了一个不需要设置的配置选项,因此禁用它解决了我的问题。

关于c - 如何知道linux内核在哪里解析tuntap接口(interface)上的MLD连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59924294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com