libeth_xdpmo_rx_hash(9)
π libeth_xdpmo_rx_hash(9) β a Kernel API Manual moment π
okay bestie, this page lives in the Kernel API Manual section and honestly it's giving "small function, big responsibility" β¨
πΈ NAME πΈ
libeth_xdpmo_rx_hash β converts a &libeth_rx_pt into an XDP RSS hash metadata. that's it, that's the whole gig, and she ate π
π¦ SYNOPSIS π¦
int libeth_xdpmo_rx_hash (u32 *hash , enum xdp_rss_hash_type *rss_type ,
u32 val , struct libeth_rx_pt pt );
look at her. four args. zero chill. π₯
π ARGUMENTS π
hashβ a pointer to the variable where the hash gets written. she's not returning it, she's placing it, main character energy fr π«rss_typeβ a pointer to the variable where the hash type gets written. yes, another pointer. yes, you have to keep track. you got this π«Άvalβ the hash value straight out of the HW descriptor. raw. unprocessed. iconic πptβ the libeth parsed packet type. the libeth parsed one, not just any packet type, iykyk π
β DESCRIPTION β
so here's the vibe: this function handles the zeroed / not-available hash situation and converts the libeth parsed packet type into the corresponding XDP RSS hash type. lowkey the whole point of her existence π
she's meant to be called at the end of the xdp_metadata_ops idpf_xdpmo::xmo_rx_hash implementation. like, last. the finale. the closing number π¬
β οΈ important caveat bestie, do not skip this: if your driver doesn't use a constant packet type lookup table but instead generates it at runtime, it must call libeth_rx_pt_gen_hash_type(pt) to generate the XDP RSS hash type for each packet type. no cap, it's a must, not a maybe π
π RETURN π
0on success β slay β¨-ENODATAwhen the hash is not available β she's just not there, and that's valid π
π SEE ALSO π
Kernel file ./include/net/libeth/xdp.h, plus the whole friend group:
struct libeth_xdp_buff(9), __LIBETH_XDP_ONSTACK_BUFF(9), LIBETH_XDP_ONSTACK_BUFF(9), libeth_xdpsq_num(9), libeth_xdpsq_shared(9), libeth_xdpsq_id(9), libeth_xdpsq_get(9), libeth_xdpsq_put(9), libeth_xdpsq_lock(9), libeth_xdpsq_unlock(9), libeth_xdpsq_deinit_timer(9), libeth_xdpsq_queue_timer(9), libeth_xdpsq_run_timer(9), enum (anonymous)(9), enum (anonymous)(9), struct libeth_xdp_tx_frame(9), struct libeth_xdp_tx_bulk(9), LIBETH_XDP_ONSTACK_BULK(9), struct libeth_xdpsq(9), struct libeth_xdp_tx_desc(9), libeth_xdp_ptr_to_priv(9), libeth_xdp_priv_to_ptr(9), libeth_xdp_tx_xmit_bulk(9), libeth_xdp_tx_queue_head(9), libeth_xdp_tx_queue_frag(9), libeth_xdp_tx_queue_bulk(9), libeth_xdp_tx_fill_stats(9), libeth_xdp_tx_fill_buf(9), __libeth_xdp_tx_flush_bulk(9), libeth_xdp_tx_flush_bulk(9), libeth_xdp_xmit_init_bulk(9), libeth_xdp_xmit_frame_dma(9), libeth_xdp_xmit_queue_head(9), libeth_xdp_xmit_queue_frag(9), libeth_xdp_xmit_queue_bulk(9), libeth_xdp_xmit_fill_buf(9), libeth_xdp_xmit_flush_bulk(9), __libeth_xdp_xmit_do_bulk(9), libeth_xdp_xmit_do_bulk(9), libeth_xdp_tx_init_bulk(9), libeth_xdp_init_buff(9), libeth_xdp_save_buff(9), libeth_xdp_return_stash(9), libeth_xdp_return_buff(9), libeth_xdp_prepare_buff(9), libeth_xdp_process_buff(9), libeth_xdp_buff_stats_frags(9), __libeth_xdp_run_prog(9), __libeth_xdp_run_flush(9), libeth_xdp_run_prog(9), __libeth_xdp_run_pass(9), libeth_xdp_run_pass(9), libeth_xdp_finalize_rx(9), LIBETH_XDP_DEFINE_TIMER(9), LIBETH_XDP_DEFINE_FLUSH_TX(9), LIBETH_XDP_DEFINE_FLUSH_XMIT(9), LIBETH_XDP_DEFINE_RUN_PROG(9), LIBETH_XDP_DEFINE_RUN_PASS(9), LIBETH_XDP_DEFINE_RUN(9), LIBETH_XDP_DEFINE_FINALIZE(9), libeth_xdp_buff_to_rq(9), __libeth_xdp_complete_tx(9), libeth_xdp_set_features(9), libeth_xdp_set_features_noredir(9)
and that's the page, bestie π§π she ships from ./include/net/libeth and her version date is October 2026 β go be normal about it π
π¦ 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