在Linux内核中,IP over InfiniBand(IPoIB)是一种将IP协议运行在InfiniBand网络上的技术。为了实现IPoIB网络设备的高效管理,内核驱动需要处理许多复杂的任务,包括PKey(Partition Key)的管理、设备的初始化与启动等。本文将深入分析IPoIB驱动中的关键函数和机制,特别是ib_find_pkey
、ipoib_pkey_dev_check_presence
和ipoib_ib_dev_open
的实现细节,帮助读者理解IPoIB设备驱动的工作原理。
1. PKey的作用与ib_find_pkey
函数
1.1 PKey的作用
在InfiniBand网络中,PKey(Partition Key)用于划分网络分区,确保只有具有相同PKey的节点才能相互通信。PKey是一个16位的值,其中最高位(第15位)表示是否为全成员(Full Member),其余15位用于标识分区。
-
全成员PKey:最高位为1,表示该节点可以与其他全成员节点通信。
-
有限成员PKey