CCIE SPv5.1 Labs
  • Intro
    • Setup
  • Purpose
  • Video Demonstration
  • Containerlab Tips
  • Labs
    • ISIS
      • Start
      • Topology
      • Prefix Suppression
      • Hello padding
      • Overload Bit
      • LSP size
      • Default metric
      • Hello/Hold Timer
      • Mesh groups
      • Prefix Summarization
      • Default Route Preference
      • ISIS Timers
      • Log Neighbor Changes
      • Troubleshooting 1 - No routes
      • Troubleshooting 2 - Adjacency
      • IPv6 Single Topology
      • IPv6 Single Topology Challenge
      • IPv6 Multi Topology
      • IPv6 Single to Multi Topology
      • Wide Metrics Explained
      • Route Filtering
      • Backdoor Link
      • Non-Optimal Intra-Area routing
      • Multi Area
      • Authentication
      • Conditional ATT Bit
      • Troubleshooting iBGP
      • Troubleshooting TE Tunnel
    • LDP
      • Start
      • Topology
      • LDP and ECMP
      • LDP and Static Routes
      • LDP Timers
      • LDP Authentication
      • LDP Session Protection
      • LDP/IGP Sync (OSPF)
      • LDP/IGP Sync (ISIS)
      • LDP Local Allocation Filtering
      • LDP Conditional Label Advertisement
      • LDP Inbound Label Advertisement Filtering
      • LDP Label Advertisement Filtering Challenge
      • LDP Implicit Withdraw
      • LDP Transport Address Troubleshooting
      • LDP Static Labels
    • MPLS-TE
      • Start
      • Topology
      • Basic TE Tunnel w/ OSPF
      • Basic TE Tunnel w/ ISIS
      • TE Tunnel using Admin Weight
      • TE Tunnel using Link Affinity
      • TE Tunnel with Explicit-Null
      • TE Tunnel with Conditional Attributes
      • RSVP message pacing
      • Reoptimization timer
      • IGP TE Flooding Thresholds
      • CSPF Tiebreakers
      • TE Tunnel Preemption
      • TE Tunnel Soft Preemption
      • Tunneling LDP inside RSVP
      • PE to P TE Tunnel
      • Autoroute Announce Metric (XE)
      • Autoroute Announce Metric (XR)
      • Autoroute Announce Absolute Metric
      • Autoroute Announce Backup Path
      • Forwarding Adjacency
      • Forwarding Adjacency with OSPF
      • TE Tunnels with UCMP
      • Auto-Bandwidth
      • FRR Link Protection (XE, BFD)
      • FRR Link Protection (XE, RSVP Hellos)
      • FRR Node Protection (XR)
      • FRR Path Protection
      • FRR Multiple Backup Tunnels (Node Protection)
      • FRR Multiple Backup Tunnels (Link Protection)
      • FRR Multiple Backup Tunnels (Backwidth/Link Protection)
      • FRR Backup Auto-Tunnels
      • FRR Backup Auto-Tunnels with SRLG
      • Full Mesh Auto-Tunnels
      • Full Mesh Dynamic Auto-Tunnels
      • One-Hop Auto-Tunnels
      • CBTS/PBTS
      • Traditional DS-TE
      • IETF DS-TE with MAM
      • IETF DS-TE with RDM
      • RDM w/ FRR Troubleshooting
      • Per-VRF TE Tunnels
      • Tactical TE Issues
      • Multicast and MPLS-TE
    • SR
      • Start
      • Topology
      • Basic SR with ISIS
      • Basic SR with OSPF
      • SRGB Modifcation
      • SR with ExpNull
      • SR Anycast SID
      • SR Adjacency SID
      • SR LAN Adjacency SID (Walkthrough)
      • SR and RSVP-TE interaction
      • SR Basic Inter-area with ISIS
      • SR Basic Inter-area with OSPF
      • SR Basic Inter-IGP (redistribution)
      • SR Basic Inter-AS using BGP
      • SR BGP Data Center (eBGP)
      • SR BGP Data Center (iBGP)
      • LFA
      • LFA Tiebreakers (ISIS)
      • LFA Tiebreakers (OSPF)
      • Remote LFA
      • RLFA Tiebreakers?
      • TI-LFA
      • Remote LFA or TILFA?
      • TI-LFA Node Protection
      • TI-LFA SRLG Protection
      • TI-LFA Protection Priorities (ISIS)
      • TI-LFA Protection Priorities (OSPF)
      • Microloop Avoidance
      • SR/LDP Interworking
      • SR/LDP SRMS OSPF Inter-Area
      • SR/LDP Design Challenge #1
      • SR/LDP Design Challenge #2
      • Migrate LDP to SR (ISIS)
      • OAM with SR
      • SR-MPLS using IPv6
      • Basic SR-TE with AS
      • Basic SR-TE with AS and ODN
      • SR-TE with AS Primary/Secondary Paths
      • SR-TE Dynamic Policies
      • SR-TE Dynamic Policy with Margin
      • SR-TE Explicit Paths
      • SR-TE Disjoint Planes using Anycast SIDs
      • SR-TE Flex-Algo w/ Latency
      • SR-TE Flex-Algo w/ Affinity
      • SR-TE Disjoint Planes using Flex-Algo
      • SR-TE BSIDs
      • SR-TE RSVP-TE Stitching
      • SR-TE Autoroute Include
      • SR Inter-IGP using PCE
      • SR-TE PCC Features
      • SR-TE PCE Instantiated Policy
      • SR-TE PCE Redundancy
      • SR-TE PCE Redundancy w/ Sync
      • SR-TE Basic BGP EPE
      • SR-TE BGP EPE for Unified MPLS
      • SR-TE Disjoint Paths
      • SR Converged SDN Transport Challenge
      • SR OAM DPM
      • SR OAM Tools
      • Performance-Measurement (Interface Delay)
    • SRv6
      • Start
      • Topology
      • Basic SRv6
      • SRv6 uSID
      • SRv6 uSID w/ EVPN-VPWS and BGP IPv4/IPv6
      • SRv6 uSID w/ SR-TE
      • SRv6 uSID w/ SR-TE Explicit Paths
      • SRv6 uSID w/ L3 IGW
      • SRv6 uSID w/ Dual-Connected PE
      • SRv6 uSID w/ Flex Algo
      • SRv6 uSID - Scale (Pt. 1)
      • SRv6 uSID - Scale (Pt. 2)
      • SRv6 uSID - Scale (Pt. 3) (UPA Walkthrough)
      • SRv6 uSID - Scale (Pt. 4) (Flex Algo)
      • SRv6 uSID w/ TI-LFA
    • Multicast
      • Start
      • Topology
      • Basic PIM-SSM
      • PIM-SSM Static Mapping
      • Basic PIM-SM
      • PIM-SM with Anycast RP
      • PIM-SM with Auto-RP
      • PIM-SM with BSR
      • PIM-SM with BSR for IPv6
      • PIM-BiDir
      • PIM-BiDir for IPv6
      • PIM-BiDir with Phantom RP
      • PIM Security
      • PIM Boundaries with AutoRP
      • PIM Boundaries with BSR
      • PIM-SM IPv6 using Embedded RP
      • PIM SSM Range Note
      • PIM RPF Troubleshooting #1
      • PIM RPF Troubleshooting #2
      • PIM RP Troubleshooting
      • PIM Duplicate Traffic Troubleshooting
      • Using IOS-XR as a Sender/Receiver
      • PIM-SM without Receiver IGMP Joins
      • RP Discovery Methods
      • Basic Interdomain Multicast w/o MSDP
      • Basic Interdomain Multicast w/ MSDP
      • MSDP Filtering
      • MSDP Flood Reduction
      • MSDP Default Peer
      • MSDP RPF Check (IOS-XR)
      • MSDP RPF Check (IOS-XE)
      • Interdomain MBGP Policies
      • PIM Boundaries using MSDP
    • MVPN
      • Start
      • Topology
      • Profile 0
      • Profile 0 with data MDTs
      • Profile 1
      • Profile 1 w/ Redundant Roots
      • Profile 1 with data MDTs
      • Profile 6
      • Profile 7
      • Profile 3
      • Profile 3 with S-PMSI
      • Profile 11
      • Profile 11 with S-PMSI
      • Profile 11 w/ Receiver-only Sites
      • Profile 9 with S-PMSI
      • Profile 12
      • Profile 13
      • UMH (Upstream Multicast Hop) Challenge
      • Profile 13 w/ Configuration Knobs
      • Profile 13 w/ PE RP
      • Profile 12 w/ PE Anycast RP
      • Profile 14 (Partitioned MDT)
      • Profile 14 with Extranet option #1
      • Profile 14 with Extranet option #2
      • Profile 14 w/ IPv6
      • Profile 17
      • Profile 19
      • Profile 21
    • MVPN SR
      • Start
      • Topology
      • Profile 27
      • Profile 27 w/ Constraints
      • Profile 27 w/ FRR
      • Profile 28
      • Profile 28 w/ Constraints and FRR
      • Profile 28 w/ Data MDTs
      • Profile 29
    • VPWS
      • Start
      • Topology
      • Basic VPWS
      • VPWS with Tag Manipulation
      • Redundant VPWS
      • Redundant VPWS (IOS-XR)
      • VPWS with PW interfaces
      • Manual VPWS
      • VPWS with Sequencing
      • Pseudowire Logging
      • VPWS with FAT-PW
      • MS-PS (Pseudowire stitching)
      • VPWS with BGP AD
    • VPLS
      • Start
      • Topology
      • Basic VPLS with LDP
      • VPLS with LDP and BGP
      • VPLS with BGP only
      • Hub and Spoke VPLS
      • Tunnel L2 Protocols over VPLS
      • Basic H-VPLS
      • H-VPLS with BGP
      • H-VPLS with QinQ
      • H-VPLS with Redundancy
      • VPLS with Routing
      • VPLS MAC Protection
      • Basic E-TREE
      • VPLS with LDP/BGP-AD and XRv RR
      • VPLS with BGP and XRv RR
      • VPLS with Storm Control
    • EVPN
      • Start
      • Topology
      • EVPN VPWS
      • EVPN VPWS Multihomed
      • EVPN VPWS Multihomed Single-Active
      • Basic Single-homed EVPN E-LAN
      • EVPN E-LAN Service Label Allocation
      • EVPN E-LAN Ethernet Tag
      • EVPN E-LAN Multihomed
      • EVPN E-LAN on XRv
      • EVPN IRB
      • EVPN-VPWS Multihomed IOS-XR (All-Active)
      • EVPN-VPWS Multihomed IOS-XR (Port-Active)
      • EVPN-VPWS Multihomed IOS-XR (Single-Active)
      • EVPN-VPWS Multihomed IOS-XR (Non-Bundle)
      • PBB-EVPN (Informational)
    • BGP Multi-Homing (XE)
      • Start
      • Topology
      • Lab1 ECMP
      • Lab2 UCMP
      • Lab3 Backup Path
      • Lab4 Shadow Session
      • Lab5 Shadow RR
      • Lab6 RR with Add-Path
      • Lab7 MPLS + Add Path ECMP
      • Lab8 MPLS + Shadow RR
      • Lab9 MPLS + RDs + UCMP
    • BGP Multi-Homing (XR)
      • Start
      • Topology
      • Lab1 ECMP
      • Lab2 UCMP
      • Lab3 Backup Path
      • Lab4 “Shadow Session”
      • Lab5 “Shadow RR”
      • Lab6 RR with Add-Path
      • Lab7 MPLS + Add Path ECMP
      • Lab8 MPLS + “Shadow RR”
      • Lab9 MPLS + RDs + UCMP
      • Lab10 MPLS + Same RD + Add-Path + UCMP
      • Lab11 MPLS + Same RD + Add-Path + Repair Path
    • BGP
      • Start
      • Conditional Advertisement
      • Aggregation and Deaggregation
      • Local AS
      • BGP QoS Policy Propagation
      • Non-Optimal eBGP Routing
      • Multihomed Enterprise Challenge
      • Provider Communities
      • Destination-Based RTBH
      • Destination-Based RTBH (Community-Based)
      • Source-Based RTBH
      • Source-Based RTBH (Community-Based)
      • Multihomed Enterprise Challenge (XRv)
      • Provider Communities (XRv)
      • DMZ Link BW Lab1
      • DMZ Link BW Lab2
      • PIC Edge in the Global Table
      • PIC Edge Troubleshooting
      • PIC Edge for VPNv4
      • AIGP
      • AIGP Translation
      • Cost-Community (iBGP)
      • Cost-Community (confed eBGP)
      • Destination-Based RTBH (VRF Provider-triggered)
      • Destination-Based RTBH (VRF CE-triggered)
      • Source-Based RTBH (VRF Provider-triggered)
      • Flowspec (Global IPv4/6PE)
      • Flowspec (VRF)
      • Flowspec (Global IPv4/6PE w/ Redirect)
      • Flowspec (Global IPv4/6PE w/ Redirect) T-Shoot
      • Flowspec (VRF w/ Redirect)
      • Flowspec (Global IPv4/6PE w/ CE Advertisement)
    • Intra-AS L3VPN
      • Start
      • Partitioned RRs
      • Partitioned RRs with IOS-XR
      • RT Filter
      • Non-Optimal Multi-Homed Routing
      • Troubleshoot #1 (BGP)
      • Troubleshoot #2 (OSPF)
      • Troubleshoot #3 (OSPF)
      • Troubleshoot #4 (OSPF Inter-AS)
      • VRF to Global Internet Access (IOS-XE)
      • VRF to Global Internet Access (IOS-XR)
    • Inter-AS L3VPN
      • Start
      • Inter-AS Option A
      • Inter-AS Option B
      • Inter-AS Option C
      • Inter-AS Option AB (D)
      • CSC
      • CSC with Option AB (D)
      • Inter-AS Option C - iBGP LU
      • Inter-AS Option B w/ RT Rewrite
      • Inter-AS Option C w/ RT Rewrite
      • Inter-AS Option A Multi-Homed
      • Inter-AS Option B Multi-Homed
      • Inter-AS Option C Multi-Homed
    • Russo Inter-AS
      • Start
      • Topology
      • Option A L3NNI
      • Option A L2NNI
      • Option A mVPN
      • Option B L3NNI
      • Option B mVPN
      • Option C L3NNI
      • Option C L3NNI w/ L2VPN
      • Option C mVPN
    • BGP RPKI
      • Start
      • RPKI on IOS-XE (Enabling the feature)
      • RPKI on IOS-XE (Validation)
      • RPKI on IOS-XR (Enabling the feature)
      • Enable SSH in Routinator
      • RPKI on IOS-XR (Validation)
      • RPKI on IOS-XR (RPKI Routes)
      • RPKI on IOS-XR (VRF)
      • RPKI iBGP Mesh (No Signaling)
      • RPKI iBGP Mesh (iBGP Signaling)
    • NAT
      • Start
      • Egress PE NAT44
      • NAT44 within an INET VRF
      • Internet Reachability between VRFs
      • CGNAT
      • NAT64 Stateful
      • NAT64 Stateful w/ Static NAT
      • NAT64 Stateless
      • MAP-T BR
    • BFD
      • Start
      • Topology
      • OSPF Hellos
      • ISIS Hellos
      • BGP Keepalives
      • PIM Hellos
      • Basic BFD for all protocols
      • BFD Asymmetric Timers
      • BFD Templates
      • BFD Tshoot #1
      • BFD for Static Routes
      • BFD Multi-Hop
      • BFD for VPNv4 Static Routes
      • BFD for VPNv6 Static Routes
      • BFD for Pseudowires
    • QoS
      • Start
      • QoS on IOS-XE
      • Advanced QoS on IOS-XE Pt. 1
      • Advanced QoS on IOS-XE Pt. 2
      • MPLS QoS Design
      • Notes - QoS on IOS-XR
    • NSO
      • Start
      • Basic NSO Usage
      • Basic NSO Template Service
      • Advanced NSO Template Service
      • Advanced NSO Template Service #2
      • NSO Template vs. Template Service
      • NSO API using Python
      • NSO API using Python #2
      • NSO API using Python #3
      • Using a NETCONF NED
      • Python Service
      • Nano Services
    • MDT
      • Start
      • MDT Server Setup
      • Basic Dial-Out
      • Filtering Data using XPATH
      • Finding the correct YANG model
      • Finding the correct YANG model #2
      • Event-Driven MDT
      • Basic Dial-In using gNMI
      • Dial-Out with TLS
      • Dial-In with TLS
      • Dial-In with two-way TLS
    • App-Hosting
      • Start
      • Lab - iperf3 Docker Container
      • Notes - LXC Container
      • Notes - Native Applications
      • Notes - Process Scripts
    • ZTP
      • Notes - Classic ZTP
      • Notes - Secure ZTP
    • L2 Connectivity Notes
      • 802.1ad (Q-in-Q)
      • MST-AG
      • MC-LAG
      • G.8032
    • Ethernet OAM
      • Start
      • Topology
      • CFM
      • y1731
      • Notes - y1564
    • Security
      • Start
      • Notes - Security ACLs
      • Notes - Hybrid ACLs
      • Notes - MPP (IOS-XR)
      • Notes - MPP (IOS-XE)
      • Notes - CoPP (IOS-XE)
      • Notes - LPTS (IOS-XR)
      • Notes - WAN MACsec White Paper
      • Notes - WAN MACsec Config Guide
      • Notes - AAA
      • Notes - uRPF
      • Notes - VTY lines (IOS-XR)
      • Lab - uRPF
      • Lab - MPP
      • Lab - AAA (IOS-XE)
      • Lab - AAA (IOS-XR)
      • Lab - CoPP and LPTS
    • Assurance
      • Start
      • Notes - Syslog on IOS-XE
      • Notes - Syslog on IOS-XR
      • Notes - SNMP Traps
      • Syslog (IOS-XR)
      • RMON
      • Netflow (IOS-XE)
      • Netflow (IOS-XR)
Powered by GitBook
On this page
  • Answer
  • Explanation
  • CE Side
  • PE side
  1. Labs
  2. QoS

QoS on IOS-XE

PreviousStartNextAdvanced QoS on IOS-XE Pt. 1

Last updated 1 month ago

Topology: ine-spv4

Load basic.l3vpn.fully.setup.cfg

#IOS-XE
config replace flash:basic.l3vpn.fully.setup.cfg

#IOS-XR
configure
load bootflash:basic.l3vpn.fully.setup.cfg  
commit replace
y

Shape traffic outbound on the CE, R1, as follows:

  • Traffic should be shaped to a rate of 50M with a Tc of 10ms and an equal burst excess allowed

  • EF traffic should be treated as priority and limited to 10M of bandwidth during congestion

  • Signaling traffic is marked as CS3 and should be given 5M of gauranteed bandwidth

  • All other traffic should use WRED based on DSCP to prevent TCP global sync

On the PE router, R2, police and shape traffic as follows:

  • Traffic inbound should be rate limited to 50M. Anything between 50M and 75M should be re-marked as CS1. Anything above 75M should be dropped.

  • Traffic outbound should be shaped to 50M. Traffic should not incur more than 25ms of delay if the queue fills up. If it does, the customer would rather the traffic is dropped instead. Ensure EF traffic is always prioritized up to 10M.

Answer

#R1
class-map EF
 match dscp ef
class-map CS3
 match dscp cs3
!
policy-map CHILD
 class EF
  priority 10000
 !
 class CS3
  bandwidth 5000
 !
 class class-default
  random-detect dscp-based
!
policy-map VPNV4_OUTBOUND
 class class-default
  shape average 50 m 500 k 500 k
  service-policy CHILD
!
int Gi2.12
 service-policy output VPNV4_OUTBOUND

#R2
class-map EF
 match dscp ef
!
policy-map 50M_POLICE
 class class-default
  police cir 50 m pir 75 m
   conform-action transmit
   exceed-action set-dscp-transmit cs1
   violate-action drop
!
policy-map SHAPER_CHILD
 class EF
  priority 10000
 class class-default
  queue-limit 25 ms
!
policy-map 50M_SHAPE
 class class-default
  shape average 50 m
  service-policy SHAPER_CHILD
!
int Gi2.12
 service-policy input 50M_POLICE
 service-policy output 50M_SHAPE

Explanation

QoS is the process of classifying traffic into different groups and allowing packets to reorder in times of congestion. This gives preferential treatment to one group of traffic over another. QoS is needed anywhere that the input rate can exceed the output rate of an interface, which is called oversubscription.

For example, in this lab, R1 might have a 1G LAN interface. It can receive traffic from the LAN at 1Gbps, but its WAN interface has a CIR of 50Mbps. This is oversubscription, so QoS is needed to prioritize certain traffic over less-important traffic during times of congestion. Note that congestion can even be at the micro-burst level. If a very short burst of line-rate traffic comes in at 1Gbps, some of this might need to be dropped to output at 50Mbps, because it can overflow the queue. But overall, you might still see a very low utilization on the interface (for example only 10Mbps utilization over 30seconds).

QoS invovles the following processes:

  • Traffic is classified based on aspects of the traffic (i.e. src/dst IP, existing QoS marking, or application inspection).

  • Traffic is marked at the edge so that subsequent devices don’t need to re-classify the traffic using complex methods (ACLs or app inspection). Subsequent devices can simply classify based on DSCP marking, EXP marking, etc.

  • Every device along the path performs an independent QoS action, which is based on the class of the traffic (the DSCP marking).

    • Traffic can be given a minimum bandwidth guarantee (bandwidth statement)

    • Traffic can be given priority, meaning its queue is always serviced first during times of congestion. Typically real-time traffic, such as VOIP or video traffic, should be given this treatment.

      • This traffic should be policed so that it cannot starve out other traffic

    • Traffic can be given a maximum bandwidth (police statement or shape statement)

    • Traffic can be randomly dropped from the end of the queue to avoid TCP global synchronization (WRED).

CE Side

In this lab, we are asked to configure R1 so that EF is always given priority, but policed up to 10M, and CS3 should be given a minimum bandwidth gaurantee of 5M. To do this, we first configure class-maps to match this traffic:

class-map EF
 match dscp ef
class-map CS3
 match dscp cs3

A class-map can have multiple match statements. By default, a class-map is match-all which means all match statements must match. You can alternatively use class-map match-any <name> to consider a packet a match if only one match statement is a match. Also note that you can nest class-maps within each other using match class-map <name>. This can be used to create more complex matching logic (i.e. ”match all three of these items <or> match this item”).

Next, we configure our policies in a child policy, which will later be applied to a parent policy. This is needed in order to apply a 50M shaper overall to the entire policy. This technique is known as hierarchical QoS, because we can nest policy-maps within each other. Below we give EF traffic priority but limit it to 10Mbps (in times of congestion), and we give CS3 a minimum bandwidth of 5M. If there is no congestion, CS3 traffic can use more than 5Mbps. It is just a minimum reservation so that CS3 traffic always has that much bandwidth available. Additionally, EF traffic can use more than 10Mbps if there is no congestion.

policy-map CHILD
 class EF
  priority 10000
 !
 class CS3
  bandwidth 5000

Next we are asked to use WRED for all other traffic. WRED drops packets as the queue fills up to avoid TCP global sync, in which all TCP streams synchronously scale up and down their sending rates as they experience packet loss and recover from packet loss. WRED drops packets proportionally based on the DSCP values. For example, AFx2 traffic is dropped more often than AFx1.

As a reminder, DSCP uses the following values:

  • EF (to indicate expedited forwarding)

  • DF (to indicate default forwarding, value = 0)

  • CS1-7 which is backwards compatible with IPP

  • AFxy, where x=1-4 (precendence) and y=1-3 (drop priority). A higher y value means “more likely to drop.”

We can activate DSCP-based WRED as follows. Since all traffic that doesn’t hit the EF or CS3 classes will hit the class-default class, we can simply activate DSCP-based WRED on this class.

policy-map CHILD
 class class-default
  random-detect dscp-based

Finally we associate this CHILD policy with the shaper policy. We are asked to use a Tc of 10ms. This means that the shaper runs every 10ms. A lower value reduces delay for packets in the queue, while a higher value allows more bursting at a given moment. This is because once all traffic is “used up” in a given time interval, the router must wait until the next time interval to send packets again. So the higher the Tc value, the more traffic can be burst at once, but the more delay a packet can potentially incur in the queue.

We cannot directly set the Tc value. Instead we must set this indirectly using the Bc value. The shaper rate is equal to the Bc divided by Tc. So if we take our shaper rate (50M) multiplied by 10ms (.010) we get 500K, which is our Bc value.

Additionally we are asked to use an excess burst bucket that is the same as our Bc bucket size. During periods where no traffic is sent, excess tokens from the Bc bucket can spill into the Be bucket. Then during subsequent periods of traffic being sent, if the Bc bucket is emptied, the Be bucket can be used. Overall the CIR does not change, as the Be bucket is only populated with tokens that weren’t spent in previous time periods.

policy-map VPNV4_OUTBOUND
 class class-default
  shape average 50 m 500 k 500 k
  service-policy CHILD

Lastly we apply this policy to the interface in the outbound direction:

int Gi2.12
 service-policy output VPNV4_OUTBOUND

We can check hits on our classes using show policy-map interface

R1#show policy-map interface
 GigabitEthernet2.12

  Service-policy output: VPNV4_OUTBOUND

    Class-map: class-default (match-any)
      1081 packets, 1402879 bytes
      5 minute offered rate 28000 bps, drop rate 0000 bps
      Match: any
      Queueing
      queue limit 208 packets
      (queue depth/total drops/no-buffer drops) 0/0/0
      (pkts output/bytes output) 1082/1402937
      shape (average) cir 50000000, bc 500000, be 500000
      target shape rate 50000000

      Service-policy : CHILD

        queue stats for all priority classes:
          Queueing
          queue limit 512 packets
          (queue depth/total drops/no-buffer drops) 0/0/0
          (pkts output/bytes output) 0/0

        Class-map: EF (match-all)
          0 packets, 0 bytes
          5 minute offered rate 0000 bps, drop rate 0000 bps
          Match:  dscp ef (46)
          Priority: 10000 kbps, burst bytes 250000, b/w exceed drops: 0


        Class-map: CS3 (match-all)
          0 packets, 0 bytes
          5 minute offered rate 0000 bps, drop rate 0000 bps
          Match:  dscp cs3 (24)
          Queueing
          queue limit 64 packets
          (queue depth/total drops/no-buffer drops) 0/0/0
          (pkts output/bytes output) 0/0
          bandwidth 5000 kbps

        Class-map: class-default (match-any)
          133 packets, 70741 bytes
          5 minute offered rate 0000 bps, drop rate 0000 bps
          Match: any

          queue limit 208 packets
          (queue depth/total drops/no-buffer drops) 0/0/0
          (pkts output/bytes output) 135/70895
            Exp-weight-constant: 9 (1/512)
            Mean queue depth: 0 packets
            dscp       Transmitted         Random drop      Tail drop          Minimum        Maximum     Mark
                    pkts/bytes            pkts/bytes       pkts/bytes          thresh         thresh     prob

            default       45/63810           0/0              0/0                 52           104  1/10
            af11           5/590             0/0              0/0                 91           104  1/10
            af12           5/590             0/0              0/0                 78           104  1/10
            cs5            5/590             0/0              0/0                 84           104  1/10
            cs6           66/4455            0/0              0/0                 91           104  1/10

Notice above that the class-default has a “chart” of DSCP values that have been seen and the min/max threshold where packets will start being dropped, and the probability of drops. Currently the default is a 1-in-10 probability. As packets pass the minimum threshold, they begin getting randomly dropped. As they approach the max threshold, they are dropped at a rate approaching 1-in-10. Once the max threshold is reached, any subsequent packets are tail dropped.

Notice that each DSCP value has a different min threshold. This is how weighted RED works to drop traffic proportionally based on its DSCP value. Also note that DSCP values only show up here for traffic that was seen by the policy-map. I did this in the lab by sending extended pings with specific DSCP values to get those values to populate.

Above, each class has a (queue depth/total drops/no-buffer drops) line. Total drops mean that this particular class’s queue is full. No-buffer drops means that the shared packet memory pool is full, but this class's queue still had room. This is quite rare, so you typically should not see “no-buffer drops.”

You may need to adjust queue limits per class depending on if you see total drops or no-buffer drops. If you see no-buffer drops, you need to make queues shorter because they are over-running the shared packet memory pool. If you see tail drops, you can consider making the queue longer. However, there is a trade-off: the longer a queue is, the less tail dropping you will see, but the more latency will be incurred by packets at the end of a queue. If you see that packets are incurring too much latency, you can reduce the queue size to make the router drop a packet rather than have it incur queuing delay.

PE side

Next we’ll examine the PE QoS configuration. The PE’s job is mostly to enforce the CIR that the customer is paying for. In this special circumstance, the PE is also prioritizing voice traffic for the customer. Perhaps this is an extra service the customer is paying for.

To shape outbound at 50M but also prioritize voice traffic, we once again need to use hierarchical QoS. We configure a class-map that matches EF and a child policy that rate limits this to 10M. (Remember that when the police rate is applied in the same line as the priority command, the police rate only takes affect in times of congestion. If you instead were to apply a separate police 10 m statement, then voice traffic would never be allowed above 10M, even when there is available bandwidth).

class-map EF
 match dscp ef
!
policy-map SHAPER_CHILD
 class EF
  priority 10000

Additionally we are asked to ensure that packets don’t wait in a queue for more than 25msec. (With voice traffic, this is not applicable, because voice traffic is always emptied first, so it does not sit in the queue anyway). Traffic shaping delays traffic in order to adhere to the CIR. Any traffic that exceeds the CIR is queued and delayed in order to smooth out the rate. (In comparison, a policer drops or re-marks violating traffic and never queues it). The shaper in some situations may introduce more delay that desired. This is why we are limiting the queue length to a specific time value, so that we are guarantee traffic will not be delayed more than 25msec.

We apply the 25msec queue limit to the default class under the child policy. Note that you cannot configure this on the parent policy because the child policy has a class that is using a priority queue.

policy-map SHAPER_CHILD
 class EF
  priority 10000
 class class-default
  queue-limit 25 ms

The “queue-limit” command can take three values: a packet limit, byte limit, or time (msec) limit. The time limit is the most useful, because it gives you a deterministic amount of max delay any packet will incur. The way it works is the policy-map will determine the parent bandwidth from the parent policy or bandwidth statement on the parent interface. It then converts the msec to a byte amount and uses the bytes amount for the queue-limit.

We finally apply the child policy to a parent policy that overall shapes to 50M, and apply that to the interface in the outbound direction.

policy-map 50M_SHAPE
 class class-default
  shape average 50 m
  service-policy SHAPER_CHILD
!
int Gi1.12
 service-policy input 50M_POLICE
 service-policy output 50M_SHAPE

If we check the show policy-map interface output, we can see that the 25msec queue-limit has been converted to 156250 bytes. This is 50M times .025 and divided by 8 (to convert bits to bytes).

The benefit of this style of queue-limit is that this child policy can be applied to any parent policy and the queue limit will dynamically be set based on the parent policy’s shaper rate, ensuring that traffic will never incur more than 25msec of queuing delay.

Next we configure the policer. We are asked to use a two-rate three-color policer. This means that there are two separate rates (CIR and PIR) and three levels that traffic can be “colored” with (conform, exceed, and violate). We are asked to mark down traffic exceeding the CIR, but within the PIR, to CS1. The idea is that a device more downstream will have a QoS policy to drop CS1 traffic in times of congestion.

policy-map 50M_POLICE
 class class-default
  police cir 50 m pir 75 m
   conform-action transmit
   exceed-action set-dscp-transmit cs1
   violate-action drop
!
int Gi2.12
 service-policy input 50M_POLICE

Notice above that the time interval by default is 250msec. This can be adjusted to allow more or less bursting by directly setting the Bc and Be values in bytes. For example, if we manually set these values to be half, it means the policer evaluates the rate based on 125msec. This would allow less bursting but the policer would run more often.

policy-map 50M_POLICE
 class class-default
  police cir 50 m bc 781250 pir 75 m be 1171875