ib_create_ah_from_wc(9)
π NAME π
okay so literally welcome to ib_create_ah_from_wc(9) β the Kernel API Manual page that's about to be your new hyperfixation. this one creates an address handle that's all tied up with the sender of the work completion you point at. bestie, it's giving "who even sent this" but make it formal. π«Ά
β¨ SYNOPSIS β¨
struct ib_ah * ib_create_ah_from_wc (struct ib_pd *pd , const struct
ib_wc *wc , const struct ib_grh *grh , u32 port_num );
no cap, that's the whole glow-up right there. four args, one handle, let's go π«
π ARGUMENTS π
pdβ the protection domain that's emotionally attached to this address handle. like, they come as a set. πwcβ the work completion info from a message you received. this is your "receipts" era, it's literally the receipt. π§Ύgrhβ points at the received global route header. but bestie hear me β this parameter gets completely ignored unless the work completion says the GRH is valid. so don't come at it with expectations unlesswcgives you the green flag. π©β¨port_numβ the outbound port number you wanna link up with the address. match made in heaven, port edition. π
πΈ DESCRIPTION πΈ
so what's the address handle even for, you ask? iconic question. the address handle is what you use to reference a local or global destination in all UD QP post sends. that's the whole vibe β it's the little name-tag for where your stuff is headed. not me being obsessed with a pointer, but here we are. ππ₯
π¦ SEE ALSO π¦
the crossover episode, fr fr. also peep the kernel file ./include/rdma/ib_verbs.h β that's where the lore lives:
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_opa_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)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)
bestie reminder: grh only matters when the work completion flags the GRH as valid. otherwise it's just standing there, ignored, living its truth. π
and that's the whole page, mwah π this lil masterpiece comes to you from the source ./include/rdma, dated October 2026, and the manual answer is ib_create_ah_from_wc(9) every single time. slay, go build your address handles, i'm rooting for you ππβ¨
π¦ 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