RDMA_JOIN...TICAST_EX(3)
β¨ RDMA_JOIN...TICAST_EX(3) β¨
okay bestie, so this is a page from the Librdmacm Programmer's Manual and it's all about rdma_join_multicast_ex, which is literally the β¨extendedβ¨ glow-up version of joining a multicast group. buckle up π
πΈ NAME πΈ
rdma_join_multicast_ex β joins a multicast group, but make it extended options π
π¦ SYNOPSIS π¦
#include <rdma/rdma_cma.h>
int rdma_join_multicast_ex (struct rdma_cm_id *id, struct
rdma_cm_join_mc_attr_ex *mc_join_attr, void *context);
π ARGUMENTS π
idβ the communication identifier that's linked to this request, iykyk π«Άmc_join_attrβ anrdma_cm_join_mc_attr_exstruct, exactly as it's defined in<rdma/rdma_cma.h>πcontextβ your very own user-defined context that rides along with the join request, main character energy fr fr β¨
π DESCRIPTION π
So basically: this joins a multicast group (MCG) with extended options. Currently it supports MC join with a specified join flag. periodt.
struct rdma_cm_join_mc_attr_ex {
uint32_t comp_mask; /* Bitwise OR between "rdma_cm_join_mc_attr_mask" enum */
uint32_t join_flags; /* Use a single flag from "rdma_cm_mc_join_flags" enum */
struct sockaddr *addr; /* Multicast address identifying the group to join */
};
the supported join flags are, and this part matters bestie, don't skip it π
RDMA_MC_JOIN_FLAG_FULLMEMBERβ creates the multicast group, sends multicast messages to the MCG, and receives multicast messages from the MCG. the full experience, ate πRDMA_MC_JOIN_FLAG_SENDONLY_FULLMEMBERβ creates the multicast group, sends multicast messages to the MCG, but doesn't receive multicast messages from the MCG (send-only). it's giving one-way street π¦
Kicking off a MC join as a "Send Only Full Member" on InfiniBand needs SM support, otherwise the join will straight-up fail. no cap. π
Kicking off a MC join as a "Send Only Full Member" on RoCEv2/ETH will not send any IGMP messages, unlike a Full Member MC join. And when "Send Only Full Member" is used, the QP will not be attached to the MCG. just so you know π«Ά
β RETURN VALUE β
Returns 0 on success, or -1 on error. If an error happens, errno gets set to tell you the failure reason. that's the vibe check π
π₯ NOTES π₯
- Before joining a multicast group, the
rdma_cm_idmust be bound to an RDMA device by callingrdma_bind_addrorrdma_resolve_addr. non-negotiable, bestie. - Using
rdma_resolve_addrrequires the local routing tables to resolve the multicast address to an RDMA device β unless a specific source address is provided. - You must call
rdma_leave_multicastto leave the multicast group and release any multicast resources. don't just ghost it π - After the join operation completes, if a QP is associated with the
rdma_cm_id, it's automatically attached to the multicast group when the multicast event is retrieved by the user. Otherwise, you're responsible for callingibv_attach_mcastto bind the QP to the multicast group. your turn, bestie πͺ - The join context comes back to you through the
private_datafield in therdma_cm_event. it's giving little gift π
π SEE ALSO π
rdma_join_multicast(3), rdma_leave_multicast(3), rdma_bind_addr(3), rdma_resolve_addr(3), rdma_create_qp(3), rdma_get_cm_event(3)
π AUTHORS π
Alex Vesker <valex@mellanox.com>
and that's the whole page, bestie π this one's from librdmacm, dated 2017-11-17 β go forth and join those multicast groups responsibly π β¨π¦
π¦ where this page comes from
- alpine 3.24: rdma-core-doc 61.0-r0 Β· GPL-2.0-only OR BSD-2-Clause
- arch rolling: rdma-core 65.0-1 Β· GPL-2.0-or-later OR LicenseRef-OpenIB.org-BSD-MIT AND GPL-2.0-or-later OR LicenseRef-OpenIB.org-BSD-FreeBSD AND GPL-2.0-or-later OR LicenseRef-Intel-BSD-3-Clause AND GPL-2.0-or-later OR LicenseRef-PathScale-BSD-Patent-License AND CC0-1.0 AND MIT AND BSD-2-Clause AND CPL-1.0 OR BSD-2-Clause OR GPL-2.0-or-later
- centos-stream 10: rdma-core-devel 62.0-3.el10 Β· GPLv2 or BSD
- centos-stream 9: rdma-core-devel 61.0-3.el9 Β· GPLv2 or BSD
- centos-stream 9: rdma-core-devel 61.0-3.el9 Β· GPLv2 or BSD
- debian bookworm: librdmacm-dev 44.0-2 Β· BSD-MIT OR GPL-2.0-only
- debian trixie: librdmacm-dev 56.1-1 Β· BSD-MIT OR GPL-2.0-only
- fedora 43: rdma-core-devel 58.0-4.fc43 Β· GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
- fedora 43: rdma-core-devel 58.0-4.fc43 Β· GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
- fedora 44: rdma-core-devel 61.0-2.fc44 Β· GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
- fedora 44: rdma-core-devel 61.0-2.fc44 Β· GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
- fedora 44: rdma-core-devel 61.1^20260812git975bdaf-1.fc44 Β· GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
- fedora 44: rdma-core-devel 61.1^20260812git975bdaf-1.fc44 Β· GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
- nixos 26.05: rdma-core 62.0
- nixpkgs unstable: rdma-core 65.0
- opensuse-leap 16.0: rdma-core-devel 56.1-160000.2.2 Β· BSD-2-Clause OR GPL-2.0-only
- opensuse-leap 16.0: rdma-core-devel 56.1-160000.2.2 Β· BSD-2-Clause OR GPL-2.0-only
- opensuse-leap 16.0: rdma-core-devel 56.1-160000.2.2 Β· BSD-2-Clause OR GPL-2.0-only
- opensuse-leap 16.0: rdma-core-devel 56.1-160000.2.2 Β· BSD-2-Clause OR GPL-2.0-only
- ubuntu jammy: librdmacm-dev 39.0-1 Β· BSD-MIT OR GPL-2.0-only
- ubuntu noble: librdmacm-dev 50.0-2build2 Β· BSD-MIT OR GPL-2.0-only
- ubuntu noble: librdmacm-dev 50.0-2ubuntu0.2 Β· BSD-MIT OR GPL-2.0-only
- ubuntu questing: librdmacm-dev 56.1-1ubuntu1
- ubuntu resolute: librdmacm-dev 61.0-2ubuntu3 Β· BSD-MIT OR GPL-2.0-only
- ubuntu stonking: librdmacm-dev 64.0-1ubuntu1 Β· BSD-MIT OR GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms