To display the max number of simultaneous links in phy info The maximum number of simultaneous links affiliated to an AP-MLD Present as a subfield in MLD capabilities and operations,the Capability is extracted through nl80211 specific attribute and added as part of phy information. usage: iw <phy interface> output: Wiphy phy00 wiphy index: 0 max # scan SSIDs: 16 max scan IEs length: 83 bytes max # sched scan SSIDs: 0 max # match sets: 0 Retry short limit: 7 Retry long limit: 4 Coverage class: 0 (up to 0m) Device supports AP-side u-APSD. Available Antennas: TX 0xf RX 0xf Configured Antennas: TX 0xf RX 0xf Supported interface modes: * managed * AP * AP/VLAN * monitor * mesh point Band 1: Capabilities: 0x19ef RX LDPC HT20/HT40 SM Power Save disabled RX HT20 SGI RX HT40 SGI TX STBC RX STBC 1-stream Max AMSDU length: 7935 bytes DSSS/CCK HT40 . . . . . . . . . * [ BSS_COLOR ]: BSS coloring support * [ RADAR_BACKGROUND ]: Radar background support * [ STA_MGMT_RTS_CTS ]: station management RTS CTS support MLD Capability: 0x44 Max Number of Simultaneous Links: 4 hw_idx 0 channel list: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 hw_idx 1 channel list: 36 40 44 48 52 56 60 64 100 104 108 112 116 120 124 128 132 136 140 144 149 153 157 161 165 169 173 177 hw_idx 2 channel list: 1 2 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 85 89 93 97 101 105 109 113 117 121 125 129 133 137 141 145 149 153 157 161 165 169 173 177 181 185 189 193 197 201 205 209 213 217 221 225 229 233 Signed-off-by: Mohan Raj <quic_mrajraje@xxxxxxxxxxx> --- info.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/info.c b/info.c index c5e863f..0d19d99 100644 --- a/info.c +++ b/info.c @@ -884,6 +884,31 @@ broken_combination: if (tb_msg[NL80211_ATTR_MAX_AP_ASSOC_STA]) printf("\tMaximum associated stations in AP mode: %u\n", nla_get_u32(tb_msg[NL80211_ATTR_MAX_AP_ASSOC_STA])); + if (tb_msg[NL80211_ATTR_IFTYPE_EXT_CAPA]) { + int rem_ext = 0; + struct nlattr *tb1[NL80211_ATTR_MAX + 1]; + struct nlattr *ext_attr; + __u8 max_simul_links; + __u16 mld_cap; + + nla_for_each_nested(ext_attr, tb_msg[NL80211_ATTR_IFTYPE_EXT_CAPA], rem_ext) { + nla_parse(tb1, NL80211_ATTR_MAX, nla_data(ext_attr), + nla_len(ext_attr), NULL); + if (tb1[NL80211_ATTR_EML_CAPABILITY] && + tb1[NL80211_ATTR_MLD_CAPA_AND_OPS]) { + mld_cap = nla_get_u16(tb1[NL80211_ATTR_MLD_CAPA_AND_OPS]); + + if (mld_cap != 0) { + printf("\tMLD Capability: 0x%x\n", + nla_get_u16(tb1[NL80211_ATTR_MLD_CAPA_AND_OPS])); + max_simul_links = mld_cap & 0xf; + printf("\t\tMax Number of Simultaneous Links: %d\n", + max_simul_links); + } + } + } + } + return NL_SKIP; } -- 2.34.1