wireless-debugging-and-log-collection-on
wireless-debugging-and-log-collection-on
Controllers
Contents
Introduction
Prerequisites
Requirements
Components used
Background Information
Packet flow inside 9800 WLC
Always-on Tracing
Introduction
This document describes and provides an overview of all the Cisco IOS® XE features and capabilities
leveraged for troubleshooting Catalyst 9800.
Prerequisites
Requirements
Components used
This document covers 9800-CL, 9800-L, 9800-40 and 9800-80 controllers. It is mainly based on 17.3 Cisco
IOS® XE version.
Background Information
Cisco IOS® XE running on 9800 WLCs is essentially made up of a Linux Kernel (binOS) with Cisco IOS®
and all the wireless processes implemented as daemons.
All the process daemons can be bundled under the generic term Control Plane (CP) and are responsible for
Control and Provisioning of Access Points (CAPWAP), Mobility, Radio Resource Management (RRM).
Rogue Management, Network Mobility Service protocol (NMSP) that are destined to and from the 9800
WLC.
Data Plane (DP) refers to the components that forward data on 9800 WLC.
On all iterations of 9800 (9800-40, 9800-80, 9800-CL, 9800-SW,9800-L), Control Plane remains fairly
common.
However, Data Plane varies with 9800-40 and 9800-80 that use hardware Quantum Flow processor (QFP)
complex similar to ASR1k while 9800-CL and 9800-L uses software implementation of Cisco Packet
Processor (CPP).
9800-SW simply leverages the Doppler chipset on Catalyst 9k series switches for data forwarding.
When a packet enters the 9800 WLC from physical ports, if it is determined to be control traffic, it is punted
to the corresponding Control Plane Processes.
For an AP join, this would be all the capwap and dtls exchange sourced from AP. In case of client join, this
would be all the traffic sourced from client until the client goes to RUN state..
As the various daemons process the incoming traffic, the resulting return traffic (capwap response, dot11,
dot1x, dcp response) sourced from 9800 WLC to be sent to the client is injected back into the data plane to
be sent out the physical port.
As we process AP joins, client join, mobility exchanges, data plane needs to be programmed so it can handle
data traffic forwarding.
This occurs with multiple components being programmed sequentially over the programming path indicated
in the image.
Cisco IOS® XE provides a versatile tool set to trace the packet from the moment it enters 9800 WLC until
the processed traffic leaves the box.
The next section introduces these tools along with the commands used to invoke these tools from the
command line interface (CLI).
Syslog
Logs generated by the 9800 WLC is the first means to verify the general health of the system.
Any violation of the predefined threshold for system resources like CPU, memory, buffers are reported into
the log.
Also, any errors generated by any subsystems get written into logs. To view the logs, navigate to
Troubleshooting > Syslog
# show logging
This output shows general logs as well as some wireless-specifics logs. However, contrary to legacy Cisco
IOS®, no wireless debugging typically makes its way to this logging output.
Note: If WLC9800 is configured to redirect these logs to an external syslog server, then you need to
check the logs on external syslog server as well.
Always-on Tracing
Every control plane process on the WLC9800 is constantly logging at logging level of Notice to its own
dedicated buffer. This is termed as always-on tracing.
This is a unique capability that allows you to get contextual data on a failure that has occurred without
mandating the failure condition be reproduced.
For example, if you are familiar with AireOS, for any client connectivity troubleshooting, you would need to
enable debugs and reproduce the client connectivity problem state to identify the root cause.
With always-on tracing, you can look back to already captured traces and identify if it is common root
cause. Depending on volume of logs generated, we can look back several hours to several days.
Now, while the traces are logged per individual process, it is possible to view them wholistically for a
particular context of interest like client mac or AP mac or AP ip address. In order to do so, run the command
By default, this command only goes back 10 minutes in time to generate and decode the logs. You can chose
to go further back in time with :
# show logging profile wireless start last <number> [minutes|hours|days] filter mac to-file bootflash:
Note: There are multiple filtering options on these CLIs including module, logging level, start
timestamp and so on. To view and explore these options, run the command
Conditional Debugging allows the ability to enable debug level logging for specific features for the
conditions of interest.
RadioActive tracing takes it a step further by adding the ability to conditionally print debug information
across processes, threads for the condition of interest.
Note: On 16.12, radioactive tracing is only implemented for troubleshooting AP join with AP radio
and ethernet mac addresses, client join with client mac address as well mobility issues with mobility
peer ip and CMX connectivity with the CMX ip address as conditions of interest.
Note: MAC address vs IP address as condition provides different outputs as different processes are
aware of different identifiers for the same network entity (AP or client or mobility peer).
With client connectivity, as an example to troubleshoot, conditional debug runs for client mac to get end to
end view at control plane.
Click Add and enter a client or AP mac address that you want to troubleshoot. As of 16.12, only mac
addresses can be added through the GUI. You can add IP address through CLI.
You can add several mac addresses to track. When you are ready to start the radioactive tracing, click start.
Once started, debug logging are written to disk about any control plane processing related the tracked mac
addresses.
When you reproduced the issue you want to troubleshoot, click Stop.
For each mac address debugged, you can generate a log file collating all the logs pertaining to that mac
address by clicking Generate.
Chose how long back you want your collated log file to go and click Apply to Device.
You can now download the file by clicking the small icon next to the file name. This file is present in the
bootflash drive of the controller and can also be copied out of the box through CLI.
# show debugging
These debugs do not print any output on terminal session but store the debug output file to flash to be
retrieved and analyzed after. The file is saved with the naming convention ra_trace_*
One advantage is that the same command can be used to troubleshoot AP join issues (input AP radio mac
and ethernet mac), client connectivity issues (input client mac), mobility tunnel issue (input peer ip), client
roaming issues (input client mac).
In other words, you do not have to remember multiple commands like debug capwap, debug client, debug
mobility and so on.
Note: debug wireless also allows pointing to an FTP-server and running even more verbose logging
with keyword internal. We do not recommend these at this time, as there are some issues being ironed
out.
# more bootflash:ra_trace_MAC_*.log
In order to redirect the debug output to an external server for offline analysis, run the command
There is a much more verbose view of the same debug log levels. in order to see this verbose view, run the
command
To disable debugging for specific context or before the configured or default monitor time is up, run the
command.
For the use cases and processes, not implemented for radioactive tracing, you can get debug level traces. To
set debug level on specific process, use the command
# set platform software trace <PROCESS_NAME> wireless chassis active R0 { module_name | all-modules }
Packet-Trace feature provides a detailed view of this Cisco IOS® XE processing done at dataplane and the
decision made on whether to punt, forward, drop or consume the packet.
This feature on WLC 9800 works exactly same as the implementation on ASR!k.
Packet Tracer on 9800 WLC provides three levels of inspection same as ASR1K.
• Statistics - Provides count of packets that enter and leave the networking processor
• Summary -
○ This is collected for a finite number of packet that match specific condition of interest.
○ The summary output indicates ingress and egress interfaces, lookup decision made by the data
plane and also tracks punt, drop and inject packets, if any.
○This output provides succinct view of the dataplane processing
• Path Data - This provides the most detailed view of DP packet handling. Collected for finite number
of packets, it includes conditional debugging id that can be used to correlate DP packet to control
plane debugs, timestamp as well as feature specific path-trace data. This detailed view has two
optional capabilities
○Packet copy enables you to copy ingress and egress packets at various layers of the packet
(layer2, layer 3 and layer 4)
○Feature Invocation array (FIA) is the sequential list of features that are executed on the packet
by the data plane. These features are derived from the default and user enabled configuration on
WLC 9800
For detailed explanation of the feature and suboptions, refer to Cisco IOS XE Datapath Packet Trace Feature
For wireless workflows like AP join, client connectivity, and so on, tracing the uplink bidirectionally
Caution: The dataplane packet-tracer only parses outer CAPWAP header. So, conditions like wireless
client mac do not yield useful output.
# debug platform condition { interface | mac | ingress | egress | both | ipv4 | ipv6 | mpls | match }
Warning: Both the commands - debug platform condition feature as well as debug platform condition
mac aaaa.bbbb.cccc are meant for control plane packet tracing and do not return any dataplane packet
traces.
Step 3. Enable packet-tracer for a finite number of packets. This packet number is defined as a power of 2 in
the range of 16 - 8192. By default, both the summary and feature data are captured. Optionally, you can
choose to only get a summary view if you use summary-only sub-option. You have also have sub-options
available to get fia trace, defining packet size in bytes, trace punt, inject or drop packets. and so on.
Step 4. (Optionally) You can copy and dump the packets as they are traced
Step 6. In order to view if the packet-trace is collecting any output, verify statistics
Step 7. In order to view the output of the packet-trace, run the command
Step 8. (Optional) You can export packet dump for offline analysis by Cisco TAC
# show platform packet-trace packet all | redirect { bootflash: | tftp: | ftp: } pactrac.txt
Compared to AireOS, instead fo relying on packet capturing and traffic mirroring capabilities on uplink
switch, 9800 WLC allows for pcap capture on the box itself.
On 9800, this capture can be setup both from Command Line Interface (CLI) as well as on the Graphical
User Interface (GUI).
To configure via GUI, navigate to Troubleshooting > Packet Capture > +Add
Step 1. Define name of the packet capture. Maximum of 8 characters is allowed.
Step 3. Check the box to Monitor Control Traffic if you want to see traffic punted to system CPU and
injected back into the data plane
Step 5. Define limit, either by duration which allows a range of 1 - 1000000 seconds or by number of
packets which allows range of 1 - 100000 packets, as desired
Step 6. Choose the interface from list of interfaces in the left column and selecting the arrow to move it to
the right column
Step 9. You can let the capture run to the defined limit. To manually stop the capture, select Stop.
Step 10. Once stopped, an Export button becomes available to click with the option to download capture
file (.pcap) on local desktop via https or TFTP server or FTP server or local system harddisk or flash.
Note: CLI provides a little more granularity of options such as Limit by. GUI is sufficient to capture
packets for common use cases.
To configure via CLI:
Associate a filter. The filter can be specified inline, or an ACL or class-map can be referenced.
In this example it’s the ACL to match the traffic between the 2 ip addresses of the 9800 and another WLC
5520. Typical scenario for mobility troubleshooting:
conf t
If you want the capture to run in a circular buffer, it gives some time to notice the problem and then stop the
capture and save it.
If you set it to 50MB buffer for example. It takes maximum 50MB of disk on the 9800 and its pretty large to
capture several minutes of data in the hope that you get the occurrence of the problem.
You can retrieve the capture from the GUI > Troubleshooting > Packet Capture > Export.
Or upload to a server from CLI. Example via ftp:
Once the necessary data has been collected, remove the capture:
You can verify the alarms that cause the LED to go red with the show facility-alarm status command