Repository: secdev/scapy

Issue:
Scapy can't process 802.11ax frames with HE_MU field
### Brief description

Scapy can't process a 802.11ax frame when it has HE_MU field in Radiotap Layer. `show()` method returns raw bytes when this is the case, and no layer or field is accessible since scapy can't proccess this frame. Printing fields and layers of that frame results in raw bytes again.

### Scapy version

2.4.5rc1.dev158

### Python version

3.8.10

### Operating system

Ubuntu 20.04, Linux 5.11.0-46

### Additional environment information

_No response_

### How to reproduce

1. Download the sample trace below.
2. Set `filepath` variable to the location of downloaded trace and run the code below:
```python3
filepath = '/home/test@test/Downloads/he-udp-down-up_tcp-down-up.pcapng'
for i, pkt in enumerate(PcapReader(filepath)):
    if i == 231:
        print('pkt.show() result:')
        pkt.show()
        print('pkt.layers() result:')
        print(pkt.layers(), '\n')
        print('pkt.fields result:')
        print(pkt.fields, '\n')
        print('type(pkt) result:')
        print(type(pkt))
        break
```

This is just one of the frames that has HE_MU field. If you want to check other frames with HE_MU field, open the trace in Wireshark and apply `wlan.fc.type == 2 and radiotap.he_mu.flags_1` as filter. Then choose any of these frames, take note of its Frame Number, and change the if condition to `i == (frame number - 1)` to inspect that frame.

### Actual result

```
pkt.show() result:
###[ Raw ]### 
  load      = '\x00\x00^\x00*@Щ \x08\x00\\xa0 \x08\x00\\xc0\x01\x00\x00\x00\x10\x00|\x15@\x01\\xd4\x00\x00\x00\x00\x00x\x10\x01\x00\x00\x00\x00\x00\\xa7\x14\\xd0\\xf9\x00\x00\x00\x00\x16\x00\x11\x03\\xf6\\xc7\x7f@"+\x00\x00\\x98Q\x01\x00\\xd0\\xd3W\x04\\xc8\\xc8\\xc8\\xc8rrrr\x02\x00`\x0b\\xd4\x00\\xd3\x01\\xf6T%\x01\x02\x00\x14\x00\x00\x00\\x88B\\x82\x00\\xd8\\xf8\\x835\\xd3\x06\\xf0/t|\\xa3\\xb4\\xf0/t|\\xa3\\xb4\x00\n\\xc0\x00\\xac\x10\x00 \x01\x00\x00\x00\\xe8^\\x98\\xc3\x08<΅\\xf4\\xc0\\xe0/\\xb0[\\xaf\\xb11\\x90\x11\\xb5\\xa8\\xa3\x02\\x99-\\xa0\\xcf\x7fE%\\x8a\\xa8~[\\xbe\\xe8\\xfc\\xe5:\\xbdBJ\\xf3\\x8a5\\xb3\\xed\\x88\\xde\\xdcF\x02\\xed\\xddc\x0bLN\x02\\xcdR\x06\\x9b\\x9d)\\xc2\\xdc\\xf1\\xcd\\xe3Pv\\xcauP\x1a\\xaf_\x0c\x12<\\x8f\\x999*\x1c\\xf7x\\xe4>G"\\x8d\\x91\\xd6\\xeb\\xe5\\xf9\\xc3Y\\xedf\\xffg\\xf8*\\xda\\xe9aYb\\x92\\x8b\\x93\\xde\'\\xe7_N$\\xd2;\\xe3\\xadj\\xd6\\xeb\\xf1p|[\\xfe\\xc9m\\xc2\\xe1\\xde\\xd2\\xff\\x9e\\xdb_\\x8d9\\x80\\xec\\xd2\x113\x0fWB\\x86\\xfecչ\\x9b\x07\\xb0\\xa6\x06\\xa5\x07iQ\\x80\\xa5\\x8f\x13I\\x98˲\x13\\x92\\xb3\x00\\xac<ߕ|\x0b\\x8b{\x1d\x0f4@\x12\\xb1r\\xbez\\x81\\xc2dQ\x13,nN\\xa5\\xf1\\xcd$\\xba\\x97\\xb6^\x0c\x141\\xad\\xde`\x0e\x04u\\xb6b1Ҷ\\xb3\\xcf\x01\\xf4jn\x07A\\x84\\xab\\xc1!p\\xef\\xdf\\xe9IP\\x9dm\\xc6[\x01<D\\xc7sy\\x8db؊f\\xb3}\\xc1\\xe9%\\xac\\xfd"\\xee\x1b\\x8d\\xc6\x7f{GK\\x9ec\\x9d\\xbf\\xee@\\xa1\\xe6\\xeaZ\x0c:\\x9c&\\xab҅\\xf8\\xf8"\\x88Y\\xeeK\\xd3\x01\x14\\xdfׄ\\xcb\nmi\\xa1֔\\x86\\\x1b\\xb2\\xaf\\xcb\\xd8r%\\xe7\\xaf\\\r"\\x9f\\xde\\xe6I\\xf1\\xa6\x15\\x99\\xcci\\x85f^\x18\\xf8\x03+\\xdbU:\\xdb\x13d\\xeb\x17\\xa5\\xcbBC\x0c\\xc5$\\xa8 44\\xe8\x12\x1bwZ>\\xb84X\\xe6F%\\xf7wW+\\x80\\xb1Ùb\x15\x03\\x86p\\x94m\\xd8D\\xf5\\xef\x176нb\x12\\x93\x02)\\xac\\xed\\xfe\\x8d\\xbd\\xcbyI\\xaa\\xa1\\xae\\x95H\x0eh\\xcd\\xfd\\xe0\\xe6\\xf2U\x03\\xf6E\x1d\u0382\\xf6\\x8e4\x12\\x8e+ȭJ8\r\x10/\\xca3҈|\\xd2\\xce\x7f\x15k\\x81R\\x88U\\xc4\\xdeT\x1d\\xcf\'\\xf0\'\\xb2\\xb6\\xb3\\x84\x02\\xc9L\\xee\\xf6E\x04\\xaeF\\xb1#\\xeb\x17\\xd0\n\x00\x1aH2<\\xe0\\xb3[\\x8d\t։[0&P\x17/\x191\x050\\xe4\\xc0\n_?ޒ\\xbdC\\xa6\\xb1\\xc2n\x12\\x9f\\xb5b\x10\\xcc\\xc3\\xfa\\xce\\xd7\\xe0\U000aa122騁S&\\xf9\r;́\\xa3\\x84v\\xff\n\\xb9?\\xbe!]\\xb4E]\\xac\\xbfQ\x1d)2\\xee9\\x84\\xddjq\\xb1q\\x87efʇ\\xfe\\xf6ͼk#\\xad\x03\\xe9>\\x91]\\xf3@\x02\\xb4\\x8b\\xfe\\x84z\\x88\\x83\\xf3\\xb18N\\xf7x\\xde\\xd6|\\xb2p\n\\xe4$h\\xd5\x10\x15&\\xd6O߳y\'\\x80[a\\xf6f2\\x84\\xe4\\xa9\\xe3a\\xd0h\\x93%\\xa5џX\\x94P\\x8b\\xbc\\xf9J"kЯ-\\xa2\\xbf\x1a\\xf65\\xa8[y\\xba\x0b\\xaa\x05J9\\x93VVM+\x13+;y\\xbdJ!@\\xab\r\\x93\\x93\\x8cֻ\\xc2\'\\xa0_N\'6\x05\\x96"\\xef\u05fd4S\\x99\\xfaf\x05\\xf2\\xb7\\xb9\\xe4\x02\\xd4\x1f?\x0e\\xe7'

pkt.layers() result:
[<class 'scapy.packet.Raw'>] 

pkt.fields result:
{'load': b'\x00\x00^\x00*@\xd0\xa9 \x08\x00\xa0 \x08\x00\xc0\x01\x00\x00\x00\x10\x00|\x15@\x01\xd4\x00\x00\x00\x00\x00x\x10\x01\x00\x00\x00\x00\x00\xa7\x14\xd0\xf9\x00\x00\x00\x00\x16\x00\x11\x03\xf6\xc7\x7f@"+\x00\x00\x98Q\x01\x00\xd0\xd3W\x04\xc8\xc8\xc8\xc8rrrr\x02\x00`\x0b\xd4\x00\xd3\x01\xf6T%\x01\x02\x00\x14\x00\x00\x00\x88B\x82\x00\xd8\xf8\x835\xd3\x06\xf0/t|\xa3\xb4\xf0/t|\xa3\xb4\x00\n\xc0\x00\xac\x10\x00 \x01\x00\x00\x00\xe8^\x98\xc3\x08<\xce\x85\xf4\xc0\xe0/\xb0[\xaf\xb11\x90\x11\xb5\xa8\xa3\x02\x99-\xa0\xcf\x7fE%\x8a\xa8~[\xbe\xe8\xfc\xe5:\xbdBJ\xf3\x8a5\xb3\xed\x88\xde\xdcF\x02\xed\xddc\x0bLN\x02\xcdR\x06\x9b\x9d)\xc2\xdc\xf1\xcd\xe3Pv\xcauP\x1a\xaf_\x0c\x12<\x8f\x999*\x1c\xf7x\xe4>G"\x8d\x91\xd6\xeb\xe5\xf9\xc3Y\xedf\xffg\xf8*\xda\xe9aYb\x92\x8b\x93\xde\'\xe7_N$\xd2;\xe3\xadj\xd6\xeb\xf1p|[\xfe\xc9m\xc2\xe1\xde\xd2\xff\x9e\xdb_\x8d9\x80\xec\xd2\x113\x0fWB\x86\xfec\xd5\xb9\x9b\x07\xb0\xa6\x06\xa5\x07iQ\x80\xa5\x8f\x13I\x98\xcb\xb2\x13\x92\xb3\x00\xac<\xdf\x95|\x0b\x8b{\x1d\x0f4@\x12\xb1r\xbez\x81\xc2dQ\x13,nN\xa5\xf1\xcd$\xba\x97\xb6^\x0c\x141\xad\xde`\x0e\x04u\xb6b1\xd2\xb6\xb3\xcf\x01\xf4jn\x07A\x84\xab\xc1!p\xef\xdf\xe9IP\x9dm\xc6[\x01<D\xc7sy\x8db\xd8\x8af\xb3}\xc1\xe9%\xac\xfd"\xee\x1b\x8d\xc6\x7f{GK\x9ec\x9d\xbf\xee@\xa1\xe6\xeaZ\x0c:\x9c&\xab\xd2\x85\xf8\xf8"\x88Y\xeeK\xd3\x01\x14\xdf\xd7\x84\xcb\nmi\xa1\xd6\x94\x86\\\x1b\xb2\xaf\xcb\xd8r%\xe7\xaf\\\r"\x9f\xde\xe6I\xf1\xa6\x15\x99\xcci\x85f^\x18\xf8\x03+\xdbU:\xdb\x13d\xeb\x17\xa5\xcbBC\x0c\xc5$\xa8 44\xe8\x12\x1bwZ>\xb84X\xe6F%\xf7wW+\x80\xb1\xc3\x99b\x15\x03\x86p\x94m\xd8D\xf5\xef\x176\xd0\xbdb\x12\x93\x02)\xac\xed\xfe\x8d\xbd\xcbyI\xaa\xa1\xae\x95H\x0eh\xcd\xfd\xe0\xe6\xf2U\x03\xf6E\x1d\xce\x82\xf6\x8e4\x12\x8e+\xc8\xadJ8\r\x10/\xca3\xd2\x88|\xd2\xce\x7f\x15k\x81R\x88U\xc4\xdeT\x1d\xcf\'\xf0\'\xb2\xb6\xb3\x84\x02\xc9L\xee\xf6E\x04\xaeF\xb1#\xeb\x17\xd0\n\x00\x1aH2<\xe0\xb3[\x8d\t\xd6\x89[0&P\x17/\x191\x050\xe4\xc0\n_?\xde\x92\xbdC\xa6\xb1\xc2n\x12\x9f\xb5b\x10\xcc\xc3\xfa\xce\xd7\xe0\xf2\xaa\x84\xa2\xe9\xa8\x81S&\xf9\r;\xcc\x81\xa3\x84v\xff\n\xb9?\xbe!]\xb4E]\xac\xbfQ\x1d)2\xee9\x84\xddjq\xb1q\x87ef\xca\x87\xfe\xf6\xcd\xbck#\xad\x03\xe9>\x91]\xf3@\x02\xb4\x8b\xfe\x84z\x88\x83\xf3\xb18N\xf7x\xde\xd6|\xb2p\n\xe4$h\xd5\x10\x15&\xd6O\xdf\xb3y\'\x80[a\xf6f2\x84\xe4\xa9\xe3a\xd0h\x93%\xa5\xd1\x9fX\x94P\x8b\xbc\xf9J"k\xd0\xaf-\xa2\xbf\x1a\xf65\xa8[y\xba\x0b\xaa\x05J9\x93VVM+\x13+;y\xbdJ!@\xab\r\x93\x93\x8c\xd6\xbb\xc2\'\xa0_N\'6\x05\x96"\xef\xd7\xbd4S\x99\xfaf\x05\xf2\xb7\xb9\xe4\x02\xd4\x1f?\x0e\xe7'} 

type(pkt) result:
<class 'scapy.packet.Raw'>
```

### Expected result

```
pkt.show() result:
# Expecting nicely formatted fields and values of the frame, instead of raw bytes.

pkt.layers() result:
[<class 'scapy.layers.dot11.RadioTap'>, <class 'scapy.layers.dot11.Dot11FCS'>, <class 'scapy.layers.dot11.Dot11QoS'>, <class 'scapy.layers.dot11.Dot11CCMP'>] 

pkt.fields result:
# Expecting all the fields of the frame

type(pkt) result:
<class 'scapy.layers.dot11.RadioTap'>

```

### Related resources

Sample trace:
https://www.dropbox.com/s/5vfaui2yapdac3q/he-udp-down-up_tcp-down-up.pcapng?dl=0


Discussion:

Resolving patch:
diff --git a/scapy/layers/dot11.py b/scapy/layers/dot11.py
--- a/scapy/layers/dot11.py
+++ b/scapy/layers/dot11.py
@@ -185,6 +185,9 @@ def answers(self, other):
                      '40MHz_ext_channel_below',
                      'res5', 'res6', 'res7', 'res8', 'res9']
 
+_rt_tsflags = ['32-bit_counter', 'Accuracy', 'res1', 'res2', 'res3',
+               'res4', 'res5', 'res6']
+
 _rt_knownmcs = ['MCS_bandwidth', 'MCS_index', 'guard_interval', 'HT_format',
                 'FEC_type', 'STBC_streams', 'Ness', 'Ness_MSB']
 
@@ -465,32 +468,38 @@ class RadioTap(Packet):
             LEShortField("ts_accuracy", 0),
             lambda pkt: pkt.present and pkt.present.timestamp),
         ConditionalField(
-            ByteField("ts_position", 0),
+            BitEnumField("ts_unit", 0, 4, {
+                0: 'milliseconds',
+                1: 'microseconds',
+                2: 'nanoseconds'}),
+            lambda pkt: pkt.present and pkt.present.timestamp),
+        ConditionalField(
+            BitField("ts_position", 0, 4),
             lambda pkt: pkt.present and pkt.present.timestamp),
         ConditionalField(
-            ByteField("ts_flags", 0),
+            FlagsField("ts_flags", None, 8, _rt_tsflags),
             lambda pkt: pkt.present and pkt.present.timestamp),
         # HE - XXX not complete
         ConditionalField(
             ReversePadField(
-                ShortField("he_data1", 0),
+                LEShortField("he_data1", 0),
                 2
             ),
             lambda pkt: pkt.present and pkt.present.HE),
         ConditionalField(
-            ShortField("he_data2", 0),
+            LEShortField("he_data2", 0),
             lambda pkt: pkt.present and pkt.present.HE),
         ConditionalField(
-            ShortField("he_data3", 0),
+            LEShortField("he_data3", 0),
             lambda pkt: pkt.present and pkt.present.HE),
         ConditionalField(
-            ShortField("he_data4", 0),
+            LEShortField("he_data4", 0),
             lambda pkt: pkt.present and pkt.present.HE),
         ConditionalField(
-            ShortField("he_data5", 0),
+            LEShortField("he_data5", 0),
             lambda pkt: pkt.present and pkt.present.HE),
         ConditionalField(
-            ShortField("he_data6", 0),
+            LEShortField("he_data6", 0),
             lambda pkt: pkt.present and pkt.present.HE),
         # HE_MU
         ConditionalField(
@@ -503,12 +512,12 @@ class RadioTap(Packet):
             LEShortField("hemu_flags2", 0),
             lambda pkt: pkt.present and pkt.present.HE_MU),
         ConditionalField(
-            FieldListField("RU_channel1", [], ByteField,
-                           count_from=lambda x: 4),
+            FieldListField("RU_channel1", [], ByteField('', 0),
+                           length_from=lambda x: 4),
             lambda pkt: pkt.present and pkt.present.HE_MU),
         ConditionalField(
-            FieldListField("RU_channel2", [], ByteField,
-                           count_from=lambda x: 4),
+            FieldListField("RU_channel2", [], ByteField('', 0),
+                           length_from=lambda x: 4),
             lambda pkt: pkt.present and pkt.present.HE_MU),
         # HE_MU_other_user
         ConditionalField(
@@ -535,10 +544,10 @@ class RadioTap(Packet):
             ),
             lambda pkt: pkt.present and pkt.present.L_SIG),
         ConditionalField(
-            BitField("lsig_length", 0, 12),
+            BitField("lsig_length", 0, 12, tot_size=-2),
             lambda pkt: pkt.present and pkt.present.L_SIG),
         ConditionalField(
-            BitField("lsig_rate", 0, 4),
+            BitField("lsig_rate", 0, 4, end_tot_size=-2),
             lambda pkt: pkt.present and pkt.present.L_SIG),
         # TLV fields
         ConditionalField(
@@ -597,8 +606,10 @@ def post_build(self, p, pay):
         14: "Action No Ack",
     },
     1: {  # Control
+        2: "Trigger",
+        3: "TACK",
         4: "Beamforming Report Poll",
-        5: "VHT NDP Announcement",
+        5: "VHT/HE NDP Announcement",
         6: "Control Frame Extension",
         7: "Control Wrapper",
         8: "Block Ack Request",
@@ -628,7 +639,8 @@ def post_build(self, p, pay):
         15: "QoS CF-Ack+CF-Poll (no data)"
     },
     3: {  # Extension
-        0: "DMG Beacon"
+        0: "DMG Beacon",
+        1: "S1G Beacon"
     }
 }
 


Test patch:
diff --git a/test/scapy/layers/dot11.uts b/test/scapy/layers/dot11.uts
--- a/test/scapy/layers/dot11.uts
+++ b/test/scapy/layers/dot11.uts
@@ -399,6 +399,29 @@ f = RadioTap(b"\x00\x00)\x00+@\x08\xa0 \x08\x00\xa0 \x08\x00\x00\xff\xc3$N\x00\x
 assert f.knownMCS == 0x27
 assert f.MCS_index == 10
 
+= RadioTap ts, HE, HE-MU, LSIG
+
+f = RadioTap(b'\x00\x00^\x00*@\xd0\xa9 \x08\x00\xa0 \x08\x00\xc0\x01\x00\x00\x00\x10\x00|\x15@\x01\xd4\x00\x00\x00\x00\x00x\x10\x01\x00\x00\x00\x00\x00\xa7\x14\xd0\xf9\x00\x00\x00\x00\x16\x00\x11\x03\xf6\xc7\x7f@"+\x00\x00\x98Q\x01\x00\xd0\xd3W\x04\xc8\xc8\xc8\xc8rrrr\x02\x00`\x0b\xd4\x00\xd3\x01\xf6T%\x01\x02\x00\x14\x00\x00\x00\x88B\x82\x00\xd8\xf8\x835\xd3\x06\xf0/t|\xa3\xb4\xf0/t|\xa3\xb4\x00\n\xc0\x00\xac\x10\x00 \x01\x00\x00\x00\xe8^\x98\xc3\x08<\xce\x85\xf4\xc0\xe0/\xb0[\xaf\xb11\x90\x11\xb5\xa8\xa3\x02\x99-\xa0\xcf\x7fE%\x8a\xa8~[\xbe\xe8\xfc\xe5:\xbdBJ\xf3\x8a5\xb3\xed\x88\xde\xdcF\x02\xed\xddc\x0bLN\x02\xcdR\x06\x9b\x9d)\xc2\xdc\xf1\xcd\xe3Pv\xcauP\x1a\xaf_\x0c\x12<\x8f\x999*\x1c\xf7x\xe4>G"\x8d\x91\xd6\xeb\xe5\xf9\xc3Y\xedf\xffg\xf8*\xda\xe9aYb\x92\x8b\x93\xde\'\xe7_N$\xd2;\xe3\xadj\xd6\xeb\xf1p|[\xfe\xc9m\xc2\xe1\xde\xd2\xff\x9e\xdb_\x8d9\x80\xec\xd2\x113\x0fWB\x86\xfec\xd5\xb9\x9b\x07\xb0\xa6\x06\xa5\x07iQ\x80\xa5\x8f\x13I\x98\xcb\xb2\x13\x92\xb3\x00\xac<\xdf\x95|\x0b\x8b{\x1d\x0f4@\x12\xb1r\xbez\x81\xc2dQ\x13,nN\xa5\xf1\xcd$\xba\x97\xb6^\x0c\x141\xad\xde`\x0e\x04u\xb6b1\xd2\xb6\xb3\xcf\x01\xf4jn\x07A\x84\xab\xc1!p\xef\xdf\xe9IP\x9dm\xc6[\x01<D\xc7sy\x8db\xd8\x8af\xb3}\xc1\xe9%\xac\xfd"\xee\x1b\x8d\xc6\x7f{GK\x9ec\x9d\xbf\xee@\xa1\xe6\xeaZ\x0c:\x9c&\xab\xd2\x85\xf8\xf8"\x88Y\xeeK\xd3\x01\x14\xdf\xd7\x84\xcb\nmi\xa1\xd6\x94\x86\\\x1b\xb2\xaf\xcb\xd8r%\xe7\xaf\\\r"\x9f\xde\xe6I\xf1\xa6\x15\x99\xcci\x85f^\x18\xf8\x03+\xdbU:\xdb\x13d\xeb\x17\xa5\xcbBC\x0c\xc5$\xa8 44\xe8\x12\x1bwZ>\xb84X\xe6F%\xf7wW+\x80\xb1\xc3\x99b\x15\x03\x86p\x94m\xd8D\xf5\xef\x176\xd0\xbdb\x12\x93\x02)\xac\xed\xfe\x8d\xbd\xcbyI\xaa\xa1\xae\x95H\x0eh\xcd\xfd\xe0\xe6\xf2U\x03\xf6E\x1d\xce\x82\xf6\x8e4\x12\x8e+\xc8\xadJ8\r\x10/\xca3\xd2\x88|\xd2\xce\x7f\x15k\x81R\x88U\xc4\xdeT\x1d\xcf\'\xf0\'\xb2\xb6\xb3\x84\x02\xc9L\xee\xf6E\x04\xaeF\xb1#\xeb\x17\xd0\n\x00\x1aH2<\xe0\xb3[\x8d\t\xd6\x89[0&P\x17/\x191\x050\xe4\xc0\n_?\xde\x92\xbdC\xa6\xb1\xc2n\x12\x9f\xb5b\x10\xcc\xc3\xfa\xce\xd7\xe0\xf2\xaa\x84\xa2\xe9\xa8\x81S&\xf9\r;\xcc\x81\xa3\x84v\xff\n\xb9?\xbe!]\xb4E]\xac\xbfQ\x1d)2\xee9\x84\xddjq\xb1q\x87ef\xca\x87\xfe\xf6\xcd\xbck#\xad\x03\xe9>\x91]\xf3@\x02\xb4\x8b\xfe\x84z\x88\x83\xf3\xb18N\xf7x\xde\xd6|\xb2p\n\xe4$h\xd5\x10\x15&\xd6O\xdf\xb3y\'\x80[a\xf6f2\x84\xe4\xa9\xe3a\xd0h\x93%\xa5\xd1\x9fX\x94P\x8b\xbc\xf9J"k\xd0\xaf-\xa2\xbf\x1a\xf65\xa8[y\xba\x0b\xaa\x05J9\x93VVM+\x13+;y\xbdJ!@\xab\r\x93\x93\x8c\xd6\xbb\xc2\'\xa0_N\'6\x05\x96"\xef\xd7\xbd4S\x99\xfaf\x05\xf2\xb7\xb9\xe4\x02\xd4\x1f?\x0e\xe7')
+
+assert f.timestamp == 4191163559
+assert f.ts_accuracy == 22
+assert f.ts_unit == 1
+assert f.ts_position == 1
+assert f.ts_flags.Accuracy and "32-bit_counter" in f.ts_flags
+assert f.he_data1 == 51190
+assert f.he_data2 == 16511
+assert f.he_data3 == 11042
+assert f.he_data4 == 0
+assert f.he_data5 == 20888
+assert f.he_data6 == 1
+assert f.hemu_flags1 == 54224
+assert f.hemu_flags2 == 1111
+assert f.RU_channel1 == [200, 200, 200, 200]
+assert f.RU_channel2 == [114, 114, 114, 114]
+assert f.lsig_data1.length
+assert f.lsig_length == 182
+assert f.lsig_rate == 0
+
 = Reassociation request
 f = Dot11(b' \x00:\x01@\xe3\xd6\x7f*\x00\x00\x10\x18\xa9l.@\xe3\xd6\x7f*\x00 \t1\x04\n\x00@\xe3\xd6\x7f*\x00\x00\x064.2.12\x01\x08\x82\x84\x0b\x16$0Hl!\x02\x08\x1a$\x02\x01\x0b0&\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x00\x00\x01\x00LD\xfe\xf2l\xdcV\xce\x0b7\xab\xc62\x02O\x112\x04\x0c\x12\x18`\x7f\x08\x01\x00\x00\x00\x00\x00\x00@\xdd\t\x00\x10\x18\x02\x00\x00\x10\x00\x00')
 assert Dot11EltRSN in f