Skip to content

Quality of Service (QoS)

QoS controls which traffic gets priority when a link is congested — it doesn't add bandwidth, it decides who waits when there isn't enough to go around. Relevant any time voice, video, or streaming traffic shares a network with bulk data (file transfers, backups) that doesn't care about latency.

Why It Matters

A saturated uplink with no QoS treats a large file copy and a live audio feed identically — both get queued and dropped on the same terms. QoS lets you say "voice and video packets go first, everything else waits," so a background download doesn't cause audible dropouts in a live feed.

Classification & Marking

Traffic is tagged with a priority value so every device along the path can make the same prioritization decision without re-inspecting the traffic itself:

  • CoS (Class of Service) — Layer 2, 3-bit value in the 802.1Q tag, only meaningful on trunk links
  • DSCP (Differentiated Services Code Point) — Layer 3, 6-bit value in the IP header, survives routing (unlike CoS) — the more commonly used marking today

Common DSCP values: EF (Expedited Forwarding — voice), AF41 (video), default/0 (best-effort, everything unmarked). For the values Dante hardware actually marks (and the queue-map catch for its PTP clocking), see Dante & sACN on the Network.

Basic Configuration

Enable QoS globally first (required on many Catalyst platforms before any policy takes effect):

Cisco IOS — global configuration mode (conf t):

mls qos

Warning: the moment mls qos is enabled, every port defaults to untrusted and the switch rewrites incoming DSCP/CoS to 0 until trust is configured. Apply mls qos trust dscp to every port carrying markings you care about (Dante devices, VoIP phones, links to other switches) in the same config session — enabling QoS alone on a live network strips markings instead of protecting them.

Then trust markings on the uplink and enable the strict-priority egress queue:

Cisco IOS — global configuration mode (conf t):

interface Gi0/48
 mls qos trust dscp
 priority-queue out

priority-queue out turns egress queue 1 into a strict-priority (expedite) queue that is serviced until empty before the other queues. With the default queue maps, DSCP 40–47 (which includes EF) and CoS 5 already map to queue 1, so marked voice traffic goes first with no further mapping. Optionally weight the remaining queues with srr-queue bandwidth share <w1> <w2> <w3> <w4> (the first weight is ignored while the expedite queue is enabled).

Note: on 3560/2960-family switches (including the 3560-CX on 15.2E), class-map/policy-map is ingress-only and class actions are limited to trust, set, and police — service-policy output, priority percent, and fair-queue are router MQC features and are rejected on these switches.

Trusting or Re-Marking at the Edge

Whether to trust markings from a connected device or re-mark them yourself depends on whether you control that device:

Cisco IOS — global configuration mode (conf t):

! Trust markings from a known device (e.g. a VoIP phone)
interface Gi0/1
 mls qos trust dscp

Don't blindly trust markings on ports facing untrusted devices/guests — anything can mark its own traffic as high-priority if nothing stops it, defeating the point of QoS entirely.

Verification

Cisco IOS — privileged EXEC:

! Confirm QoS state and trust setting on an interface
show mls qos interface Gi0/48
! Confirm the expedite queue is enabled and see SRR weights
show mls qos interface Gi0/48 queueing
! Per-DSCP/CoS packet counts, per-queue enqueue/drop counts, and per-policer counts
show mls qos interface Gi0/48 statistics
! List defined classification criteria
show class-map