STRUCT KSZ_PORT_MIB(9)
π NAME π
struct ksz_port_mib β the Port MIB data structure, bestie. This is from the Kernel API Manual (9), and it's basically the little bookkeeping baddie that keeps your port's counters from going rogue π
β¨ SYNOPSIS β¨
struct ksz_port_mib {
u8 cnt_ptr;
u8 link_down;
u8 state;
u8 mib_start;
u64 counter[TOTAL_PORT_COUNTER_NUM];
u32 dropped[2];
};
πΈ Members πΈ
cnt_ptrβ the current pointer to the MIB counter index. It's literally the little cursor holding the place of which counter we're on bestie πlink_downβ the flag that says "hey, the link just went down." Just. Like, right now. πstateβ the connection status of the port. Is it up? Is it down? This is the vibe check π¦mib_startβ the starting counter index. Not everyone starts at0β some ports are quirky like that, and that's iconic of them β¨counterβ the 64-bit MIB counter value. Big numbers, big energy π―droppedβ temporary buffer to remember the last-read packet dropped values. It's the little stash so we don't forget π
π§ Description π§
Okay so here's the whole situation: the MIB counters need to be read periodically or else they'll get overflowed and start handing you straight-up incorrect values π. So you've gotta find a right balance β read them often enough that nothing overflows, but not so often that you waste too much CPU time. It's giving "not too much, not too little" β¨
And also β it is pointless to read MIB counters when the port is disconnected. Like, why? Nothing's happening! So the state field provides the connection status, which lets you read the MIB counters only when the port is connected π«Ά
Then there's link_down, which indicates the port is just disconnected β so all the MIB counters get read one last time to update the information. One final read for the road, periodt π
π SEE ALSO π
The kernel file lives at ./drivers/net/ethernet/micrel/ksz884x.c, and honestly the whole friend group is here β every one of these is a (9) entry, no cap:
struct ksz_hw_desc(9), struct ksz_sw_desc(9), struct ksz_dma_buf(9), struct ksz_desc(9), struct ksz_desc_info(9), struct ksz_mac_table(9), struct ksz_vlan_table(9), struct ksz_port_cfg(9), struct ksz_switch(9), struct ksz_port_info(9), struct ksz_hw(9), struct ksz_port(9), struct ksz_timer_info(9), struct ksz_shared_mem(9), struct ksz_counter_info(9), struct dev_info(9), struct dev_priv(9), hw_turn_on_intr(9), hw_block_intr(9),
sw_r_table(9), sw_w_table_64(9), sw_w_sta_mac_table(9), sw_r_vlan_table(9), port_r_mib_cnt(9), port_r_mib_pkt(9), port_r_cnt(9), port_init_cnt(9), port_cfg(9), port_r8(9), port_r16(9), port_w16(9), sw_chk(9), sw_cfg(9), sw_cfg_broad_storm(9), sw_get_broad_storm(9), sw_dis_broad_storm(9), sw_ena_broad_storm(9), sw_init_broad_storm(9), hw_cfg_broad_storm(9), sw_dis_prio_rate(9), sw_init_prio_rate(9), sw_dis_diffserv(9), sw_dis_802_1p(9), sw_cfg_replace_null_vid(9), sw_cfg_replace_vid(9), sw_cfg_port_based(9), sw_dis_multi_queue(9), sw_init_prio(9), port_get_def_vid(9), sw_init_vlan(9), sw_cfg_port_base_vlan(9), sw_set_addr(9), sw_set_global_ctrl(9), port_set_stp_state(9), sw_clr_sta_mac_table(9), sw_init_stp(9), sw_block_addr(9), hw_r_phy(9), hw_w_phy(9), eeprom_read(9), eeprom_write(9), port_get_link_speed(9), port_set_link_speed(9), port_force_link_speed(9),
hw_chk_wol_pme_status(9), hw_clr_wol_pme_status(9), hw_cfg_wol_pme(9), hw_cfg_wol(9), hw_set_wol_frame(9), hw_add_wol_arp(9), hw_add_wol_bcast(9), hw_add_wol_mcast(9), hw_add_wol_ucast(9), hw_enable_wol(9), hw_init(9), hw_reset(9), hw_setup(9), hw_setup_intr(9), hw_set_desc_base(9), hw_start_rx(9), hw_stop_rx(9), hw_start_tx(9), hw_stop_tx(9), hw_disable(9), hw_enable(9), hw_alloc_pkt(9), hw_send_pkt(9), hw_set_addr(9), hw_read_addr(9), hw_clr_multicast(9), hw_set_grp_addr(9), hw_set_multicast(9), hw_set_promiscuous(9), sw_enable(9), sw_setup(9), ksz_start_timer(9), ksz_stop_timer(9), ksz_alloc_soft_desc(9), ksz_alloc_desc(9), free_dma_buf(9), ksz_init_rx_buffers(9), ksz_alloc_mem(9), ksz_free_desc(9), ksz_free_buffers(9), ksz_free_mem(9),
send_packet(9), transmit_cleanup(9), tx_done(9), netdev_tx(9), netdev_tx_timeout(9), netdev_intr(9), netdev_close(9), netdev_open(9), netdev_query_statistics(9), netdev_set_mac_address(9), netdev_set_rx_mode(9), netdev_ioctl(9), mdio_read(9), mdio_write(9), netdev_get_link_ksettings(9), netdev_set_link_ksettings(9), netdev_nway_reset(9), netdev_get_link(9), netdev_get_drvinfo(9), netdev_get_regs_len(9), netdev_get_regs(9), netdev_get_wol(9), netdev_set_wol(9), netdev_get_msglevel(9), netdev_set_msglevel(9), netdev_get_eeprom_len(9), netdev_get_eeprom(9), netdev_set_eeprom(9), netdev_get_pauseparam(9), netdev_set_pauseparam(9), netdev_get_ringparam(9), netdev_get_strings(9), netdev_get_sset_count(9), netdev_get_ethtool_stats(9), netdev_set_features(9), dev_monitor(9), netdev_init(9)
okay that's the whole friend group, iykyk π«Ά go read the source, it's all in ./drivers/net/ethernet/micrel β and this little drop was stamped October 2026, so yeah, it's fresh π
β¨ bye bestie, slay your counters ππ
π¦ 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