RFC 5412

Lightweight Access Point Protocol

๐Ÿ“… published February 2010, from ietf

Part 1 of 22 ๐ŸŽ€

Okay bestie, this is RFC 5412, and it's called Lightweight Access Point Protocol ๐Ÿฆ‹. It was published in February 2010 as an Independent Submission, which means it came in outside the usual IETF stream. Its category is Historic and its ISSN is 2070-1721. Nothing in the title block says it obsoletes or updates any other RFC. The authors are P. Calhoun, R. Suri, and N. Cam-Winget (Cisco Systems, Inc.), plus M. Williams (GWhiz Arts & Sciences), S. Hares, B. O'Hara, and S.Kelly. Main character energy for sure ๐Ÿ‘‘

Abstract โœจ

So the big story is that wireless LAN (WLAN) products have been moving away from autonomous access points ๐ŸŒธ and toward centralized control of lightweight access points ๐Ÿ’…. The idea is to move most of the usual wireless stuff, like access control (user authentication and authorization), mobility, and radio management, out of the access point and into one centralized controller ๐Ÿงš.

The IETF's CAPWAP (Control and Provisioning of Wireless Access Points) WG figured out that they needed a standards-based protocol between a wireless Access Controller and Wireless Termination Points. The second ones are also commonly called Lightweight Access Points ๐Ÿ“. This document defines the Lightweight Access Point Protocol (LWAPP), which is built to meet the CAPWAP (Control and Provisioning of Wireless Access Points) protocol requirements ๐Ÿซถ. LWAPP is designed to be flexible enough for a bunch of different wireless technologies, but this specific document covers the base protocol plus one extension that lets it work with the IEEE's 802.11 wireless LAN protocol ๐Ÿ“กโœจ.

Status of This Memo โœจ

Heads up: this document is not an Internet Standards Track specification ๐Ÿ’€. It's published for the historical record ๐Ÿ“œ.

The document defines a Historic Document for the Internet community ๐Ÿ”ฅ. It's a contribution to the RFC Series, independent of any other RFC stream ๐ŸŒˆ. The RFC Editor chose to publish it at their discretion and makes no statement about its value for implementation or deployment ๐Ÿ™ˆ. Documents approved for publication by the RFC Editor aren't a candidate for any level of Internet Standard. See Section 2 of RFC 5741 for the details ๐Ÿ’….

For the current status of this document, any errata, and how to send feedback, check http://www.rfc-editor.org/info/rfc5412 ๐Ÿฆ‹.

IESG Note ๐ŸŽ€

This is the tea. The RFC documents the LWAPP protocol as it was when it was submitted to the IETF as a basis for further work in the CAPWAP Working Group ๐Ÿงš. That means it may resemble the CAPWAP protocol specification in RFC 5415 and other IETF work too ๐Ÿซถ. This RFC is being published solely for the historical record ๐Ÿ“œ. The protocol described here has not been thoroughly reviewed and may contain errors and omissions ๐Ÿ’€.

RFC 5415 is the standards track solution from the CAPWAP Working Group, and it obsoletes any and all mechanisms defined in this RFC ๐Ÿ‘‘. This RFC is not a candidate for any level of Internet Standard, and it should not be used as a basis for any sort of Internet deployment ๐Ÿšซโœจ.

Copyright (c) 2010 IETF Trust and the persons identified as the document authors. All rights reserved ๐ŸŒธ.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they were in effect on the date of publication. Please read these carefully, because they explain your rights and restrictions with respect to this document ๐Ÿ“–๐ŸŽ€.

Table of Contents ๐Ÿฆ‹

   1. Introduction ....................................................8
      1.1. Conventions Used in This Document ..........................9
   2. Protocol Overview ..............................................10
      2.1. Wireless Binding Definition ...............................11
      2.2. LWAPP State Machine Definition ............................12
   3. LWAPP Transport Layers .........................................20
      3.1. LWAPP Transport Header ....................................21
           3.1.1. VER Field ..........................................21
           3.1.2. RID Field ..........................................21
           3.1.3. C Bit ..............................................21
           3.1.4. F Bit ..............................................21
           3.1.5. L Bit ..............................................22
           3.1.6. Fragment ID ........................................22
           3.1.7. Length .............................................22
           3.1.8. Status and WLANS ...................................22
           3.1.9. Payload ............................................22
      3.2. Using IEEE 802.3 MAC as LWAPP Transport ...................22
           3.2.1. Framing ............................................23
           3.2.2. AC Discovery .......................................23
           3.2.3. LWAPP Message Header Format over IEEE 802.3
                  MAC Transport ......................................23
           3.2.4. Fragmentation/Reassembly ...........................24
           3.2.5. Multiplexing .......................................24
      3.3. Using IP/UDP as LWAPP Transport ...........................24
           3.3.1. Framing ............................................24
           3.3.2. AC Discovery .......................................25
           3.3.3. LWAPP Message Header Format over IP/UDP Transport ..25
           3.3.4. Fragmentation/Reassembly for IPv4 ..................26
           3.3.5. Fragmentation/Reassembly for IPv6 ..................26
           3.3.6. Multiplexing .......................................26
   4. LWAPP Packet Definitions .......................................26
      4.1. LWAPP Data Messages .......................................27
      4.2. LWAPP Control Messages Overview ...........................27
           4.2.1. Control Message Format .............................28
           4.2.2. Message Element Format .............................29
           4.2.3. Quality of Service .................................31
   5. LWAPP Discovery Operations .....................................31
      5.1. Discovery Request .........................................31
           5.1.1. Discovery Type .....................................32
           5.1.2. WTP Descriptor .....................................33
           5.1.3. WTP Radio Information ..............................34
      5.2. Discovery Response ........................................34
           5.2.1. AC Address .........................................35
           5.2.2. AC Descriptor ......................................35
           5.2.3. AC Name ............................................36
           5.2.4. WTP Manager Control IPv4 Address ...................37
           5.2.5. WTP Manager Control IPv6 Address ...................37
      5.3. Primary Discovery Request .................................38
           5.3.1. Discovery Type .....................................38
           5.3.2. WTP Descriptor .....................................38
           5.3.3. WTP Radio Information ..............................38
      5.4. Primary Discovery Response ................................38
           5.4.1. AC Descriptor ......................................39
           5.4.2. AC Name ............................................39
           5.4.3. WTP Manager Control IPv4 Address ...................39
           5.4.4. WTP Manager Control IPv6 Address ...................39
   6. Control Channel Management .....................................39
      6.1. Join Request ..............................................39
           6.1.1. WTP Descriptor .....................................40
           6.1.2. AC Address .........................................40
           6.1.3. WTP Name ...........................................40
           6.1.4. Location Data ......................................41
           6.1.5. WTP Radio Information ..............................41
           6.1.6. Certificate ........................................41
           6.1.7. Session ID .........................................42
           6.1.8. Test ...............................................42
           6.1.9. XNonce .............................................42
      6.2. Join Response .............................................43
           6.2.1. Result Code ........................................44
           6.2.2. Status .............................................44
           6.2.3. Certificate ........................................45
           6.2.4. WTP Manager Data IPv4 Address ......................45
           6.2.5. WTP Manager Data IPv6 Address ......................45
           6.2.6. AC IPv4 List .......................................46
           6.2.7. AC IPv6 List .......................................46
           6.2.8. ANonce .............................................47
           6.2.9. PSK-MIC ............................................48
      6.3. Join ACK ..................................................48
           6.3.1. Session ID .........................................49
           6.3.2. WNonce .............................................49
           6.3.3. PSK-MIC ............................................49
      6.4. Join Confirm ..............................................49
           6.4.1. Session ID .........................................50
           6.4.2. PSK-MIC ............................................50
      6.5. Echo Request ..............................................50
      6.6. Echo Response .............................................50
      6.7. Key Update Request ........................................51
           6.7.1. Session ID .........................................51
           6.7.2. XNonce .............................................51
      6.8. Key Update Response .......................................51
           6.8.1. Session ID .........................................51
           6.8.2. ANonce .............................................51
           6.8.3. PSK-MIC ............................................52
      6.9. Key Update ACK ............................................52

okay so the table of contents is still going, and it's giving main character energy ๐Ÿ“‹โœจ

           6.9.1. WNonce .............................................52
           6.9.2. PSK-MIC ............................................52
      6.10. Key Update Confirm .......................................52
           6.10.1. PSK-MIC ...........................................52
      6.11. Key Update Trigger .......................................52
           6.11.1. Session ID ........................................53
   7. WTP Configuration Management ...................................53
      7.1. Configuration Consistency .................................53
      7.2. Configure Request .........................................54
           7.2.1. Administrative State ...............................54
           7.2.2. AC Name ............................................55
           7.2.3. AC Name with Index .................................55
           7.2.4. WTP Board Data .....................................56
           7.2.5. Statistics Timer ...................................56
           7.2.6. WTP Static IP Address Information ..................57
           7.2.7. WTP Reboot Statistics ..............................58
      7.3. Configure Response ........................................58
           7.3.1. Decryption Error Report Period .....................59
           7.3.2. Change State Event .................................59
           7.3.3. LWAPP Timers .......................................60
           7.3.4. AC IPv4 List .......................................60
           7.3.5. AC IPv6 List .......................................61
           7.3.6. WTP Fallback .......................................61
           7.3.7. Idle Timeout .......................................61
      7.4. Configuration Update Request ..............................62
           7.4.1. WTP Name ...........................................62
           7.4.2. Change State Event .................................62
           7.4.3. Administrative State ...............................62
           7.4.4. Statistics Timer ...................................62
           7.4.5. Location Data ......................................62
           7.4.6. Decryption Error Report Period .....................62
           7.4.7. AC IPv4 List .......................................62
           7.4.8. AC IPv6 List .......................................62
           7.4.9. Add Blacklist Entry ................................63
           7.4.10. Delete Blacklist Entry ............................63
           7.4.11. Add Static Blacklist Entry ........................64
           7.4.12. Delete Static Blacklist Entry .....................64
           7.4.13. LWAPP Timers ......................................65
           7.4.14. AC Name with Index ................................65
           7.4.15. WTP Fallback ......................................65
           7.4.16. Idle Timeout ......................................65
      7.5. Configuration Update Response .............................65
           7.5.1. Result Code ........................................65
      7.6. Change State Event Request ................................65
           7.6.1. Change State Event .................................66
      7.7. Change State Event Response ...............................66
      7.8. Clear Config Indication ...................................66
   8. Device Management Operations ...................................66

      8.1. Image Data Request ........................................66
           8.1.1. Image Download .....................................67
           8.1.2. Image Data .........................................67
      8.2. Image Data Response .......................................68
      8.3. Reset Request .............................................68
      8.4. Reset Response ............................................68
      8.5. WTP Event Request .........................................68
           8.5.1. Decryption Error Report ............................69
           8.5.2. Duplicate IPv4 Address .............................69
           8.5.3. Duplicate IPv6 Address .............................70
      8.6. WTP Event Response ........................................70
      8.7. Data Transfer Request .....................................71
           8.7.1. Data Transfer Mode .................................71
           8.7.2. Data Transfer Data .................................71
      8.8. Data Transfer Response ....................................72
   9. Mobile Session Management ......................................72
      9.1. Mobile Config Request .....................................72
           9.1.1. Delete Mobile ......................................73
      9.2. Mobile Config Response ....................................73
           9.2.1. Result Code ........................................74
   10. LWAPP Security ................................................74
      10.1. Securing WTP-AC Communications ...........................74
      10.2. LWAPP Frame Encryption ...................................75
      10.3. Authenticated Key Exchange ...............................76
           10.3.1. Terminology .......................................76
           10.3.2. Initial Key Generation ............................77
           10.3.3. Refreshing Cryptographic Keys .....................81
      10.4. Certificate Usage ........................................82
   11. IEEE 802.11 Binding ...........................................82
      11.1. Division of Labor ........................................82
           11.1.1. Split MAC .........................................83
           11.1.2. Local MAC .........................................85
      11.2. Roaming Behavior and 802.11 Security .....................87
      11.3. Transport-Specific Bindings ..............................88
           11.3.1. Status and WLANS Field ............................88
      11.4. BSSID to WLAN ID Mapping .................................89
      11.5. Quality of Service .......................................89
      11.6. Data Message Bindings ....................................90
      11.7. Control Message Bindings .................................90
           11.7.1. Mobile Config Request .............................90
           11.7.2. WTP Event Request .................................96
      11.8. 802.11 Control Messages ..................................97
           11.8.1. IEEE 802.11 WLAN Config Request ...................98
           11.8.2. IEEE 802.11 WLAN Config Response .................103
           11.8.3. IEEE 802.11 WTP Event ............................103
      11.9. Message Element Bindings ................................105
           11.9.1. IEEE 802.11 WTP WLAN Radio Configuration .........105
           11.9.2. IEEE 802.11 Rate Set .............................107
           11.9.3. IEEE 802.11 Multi-Domain Capability ..............107
           11.9.4. IEEE 802.11 MAC Operation ........................108
           11.9.5. IEEE 802.11 Tx Power .............................109
           11.9.6. IEEE 802.11 Tx Power Level .......................110
           11.9.7. IEEE 802.11 Direct Sequence Control ..............110
           11.9.8. IEEE 802.11 OFDM Control .........................111
           11.9.9. IEEE 802.11 Antenna ..............................112
           11.9.10. IEEE 802.11 Supported Rates .....................113
           11.9.11. IEEE 802.11 CFP Status ..........................114
           11.9.12. IEEE 802.11 WTP Mode and Type ...................114
           11.9.13. IEEE 802.11 Broadcast Probe Mode ................115
           11.9.14. IEEE 802.11 WTP Quality of Service ..............115
           11.9.15. IEEE 802.11 MIC Error Report From Mobile ........117
      11.10. IEEE 802.11 Message Element Values .....................117
   12. LWAPP Protocol Timers ........................................118
      12.1. MaxDiscoveryInterval ....................................118
      12.2. SilentInterval ..........................................118
      12.3. NeighborDeadInterval ....................................118
      12.4. EchoInterval ............................................118
      12.5. DiscoveryInterval .......................................118
      12.6. RetransmitInterval ......................................119
      12.7. ResponseTimeout .........................................119
      12.8. KeyLifetime .............................................119
   13. LWAPP Protocol Variables .....................................119
      13.1. MaxDiscoveries ..........................................119
      13.2. DiscoveryCount ..........................................119
      13.3. RetransmitCount .........................................119
      13.4. MaxRetransmit ...........................................120
   14. NAT Considerations ...........................................120
   15. Security Considerations ......................................121
      15.1. Certificate-Based Session Key Establishment .............122
      15.2. PSK-Based Session Key Establishment .....................123
   16. Acknowledgements .............................................123
   17. References ...................................................123
      17.1. Normative References ....................................123
      17.2. Informative References ..................................124

1. Introduction โœจ

Okay bestie, so WTPs (Wireless Termination Points) are NOT like regular wired network gear ๐Ÿ’… They need a whole squad of dynamic management and control functions, because their main job is connecting the wireless and wired mediums ๐Ÿ“ก. Right now, managing them is either manual static configuration over HTTP, proprietary Layer 2-specific stuff, or literally nothing if the WTPs are self-contained ๐Ÿ’€. Then simple 802.11 WTPs showed up that get managed by a WLAN appliance or switch (aka an Access Controller, or AC) ๐ŸŽ€, and honestly, it's giving "we need a standardized, interoperable protocol" energy. It could seriously simplify how wireless networks get deployed and managed ๐Ÿงš.

Plus, a lot of the control and management functions are pretty generic, so they could work for an AP using any wireless Layer 2 (L2) protocol ๐ŸŒˆ. Being independent of specific wireless Layer 2 technologies means better interoperability between Layer 2 devices and smoother intertechnology handovers. Iconic ๐Ÿ˜ญ

The nitty-gritty details do depend on the specific Layer 2 wireless technology, though, so this protocol needs provisions for binding to specific technologies. Main character problem, but it's solvable ๐Ÿ’œ

Here's the setup: LWAPP assumes a network with multiple WTPs talking to an AC either via Layer 2 (Medium Access Control (MAC)) or Layer 3 (IP) ๐Ÿฆ‹. You can think of the WTPs as remote radio frequency (RF) interfaces that the AC controls ๐Ÿ“ป. The AC forwards every L2 frame it wants to transmit to a WTP via the LWAPP protocol, and packets from mobile nodes get forwarded by the WTP to the AC, also via this protocol. Figure 1 shows this for an IEEE 802.11 binding:

              +-+         802.11 frames          +-+
              | |--------------------------------| |
              | |              +-+               | |
              | |--------------| |---------------| |
              | |  802.11 PHY/ | |     LWAPP     | |
              | | MAC sublayer | |               | |
              +-+              +-+               +-+
              STA              WTP                AC

                    Figure 1: LWAPP Architecture

Security is another area where existing solutions are not it ๐Ÿ™ˆ Provisioning WTPs with security credentials, and managing which WTPs are authorized to provide service, are currently handled by proprietary solutions. Letting a centralized AC do these things in an interoperable way boosts manageability and lets network operators control their wireless network infrastructure way more tightly ๐Ÿ”ฅ.

So this document describes the Lightweight Access Point Protocol (LWAPP), which lets an AC manage a collection of WTPs ๐ŸŒธ. The protocol is defined to be independent of Layer 2 technology, but an 802.11 binding is provided for growing 802.11 wireless LAN networks โœจ.

Goals:

The following are goals for this protocol:

  1. Centralization of the bridging, forwarding, authentication, and policy enforcement functions for a wireless network. Optionally, the AC may also provide centralized encryption of user traffic. This means reduced cost and higher efficiency when you apply network processing silicon to wireless the way it's already been applied to wired LANs ๐Ÿ’ฐ.
  2. Permit shifting of the higher-level protocol processing burden away from the WTP. This leaves the WTP's computing resources for the timing-critical applications of wireless control and access. It makes the most efficient use of computing power in WTPs, which are under severe cost pressure ๐Ÿ“.
  3. Providing a generic encapsulation and transport mechanism, the protocol may be applied to other access point types in the future by adding the binding ๐Ÿฆ‹.

Heads up: the LWAPP protocol only concerns itself with the interface between the WTP and the AC. Inter-AC communication, or mobile-to-AC communication, is strictly outside the scope of this document ๐Ÿšซ

1.1. Conventions Used in This Document

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [1] ๐Ÿ“–

2. Protocol Overview

LWAPP is a generic protocol that defines how Wireless Termination Points communicate with Access Controllers ๐Ÿ’–. WTPs and ACs can talk either through Layer 2 protocols or over a routed IP network ๐ŸŒ.

LWAPP messages and procedures in this document apply to both types of transports unless specified otherwise. Transport independence comes from defining formats for both MAC-level and IP-level transport (see Section 3). Framing, fragmentation/reassembly, and multiplexing services are also defined for LWAPP for each transport type ๐Ÿงฉ.

The LWAPP Transport layer carries two types of payload. LWAPP data messages are forwarded wireless frames. LWAPP control messages are management messages exchanged between a WTP and an AC. The LWAPP transport header defines the "C-bit", which tells data and control traffic apart ๐ŸŽ€. When it's used over IP, the data and control traffic also go over separate UDP ports. Since both data and control frames can exceed Path Maximum Transmission Unit (PMTU), the payload of an LWAPP data or control message can be fragmented. How fragmentation works depends heavily on the lower-layer transport, and it's defined in Section 3 ๐Ÿ˜ค.

LWAPP starts with a discovery phase ๐Ÿ”. The WTPs send a Discovery Request frame, which makes any Access Controller (AC) that receives it respond with a Discovery Response. From the Discovery Responses it gets, a WTP selects an AC to associate with, using the Join Request and Join Response. The Join Request also provides an MTU discovery mechanism, which figures out whether the network supports transporting large frames between the WTP and its AC. If large frames aren't supported, LWAPP frames get fragmented down to the maximum length the network is found to support ๐Ÿ“.

Once the WTP and the AC have joined, a configuration exchange happens that gets both devices to agree on version information. During this exchange, the WTP may receive provisioning settings. For the 802.11 binding, that typically includes a name (802.11 Service Set Identifier, SSID), security parameters, the data rates to advertise, and the radio channel to use (channels, if the WTP can run more than one 802.11 MAC and Physical Layer (PHY) at the same time) ๐Ÿ“ก. Then, finally, the WTPs get enabled for operation ๐Ÿš€.

Once the WTP and AC finish the version and provision exchange and the WTP is enabled, LWAPP encapsulates the wireless frames sent between them ๐ŸŒธ. LWAPP fragments its packets if the encapsulated wireless user data (Data) or protocol control (Management) frames make the resulting LWAPP packet exceed the MTU supported between the WTP and AC. Fragmented LWAPP packets get reassembled to rebuild the original encapsulated payload ๐Ÿงท.

On top of all that, LWAPP also delivers commands from the AC to the WTP for managing devices that are talking to the WTP ๐ŸŽ›๏ธ. This can include creating local data structures in the WTP for the managed devices, and collecting statistical information about communication between the WTP and the 802.11 devices. LWAPP gives the AC the ability to obtain any statistical information the WTP has collected ๐Ÿ“Š.

LWAPP also has a keepalive feature that keeps the communication channel between the WTP and AC alive ๐Ÿ’“. If the AC fails to appear alive, the WTP will try to discover a new AC to talk through ๐Ÿ”„.

This document uses terminology defined in [5] ๐Ÿ“š.

2.1. Wireless Binding Definition

This draft standard specifies a protocol that's independent of any specific wireless access point radio technology ๐Ÿ“ป. Elements of the protocol are designed to accommodate the specific needs of each wireless technology in a standard way. Implementing this standard for a particular wireless technology must follow the binding requirements defined for that technology. This specification includes a binding for IEEE 802.11 (see Section 11) ๐Ÿ.

When defining a binding for other technologies, the authors MUST include any necessary definitions for technology-specific messages and all technology-specific message elements for those messages. At a minimum, a binding MUST provide the definition for a binding-specific Statistics message element, which is carried in the WTP Event Request message, and the Add Mobile message element, which is carried in the Mobile Configure Request. If any technology-specific message elements are required for any of the existing LWAPP messages defined in this specification, they MUST also be defined in the technology-binding document ๐Ÿšจ.

The names of binding-specific message elements MUST begin with the name of the technology type. For example, the binding for IEEE 802.11, provided in this standard, begins with "IEEE 802.11" ๐Ÿท๏ธ.

2.2. LWAPP State Machine Definition

Here's the state diagram for the life cycle of a WTP-AC session. It's a lot, but it's giving full map energy ๐Ÿ—บ๏ธ:

   /-------------\
   |             v
   |       +------------+
   |      C|    Idle    |<-----------------------------------\
   |       +------------+<-----------------------\           |
   |        ^    |a    ^                         |           |
   |        |    |     \----\                    |           |
   |        |    |          |                 +------------+ |
   |        |    |          |          -------| Key Confirm| |
   |        |    |          |        w/       +------------+ |
   |        |    |          |        |           ^           |
   |        |    |          |t       V           |5          |
   |        |    |        +-----------+       +------------+ |
   |       /     |       C|    Run    |       | Key Update | |
   |     /       |       r+-----------+------>+------------+ |
   |    /        |              ^    |s      u        x|     |
   |   |         v              |    |                 |     |
   |   |   +--------------+     |    |                 v     |y
   |   |  C|  Discovery   |    q|    \--------------->+-------+
   |   |  b+--------------+    +-------------+        | Reset |
   |   |     |d     f|  ^      |  Configure  |------->+-------+
   |   |     |       |  |      +-------------+p           ^
   |   |e    v       |  |              ^                  |
   |  +---------+    v  |i            2|                  |
   | C| Sulking |   +------------+    +--------------+    |
   |  +---------+  C|    Join    |--->| Join-Confirm |    |
   |               g+------------+z   +--------------+    |
   |                   |h      m|        3|       |4      |
   |                   |        |         |       v       |o
   |\                  |        |         |     +------------+
    \\-----------------/         \--------+---->| Image Data |C
     \------------------------------------/     +------------+n

                     Figure 2: LWAPP State Machine

The LWAPP state machine (the one from the diagram up top ๐Ÿ’…) is used by both the AC and the WTP, and for every state there are only certain messages that are allowed to be sent and received ๐Ÿซถ. In every LWAPP control message in this doc, the state where each command is valid is spelled out, so you always know when it's legal to send it โœจ.

Quick heads up: in the state diagram, the 'C' character means a condition that keeps the state the same, not a transition ๐Ÿ™ˆ.

Okay, so here are the transitions and the events that set them off ๐Ÿฆ‹.

Idle to Discovery (a): This is the initialization state ๐ŸŒธ.

WTP: The WTP enters the Discovery state before it sends the first Discovery Request (see Section 5.1). Once it's in there, it sets the DiscoveryInterval timer (see Section 12) and resets the DiscoveryCount counter to zero (0) (see Section 13). It also clears out any info from ACs it got during a previous discovery phase, like AC Addresses ๐Ÿงน.

AC: The AC doesn't have to keep any state for the WTP when it gets the Discovery Request, but it MUST respond with a Discovery Response (see Section 5.2) ๐Ÿ’Œ.

Discovery to Discovery (b): This is the state the WTP uses to figure out which AC it wants to connect to ๐Ÿ”.

WTP: This happens when the DiscoveryInterval timer expires. The WTP sends a Discovery Request to every AC that hasn't responded yet. Every time this happens, the WTP increments the DisoveryCount counter. See Section 5.1 for how the WTP knows which ACs to send Discovery Requests to. Then it restarts the DiscoveryInterval timer โฐ.

AC: This is a noop ๐Ÿ˜ด.

Discovery to Sulking (d): This state happens on a WTP when Discovery or its connection to the AC fails ๐Ÿ’€.

WTP: The WTP enters this state when the DiscoveryInterval timer expires and DiscoveryCount is equal to MaxDiscoveries (see Section 13). Once it's in Sulking, it starts the SilentInterval timer. While it's sulking, it ignores every LWAPP message it receives ๐Ÿ™ˆ.

AC: This is a noop ๐Ÿ˜ด.

Sulking to Idle (e): This state happens on a WTP when it has to restart the discovery phase ๐Ÿ”„.

WTP: The WTP enters this state when the SilentInterval timer (see Section 12) expires โณ.

AC: This is a noop ๐Ÿ˜ด.

Discovery to Join (f): The WTP uses this state to confirm it's committed to an AC that it wants service from ๐Ÿค.

WTP: The WTP picks the best AC based on what it found during the discovery phase. Then it sends a Join Request (see Section 6.1) to its preferred AC and starts the WaitJoin timer (see Section 12) ๐ŸŽ€.

AC: The AC enters this state for that WTP when it gets a Join Request. It processes the request and responds with a Join Response ๐Ÿ“จ.

Join to Join (g): This transition happens during the join phase ๐ŸŒ€.

WTP: The WTP enters this state when the WaitJoin timer expires and the underlying transport needs LWAPP MTU detection (Section 3) ๐Ÿ“.

AC: This state happens when the AC gets a retransmitted Join Request. The WTP processes the request and responds with the Join Response ๐Ÿ”.

Join to Idle (h): This state is used when the join process has failed ๐Ÿ’”.

WTP: This transition happens if the WTP is set up to use pre-shared key (PSK) security and gets a Join Response that has an invalid PSK-MIC (Message Integrity Check) message element ๐Ÿšซ.

AC: The AC enters this state when it sends an unsuccessful Join Response ๐Ÿ“ค.

Join to Discovery (i): This state is also used when the join process has failed ๐Ÿ™ƒ.

WTP: The WTP enters this state when it gets an unsuccessful Join Response. Once it's here, it sets the DiscoveryInterval timer (see Section 12) and resets the DiscoveryCount counter to zero (0) (see Section 13). This transition can also happen if the PSK-MIC (see Section 6.2.9) message element is invalid ๐Ÿ”™.

AC: This state transition is invalid ๐Ÿ™….

Join to Join-Confirm (z): This state is used to do key confirmation during the join process ๐Ÿ”‘.

WTP: This state is entered when the WTP gets a Join Response. If certificate-based security is being used, this transition happens when the Certificate message element is present and valid in the Join Response. For pre-shared key security, the Join Response has to include a valid and authenticated PSK-MIC message element. The WTP MUST respond with a Join ACK, which is what provides key confirmation ๐Ÿคž.

AC: The AC enters this state when it gets a valid Join ACK. For certificate-based security, the Join ACK MUST include the WNonce message element. For pre-shared key security, the message must include a valid PSK-MIC message element. The AC MUST respond with a Join Confirm message, which includes the Session Key message element ๐Ÿ—๏ธ.

Join-Confirm to Idle (3): This state is used when the join process has failed ๐Ÿ˜ญ.

WTP: This transition happens when the WTP gets an invalid Join Confirm โŒ.

AC: The AC enters this state when it gets an invalid Join ACK ๐Ÿฅ€.

Join-Confirm to Configure (2): This state is how the WTP and the AC swap configuration info ๐Ÿ› ๏ธ.

WTP: The WTP enters this state when it gets a successful Join Confirm and sees that its version number matches the version number the AC advertised. It sends a Configure Request (see Section 7.2) to the AC with a snapshot of its current configuration, and it also starts the ResponseTimeout timer (see Section 12) ๐Ÿ“ธ.

AC: This transition happens when the AC gets the Configure Request from the WTP. The AC must send a Configure Response (see Section 7.3) to the WTP, and it may include specific message elements to override the WTP's configuration ๐Ÿ‘‘.

Join-Confirm to Image Data (4): This state is how the WTP and the AC download executable firmware ๐Ÿ“ฆ.

WTP: The WTP enters this state when it gets a successful Join Confirm and sees that its version number is different from the version number the AC advertised. It sends an Image Data Request (see Section 8.1) asking for the AC's latest firmware to be started ๐Ÿš€.

AC: This transition happens when the AC gets the Image Data Request from the WTP. The AC must send an Image Data Response (see Section 8.2) to the WTP, and that response includes a chunk of the firmware ๐Ÿงฉ.

Image Data to Image Data (n): This state is used by the WTP and the AC during the firmware download phase โฌ‡๏ธ.

WTP: The WTP enters this state when it gets an Image Data Response that says the AC has more data to send ๐Ÿ”.

AC: This transition happens when the AC gets an Image Data Request from the WTP while it's already in this state, and it sees that the firmware download still hasn't finished ๐Ÿข.

Image Data to Reset (o): This state is used when the firmware download is finished ๐Ÿ.

WTP: The WTP enters this state when it gets an Image Data Response saying the AC has no more data to send, or when the underlying LWAPP transport reports a link failure. At that point, the WTP reboots itself ๐Ÿ”Œ.

AC: This transition happens when the AC gets an Image Data Request from the WTP while it's already in this state, and it sees that the firmware download has finished or the underlying LWAPP transport reports a link failure. The AC itself doesn't reset, but it puts that specific WTP's context into the reset state, which means it clears all state associated with that WTP ๐Ÿงน.

Configure to Reset (p): This transition happens if the configure phase fails ๐Ÿ˜ต.

WTP: The WTP enters this state when the reliable transport fails to deliver the Configure Request, or when the ResponseTimeout timer (see Section 12) expires โฑ๏ธ.

AC: This transition happens if the AC can't send the Configure Response to a specific WTP. The AC itself doesn't reset, but it puts that WTP's context into the reset state, which means it clears all state associated with that WTP ๐Ÿซ .

Configure to Run (q): This transition happens when the WTP and the AC enter their normal state of operation ๐ŸŽ‰.

WTP: The WTP enters this state when it gets a successful Configure Response from the AC. It initializes the HeartBeat timer (see Section 12) and sends a Change State Event Request (see Section 7.6) ๐Ÿ’“.

AC: This transition happens when the AC gets the Change State Event Request (see Section 7.6) from the WTP. The AC responds with a Change State Event Response (see Section 7.7) message. The AC must start the Session ID and NeighborDead timers (see Section 12) โฒ๏ธ.

Run to Run (r): This is the normal state of operation ๐ŸŒˆ.

WTP: This is the WTP's normal state of operation, and there are lots of events that bring it back here ๐Ÿ’…:

  • Configuration Update: The WTP receives a Configuration Update Request (see Section 7.4). The WTP MUST respond with a Configuration Update Response (see Section 7.5) ๐Ÿ› ๏ธ.
  • Change State Event: The WTP receives a Change State Event Response, or it decides it has to send a Change State Event Request because of a failure or change in the state of a radio ๐Ÿ“ป.
  • Echo Request: The WTP receives an Echo Request message (Section 6.5), and it MUST respond with an Echo Response (see Section 6.6) ๐Ÿ“.
  • Clear Config Indication: The WTP receives a Clear Config Indication message (Section 7.8). The WTP MUST reset its configuration back to manufacturer defaults ๐Ÿงผ.
  • WTP Event: The WTP generates a WTP Event Request to send information to the AC (Section 8.5). The WTP receives a WTP Event Response from the AC (Section 8.6) ๐Ÿ“ฌ.
  • Data Transfer: The WTP generates a Data Transfer Request to the AC (Section 8.7). The WTP receives a Data Transfer Response from the AC (Section 8.8) ๐Ÿ“‚.
  • WLAN Config Request: The WTP receives a WLAN Config Request message (Section 11.8.1), and it MUST respond with a WLAN Config Response (see Section 11.8.2) ๐Ÿ“ถ.
  • Mobile Config Request: The WTP receives an Mobile Config Request message (Section 9.1), and it MUST respond with a Mobile Config Response (see Section 9.2) ๐Ÿ“ฑ.

AC: This is the AC's normal state of operation, and lots of events can push it here, bestie ๐ŸŒธ

  • Configuration Update: The AC sends a Configuration Update Request (see Section 7.4) to the WTP to update its configuration ๐ŸŽ€. Then the AC receives a Configuration Update Response (see Section 7.5) back from the WTP.
  • Change State Event: The AC receives a Change State Event Request (see Section 7.6), and it MUST respond with the Change State Event Response (see Section 7.7) ๐Ÿ’….
  • Echo: The AC sends an Echo Request message (Section 6.5) or receives the associated Echo Response (see Section 6.6) from the WTP ๐Ÿฆ‹.
  • Clear Config Indication: The AC sends a Clear Config Indication message (Section 7.8) ๐Ÿงน.
  • WLAN Config: The AC sends a WLAN Config Request message (Section 11.8.1) or receives the associated WLAN Config Response (see Section 11.8.2) from the WTP ๐Ÿ“ก.
  • Mobile Config: The AC sends a Mobile Config Request message (Section 9.1) or receives the associated Mobile Config Response (see Section 9.2) from the WTP ๐Ÿ“ฑ.
  • Data Transfer: The AC receives a Data Transfer Request from the AC (see Section 8.7) and MUST generate the associated Data Transfer Response message (see Section 8.8) ๐Ÿ’œ.
  • WTP Event: The AC receives a WTP Event Request from the AC (see Section 8.5) and MUST generate the associated WTP Event Response message (see Section 8.6) โœจ.

Run to Reset (s): This event happens when the AC wants the WTP to reboot ๐Ÿ”„.

  • WTP: The WTP enters this state when it receives a Reset Request (see Section 8.3). It must respond with a Reset Response (see Section 8.4), and once the reliable transport acknowledgement has been received, it must reboot itself ๐Ÿซ .
  • AC: This state transition happens either through some administrative action, or through some internal event on the AC that makes it request that the WTP disconnect. Note that the AC itself does not reset, but it places the specific WTPs context it is communicating with in the reset state ๐Ÿ‘‘. Not the whole AC, just that one WTP's context!

Run to Idle (t): This event happens when an error occurs in the communication between the WTP and the AC ๐Ÿšจ.

  • WTP: The WTP enters this state when the underlying reliable transport is unable to transmit a message within the RetransmitInterval timer (see Section 12), and the maximum number of RetransmitCount counter has reached the MaxRetransmit variable (see Section 13) ๐Ÿ˜ญ.
  • AC: The AC enters this state when the underlying reliable transport in unable to transmit a message within the RetransmitInterval timer (see Section 12), and the maximum number of RetransmitCount counter has reached the MaxRetransmit variable (see Section 13) ๐Ÿ’€.

Run to Key Update (u): This event happens when the WTP and the AC are about to exchange new keying material, which they must use to protect all future messages ๐Ÿ”.

  • WTP: This state transition happens when the KeyLifetime timer expires (see Section 12) โฐ.
  • AC: The WTP enters this state when it receives a Key Update Request (see Section 6.7). (Yes, the AC bullet says WTP, that's what the original says, babe ๐Ÿ™ˆ.)

Key Update to Key Confirm (w): This event happens during the rekey phase and is what completes the loop ๐Ÿ”.

  • WTP: This state transition happens when the WTP receives the Key Update Response. The WTP MUST only accept the message if it is authentic ๐Ÿ›ก๏ธ. The WTP responds to this response with a Key Update ACK.
  • AC: The AC enters this state when it receives an authenticated Key Update ACK message โœ….

Key Confirm to Run (5): This event happens when the rekey exchange phase is done ๐ŸŽ‰.

  • WTP: This state transition happens when the WTP receives the Key Update Confirm. The newly derived encryption key and Initialization Vector (IV) must be plumbed into the crypto module after validating the message's authentication ๐Ÿง.
  • AC: The AC enters this state when it transmits the Key Update Confirm message. The newly derived encryption key and IV must be plumbed into the crypto module after transmitting a Key Update Confirm message ๐ŸŒˆ.

Key Update to Reset (x): This event happens when the key exchange phase times out โณ.

  • WTP: This state transition happens when the WTP does not receive a Key Update Response from the AC ๐Ÿ˜ฌ.
  • AC: The AC enters this state when it is unable to process a Key Update Request ๐Ÿ™…โ€โ™€๏ธ.

Reset to Idle (y): This event happens when the state machine is restarted ๐Ÿ”โœจ.

  • WTP: The WTP reboots itself. After rebooting, the WTP will start its LWAPP state machine in the Idle state ๐ŸŒฑ.
  • AC: The AC clears out any state associated with the WTP. The AC generally does this as a result of the reliable link layer timing out โŒ›.

3. LWAPP Transport Layers ๐Ÿฆ‹

The LWAPP protocol can operate at Layer 2 or 3. For Layer 2 support, the LWAPP messages are carried in a native Ethernet frame. Because of that, the protocol is not routable and depends on Layer 2 connectivity between the WTP and the AC. Layer 3 support is provided by encapsulating the LWAPP messages within UDP ๐ŸŒ.

3.1. LWAPP Transport Header

All LWAPP protocol packets use one common header format, no matter which transport carries the frames ๐Ÿ“ฆ. Some flags don't apply to every transport though, so you have to check the specific transport section to see which flags are valid ๐Ÿ‘€.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |VER| RID |C|F|L|    Frag ID    |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Status/WLANs         |   Payload...  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.1.1. VER Field

A 2-bit field that contains the version of LWAPP used in this packet. The value for this document is 0 ๐Ÿ”ข.

3.1.2. RID Field

A 3-bit field that contains the Radio ID number for this packet. WTPs with multiple radios but a single MAC address use this field to indicate which radio is associated with the packet ๐Ÿ“ป.

3.1.3. C Bit

The control message 'C' bit shows whether this packet carries a data or control message. When this bit is zero (0), the packet carries an LWAPP data message in the payload (see Section 4.1) ๐Ÿ“จ. When this bit is one (1), the packet carries an LWAPP control message as defined in Section 4.2, for consumption by the addressed destination ๐ŸŽ›๏ธ.

3.1.4. F Bit

The Fragment 'F' bit shows whether this packet is a fragment. When this bit is one (1), the packet is a fragment and MUST be combined with the other corresponding fragments to reassemble the complete information exchanged between the WTP and AC ๐Ÿงฉ. No skipping this step, okay?

3.1.5. L Bit

The Not Last 'L' bit is only valid if the 'F' bit is set, and it shows whether the packet contains the last fragment of a fragmented exchange between the WTP and AC. When this bit is 1, the packet is not the last fragment. When this bit is 0, the packet is the last fragment ๐Ÿ.

3.1.6. Fragment ID

An 8-bit field whose value is assigned to each group of fragments making up a complete set. The Fragment ID space is managed individually for every WTP/AC pair. The value of Fragment ID is incremented with each new set of fragments. The Fragment ID wraps to zero after the maximum value has been used to identify a set of fragments. LWAPP only supports up to 2 fragments per frame โœŒ๏ธ.

3.1.7. Length

The 16-bit length field contains the number of bytes in the Payload. The field is encoded as an unsigned number. If the LWAPP packet is encrypted, the length field includes the Advanced Encryption Standard Counter with CBC-MAC (AES-CCM) MIC (see Section 10.2 for more information) ๐Ÿ”’.

3.1.8. Status and WLANS

The interpretation of this 16-bit field depends on the binding. Refer to the transport portion of the binding for a wireless technology for the specification ๐Ÿ“ถ.

3.1.9. Payload

This field contains the header for an LWAPP data message or LWAPP control message, followed by the data associated with that message ๐ŸŽ.

3.2. Using IEEE 802.3 MAC as LWAPP Transport

This section describes how the LWAPP protocol is provided over native Ethernet frames ๐Ÿ”Œ. An LWAPP packet is formed from the MAC frame header, followed by the LWAPP message header. The following figure shows an example of the frame formats used when LWAPP runs over the IEEE 802.3 transport ๐Ÿ–ผ๏ธ.

   Layer 2 LWAPP Data Frame
   +-----------------------------------------------------------+
   | MAC Header | LWAPP Header [C=0] | Forwarded Data ...      |
   +-----------------------------------------------------------+

   Layer 2 LWAPP Control Frame
   +---------------------------------------------------+
   | MAC Header | LWAPP Header [C=1] | Control Message |
   +---------------------------------------------------+
   | Message Elements ... |
   +----------------------+

3.2.1. Framing

Source Address: A MAC address belonging to the interface from which this message is sent. If multiple source addresses are configured on an interface, then the one chosen is implementation-dependent ๐Ÿคทโ€โ™€๏ธ.

Destination Address: A MAC address belonging to the interface to which this message is to be sent. This destination address MAY be either an individual address or a multicast address, if more than one destination interface is intended ๐Ÿ“ฌ.

Ethertype: The Ethertype field is set to 0x88bb ๐Ÿท๏ธ.

3.2.2. AC Discovery

When run over IEEE 802.3, LWAPP messages are distributed to a specific MAC-level broadcast domain ๐Ÿ“ฃ. The AC discovery mechanism used with this transport is for a WTP to transmit a Discovery Request message to a broadcast destination MAC address. The ACs will receive this message and reply based on their policy ๐Ÿ•ต๏ธโ€โ™€๏ธ.

3.2.3. LWAPP Message Header Format over IEEE 802.3 MAC Transport

All of the fields described in Section 3.1 are used when LWAPP uses the IEEE 802.3 MAC transport ๐Ÿ’ฏ.

3.2.4. Fragmentation/Reassembly

Fragmentation at the MAC layer is managed using the F, L, and Frag ID fields of the LWAPP message header. The LWAPP protocol only allows a single packet to be fragmented into 2, which is enough for a frame that exceeds MTU due to LWAPP encapsulation ๐Ÿงƒ. When used with Layer 2 (Ethernet) transport, both fragments MUST include the LWAPP header ๐Ÿซถ.

3.2.5. Multiplexing

LWAPP control messages and data messages are told apart by the 'C' bit in the LWAPP message header ๐Ÿ”€.

3.3. Using IP/UDP as LWAPP Transport โœจ

okay so this section is about how LWAPP rides on IP/UDP between the WTP and the AC ๐Ÿฆ‹ With this transport, the IP stack is the one running the show at the MAC layer, so there are no special MAC-layer requirements. no cap, it's giving simple. IPv4 and IPv6 stacks both work. Here's the frame lineup:

Layer 3 LWAPP Data Frame
+--------------------------------------------+
| MAC Header | IP | UDP | LWAPP Header [C=0] |
+--------------------------------------------+
|Forwarded Data ... |
+-------------------+

Layer 3 LWAPP Control Frame
+--------------------------------------------+
| MAC Header | IP | UDP | LWAPP Header [C=1] |
+--------------------------------------------+
| Control Message | Message Elements ... |
+-----------------+----------------------+

3.3.1. Framing ๐ŸŽ€

The WTP starts the conversation like a classic UDP client/server setup ๐ŸŒธ The WTP is the client, and it knocks on the AC's well-known UDP port for control messages. The AC's ports are 12222 for LWAPP data and 12223 for LWAPP control frames. Main character energy for sure.

3.3.2. AC Discovery ๐Ÿ”

When LWAPP runs over routed IP networks, the WTP and the AC don't have to live in the same IP subnet (broadcast domain). BUT if they're on separate subnets, there must exist a mechanism for the WTP to find the AC. ngl this is the part people get stuck on.

As the WTP tries to connect to the AC, it sends the Discovery Request message and gets the matching Discovery Response back from the AC. The WTP must send the Discovery Request message to either the limited broadcast IP address (255.255.255.255), a well known multicast address, or the unicast IP address of the AC. When the AC gets the message, it sends a Discovery Response to the unicast IP address of the WTP, regardless of whether the request came in as a broadcast, multicast, or unicast message. so iconic of it ๐Ÿ’…

Whether the WTP uses a limited IP broadcast, multicast or unicast IP address is implementation-dependent. ๐Ÿซถ

To send a Discovery Request to a unicast address, the WTP must first obtain the IP address of the AC. Any static configuration of an AC's IP address in the WTP's non-volatile storage is implementation-dependent. However, there are extra dynamic schemes that are possible, for example:

  • DHCP: A comma-delimited, ASCII-encoded list of AC IP addresses is embedded inside a DHCP vendor-specific option 43 extension. An example of the actual format of the vendor-specific payload for IPv4 looks like "10.1.1.1, 10.1.1.2".
  • DNS: The DNS name LWAPP-AC-Address MAY be resolvable to one or more AC addresses. ๐Ÿงš

3.3.3. LWAPP Message Header Format over IP/UDP Transport ๐Ÿ“ฆ

All of the fields described in Section 3.1 are used when LWAPP uses the IPv4/UDP or IPv6/UDP transport, with the following exceptions. just a few tiny tweaks, bestie.

3.3.3.1. F Bit

This flag field is not used with this transport, and MUST be set to zero. ๐Ÿ™ˆ

3.3.3.2. L Bit

This flag field is not used with this transport, and MUST be set to zero. ๐Ÿ™ˆ

3.3.3.3. Frag ID

This field is not used with this transport, and MUST be set to zero. ๐Ÿ’€

3.3.4. Fragmentation/Reassembly for IPv4 ๐Ÿงฉ

When LWAPP is implemented at L3, the transport layer uses IP fragmentation to split up and put back together LWAPP messages that are longer than the MTU size used by either the WTP or the AC. The details of IP fragmentation are covered in [8]. With the IP transport, only the first fragment includes the LWAPP header.

3.3.5. Fragmentation/Reassembly for IPv6 ๐ŸŒˆ

IPv6 does MTU discovery, so fragmentation and re-assembly isn't necessary for UDP packets. the IPv6 glow-up is real ๐Ÿ‘‘

3.3.6. Multiplexing ๐Ÿ”€

LWAPP messages carry control info between the WTP and the AC, plus binding-specific data frames or binding-specific management frames. So LWAPP messages need to be multiplexed in the transport sub-layer and delivered to the right software entities at each endpoint. The 'C' bit is still used to tell data and control frames apart.

For a Layer 3 connection, multiplexing happens by using different UDP ports for control and data packets (see Section 3.3.1). โœจ

As part of the Join procedure, the WTP and AC may negotiate different IP addresses for data or control messages. The IP address in the AP Manager Control IP Address message element tells the WTP which IP address to send all control frames to. The AP Manager Data IP Address message element MAY be present only if the AC has a different IP address that the WTP should use to send its data LWAPP frames. ๐Ÿฆ‹

If the WTP and AC are separated by a NAT, with the WTP using private IP address space, it's the NAT's job to manage the right UDP port mapping. not the protocol's problem, periodt ๐Ÿ’…

4. LWAPP Packet Definitions ๐Ÿ“ฎ

This section covers the packet types and formats. LWAPP is designed to be transport-agnostic, so it specifies packet formats for both MAC frames and IP packets. An LWAPP packet is an LWAPP Transport Layer packet header followed by an LWAPP message.

Transport details live in Section 3. ๐ŸŽ€

4.1. LWAPP Data Messages ๐ŸŒธ

An LWAPP data message is a forwarded wireless frame. When forwarding wireless frames, the sender just wraps the wireless frame in an LWAPP data packet, using the right transport rules from Section 3.

If the encapsulated frame would go over the transport layer's MTU, the sender is responsible for fragmenting the frame, as specified in the transport-specific part of Section 3. ๐Ÿงฉ

The exact format of the encapsulated LWAPP data frame depends on the rules in the specific wireless technology binding. ๐Ÿ’œ

4.2. LWAPP Control Messages Overview ๐ŸŽ›๏ธ

The LWAPP Control protocol gives the WTP and the AC a control channel. The control channel is the series of control messages between the WTP and the AC, tied to a session ID and key. Control messages come in these distinct types:

  • Discovery: LWAPP Discovery messages identify potential ACs, along with their load and capabilities.
  • Control Channel Management: Messages in this group are used for WTPs to discover ACs, and for setting up and keeping up an LWAPP control channel.
  • WTP Configuration: The AC uses WTP Configuration messages to push a specific configuration to the WTPs it has a control channel with. Messages that retrieve statistics from the WTP are also in this category.
  • Mobile Session Management: The AC uses Mobile Session Management messages to push specific mobile policies to the WTP.
  • Firmware Management: The AC uses messages in this category to push a new firmware image down to the WTP.

Control Channel, WTP Configuration, and Mobile Session Management MUST be implemented. Firmware Management MAY be implemented. ๐Ÿ”ฅ

Technology-specific bindings may also add new control channel commands that go beyond the list above. โœจ

4.2.1. Control Message Format ๐Ÿงพ

All LWAPP control messages are sent encapsulated within the LWAPP header (see Section 3.1). Right after the header comes the LWAPP control header, which looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Message Type |    Seq Num    |      Msg Element Length       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           Session ID                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Msg Element [0..N]       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

4.2.1.1. Message Type ๐Ÿท๏ธ

The Message Type field tells you what the LWAPP control message does. These are the valid values:

                  Description                       Value
                  Discovery Request                    1
                  Discovery Response                   2
                  Join Request                         3
                  Join Response                        4
                  Join ACK                             5
                  Join Confirm                         6
                  Unused                             7-9
                  Configure Request                   10
                  Configure Response                  11
                  Configuration Update Request        12
                  Configuration Update Response       13
                  WTP Event Request                   14
                  WTP Event Response                  15
                  Change State Event Request          16
                  Change State Event Response         17
                  Unused                           18-21
                  Echo Request                        22
                  Echo Response                       23
                  Image Data Request                  24
                  Image Data Response                 25
                  Reset Request                       26
                  Reset Response                      27
                  Unused                           28-29
                  Key Update Request                  30
                  Key Update Response                 31
                  Primary Discovery Request           32
                  Primary Discovery Response          33
                  Data Transfer Request               34
                  Data Transfer Response              35
                  Clear Config Indication             36
                  WLAN Config Request                 37
                  WLAN Config Response                38
                  Mobile Config Request               39
                  Mobile Config Response              40

4.2.1.2. Sequence Number ๐Ÿ”ข

The Sequence Number field is an identifier used to match up request/response exchanges. When an LWAPP packet with a request message type comes in, the Sequence Number value gets copied into the matching response packet.

Each time an LWAPP control frame is sent, its internal sequence number counter goes up monotonically, so no two pending requests share a sequence number. This field wraps back to zero when it runs out of room. ๐Ÿ”„

4.2.1.3. Message Element Length ๐Ÿ“

The length field is the number of bytes that come after the Session ID field. If the LWAPP packet is encrypted, the length field includes the AES-CCM MIC (see Section 10.2 for more information). ๐Ÿ”

4.2.1.4. Session ID ๐Ÿชช

The Session ID is a 32-bit unsigned integer that identifies the security context for encrypted exchanges between the WTP and the AC. Heads up, a Session ID is a random value that MUST be unique between a given AC and any of the WTPs it may be talking to. ๐Ÿ‘‘

4.2.1.5. Message Element [0..N] ๐Ÿง

The message elements carry the info that matters for each control message type. Every control message in this specification says which message elements it's allowed to have. โœจ

4.2.2. Message Element Format โœจ

okay bestie, a message element is basically a little package of info that rides along inside a control message ๐ŸŽ€ Every one gets identified by its Type field, and those numbers are handed out and tracked by IANA (peep Section 16 for the deets) ๐Ÿ’… The Message Element Length field tells you how many bytes all the message elements add up to ๐Ÿ“ฆ

The diagrams in this doc skip the Type and Length header fields to keep things clean, but every message element description spells out what those header values are supposed to be ๐Ÿ’– Also, extra message elements can be defined in separate IETF documents, so the party's not over yet ๐ŸŒˆ

The TLV format looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Type     |             Length            |   Value ...   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

So basically, Type is 8 bits and tells you what kind of info lives in the Value field, while Length is 16 bits and counts how many bytes are in the Value field ๐Ÿงš

4.2.2.1. Generic Message Elements ๐ŸŒธ

This section covers the message elements that aren't tied to one specific control message ๐Ÿซถ

4.2.2.1.1. Vendor Specific ๐Ÿ“

The Vendor-Specific Payload is how the WTP and the AC pass vendor-specific info back and forth ๐Ÿ’œ The value looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Vendor Identifier                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Element ID           |   Value...    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 104 for Vendor Specific
  • Length: >= 7
  • Vendor Identifier: A 32-bit value containing the IANA-assigned "SMI Network Management Private Enterprise Codes" [13].
  • Element ID: A 16-bit Element Identifier that is managed by the vendor.
  • Value: The value associated with the vendor-specific element.

4.2.3. Quality of Service โšก

it is recommended that LWAPP control messages be sent by both the AC and the WTP with an appropriate Quality-of-Service precedence value, so that congestion in the network doesn't cause LWAPP control channel disconnects as often ๐Ÿซถ So a Quality-of-Service-enabled LWAPP device should use:

  • 802.1P: The precedence value of 7 SHOULD be used.
  • DSCP: The Differentiated Services Code Point (DSCP) tag value of 46 SHOULD be used.

5. LWAPP Discovery Operations ๐Ÿ”

The Discovery messages are how a WTP figures out which ACs are around to provide service, plus their capabilities and load ๐Ÿ’ซ

5.1. Discovery Request ๐Ÿ“ฃ

The Discovery Request is how the WTP automatically finds potential ACs in the network ๐Ÿ”Ž A WTP must transmit this command even if it has a statically configured AC, because it's a required step in the LWAPP state machine ๐Ÿ’…

Discovery Requests MUST be sent by a WTP in the Discover state, after waiting a random delay less than MaxDiscoveryInterval, whenever a WTP first comes up or is (re)initialized. A WTP MUST send no more than a maximum of MaxDiscoveries discoveries, waiting a random delay less than MaxDiscoveryInterval between each successive discovery.

This is all to prevent an explosion of WTP Discoveries ๐Ÿ’ฅ Picture many WTPs getting powered on at the exact same time, and you get the idea ๐Ÿ™ˆ

Discovery Requests MUST be sent by a WTP when no Echo Responses are received for NeighborDeadInterval and the WTP returns to the Idle state. Discovery Requests are sent after NeighborDeadInterval, and they MUST be sent after waiting a random delay less than MaxDiscoveryInterval. A WTP MAY send up to a maximum of MaxDiscoveries discoveries, waiting a random delay less than MaxDiscoveryInterval between each successive discovery.

If a Discovery Response is not received after the maximum number of Discovery Requests has been sent, the WTP enters the Sulking state and MUST wait for an interval equal to SilentInterval before sending further Discovery Requests ๐Ÿ˜ญ

The Discovery Request message may be sent as a unicast, broadcast, or multicast message ๐Ÿฆ‹

Upon receiving a Discovery Request, the AC will respond with a Discovery Response sent to the address in the source address of the received Discovery Request ๐ŸŒˆ

The following subsections define the message elements that MUST be included in this LWAPP operation.

5.1.1. Discovery Type ๐Ÿงฉ

The Discovery message element is used to configure a WTP to operate in a specific mode ๐ŸŽ€

    0
    0 1 2 3 4 5 6 7
   +-+-+-+-+-+-+-+-+
   | Discovery Type|
   +-+-+-+-+-+-+-+-+
  • Type: 58 for Discovery Type
  • Length: 1
  • Discovery Type: An 8-bit value indicating how the AC was discovered. The following values are supported:
    • 0 - Broadcast
    • 1 - Configured

5.1.2. WTP Descriptor ๐Ÿ–ฅ๏ธ

The WTP Descriptor message element is how the WTP tells everyone its current hardware and firmware setup ๐Ÿ’– The value contains the following fields:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Hardware   Version                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Software   Version                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Boot   Version                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Max Radios  | Radios in use |    Encryption Capabilities    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 3 for WTP Descriptor
  • Length: 16
  • Hardware Version: A 32-bit integer representing the WTP's hardware version number.
  • Software Version: A 32-bit integer representing the WTP's Firmware version number.
  • Boot Version: A 32-bit integer representing the WTP's boot loader's version number.
  • Max Radios: An 8-bit value representing the number of radios (where each radio is identified via the RID field) supported by the WTP.
  • Radios in Use: An 8-bit value representing the number of radios present in the WTP.
  • Encryption Capabilities: This 16-bit field is used by the WTP to communicate its capabilities to the AC. Since most WTPs support link-layer encryption, the AC may make use of these services. There are binding-dependent encryption capabilities. A WTP that does not have any encryption capabilities would set this field to zero (0). Refer to the specific binding for the specification.

5.1.3. WTP Radio Information ๐Ÿ“ก

The WTP Radio Information message element is used to communicate the radio information in a specific slot โœจ The Discovery Request MUST include one such message element per radio in the WTP ๐ŸŒธ The Radio Type field is how the AC figures out which technology-specific binding to use with the WTP ๐Ÿง 

The value contains two fields, as shown:

    0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Radio ID    |   Radio Type  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 4 for WTP Radio Information
  • Length: 2
  • Radio ID: The Radio Identifier, typically refers to some interface index on the WTP.
  • Radio Type: The type of radio present. The following values are supported:
    • 1 - 802.11bg: An 802.11bg radio.
    • 2 - 802.11a: An 802.11a radio.
    • 3 - 802.16: An 802.16 radio.
    • 4 - Ultra Wideband: A UWB radio.
    • 7 - all: Used to specify all radios in the WTP.

5.2. Discovery Response ๐ŸŒท

The Discovery Response is the way an AC advertises its services to WTPs that come asking ๐Ÿ’…

Discovery Responses are sent by an AC after it receives a Discovery Request ๐Ÿ“ฌ

When a WTP receives a Discovery Response, it MUST wait for an interval not less than DiscoveryInterval to catch any additional Discovery Responses ๐Ÿ‘€ Once DiscoveryInterval elapses, the WTP enters the Joining state, picks one of the ACs that sent a Discovery Response, and sends a Join Request to that AC ๐ŸŽ‰

The following subsections define the message elements that MUST be included in this LWAPP operation.

5.2.1. AC Address ๐Ÿ 

The AC Address message element is used to communicate the identity of the AC. The value contains two fields, as shown:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Reserved    |                  MAC Address                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 MAC Address                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 2 for AC Address
  • Length: 7
  • Reserved: MUST be set to zero
  • MAC Address: The MAC address of the AC

5.2.2. AC Descriptor ๐Ÿ›ก๏ธ

The AC Descriptor message element is how the AC shares its current state ๐Ÿ“Š The value contains the following fields:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Reserved    |                 Hardware  Version ...         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     HW Ver    |                 Software  Version ...         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     SW Ver    |            Stations           |     Limit     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Limit     |            Radios             |   Max Radio   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Max Radio   |    Security   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 6 for AC Descriptor
  • Length: 17
  • Reserved: MUST be set to zero
  • Hardware Version: A 32-bit integer representing the AC's hardware version number.
  • Software Version: A 32-bit integer representing the AC's Firmware version number.
  • Stations: A 16-bit integer representing the number of mobile stations currently associated with the AC.
  • Limit: A 16-bit integer representing the maximum number of stations supported by the AC.
  • Radios: A 16-bit integer representing the number of WTPs currently attached to the AC.
  • Max Radio: A 16-bit integer representing the maximum number of WTPs supported by the AC.
  • Security: An 8-bit bitmask specifying the security schemes supported by the AC. The following values are supported (see Section 10):
    • 1 - X.509 Certificate-Based
    • 2 - Pre-Shared Secret

5.2.3. AC Name ๐Ÿท๏ธ

okay so the AC Name message element is the AC's ASCII name tag ๐Ÿ’… its value is a variable-length byte string and it is NOT zero terminated, so the length tells you where it ends โœจ

       0
       0 1 2 3 4 5 6 7
      +-+-+-+-+-+-+-+-+
      | Name ...
      +-+-+-+-+-+-+-+-+
  • Type: 31 for AC Name
  • Length: > 0
  • Name: a variable-length ASCII string with the AC's name

5.2.4. WTP Manager Control IPv4 Address ๐Ÿฆ‹

this one is giving "here's my whole vibe" ๐Ÿ’– the AC sends it to the WTP during discovery to show which interfaces it has available and how loaded each one is. it's so useful for the WTP when it wants to load balance across multiple interfaces ๐Ÿงš

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           IP Address                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           WTP Count           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 99 for WTP Manager Control IPv4 Address
  • Length: 6
  • IP Address: the IP address of an interface
  • WTP Count: the number of WTPs currently connected to the interface

5.2.5. WTP Manager Control IPv6 Address ๐ŸŒˆ

same energy as the IPv4 one, just for IPv6 ๐Ÿ’œ the AC uses it during discovery to share its interfaces and their current load, which helps the WTP balance load across them ๐Ÿซถ

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           IP Address                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           IP Address                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           IP Address                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           IP Address                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           WTP Count           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 137 for WTP Manager Control IPv6 Address
  • Length: 6
  • IP Address: the IP address of an interface
  • WTP Count: the number of WTPs currently connected to the interface

5.3. Primary Discovery Request ๐Ÿ”ฅ

the Primary Discovery Request is sent by the WTP to check whether its preferred (or primary) AC is available ๐Ÿ‘‘

a WTP sends these when it has a primary AC configured but is connected to a different AC. this usually happens after a failover, and the WTP uses it to find out when its primary AC is back ๐Ÿ™Œ because of that, a WTP only sends this message while it's in the Run state.

the frequency of the Primary Discovery Requests should be no more often than the sending of the Echo Request message โฐ

when the AC gets a Discovery Request, it replies with a Primary Discovery Response, sent to the source address of the Primary Discovery Request it received ๐Ÿ’Œ

the following subsections define the message elements that MUST be included in this LWAPP operation ๐Ÿ“

5.3.1. Discovery Type

the Discovery Type message element is defined in Section 5.1.1 โœจ

5.3.2. WTP Descriptor

the WTP Descriptor message element is defined in Section 5.1.2 โœจ

5.3.3. WTP Radio Information

a WTP Radio Information message element must be present for every radio in the WTP ๐Ÿ“ก it's defined in Section 5.1.3 โœจ

5.4. Primary Discovery Response ๐Ÿ’ซ

the Primary Discovery Response is how an AC announces that it's available and what services it offers ๐ŸŽ€ it goes to WTPs that have that AC configured as their primary AC

the AC sends these after it gets a Primary Discovery Request ๐Ÿ’…

when a WTP gets a Primary Discovery Response, it may choose to set up an LWAPP connection with its primary AC. whether it does depends on the WTP Fallback Status message element configured on the WTP ๐Ÿง 

the following subsections define the message elements that MUST be included in this LWAPP operation ๐Ÿ“

5.4.1. AC Descriptor

the Discovery Type message element is defined in Section 5.2.2 โœจ

5.4.2. AC Name

the AC Name message element is defined in Section 5.2.3 โœจ

5.4.3. WTP Manager Control IPv4 Address

a WTP Radio Information message element MAY be present for every radio in the WTP that is reachable via IPv4 ๐Ÿฆ‹ it's defined in Section 5.2.4 โœจ

5.4.4. WTP Manager Control IPv6 Address

a WTP Radio Information message element must be present for every radio in the WTP that is reachable via IPv6 ๐ŸŒธ it's defined in Section 5.2.5 โœจ


6. Control Channel Management ๐ŸŽ€

the Control Channel Management messages are how the WTP and AC set up and keep up a channel for other commands to go over, like configuration, firmware updates, and so on ๐Ÿซถ

6.1. Join Request ๐Ÿš€

the Join Request is how a WTP tells an AC that it wants to provide services through it ๐Ÿ’–

WTPs send Join Requests while they're in the Joining state, after getting one or more Discovery Responses. the Join Request also doubles as an MTU discovery mechanism for the WTP ๐Ÿงš the WTP sends a Join Request with a Test message element that pushes the total message size over the MTU ๐Ÿ“

if the transport doesn't provide MTU path discovery, the first Join Request gets padded with the Test message element to 1596 bytes. if a Join Response comes back, the WTP can forward frames without any fragmentation ๐Ÿ™Œ if no Join Response comes back, the WTP sends a second Join Request padded with the Test payload to a total of 1500 bytes. the WTP keeps cycling between large (1596) and small (1500) packets until it gets a Join Response, or until both sizes have been retransmitted 3 times. if the Join Response still doesn't show up after the max retransmissions, the WTP MUST abandon the AC and restart the discovery phase ๐Ÿ’€

when an AC gets a Join Request, it replies with a Join Response ๐Ÿ’Œ if the certificate-based security mechanism is in use, the AC checks the certificate in the request. if it's valid, the AC generates a session key to secure the control frames it swaps with the WTP ๐Ÿ” when the AC sends the Join Response, it makes a context for the session with the WTP โœจ

if the pre-shared session key security mechanism is in use, the AC saves the WTP's nonce from the WNonce message element and makes its own nonce, which goes in the ANonce message element. last but not least, the AC creates the PSK-MIC, which is computed with a key derived from the PSK ๐Ÿ”‘

a Join Request that includes both a WNonce and a Certificate message element MUST be considered invalid ๐Ÿšซ

details on the key generation are in Section 10 ๐Ÿง

the following subsections define the message elements that MUST be included in this LWAPP operation ๐Ÿ“

6.1.1. WTP Descriptor

the WTP Descriptor message element is defined in Section 5.1.2 โœจ

6.1.2. AC Address

the AC Address message element is defined in Section 5.2.1 โœจ

6.1.3. WTP Name ๐Ÿท๏ธ

the WTP Name message element value is a variable-length byte string, and it is NOT zero terminated ๐Ÿ’…

       0
       0 1 2 3 4 5 6 7
      +-+-+-+-+-+-+-+-+
      | Name ...
      +-+-+-+-+-+-+-+-+
  • Type: 5 for WTP Name
  • Length: > 0
  • Name: a non-zero-terminated string containing the WTP's name

6.1.4. Location Data ๐Ÿ“

the Location Data message element is a variable-length byte string with user-defined location info, like "Next to Fridge" ๐ŸงŠ it is NOT zero terminated either ๐Ÿ’…

       0
       0 1 2 3 4 5 6 7
      +-+-+-+-+-+-+-+-+
      | Location ...
      +-+-+-+-+-+-+-+-+
  • Type: 35 for Location Data
  • Length: > 0
  • Location: a non-zero-terminated string containing the WTP's location

6.1.5. WTP Radio Information ๐Ÿ“ก

a WTP Radio Information message element must be present for every radio in the WTP ๐Ÿ“ก it's defined in Section 5.1.3 โœจ

6.1.6. Certificate ๐Ÿ”

the Certificate message element value is a byte string holding a DER-encoded x.509v3 certificate. it only shows up if the LWAPP security type between the WTP and the AC uses certificates (see Section 10 for more info) ๐Ÿง 

       0
       0 1 2 3 4 5 6 7
      +-+-+-+-+-+-+-+-+
      | Certificate...
      +-+-+-+-+-+-+-+-+
  • Type: 44 for Certificate
  • Length: > 0
  • Certificate: a non-zero-terminated string containing the device's certificate

6.1.7. Session ID ๐Ÿ†”

the Session ID message element value holds a randomly generated [4] unsigned 32-bit integer ๐ŸŽฒ

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Session ID                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 45 for Session ID
  • Length: 4
  • Session ID: 32-bit random session identifier

6.1.8. Test ๐Ÿงช

the Test message element is padding for MTU discovery, and it MAY contain any value, of any length ๐Ÿซง

       0
       0 1 2 3 4 5 6 7
      +-+-+-+-+-+-+-+-+
      |  Padding ...
      +-+-+-+-+-+-+-+-+
  • Type: 18 for Test
  • Length: > 0
  • Padding: a variable-length pad

6.1.9. XNonce ๐ŸŽฒ

the XNonce is how the WTP shares its random nonce during the join or rekey phase. see Section 10 for more info โœจ

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             Nonce                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             Nonce                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             Nonce                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             Nonce                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 111 for XNonce
  • Length: 16
  • Nonce: 1 16-octet random nonce

6.2. Join Response โœจ

okay so the Join Response is the AC's big "yes bestie, you can join" moment ๐Ÿ’– it tells a WTP whether the AC is capable and willing to provide service to it ๐Ÿ’…

The AC sends a Join Response after it gets a Join Request ๐ŸŽ€ once the Join Response is out, the Heartbeat timer starts for the session and is set to EchoInterval ๐Ÿฆ‹ if that timer runs out, the AC-WTP session gets deleted (rip) ๐Ÿ’€ and every Echo Request that comes in refreshes the timer โœจ

If the security method is certificate-based, the WTP enters the Joined state when it receives a Join Response. Then it sends either a Configure Request or Image Data to the AC it's now joined to ๐ŸŒธ the second it enters Joined, the WTP starts timing an interval equal to NeighborDeadInterval ๐Ÿงš when that timer expires, it sends an Echo Request ๐Ÿ”ฅ

If the security method is pre-shared-secret-based and the WTP gets a Join Response that includes a valid PSK-MIC message element, it replies with a Join ACK that also MUST include a locally computed PSK-MIC message element ๐Ÿซถ

The following subsections define the message elements that MUST be included in this LWAPP operation ๐Ÿ‘‘

6.2.1. Result Code

The Result Code is a 32-bit integer that tells you how the request matching the sequence number in the message went ๐Ÿ“ it's only included in a successful Join Response โœจ

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         Result Code                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 2 for Result Code ๐Ÿซง

Length: 4

Result Code: these are the defined values:

  • 0 Success
  • 1 Failure (AC List message element MUST be present)

6.2.2. Status

The Status message element is sent by the AC to the WTP in a non-successful Join Response ๐Ÿ’” it's there to explain the failure, and it should only show up alongside a Result Code that says failure ๐Ÿ™ˆ

    0
    0 1 2 3 4 5 6 7
   +-+-+-+-+-+-+-+-+
   |    Status     |
   +-+-+-+-+-+-+-+-+

Type: 60 for Status

Length: 1

Status: the Status field gives the reason for an LWAPP failure. These values are supported:

  • 1 - Reserved - do not use
  • 2 - Resource Depletion
  • 3 - Unknown Source
  • 4 - Incorrect Data

6.2.3. Certificate

The Certificate message element is defined in Section 6.1.6. Heads up ๐ŸŽ€ it only gets included if the WTP and the AC use certificate-based security as defined in Section 10.

6.2.4. WTP Manager Data IPv4 Address

The WTP Manager Data IPv4 Address message element is optionally sent by the AC to the WTP during the join phase ๐Ÿฆ‹ if it's there, the IP address inside is the one the WTP uses when it sends any of its LWAPP data frames ๐ŸŒธ

This message element is only valid when LWAPP uses the IP/UDP Layer 3 transport.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           IP Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 138 for WTP Manager Data IPv4 Address

Length: 4

IP Address: the IP address of an interface.

6.2.5. WTP Manager Data IPv6 Address

The WTP Manager Data IPv6 Address message element is optionally sent by the AC to the WTP during the join phase ๐Ÿงš same deal as the IPv4 one: if it's present, that's the address the WTP uses for its LWAPP data frames โœจ

This message element is only valid when LWAPP uses the IP/UDP Layer 3 transport.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           IP Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           IP Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           IP Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           IP Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 139 for WTP Manager Data IPv6 Address

Length: 4

IP Address: the IP address of an interface.

6.2.6. AC IPv4 List

The AC List message element is how the AC gives a WTP the latest list of ACs in a cluster ๐Ÿ“‹ this message element MUST be included if the Join Response returns a failure saying the AC can't handle the WTP right now, so the WTP can go find an alternate AC to connect to ๐Ÿƒโ€โ™€๏ธ

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       AC IP Address[]                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 59 for AC List

Length: >= 4

AC IP Address: an array of 32-bit integers holding an AC's IPv4 Address.

6.2.7. AC IPv6 List

The AC List message element does the same job here: it's how a WTP gets the latest list of ACs in a cluster ๐Ÿ’œ it MUST be included if the Join Response returns a failure saying the AC can't handle the WTP at this time, so the WTP can find an alternate AC to connect to ๐ŸŒˆ

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       AC IP Address[]                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       AC IP Address[]                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       AC IP Address[]                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       AC IP Address[]                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 141 for AC List

Length: >= 4

AC IP Address: an array of 32-bit integers holding an AC's IPv6 Address.

6.2.8. ANonce

The ANonce message element is sent by an AC during the join or rekey phase ๐Ÿ” the contents of the ANonce are encrypted, as described in Section 10 for more info.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Nonce                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Nonce                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Nonce                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Nonce                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 108 for ANonce

Length: 16

Nonce: an encrypted, 16-octet random nonce.

6.2.9. PSK-MIC

The PSK-MIC message element carries a message integrity check ๐Ÿ”’ its whole purpose is to confirm for the peer that the sender has the proper session key ๐Ÿ’… it's only included when the security method between the WTP and the AC is the pre-shared secret mechanism. See Section 10 for more information.

When it's present, the PSK-MIC message element MUST be the last message element in the message ๐Ÿซง the MIC gets computed over the complete LWAPP packet, starting at the LWAPP control header defined in Section 4.2.1 and running to the end of the packet (which MUST be this PSK-MIC message element). The MIC field in this message element and the Sequence Number field in the LWAPP control header MUST be set to zeroes before the MIC gets computed. The length field in the LWAPP control header must already include this message element before the MIC is computed.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       SPI       |                    MIC ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 109 for PSK-MIC

Length: > 1

SPI: the Security Parameter Index (SPI) field specifies the cryptographic algorithm used to create the message integrity check. These values are supported:

  • 0 - Unused
  • 1 - HMAC-SHA-1 (RFC 2104 [15])

MIC: a 20-octet Message Integrity Check.


6.3. Join ACK

The Join ACK message is sent by the WTP after it gets a Join Response with a valid PSK-MIC message element ๐Ÿค it's how the WTP gives the AC key confirmation. The Join ACK is only used when the WTP uses the pre-shared key LWAPP mode (see Section 10 for more information).

Note that the AC should never receive this message unless the security method used between the WTP and the AC is pre-shared-secret-based ๐Ÿ™ˆ

The following subsections define the message elements that MUST be included in this LWAPP operation ๐Ÿ‘‘

6.3.1. Session ID

The Session ID message element is defined in Section 6.1.7.

6.3.2. WNonce

The WNonce message element is sent by a WTP during the join or rekey phase ๐ŸŒธ the contents of the ANonce are encrypted as described in Section 10 for more information.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Nonce                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Nonce                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Nonce                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Nonce                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 107 for WNonce

Length: 16

Nonce: an encrypted, 16-octet random nonce.

6.3.3. PSK-MIC

The PSK-MIC message element is defined in Section 6.2.9.

6.4. Join Confirm ๐Ÿ’–

okay so the Join Confirm is sent by the AC after it gets a Join ACK that has a valid PSK-MIC message element. It's basically the AC saying "yep, I've got your key too" ๐Ÿ” so the WTP gets key confirmation. Bestie, this one is ONLY used when the WTP is using the pre-shared key LWAPP mode (see Section 10 for more info) ๐ŸŽ€

If the security method is pre-shared-key-based, the WTP enters the Joined state once it receives a Join Confirm. From there it can send a Configure Request or Image Data to the AC it's now joined to โœจ Also, the second it enters Joined, it starts a timer for NeighborDeadInterval. When that timer runs out, it sends an Echo Request ๐Ÿฆ‹

This message is never received, or sent, when the security type between the WTP and the AC is certificate-based. So if you're in cert land, this one just isn't your vibe ๐Ÿ™ˆ

The following subsections define the message elements that MUST be included in this LWAPP operation. Iconic, right? ๐Ÿ‘‘

6.4.1. Session ID ๐Ÿงš

The Session ID message element is defined in Section 6.1.7.

6.4.2. PSK-MIC ๐ŸŒˆ

The PSK-MIC message element is defined in Section 6.2.9.

6.5. Echo Request ๐Ÿ“

The Echo Request is a keepalive for the LWAPP control message. Basically it's the "are you still there?" text ๐Ÿ“ฑ

WTPs in the Run state (see Figure 2) send these regularly to check how the connection between the WTP and the AC is doing ๐Ÿ’œ The WTP sends one when the Heartbeat timer expires, and it MUST start its NeighborDeadInterval timer. Main character timing โญ

The Echo Request carries no message elements. Zero extras, zero drama ๐Ÿ’…

When an AC gets an Echo Request, it replies with an Echo Response ๐Ÿซถ

6.6. Echo Response ๐ŸŒธ

The Echo Response is the "got it, bestie" reply to an Echo Request, and it's only accepted while the device is in the Run state (see Figure 2) โœจ

The AC sends these after it receives an Echo Request. After it sends the Echo Response, the AC should reset its Heartbeat timer to expire at the value configured for EchoInterval. If the AC doesn't get another Echo Request before that timer runs out, the AC SHOULD consider the WTP to no longer be reachable. Ghosted ๐Ÿ’€

The Echo Response carries no message elements. Again, no extras ๐Ÿ™ˆ

When a WTP gets an Echo Response, it stops its NeighborDeadInterval timer and starts the Heartbeat timer at EchoInterval. Reset and repeat ๐Ÿ”

If the NeighborDeadInterval timer expires before the WTP gets an Echo Response, the WTP enters the Idle state. ๐Ÿ˜ญ

6.7. Key Update Request ๐Ÿ”‘

The Key Update Request is how the WTP starts the rekeying phase. A WTP sends it while in the Run state, and it MUST include a new unique Session Identifier. It also MUST include a unique nonce in the XNonce message element, which protects against replay attacks (see Section 10). Replay attacks are NOT it, bestie ๐Ÿ›ก๏ธ

The following subsections define the message elements that MUST be included in this LWAPP operation. ๐Ÿ’–

6.7.1. Session ID ๐Ÿงš

The Session ID message element is defined in Section 6.1.7.

6.7.2. XNonce ๐ŸŒˆ

The XNonce message element is defined in Section 6.1.9.

6.8. Key Update Response ๐Ÿฆ‹

The Key Update Response is the AC's answer to the Key Update Request. It includes an encrypted ANonce, which is used to derive new session keys โœจ This message MUST include a Session Identifier message element, and its value MUST be identical to the one in the Key Update Request. Matching outfits only ๐Ÿ‘—

The AC MUST include a PSK-MIC message element, which gives integrity over the whole message ๐Ÿ”

The following subsections define the message elements that MUST be included in this LWAPP operation. ๐ŸŽ€

6.8.1. Session ID ๐Ÿงš

The Session ID message element is defined in Section 6.1.7.

6.8.2. ANonce ๐ŸŒธ

The ANonce message element is defined in Section 6.2.8.

6.8.3. PSK-MIC ๐ŸŒˆ

The PSK-MIC message element is defined in Section 6.2.9.

6.9. Key Update ACK ๐Ÿ‘‘

The Key Update ACK is sent by the WTP and includes an encrypted version of the WTP's nonce, which goes into the key derivation process. The session keys that come out of that are then used as the new LWAPP control message encryption keys (see Section 10) ๐Ÿ—๏ธ

The WTP MUST include a PSK-MIC message element, which gives integrity over the whole message ๐Ÿ’œ

The following subsections define the message elements that MUST be included in this LWAPP operation. โœจ

6.9.1. WNonce ๐Ÿ“

The WNonce message element is defined in Section 6.3.2.

6.9.2. PSK-MIC ๐ŸŒˆ

The PSK-MIC message element is defined in Section 6.2.9.

6.10. Key Update Confirm ๐Ÿ’…

The Key Update Confirm closes the rekeying loop. It lets the WTP know that the AC got and processed the Key Update messages ๐Ÿซถ At this point the WTP updates its session key in its crypto engine, along with the associated Initialization Vector. From then on, every future LWAPP control frame is encrypted with the newly derived key. Fresh key, fresh start ๐Ÿฆ‹

The WTP MUST include a PSK-MIC message element, which gives integrity over the whole message ๐Ÿ”

The following subsections define the message elements that MUST be included in this LWAPP operation. ๐ŸŽ€

6.10.1. PSK-MIC ๐ŸŒˆ

The PSK-MIC message element is defined in Section 6.2.9.

6.11. Key Update Trigger ๐Ÿงš

The Key Update Trigger is how the AC asks the WTP to start a Key Update Request โœจ ACs in the Run state send these to tell the WTP to initiate a Key Update Request message. When a WTP gets one, it generates a Key Update Request. So the AC hits the button, the WTP does the rekeying ๐Ÿ’–

The following subsections define the message elements that MUST be included in this LWAPP operation. ๐Ÿ’œ

6.11.1. Session ID ๐Ÿงš

The Session ID message element is defined in Section 6.1.7.

7. WTP Configuration Management ๐ŸŽ€

The Wireless Termination Point Configuration messages are how the AC and the WTP swap configuration with each other ๐ŸŒธ

7.1. Configuration Consistency ๐ŸŒˆ

LWAPP is flexible about how WTP configuration gets managed. Simply put, a WTP has one of two options:

  1. The WTP retains no configuration and simply abides by the configuration provided by the AC.
  2. The WTP retains the configuration of parameters provided by the AC that are non-default values.

If the WTP decides to save configuration locally, the LWAPP protocol state machine defines the "Configure" state. It's used during the initial binding WTP-AC phase, which is when the configuration exchange happens ๐Ÿฆ‹ During this period, the WTP sends its current configuration overrides to the AC via the Configure Request message. A configuration override is just a parameter that isn't set to its default. For example, the default antenna configuration in LWAPP is an internal-omni antenna. But a WTP that has no internal antennas, or that's been explicitely configured by the AC to use external antennas, would send its antenna configuration during the configure phase. That way the AC knows what the WTP is really working with ๐Ÿ“ก

Once the WTP has given its configuration to the AC, the AC sends down its own configuration. This lets the WTP inherit the configuration and policies on the AC ๐Ÿ‘‘

An LWAPP AC keeps a copy of each active WTP's configuration. There's no need for versioning or any other way to spot configuration changes ๐Ÿ™Œ If a WTP becomes inactive, the AC MAY delete the configuration associated with it. And if a WTP fails and connects to a new AC, it provides its overridden configuration parameters, so the new AC knows the WTP's setup ๐Ÿงš

This model gives you resiliency. If an AC fails, another AC can keep serving the WTP. The new AC gets automatically updated on any WTP configuration changes, which means no Inter-AC communication is needed, and not every AC has to know the configuration of every WTP in the network. Big brain energy ๐Ÿง โœจ

Once the LWAPP protocol enters the Run state, the WTPs start providing service. But admins often need to make configuration changes while the network is running ๐Ÿ’… So the AC sends a Configuration Update Request to the WTP to make those changes at run-time.

7.2. Configure Request ๐Ÿ“

The Configure Request is how a WTP sends its current configuration up to its AC ๐Ÿ“ค

WTPs send Configure Requests after they get a Join Response, while they're in the Configure state โœจ

The Configure Request carries binding-specific message elements. Check the appropriate binding for how that structure is defined ๐Ÿฆ‹

When an AC gets a Configure Request, it acts on what's in the packet and replies to the WTP with a Configure Response ๐Ÿ’Œ

The Configure Request includes multiple Administrative State message elements. There's one for the WTP, and then one for each radio in the WTP ๐Ÿ“ป

The following subsections define the message elements that MUST be included in this LWAPP operation. ๐ŸŽ€

7.2.1. Administrative State ๐Ÿ’œ

The Administrative Event message element is used to communicate the state of a particular radio ๐Ÿ“ถ Its value has these fields:

    0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |  Admin State  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 27 for Administrative State
  • Length: 2
  • Radio ID: an 8-bit value for the radio being configured. The Radio ID field can also be 0xff, which identifies the WTP itself. So if an AC wants to change the administrative state of a WTP, it puts 0xff in the Radio ID field ๐ŸŒธ
  • Admin State: an 8-bit value for the administrative state of the radio. These values are supported:
    • 1 - Enabled โœ…
    • 2 - Disabled ๐Ÿšซ

7.2.2. AC Name ๐Ÿงš

The AC Name message element is defined in Section 5.2.3.

7.2.3. AC Name with Index ๐ŸŒˆ

The AC Name with Index message element is sent by the AC to the WTP to configure preferred ACs. This element shows up once for each AC configured on the WTP ๐Ÿ’–

    0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Index     |   AC Name...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 90 for AC Name with Index
  • Length: 5
  • Index: the index of the preferred server (e.g., 1=primary, 2=secondary) ๐Ÿ‘‘
  • AC Name: a variable-length ASCII string containing the AC's name ๐Ÿซถ

7.2.4. WTP Board Data โœจ

okay so the WTP Board Data element is the WTP spilling all the tea about its hardware to the AC ๐Ÿ’… it's giving full spec sheet energy ๐Ÿ”ฅ

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Card ID            |         Card Revision         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          WTP Model                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          WTP Model                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      WTP Serial Number ...                    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Reserved                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Ethernet MAC Address                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Ethernet MAC Address     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 50 for WTP Board Data
  • Length: 26
  • Card ID: a hardware identifier ๐Ÿชช
  • Card Revision: a 4-byte revision of the card ๐ŸŽ€
  • WTP Model: an 8-byte WTP Model Number ๐Ÿงš
  • WTP Serial Number: a 24-byte WTP Serial Number ๐Ÿ”ข
  • Reserved: a 4-byte reserved field that MUST be set to zero (0) ๐Ÿ”’
  • Ethernet MAC Address: the MAC address of the WTP's Ethernet interface ๐ŸŒธ

7.2.5. Statistics Timer ๐Ÿ“Š

the Statistics Timer element is how the AC tells the WTP how often it wants to hear updated stats. like, "send me the numbers this often, bestie" ๐Ÿซถ

       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |        Statistics Timer       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 37 for Statistics Timer
  • Length: 2
  • Statistics Timer: a 16-bit unsigned integer for the time, in seconds โฑ๏ธ

7.2.6. WTP Static IP Address Information ๐ŸŒ

the AC uses this element to set up, or clear, a static IP address that was set up before on a WTP. so iconic when it's all planned out ๐Ÿฆ‹

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          IP Address                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                            Netmask                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                            Gateway                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Static     |
      +-+-+-+-+-+-+-+-+
  • Type: 82 for WTP Static IP Address Information
  • Length: 13
  • IP Address: the IP address to assign to the WTP
  • Netmask: the IP Netmask
  • Gateway: the IP address of the gateway
  • Netmask: the IP Netmask
  • Static: an 8-bit Boolean that says whether or not the WTP should use a static IP address. a value of zero disables the static IP address, and a value of one enables it ๐Ÿ”

7.2.7. WTP Reboot Statistics ๐Ÿ”„

the WTP sends this element to the AC to explain why it has rebooted. it's the reboot diary, and it's giving drama ๐ŸŽญ

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Crash Count          |     LWAPP Initiated Count     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Link Failure Count       | Failure Type  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 67 for WTP Reboot Statistics
  • Length: 7
  • Crash Count: the number of reboots that have happened because of a WTP crash ๐Ÿ’€
  • LWAPP Initiated Count: the number of reboots that happened because of some LWAPP message, like a configuration change that needed a reboot or an explicit LWAPP reset request ๐Ÿ™ˆ
  • Link Failure Count: the number of times an LWAPP connection with an AC has failed ๐Ÿ“‰
  • Failure Type: the last WTP failure. these values are supported:
    • 0 - Link Failure
    • 1 - LWAPP Initiated
    • 2 - WTP Crash

7.3. Configure Response ๐Ÿ“จ

the Configure Response message is sent by an AC, and it's the AC's chance to override the config the WTP asked for. the AC has the final say, periodt ๐Ÿ‘‘

Configure Responses are sent by an AC after it receives a Configure Request.

the Configure Response carries binding-specific message elements. go check the right binding for how that structure is defined ๐Ÿงฉ

when a WTP receives a Configure Response, it acts on the content of the packet, as appropriate. if the Configure Response has a Change State Event message element that changes the operational state of one of the Radios, the WTP will send a Change State Event back to the AC to confirm the state change โœ…

the following subsections define the message elements that MUST be included in this LWAPP operation. no skipping, bestie ๐Ÿšซ

7.3.1. Decryption Error Report Period ๐Ÿ”

the AC uses this value to tell the WTP how often it should send decryption error report messages.

       0                   1                   2
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Radio ID    |        Report Interval        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 38 for Decryption Error Report Period
  • Length: 3
  • Radio ID: the Radio Identifier. it typically refers to some interface index on the WTP ๐Ÿ“ก
  • Report Interval: a 16-bit unsigned integer for the time, in seconds โณ

7.3.2. Change State Event ๐Ÿ”€

the WTP Radio Information message element is used to communicate the operational state of a radio. the value has two fields, like this ๐Ÿ‘‡

       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Radio ID    |     State     |     Cause     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 26 for Change State Event
  • Length: 3
  • Radio ID: the Radio Identifier. it typically refers to some interface index on the WTP ๐Ÿ“ก
  • State: an 8-bit Boolean for the state of the radio. a value of one disables the radio, and a value of two enables it ๐Ÿ”›
  • Cause: if a radio is inoperable, the Cause field holds the reason it's out of service. these values are supported:
    • 0 - Normal
    • 1 - Radio Failure
    • 2 - Software Failure

7.3.3. LWAPP Timers โฒ๏ธ

the AC uses the LWAPP Timers element to set up LWAPP timers on a WTP.

       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Discovery   | Echo Request  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 68 for LWAPP Timers
  • Length: 2
  • Discovery: the number of seconds between LWAPP Discovery packets when the WTP is in discovery mode ๐Ÿ”
  • Echo Request: the number of seconds between WTP Echo Request LWAPP messages ๐Ÿ“

7.3.4. AC IPv4 List ๐Ÿ“‹

the AC List message element is defined in Section 6.2.6. same tea, different cup โ˜•

7.3.5. AC IPv6 List ๐Ÿ“‹

the AC List message element is defined in Section 6.2.7. it's the IPv6 version of that same vibe ๐ŸŒˆ

7.3.6. WTP Fallback ๐Ÿ›Ÿ

the AC sends the WTP Fallback element to the WTP to turn automatic LWAPP fallback on or off. this matters when a WTP notices that its preferred AC is available, and it's not connected to that AC right now ๐Ÿงญ

       0
       0 1 2 3 4 5 6 7
      +-+-+-+-+-+-+-+-+
      |     Mode      |
      +-+-+-+-+-+-+-+-+
  • Type: 91 for WTP Fallback
  • Length: 1
  • Mode: an 8-bit Boolean for the status of automatic LWAPP fallback on the WTP. a value of zero disables the fallback feature, and a value of one enables it. when it's enabled and the WTP sees that its primary AC is available but isn't connected to it, the WTP SHOULD automatically disconnect from its current AC and reconnect to its primary ๐Ÿ”„ when it's disabled, the WTP only goes back to its primary through manual intervention, like the Reset Request command ๐Ÿ› ๏ธ
the big takeaway here: with fallback on, the WTP SHOULD hop back to its primary AC on its own. with fallback off, it needs a human to step in ๐Ÿ™‹โ€โ™€๏ธ

7.3.7. Idle Timeout โŒ›

the AC sends the Idle Timeout element to the WTP to give it the idle timeout it should enforce on its active mobile station entries. timeouts with boundaries, iconic ๐Ÿงฑ

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                            Timeout                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 97 for Idle Timeout
  • Length: 4
  • Timeout: the current idle timeout the WTP has to enforce โฐ

7.4. Configuration Update Request ๐Ÿ›Ž๏ธ

Configure Update Requests are sent by the AC to provision the WTP while it's in the Run state. it's how the AC edits the config while the WTP is already live and running ๐Ÿƒโ€โ™€๏ธ

when an AC receives a Configuration Update Request, it responds with a Configuration Update Response, with the right Result Code ๐Ÿ“ฌ

the following subsections define the message elements introduced by this LWAPP operation.

7.4.1. WTP Name ๐Ÿท๏ธ

the WTP Name message element is defined in Section 6.1.3.

7.4.2. Change State Event ๐Ÿ”€

the Change State Event message element is defined in Section 7.3.2.

7.4.3. Administrative State ๐Ÿšฆ

the Administrative State message element is defined in Section 7.2.1.

7.4.4. Statistics Timer ๐Ÿ“Š

the Statistics Timer message element is defined in Section 7.2.5.

7.4.5. Location Data ๐Ÿ“

the Location Data message element is defined in Section 6.1.4.

7.4.6. Decryption Error Report Period ๐Ÿ”

the Decryption Error Report Period message element is defined in Section 7.3.1.

7.4.7. AC IPv4 List ๐Ÿ“‹

the AC List message element is defined in Section 6.2.6.

7.4.8. AC IPv6 List ๐Ÿ“‹

the AC List message element is defined in Section 6.2.7.

7.4.9. Add Blacklist Entry ๐Ÿšซ

the AC uses the Add Blacklist Entry message element to add a blacklist entry on a WTP. this makes sure the WTP stops giving any service to the MAC addresses in the message. the MAC addresses here aren't expected to be saved in non-volatile memory on the WTP ๐Ÿง 

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Num of Entries|                 MAC Address[]                 |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                 MAC Address[]                 |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 65 for Add Blacklist Entry
  • Length: >= 7
  • Num of Entries: the number of MAC addresses in the array ๐Ÿ”ข
  • MAC Address: an array of MAC addresses to add to the blacklist entry ๐Ÿ™…โ€โ™€๏ธ

7.4.10. Delete Blacklist Entry ๐Ÿงน

okay so the Delete Blacklist Entry message element is how an AC tells a WTP to remove a blacklist entry it added earlier ๐Ÿซถ. Once it's gone, the WTP goes back to serving the MAC addresses listed in the message โœจ.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Num of Entries|                 MAC Address[]                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 MAC Address[]                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 66 for Delete Blacklist Entry
  • Length: >= 7
  • Num of Entries: the number of MAC addresses in the array.
  • MAC Address: an array of MAC addresses to delete from the blacklist entry.

7.4.11. Add Static Blacklist Entry ๐Ÿ’œ

The Add Static Blacklist Entry message element is the "forever" version of blacklisting ๐Ÿ’€. An AC uses it to add a permanent blacklist entry on a WTP, so the WTP stops giving any service to the listed MAC addresses. The MAC addresses sent here are expected to be saved in non-volative memory on the WTP ๐Ÿ’พ.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Num of Entries|                 MAC Address[]                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 MAC Address[]                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 70 for Delete Blacklist Entry
  • Length: >= 7
  • Num of Entries: the number of MAC addresses in the array.
  • MAC Address: an array of MAC addresses to add to the permanent blacklist entry.

7.4.12. Delete Static Blacklist Entry ๐Ÿ—‘๏ธ

This is the undo button for the static version โœจ. An AC uses the Delete Static Blacklist Entry message element to remove a static blacklist entry it previously added on a WTP, so the WTP provides service to the MAC addresses in the message again ๐ŸŒธ.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Num of Entries|                 MAC Address[]                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 MAC Address[]                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 71 for Delete Blacklist Entry
  • Length: >= 7
  • Num of Entries: the number of MAC addresses in the array.
  • MAC Address: an array of MAC addresses to delete from the static blacklist entry.

7.4.13. LWAPP Timers โฐ

The LWAPP Timers message element is defined in Section 7.3.3.

7.4.14. AC Name with Index ๐Ÿท๏ธ

The AC Name with Index message element is defined in Section 7.2.3.

7.4.15. WTP Fallback ๐Ÿ”

The WTP Fallback message element is defined in Section 7.3.6.

7.4.16. Idle Timeout ๐Ÿ˜ด

The Idle Timeout message element is defined in Section 7.3.7.

7.5. Configuration Update Response ๐Ÿ’Œ

The Configuration Update Response is the acknowledgement message for the Configuration Update Request ๐Ÿซถ.

Configuration Update Responses are sent by a WTP after it receives a Configuration Update Request.

When an AC receives a Configure Update Response, the result code tells it whether the WTP successfully accepted the configuration ๐Ÿ‘‘.

The following subsections define the message elements that must be present in this LWAPP operation.

7.5.1. Result Code โœ…

The Result Code message element is defined in Section 6.2.1.

7.6. Change State Event Request ๐Ÿ””

The Change State Event is how the WTP tells the AC that its operational state has changed ๐Ÿฆ‹.

The Change State Event message is sent by the WTP when it receives a Configuration Response that includes a Change State Event message element. It is also sent when the WTP detects an operational failure with a radio ๐Ÿ“ก. The Change State Event may be sent in either the Configure or Run state (see Figure 2).

When an AC receives a Change State Event, it responds with a Change State Event Response and makes any necessary modifications to its internal WTP data structures ๐Ÿง .

The following subsections define the message elements that must be present in this LWAPP operation.

7.6.1. Change State Event ๐Ÿ”„

The Change State Event message element is defined in Section 7.3.2.

7.7. Change State Event Response ๐Ÿ™

The Change State Event Response is the acknowledgement for the Change State Event ๐Ÿ’–.

Change State Event Responses are sent by a WTP after it receives a Change State Event.

The Change State Event Response carries no message elements. Its only job is to acknowledge that the Change State Event arrived ๐Ÿซง.

The WTP does not need to do any special processing of the Change State Event Response message ๐Ÿ˜Œ.

7.8. Clear Config Indication ๐Ÿงผ

The Clear Config Indication is used to reset a WTP's configuration back to factory ๐ŸŒˆ.

The Clear Config Indication is sent by an AC to ask a WTP to reset its configuration to manufacturing defaults. The Clear Config Indication message is sent while in the Run LWAPP state.

The Reset Request carries no message elements.

When a WTP receives a Clear Config Indication, it resets its configuration to manufacturing defaults ๐Ÿ’….

8. Device Management Operations ๐Ÿ› ๏ธ

This section defines the LWAPP operations for debugging, gathering statistics, logging, and firmware management ๐Ÿ“Š.

8.1. Image Data Request ๐Ÿ’พ

The Image Data Request is used to update firmware on the WTP ๐Ÿ”ฅ. This message and its companion response are used by the AC to make sure the image running on each WTP is the right one โœจ.

Image Data Requests are exchanged between the WTP and the AC to download a new program image to a WTP.

When a WTP or AC receives an Image Data Request, it responds with an Image Data Response.

The format of the Image Data and Image Download message elements is described in the following subsections.

8.1.1. Image Download ๐Ÿ“ฅ

The Image Download message element is sent by the WTP to the AC and contains the image filename. The value is a variable-length byte string. The string is not zero terminated ๐Ÿ™ˆ.

8.1.2. Image Data ๐Ÿ–ผ๏ธ

The Image Data message element is present when it is sent by the AC and contains the following fields.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Opcode    |           Checksum            |  Image Data   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Image Data ...                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 33 for Image Data
  • Length: >= 5
  • Opcode: an 8-bit value representing the transfer opcode. The following values are supported:
    • 3 - Image Data is included.
    • 5 - An error occurred. Transfer is aborted.
  • Checksum: a 16-bit value containing a checksum of the Image Data that follows.
  • Image Data: the Image Data field contains 1024 characters, unless the payload being sent is the last one (end of file).

8.2. Image Data Response ๐Ÿ‘

The Image Data Response acknowledges the Image Data Request ๐Ÿ’–.

An Image Data Response is sent in response to an Image Data Request. Its purpose is to acknowledge that the Image Data Request packet was received.

The Image Data Response carries no message elements.

No action is necessary on receipt ๐Ÿ˜Ž.

8.3. Reset Request ๐Ÿ”„

The Reset Request is used to cause a WTP to reboot ๐ŸŒ€.

Reset Requests are sent by an AC to cause a WTP to reinitialize its operation.

The Reset Request carries no message elements.

When a WTP receives a Reset Request, it responds with a Reset Response and then reinitializes itself โœจ.

8.4. Reset Response ๐Ÿซก

The Reset Response acknowledges the Reset Request ๐ŸŒท.

Reset Responses are sent by a WTP after it receives a Reset Request.

The Reset Response carries no message elements. Its purpose is to acknowledge that the Reset Request was received.

When an AC receives a Reset Response, it is notified that the WTP will now reinitialize its operation ๐ŸŽ€.

8.5. WTP Event Request ๐Ÿ“ฃ

The WTP Event Request is how a WTP sends information up to its AC ๐Ÿ’Œ. These events may be periodic, or they may be some asynchronous event on the WTP. For instance, a WTP collects statistics and uses the WTP Event Request to transmit this information to the AC ๐Ÿ“ˆ.

When an AC receives a WTP Event Request, it responds with a WTP Event Request.

The WTP Event Request message MUST contain one of the following message elements described in the next subsections, or a message element that is defined for a specific technology.

8.5.1. Decryption Error Report ๐Ÿ”

The Decryption Error Report message element is used by the WTP to tell the AC about decryption errors that have happened since the last report ๐Ÿ•ต๏ธโ€โ™€๏ธ.

    0                   1                   2
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Radio ID    |Num Of Entries |      Mobile MAC Address       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Mobile MAC Address[]                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 39 for Decryption Error Report
  • Length: >= 8
  • Radio ID: the Radio Identifier, which typically refers to some interface index on the WTP.
  • Num Of Entries: an 8-bit unsigned integer indicating the number of mobile MAC addresses.
  • Mobile MAC Address: an array of mobile station MAC addresses that have caused decryption errors.

8.5.2. Duplicate IPv4 Address ๐Ÿ‘ฏ

The Duplicate IPv4 Address message element is used by a WTP to tell an AC that it has spotted another host using the same IP address the WTP is currently using ๐Ÿšจ.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          IP Address                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          MAC Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          MAC Address          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 77 for Duplicate IPv4 Address
  • Length: 10
  • IP Address: the IP address currently used by the WTP.
  • MAC Address: the MAC address of the offending device.

8.5.3. Duplicate IPv6 Address ๐Ÿฆ‹

Okay bestie, this one is for when a WTP spots another host using the same IP address it's already using. ๐Ÿ˜ญ The WTP uses this message element to tell an AC about it. Iconic behavior honestly ๐Ÿ’…

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          IP Address                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          IP Address                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          IP Address                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          IP Address                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          MAC Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          MAC Address          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 77 for Duplicate IPv6 Address โœจ
  • Length: 10
  • IP Address: The IP address currently used by the WTP. ๐ŸŒธ
  • MAC Address: The MAC address of the offending device. ๐Ÿ™ˆ

8.6. WTP Event Response ๐ŸŽ€

The WTP Event Response is the acknowledgment for the WTP Event Request. Basically it's the "got it" text. ๐Ÿ’–

WTP Event Responses are sent by an AC after it receives a WTP Event Request. ๐Ÿงš

The WTP Event Response carries no message elements. Zero extras, very minimalist, very main character ๐Ÿ–ค

8.7. Data Transfer Request ๐Ÿ“

The Data Transfer Request is how the WTP uploads debug info to the AC. Lowkey the debugging pipeline ๐Ÿ”ฅ

WTP sends these to the AC when it decides it has something important to share. For example, if the WTP notices its last reboot was caused by a system crash, it's gonna want to send the crash file to the AC. ๐Ÿ’€ The remote debugger in the WTP also uses the Data Transfer Request to send console output to the AC for debugging. โœจ

When an AC gets a Data Transfer Request, it responds with a Data Transfer Response. The AC may log the information it receives however it likes. ๐Ÿซถ

The Data Transfer Request message MUST contain ONE of the following message elements, described in the next subsection. Not optional bestie, you need one of these!! ๐Ÿ‘‘

8.7.1. Data Transfer Mode ๐Ÿ’œ

The Data Transfer Mode message element is how the AC asks the WTP for debugging info. ๐Ÿฆ‹

    0
    0 1 2 3 4 5 6 7
   +-+-+-+-+-+-+-+-+
   |   Data  Type   |
   +-+-+-+-+-+-+-+-+
  • Type: 52 for Data Transfer Mode
  • Length: 1
  • Data Type: An 8-bit value describing the type of information being requested. The following values are supported:
    • 1 - WTP Crash Data ๐Ÿ’ฅ
    • 2 - WTP Memory Dump ๐Ÿง 

8.7.2. Data Transfer Data ๐ŸŒˆ

The Data Transfer Data message element is how the WTP sends info to the AC for debugging. ๐ŸŽ€

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Data Type   |  Data Length  |    Data ....
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 53 for Data Transfer Data
  • Length: >= 3
  • Data Type: An 8-bit value describing the type of information being sent. The following values are supported:
    • 1 - WTP Crash Data ๐Ÿ’ฅ
    • 2 - WTP Memory Dump ๐Ÿง 
  • Data Length: Length of the data field. ๐Ÿ“
  • Data: Debug information. ๐Ÿ”

8.8. Data Transfer Response ๐ŸŒท

The Data Transfer Response acknowledges the Data Transfer Request. โœ…

A Data Transfer Response is sent in response to a Data Transfer Request. Its whole purpose is to confirm the AC got the Data Transfer Request packet. ๐Ÿซถ

The Data Transfer Response carries no message elements. Again, super chill. ๐Ÿ˜Œ

Once the WTP gets a Data Transfer Response, it sends more information if there's any left. Keep the pipeline flowing! ๐ŸŒŠ


9. Mobile Session Management ๐Ÿ“ฑ

Messages in this section are used by the AC to create, modify, or delete mobile station session state on the WTPs. Mobile sessions are giving "the AC is running the show" energy ๐Ÿ‘‘

9.1. Mobile Config Request ๐ŸŽŸ๏ธ

The Mobile Config Request message creates, modifies, or deletes mobile session state on a WTP. The AC sends it to the WTP, and it may contain one or more message elements. ๐Ÿ’ซ These elements are really technology-specific, so for their definitions please check the appropriate binding section or document. It's a whole other world bestie ๐ŸŒ

This section defines the format of the Delete Mobile message element, because it doesn't have any technology-specific info in it. ๐Ÿงพ

9.1.1. Delete Mobile ๐Ÿšช

The Delete Mobile message element is how the AC tells a WTP to stop providing service to a particular mobile station. The WTP must terminate service immediately upon receiving this message element. Immediately. No cap. ๐Ÿšจ

The Delete Mobile message element could be sent for lots of reasons, like administrative ones, or because the mobile has roamed over to another WTP, etc. ๐Ÿƒโ€โ™€๏ธ

Once access has been terminated for a given station, any future packets received from the mobile must result in a deauthenticate message, as specified in [6]. Not getting back in that easily ๐Ÿ™…โ€โ™€๏ธ

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |                  MAC Address                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  MAC Address                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 30 for Delete Mobile
  • Length: 7
  • Radio ID: An 8-bit value representing the radio ๐Ÿ“ก
  • MAC Address: The mobile station's MAC address ๐Ÿ“

9.2. Mobile Config Response ๐Ÿฉท

The Mobile Configuration Response acknowledges a Mobile Configuration Request that came in earlier. It includes a Result Code message element that tells you whether an error happened on the WTP. โš ๏ธ

This message doesn't need any special processing. It's only there to acknowledge the Mobile Configuration Request. Simple and sweet ๐Ÿฌ

The Data Transfer Request message MUST contain the message elements described in the next subsection. (Yes, the original text says Data Transfer Request here, so yes, that's what it says ๐Ÿ™ƒ)

9.2.1. Result Code ๐ŸŽฏ

The Result Code message element is defined in Section 6.2.1. Go check it out, it's right there ๐Ÿ’–


10. LWAPP Security ๐Ÿ”

Note: This version only defines a certificate and a shared-secret-based mechanism to secure control LWAPP traffic exchanged between the WTP and the AC. Security goals unlocked ๐Ÿ—๏ธ

10.1. Securing WTP-AC Communications ๐Ÿ›ก๏ธ

It's pretty straightforward to set up network installs where the communications medium between the WTP and AC isn't accessible to casual users. For example, the LAN segments can be isolated, with no RJ45 or other access ports between the WTP and the AC. But this won't always be the case. ๐Ÿ™ˆ Plus, a determined attacker might use more sophisticated monitoring and/or access techniques, which could compromise the integrity of this connection. ๐Ÿ˜ฑ

In general, a certain level of threat on the local (wired) LAN is expected and accepted in most computing environments. In other words, to give users an acceptable level of service and keep productivity reasonable, a certain amount of risk has to be tolerated. It's generally believed that a certain perimeter is kept around these LANs, that an attacker has to get into the buildings where the LANs live, and that they have to be able to "plug in" to the LAN to access the network. ๐Ÿข

With all that in mind, we can start figuring out the general security requirements for AC-WTP communications. An in-depth security analysis of threats and risks to these communications is beyond the scope of this document, but it's useful to talk about the motivation behind some security-related design choices. The assumptions driving the security design so far include the following: ๐Ÿง 

  • WTP-AC communications take place over a wired connection that may be accessible to a sophisticated attacker. ๐Ÿ•ต๏ธโ€โ™€๏ธ
  • Access to this connection is not trivial for an outsider (i.e., someone who does not "belong" in the building) to get. ๐Ÿšซ
  • If authentication and/or privacy of end-to-end traffic for which the WTP and AC are intermediaries is required, this may be provided via IPsec [14]. ๐Ÿ”‘
  • Privacy and authentication for at least some WTP-AC control traffic is required (e.g., Wired Equivalent Privacy (WEP) keys for user sessions, passed from the AC to the WTP). ๐ŸŽ€
  • The AC can be trusted to generate strong cryptographic keys. ๐Ÿ’ช

The AC-WTP traffic can be split into two types: data traffic (e.g., to or from an end user), and control traffic, which is strictly between the AC and WTP. Since data traffic may be secured using IPsec (or some other end-to-end security mechanism), we keep our solution focused on control traffic. ๐ŸŽฏ The resulting security has two parts: an authenticated key exchange and control traffic security encapsulation. The encapsulation is done with AES-CCM, described in [3]. It provides strong AES-based authentication and encryption [2]. How the CCM keys get exchanged is described below. ๐Ÿ”

10.2. LWAPP Frame Encryption ๐Ÿง

LWAPP uses AES-CCM to encrypt control traffic, but it's important to note that not all control frames are encrypted. โš ๏ธ The LWAPP discovery and join phase are not encrypted. Discovery messages go out in the clear, since there isn't a security association between the WTP and the AC yet during discovery. The join phase is an authenticated exchange used to negotiate symmetric session keys (see Section 10.3). ๐Ÿค

Once the join phase has finished successfully, the LWAPP state machine (Figure 2) moves to the Configure state. At that point, all LWAPP control frames are encrypted using AES-CCM. ๐Ÿ”’

Encryption of a control message starts at the Message Element field. That means the Msg Type, Seq Num, Msg Element Length, and Session ID fields are left intact (see Section 4.2.1). ๐Ÿงฉ

The AES-CCM 12-byte authentication data gets appended to the end of the message. It's calculated from the start of the LWAPP packet and includes the complete LWAPP control header (see Section 4.2.1). ๐Ÿชก

The AES-CCM block cipher protocol needs an initialization vector. The LWAPP protocol requires that the WTP and the AC maintain two separate IVs, one for transmission and one for reception. The IV derived during the key exchange phase by both the WTP and the AC is used as the base for all encrypted packets with a new key. ๐Ÿ”‘โœจ

10.3. Authenticated Key Exchange ๐Ÿค๐Ÿ’œ

This section describes the key management component of the LWAPP protocol. There are two modes supported by LWAPP: certificate and pre-shared key. Two modes, both very cute, which one you pick depends on the vibe ๐ŸŽ€

10.3.1. Terminology ๐ŸŽ€

Okay so this bit is where the key management protocol gets its pre-shared secret glow-up ๐Ÿ’… Here's the vocab list you need to vibe with it:

  • PSK - the pre-shared key shared between the WTP and the AC.
  • Kpriv - the private key of a public-private key pair.
  • Kpub - the public key of the pair.
  • SessionID - a randomly generated LWAPP session identifier, provided by the WTP in the Join Request.
  • E-x{Kpub, M} - RSA encryption of M using X's public key.
  • D-x{Kpriv, C} - RSA decryption of C using X's private key.
  • AES-CMAC(key, packet) - A message integrity check, using AES-CMAC and key, of the complete LWAPP packet, with the Sequence Number field and the payload of the PSK-MIC message element set to zero.
  • AES-E(key, plaintext) - Plaintext is encrypted with key, using AES.
  • AES-D(key, ciphertext) - ciphertext is decrypted with key, using AES.
  • Certificate-AC - AC's Certificate.
  • Certificate-WTP - WTP's Certificate.
  • WTP-MAC - The WTP's MAC address.
  • AC-MAC - The AC's MAC address.
  • RK0 - the root key, which is created through a Key Derivation Function (KDF) function.
  • RK0E - the root Encryption key, derived from RK0.
  • RK0M - the root MIC key, derived from RK0.
  • SK1 - the session key.
  • SK1C - the session confirmation key, derived from SK.
  • SK1E - the session encryption key, derived from SK.
  • SK1W - the session keywrap key, derived from SK (see RFC 3394 [9]).
  • WNonce - The WTP's randomly generated nonce.
  • ANonce - The AC's randomly generated nonce.
  • EWNonce - The payload of the WNonce message element, which includes the WNonce.
  • EANonce - The payload of the ANonce message element, which includes the ANonce.

10.3.2. Initial Key Generation โœจ

Here's where the AC and WTP become besties ๐Ÿซถ They do mutual authentication and a cryptographic key exchange in a dual round trip using the Join Request, Join Response, Join ACK, and Join Confirm (see Section 6.1).

The following text walks through the exchange between the WTP and the AC that creates a session key, which is what keeps the LWAPP control messages secure ๐Ÿ”

  • The WTP creates a Join Request using the following process:
    • If certificate-based security is used, the WTP adds the Certificate message element (see Section 6.1.6) with its contents set to Certificate-WTP.
    • The WTP adds the Session ID message element (see Section 6.1.7) with the contents set to a randomly generated session identifier (see RFC 1750 [4]). The WTP MUST save the Session ID in order to validate the Join Response.
    • The WTP creates a random nonce, included in the XNonce message element (see Section 6.1.9). The WTP MUST save the XNonce to validate the Join Response.
    • The WTP transmits the Join Request to the AC.
  • Upon receiving the Join Request, the AC uses the following process:
    • The AC creates the Join Response, and ensures that the Session ID message element matches the value found in the Join Request.
    • If certificate-based security is used, the AC:
      • adds the Certificate-AC to the Certificate message element.
      • creates a random 'AC Nonce' and encrypts it using the following algorithm E-wtp(Kpub, XNonce XOR 'AC Nonce'). The encrypted contents are added to the ANonce's message element payload.
    • If a pre-shared-key-based security is used, the AC:
      • creates RK0 through the following algorithm: RK0 = KDF-256{PSK, "LWAPP PSK Top K0" || Session ID || WTP-MAC || AC-MAC}, where WTP-MAC is the WTP's MAC address in the form "xx:xx:xx:xx:xx:xx". Similarly, the AC-MAC is an ASCII encoding of the AC's MAC address, of the form "xx:xx:xx:xx:xx:xx". The resulting K0 is split into the following:
        • The first 16 octets are known as RK0E, and are used as an encryption key.
        • The second 16 octets are known as RK0M, and are used for MIC'ing purposes.
      • creates a random 'AC Nonce' and encrypts it using the following algorithm: AES-E(RK0E, XNonce XOR 'AC Nonce'). The encrypted contents are added to the ANonce's message element payload.
      • adds a MIC to the contents of the Join Response using AES-CMAC(RK0M, Join Response) and adds the resulting hash to the PSK-MIC (Section 6.2.9) message element.
  • Upon receiving the Join Response, the WTP uses the following process:
    • If a pre-shared key is used, the WTP authenticates the Join Response's PSK-MIC message element. If authentication fails, the packet is dropped.
    • The WTP decrypts the ANonce message element and XOR's the value with XNonce to retrieve the 'AC Nonce'. The ANonce payload is referred to as ciphertext below:
      • If a pre-shared key is used, use AES-D(RK0E, ciphertext). The 'AC Nonce' is then recovered using XNonce XOR plaintext.
      • If certificates are used, use d-wtp(Kpriv, ciphertext). The 'AC Nonce' is then recovered using XNonce XOR plaintext.
    • The WTP creates a random 'WTP Nonce'.
    • The WTP uses the KDF function to create a 64-octet session key (SK). The KDF function used is as follows: KDF-512{'WTP Nonce' || 'AC Nonce', "LWAPP Key Generation", WTP-MAC || AC-MAC}. The KDF function is defined in [7].
    • SK is then broken down into three separate session keys with different purposes:
      • The first 16 octets are known as SK1C, and are used as a confirmation key.
      • The second 16 octets are known as SK1E, and are as the encryption key.
      • The third 16 octets are known as SK1D, and are used as the keywrap key.
      • The fourth 16 octets are known as IV, and are used as the Initialization Vector during encryption.
    • The WTP creates the Join ACK message.
    • If certificate-based security is used, the AC:
      • encrypts the 'WTP Nonce' using the following algorithm: E-ac(Kpub, 'WTP Nonce'). The encrypted contents are added to the WNonce's message element payload.
    • If a pre-shared-key-based security is used, the AC:
      • encrypts the 'WTP Nonce' using the following algorithm: AES-E(RK0E, 'WTP Nonce'). The encrypted contents are added to the WNonce's message element payload.
    • The WTP adds a MIC to the contents of the Join ACK using AES-CMAC(SK1M, Join ACK) and adds the resulting hash to the PSK-MIC (Section 6.2.9) message element.
    • The WTP then transmits the Join ACK to the AC.
  • Upon receiving the Join ACK, the AC uses the following process:
    • The AC authenticates the Join ACK through the PSK-MIC message element. If authentic, the AC decrypts the WNonce message element to retrieve the 'WTP Nonce'. If the Join ACK cannot be authenticated, the packet is dropped.
    • The AC decrypts the WNonce message element to retrieve the 'WTP Nonce'. The WNonce payload is referred to as ciphertext below:
      • If a pre-shared key is used, use AES-D(RK0E, ciphertext). The plaintext is then considered the 'WTP Nonce'.
      • If certificates are used, use d-ac(Kpriv, ciphertext). The plaintext is then considered the 'WTP Nonce'.
    • The AC then uses the KDF function to create a 64-octet session key (SK). The KDF function used is as follows: KDF-512{'WTP Nonce' || 'AC Nonce', "LWAPP Key Generation", WTP-MAC || AC-MAC}. The KDF function is defined in [7]. The SK is split into SK1C, SK1E, SK1D, and IV, as previously noted.
    • The AC creates the Join Confirm.
    • The AC adds a MIC to the contents of the Join Confirm using AES-CMAC(SK1M, Join Confirm) and adds the resulting hash to the MIC (Section 6.2.9) message element.
    • The AC then transmits the Join Confirm to the WTP.
  • Upon receiving the Join Confirm, the WTP uses the following process:
    • The WTP authenticates the Join Confirm through the PSK-MIC message element. If the Join Confirm cannot be authenticated, the packet is dropped.
  • SK1E is now plumbed into the AC and WTP's crypto engine as the AES-CCM LWAPP control encryption session key. Furthermore, the random IV is used as the base Initialization Vector. From this point on, all control protocol payloads between the WTP and AC are encrypted and authenticated using the new session key. ๐Ÿ”ฅ

10.3.3. Refreshing Cryptographic Keys ๐ŸŒธ

AC-WTP associations tend to be pretty long-lived, so it's sensible to periodically refresh the encryption and authentication keys ๐Ÿฆ‹ This is called "rekeying". When the key lifetime reaches 95% of the configured value, identified in the KeyLifetime timer (see Section 12), the rekeying proceeds as follows:

  • The WTP creates RK0 through the previously defined KDF algorithm: RK0 = KDF-256{SK1D, "LWAPP PSK Top K0" || Session ID || WTP-MAC || AC-MAC}. Note that the difference in this specific instance is that SK1D that was previously generated is used instead of the PSK. Note this is used in both the certificate and pre-shared key modes. The resulting RK0 creates RK0E, RK0M.
  • The remaining steps used are identical to the join process, with the exception that the rekey messages are used instead of join messages, and the fact that the messages are encrypted using the previously created SK1E. This means the Join Request is replaced with the Rekey Request, the Join Response is replaced with the Rekey Response, etc. The two differences between the rekey and the join process are:
    • The Certificate-WTP and Certificate-AC are not included in the Rekey-Request and Rekey-Response, respectively.
    • Regardless of whether certificates or pre-shared keys were used in the initial key derivation, the process now uses the pre-shared key mode only, using SK1D as the "PSK".
  • The Key Update Request is sent to the AC.
  • The newly created SK1E is now plumbed into the AC and WTP's crypto engine as the AES-CCM LWAPP control encryption session key. Furthermore, the new random IV is used as the base Initialization Vector. From this point on, all control protocol payloads between the WTP and AC are encrypted and authenticated using the new session key.

If either the WTP or the AC do not receive an expected response by the time the ResponseTimeout timer expires (see Section 12), the WTP MUST delete the new and old session information, and reset the state machine to the Idle state. ๐Ÿ˜ฑ

Following a rekey process, both the WTP and the AC keep the previous encryption for 5-10 seconds in order to be able to process packets that arrive out of order. โณ

10.4. Certificate Usage ๐ŸŽ€

okay so the AC and the WTP both have to validate each other's certificates, bestie, because that's how we make sure only an AC does AC things and only a WTP does WTP things ๐Ÿ”’. The certs used by the AC MUST be distinguishable from the cert used by the WTP. To make that happen, the x.509v3 certificates MUST include the Extensions field [10] and MUST include the NetscapeComment [11] extension ๐Ÿ’….

For an AC, the NetscapeComment extension MUST be the string "CAPWAP AC Device Certificate". For a WTP, it MUST be the string "CAPWAP WTP Device Certificate" โœจ.

Part of the LWAPP certificate validation is checking that the right string is in the NetscapeComment extension. The session only gets established if the extension doesn't claim the same role as the device doing the validating. So for example, a WTP MUST NOT accept a certificate whose NetscapeComment field is set to "CAPWAP WTP Device Certificate" ๐Ÿ™…โ€โ™€๏ธ๐Ÿ’€.


11. IEEE 802.11 Binding ๐Ÿฆ‹

this section is where we spell out the extra stuff LWAPP needs so it can work with IEEE 802.11 ๐ŸŒˆ.

11.1. Division of Labor ๐Ÿ“

when LWAPP is used with IEEE 802.11 devices, the WTP and the AC need to have very specific behavior, especially when it comes to which 802.11 protocol functions each one handles ๐Ÿงš.

For both the Split and Local MAC approaches, the CAPWAP functions (as defined in the taxonomy specification) live in the AC ๐Ÿ‘‘.

11.1.1. Split MAC ๐Ÿ’œ

this part shows who does what between the WTP and the AC in a Split MAC architecture. Figure 3 is basically a glow-up of how clearly the functions are separated across the LWAPP components โœจ.

    Function                               Location
        Distribution Service                      AC
        Integration Service                       AC
        Beacon Generation                         WTP
        Probe Response                            WTP
        Power Mgmt/Packet Buffering               WTP
        Fragmentation/Defragmentation             WTP
        Assoc/Disassoc/Reassoc                    AC

   802.11e
        Classifying                               AC
        Scheduling                                WTP/AC
        Queuing                                   WTP

   802.11i
        802.1X/EAP                                AC
        Key Management                            AC
        802.11 Encryption/Decryption              WTP or AC

Figure 3: Mapping of 802.11 Functions for Split MAC Architecture

okay so the Distribution and Integration services live on the AC, which means all user data gets tunneled between the WTP and the AC ๐Ÿš‡. Like I said above, all the real-time 802.11 services (the control protocol plus the beacon and Probe Response frames) are handled on the WTP โฑ๏ธ.

All the other 802.11 MAC management frames are supported on the AC, including the Association Request. That's how the AC gets to be part of the access policy enforcement side of 802.11 ๐Ÿ˜ค. The 802.1X and 802.11i key management functions are also on the AC ๐Ÿ”.

The admission control part of 802.11e lives on the AC, but the real-time scheduling and queuing are on the WTP. Just so you know, that doesn't stop the AC from adding extra policing and scheduling on top ๐Ÿซถ.

Here's the thing: in the figure below, ( - ) means the frame is processed on the WTP ๐Ÿ‘€.

   Client                       WTP                        AC

            Beacon
   <-----------------------------
         Probe Request
   ----------------------------( - )------------------------->
         Probe Response
   <-----------------------------
                    802.11 AUTH/Association
   <--------------------------------------------------------->
                      Add Mobile (Clear Text, 802.1X Only)
                                   <------------------------->
          802.1X Authentication & 802.11i Key Exchange
   <--------------------------------------------------------->
                              Add Mobile (AES-CCMP, PTK=x)
                                   <------------------------->
                     802.11 Action Frames
   <--------------------------------------------------------->
                         802.11 DATA (1)
   <---------------------------( - )------------------------->

Figure 4: Split MAC Message Flow

Figure 4 shows the division of labor in a Split MAC setup ๐ŸŽ€. In this example, there's a WLAN configured for 802.11i using AES-CCMP for privacy. Here's how it goes down:

  • the WTP generates the 802.11 beacon frames, using the info it gets through the Add WLAN (see Section 11.8.1.1) message element ๐Ÿ“ก.
  • the WTP processes the Probe Request and sends back a matching Probe Response. The problem request then gets forwarded to the AC for optional processing ๐Ÿง.
  • the WTP forwards the 802.11 Authentication and Association frames to the AC, since the AC is the one responsible for responding to the client ๐Ÿ’โ€โ™€๏ธ.
  • once the association is done, the AC sends an LWAPP Add Mobile Request to the WTP (see Section 11.7.1.1). In this example the WLAN is set up for 802.1X, so the '802.1X only' policy bit is turned on โœ….
  • if the WTP is doing the encryption/decryption, then once the client finishes the 802.11i key exchange, the AC sends another Add Mobile Request to the WTP. That one says which security policy to enforce for the client (AES-CCMP in this case) and which encryption key to use ๐Ÿ—๏ธ. If the encryption/decryption is handled in the AC instead, the Add Mobile Request has the encryption policy set to "Clear Text" ๐Ÿซ .
  • the WTP forwards any 802.11 Action frames it receives to the AC ๐Ÿ“ฌ.
  • all the client data frames get tunneled between the WTP and the AC. The WTP is responsible for encrypting and decrypting frames, but only if the Add Mobile Request said so ๐Ÿ”“โœจ.

11.1.2. Local MAC ๐ŸŒธ

this section is the division of labor for a Local MAC architecture between the WTP and the AC. Figure 5 is the clean breakdown of who handles what ๐Ÿ’–.

    Function                               Location
        Distribution Service                      WTP
        Integration Service                       WTP
        Beacon Generation                         WTP
        Probe Response                            WTP
        Power Mgmt/Packet Buffering               WTP
        Fragmentation/Defragmentation             WTP
        Assoc/Disassoc/Reassoc                    WTP

   802.11e
        Classifying                               WTP
        Scheduling                                WTP
        Queuing                                   WTP

   802.11i
        802.1X/EAP                                AC
        Key Management                            AC
        802.11 Encryption/Decryption              WTP

Figure 5: Mapping of 802.11 Functions for Local AP Architecture

so the Distribution and Integration Services are on the WTP, which means client data frames are NOT forwarded to the AC, except for the exceptions in the next paragraphs ๐Ÿ™…โ€โ™€๏ธ.

The MAC gets terminated on the WTP, but the AC still needs to know about mobility events happening within the WTPs ๐Ÿ—บ๏ธ. Because of that, the WTP MUST forward the 802.11 Association Requests to the AC, and the AC MAY reply with a failed Association Response if it feels like it's necessary ๐Ÿคทโ€โ™€๏ธ.

The 802.1X and 802.11i Key Management function lives on the AC. So the WTP MUST forward all 802.1X/Key Management frames to the AC, and then forward the matching responses back to the station ๐Ÿ”.

In the figure below, ( - ) again means the frame is processed on the WTP ๐Ÿงš.

   Client                       WTP                        AC

            Beacon
   <-----------------------------
             Probe
   <---------------------------->
          802.11 AUTH
   <-----------------------------
                       802.11 Association
   <---------------------------( - )------------------------->
                      Add Mobile (Clear Text, 802.1X Only)
                                   <------------------------->
          802.1X Authentication & 802.11i Key Exchange
   <--------------------------------------------------------->
                     802.11 Action Frames
   <--------------------------------------------------------->
                               Add Mobile (AES-CCMP, PTK=x)
                                   <------------------------->
           802.11 DATA
   <----------------------------->

Figure 6: Local MAC Message Flow

Figure 6 shows the division of labor in a Local MAC setup ๐Ÿ’…. Same deal as before: a WLAN configured for 802.11i with AES-CCMP for privacy. The process goes like this:

  • the WTP generates the 802.11 beacon frames, using the info it gets through the Add WLAN (see Section 11.8.1.1) message element ๐Ÿ“ก.
  • the WTP processes the Probe Request and sends back a matching Probe Response ๐Ÿซถ.
  • the WTP forwards the 802.11 Authentication and Association frames to the AC, which is responsible for responding to the client ๐Ÿ’โ€โ™€๏ธ.
  • once the association is done, the AC sends an LWAPP Add Mobile Request to the WTP (see Section 11.7.1.1. In this example the WLAN is set up for 802.1X, so the '802.1X only' policy bit is turned on โœ….
  • the WTP forwards all the 802.1X and 802.11i key exchange messages to the AC so the AC can process them ๐Ÿ”.
  • the AC sends another Add Mobile Request to the WTP. That one says which security policy to enforce for the client (AES-CCMP in this case) and which encryption key to use ๐Ÿ—๏ธ. The Add Mobile Request MAY include a VLAN name. When it's there, the WTP uses it to figure out which VLAN the user's data frames should be bridged onto ๐ŸŒˆ.
  • the WTP forwards any 802.11 Action frames it receives to the AC ๐Ÿ“ฌ.
  • the WTP locally bridges all the client data frames and handles the encryption and decryption itself ๐Ÿ”ฅ.

11.2. Roaming Behavior and 802.11 Security

Okay bestie, this part is SO important ๐Ÿซถ LWAPP implementations have to react properly when mobile devices show up and associate with the networks, because that's what decides how they generate Add Mobile and Delete Mobile messages ๐Ÿ’…. This section builds on the examples from the previous section and shows how the LWAPP control protocol is used to pull off secure roaming โœจ.

Once a client has associated with the network in a secure way, it's super likely to wanna roam to another access point ๐Ÿฆ‹. Figure 7 shows a station that's currently connected moving from its "Old WTP" over to a new "WTP" ๐Ÿšถ. The figure is handy for a bunch of security policies: standard 802.1X and dynamic WEP keys, WPA or even WPA2, both with key caching (where the 802.1X exchange gets skipped) and without ๐Ÿ”ฅ.

   Client              Old WTP              WTP              AC

                 Association Request/Response
    <--------------------------------------( - )-------------->
                       Add Mobile (Clear Text, 802.1X Only)
                                             <---------------->
    802.1X Authentication (if no key cache entry exists)
    <--------------------------------------( - )-------------->
                  802.11i 4-way Key Exchange
    <--------------------------------------( - )-------------->
                                Delete Mobile
                           <---------------------------------->
                                Add Mobile (AES-CCMP, PTK=x)
                                             <---------------->

Figure 7: Client Roaming Example

11.3. Transport-Specific Bindings

All LWAPP transports have the following IEEE 802.11 specific bindings: ๐ŸŽ€

11.3.1. Status and WLANS Field

The interpretation of this 16-bit field depends on which direction the packet is traveling ๐Ÿงญ. Peek at the figure in Section 3.1 for the layout.

Status

When an LWAPP packet goes from a WTP to an AC, this field is called the Status field and carries radio resource info about the frame ๐Ÿ“ก. When the message is an LWAPP control message, this field gets transmitted as zero ๐ŸŒธ.

The Status field is split into the signal strength and signal-to-noise ratio that an IEEE 802.11 frame was received with, encoded like this ๐Ÿ‘‘:

    0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     RSSI      |     SNR       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • RSSI: a signed, 8-bit value. It's the received signal strength indication, in dBm ๐Ÿ“ถ.
  • SNR: a signed, 8-bit value. It's the signal-to-noise ratio of the received IEEE 802.11 frame, in dB ๐Ÿ’œ.

WLANs field: When an LWAPP data message goes from an AC to a WTP, this 16-bit field says which WLANs the encapsulated IEEE 802.11 frame is supposed to be transmitted on. For unicast packets, the WTP doesn't use this field at all. For broadcast or multicast packets, the WTP might need this info if it's providing encryption services ๐Ÿ”.

Given that a single broadcast or multicast packet might need to go out to multiple wireless LANs (presumably each with a different broadcast key ๐Ÿ”‘), this field is defined as a bit field. A bit that's set means that WLAN ID (see Section 11.8.1.1) will be sent the data. The WLANS field is encoded like so:

    0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          WLAN ID(s)           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

11.4. BSSID to WLAN ID Mapping

The LWAPP protocol makes some assumptions about the BSSIDs used on the WTP ๐Ÿงš. It is a requirement for the WTP to use a contiguous block of BSSIDs ๐Ÿงฑ. The WLAN Identifier field, which the AC manages, works as an offset into the BSSID list.

For example, if a WTP had a base BSSID of 00:01:02:00:00:00, and the AC sent an Add WLAN message with a WLAN Identifier of 2 (see Section 11.8.1.1), then the BSSID for that specific WLAN on the WTP would be 00:01:02:00:00:02 ๐Ÿ’–.

The WTP tells the AC the maximum number of BSSIDs it supports during the Config Request, inside the IEEE 802.11 WTP WLAN Radio Configuration message element (see Section 11.9.1) ๐Ÿ“‹.

11.5. Quality of Service

It is recommended that 802.11 MAC management be sent by both the AC and the WTP with appropriate Quality-of-Service (QoS) values, so that congestion in the network minimizes occurrences of packet loss ๐ŸŒˆ. Therefore, a QoS-enabled LWAPP device should use:

  • 802.1P: The precedence value of 6 SHOULD be used for all 802.11 MAC management messages, except for Probe Requests, which SHOULD use 4 ๐Ÿ“.
  • DSCP: The DSCP tag value of 46 SHOULD be used for all 802.11 MAC management messages, except for Probe Requests, which SHOULD use 34 โญ.

11.6. Data Message Bindings

There are no LWAPP data message bindings for IEEE 802.11 ๐Ÿ˜Œ.

11.7. Control Message Bindings

The IEEE 802.11 binding has the following control message definitions ๐Ÿฆ‹.

11.7.1. Mobile Config Request

This section contains the 802.11-specific message elements that are used with the Mobile Config Request ๐Ÿง.

11.7.1.1. Add Mobile โœจ

okay so the Add Mobile Request is the AC basically going "hey WTP, pls forward traffic from this particular mobile station" ๐Ÿ“จ It can also come with security parameters that must be enforced by the WTP for that mobile ๐Ÿ”

When the AC sends one, it includes any security parameters that may be required ๐ŸŽ€ And if an AC wants to update a mobile's policy on a WTP, it doesn't need anything fancy. It just sends a new Add Mobile message element ๐Ÿ’…

When a WTP gets an Add Mobile message element, it must first override any existing state it may have for the mobile station in question ๐Ÿงน The latest Add Mobile overrides any previously received messages, no debate ๐Ÿ‘‘ If the EAP-Only bit is set, the WTP MUST drop all 802.11 packets that do not contain EAP packets ๐Ÿšซ Note that when EAP Only is set, the Encryption Policy field MAY have additional values, so it's possible to tell a WTP to only accept encrypted EAP packets ๐Ÿ”’ Once the mobile station has successfully completed EAP authentication, the AC must send a new Add Mobile message element to push the session key down to the WTP and remove the EAP Only restriction ๐Ÿ—๏ธ

If the QoS field is set, the WTP MUST observe and provide policing of the 802.11e priority tag, which basically means making sure it never goes past the value the AC gave it ๐Ÿšฆ

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |        Association ID         |  MAC Address  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          MAC Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  MAC Address  |E|C|            Encryption Policy              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Encrypt Policy |                Session Key...                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Pairwise TSC...                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Pairwise RSC...                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Capabilities         |   WLAN ID     |    WME Mode   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 802.11e Mode  |      Qos      |        Supported Rates        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Supported Rates                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          VLAN Name...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 29 for Add Mobile
  • Length: 36

Radio ID: An 8-bit value representing the radio ๐Ÿ“ก

Association ID: A 16-bit value specifying the 802.11 Association Identifier ๐Ÿชช

MAC Address: The mobile station's MAC address ๐Ÿ“ฑ

E: This 1-bit field is set by the AC to inform the WTP that it MUST NOT accept any 802.11 data frames, other than 802.1X frames. It's basically the WTP's 802.1X port for the mobile station being in the closed state ๐Ÿšช When set, the WTP MUST drop any non-802.1X packets it receives from the mobile station ๐Ÿ™…โ€โ™€๏ธ

C: This 1-bit field is set by the AC to inform the WTP that encryption services will be provided by the AC ๐Ÿ” When set, the WTP SHOULD police frames received from stations to ensure that they comply to the stated encryption policy, but it does not need to take specific cryptographic action on the frame. Similarly, for transmitted frames, the WTP only needs to forward already encrypted frames ๐Ÿ’œ

Encryption Policy: The policy field informs the WTP how to handle packets from/to the mobile station. The following values are supported:

0 -  Encrypt WEP 104: All packets to/from the mobile station must
     be encrypted using a standard 104-bit WEP.

1 -  Clear Text: All packets to/from the mobile station do not
     require any additional crypto processing by the WTP.

2 -  Encrypt WEP 40: All packets to/from the mobile station must
     be encrypted using a standard 40-bit WEP.

3 -  Encrypt WEP 128: All packets to/from the mobile station must
     be encrypted using a standard 128-bit WEP.

4 -  Encrypt AES-CCMP 128: All packets to/from the mobile station
     must be encrypted using a 128-bit AES-CCMP [7].

5 -  Encrypt TKIP-MIC: All packets to/from the mobile station must
     be encrypted using Temporal Key Integrity Protocol (TKIP) and
     authenticated using Michael [16].

Session Key: A 32-octet session key the WTP is to use when encrypting traffic to or decrypting traffic from the mobile station. The type of key is determined based on the Encryption Policy field ๐Ÿ—๏ธ

Pairwise TSC: The TKIP Sequence Counter (TSC) to use for unicast packets transmitted to the mobile ๐Ÿ“ค

Pairwise RSC: The Receive Sequence Counter (RSC) to use for unicast packets received from the mobile ๐Ÿ“ฅ

Capabilities: A 16-bit field containing the 802.11 capabilities to use with the mobile โญ

WLAN ID: An 8-bit value specifying the WLAN Identifier ๐Ÿท๏ธ

WME Mode: An 8-bit Boolean used to identify whether the station is WME capable. A value of zero is used to indicate that the station is not Wireless Multimedia Extension (WME) capable, while a value of one means that the station is WME capable ๐ŸŽถ

802.11e Mode: An 8-bit Boolean used to identify whether the station is 802.11e-capable. A value of zero is used to indicate that the station is not 802.11e-capable, while a value of one means that the station is 802.11e-capable ๐ŸŒˆ

QoS: An 8-bit value specifying the QoS policy to enforce for the station. The following values are supported: PRC: TO CHECK

0 -  Silver (Best Effort)

1 -  Gold (Video)

2 -  Platinum (Voice)

3 -  Bronze (Background)

Supported Rates: The supported rates to be used with the mobile station ๐Ÿ“ถ

VLAN Name: An optional variable string containing the VLAN Name on which the WTP is to locally bridge user data. Note that this field is only valid with Local MAC WTPs ๐Ÿงš


11.7.1.2. IEEE 802.11 Mobile Session Key ๐Ÿ—๏ธ

The Mobile Session Key Payload message element is sent when the AC determines that encryption of a mobile station must be performed in the WTP. This message element MUST NOT be present without the Add Mobile message element, and MUST NOT be sent if the WTP had not specifically advertised support for the requested encryption scheme (see Section 11.7.1.1) ๐Ÿ™…โ€โ™€๏ธ

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           MAC Address                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          MAC Address          |       Encryption Policy       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Encryption Policy       |        Session Key...         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 105 for IEEE 802.11 Mobile Session Key
  • Length: >= 11

MAC Address: The mobile station's MAC address ๐Ÿ“ฑ

Encryption Policy: The policy field informs the WTP how to handle packets from/to the mobile station. The following values are supported:

0 -  Encrypt WEP 104: All packets to/from the mobile station must
     be encrypted using a standard 104-bit WEP.

1 -  Clear Text: All packets to/from the mobile station do not
     require any additional crypto processing by the WTP.

2 -  Encrypt WEP 40: All packets to/from the mobile station must
     be encrypted using a standard 40-bit WEP.

3 -  Encrypt WEP 128: All packets to/from the mobile station must
     be encrypted using a standard 128-bit WEP.

4 -  Encrypt AES-CCMP 128: All packets to/from the mobile station
     must be encrypted using a 128-bit AES-CCMP [7].

5 -  Encrypt TKIP-MIC: All packets to/from the mobile station must
     be encrypted using TKIP and authenticated using Michael [16].

Session Key: The session key the WTP is to use when encrypting traffic to/from the mobile station ๐Ÿ”‘


11.7.1.3. Station QoS Profile ๐Ÿšฆ

The Station QoS Profile Payload message element contains the maximum 802.11e priority tag that may be used by the station. Any packets received that exceed the value encoded in this message element must either be dropped or tagged using the maximum value permitted to the user. The priority tag must be between zero (0) and seven (7) ๐Ÿ’…

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           MAC Address                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          MAC Address          |     802.1P Precedence Tag     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 140 for IEEE 802.11 Station QoS Profile
  • Length: 12

MAC Address: The mobile station's MAC address ๐Ÿ“ฑ

802.1P Precedence Tag: The maximum 802.1P precedence value that the WTP will allow in the Traffic Identifier (TID) field in the extended 802.11e QoS Data header ๐ŸŽ€


11.7.1.4. IEEE 802.11 Update Mobile QoS ๐Ÿ”„

The Update Mobile QoS message element is used to change the Quality-of-Service policy on the WTP for a given mobile station โœจ

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Radio ID    |        Association ID         |  MAC Address  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          MAC Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  MAC Address  |  QoS Profile  |        Vlan Identifier        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   DSCP Tag    |  802.1P Tag   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 106 for IEEE 802.11 Update Mobile QoS
  • Length: 14

Radio ID: The Radio Identifier, typically refers to some interface index on the WTP ๐Ÿ“ก

Association ID: The 802.11 Association Identifier ๐Ÿชช

MAC Address: The mobile station's MAC address ๐Ÿ“ฑ

QoS Profile: An 8-bit value specifying the QoS policy to enforce for the station. The following values are supported:

0 -  Silver (Best Effort)

1 -  Gold (Video)

2 -  Platinum (Voice)

3 -  Bronze (Background)

VLAN Identifier: PRC.

DSCP Tag: The DSCP label to use if packets are to be DSCP tagged ๐Ÿท๏ธ

802.1P Tag: The 802.1P precedence value to use if packets are to be 802.1P-tagged ๐Ÿ’–


11.7.2. WTP Event Request ๐ŸŽ€

This section contains the 802.11-specific message elements that are used with the WTP Event Request message ๐Ÿฆ‹

11.7.2.1. IEEE 802.11 Statistics โœจ

okay so this is the stats message, and it's giving receipts ๐Ÿงพ๐Ÿ’… the WTP uses it to send its current statistics to the AC. The value has the following fields:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |               Tx Fragment Count               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Tx Fragment Cnt|               Multicast Tx Count              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Mcast Tx Cnt  |                  Failed Count                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Failed Count  |                  Retry Count                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Retry Count  |             Multiple Retry Count              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Multi Retry Cnt|             Frame Duplicate Count             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Frame Dup Cnt |               RTS Success Count               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |RTS Success Cnt|               RTS Failure Count               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |RTS Failure Cnt|               ACK Failure Count               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |ACK Failure Cnt|               Rx Fragment Count               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Rx Fragment Cnt|               Multicast RX Count              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Mcast Rx Cnt  |                FCS Error  Count               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | FCS Error  Cnt|                 Tx Frame Count                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Tx Frame Cnt  |               Decryption Errors               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Decryption Errs|
   +-+-+-+-+-+-+-+-+

Here's the vibe for each one ๐Ÿซถ

Type: 38 for Statistics โœจ

Length: 57 ๐ŸŽ€

Radio ID: an 8-bit value representing the radio ๐Ÿ“ป

Tx Fragment Count: a 32-bit value for the number of fragmented frames transmitted ๐Ÿ“ฆ

Multicast Tx Count: a 32-bit value for the number of multicast frames transmitted ๐Ÿ“ฃ

Failed Count: a 32-bit value for transmit excessive retries ๐Ÿ˜ค

Retry Count: a 32-bit value for the number of transmit retries ๐Ÿ”

Multiple Retry Count: a 32-bit value for the number of transmits that needed more than one retry ๐Ÿ™ˆ

Frame Duplicate Count: a 32-bit value for the duplicate frames received ๐Ÿ‘ฏ

RTS Success Count: a 32-bit value for the number of successfully transmitted Ready To Send (RTS) frames ๐Ÿฆ‹

RTS Failure Count: a 32-bit value for the failed transmitted RTS ๐Ÿ’€

ACK Failure Count: a 32-bit value for the number of failed acknowledgements ๐Ÿฅ€

Rx Fragment Count: a 32-bit value for the number of fragmented frames received ๐Ÿ“ฅ

Multicast RX Count: a 32-bit value for the number of multicast frames received ๐ŸŒธ

FCS Error Count: a 32-bit value for the number of Frame Check Sequence (FCS) failures ๐Ÿšจ

Decryption Errors: a 32-bit value for the number of Decryption errors that happened on the WTP. Note that this field is only valid when the WTP provides encryption/decryption services ๐Ÿ” So if the WTP isn't doing that job, this one doesn't count ๐Ÿ™…โ€โ™€๏ธ


11.8. 802.11 Control Messages ๐ŸŽ€

11.8. 802.11 Control Messages ๐ŸŽ€

this section is where we define the LWAPP control messages that are specific to the IEEE 802.11 binding ๐Ÿงš

11.8.1. IEEE 802.11 WLAN Config Request ๐ŸŒˆ

the IEEE 802.11 WLAN Configuration Request is sent by the AC to the WTP to change the services the WTP provides. this control message is used to create, update, or delete a WLAN on the WTP. it's literally the main character of WLAN management ๐Ÿ‘‘

this request gets sent either because of some manual admin process (like deleting a WLAN), or automatically to create a WLAN on a WTP. when it's sent automatically to create a WLAN, the control message goes out after the WTP has received the LWAPP Configuration Request. timing is everything ๐Ÿ’…

when the WTP gets this control message, it modifies the necessary services and then sends back an IEEE 802.11 WLAN Configuration Response โœจ

a WTP MAY provide service for more than one WLAN, so every WLAN is identified by a numerical index. for example, a WTP that can support up to 16 SSIDs could accept up to 16 IEEE 802.11 WLAN Configuration Request messages that include the Add WLAN message element ๐Ÿ“

since the index is the primary identifier for a WLAN, an AC SHOULD try to make sure the same WLAN is identified by the same index number on all of its WTPs. an AC that doesn't follow this approach MUST find some other way to keep a WLAN Identifier to SSID mapping table ๐Ÿ—บ๏ธ

the subsections below define the message elements that matter for this LWAPP operation. only one message MUST be present ๐Ÿซถ

11.8.1.1. IEEE 802.11 Add WLAN ๐Ÿฆ‹

the Add WLAN message element is how the AC defines a wireless LAN on the WTP. the value looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |         WLAN Capability       |    WLAN ID    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Encryption Policy                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Key ...                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Key Index   |   Shared Key  | WPA Data Len  |WPA IE Data ...|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | RSN Data Len  |RSN IE Data ...|         Reserved ....         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | WME Data Len  |WME IE Data ...|  11e Data Len |11e IE Data ...|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      QoS      |   Auth Type   |Broadcast SSID |  Reserved...  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    SSID ...   |
   +-+-+-+-+-+-+-+-+

Type: 7 for IEEE 802.11 Add WLAN ๐ŸŽ€

Length: >= 298 ๐Ÿ“

Radio ID: an 8-bit value for the radio ๐Ÿ“ป

WLAN Capability: a 16-bit value with the capabilities the WTP advertises in the Probe and Beacon messages ๐Ÿ“ก

WLAN ID: a 16-bit value specifying the WLAN Identifier ๐Ÿชช

Encryption Policy: a 32-bit value specifying the encryption scheme applied to traffic to and from the mobile station ๐Ÿ”’

the following values are supported:

  • 0 - Encrypt WEP 104: All packets to/from the mobile station must be encrypted using a standard 104-bit WEP.
  • 1 - Clear Text: All packets to/from the mobile station do not require any additional crypto processing by the WTP.
  • 2 - Encrypt WEP 40: All packets to/from the mobile station must be encrypted using a standard 40-bit WEP.
  • 3 - Encrypt WEP 128: All packets to/from the mobile station must be encrypted using a standard 128-bit WEP.
  • 4 - Encrypt AES-CCMP 128: All packets to/from the mobile station must be encrypted using a 128-bit AES-CCMP [7].
  • 5 - Encrypt TKIP-MIC: All packets to/from the mobile station must be encrypted using TKIP and authenticated using Michael [16].
  • 6 - Encrypt CKIP: All packets to/from the mobile station must be encrypted using Cisco TKIP.

Key: a 32-byte session key to use with the encryption policy ๐Ÿ—๏ธ

Key-Index: the Key Index associated with the key ๐Ÿ”‘

Shared Key: a 1-byte Boolean saying whether the key in the Key field is a shared WEP key. a value of zero means it's not a shared WEP key, and a value of one means it is ๐Ÿซง

WPA Data Len: the length of the WPA Information Element (IE) ๐Ÿ“

WPA IE: a 32-byte field with the WPA Information Element ๐Ÿ’œ

RSN Data Len: the length of the Robust Security Network (RSN) IE ๐Ÿ“

RSN IE: a 64-byte field with the RSN Information Element ๐ŸŒท

Reserved: a 49-byte reserved field, which MUST be set to zero (0) ๐ŸงŠ

WME Data Len: the length of the WME IE ๐Ÿ“

WME IE: a 32-byte field with the WME Information Element ๐ŸŽถ

DOT11E Data Len: the length of the 802.11e IE ๐Ÿ“

DOT11E IE: a 32-byte field with the 802.11e Information Element ๐ŸŒŸ

QOS: an 8-bit value specifying the QoS policy to enforce for the station ๐ŸŽข

the following values are supported:

  • 0 - Silver (Best Effort)
  • 1 - Gold (Video)
  • 2 - Platinum (Voice)
  • 3 - Bronze (Background)

Auth Type: an 8-bit value specifying the station's authentication type ๐Ÿ›ก๏ธ

the following values are supported:

  • 0 - Open System
  • 1 - WEP Shared Key
  • 2 - WPA/WPA2 802.1X
  • 3 - WPA/WPA2 PSK

Broadcast SSID: a Boolean saying whether the WTP should broadcast the SSID. a value of zero turns SSID broadcast off, and a value of one turns it on ๐Ÿ“ข

Reserved: a 40-byte reserved field ๐Ÿซง

SSID: the service set identifier that the WTP will advertise for this WLAN ๐Ÿ“ถ

11.8.1.2. IEEE 802.11 Delete WLAN ๐Ÿฅ€

the Delete WLAN message element tells the WTP that a previously created WLAN is going to be deleted. the value contains the following fields:

    0                   1                   2
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |            WLAN ID            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 28 for IEEE 802.11 Delete WLAN ๐Ÿ—‘๏ธ

Length: 3 ๐Ÿ“

Radio ID: an 8-bit value representing the radio ๐Ÿ“ป

WLAN ID: a 16-bit value specifying the WLAN Identifier ๐Ÿชช

11.8.1.3. IEEE 802.11 Update WLAN โœจ

Okay bestie, this one's the AC's glow-up tool ๐Ÿ’…. The Update WLAN message element is how the AC defines a wireless LAN on the WTP ๐Ÿฆ‹. Its value looks like this:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Radio ID   |             WLAN ID           |Encrypt Policy |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Encryption Policy        |     Key...    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             Key ...                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Key Index   |   Shared Key  |        WLAN Capability        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 34 for IEEE 802.11 Update WLAN ๐ŸŽ€

Length: 43 ๐ŸŒธ

Radio ID: an 8-bit value representing the radio ๐Ÿ“ก

WLAN ID: a 16-bit value specifying the WLAN Identifier ๐Ÿ†”

Encryption Policy: a 32-bit value saying which encryption scheme gets applied to traffic to and from the mobile station ๐Ÿ” The supported values are:

  • 0: Encrypt WEP 104. Every packet to and from the mobile station must be encrypted with a standard 104-bit WEP.
  • 1: Clear Text. Packets to and from the mobile station don't need any extra crypto processing by the WTP ๐Ÿซถ
  • 2: Encrypt WEP 40. Every packet must be encrypted with a standard 40-bit WEP.
  • 3: Encrypt WEP 128. Every packet must be encrypted with a standard 128-bit WEP.
  • 4: Encrypt AES-CCMP 128. Every packet must be encrypted using a 128-bit AES-CCMP [7].
  • 5: Encrypt TKIP-MIC. Every packet must be encrypted using TKIP and authenticated using Michael [16] ๐Ÿ‘‘
  • 6: Encrypt CKIP. Every packet must be encrypted using Cisco TKIP.

Key: a 32-byte session key to use with the encryption policy ๐Ÿ—๏ธ

Key-Index: the Key Index associated with the key ๐Ÿ”‘

Shared Key: a 1-byte Boolean that says whether the key in the Key field is a shared WEP key. A value of zero means it is not a shared WEP key, and a value of one means it is ๐Ÿ™ˆ

WLAN Capability: a 16-bit value holding the capabilities the WTP advertises inside its Probe and Beacon messages ๐Ÿ“ฃ

11.8.2. IEEE 802.11 WLAN Config Response ๐ŸŒˆ

The IEEE 802.11 WLAN Configuration Response is the WTP's little "got it!" to the AC, sent as an acknowledgement after it receives an IEEE 802.11 WLAN Configuration Request ๐Ÿ’Œ

This LWAPP control message doesn't carry any message elements, so it's super light โ˜๏ธ

11.8.3. IEEE 802.11 WTP Event ๐Ÿšจ

The IEEE 802.11 WTP Event LWAPP message is how the WTP tells the AC about asynchronous events ๐Ÿ“ข No reply is expected from the AC. The only thing that happens is the message gets acknowledged over the reliable transport ๐Ÿค

When the AC gets an IEEE 802.11 WTP Event, it takes whatever action is needed, depending on which message elements are in the message ๐Ÿง 

The IEEE 802.11 WTP Event message MUST contain one of the following message elements, which are described in the next subsections ๐Ÿ’–

11.8.3.1. IEEE 802.11 MIC Countermeasures ๐Ÿ™€

The MIC Countermeasures message element is how the WTP tells the AC that a MIC failure happened ๐Ÿ˜ญ

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Radio ID    |    WLAN ID    |          MAC Address          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          MAC Address                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 61 for IEEE 802.11 MIC Countermeasures ๐Ÿ“

Length: 8

Radio ID: the Radio Identifier. It usually points to some interface index on the WTP ๐Ÿ“ป

WLAN ID: an 8-bit unsigned integer with the WLAN Identifier where the MIC failure happened ๐ŸŒ

MAC Address: the MAC address of the mobile station that caused the MIC failure ๐Ÿ“ฑ

11.8.3.2. IEEE 802.11 WTP Radio Fail Alarm Indication ๐Ÿšฉ

The WTP Radio Fail Alarm Indication message element is sent by the WTP to the AC when it spots a radio failure ๐Ÿ›‘

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Radio ID    |     Type      |    Status     |      Pad      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 95 for WTP Radio Fail Alarm Indication ๐Ÿงจ

Length: 4

Radio ID: the Radio Identifier. It usually points to some interface index on the WTP ๐Ÿ“ก

Type: the type of radio failure detected. The supported values are:

  • 1: Receiver ๐Ÿ‘‚
  • 2: Transmitter ๐Ÿ“ข

Status: an 8-bit Boolean saying whether the radio failure is being reported or cleared. A value of zero clears the event, and a value of one reports it โœจ

Pad: the reserved field MUST be set to zero (0) ๐Ÿงธ

11.9. Message Element Bindings ๐Ÿ’œ

The IEEE 802.11 Message Element binding has the following definitions ๐Ÿ—‚๏ธ

                                                Conf  Conf  Conf  Add
                                                Req   Resp  Upd   Mobile

   IEEE 802.11 WTP WLAN Radio Configuration   X     X     X
   IEEE 802.11 Rate Set                             X     X
   IEEE 802.11 Multi-domain Capability        X     X     X
   IEEE 802.11 MAC Operation                  X     X     X
   IEEE 802.11 Tx Power                       X     X     X
   IEEE 802.11 Tx Power Level                 X
   IEEE 802.11 Direct Sequence Control        X     X     X
   IEEE 802.11 OFDM Control                   X     X     X
   IEEE 802.11 Supported Rates                X     X
   IEEE 802.11 Antenna                        X     X     X
   IEEE 802.11 CFP Status                     X           X
   IEEE 802.11 Broadcast Probe Mode                 X     X
   IEEE 802.11 WTP Mode and Type              X?          X
   IEEE 802.11 WTP Quality of Service               X     X
   IEEE 802.11 MIC Error Report From Mobile               X
   IEEE 802.11 Update Mobile QoS                                X
   IEEE 802.11 Mobile Session Key                               X

11.9.1. IEEE 802.11 WTP WLAN Radio Configuration ๐ŸŽ›๏ธ

The WTP WLAN radio configuration is how the AC sets up a Radio on the WTP ๐Ÿ“ป The message element value has these Fields:

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Radio ID   |    Reserved   |        Occupancy Limit        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    CFP Per    |      CFP Maximum Duration     |     BSS ID    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                            BSS ID                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     BSS ID    |        Beacon Period          |    DTIM Per   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Country String                         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Num Of BSSIDs |
      +-+-+-+-+-+-+-+-+

Type: 8 for IEEE 802.11 WTP WLAN Radio Configuration ๐ŸŒธ

Length: 20

Radio ID: an 8-bit value representing the radio to configure ๐Ÿ“ก

Reserved: MUST be set to zero ๐Ÿšซ

Occupancy Limit: this attribute is the maximum amount of time, in Time Units (TUs), that a point coordinator MAY control the usage of the wireless medium without giving it up for long enough to allow at least one instance of Distributed Coordination Function (DCF) access to the medium โฑ๏ธ The default value of this attribute SHOULD be 100, and the maximum value SHOULD be 1000.

CFP Period: this attribute describes the number of DTIM intervals between the start of Contention-Free Periods (CFPs) ๐Ÿ—“๏ธ

CFP Maximum Duration: this attribute describes the maximum duration of the CFP in TU that MAY be generated by the Point Coordination Function (PCF) โŒ›

BSSID: the WLAN Radio's base MAC address. For WTPs that support more than a single WLAN, the value of the WLAN Identifier is added to the last octet of the BSSID. So a WTP that supports 16 WLANs MUST have 16 MAC addresses reserved for it, and the last nibble is used to represent the WLAN ID ๐Ÿงฎ

Beacon Period: this attribute is the number of TUs a station uses for scheduling Beacon transmissions. This value is sent in Beacon and Probe Response frames ๐Ÿ””

DTIM Period: this attribute is the number of Beacon intervals that pass between transmissions of Beacon frames containing a TIM element whose DTIM Count field is 0. This value goes in the DTIM Period field of Beacon frames ๐Ÿฆ‹

Country Code: this attribute identifies the country the station is operating in ๐ŸŒ The first two octets of this string are the two-character country code described in ISO/IEC 3166-1. The third octet MUST be one of the following:

  1. an ASCII space character, if the regulations the station operates under cover all environments in the country,
  2. an ASCII 'O' character, if the regulations the station operates under are for an outdoor environment only, or
  3. an ASCII 'I' character, if the regulations the station operates under are for an indoor environment only.

Number of BSSIDs: this attribute holds the maximum number of BSSIDs the WTP supports. This value caps how many logical networks the WTP can run ๐ŸŒ

11.9.2. IEEE 802.11 Rate Set ๐ŸŽ๏ธ

The Rate Set message element value is sent by the AC, and it holds the supported operational rates ๐Ÿ’จ It has these fields:

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Radio ID   |                   Rate Set                    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 16 for IEEE 802.11 Rate Set ๐Ÿ’–

Length: 4

Radio ID: an 8-bit value representing the radio to configure ๐Ÿ“ก

Rate Set: the AC generates the Rate Set that the WTP includes in its Beacon and Probe messages ๐ŸŽถ

11.9.3. IEEE 802.11 Multi-Domain Capability ๐ŸŒ

okay bestie, so the AC uses this element to tell the WTP about its regulatory limits ๐Ÿ“œ basically "here's what you're allowed to do in your country, don't get us in trouble" ๐Ÿ’… The value has these fields:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |    Reserved   |        First Channel #        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Number of Channels      |       Max Tx Power Level      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 10 for IEEE 802.11 Multi-Domain Capability
  • Length: 8
  • Radio ID: an 8-bit value for the radio being configured ๐Ÿ“ก
  • Reserved: MUST be set to zero ๐Ÿ™…โ€โ™€๏ธ
  • First Channel #: the lowest channel number in the subband for the associated domain country string ๐Ÿงญ
  • Number of Channels: the total number of channels allowed in that subband for the associated domain country string ๐Ÿ”ข
  • Max Tx Power Level: the maximum transmit power, in dBm, allowed in that subband for the associated domain country string โšก

11.9.4. IEEE 802.11 MAC Operation โš™๏ธ

the AC sends this one to set the 802.11 MAC parameters on the WTP ๐Ÿ› ๏ธ it's giving "behind-the-scenes settings" energy and it's so important โœจ The value has these fields:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |    Radio ID   |    Reserved   |         RTS Threshold         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Short Retry  |  Long Retry   |    Fragmentation Threshold    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Tx MSDU Lifetime                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Rx MSDU Lifetime                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 11 for IEEE 802.11 MAC Operation
  • Length: 16
  • Radio ID: an 8-bit value for the radio being configured ๐Ÿ“ก
  • Reserved: MUST be set to zero ๐Ÿ™…โ€โ™€๏ธ
  • RTS Threshold: the number of octets in a Management Protocol Data Unit (MPDU) below which an RTS/CTS (clear to send) handshake MUST NOT be performed ๐Ÿšซ An RTS/CTS handshake MUST be performed at the beginning of any frame exchange sequence where the MPDU is of type Data or Management, the MPDU has an individual address in the Address1 field, and the length of the MPDU is greater than this threshold ๐Ÿค Setting this attribute to be larger than the maximum MAC Service Data Unit (MSDU) size MUST have the effect of turning off the RTS/CTS handshake for frames of Data or Management type transmitted by this Station (STA) ๐Ÿ˜Œ Setting this attribute to zero MUST have the effect of turning on the RTS/CTS handshake for all frames of Data or Management type transmitted by this STA ๐Ÿ”› The default value of this attribute MUST be 2347.
  • Short Retry: the maximum number of transmission attempts of a frame, whose length is less than or equal to RTSThreshold, that MUST be made before a failure condition is indicated ๐Ÿ” The default value of this attribute MUST be 7.
  • Long Retry: the maximum number of transmission attempts of a frame, whose length is greater than dot11RTSThreshold, that MUST be made before a failure condition is indicated ๐Ÿ” The default value of this attribute MUST be 4.
  • Fragmentation Threshold: the current maximum size, in octets, of the MPDU that MAY be delivered to the PHY ๐Ÿงฉ An MSDU MUST be broken into fragments if its size exceeds the value of this attribute after adding MAC headers and trailers โœ‚๏ธ An MSDU or MAC Management Protocol Data Unit (MMPDU) MUST be fragmented when the resulting frame has an individual address in the Address1 field, and the length of the frame is larger than this threshold. The default value for this attribute MUST be the lesser of 2346 or the aMPDUMaxLength of the attached PHY, and MUST never exceed the lesser of 2346 or the aMPDUMaxLength of the attached PHY ๐Ÿ“ The value of this attribute MUST never be less than 256.
  • Tx MSDU Lifetime: the elapsed time in TU, after the initial transmission of an MSDU, after which further attempts to transmit the MSDU MUST be terminated โณ The default value of this attribute MUST be 512.
  • Rx MSDU Lifetime: the elapsed time, in TU, after the initial reception of a fragmented MMPDU or MSDU, after which further attempts to reassemble the MMPDU or MSDU MUST be terminated โŒ› The default value MUST be 512.

11.9.5. IEEE 802.11 Tx Power ๐Ÿ”‹

this one goes both ways, bestie โ†”๏ธ When the WTP sends it, it's the current power level of the radio. When the AC sends it, it's the power level the WTP MUST adhere to ๐Ÿซก

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |    Reserved   |        Current Tx Power       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 12 for IEEE 802.11 Tx Power
  • Length: 4
  • Radio ID: an 8-bit value for the radio being configured ๐Ÿ“ก
  • Reserved: MUST be set to zero ๐Ÿ™…โ€โ™€๏ธ
  • Current Tx Power: the transmit output power in mW ๐Ÿ’ฅ

11.9.6. IEEE 802.11 Tx Power Level ๐Ÿ“ถ

the WTP sends this one to list all the different power levels it supports ๐Ÿ“‹ The value has these fields:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |   Num Levels  |        Power Level [n]        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 13 for IEEE 802.11 Tx Power Level
  • Length: >= 4
  • Radio ID: an 8-bit value for the radio being configured ๐Ÿ“ก
  • Num Levels: the number of power level attributes ๐Ÿ”ข
  • Power Level: each power level field holds one supported power level, in mW ๐Ÿ’ก

11.9.7. IEEE 802.11 Direct Sequence Control ๐Ÿ“ป

another two-way element, bestie โ†”๏ธ When the WTP sends it, it's the current state. When the AC sends it, the WTP MUST adhere to the values ๐Ÿซถ This element is only used for 802.11b radios ๐Ÿ•ฐ๏ธ The value has the following fields:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |    Reserved   | Current Chan  |  Current CCA  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Energy Detect Threshold                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 14 for IEEE 802.11 Direct Sequence Control
  • Length: 8
  • Radio ID: an 8-bit value for the radio being configured ๐Ÿ“ก
  • Reserved: MUST be set to zero ๐Ÿ™…โ€โ™€๏ธ
  • Current Channel: the current operating frequency channel of the Direct Sequence Spread Spectrum (DSSS) PHY ๐Ÿ“บ
  • Current CCA: the Controlled Channel Access (CCA) method currently in operation ๐Ÿ‘€ The valid values are:
    • 1 - energy detect only (edonly)
    • 2 - carrier sense only (csonly)
    • 4 - carrier sense and energy detect (edandcs)
    • 8 - carrier sense with timer (cswithtimer)
    • 16 - high-rate carrier sense and energy detect (hrcsanded)
  • Energy Detect Threshold: the Energy Detect Threshold currently being used by the DSSS PHY ๐ŸŽš๏ธ

11.9.8. IEEE 802.11 OFDM Control ๐ŸŒˆ

the Orthogonal Frequency Division Multiplexing (OFDM) Control element is also two-way ๐Ÿ”„ When the WTP sends it, it's the current state. When the AC sends it, the WTP MUST adhere to the values ๐Ÿ’… This element is only used for 802.11a radios โœจ The value has these fields:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |    Reserved   | Current Chan  |  Band Support |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         TI Threshold                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 15 for IEEE 802.11 OFDM Control
  • Length: 8
  • Radio ID: an 8-bit value for the radio being configured ๐Ÿ“ก
  • Reserved: MUST be set to zero ๐Ÿ™…โ€โ™€๏ธ
  • Current Channel: the current operating frequency channel of the OFDM PHY ๐Ÿ“ป
  • Band Supported: the capability of the OFDM PHY implementation to operate in the three U-NII bands ๐ŸŒ It's coded as an integer value of a 3-bit field, like this:
Bit 0 -  capable of operating in the lower (5.15-5.25 GHz) U-NII
         band

Bit 1 -  capable of operating in the middle (5.25-5.35 GHz) U-NII
         band

Bit 2 -  capable of operating in the upper (5.725-5.825 GHz) U-NII
         band

For example, for an implementation capable of operating in the lower and mid bands, this attribute would take the value.

  • TI Threshold: the threshold used to detect a busy medium (frequency) ๐Ÿšฆ CCA MUST report a busy medium upon detecting the RSSI above this threshold ๐Ÿ“ถ

11.9.9. IEEE 802.11 Antenna โœจ

Okay so this is the Antenna message element ๐Ÿ“ก The WTP uses it to tell the AC what antennas it has to work with. The AC MAY use this element to reconfigure the WTP's antennas, which is so iconic for control. Here's the layout:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |   Diversity   |    Combiner   |  Antenna Cnt  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Antenna Selection [0..N]                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 41 for IEEE 802.11 Antenna ๐ŸŽ€

Length: >= 8

Radio ID: An 8-bit value representing the radio to configure. ๐Ÿ’–

Diversity: An 8-bit value specifying whether the antenna is to provide receive diversity. These are the supported values:

  • 0 - Disabled
  • 1 - Enabled (may only be true if the antenna can be used as a receive antenna) ๐Ÿฆ‹

Combiner: An 8-bit value specifying the combiner selection. These are the supported values:

  • 1 - Sectorized (Left)
  • 2 - Sectorized (Right)
  • 3 - Omni
  • 4 - Mimo โœจ

Antenna Count: An 8-bit value specifying the number of Antenna Selection fields. ๐Ÿงš

Antenna Selection: One 8-bit antenna configuration value per antenna in the WTP. These are the supported values:

  • 1 - Internal Antenna
  • 2 - External Antenna ๐Ÿ’…

11.9.10. IEEE 802.11 Supported Rates ๐ŸŒธ

The Supported Rates message element is sent by the WTP to show the rates it supports. Bestie, it's giving honesty ๐Ÿซถ

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Radio ID   |                 Supported Rates               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 16 for IEEE 802.11 Supported Rates

Length: 4

Radio ID: An 8-bit value representing the radio. ๐Ÿ“ป

Supported Rates: The WTP includes the Supported Rates that its hardware supports. The format is identical to the Rate Set message element. Same energy as before, no cap ๐Ÿ”ฅ


11.9.11. IEEE 802.11 CFP Status ๐Ÿฆ‹

The CFP Status message element is sent to share the CF Polling configuration. Tea โ˜•

    0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Radio ID    |    Status     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 48 for IEEE 802.11 CFP Status

Length: 2

Radio ID: The Radio Identifier, typically refers to some interface index on the WTP. ๐ŸŒˆ

Status: An 8-bit Boolean containing the status of the CF Polling feature. A value of zero disables CFP Status, while a value of one enables it. It's literally just on or off, so simple ๐Ÿ’œ


11.9.12. IEEE 802.11 WTP Mode and Type ๐Ÿงš

The WTP Mode and Type message element is used to set a WTP up to operate in a specific mode. Main character energy ๐Ÿ‘‘

    0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Mode      |     Type      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 54 for IEEE 802.11 WTP Mode and Type

Length: 2

Mode: An 8-bit value describing the type of information being sent. These are the supported values:

  • 0 - Split MAC
  • 2 - Local MAC

Type: The type field is not currently used. ๐Ÿ™ˆ


11.9.13. IEEE 802.11 Broadcast Probe Mode ๐Ÿ”ฅ

The Broadcast Probe Mode message element shows whether a WTP will respond to NULL SSID Probe requests. Here's the tea โ˜• Broadcast NULL Probes aren't sent to one specific BSSID, so the WTP can't know which SSID the sending station is asking about. Therefore, this behavior must be global to the WTP. Literally no way around it ๐Ÿ˜ญ

    0
    0 1 2 3 4 5 6 7
   +-+-+-+-+-+-+-+-+
   |    Status     |
   +-+-+-+-+-+-+-+-+

Type: 51 for IEEE 802.11 Broadcast Probe Mode

Length: 1

Status: An 8-bit Boolean indicating the status of whether a WTP shall respond to a NULL SSID Probe request. A value of zero disables the NULL SSID Probe response, while a value of one enables it. ๐Ÿ’…


11.9.14. IEEE 802.11 WTP Quality of Service ๐ŸŒธ

The WTP Quality of Service message element value is sent by the AC to the WTP to pass along quality-of-service configuration info. Okay, this one is a whole vibe ๐ŸŒˆ

    0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Radio ID    |  Tag Packets  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 57 for IEEE 802.11 WTP Quality of Service Length: 12

Radio ID: The Radio Identifier, typically refers to some interface index on the WTP. ๐ŸŽ€

Tag Packets: A value indicating whether LWAPP packets should be tagged for QoS purposes. These are the values currently supported:

  • 0 - Untagged
  • 1 - 802.1P
  • 2 - DSCP

Immediately following the above header is the following data structure. This data structure will be repeated five times, once for every QoS profile. The order of the QoS profiles is Uranium, Platinum, Gold, Silver, and Bronze. Five profiles, all in a row, iconic ๐Ÿ‘‘

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Queue Depth  |             CWMin             |     CWMax     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     CWMax     |     AIFS      |              CBR              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Dot1P Tag   |   DSCP Tag    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Queue Depth: The number of packets that can be on the specific QoS transmit queue at any given time. ๐Ÿฆ‹

CWMin: The Contention Window minimum value for the QoS transmit queue. ๐Ÿ’–

CWMax: The Contention Window maximum value for the QoS transmit queue. ๐Ÿ’–

AIFS: The Arbitration Inter Frame Spacing to use for the QoS transmit queue. ๐Ÿงš

CBR: The Constant Bit Rate (CBR) value to observe for the QoS transmit queue. โœจ

Dot1P Tag: The 802.1P precedence value to use if packets are to be 802.1P tagged. ๐ŸŽ€

DSCP Tag: The DSCP label to use if packets are to be DSCP tagged. ๐Ÿ’…


11.9.15. IEEE 802.11 MIC Error Report From Mobile ๐Ÿ’€

The MIC Error Report From Mobile message element is sent by an AC to a WTP when it gets a MIC failure notification through the Error bit in the EAP over LAN (EAPOL)-Key frame. Not the drama, but we're handling it ๐Ÿ˜ญ

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Client MAC Address                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Client MAC Address       |             BSSID             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             BSSID                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Radio ID    |    WLAN ID    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 79 for IEEE 802.11 MIC Error Report From Mobile

Length: 14

Client MAC Address: The Client MAC address of the station reporting the MIC failure. ๐Ÿ™ˆ

BSSID: The BSSID on which the MIC failure is being reported. ๐ŸŒธ

Radio ID: The Radio Identifier, typically refers to some interface index on the WTP. ๐Ÿ“ป

WLAN ID: The WLAN ID on which the MIC failure is being reported. ๐Ÿ“


11.10. IEEE 802.11 Message Element Values ๐ŸŒˆ

This section lists IEEE 802.11-specific values for any generic LWAPP message elements that include fields whose values are technology-specific. Bestie, this is the cute little list section ๐Ÿงš

IEEE 802.11 uses the following values:

  • 4 - Encrypt AES-CCMP 128: WTP supports AES-CCMP, as defined in [7]. ๐Ÿ”ฅ
  • 5 - Encrypt TKIP-MIC: WTP supports TKIP and Michael, as defined in [16]. ๐Ÿ’œ

12. LWAPP Protocol Timers โฐ

A WTP or AC that implements LWAPP discovery MUST implement the following timers. These are the non-negotiable ones, periodt ๐Ÿ‘‘

12.1. MaxDiscoveryInterval ๐Ÿ•

The maximum time allowed between sending Discovery Requests from the interface, in seconds. Must be no less than 2 seconds and no greater than 180 seconds.

Default: 20 seconds. โœจ

12.2. SilentInterval ๐Ÿคซ

The minimum time, in seconds, a WTP MUST wait after failing to receive any responses to its Discovery Requests, before it MAY again send Discovery Requests. Ghosted, but make it intentional ๐Ÿ™ˆ

Default: 30 ๐ŸŽ€

12.3. NeighborDeadInterval ๐Ÿ’€

The minimum time, in seconds, a WTP MUST wait without having received Echo Responses to its Echo Requests, before the destination for the Echo Request may be considered dead. Must be no less than 2*EchoInterval seconds and no greater than 240 seconds. Rip, but it's a process ๐Ÿ˜ญ

Default: 60 ๐ŸŒธ

12.4. EchoInterval ๐Ÿ“

The minimum time, in seconds, between sending Echo Requests to the AC with which the WTP has joined. Ping, ping, ping ๐Ÿฆ‹

Default: 30 ๐Ÿ’–

12.5. DiscoveryInterval ๐Ÿงญ

The minimum time, in seconds, that a WTP MUST wait after receiving a Discovery Response, before sending a Join Request. Patience is a whole aesthetic ๐Ÿซถ

Default: 5 โœจ

12.6. RetransmitInterval ๐Ÿ”

The minimum time, in seconds, that a non-acknowledged LWAPP packet will be retransmitted. Try, try again ๐Ÿ’…

Default: 3 ๐ŸŒˆ

12.7. ResponseTimeout โŒ›

The minimum time, in seconds, in which an LWAPP Request message must be responded to. Default: 1 ๐Ÿงš

12.8. KeyLifetime ๐Ÿ”‘

The maximum time, in seconds, that an LWAPP session key is valid. Keys don't last forever, bestie ๐Ÿฅน

Default: 28800 ๐Ÿ’œ


13. LWAPP Protocol Variables ๐ŸŽ›๏ธ

A WTP or AC that implements LWAPP discovery MUST allow for the following variables to be configured by system management. Default values are specified so that it's unnecessary to configure any of these variables in many cases. So chill ๐ŸŒธ

13.1. MaxDiscoveries ๐Ÿ”ข

The maximum number of Discovery Requests that will be sent after a WTP boots. ๐Ÿš€

Default: 10 โœจ

13.2. DiscoveryCount ๐Ÿงฎ

The number of discoveries transmitted by a WTP to a single AC. This is a monotonically increasing counter. Only goes up, never down ๐Ÿ“ˆ

13.3. RetransmitCount ๐Ÿ”

The number of retransmissions for a given LWAPP packet. This is a monotonically increasing counter. Keep counting, queen ๐Ÿ‘‘

13.4. MaxRetransmit ๐Ÿ›‘

The maximum number of retransmissions for a given LWAPP packet before the link layer considers the peer dead. Five strikes and it's over ๐Ÿ’€

Default: 5 ๐Ÿฆ‹

14. NAT Considerations ๐ŸŒธ

okay so there are two situations where a NAT box can show up while you're using LWAPP ๐Ÿฆ‹

The first one is when the WTP is hiding behind a NAT. Every conversation is started by the WTP, and everything runs over IP through one UDP port, so the protocol just glides through NAT in this setup โœจ

The second one is when the AC is the one behind the NAT ๐Ÿ˜ญ This has two main issues, bestie.

The first issue is that an AC tells WTPs about its interfaces and how loaded they are, through the WTP Manager Control IP Address message element. That element is mandatory right now. If NAT compliance ever became a problem, you could do one of these:

  1. Make the WTP Manager Control IP Address optional, so the WTP just uses the known IP address. Heads up, though: this kills the ability to load balance WTPs across ACs, so it is not the recommended approach ๐Ÿ’€
  2. Let an AC configure a NAT'ed address for every associated AC, which would generally get communicated in the WTP Manager Control IP Address message element ๐ŸŽ€
  3. Require that if a WTP sees the AC List message element has a set of IP addresses that are different from the IP address of the AC it's currently talking to, it assumes NAT is being enforced. Then the WTP has to talk to the original AC's IP address and ignore the WTP Manager Control IP Address message element(s) ๐Ÿงš

The second issue is LWAPP's support for the CAPWAP Objective, which lets the control and data plane be separated ๐Ÿ”ฅ To pull that off, LWAPP defines the WTP Manager Data IP Address message element. This lets the AC tell the WTP that the LWAPP data frames should be forwarded to a separate IP address. This feature MUST be disabled when an AC is behind a NAT. The annoying part is there's no easy default mechanism that makes both the data/control separation and the NAT goals happy, because they directly conflict. So, sadly, user intervention is required to support these networks ๐Ÿ˜ญ

LWAPP also has a feature that lets all of the AC's identities supporting a group of WTPs get communicated through the AC List message element. This feature must be disabled when the AC is behind a NAT and the IP address that is embedded would be invalid ๐Ÿ™ˆ

LWAPP has a feature that lets an AC configure a static IP address on a WTP. The WTP Static IP Address Information message element provides that function. However, this feature SHOULD NOT be used in NAT'ed environments, unless the administrator is familiar with the internal IP addressing scheme inside the WTP's private network and doesn't rely on the public address the AC sees ๐Ÿ’…

When a WTP detects the duplicate address condition, it sends a message to the AC that includes the Duplicate IP Address message element. Once again, the IP address embedded in this message element will be different from the public IP address the AC sees ๐Ÿ‘€


15. Security Considerations ๐Ÿ”

LWAPP uses either an authenticated key exchange or a key agreement mechanism to make sure peers are authentic and to set up fresh session keys that protect LWAPP communications. Main character security energy ๐Ÿ‘‘

The LWAPP protocol defines a join phase, which lets a WTP bind a session with an AC. During this process, a session key is mutually derived and secured either through an X.509 certificate or a pre-shared key. The key exchange produces an encryption session key, which encrypts the LWAPP control packets, and a key derivation key ๐Ÿ—๏ธ

During the secure communication, the WTP and AC may rekey using the key update process. That process is identical to the join phase, which means the session keys are mutually derived again. The one difference is that the exchange described for pre-shared session keys is always used for the key update, with the pre-shared key set to the derivation key created either during the join or during the last key update, if one has happened. The key update results in a new derivation key, which gets used in the next key update, plus an encryption session key that encrypts the LWAPP control packets ๐Ÿ”„

Replay protection of the Join Request is handled through an exchange of nonces during the join (or key update) phase. The Join Request includes an XNonce, which is included in the AC's authenticated Join Reply's encrypted ANonce message element. This binds the two messages together โœจ When the Join Reply arrives, the WTP generates the WNonce and generates a set of session keys using a KDF function. One of those keys is used to MIC the Join ACK. The AC responds with a Join Confirm, which must also include a MIC, and so it must be able to derive the same set of session keys ๐Ÿซถ

In both the X.509 certificate and pre-shared key modes, an initialization vector is created through the KDF function mentioned above. The IV and the KDF-created encryption key are used to encrypt the LWAPP control frames ๐ŸŽ€

Authentication in the Join exchange doesn't happen until the WTP transmits the Join ACK message. Because of that, it is crucial that an AC does not delete any state for a WTP it is servicing until an authenticated Join ACK has been received. Otherwise, there's a potential Denial-of-Service attack, where a spoofed Join Request for a valid WTP would make the AC reset that WTP's connection. Not cute ๐Ÿ˜ฑ

It is important to note that Perfect Forward Secrecy is not a requirement for the LWAPP protocol ๐Ÿง

Also, the LWAPP protocol doesn't add any new vulnerabilities to 802.11 infrastructure that uses WEP for encryption. However, implementors SHOULD discourage the use of WEP so the market can move toward technically sound cryptographic solutions, such as 802.11i ๐Ÿš€

15.1. Certificate-Based Session Key Establishment ๐Ÿชช

LWAPP uses public key cryptography to build trust between the WTP and the AC. People keep asking why the Join Request isn't signed. Signing it wouldn't be optimal, for these reasons:

  1. The Join Request is replayable, so a signature doesn't provide much protection unless the switches keep track of all previous Join Requests from a given WTP.
  2. Replay detection is handled during the Join Reply and Join ACK messages.
  3. A signed Join Request opens up a potential Denial-of-Service attack on the AC, which would have to authenticate each (potentially malicious) message.

The WTP-Certificate included in the Join Request MUST be validated by the AC. It's also good practice for the AC to perform some form of authorization, making sure the WTP is allowed to establish an LWAPP session with it ๐Ÿ“œ

15.2. PSK-Based Session Key Establishment ๐Ÿ”‘

Using a fixed shared secret with limited entropy (for example, a PSK that's pretty short, or one a human picked, which may have less entropy than its length suggests) may let an attacker run a brute-force or dictionary attack to recover the secret. Yikes ๐Ÿ™ˆ

It is RECOMMENDED that implementations letting the administrator manually configure the PSK also provide a way to generate a new random PSK, taking RFC 1750 [4] into account ๐ŸŽฒ

Since key generation doesn't expose the nonces in plaintext, there are no practical passive attacks possible ๐Ÿ›ก๏ธ


16. Acknowledgements ๐Ÿซถ

The authors wish to thank Michael Vakulenko for contributing text that describes how LWAPP can be used over a Layer 3 (IP) network ๐ŸŒˆ

The authors would also like to thanks Russ Housley and Charles Clancy for their assistance in providing a security review of the LWAPP specification. Charles' review can be found in [12] ๐Ÿ’œ


17. References ๐Ÿ“š

17.1. Normative References

[1] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

[2] National Institute of Standards and Technology, "Advanced Encryption Standard (AES)", FIPS PUB 197, November 2001, <http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf>.

[3] Whiting, D., Housley, R., and N. Ferguson, "Counter with CBC-MAC (CCM)", RFC 3610, September 2003.

[4] Eastlake, D., 3rd, Schiller, J., and S. Crocker, "Randomness Requirements for Security", BCP 106, RFC 4086, June 2005.

[5] Manner, J., Ed., and M. Kojo, Ed., "Mobility Related Terminology", RFC 3753, June 2004.

[6] "Information technology - Telecommunications and information exchange between systems - Local and metropolitan area networks - Specific requirements - Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) specifications", IEEE Standard 802.11, 2007, <http://standards.ieee.org/getieee802/download/802.11-2007.pdf>

[7] "Information technology - Telecommunications and information exchange between systems - Local and metropolitan area networks - Specific requirements - Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) specifications Amendment 6: Medium Access Control (MAC) Security Enhancements", IEEE Standard 802.11i, July 2004, http://standards.ieee.org/getieee802/download/802.11i-2004.pdf

[8] Clark, D., "IP datagram reassembly algorithms", RFC 815, July 1982.

[9] Schaad, J. and R. Housley, "Advanced Encryption Standard (AES) Key Wrap Algorithm", RFC 3394, September 2002.

[10] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 5280, May 2008.

[11] "Netscape-Defined Certificate Extensions", <http://www.redhat.com/docs/manuals/cert-system/admin/7.1/app_ext.html#35336>.

[12] Clancy, C., "Security Review of the Light-Weight Access Point Protocol", May 2005, <http://www.cs.umd.edu/~clancy/docs/lwapp-review.pdf>.

17.2. Informative References

[13] Reynolds, J., Ed., "Assigned Numbers: RFC 1700 is Replaced by an On-line Database", RFC 3232, January 2002.

[14] Kent, S. and K. Seo, "Security Architecture for the Internet Protocol", RFC 4301, December 2005.

[15] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed-Hashing for Message Authentication", RFC 2104, February 1997.

[16] "WiFi Protected Access (WPA) rev 1.6", April 2003.


Authors' Addresses ๐Ÿ’Œ

Pat R. Calhoun
Cisco Systems, Inc.
170 West Tasman Drive
San Jose, CA  95134
Phone: +1 408-853-5269
EMail: pcalhoun@cisco.com

Rohit Suri
Cisco Systems, Inc.
170 West Tasman Drive
San Jose, CA  95134
Phone: +1 408-853-5548
EMail: rsuri@cisco.com

Nancy Cam-Winget
Cisco Systems, Inc.
170 West Tasman Drive
San Jose, CA  95134
Phone: +1 408-853-0532
EMail: ncamwing@cisco.com

Scott Kelly
EMail: scott@hyperthought.com


Michael Glenn Williams
GWhiz Arts & Sciences
1560 Newbury Road, Suite 1-204
Newbury Park, CA 91320
Phone: +1 805-499-1994
EMail: gwhiz@gwhiz.com


Sue Hares
Phone: +1 734-604-0332
EMail: shares@ndzh.com

Bob O'Hara
EMail: bob.ohara@computer.org
๐Ÿ“ฆ where this page comes from