NAME
ibv_attach_mcast, ibv_detach_mcast - マルチキャストグループ(multicast group)に/から queue pair(QP) を参加させる/脱退させる。
SYNOPSIS
#include <infiniband/verbs.h> int ibv_attach_mcast(struct ibv_qp *qp, const union ibv_gid *gid, uint16_t lid); int ibv_detach_mcast(struct ibv_qp *qp, const union ibv_gid *gid, uint16_t lid);
DESCRIPTION
ibv_attach_mcast()
は MGID gid と MLID mlid で指定されるマルチキャストグループに QP qp を参加させる。
ibv_detach_mcast()
は MGID gid と MLID mlid で指定されるマルチキャストグループから QP qp を脱退させる。
マルチキャスト(Multicast)に関しては「InfiniBand プログラムに必要な基本的な概念」の 10. マルチキャストも参照のこと。
ibv_attach_mcast()
はサブネットのマルチキャストフォワーディングテーブルを変更する機能は持たない。
既に構成されたマルチキャストがポートまで届く設定になっている時にのみ有効である。
送信側は MLID(Multicast LID) とマルチキャスト用の論理的な QP 番号である 0xFFFFFF を指定してマルチキャストメッセージを送信する。
このマルチキャストメッセージを qp で受信したい場合に、ibv_attach_mcast()
を使って登録する。
同一の MLID に対して複数の QP を登録してもよい。
その場合、マルチキャストグループに登録済みの QP が同じマルチキャストメッセージのコピーをそれぞれ受け取ることになる。
ibv_attach_mcast()
には MGID(Multicast GID) と MLID のペアで登録しているが、これを登録するのは Subnet Administrator(SA) の仕事であり一般に Subnet Manager 内に搭載される。
マルチキャストの利用は InfiniBand Verbs だけでは利用できず、ibv_attach_mcast()
を使う前に、マルチキャストグループ自身の登録を Subnet Manager に依頼する必要がある。
RETURN VALUE
ibv_attach_mcast()
と ibv_detach_mcast()
は成功した場合は 0 を返す。
失敗した場合は、エラーの原因を示す値(errno と同じ)を返す。
NOTES
qp に指定できるのは UD QP (IBV_QPT_UD) のみである。
1 つのマルチキャストグループに対して、異なる複数の QP を参加させることができるが、QP の個数は ibv_query_device で取得できる max_mcast_qp_attaqch を越えることはできない。
QP が同一のマルチキャストグループに対して 2 度以上 ibv_attach_mcast
で登録されても、二重にカウントされることはなく、マルチキャストメッセージは 1 コピーしか受信しない。
1 つの QP が複数のマルチキャストグループに登録することも可能である。 こちらの上限は特に定義されていない。
SEE ALSO
InfiniBand Verbs API Reference、ibv_create_qp(3)
AUTHORS