Author: adrian
Date: Fri Mar 18 03:55:57 2016
New Revision: 297007
URL: https://svnweb.freebsd.org/changeset/base/297007

Log:
  Decode VHTCAP, VHTINFO and BSSLOAD.
  
  BSSLOAD is based on work from Idwer Vollering.
  
  Obtained from:        Idwer Vollering <vid...@gmail.com> (bssload)

Modified:
  head/sbin/ifconfig/ifieee80211.c

Modified: head/sbin/ifconfig/ifieee80211.c
==============================================================================
--- head/sbin/ifconfig/ifieee80211.c    Fri Mar 18 03:55:00 2016        
(r297006)
+++ head/sbin/ifconfig/ifieee80211.c    Fri Mar 18 03:55:57 2016        
(r297007)
@@ -2534,6 +2534,45 @@ printwmeinfo(const char *tag, const u_in
 }
 
 static void
+printvhtcap(const char *tag, const u_int8_t *ie, size_t ielen, int maxlen)
+{
+       printf("%s", tag);
+       if (verbose) {
+               const struct ieee80211_ie_vhtcap *vhtcap =
+                   (const struct ieee80211_ie_vhtcap *) ie;
+               uint32_t vhtcap_info = LE_READ_4(&vhtcap->vht_cap_info);
+
+               printf("<cap 0x%08x", vhtcap_info);
+               printf(" rx_mcs_map 0x%x",
+                   LE_READ_2(&vhtcap->supp_mcs.rx_mcs_map));
+               printf(" rx_highest %d",
+                   LE_READ_2(&vhtcap->supp_mcs.rx_highest) & 0x1fff);
+               printf(" tx_mcs_map 0x%x",
+                   LE_READ_2(&vhtcap->supp_mcs.tx_mcs_map));
+               printf(" tx_highest %d",
+                   LE_READ_2(&vhtcap->supp_mcs.tx_highest) & 0x1fff);
+
+               printf(">");
+       }
+}
+
+static void
+printvhtinfo(const char *tag, const u_int8_t *ie, size_t ielen, int maxlen)
+{
+       printf("%s", tag);
+       if (verbose) {
+               const struct ieee80211_ie_vht_operation *vhtinfo =
+                   (const struct ieee80211_ie_vht_operation *) ie;
+
+               printf("<chw %d freq1_idx %d freq2_idx %d basic_mcs_set 
0x%04x>",
+                   vhtinfo->chan_width,
+                   vhtinfo->center_freq_seg1_idx,
+                   vhtinfo->center_freq_seg2_idx,
+                   LE_READ_2(&vhtinfo->basic_mcs_set));
+       }
+}
+
+static void
 printhtcap(const char *tag, const u_int8_t *ie, size_t ielen, int maxlen)
 {
        printf("%s", tag);
@@ -2674,6 +2713,20 @@ do {                                                     
                \
 #undef MATCHOUI
 }
 
+static void
+printbssload(const char *tag, const uint8_t *ie, size_t ielen, int maxlen)
+{
+       printf("%s", tag);
+       if (verbose) {
+               const struct ieee80211_bss_load_ie *bssload =
+                   (const struct ieee80211_bss_load_ie *) ie;
+               printf("<sta count %d, chan load %d, aac %d>",
+                   LE_READ_2(&bssload->sta_count),
+                   bssload->chan_load,
+                   bssload->aac);
+       }
+}
+
 static const char *
 wpa_cipher(const u_int8_t *sel)
 {
@@ -3154,6 +3207,15 @@ printies(const u_int8_t *vp, int ielen, 
                case IEEE80211_ELEMID_MESHCONF:
                        printmeshconf(" MESHCONF", vp, 2+vp[1], maxcols);
                        break;
+               case IEEE80211_ELEMID_VHT_CAP:
+                       printvhtcap(" VHTCAP", vp, 2+vp[1], maxcols);
+                       break;
+               case IEEE80211_ELEMID_VHT_OPMODE:
+                       printvhtinfo(" VHTOPMODE", vp, 2+vp[1], maxcols);
+                       break;
+               case IEEE80211_ELEMID_BSSLOAD:
+                       printbssload(" BSSLOAD", vp, 2+vp[1], maxcols);
+                       break;
                default:
                        if (verbose)
                                printie(iename(vp[0]), vp, 2+vp[1], maxcols);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to