The branch main has been updated by bz:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=a086478e58bf398cc9892fba6bc0122a56b87a97

commit a086478e58bf398cc9892fba6bc0122a56b87a97
Author:     Bjoern A. Zeeb <b...@freebsd.org>
AuthorDate: 2025-07-10 10:24:13 +0000
Commit:     Bjoern A. Zeeb <b...@freebsd.org>
CommitDate: 2025-08-24 10:26:44 +0000

    LinuxKPI: 802.11: factor out sinfo printing
    
    Factor out the sinfo printing into an sbuf from the sysctl handler.
    That allows us to use lkpi_80211_dump_lvif_stas() for printing other
    debug information as well.
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      3 days
---
 sys/compat/linuxkpi/common/src/linux_80211.c | 62 ++++++++++++++++------------
 1 file changed, 35 insertions(+), 27 deletions(-)

diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c 
b/sys/compat/linuxkpi/common/src/linux_80211.c
index 91836b857727..500c1c1d52eb 100644
--- a/sys/compat/linuxkpi/common/src/linux_80211.c
+++ b/sys/compat/linuxkpi/common/src/linux_80211.c
@@ -274,48 +274,40 @@ lkpi_nl80211_sta_info_to_str(struct sbuf *s, const char 
*prefix,
        sbuf_printf(s, "\n");
 }
 
-static int
-lkpi_80211_dump_stas(SYSCTL_HANDLER_ARGS)
+static void
+lkpi_80211_dump_lvif_stas(struct lkpi_vif *lvif, struct sbuf *s)
 {
        struct lkpi_hw *lhw;
        struct ieee80211_hw *hw;
        struct ieee80211vap *vap;
-       struct lkpi_vif *lvif;
        struct ieee80211_vif *vif;
        struct lkpi_sta *lsta;
        struct ieee80211_sta *sta;
        struct station_info sinfo;
-       struct sbuf s;
        int error;
 
-       if (req->newptr)
-               return (EPERM);
-
-       lvif = (struct lkpi_vif *)arg1;
        vif = LVIF_TO_VIF(lvif);
        vap = LVIF_TO_VAP(lvif);
        lhw = vap->iv_ic->ic_softc;
        hw = LHW_TO_HW(lhw);
 
-       sbuf_new_for_sysctl(&s, NULL, 1024, req);
-
        wiphy_lock(hw->wiphy);
        list_for_each_entry(lsta, &lvif->lsta_list, lsta_list) {
                sta = LSTA_TO_STA(lsta);
 
-               sbuf_putc(&s, '\n');
-               sbuf_printf(&s, "lsta %p sta %p added_to_drv %d\n", lsta, sta, 
lsta->added_to_drv);
+               sbuf_putc(s, '\n');
+               sbuf_printf(s, "lsta %p sta %p added_to_drv %d\n", lsta, sta, 
lsta->added_to_drv);
 
                memset(&sinfo, 0, sizeof(sinfo));
                error = lkpi_80211_mo_sta_statistics(hw, vif, sta, &sinfo);
                if (error == EEXIST)    /* Not added to driver. */
                        continue;
                if (error == ENOTSUPP) {
-                       sbuf_printf(&s, " sta_statistics not supported\n");
+                       sbuf_printf(s, " sta_statistics not supported\n");
                        continue;
                }
                if (error != 0) {
-                       sbuf_printf(&s, " sta_statistics failed: %d\n", error);
+                       sbuf_printf(s, " sta_statistics failed: %d\n", error);
                        continue;
                }
 
@@ -334,51 +326,67 @@ lkpi_80211_dump_stas(SYSCTL_HANDLER_ARGS)
                        sinfo.filled |= BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL);
                }
 
-               lkpi_nl80211_sta_info_to_str(&s, " nl80211_sta_info (valid 
fields)", sinfo.filled);
-               sbuf_printf(&s, " connected_time %u inactive_time %u\n",
+               lkpi_nl80211_sta_info_to_str(s, " nl80211_sta_info (valid 
fields)", sinfo.filled);
+               sbuf_printf(s, " connected_time %u inactive_time %u\n",
                    sinfo.connected_time, sinfo.inactive_time);
-               sbuf_printf(&s, " rx_bytes %ju rx_packets %u rx_dropped_misc 
%u\n",
+               sbuf_printf(s, " rx_bytes %ju rx_packets %u rx_dropped_misc 
%u\n",
                    (uintmax_t)sinfo.rx_bytes, sinfo.rx_packets, 
sinfo.rx_dropped_misc);
-               sbuf_printf(&s, " rx_duration %ju rx_beacon %u 
rx_beacon_signal_avg %d\n",
+               sbuf_printf(s, " rx_duration %ju rx_beacon %u 
rx_beacon_signal_avg %d\n",
                    (uintmax_t)sinfo.rx_duration, sinfo.rx_beacon, 
(int8_t)sinfo.rx_beacon_signal_avg);
 
-               sbuf_printf(&s, " tx_bytes %ju tx_packets %u tx_failed %u\n",
+               sbuf_printf(s, " tx_bytes %ju tx_packets %u tx_failed %u\n",
                    (uintmax_t)sinfo.tx_bytes, sinfo.tx_packets, 
sinfo.tx_failed);
-               sbuf_printf(&s, " tx_duration %ju tx_retries %u\n",
+               sbuf_printf(s, " tx_duration %ju tx_retries %u\n",
                    (uintmax_t)sinfo.tx_duration, sinfo.tx_retries);
 
-               sbuf_printf(&s, " signal %d signal_avg %d ack_signal %d 
avg_ack_signal %d\n",
+               sbuf_printf(s, " signal %d signal_avg %d ack_signal %d 
avg_ack_signal %d\n",
                    sinfo.signal, sinfo.signal_avg, sinfo.ack_signal, 
sinfo.avg_ack_signal);
-               sbuf_printf(&s, " generation %d assoc_req_ies_len %zu chains 
%#04x\n",
+               sbuf_printf(s, " generation %d assoc_req_ies_len %zu chains 
%#04x\n",
                    sinfo.generation, sinfo.assoc_req_ies_len, sinfo.chains);
 
                for (int i = 0; i < nitems(sinfo.chain_signal) && i < 
IEEE80211_MAX_CHAINS; i++) {
                        if (!(sinfo.chains & BIT(i)))
                                continue;
-                       sbuf_printf(&s, "  chain[%d] signal %d signal_avg %d\n",
+                       sbuf_printf(s, "  chain[%d] signal %d signal_avg %d\n",
                            i, (int8_t)sinfo.chain_signal[i], 
(int8_t)sinfo.chain_signal_avg[i]);
                }
 
                /* assoc_req_ies, bss_param, sta_flags */
 
-               sbuf_printf(&s, " rxrate: flags %b bw %u(%s) legacy %u kbit/s 
mcs %u nss %u\n",
+               sbuf_printf(s, " rxrate: flags %b bw %u(%s) legacy %u kbit/s 
mcs %u nss %u\n",
                    sinfo.rxrate.flags, CFG80211_RATE_INFO_FLAGS_BITS,
                    sinfo.rxrate.bw, lkpi_rate_info_bw_to_str(sinfo.rxrate.bw),
                    sinfo.rxrate.legacy * 100,
                    sinfo.rxrate.mcs, sinfo.rxrate.nss);
-               sbuf_printf(&s, "         he_dcm %u he_gi %u he_ru_alloc %u 
eht_gi %u\n",
+               sbuf_printf(s, "         he_dcm %u he_gi %u he_ru_alloc %u 
eht_gi %u\n",
                    sinfo.rxrate.he_dcm, sinfo.rxrate.he_gi, 
sinfo.rxrate.he_ru_alloc,
                    sinfo.rxrate.eht_gi);
-               sbuf_printf(&s, " txrate: flags %b bw %u(%s) legacy %u kbit/s 
mcs %u nss %u\n",
+               sbuf_printf(s, " txrate: flags %b bw %u(%s) legacy %u kbit/s 
mcs %u nss %u\n",
                    sinfo.txrate.flags, CFG80211_RATE_INFO_FLAGS_BITS,
                    sinfo.txrate.bw, lkpi_rate_info_bw_to_str(sinfo.txrate.bw),
                    sinfo.txrate.legacy * 100,
                    sinfo.txrate.mcs, sinfo.txrate.nss);
-               sbuf_printf(&s, "         he_dcm %u he_gi %u he_ru_alloc %u 
eht_gi %u\n",
+               sbuf_printf(s, "         he_dcm %u he_gi %u he_ru_alloc %u 
eht_gi %u\n",
                    sinfo.txrate.he_dcm, sinfo.txrate.he_gi, 
sinfo.txrate.he_ru_alloc,
                    sinfo.txrate.eht_gi);
        }
        wiphy_unlock(hw->wiphy);
+}
+
+static int
+lkpi_80211_dump_stas(SYSCTL_HANDLER_ARGS)
+{
+       struct lkpi_vif *lvif;
+       struct sbuf s;
+
+       if (req->newptr)
+               return (EPERM);
+
+       lvif = (struct lkpi_vif *)arg1;
+
+       sbuf_new_for_sysctl(&s, NULL, 1024, req);
+
+       lkpi_80211_dump_lvif_stas(lvif, &s);
 
        sbuf_finish(&s);
        sbuf_delete(&s);

Reply via email to