netdev_compu...per_features(9)
πΈ NAME πΈ
netdev_compute_master_upper_features β bestie, it computes the feature from the lowers π
So real quick, this is a page from the Kernel API Manual, and the header got a lil truncated so it shows up as netdev_compu...per_features(9) β that's the same function, she just got cut off by the terminal, we still love her π
β¨ SYNOPSIS β¨
void netdev_compute_master_upper_features (struct net_device *dev , bool
update_header );
That's it. That's the whole signature. No cap. π«Ά
π ARGUMENTS π
devβ the upper device. Yes, upper. She's the master device here, main character energy, and the others are her lowers πupdate_headerβ aboolthat decides whether we're also updating the upper device'sheader_len/headroom/tailroom. So basically: do we touch the header situation too, or nah? π
π¦ DESCRIPTION π¦
Okay so picture this: an upper device, a bunch of lower devices underneath her, and everybody's got features. What this function does is recompute the upper device's feature based on all lower devices. That's the whole vibe check β she looks at all her lowers and figures out what her own feature should be now.
Literally that simple, and honestly? Iconic β
Ngl, no weird edge cases spelled out on the page, no return value to worry about (it's void, she gives nothing back emotionally π). Just know: recompute happens, based on all lower devices, periodt.
π§ SEE ALSO π§
Okay so before we get into the guest list β the file this all lives in is ./net/core/dev.c in the kernel, iykyk. And the guest list is genuinely enormous, so buckle up bestie, everybody's invited to this party:
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_upper_dev_all_rcu(9), netdev_has_any_upper_dev(9), netdev_master_upper_dev_get(9), netdev_has_any_lower_dev(9) β okay we're getting into the upper/lower lore now, this is the good part π
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_drivername(9) β and that's the whole list, we made it, I'm exhausted ππ«Ά
Seriously though, if you're going down the netdev rabbit hole, every single one of those is a whole other page. Have fun bestie π
Little sign-off from me to you: this page lives in the source dir./net/core, and the date on it isOctober 2026. It's section 9 of the Kernel API Manual, and the title on the tin isnetdev_compu...per_features(9)β truncated header and all. Slay. Periodt. πβ¨
π¦ 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