01The loop: mark → trust → prioritize

Three steps, one line each: iperf3 stamps a DSCP on the packets, the switch is told to trust DSCP and map it to a queue, and you confirm the packets carried the mark and hit the right queue.

QoS test = iperf3 (mark DSCP) + Aruba (trust DSCP → queue) + verify (capture + queue counters)

02DSCP ↔ ToS ↔ CoS: the conversion table

iperf3 sets the full 8-bit ToS byte, but people think in DSCP (the top 6 bits). Convert with one operation — ToS = DSCP × 4 (shift left 2, because the low 2 bits are ECN). The full mapping, colored by service class (warmer = higher priority):

ClassDSCPDecBinaryToS decToS hexCoSiperf3 -S
Network controlCS7561110002240xE070xE0
Internetwork ctrlCS6481100001920xC060xC0
Voice (VoIP)EF461011101840xB850xB8
SignalingCS5401010001600xA050xA0
Interactive videoAF41341000101360x8840x88
Interactive videoAF42361001001440x9040x90
Interactive videoAF43381001101520x9840x98
Interactive videoCS4321000001280x8040x80
Streaming videoAF31260110101040x6830x68
Streaming videoAF32280111001120x7030x70
Streaming videoAF33300111101200x7830x78
Broadcast videoCS324011000960x6030x60
Low-latency dataAF2118010010720x4820x48
Low-latency dataAF2220010100800x5020x50
Low-latency dataAF2322010110880x5820x58
OAM / network mgmtCS216010000640x4020x40
Bulk dataAF1110001010400x2810x28
Bulk dataAF1212001100480x3010x30
Bulk dataAF1314001110560x3810x38
ScavengerCS18001000320x2010x20
Best effortDF / CS0000000000x0000x00
  • Control
  • Voice
  • Signaling
  • Interactive video
  • Streaming video
  • Data
  • Bulk / scavenger
  • Best effort

ToS byte = DSCP × 4  ·  DS field = DSCP (6 bits) + ECN (2 bits)  ·  CoS ≈ DSCP ÷ 8

03Mark the traffic with iperf3

Server on one host; client on the other, marking EF with -S 0xB8. Run a best-effort flow too, so you can compare:

# receiver (10.0.0.2)
iperf3 -s

# sender (10.0.0.1): EF-marked UDP, then plain best-effort
iperf3 -c 10.0.0.2 -u -b 100M -t 10 -S 0xB8      # DSCP 46 (EF)
iperf3 -c 10.0.0.2 -u -b 100M -t 10              # DSCP 0 (best effort)
# newer iperf3 also accepts:  --dscp 46   (or a name, e.g. --dscp ef)

-S is the ToS byte from the table above. That's the entire client-side story.

04Make Aruba prioritize it

By default AOS-CX trusts nothing (marks are ignored). Tell it to trust DSCP and map EF to the top local-priority (which the queue profile sends to the priority queue):

switch(config)# qos trust dscp                                  # honour incoming DSCP markings
switch(config)# qos dscp-map 46 local-priority 7 name EF-Voice  # DSCP 46 (EF) -> local-priority 7
# per-port override if you don't want it global:
switch(config)# interface 1/1/1
switch(config-if)# qos trust dscp

That's it: EF now rides local-priority 7 into the highest queue; everything at DSCP 0 stays best-effort.

05Verify it worked

On the wire — confirm the packets actually carry EF (ToS 0xb8) leaving the sender:

tcpdump -ni eth0 -v 'host 10.0.0.2 and udp' | grep -i tos
IP (tos 0xb8, ttl 64) 10.0.0.1.5xxxx > 10.0.0.2.5201: UDP, length 1450   <- 0xb8 = EF, good

On the switch — watch the per-queue counters; under congestion the EF queue keeps moving while best-effort drops:

switch# show qos dscp-map                 # confirm 46 -> local-priority 7
switch# show interface 1/1/1 qos          # per-queue tx / drops
DSCP  local-priority  name
46    7               EF-Voice
Queue 7:  tx 84213 pkts   drops 0        <- EF protected
Queue 0:  tx 61190 pkts   drops 3122     <- best-effort absorbs the loss

proof = capture shows tos 0xb8 + EF queue drops ≈ 0 while best-effort drops rise

06Where to go next

Scale the same recipe: mark AF41 (-S 0x88) for video alongside EF, congest the link, and watch each class land in its queue. On older ArubaOS-Switch (2930/5400) the equivalent is qos type-of-service diff-services to trust DSCP plus qos dscp-map <codepoint> priority <0-7>. Back to the Knowledge Base, or more Networking guides.