2

我需要检查对于给定的 ipoib IP 地址,关联的 IB 节点是否连接到 infiniband 交换机。

这个想法是获取 IP 数据包发送到的 IB 端口的 guid,并使用类似 ibnodes 的命令检查该端口是否已连接/可访问。

有人知道如何在用户空间 C 或 cmdline 上实现这一点吗?特别是我有兴趣将 IP 解析为 guid。

谢谢

4

1 回答 1

4

这里的答案有点棘手,恐怕你想做的事情并不是真的可能。但我不确定你真正想要做什么,所以让我解释一下可以做什么。

IPoIB 将 IP 地址解析为 GID 的方式是通过 ARP——以太网使用广播进行 ARP,而 IPoIB 使用 InfiniBand 多播,但在这两种情况下,ARP 请求都会发送到 IP 子网中的所有节点。地址的实际所有者用它的链路级地址进行响应,在 IPoIB 的情况下,它是 QP 编号(您不必关心它)和 GID。

例如,在可以通过 IPoIB 到达 192.168.1.3 的系统上,该ip neigh命令显示:

# ip neigh
192.168.1.3 dev ib0 lladdr 80:00:04:04:fe:80:00:00:00:00:00:00:00:02:c9:02:00:21:70:d1 REACHABLE

lladdr 的最后 16 个字节是 GID;在配置了 192.168.1.3 的远程系统上,您可以看到 GID:

# cat /sys/class/infiniband/mthca0/ports/1/gids/0 
fe80:0000:0000:0000:0002:c902:0021:70d1

我认为这对您没有帮助的原因是,如果无法访问 IP 地址,那么 ARP 将无法解析该地址,因此您将无法获得 GID 来检查。从某种意义上说,您的问题并不是很好,因为 IP 地址与 IB 端口没有固定的关联——您可以将任何 IP 地址放在任何 IPoIB 接口上,并随时更改它。

于 2012-02-01T18:39:35.557 回答