Storm Control & Traffic Shaping — Protecting Switches from Broadcast, Multicast & Unicast Floods
A broadcast storm is one of the most destructive events that can occur in a switched network — and one of the easiest to trigger accidentally. A single misconfigured host continuously broadcasting ARP requests, a looping network interface card (NIC), or a Spanning Tree failure can generate millions of frames per second. Every switch in the broadcast domain forwards these frames out every port in the VLAN, consuming 100% of available bandwidth within milliseconds. Routers, servers, and all connected devices are overwhelmed processing frames they did not request. The network collapses.
Cisco Catalyst switches provide storm control as a hardware-level safeguard: a configurable threshold on each port that monitors the rate of broadcast, multicast, and unknown unicast traffic. When the rate exceeds the threshold, the switch either drops the excess frames (filter action) or shuts the port down (shutdown action) — stopping the storm at its source before it propagates through the network. Storm control operates in hardware at line rate with no performance impact on normal traffic below the threshold.
This lab also covers traffic shaping and traffic policing concepts — the QoS mechanisms used on router interfaces to control bandwidth consumption in the WAN direction. While storm control protects against unexpected traffic bursts at Layer 2, traffic shaping and policing provide deliberate rate-limiting at Layer 3 for Service Level Agreement (SLA) enforcement, congestion management, and cost control on metered links. For the broader QoS framework that shaping fits into see MQC (Modular QoS CLI) Basics and DSCP Marking & Classification. For related Layer 2 security hardening alongside storm control see Private VLANs and DHCP Snooping.
1. Core Concepts — Storms, Storm Control, and Traffic Shaping
What Causes a Network Storm?
THREE TYPES OF STORMS STORM CONTROL PROTECTS AGAINST: ┌──────────────────────────────────────────────────────────────────────┐ │ BROADCAST STORM │ │ Source: ARP floods, looping NICs, STP failure, DHCP storms, │ │ broadcast-based malware (NetBIOS, smurf amplification) │ │ Behaviour: Frame sent to FF:FF:FF:FF:FF:FF — every switch in the │ │ broadcast domain forwards it out every port in the VLAN │ │ Impact: Saturates every port, every device processes every frame │ │ CPU utilisation spikes to 100% across all hosts │ │ Detection: storm-control broadcast level [rising] [falling] │ └──────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────┐ │ MULTICAST STORM │ │ Source: Misconfigured multicast applications, mDNS floods, │ │ IGMP snooping disabled (all multicast treated as broadcast) │ │ Behaviour: Frame sent to 01:xx:xx:xx:xx:xx — flooded to all ports │ │ in VLAN when IGMP snooping is not controlling it │ │ Impact: Similar to broadcast — all ports flooded with unwanted │ │ multicast, high CPU on hosts receiving unwanted streams │ │ Detection: storm-control multicast level [rising] [falling] │ └──────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────┐ │ UNKNOWN UNICAST (FLOODING) STORM │ │ Source: MAC table overflow attack (filling MAC table with fake │ │ MACs forces all unicast to flood), link flapping causing │ │ MAC table aging, asymmetric routing causing unknown DA │ │ Behaviour: Frame with unknown destination MAC is flooded to all │ │ ports in the VLAN — same as broadcast from switch's POV │ │ Impact: Confidential unicast traffic visible on all ports (security │ │ risk), bandwidth saturation, CPU impact │ │ Detection: storm-control unicast level [rising] [falling] │ └──────────────────────────────────────────────────────────────────────┘
Storm Control — How It Works
MEASUREMENT WINDOW:
Storm control measures traffic over a 1-second hardware window.
Within each 1-second interval, the switch counts the number of
broadcast/multicast/unicast frames received on the port.
THRESHOLD COMPARISON:
At the end of each window, the measured rate is compared to the
configured rising threshold.
If rate > rising threshold → ACTION triggered (drop or shutdown)
If rate < falling threshold → Storm cleared (port re-enabled)
RISING vs FALLING THRESHOLDS:
Rising threshold: the level at which storm control activates
Falling threshold: the level at which storm control deactivates
(hysteresis — prevents rapid on/off cycling)
If only rising threshold is specified, falling = rising (no hysteresis)
THRESHOLD UNITS (three measurement methods):
Percentage: % of the port's configured bandwidth
storm-control broadcast level 20 (20% of port BW)
BPS: bits per second absolute value
storm-control broadcast level bps 1000000 (1 Mbps)
PPS: packets per second (frames per second)
storm-control broadcast level pps 1000 (1000 pps)
ACTIONS (what happens when threshold is exceeded):
Default (no action configured): drop excess frames silently
shutdown: err-disable the port (must be manually re-enabled
or auto-recovery configured)
trap: send SNMP trap — log the event but continue forwarding
(no traffic drop)
shutdown + trap: err-disable AND send SNMP trap
Traffic Shaping vs Traffic Policing — Key Distinctions
| Feature | Traffic Policing | Traffic Shaping |
|---|---|---|
| Action on excess traffic | Drop or re-mark immediately — no buffering | Buffer (queue) excess traffic, release when rate falls below limit |
| Burst handling | Bursts above the rate are dropped immediately — hard enforcement | Bursts are absorbed into the queue — smoothed output rate |
| Latency impact | No added latency (drop/forward decision is immediate) | Adds latency — buffered packets wait in queue |
| Typical use | ISP ingress policing, access layer enforcement, protecting against abuse | WAN egress rate limiting, conforming to committed information rate (CIR) |
| IOS mechanism | police rate [bps] burst [bytes] in policy-map |
shape average [bps] in policy-map |
| Direction | Both ingress and egress | Egress only (you cannot shape incoming traffic) |
| Token bucket | Single token bucket — tokens not accumulated beyond burst | Dual token bucket (Bc + Be) — committed + excess burst |
| Storm control relationship | Storm control is ingress policing at Layer 2 (hardware-level) | Shaping is Layer 3 software-based egress queuing |
2. Lab Topology
┌──────────────────────────────────────────────────┐
│ NetsTuts_SW1 (Catalyst 3560/3750) │
│ │
Gi0/1 ──── R1 │ Gi0/1 UPLINK — Promiscuous / Trusted uplink │
(Trusted) │ No storm control (or high threshold) │
│ │
Fa0/1 ── PC-A │ Fa0/1 ACCESS — User workstation (VLAN 10) │
VLAN 10 │ Storm control: broadcast 20%, MC 10% │
│ Action: shutdown + trap │
Fa0/2 ── PC-B │ Fa0/2 ACCESS — User workstation (VLAN 10) │
VLAN 10 │ Same storm control policy as Fa0/1 │
│ │
Fa0/3 ── SRV │ Fa0/3 ACCESS — Server port (VLAN 20) │
VLAN 20 │ Storm control: broadcast 10%, MC 5% │
│ Action: shutdown (strict) │
Fa0/4 ── IoT │ Fa0/4 ACCESS — IoT / High-risk device (VLAN 30)│
VLAN 30 │ Storm control: broadcast 5%, MC 3%, │
│ unicast 10% (tightest policy) │
│ Action: shutdown + trap │
Fa0/5 ── SFP │ Fa0/5 TRUNK — Inter-switch uplink │
(Trunk) │ Storm control: broadcast 30% (relaxed │
│ threshold for aggregated trunk traffic) │
└──────────────────────────────────────────────────┘
Storm Control Policies:
User access ports (Fa0/1, Fa0/2): moderate thresholds, action=shutdown+trap
Server ports (Fa0/3): strict thresholds, action=shutdown
IoT / risk ports (Fa0/4): tightest thresholds, all three storm types
Trunk uplinks (Fa0/5): relaxed thresholds, no shutdown
Trusted uplinks (Gi0/1): no storm control (or very high threshold)
3. Step 1 — Baseline Verification Before Configuration
Check Default Storm Control State
! ── By default, storm control is DISABLED on all ports ──────────
NetsTuts_SW1#show storm-control
Interface Filter State Upper Lower Current
--------- ------------- ----- ----- -------
! ── Empty output — no storm control configured anywhere ──────────
! ── Check a specific interface ───────────────────────────────────
NetsTuts_SW1#show storm-control FastEthernet0/1
Interface Filter State Upper Lower Current
--------- ------------- ----- ----- -------
Fa0/1 Forwarding 0.00% 0.00% 0.00% broadcast
Fa0/1 Forwarding 0.00% 0.00% 0.00% multicast
Fa0/1 Forwarding 0.00% 0.00% 0.00% unicast
! ── 0.00% / 0.00% = storm control disabled (no threshold set) ────
! ── "Forwarding" = normal forwarding state ────────────────────────
! ── Check interface counters before making changes ───────────────
NetsTuts_SW1#show interfaces FastEthernet0/1
FastEthernet0/1 is up, line protocol is up (connected)
Hardware is Fast Ethernet, address is 0c1a.2b3c.0001
...
5 minute input rate 1234000 bits/sec, 145 packets/sec
5 minute output rate 456000 bits/sec, 87 packets/sec
123456 packets input, 98765432 bytes, 0 no buffer
Received 5432 broadcasts (2134 multicasts) ← current broadcast count
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 input packets with dribble condition detected
0 packets output, 0 bytes, 0 underruns
! ── Note existing broadcast count as baseline ────────────────────
show interfaces broadcast counter
gives a cumulative count — use the 5-minute rate from
show interfaces to understand the current traffic
mix before setting thresholds.
Understand the Port Bandwidth for Threshold Calculation
! ── Check interface bandwidth (used as base for % thresholds) ──── NetsTuts_SW1#show interfaces FastEthernet0/1 | include BW MTU 1500 bytes, BW 100000 Kbit/sec, DLY 100 usec, ! ── BW = 100 Mbps for FastEthernet ! ── 20% threshold = 20% of 100 Mbps = 20 Mbps broadcast allowed NetsTuts_SW1#show interfaces GigabitEthernet0/1 | include BW MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec, ! ── BW = 1 Gbps for GigabitEthernet ! ── 20% threshold = 20% of 1000 Mbps = 200 Mbps broadcast allowed
bps or pps
threshold format instead.
4. Step 2 — Configure Storm Control on User Access Ports
Fa0/1 and Fa0/2 — User Workstation Ports (VLAN 10)
! ══════════════════════════════════════════════════ ! Fa0/1 — User workstation port, moderate policy ! ══════════════════════════════════════════════════ NetsTuts_SW1(config)#interface FastEthernet0/1 NetsTuts_SW1(config-if)#description PC-A-VLAN10-Storm-Control ! ── Broadcast: rising 20%, falling 10% (hysteresis) ───────────── NetsTuts_SW1(config-if)#storm-control broadcast level 20 10 ! ^^ ^^ ! rising falling threshold ! ── Multicast: rising 10%, falling 5% ─────────────────────────── NetsTuts_SW1(config-if)#storm-control multicast level 10 5 ! ── Action: shutdown the port + send SNMP trap ─────────────────── NetsTuts_SW1(config-if)#storm-control action shutdown NetsTuts_SW1(config-if)#storm-control action trap NetsTuts_SW1(config-if)#exit ! ══════════════════════════════════════════════════ ! Fa0/2 — Apply same policy (or use range command) ! ══════════════════════════════════════════════════ NetsTuts_SW1(config)#interface FastEthernet0/2 NetsTuts_SW1(config-if)#description PC-B-VLAN10-Storm-Control NetsTuts_SW1(config-if)#storm-control broadcast level 20 10 NetsTuts_SW1(config-if)#storm-control multicast level 10 5 NetsTuts_SW1(config-if)#storm-control action shutdown NetsTuts_SW1(config-if)#storm-control action trap NetsTuts_SW1(config-if)#exit ! ── Apply to a range of ports simultaneously ───────────────────── NetsTuts_SW1(config)#interface range FastEthernet0/1 - 2 NetsTuts_SW1(config-if-range)#storm-control broadcast level 20 10 NetsTuts_SW1(config-if-range)#storm-control multicast level 10 5 NetsTuts_SW1(config-if-range)#storm-control action shutdown NetsTuts_SW1(config-if-range)#storm-control action trap NetsTuts_SW1(config-if-range)#exit
level 20), the falling threshold equals the rising
threshold (20/20), which can cause rapid oscillation: the port
shuts down when broadcast exceeds 20%, the shutdown stops the
storm, the rate immediately drops below 20%, the port re-enables,
broadcasts resume, rate exceeds 20% again, port shuts down again.
The falling threshold prevents this flapping by requiring the
rate to drop significantly before re-enabling.
Alternative Threshold Formats — BPS and PPS
! ── BPS format — absolute bits per second ──────────────────────── NetsTuts_SW1(config)#interface FastEthernet0/1 NetsTuts_SW1(config-if)#storm-control broadcast level bps 10000000 5000000 ! ^^ rising falling ! 10 Mbps rising, 5 Mbps falling ! ── PPS format — packets (frames) per second ───────────────────── NetsTuts_SW1(config-if)#storm-control broadcast level pps 1000 500 ! ^^ 1000 pps rising, 500 pps falling ! ── Common use cases for each format: ! Percentage: Simple relative limits — good for mixed-speed ports ! and when you want "20% of whatever bandwidth the port has" ! BPS: Absolute rate limits — good for high-speed GigE/10GigE ! ports where percentage produces very high absolute values ! (20% of 10Gbps = 2Gbps broadcast — probably too much) ! PPS: Frame count limits — good for protecting CPU-bound ! devices (routers, firewalls) that process frames in ! hardware at a maximum packets-per-second rate
5. Step 3 — Configure Storm Control on Server and IoT Ports
Fa0/3 — Server Port (VLAN 20) — Strict Policy
! ── Server ports should have tighter thresholds ────────────────── ! ── Servers rarely generate legitimate broadcast storms ─────────── NetsTuts_SW1(config)#interface FastEthernet0/3 NetsTuts_SW1(config-if)#description Server-VLAN20-Strict NetsTuts_SW1(config-if)#storm-control broadcast level 10 5 NetsTuts_SW1(config-if)#storm-control multicast level 5 2 ! ── Action: shutdown only (no SNMP trap to reduce noise on servers ! that may generate moderate multicast for heartbeat traffic) ─── NetsTuts_SW1(config-if)#storm-control action shutdown NetsTuts_SW1(config-if)#exit
Fa0/4 — IoT / High-Risk Device Port (VLAN 30) — Tightest Policy
! ── IoT devices are high-risk storm sources — malware, loops, ──── ! ── misconfigured firmware can generate floods quickly ──────────── NetsTuts_SW1(config)#interface FastEthernet0/4 NetsTuts_SW1(config-if)#description IoT-VLAN30-Tight-Policy ! ── All three storm types protected ────────────────────────────── NetsTuts_SW1(config-if)#storm-control broadcast level 5 2 NetsTuts_SW1(config-if)#storm-control multicast level 3 1 NetsTuts_SW1(config-if)#storm-control unicast level 10 5 ! ── Unicast flooding protection is important for IoT ───────────── ! ── IoT malware often uses MAC table flooding as an attack vector ─ ! ── (fills MAC table → all unicast floods → traffic interception) ─ NetsTuts_SW1(config-if)#storm-control action shutdown NetsTuts_SW1(config-if)#storm-control action trap NetsTuts_SW1(config-if)#exit
unicast
keyword) is the most underused of the three types.
Unknown unicast flooding occurs when the destination MAC is
not in the switch's MAC address table — the switch floods
the frame to all ports in the VLAN. A MAC address table
overflow attack deliberately sends frames with thousands
of spoofed source MAC addresses, filling the MAC table
(typically 8,000–32,000 entries) until it overflows.
Once full, the switch cannot learn new MACs and starts
flooding all unicast traffic — turning the switch into
a hub. An attacker connected to any port in the VLAN
can then capture all traffic intended for other devices.
Unknown unicast storm control detects and stops this
attack by rate-limiting the flooding rate. For direct
MAC address-based port protection see
Port Security & Sticky MAC.
Fa0/5 — Inter-Switch Trunk — Relaxed Policy
! ── Trunk ports carry aggregated traffic from many VLANs ───────── ! ── Normal broadcast rates are higher on trunks — relax threshold ─ ! ── Shutdown action is NOT appropriate for trunk uplinks ────────── ! ── (shutting down a trunk brings down the entire connected segment) NetsTuts_SW1(config)#interface FastEthernet0/5 NetsTuts_SW1(config-if)#description Trunk-to-SW2-Storm-Relaxed NetsTuts_SW1(config-if)#storm-control broadcast level 30 20 NetsTuts_SW1(config-if)#storm-control multicast level 20 10 ! ── Action: trap only — log the event but DO NOT shut down trunk ── NetsTuts_SW1(config-if)#storm-control action trap NetsTuts_SW1(config-if)#exit
storm-control action shutdown on a
trunk uplink is a classic misconfiguration. A legitimate
traffic burst (large file transfer, video multicast, backup
job) could trigger the threshold and shut down the trunk port,
disconnecting all downstream switches. On trunk ports,
use trap only — or apply storm control
without any action (drops excess silently). If the upstream
trunk is truly experiencing a storm-level broadcast event,
the root cause is almost always a loop (STP failure) or a
connected device — address the root cause rather than
shutting the trunk.
6. Step 4 — err-disable and Auto-Recovery Configuration
When storm control triggers the shutdown action,
the port enters err-disable state — it is effectively shut down
by the system and will not return to service until manually
re-enabled (or until auto-recovery is configured). Understanding
err-disable is critical for production deployments.
What Happens When Storm Control Triggers Shutdown
! ── Console message when storm control shuts a port down ───────── %STORM_CONTROL-3-SHUTDOWN: A packet storm was detected on Fa0/1. The interface has been disabled. %LINK-3-UPDOWN: Interface FastEthernet0/1, changed state to down %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down ! ── The port is now in err-disable state ───────────────────────── NetsTuts_SW1#show interfaces FastEthernet0/1 FastEthernet0/1 is err-disabled ← ❌ err-disable state NetsTuts_SW1#show interfaces FastEthernet0/1 status Port Name Status Vlan Duplex Speed Type Fa0/1 PC-A-VLAN10 err-disabled 10 auto auto 10/100BaseTX ! ── Verify err-disable reason ──────────────────────────────────── NetsTuts_SW1#show errdisable recovery ErrDisable Reason Timer Status ----------------- -------------- arp-inspection Disabled bpduguard Disabled channel-misconfig (STP) Disabled dhcp-rate-limit Disabled dtp-flap Disabled l2ptguard Disabled link-flap Disabled pagp-flap Disabled psecure-violation Disabled security-violation Disabled storm-control Disabled ← currently disabled udld Disabled vmps Disabled ... Timer interval: 300 seconds
Manual Recovery — Re-enable the Port
! ── Manual re-enable: shut → no shut ───────────────────────────── NetsTuts_SW1(config)#interface FastEthernet0/1 NetsTuts_SW1(config-if)#shutdown NetsTuts_SW1(config-if)#no shutdown NetsTuts_SW1(config-if)#exit ! ── Verify port is back up ─────────────────────────────────────── NetsTuts_SW1#show interfaces FastEthernet0/1 status Port Name Status Vlan Duplex Speed Fa0/1 PC-A-VLAN10 connected 10 a-full 100 ! ── Port is operational again ──────────────────────────────────── ! ── If the storm source is still active, the port will immediately ! ── go back into err-disable when the threshold is exceeded again ─
Automatic err-disable Recovery
! ── Enable automatic recovery for storm-control err-disable ────── ! ── After the timer expires, the port automatically tries to come up NetsTuts_SW1(config)#errdisable recovery cause storm-control NetsTuts_SW1(config)#errdisable recovery interval 60 ! ^^ ! recovery attempt after 60 seconds (default 300) ! ── Verify auto-recovery is configured ─────────────────────────── NetsTuts_SW1#show errdisable recovery ErrDisable Reason Timer Status ----------------- -------------- storm-control Enabled ← ✓ now enabled ... Timer interval: 60 seconds ! ── Recommended approach for access ports: ! - Enable auto-recovery so a storm source (e.g., infected PC) ! causes a brief outage rather than permanent shutdown ! - The port comes back after 60 seconds ! - If the storm is still happening, it shuts down again ! - SNMP trap alerts the NOC to investigate ! ! ── NOT recommended for server ports: ! - Servers should be manually investigated before re-enabling ! - A misconfigured server generating a storm should be fixed, ! not automatically re-enabled every 60 seconds
7. Traffic Shaping & Policing on Router Interfaces (MQC)
While storm control operates at Layer 2 on switch ports, traffic shaping and policing operate at Layer 3 on router interfaces — typically on WAN-facing links where bandwidth is limited and must be managed carefully. Both use the Modular QoS CLI (MQC) framework: define a class-map to classify traffic, a policy-map to apply the rate action, and a service-policy to attach it to an interface.
Traffic Shaping — Smooth Egress Rate
! ══════════════════════════════════════════════════════
! Scenario: WAN link is 10 Mbps committed (CIR) but
! physical interface is 100 Mbps FastEthernet.
! Shape egress to 10 Mbps to avoid dropping at the ISP.
! ══════════════════════════════════════════════════════
! ── Step 1: Define a class-map for traffic to be shaped ──────────
NetsTuts_R1(config)#class-map match-any ALL-TRAFFIC
NetsTuts_R1(config-cmap)#match any
NetsTuts_R1(config-cmap)#exit
! ── Step 2: Create a policy-map with shape average ───────────────
NetsTuts_R1(config)#policy-map SHAPE-TO-10MBPS
NetsTuts_R1(config-pmap)#class ALL-TRAFFIC
NetsTuts_R1(config-pmap-c)#shape average 10000000
! ^^^^^^^^
! 10,000,000 bps = 10 Mbps
! (value is always in bits per second)
NetsTuts_R1(config-pmap-c)#exit
NetsTuts_R1(config-pmap)#exit
! ── Step 3: Apply to WAN interface (egress direction) ────────────
NetsTuts_R1(config)#interface Serial0/0/0
NetsTuts_R1(config-if)#description WAN-Link-to-ISP
NetsTuts_R1(config-if)#service-policy output SHAPE-TO-10MBPS
NetsTuts_R1(config-if)#exit
! ── Verify shaping ───────────────────────────────────────────────
NetsTuts_R1#show policy-map interface Serial0/0/0
Serial0/0/0
Service-policy output: SHAPE-TO-10MBPS
Class-map: ALL-TRAFFIC (match-any)
0 packets, 0 bytes
5 minute offered rate 0000 bps, drop rate 0000 bps
Match: any
Traffic Shaping
Target/Average Byte Sustain Excess Interval Increment
Bit Rate Limit bits/int bits/int (ms) (bytes)
10000000/10000000 18750 12500 0 100 15625
↑
Shaping to 10 Mbps confirmed
Packets Matched : 0
Bytes Matched : 0
Packets Delayed : 0
Bytes Delayed : 0
Shaping Active : false
Traffic Policing — Hard Rate Enforcement
! ══════════════════════════════════════════════════════
! Scenario: Police inbound traffic from a customer to
! their contracted 5 Mbps CIR. Traffic above CIR
! is dropped. Traffic above CIR + burst is dropped.
! ══════════════════════════════════════════════════════
! ── Class-map to match the customer's traffic ────────────────────
NetsTuts_R1(config)#class-map match-any CUSTOMER-TRAFFIC
NetsTuts_R1(config-cmap)#match access-group name CUSTOMER-ACL
NetsTuts_R1(config-cmap)#exit
NetsTuts_R1(config)#ip access-list extended CUSTOMER-ACL
NetsTuts_R1(config-ext-nacl)#permit ip 10.10.10.0 0.0.0.255 any
NetsTuts_R1(config-ext-nacl)#exit
! ── Policy-map: police at 5 Mbps CIR, 10 KB burst ────────────────
NetsTuts_R1(config)#policy-map POLICE-5MBPS
NetsTuts_R1(config-pmap)#class CUSTOMER-TRAFFIC
NetsTuts_R1(config-pmap-c)#police rate 5000000 bps burst 10000 byte
! ^^^^^^^ ^^^^^
! 5 Mbps CIR 10 KB burst (Bc)
NetsTuts_R1(config-pmap-c)# conform-action transmit
! ↑ traffic within CIR: forward
NetsTuts_R1(config-pmap-c)# exceed-action drop
! ↑ traffic above CIR: drop
NetsTuts_R1(config-pmap-c)#exit
NetsTuts_R1(config-pmap)#exit
! ── Apply inbound (police ingress traffic from customer) ─────────
NetsTuts_R1(config)#interface GigabitEthernet0/1
NetsTuts_R1(config-if)#description Customer-Facing-Port
NetsTuts_R1(config-if)#service-policy input POLICE-5MBPS
NetsTuts_R1(config-if)#exit
! ── Verify policing ──────────────────────────────────────────────
NetsTuts_R1#show policy-map interface GigabitEthernet0/1 input
GigabitEthernet0/1
Service-policy input: POLICE-5MBPS
Class-map: CUSTOMER-TRAFFIC (match-any)
1234567 packets, 987654321 bytes
5 minute offered rate 6250000 bps, drop rate 1250000 bps
Match: access-group name CUSTOMER-ACL
1234567 packets, 987654321 bytes
police:
rate 5000000 bps, burst 10000 bytes
conformed 987654 packets, 617034000 bytes; actions: transmit
exceeded 246789 packets, 246789000 bytes; actions: drop
violated 0 packets, 0 bytes; actions: drop
exceed-action set-dscp-transmit
af11 rather than drop — marking the excess traffic
as lower-priority and allowing it through if bandwidth
permits, rather than hard-dropping it.
Shaping with Burst — Tc, Bc, Be Parameters
! ── Advanced shaping with explicit burst parameters ────────────── NetsTuts_R1(config)#policy-map SHAPE-ADVANCED NetsTuts_R1(config-pmap)#class ALL-TRAFFIC NetsTuts_R1(config-pmap-c)#shape average 10000000 12500 12500 ! ^^^^^^^^^ ^^^ ^^^ ! CIR (10 Mbps) Bc Be ! (bytes committed burst) ! (bytes excess burst) ! ── Token Bucket Model Explained: ! CIR = 10 Mbps = 10,000,000 bps ! Tc = timing interval = Bc/CIR = 12500 / 10000000 = 0.00125s = 1.25ms ! In each Tc interval, a 'token' of Bc bytes is available to send ! Unused tokens accumulate up to Bc + Be for burst capability ! ! Practical result: ! Normal traffic: smoothly shaped to 10 Mbps average rate ! Burst allowed: up to Bc + Be = 25000 bytes in one Tc interval ! before shaping kicks back in NetsTuts_R1(config-pmap-c)#exit NetsTuts_R1(config-pmap)#exit
8. Step 5 — Full Verification
show storm-control — Primary Verification Command
! ── Show all interfaces with storm control configured ───────────── NetsTuts_SW1#show storm-control Interface Filter State Upper Lower Current --------- ------------- ----- ----- ------- Fa0/1 Forwarding 20.00% 10.00% 0.31% broadcast Fa0/1 Forwarding 10.00% 5.00% 0.08% multicast Fa0/2 Forwarding 20.00% 10.00% 0.28% broadcast Fa0/2 Forwarding 10.00% 5.00% 0.06% multicast Fa0/3 Forwarding 10.00% 5.00% 0.12% broadcast Fa0/3 Forwarding 5.00% 2.00% 0.03% multicast Fa0/4 Forwarding 5.00% 2.00% 0.09% broadcast Fa0/4 Forwarding 3.00% 1.00% 0.02% multicast Fa0/4 Forwarding 10.00% 5.00% 0.15% unicast Fa0/5 Forwarding 30.00% 20.00% 4.72% broadcast Fa0/5 Forwarding 20.00% 10.00% 2.31% multicast ! ── Field meanings ─────────────────────────────────────────────── ! Interface: the port ! Filter State: Forwarding = normal, Blocking = storm active ! Upper: rising threshold (action triggers above this) ! Lower: falling threshold (action clears below this) ! Current: current traffic rate as % of port BW (last 1s window)
show storm-control — Specific Interface
! ── Detailed per-interface view ─────────────────────────────────── NetsTuts_SW1#show storm-control FastEthernet0/4 Interface Filter State Upper Lower Current --------- ------------- ----- ----- ------- Fa0/4 Forwarding 5.00% 2.00% 0.09% broadcast Fa0/4 Forwarding 3.00% 1.00% 0.02% multicast Fa0/4 Forwarding 10.00% 5.00% 0.15% unicast ! ── All three storm types configured and active ─────────────────── ! ── Current rates well below thresholds — healthy state ────────── ! ── Verify the action configured ──────────────────────────────── NetsTuts_SW1#show running-config interface FastEthernet0/4 Building configuration... Current configuration : 198 bytes ! interface FastEthernet0/4 description IoT-VLAN30-Tight-Policy switchport access vlan 30 switchport mode access storm-control broadcast level 5.00 2.00 ← ✓ broadcast threshold storm-control multicast level 3.00 1.00 ← ✓ multicast threshold storm-control unicast level 10.00 5.00 ← ✓ unicast threshold storm-control action shutdown ← ✓ shutdown action storm-control action trap ← ✓ trap action spanning-tree portfast !
Simulating a Storm — Observing the Action
! ── During a broadcast storm, show storm-control changes state ──── NetsTuts_SW1#show storm-control FastEthernet0/1 Interface Filter State Upper Lower Current --------- ------------- ----- ----- ------- Fa0/1 Blocking !! 20.00% 10.00% 87.42% broadcast ! ^^^^^^^^ ^^^^^^^ ! Storm active — port is Current rate 87% — far above ! in err-disable (if action=shutdown) the 20% rising threshold ! or dropping excess (if no action) ! ── Syslog during storm ────────────────────────────────────────── *Mar 7 2026 09:22:14.001: %STORM_CONTROL-3-SHUTDOWN: A packet storm was detected on Fa0/1. The interface has been disabled. *Mar 7 2026 09:22:14.002: %LINK-3-UPDOWN: Interface FastEthernet0/1, changed state to down ! ── Verify port is err-disabled ────────────────────────────────── NetsTuts_SW1#show interfaces FastEthernet0/1 status Port Name Status Vlan Duplex Speed Fa0/1 PC-A-VLAN10 err-disabled 10 auto auto
Complete Verification Checklist
| Command | What It Confirms | Expected Healthy Output |
|---|---|---|
show storm-control |
All configured ports, thresholds, current rates, filter state | Filter State = "Forwarding", Current rate well below Upper threshold |
show storm-control [int] |
Per-port thresholds and real-time rate for each traffic type | Upper/Lower show configured values, Current shows live rate |
show interfaces [int] status |
Port operational state — confirms not err-disabled | Status = "connected", not "err-disabled" |
show errdisable recovery |
Auto-recovery configuration for storm-control cause | storm-control row shows Enabled/Disabled based on your policy |
show running-config interface [int] |
Full storm-control configuration including action | All storm-control lines present with correct thresholds and actions |
show interfaces [int] |
Live broadcast/multicast counters to validate threshold sizing | Broadcast rate in normal operation should be well below the rising threshold |
show policy-map interface [int] |
Traffic shaping/policing statistics (router interfaces) | Conformed packets high, exceeded/violated packets low or zero |
9. Complete Configuration Reference & Key Points
Full Storm Control Configuration — NetsTuts_SW1
! ════════ COMPLETE STORM CONTROL CONFIGURATION ═══════════════════ interface FastEthernet0/1 description PC-A-VLAN10-Storm-Control switchport mode access switchport access vlan 10 storm-control broadcast level 20.00 10.00 storm-control multicast level 10.00 5.00 storm-control action shutdown storm-control action trap ! interface FastEthernet0/2 description PC-B-VLAN10-Storm-Control switchport mode access switchport access vlan 10 storm-control broadcast level 20.00 10.00 storm-control multicast level 10.00 5.00 storm-control action shutdown storm-control action trap ! interface FastEthernet0/3 description Server-VLAN20-Strict switchport mode access switchport access vlan 20 storm-control broadcast level 10.00 5.00 storm-control multicast level 5.00 2.00 storm-control action shutdown ! interface FastEthernet0/4 description IoT-VLAN30-Tight-Policy switchport mode access switchport access vlan 30 storm-control broadcast level 5.00 2.00 storm-control multicast level 3.00 1.00 storm-control unicast level 10.00 5.00 storm-control action shutdown storm-control action trap ! interface FastEthernet0/5 description Trunk-to-SW2-Storm-Relaxed switchport trunk encapsulation dot1q switchport mode trunk storm-control broadcast level 30.00 20.00 storm-control multicast level 20.00 10.00 storm-control action trap ! errdisable recovery cause storm-control errdisable recovery interval 60
Storm Control Command Reference
| Command | Mode | Purpose |
|---|---|---|
storm-control broadcast level [rising] [falling] |
Interface config | Set broadcast storm threshold as percentage of port bandwidth. Falling threshold optional (hysteresis). |
storm-control multicast level [rising] [falling] |
Interface config | Set multicast storm threshold as percentage. |
storm-control unicast level [rising] [falling] |
Interface config | Set unknown unicast flooding threshold as percentage. Protects against MAC table overflow attacks. |
storm-control broadcast level bps [rising] [falling] |
Interface config | Set broadcast threshold in absolute bits per second — preferred for high-speed ports. |
storm-control broadcast level pps [rising] [falling] |
Interface config | Set broadcast threshold in packets (frames) per second — preferred for CPU-protection scenarios. |
storm-control action shutdown |
Interface config | Err-disable the port when threshold is exceeded. Requires manual recovery or errdisable recovery. |
storm-control action trap |
Interface config | Send SNMP trap when threshold is exceeded. Can be combined with shutdown. Does not drop traffic alone. |
errdisable recovery cause storm-control |
Global config | Enable automatic recovery for storm-control-triggered err-disable. Port re-enables after recovery interval. |
errdisable recovery interval [seconds] |
Global config | Set the auto-recovery timer. Default is 300 seconds. Applies to all errdisable recovery causes. |
show storm-control |
Privileged exec | Show all ports with storm control configured: threshold values, filter state, current rate. |
show storm-control [interface] |
Privileged exec | Show storm control detail for a specific interface. |
show errdisable recovery |
Privileged exec | Show err-disable recovery configuration for all causes and the current recovery interval. |
Key Points & Exam Tips
- Storm control operates on ingress traffic only. The threshold is measured against traffic received on the port — not transmitted. This makes sense: a storm source generates traffic that enters the switch on a specific port; storm control detects it at ingress and takes action before it floods the rest of the network.
- The measurement window is 1 second. Storm control evaluates the traffic rate over a 1-second interval in hardware. The "Current" column in
show storm-controlshows the rate from the most recently completed 1-second window — it is a snapshot, not a rolling average. - Three traffic types, three separate thresholds. Broadcast, multicast, and unknown unicast storm control are configured independently. You can configure all three on the same port, just multicast and broadcast, or any combination. Not configuring unicast protection leaves MAC table overflow attacks undetected.
- Default action (no action command) = filter (drop excess). Without
storm-control action shutdownorstorm-control action trap, the switch silently drops frames that exceed the threshold. The port stays up — only the excess frames are dropped. This is the least disruptive action but provides no alerting and no automatic port isolation of the storm source. Usestorm-control action trapwith SNMP and syslog to ensure storm events are visible. - Rising threshold without falling = no hysteresis. If you configure
storm-control broadcast level 20(no falling value), the falling threshold defaults to the rising threshold (20%). This can cause rapid flapping if the storm rate oscillates around 20%. Always configure a falling threshold at roughly half the rising threshold for stability. - Never configure shutdown action on trunk uplinks. A legitimate traffic burst on a trunk (large multicast stream, broadcast from downstream segment) could trigger shutdown and isolate all downstream switches. Use
traponly on trunk ports. - Traffic shaping buffers excess traffic; policing drops it. Shaping adds latency (queuing delay) but preserves traffic. Policing enforces hard limits with no queuing. For voice/video traffic that cannot tolerate latency, policing with re-marking is often preferred over shaping. For bulk data where orderly delivery matters, shaping prevents TCP retransmission storms caused by hard drops. See QoS Overview for the broader framework.
- Shaping is egress-only; policing can be ingress or egress. You cannot shape incoming traffic (you have no control over the sender's transmission rate). Policing can be applied at ingress (drop excess inbound traffic before it consumes internal resources) or egress (limit outbound rate on a WAN interface).
- On the CCNP exam: know the three storm types, the rising/falling threshold concept, the three actions (filter/shutdown/trap — note "filter" is the default, not a configurable keyword), the errdisable recovery mechanism, and the distinction between traffic shaping and policing.