| 693 | |
| 694 | # 802.11-2020 9.2.4.1.1 |
| 695 | class Dot11(Packet): |
| 696 | name = "802.11" |
| 697 | fields_desc = [ |
| 698 | BitMultiEnumField("subtype", 0, 4, _dot11_subtypes, |
| 699 | lambda pkt: pkt.type), |
| 700 | BitEnumField("type", 0, 2, ["Management", "Control", "Data", |
| 701 | "Extension"]), |
| 702 | BitField("proto", 0, 2), |
| 703 | ConditionalField( |
| 704 | BitEnumField("cfe", 0, 4, _dot11_cfe), |
| 705 | lambda pkt: (pkt.type, pkt.subtype) == (1, 6) |
| 706 | ), |
| 707 | MultipleTypeField( |
| 708 | [ |
| 709 | ( |
| 710 | FlagsField("FCfield", 0, 4, |
| 711 | ["pw_mgt", "MD", "protected", "order"]), |
| 712 | lambda pkt: (pkt.type, pkt.subtype) == (1, 6) |
| 713 | ), |
| 714 | ( |
| 715 | FlagsField("FCfield", 0, 2, |
| 716 | ["security", "AP_PM"]), |
| 717 | lambda pkt: (pkt.type, pkt.subtype) == (3, 1) |
| 718 | ) |
| 719 | ], |
| 720 | FlagsField("FCfield", 0, 8, |
| 721 | ["to_DS", "from_DS", "MF", "retry", |
| 722 | "pw_mgt", "MD", "protected", "order"]) |
| 723 | ), |
| 724 | ConditionalField( |
| 725 | BitField("FCfield_bw", 0, 3), |
| 726 | lambda pkt: (pkt.type, pkt.subtype) == (3, 1) |
| 727 | ), |
| 728 | ConditionalField( |
| 729 | FlagsField("FCfield2", 0, 3, |
| 730 | ["next_tbtt", "comp_ssid", "ano"]), |
| 731 | lambda pkt: (pkt.type, pkt.subtype) == (3, 1) |
| 732 | ), |
| 733 | LEShortField("ID", 0), |
| 734 | _Dot11MacField("addr1", ETHER_ANY, 1), |
| 735 | ConditionalField( |
| 736 | _Dot11MacField("addr2", ETHER_ANY, 2), |
| 737 | lambda pkt: (pkt.type not in {1, 3} or |
| 738 | pkt.subtype in [0x4, 0x5, 0x6, 0x8, 0x9, 0xa, 0xb, 0xe, 0xf]), |
| 739 | ), |
| 740 | ConditionalField( |
| 741 | _Dot11MacField("addr3", ETHER_ANY, 3), |
| 742 | lambda pkt: (pkt.type in [0, 2] or |
| 743 | ((pkt.type, pkt.subtype) == (1, 6) and pkt.cfe == 6)), |
| 744 | ), |
| 745 | ConditionalField(LEShortField("SC", 0), lambda pkt: pkt.type not in {1, 3}), |
| 746 | ConditionalField( |
| 747 | _Dot11MacField("addr4", ETHER_ANY, 4), |
| 748 | lambda pkt: (pkt.type == 2 and |
| 749 | pkt.FCfield & 3 == 3), # from_DS+to_DS |
| 750 | ) |
| 751 | ] |
| 752 |
no test coverage detected
searching dependent graphs…