STRUCT KSZ_PORT_MIB(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– 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 at 0 β€” 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