ice_fix_features(9)
β¨ ice_fix_features β¨
okay so this is ice_fix_features(9) from the Kernel API Manual, section 9, and it's basically the vibe-check bouncer for netdev feature flags π
πΈ NAME πΈ
ice_fix_features β fix the netdev features flags based on device limitations
π SYNOPSIS π
netdev_features_t ice_fix_features (struct net_device *netdev ,
netdev_features_t features );
π¦ ARGUMENTS π¦
netdevβ ptr to the netdev that flags are being fixed onfeaturesβ features that need to be checked and possibly fixed
π DESCRIPTION π
So the whole point, bestie: this callback is where you make sure any fixups are made to features. That's it. That's the assignment. β¨
And the reason it's a callback at all is lowkey genius β it means the driver does not have to keep checking for unsupported configurations all over the place, because that's the responsibility of this callback. One spot. One job. main character energy fr fr.
π Single VLAN Mode (SVM) Supported Features
NETIF_F_HW_VLAN_CTAG_FILTERNETIF_F_HW_VLAN_CTAG_RXNETIF_F_HW_VLAN_CTAG_TX
π₯ Double VLAN Mode (DVM) Supported Features
NETIF_F_HW_VLAN_CTAG_FILTERNETIF_F_HW_VLAN_CTAG_RXNETIF_F_HW_VLAN_CTAG_TXNETIF_F_HW_VLAN_STAG_FILTERNETIF_HW_VLAN_STAG_RXNETIF_HW_VLAN_STAG_TX
π¨ Features that need fixing
not me gatekeeping VLAN offloads but here we are π
CTAG + STAG stripping and/or insertion cannot be enabled at the same time. They are mutually exclusive, periodt β because the VSI context literally cannot support multiple VLAN ethertypes simultaneously for stripping and/or insertion. If this isn't done, then default to clearing the requested STAG offload settings.
All supported filtering has to be enabled or disabled together. For example, in DVM, CTAG and STAG filtering have to be enabled and disabled together. If this is not done, then default to VLAN filtering disabled. These are mutually exclusive as there is currently no way to enable/disable VLAN filtering based on VLAN ethertype when using VLAN prune rules. π
π SEE ALSO π
The kernel file this lives in:
./drivers/net/ethernet/intel/ice/ice_main.c
And the whole ice family, alphabetically-adjacent besties edition π«Ά:
ice_hw_to_dev(9)ice_get_tx_pending(9)ice_check_for_hang_subtask(9)ice_init_mac_fltr(9)ice_add_mac_to_sync_list(9)ice_add_mac_to_unsync_list(9)ice_vsi_fltr_changed(9)ice_set_promisc(9)ice_clear_promisc(9)ice_vsi_sync_fltr(9)ice_sync_fltr_subtask(9)ice_pf_dis_all_vsi(9)ice_prepare_for_reset(9)ice_do_reset(9)ice_reset_subtask(9)ice_print_topo_conflict(9)ice_print_link_msg(9)ice_vsi_link_event(9)ice_set_dflt_mib(9)ice_check_phy_fw_load(9)ice_check_module_power(9)ice_check_link_cfg_err(9)ice_link_event(9)ice_watchdog_subtask(9)ice_init_link_events(9)ice_handle_link_event(9)ice_aq_prep_for_event(9)ice_aq_wait_for_event(9)ice_aq_check_events(9)ice_aq_cancel_waiting_tasks(9)__ice_clean_ctrlq(9)ice_ctrlq_pending(9)ice_clean_adminq_subtask(9)ice_clean_mailboxq_subtask(9)ice_clean_sbq_subtask(9)ice_service_task_schedule(9)ice_service_task_complete(9)ice_service_task_stop(9)ice_service_task_restart(9)ice_service_timer(9)ice_mdd_maybe_reset_vf(9)ice_handle_mdd_event(9)ice_init_nvm_phy_type(9)ice_init_link_dflt_override(9)ice_init_phy_cfg_dflt_override(9)ice_init_phy_user_cfg(9)ice_phy_cfg(9)ice_check_media_subtask(9)ice_service_task(9)ice_set_ctrlq_len(9)ice_schedule_reset(9)ice_vsi_ena_irq(9)ice_vsi_req_irq_msix(9)ice_xdp_alloc_setup_rings(9)ice_vsi_assign_bpf_prog(9)ice_map_xdp_rings(9)ice_unmap_xdp_rings(9)ice_prepare_xdp_rings(9)ice_destroy_xdp_rings(9)ice_vsi_rx_napi_schedule(9)ice_vsi_determine_xdp_res(9)ice_max_xdp_frame_size(9)ice_xdp_setup_prog(9)ice_xdp_safe_mode(9)ice_xdp(9)ice_ena_misc_vector(9)ice_ll_ts_intr(9)ice_misc_intr(9)ice_misc_intr_thread_fn(9)ice_dis_ctrlq_interrupts(9)ice_free_irq_msix_ll_ts(9)ice_free_irq_msix_misc(9)ice_ena_ctrlq_interrupts(9)ice_req_irq_msix_misc(9)ice_set_ops(9)ice_set_netdev_features(9)ice_fill_rss_lut(9)ice_pf_vsi_setup(9)ice_ctrl_vsi_setup(9)ice_lb_vsi_setup(9)ice_vlan_rx_add_vid(9)ice_vlan_rx_kill_vid(9)ice_rep_indr_tc_block_unbind(9)ice_tc_indir_block_unregister(9)ice_tc_indir_block_register(9)ice_get_avail_q_count(9)ice_get_avail_txq_count(9)ice_get_avail_rxq_count(9)ice_deinit_pf(9)ice_set_pf_caps(9)ice_init_pf(9)ice_is_wol_supported(9)ice_vsi_recfg_qs(9)ice_set_safe_mode_vlan_cfg(9)ice_log_pkg_init(9)ice_load_pkg(9)ice_verify_cacheline_size(9)ice_send_version(9)ice_init_fdir(9)ice_get_opt_fw_name(9)ice_request_fw(9)ice_init_tx_topology(9)ice_init_supported_rxdids(9)ice_init_ddp_config(9)ice_print_wake_reason(9)ice_register_netdev(9)ice_cfg_netdev(9)ice_load(9)ice_unload(9)ice_probe(9)ice_set_wake(9)ice_setup_mc_magic_wake(9)ice_remove(9)ice_shutdown(9)ice_prepare_for_shutdown(9)ice_reinit_interrupt_scheme(9)ice_suspend(9)ice_resume(9)ice_pci_err_detected(9)ice_pci_err_slot_reset(9)ice_pci_err_resume(9)ice_pci_err_reset_prepare(9)ice_pci_err_reset_done(9)ice_module_init(9)ice_module_exit(9)ice_set_mac_address(9)ice_set_rx_mode(9)ice_set_tx_maxrate(9)ice_fdb_add(9)ice_fdb_del(9)ice_set_rx_rings_vlan_proto(9)ice_set_vlan_offload_features(9)ice_set_vlan_filtering_features(9)ice_set_vlan_features(9)ice_set_loopback(9)ice_set_features(9)ice_vsi_vlan_setup(9)ice_vsi_cfg_lan(9)ice_init_moderation(9)ice_napi_enable_all(9)ice_up_complete(9)ice_up(9)ice_fetch_u64_tx_stats(9)ice_fetch_u64_rx_stats(9)ice_update_vsi_tx_ring_stats(9)ice_update_vsi_rx_ring_stats(9)ice_update_vsi_ring_stats(9)ice_update_vsi_stats(9)ice_update_pf_stats(9)ice_get_stats64(9)ice_napi_disable_all(9)ice_vsi_dis_irq(9)ice_down(9)ice_down_up(9)ice_vsi_setup_tx_rings(9)ice_vsi_setup_rx_rings(9)ice_vsi_open_ctrl(9)ice_vsi_open(9)ice_vsi_release_all(9)ice_vsi_rebuild_by_type(9)ice_update_pf_netdev_link(9)ice_rebuild(9)ice_change_mtu(9)ice_set_rss_lut(9)ice_set_rss_key(9)ice_get_rss_lut(9)ice_get_rss_key(9)ice_get_rss(9)ice_set_rss_hfunc(9)ice_bridge_getlink(9)ice_vsi_update_bridge_mode(9)ice_bridge_setlink(9)ice_tx_timeout(9)ice_setup_tc_cls_flower(9)ice_setup_tc_block_cb_ingress(9)ice_setup_tc_block_cb_egress(9)ice_validate_mqprio_qopt(9)ice_add_vsi_to_fdir(9)ice_add_channel(9)ice_chnl_cfg_res(9)ice_cfg_chnl_all_res(9)ice_setup_hw_channel(9)ice_setup_channel(9)ice_set_bw_limit(9)ice_create_q_channel(9)ice_rem_all_chnl_fltrs(9)ice_remove_q_channels(9)ice_rebuild_channels(9)ice_create_q_channels(9)ice_setup_tc_mqprio_qdisc(9)ice_cfg_txtime(9)ice_offload_txtime(9)ice_open(9)ice_open_internal(9)ice_stop(9)ice_features_check(9)
okay that's literally everybody π§π that entire list lives under ./drivers/net/ethernet/intel/ice, and this page is brought to you by the October 2026 era of the docs β that's the source and the date, bestie, so now you know πβ¨ slay and good luck with your feature flags π«Άπ
π¦ 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