ixgbe_add_rx_frag(9)
π ixgbe_add_rx_frag(9) π
okay so bestie, we're in the ixgbe corner of the Kernel API Manual today β this is ixgbe_add_rx_frag, and it's genuinely one of the little glue functions that makes receive-side networking happen. Pull up a chair π
β¨ NAME β¨
ixgbe_add_rx_frag β add the contents of an Rx buffer to sk_buff π¦
πΈ SYNOPSIS πΈ
void ixgbe_add_rx_frag (struct ixgbe_ring *rx_ring , struct
ixgbe_rx_buffer *rx_buffer , struct sk_buff *skb , unsigned int size );
it's giving "four arguments, no notes" π
β ARGUMENTS β
rx_ringβ the rx descriptor ring where we're transacting packets. this is the ring, bestie, the actual one π«Άrx_bufferβ the buffer that's holding the page we're about to add. head empty, page full β¨skbβ thesk_buffwe're stuffing the data into. destination: iconic πsizeβ how much data is actually inrx_buffer. numbers matter, no cap π
π¦ DESCRIPTION π¦
so here's the vibe: this function takes the data chillin' in rx_buffer->page and adds it to the skb. simple, right? but the way it does it is lowkey the interesting part π
it's a two-path situation:
- if the data in the buffer is less than the skb header size, we do a direct copy β just pick it up and move it, done π
- otherwise, we attach the page as a frag to the
skbβ no copying, just vibe-hosting the page directly πΈ
then the function updates the page offset if necessary, and returns true if the buffer can be reused by the adapter. recycling era β»οΈβ¨
ngl, the synopsis says void and then the description starts talking about returning true β that's exactly what the page says, bestie, i'm just reporting the facts ππ
π SEE ALSO π
the kernel file in question:
./drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
and okay, the guest list is long β like, this function knows literally everyone at this point. full squad, no skips π
ixgbe_pcie_from_parent(9)ixgbe_read_reg(9)ixgbe_set_ivar(9)ixgbe_get_vf_idx(9)ixgbe_tx_timeout_reset(9)ixgbe_tx_maxrate(9)ixgbe_update_tx_ring_stats(9)ixgbe_update_rx_ring_stats(9)ixgbe_pf_handle_tx_hang(9)ixgbe_vf_handle_tx_hang(9)ixgbe_check_illegal_queue(9)ixgbe_handle_mdd_event(9)ixgbe_clean_tx_irq(9)ixgbe_rx_is_fcoe(9)ixgbe_rx_checksum(9)ixgbe_alloc_rx_buffers(9)ixgbe_process_skb_fields(9)ixgbe_is_non_eop(9)ixgbe_pull_tail(9)ixgbe_dma_sync_frag(9)ixgbe_cleanup_headers(9)ixgbe_reuse_rx_page(9)ixgbe_clean_rx_irq(9)ixgbe_configure_msix(9)ixgbe_update_itr(9)ixgbe_write_eitr(9)ixgbe_check_overtemp_subtask(9)ixgbe_check_phy_fw_load(9)ixgbe_check_module_power(9)ixgbe_check_link_cfg_err(9)ixgbe_process_link_status_event(9)ixgbe_handle_link_status_event(9)ixgbe_schedule_fw_event(9)ixgbe_aci_event_cleanup(9)ixgbe_handle_fw_event(9)ixgbe_irq_enable(9)ixgbe_poll(9)ixgbe_request_msix_irqs(9)ixgbe_intr(9)ixgbe_request_irq(9)ixgbe_irq_disable(9)ixgbe_configure_msi_and_legacy(9)ixgbe_configure_tx_ring(9)ixgbe_configure_tx(9)ixgbe_rss_indir_tbl_entries(9)ixgbe_store_key(9)ixgbe_init_rss_key(9)ixgbe_store_reta(9)ixgbe_store_vfreta(9)ixgbe_configure_rscctl(9)ixgbe_configure_rx(9)ixgbe_vlan_strip_disable(9)ixgbe_vlan_strip_enable(9)ixgbe_write_mc_addr_list(9)ixgbe_set_rx_mode(9)ixgbe_configure_dcb(9)ixgbe_hpbthresh(9)ixgbe_lpbthresh(9)ixgbe_clean_rx_ring(9)ixgbe_enable_link_status_events(9)ixgbe_disable_link_status_events(9)ixgbe_sfp_link_config(9)ixgbe_non_sfp_link_config(9)ixgbe_check_media_subtask(9)ixgbe_clear_vf_stats_counters(9)ixgbe_clean_tx_ring(9)ixgbe_clean_all_rx_rings(9)ixgbe_clean_all_tx_rings(9)ixgbe_set_eee_capable(9)ixgbe_tx_timeout(9)ixgbe_sw_init(9)ixgbe_setup_tx_resources(9)ixgbe_setup_all_tx_resources(9)ixgbe_setup_rx_resources(9)ixgbe_setup_all_rx_resources(9)ixgbe_free_tx_resources(9)ixgbe_free_all_tx_resources(9)ixgbe_free_rx_resources(9)ixgbe_free_all_rx_resources(9)ixgbe_max_xdp_frame_size(9)ixgbe_change_mtu(9)ixgbe_open(9)ixgbe_close(9)ixgbe_update_stats(9)ixgbe_fdir_reinit_subtask(9)ixgbe_check_hang_subtask(9)ixgbe_watchdog_update_link(9)ixgbe_watchdog_link_is_up(9)ixgbe_watchdog_link_is_down(9)ixgbe_watchdog_flush_tx(9)ixgbe_watchdog_subtask(9)ixgbe_sfp_detection_subtask(9)ixgbe_sfp_link_config_subtask(9)ixgbe_service_timer(9)ixgbe_check_fw_error(9)ixgbe_service_task(9)ixgbe_set_mac(9)ixgbe_add_sanmac_netdev(9)ixgbe_del_sanmac_netdev(9)ixgbe_validate_rtr(9)ixgbe_set_prio_tc_map(9)ixgbe_setup_tc(9)ixgbe_configure_bridge_mode(9)ixgbe_irq_disable_single(9)ixgbe_txrx_ring_disable(9)ixgbe_txrx_ring_enable(9)ixgbe_enumerate_functions(9)ixgbe_wol_supported(9)ixgbe_set_fw_version_e610(9)ixgbe_set_fw_version(9)ixgbe_recovery_probe(9)ixgbe_probe(9)ixgbe_remove(9)ixgbe_io_error_detected(9)ixgbe_io_slot_reset(9)ixgbe_io_resume(9)ixgbe_init_module(9)ixgbe_exit_module(9)
and that's the whole page, bestie β go add some frags π β¨
source/version vibes: ./drivers/net/ethernet/intel/i... (yes, it's literally cut off like that on the page, i'm not making it up π) and the date on the footer is October 2026 ποΈπ mwah, stan this function, bye π«Άπ
π¦ 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