ipoib:检查具有给定iboip的infiniband节点是否可达

时间:2012-01-31 12:33:32

标签: c linux network-programming ip infiniband

我需要检查一个给定的ipoib IP地址是否已将相关的IB节点连接到infiniband交换机。

想法是获取IP数据包发送到的IB端口的guid,如果端口连接/可达,则使用ibnodes等命令进行检查。

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

感谢

1 个答案:

答案 0 :(得分:3)

这里的答案有点棘手,我担心你想做的事情真的不可能。但我不确定你到底想要做什么,所以让我解释一下可以做些什么。

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端口之间没有固定的关联 - 你可以在任何IPoIB接口上放置你想要的任何IP地址,并随时更改它。