@@ -713,11 +713,12 @@ class Dot11(Packet):
713713 ConditionalField (
714714 _Dot11MacField ("addr2" , ETHER_ANY , 2 ),
715715 lambda pkt : (pkt .type != 1 or
716- pkt .subtype in [0x8 , 0x9 , 0xa , 0xb , 0xe , 0xf ]),
716+ pkt .subtype in [0x4 , 0x5 , 0x6 , 0x8 , 0x9 , 0xa , 0xb , 0xe , 0xf ]),
717717 ),
718718 ConditionalField (
719719 _Dot11MacField ("addr3" , ETHER_ANY , 3 ),
720- lambda pkt : pkt .type in [0 , 2 ],
720+ lambda pkt : (pkt .type in [0 , 2 ] or
721+ ((pkt .type , pkt .subtype ) == (1 , 6 ) and pkt .cfe == 6 )),
721722 ),
722723 ConditionalField (LEShortField ("SC" , 0 ), lambda pkt : pkt .type != 1 ),
723724 ConditionalField (
@@ -770,6 +771,8 @@ def address_meaning(self, index):
770771 if self .type == 0 : # Management
771772 return _dot11_addr_meaning [0 ][index ]
772773 elif self .type == 1 : # Control
774+ if (self .type , self .subtype ) == (1 , 6 ) and self .cfe == 6 :
775+ return ["RA" , "NAV-SA" , "NAV-DA" ][index ]
773776 return _dot11_addr_meaning [1 ][index ]
774777 elif self .type == 2 : # Data
775778 meaning = _dot11_addr_meaning [2 ][index ][
0 commit comments