__dev_queue_xmit(9)
π __dev_queue_xmit(9) β Kernel API Manual
okay bestie, buckle up, we're doing a kernel function today. this is __dev_queue_xmit(9) from the Kernel API Manual and it's genuinely the moment your packet gets yeeted into the network. main character energy fr fr.
β¨ NAME β¨
__dev_queue_xmit β transmit a buffer π
π¦ SYNOPSIS π¦
int __dev_queue_xmit (struct sk_buff *skb , struct net_device *sb_dev );
π ARGUMENTS π
skbβ the buffer you wanna transmit. this is the whole point, she's the star of the show πsb_devβ the suboordinate device used for L2 forwarding offload. (yes, "suboordinate" β that's how the manpage spells it, i'm not touching it, no cap π)
πΈ DESCRIPTION πΈ
so what does she DO? she queues a buffer for transmission to a network device. that's the vibe check and she passes it.
but like, important: the caller has to have done their homework first. you must have set the device and priority and built the buffer before calling this function. she's not gonna do that for you, she's not your mom π. also, fun fact: this function can be called from an interrupt.
β οΈ okay this part is serious bestie, pay attention: when calling this method, interrupts MUST be enabled. this is because the BH enable code must have IRQs enabled so that it will not deadlock. like, i'm not being dramatic (ok maybe a little) but deadlocks are the actual worst and this one is avoidable, so avoid it π
and now the part that hurts: regardless of the return value, the skb is consumed. so it is currently difficult to retry a send to this method. π the buffer's gone. it's gone gone. (you can bump the ref count before sending to hold a reference for retry β but only if you are careful, so like, be careful π«Ά)
π₯ RETURN π₯
she returns an int and here's what it's telling you:
0β buffer successfully transmitted π ate and left no crumbs- positive qdisc return code β
NET_XMIT_DROPetc. (drop it like it's hot, i guess) - negative errno β other errors π
π SEE ALSO π
kernel file ./net/core/dev.c, plus a whole group chat of friends. genuinely the longest see-also of all time, she's popular, iykyk:
dev_add_pack(9), __dev_remove_pack(9), dev_remove_pack(9), dev_get_iflink(9), dev_fill_metadata_dst(9), netdev_napi_by_id_lock(9), __dev_get_by_name(9), dev_get_by_name_rcu(9), netdev_get_by_name(9), __dev_get_by_index(9), dev_get_by_index_rcu(9), netdev_get_by_index(9), dev_get_by_napi_id(9), netdev_get_by_index_lock(9), netdev_get_name(9), dev_getbyhwaddr_rcu(9), dev_getbyhwaddr(9), netdev_get_by_flags_rcu(9), dev_valid_name(9), __dev_alloc_name(9), dev_alloc_name(9), dev_get_alias(9), netdev_features_change(9), __netdev_notify_peers(9), netdev_notify_peers(9), dev_disable_gro_hw(9), register_netdevice_notifier(9), unregister_netdevice_notifier(9), register_netdevice_notifier_net(9), unregister_netdevice_notifier_net(9), call_netdevice_notifiers_info(9), call_netdevice_notifiers_info_robust(9), call_netdevice_notifiers(9), call_netdevice_notifiers_mtu(9), dev_forward_skb(9), dev_nit_active_rcu(9), netif_setup_tc(9), netif_set_real_num_rx_queues(9), netif_set_real_num_queues(9), netif_set_tso_max_size(9), netif_set_tso_max_segs(9), netif_inherit_tso_max(9), netif_get_num_default_rss_queues(9), netif_device_detach(9), netif_device_attach(9), dev_loopback_xmit(9), rps_flow_is_active(9), rps_may_expire_flow(9), __netif_rx(9), netif_rx(9), netdev_is_rx_handler_busy(9), netdev_rx_handler_register(9), netdev_rx_handler_unregister(9), netif_receive_skb_core(9), netif_receive_skb(9), netif_receive_skb_list(9), __napi_schedule(9), napi_schedule_prep(9), __napi_schedule_irqoff(9), netif_threaded_enable(9), netif_queue_set_napi(9), napi_disable(9), napi_enable(9), netdev_has_upper_dev(9), netdev_has_upper_dev_all_rcu(9), netdev_has_any_upper_dev(9), netdev_master_upper_dev_get(9), netdev_has_any_lower_dev(9), netdev_upper_get_next_dev_rcu(9), netdev_lower_get_next_private(9), netdev_lower_get_next_private_rcu(9), netdev_lower_get_next(9), netdev_lower_get_first_private_rcu(9), netdev_master_upper_dev_get_rcu(9), netdev_upper_dev_link(9), netdev_master_upper_dev_link(9), netdev_upper_dev_unlink(9), netdev_bonding_info_change(9), netdev_get_xmit_slave(9), netdev_sk_get_lowest_dev(9), netdev_lower_state_changed(9), netif_get_flags(9), netif_set_mtu_ext(9), netif_pre_changeaddr_notify(9), dev_get_phys_port_id(9), dev_get_phys_port_name(9), netif_get_port_parent_id(9), netdev_port_same_parent_id(9), netdev_change_proto_down_reason_locked(9), dev_change_xdp_fd(9), dev_index_reserve(9), netdev_update_features(9), netdev_change_features(9), netif_stacked_transfer_operstate(9), register_netdevice(9), register_netdev(9), netdev_wait_allrefs_any(9), dev_get_stats(9), dev_fetch_sw_netstats(9), dev_get_tstats64(9), netdev_sw_irq_coalesce_default_on(9), alloc_netdev_mqs(9), free_netdev(9), alloc_netdev_dummy(9), synchronize_net(9), unregister_netdevice_queue(9), unregister_netdevice_many(9), unregister_netdev(9), netdev_increment_features(9), netdev_compute_master_upper_features(9), netdev_drivername(9)
like i said. popular. π
mwah, that's the whole page π«Ά this one lives in ./net/core and it's dated October 2026 β go off, queen, transmit that buffer responsibly β¨π
π¦ 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