rdma_cap_opa_mad(9)
π rdma_cap_opa_mad(9) π
okay so bestie, welcome to the Kernel API Manual β yes the Kernel API Manual, we're in the big leagues now β and today's main character is rdma_cap_opa_mad. It's a tiny little bool-returning function and honestly it ate. Let's get into it π
β¨ NAME β¨
rdma_cap_opa_mad β the vibe check that tells you whether a device port actually supports OPA Management Datagrams. that's it, that's the whole job π¦
πΈ SYNOPSIS πΈ
bool rdma_cap_opa_mad (struct ib_device *device , u32 port_num );
look at her. short, sweet, returns a bool. no notes π
π«Ά ARGUMENTS π«Ά
deviceβ the device you wanna check, bestie. that's the one.port_numβ and the port number on it you're checking. specific port, specific vibes β¨
π DESCRIPTION π
so here's the lore π β Intel OmniPath devices go ahead and extend and/or replace the InfiniBand Management datagrams with their own versions. These OPA MADs share many but not all of the characteristics of InfiniBand MADs. so like, cousins. not twins. iykyk.
OPA MADs differ in the following ways, and yes i'm numbering them because this is important:
- MADs are variable size up to 2K. meanwhile the IBTA defined MADs remain fixed at 256 bytes. not me being flexible while you're stuck at 256 π§
- OPA SMPs must carry valid PKeys β non-negotiable, periodt.
- OPA SMP packets are a different format entirely. it's giving "same energy, different font" π
β RETURN β
returns true if the port supports OPA MAD packet formats. that's it. that's the answer. simple, clean, iconic π
π¦ SEE ALSO π¦
the kernel file ./include/rdma/ib_verbs.h is the plug for all of this, and then there is literally a whole friend group of siblings you should also go meet:
struct rdma_stat_desc(9)struct rdma_hw_stats(9)ib_rate_to_mult(9)ib_rate_to_mbps(9)ib_port_attr_to_speed_info(9)enum ib_mr_type(9)struct ib_mr_status(9)mult_to_ib_rate(9)struct ib_udata(9)struct rdma_netdev(9)struct ib_device_ops(9)ib_get_client_data(9)ib_modify_qp_is_ok(9)rdma_cap_ib_switch(9)rdma_start_port(9)rdma_for_each_port(9)rdma_end_port(9)rdma_cap_ib_mad(9)rdma_cap_ib_smi(9)rdma_cap_ib_cm(9)rdma_cap_iw_cm(9)rdma_cap_ib_sa(9)rdma_cap_ib_mcast(9)rdma_cap_af_ib(9)rdma_cap_eth_ah(9)rdma_cap_opa_ah(9)rdma_max_mad_size(9)rdma_cap_roce_gid_table(9)rdma_core_cap_opa_port(9)rdma_mtu_enum_to_int(9)rdma_mtu_from_attr(9)ib_alloc_pd(9)ib_dealloc_pd(9)rdma_create_ah(9)rdma_create_user_ah(9)ib_get_gids_from_rdma_hdr(9)ib_get_rdma_header_version(9)ib_init_ah_attr_from_wc(9)ib_create_ah_from_wc(9)rdma_modify_ah(9)rdma_query_ah(9)rdma_destroy_ah_user(9)rdma_destroy_ah(9)ib_modify_srq(9)ib_query_srq(9)ib_destroy_srq_user(9)ib_destroy_srq(9)ib_post_srq_recv(9)ib_create_qp(9)ib_modify_qp_with_udata(9)ib_modify_qp(9)ib_query_qp(9)ib_destroy_qp(9)ib_open_qp(9)ib_close_qp(9)ib_post_send(9)ib_post_recv(9)ib_alloc_cq_any(9)rdma_set_cq_moderation(9)ib_destroy_cq_user(9)ib_destroy_cq(9)ib_poll_cq(9)ib_req_notify_cq(9)ib_virt_dma_to_ptr(9)ib_virt_dma_to_page(9)ib_dma_mapping_error(9)ib_dma_map_single(9)ib_dma_unmap_single(9)ib_dma_map_page(9)ib_dma_unmap_page(9)ib_dma_map_bvec(9)ib_dma_unmap_bvec(9)ib_dma_map_sgtable_attrs(9)ib_dma_map_sg(9)ib_dma_unmap_sg(9)ib_dma_max_seg_size(9)ib_dma_sync_single_for_cpu(9)ib_dma_sync_single_for_device(9)ib_dereg_mr_user(9)ib_dereg_mr(9)ib_update_fast_reg_key(9)ib_inc_rkey(9)ib_attach_mcast(9)ib_detach_mcast(9)ib_check_mr_status(9)ib_device_try_get(9)rdma_ah_find_type(9)ib_lid_cpu16(9)ib_lid_be16(9)rdma_roce_rescan_device(9)rdma_device_to_ibdev(9)ibdev_to_node(9)rdma_device_to_drv_device(9)rdma_flow_label_to_udp_sport(9)rdma_calc_flow_label(9)rdma_get_udp_sport(9)
likeβ¦ that's the whole extended friend group. go say hi π
sign-off szn π β this page lives in ./include/rdma, it's dated October 2026, and it goes by rdma_cap_opa_mad(9). mwah, ily, go read your headers π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms