autotest: Add tx bitrate and rx bitrate support to IwRunner.

Jetstream performance needs support for txbitrate and rxbitrate
station dump in Iwrunner.

BUG=None
TEST=Verified on jetstream devices.

Change-Id: Idef505f769ca0fddfee39c69a8b77cd6c6c8ca66
Reviewed-on: https://chromium-review.googlesource.com/511163
Commit-Ready: VIKRAM HIREHAL <vhirehal@google.com>
Tested-by: VIKRAM HIREHAL <vhirehal@google.com>
Reviewed-by: Brian Norris <briannorris@chromium.org>
diff --git a/client/common_lib/cros/network/iw_runner.py b/client/common_lib/cros/network/iw_runner.py
index f3607d4..580393d 100644
--- a/client/common_lib/cros/network/iw_runner.py
+++ b/client/common_lib/cros/network/iw_runner.py
@@ -76,6 +76,8 @@
 IW_LINK_KEY_DTIM_PERIOD = 'dtim period'
 IW_LINK_KEY_FREQUENCY = 'freq'
 IW_LINK_KEY_SIGNAL = 'signal'
+IW_LINK_KEY_RX_BITRATE = 'rx bitrate'
+IW_LINK_KEY_TX_BITRATE = 'tx bitrate'
 IW_LOCAL_EVENT_LOG_FILE = './debug/iw_event_%d.log'
 
 
@@ -358,12 +360,17 @@
         for peer in peer_list_raw:
             peer_link_keys = _get_all_link_keys(peer)
             rssi_str = peer_link_keys[IW_LINK_KEY_SIGNAL]
+            tx_bitrate = peer_link_keys.get(IW_LINK_KEY_TX_BITRATE)
+            # Station may not have rx_bitrate in station dump
+            rx_bitrate = peer_link_keys.get(IW_LINK_KEY_RX_BITRATE)
             rssi_int = int(rssi_str.split()[0])
             mac = _extract_bssid(link_information=peer,
                                  interface_name=interface,
                                  station_dump=True)
             parsed_peer_info.append({'rssi_int': rssi_int,
                                      'rssi_str': rssi_str,
+                                     'tx_bitrate': tx_bitrate,
+                                     'rx_bitrate': rx_bitrate,
                                      'mac': mac})
         return sorted(parsed_peer_info, key=operator.itemgetter('mac'))
 
diff --git a/client/common_lib/cros/network/iw_runner_unittest.py b/client/common_lib/cros/network/iw_runner_unittest.py
index 55ecf20..e93c81a 100755
--- a/client/common_lib/cros/network/iw_runner_unittest.py
+++ b/client/common_lib/cros/network/iw_runner_unittest.py
@@ -218,11 +218,39 @@
         '        WMM/WME:        yes\n'
         '        MFP:            yes\n'
         '        TDLS peer:      no\n'
-        '        connected time: 8724 seconds\n')
+        '        connected time: 8724 seconds\n'
+        'Station ff:aa:bb:aa:44:55 (on mesh-5000mhz)\n'
+        '        inactive time:  304 ms\n'
+        '        rx bytes:       18816\n'
+        '        rx packets:     75\n'
+        '        tx bytes:       5386\n'
+        '        tx packets:     21\n'
+        '        signal:         -29 dBm\n'
+        '        tx bitrate:     65.0 MBit/s VHT-MCS 0 80MHz short GI VHT-NSS 2\n'
+        '        mesh llid:      0\n'
+        '        mesh plid:      0\n'
+        '        mesh plink:     ESTAB\n'
+        '        mesh local PS mode:     ACTIVE\n'
+        '        mesh peer PS mode:      ACTIVE\n'
+        '        mesh non-peer PS mode:  ACTIVE\n'
+        '        authorized:     yes\n'
+        '        authenticated:  yes\n'
+        '        preamble:       long\n'
+        '        WMM/WME:        yes\n'
+        '        MFP:            yes\n'
+        '        TDLS peer:      no\n'
+        '        connected time: 824 seconds\n')
 
     STATION_DUMP_INFORMATION_PARSED = [
-        {'mac': 'aa:bb:cc:00:11:22', 'rssi_str': '-21 dBm', 'rssi_int': -21},
-        {'mac': 'dd:ee:ff:33:44:55', 'rssi_str': '-4 dBm', 'rssi_int': -4},
+        {'mac': 'aa:bb:cc:00:11:22', 'rssi_str': '-21 dBm', 'rssi_int': -21,
+        'tx_bitrate': '866.7 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 2',
+        'rx_bitrate': '650.0 MBit/s VHT-MCS 7 80MHz short GI VHT-NSS 2'},
+        {'mac': 'dd:ee:ff:33:44:55', 'rssi_str': '-4 dBm', 'rssi_int': -4,
+        'tx_bitrate': '866.7 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 2',
+        'rx_bitrate': '866.7 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 2'},
+        {'mac': 'ff:aa:bb:aa:44:55', 'rssi_str': '-29 dBm', 'rssi_int': -29,
+        'tx_bitrate': '65.0 MBit/s VHT-MCS 0 80MHz short GI VHT-NSS 2',
+        'rx_bitrate': None},
         ]
 
     STATION_DUMP_IFACE = 'mesh-5000mhz'