Executive summary
Lightweight IOS access points have a limited capacity to buffer multicast packets. The multicast transmit buffers are shared across BSSIDs. If there are many WLANS (SSIDs) configured on an AP, then the voice WLAN on an AP may be unable to buffer for a single multicast audio stream, causing audio problems.
The config wlan multicast buffer AireOS command can be used to allocate additional buffers for one or two WLANs.
Deeper dive
By default, 50 multicast buffers are available on each radio, to be shared across all WLANs (verified on an AP3502e running 8.3.121.0). Thus, with 4 SSIDs enabled, 12 multicast buffers are available per multicast queue (i.e. per WLAN):
AP3502e# show controller dot11radio0 | begin --\ In-Prog
---- Active ------ In-Progress --------------- Counts --------------
Cnt Quo Bas Max Cl Cnt Quo Bas Sent Discard Fail Retry Multi
Uplink 0 64 0 0 0 0 5 0 0 0 0 0 0
Voice 0 512 0 0 0 0 60 0 8 0 0 0 0
Video 0 1024 0 0 0 0 200 0 0 0 0 0 0
Best 0 1024 0 0 0 0 200 0 158499 0 0 5 2
MC0 0 0 0 0 0 0 12 0 0 0 0 0 0
MC1 0 0 0 0 0 0 12 0 0 0 0 0 0
MC2 0 0 0 0 0 0 12 0 0 0 0 0 0
MC3 0 0 0 0 0 0 12 0 8 0 0 0 0
MC4 0 0 0 0 0 0 0 0 0 0 0 0 0
MC5 0 0 0 0 0 0 0 0 0 0 0 0 0
MC6 0 0 0 0 0 0 0 0 0 0 0 0 0
MC7 0 0 0 0 0 0 0 0 0 0 0 0 0
MC8 0 0 0 0 0 0 0 0 0 0 0 0 0
MC9 0 0 0 0 0 0 0 0 0 0 0 0 0
MC10 0 0 0 0 0 0 0 0 0 0 0 0 0
MC11 0 0 0 0 0 0 0 0 0 0 0 0 0
MC12 0 0 0 0 0 0 0 0 0 0 0 0 0
MC13 0 0 0 0 0 0 0 0 0 0 0 0 0
MC14 0 0 0 0 0 0 0 0 0 0 0 0 0
MC15 0 0 0 0 0 0 0 0 0 0 0 0 0
Back 0 128 0 0 0 0 35 0 0 0 0 0 0
with 10 SSIDs enabled, only 5 multicast buffers are available per WLAN:
AP3502e# show controller dot11radio0 | begin --\ In-Prog
---- Active ------ In-Progress --------------- Counts --------------
Cnt Quo Bas Max Cl Cnt Quo Bas Sent Discard Fail Retry Multi
Uplink 0 64 0 0 0 0 5 0 0 0 0 0 0
Voice 0 512 0 0 0 0 60 0 5 0 0 0 0
Video 0 1024 0 0 0 0 200 0 0 0 0 0 0
Best 0 1024 0 0 0 0 200 0 148121 0 0 3 2
MC0 0 0 0 0 0 0 5 0 0 0 0 0 0
MC1 0 0 0 0 0 0 5 0 0 0 0 0 0
MC2 0 0 0 0 0 0 5 0 0 0 0 0 0
MC3 0 0 0 0 0 0 5 0 8 0 0 0 0
MC4 0 0 0 0 0 0 5 0 0 0 0 0 0
MC5 0 0 0 0 0 0 5 0 0 0 0 0 0
MC6 0 0 0 0 0 0 5 0 0 0 0 0 0
MC7 0 0 0 0 0 0 5 0 0 0 0 0 0
MC8 0 0 0 0 0 0 5 0 0 0 0 0 0
MC9 0 0 0 0 0 0 5 0 0 0 0 0 0
MC10 0 0 0 0 0 0 0 0 0 0 0 0 0
MC11 0 0 0 0 0 0 0 0 0 0 0 0 0
MC12 0 0 0 0 0 0 0 0 0 0 0 0 0
MC13 0 0 0 0 0 0 0 0 0 0 0 0 0
MC14 0 0 0 0 0 0 0 0 0 0 0 0 0
MC15 0 0 0 0 0 0 0 0 0 0 0 0 0
Back 0 128 0 0 0 0 35 0 0 0 0 0 0
With legacy powersave clients, the AP has to buffer multicasts till each DTIM beacon. With a DTIM of 1, this means that the multicasts must be buffered for up to 104 milliseconds. (With higher DTIM values, the multicasts would need to be buffered for multiple beacon intervals.)
A normal audio stream is transmitted as 20-millisecond samples - in other words, it flows at 50 packets per second. Thus, if a single audio stream needs to be buffered for 1/10 of a second (i.e. a beacon interval), the AP must be able to buffer up to 5 packets per audio stream.
With 15 SSIDs enabled on a radio, by default, each SSID's multicast buffer is only 3 packets. This means that, even with a single multicast audio stream, the voice samples will be dropped, causing garbled audio. If multiple concurrent multicast audio streams (or video streams!) are being transmitted, the results will be much worse.
The solution is to configure the following command on the multicast-enabled WLANs:
(WLC2504-2) >config wlan multicast buffer enable ?
<buffer number> Number of radio multicast buffers (30 .. 60)
(WLC2504-2) >config wlan multicast buffer enable 30 ?
<WLAN id> Enter WLAN Identifier between 1 and 16.
At most two WLANs can be configured with "wlan multicast buffer enable".
Here is an example, with 14 SSIDs enabled, and with "config wlan multicast buffer enable 60" configured for WLAN 1:
Transmit queues: Limit 2766 Current 0 In-Progress 0 ACQ inserts 47508 deletes 47508 reins 0
---- Active ------ In-Progress --------------- Counts --------------
Cnt Quo Bas Max Cl Cnt Quo Bas Sent Discard Fail Retry Multi
Uplink 0 64 0 0 0 0 5 0 0 0 0 0 0
Voice 0 512 0 0 0 0 60 0 2 0 0 0 0
Video 0 1024 0 0 0 0 200 0 0 0 0 0 0
Best 0 1024 0 0 0 0 140 0 47547 0 0 2 2
MC0 0 0 0 0 0 0 60 0 0 0 0 0 0
MC1 0 0 0 0 0 0 3 0 0 0 0 0 0
MC2 0 0 0 0 0 0 3 0 0 0 0 0 0
MC3 0 0 0 0 0 0 3 0 7 0 0 0 0
MC4 0 0 0 0 0 0 3 0 0 0 0 0 0
MC5 0 0 0 0 0 0 3 0 0 0 0 0 0
MC6 0 0 0 0 0 0 3 0 0 0 0 0 0
MC7 0 0 0 0 0 0 3 0 0 0 0 0 0
MC8 0 0 0 0 0 0 3 0 0 0 0 0 0
MC9 0 0 0 0 0 0 3 0 0 0 0 0 0
MC10 0 0 0 0 0 0 3 0 0 0 0 0 0
MC11 0 0 0 0 0 0 3 0 0 0 0 0 0
MC12 0 0 0 0 0 0 3 0 0 0 0 0 0
MC13 0 0 0 0 0 0 3 0 0 0 0 0 0
MC14 0 0 0 0 0 0 0 0 0 0 0 0 0
MC15 0 0 0 0 0 0 0 0 0 0 0 0 0
Back 0 128 0 0 0 0 35 0 0 0 0 0 0
Thus, WLAN 1, with 60 buffers, would be able to carry multicast streams for several audio streams, while the other WLANs would be able to buffer only 3 multicast frames per DTIM, and so would drop packets for even a single audio stream.
Components Used
This demonstration uses a Wireless LAN Controller running AireOS 8.3.121.0, with an 802.11n IOS AP (AP3502e.) Other lightweight IOS APs should work similarly; the multicast buffering scheme on AP-COS APs has not been verified.
Verify
During the multicast transmissions, first issue the following AP IOS exec command:
ap#terminal length 30
Then issue this command repetitively (assuming that the first radio is the one of interest):
show controller dot11radio0 | begin --\ In-Prog
Look at the deltas seen in the the "Sent" and "Discards" columns. If Discards increments rapidly, then the multicast buffering may be inadequate.