netdev_has_u..._dev_all_rcu(9)
π netdev_has_upper_dev_all_rcu(9) π
okay so bestie, welcome to the Kernel API Manual β¨ β yes, the Kernel API Manual, that's the manual name, we're in the big leagues now π. Today's main character is a lil boolean function that answers one very specific question about your network devices, and honestly? it ate. let's get into it π¦
β¨ NAME β¨
netdev_has_upper_dev_all_rcu β Check if device is linked to an upper device π
πΈ SYNOPSIS πΈ
bool netdev_has_upper_dev_all_rcu (struct net_device *dev , struct net_device *upper_dev );
like literally just hand it two devices and it'll tell you yes or no, no cap π₯
π ARGUMENTS π
devβ the device. that's it, that's the whole vibe. it's your starting point, the main character of this little story πupper_devβ the upper device you're checking for. the one we're like "hmm, is this one linked?" about π
π¦ DESCRIPTION π¦
So the whole point: you wanna find out if a device is linked to the specified upper device, and it returns true in case it is. Simple, clean, iconic β¨.
But wait, there's a plot twist β it checks the entire upper device chain, not just the immediate one. so it's giving "we went through the whole friend group to find this person" energy π. very thorough of it, honestly obsessed.
β οΈ and bestie, listen to me: the caller must hold rcu lock. that's not a suggestion, that's a requirement. hold the lock, or don't come crying to me ππ
π SEE ALSO π
the squad π
β all of these live in the kernel file ./net/core/dev.c:
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),__dev_queue_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_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)
iykyk π the whole dev.c friend group showed up fr fr π
π« sign-off π«
and that's the tea, bestie π this lil page comes to you from the <./net/core> corner of the kernel and it's dated October 2026 π
β so like, future vibes, but make it timeless π. go forth, hold that rcu lock, and slay β¨π§ββοΈπ
π¦ 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