引言
在InfiniBand网络中,IPoIB(IP-over-InfiniBand)协议通过模拟以太网行为,使传统IP应用能够透明地运行在InfiniBand硬件上。然而,InfiniBand本身依赖全局唯一标识符GID(Global Identifier)进行路由,而IPoIB需要通过ARP协议将目标IP地址映射到对应的GID。本文通过分析Linux内核中IPoIB驱动的源码,深入探讨以下问题:
- 当邻居表中无目标IP的GID缓存时,IPoIB如何触发多播ARP请求?
- InfiniBand在未知目标GID时能否直接发送数据?
一、IPoIB驱动触发多播ARP的源码解析
1. 发送入口函数:ipoib_start_xmit
ipoib_start_xmit
是IPoIB驱动的核心发送函数,负责处理从网络层(如IP、ARP)下发的数据包。其核心逻辑分为多播处理和单播处理两部分。
(1)多播数据包处理
if (unlikely(phd