Class Based Tunnel Selection - CBTS
CBTS is feature that enables you to route the traffic in core backbone with different class of service (Precedence/DSCP/EXP) values onto different TE tunnels between Head end and Tail End routers. When you want to route CoS traffic onto these tunnels for one destination, you must route all the traffic for this destination onto these tunnels. In other words, if you have traffic for a destination PE routed onto the CBTS tunnels, you cannot have a part of the traffic for the same destination forwarded outside of these tunnels on an LSP or as IP traffic. Basically, the LSR checks the IP precedence bits or the EXP bits value of the incoming label. Based on the value, the LSR routes the packet onto one TE tunnel that is enabled with CBTS. Because the administrator might want to change the EXP bits value of the incoming packet to a different value (for example, with MQC), the EXP bits value is checked after the MQC operation when making a decision about what TE tunnel is the next hop for the traffic.
You can directly apply the CBTS feature on TE tunnels with a PE router as the head end router and the incoming traffic from a virtual routing/forwarding (VRF) interface. You can map each EXP bits value to a particular TE tunnel. Three bits for the EXP bits give you eight levels of QoS, so you can even use eight TE tunnels between a pair of LSRs and map each EXP bits value to a different TE tunnel.
Command Syntax to assign CBTS to a Member TE Tunnel
Router(config)#int Tunnel 10
Router(config-if)tunnel mpls traffic-eng exp [list-of-exp-values] [default]
Steps to configure CBTS
Configure the Member Tunnels
Configure the Master Tunnel
Map Member Tunnels under the Master Tunnel
CBTS Lab Example
Aim: We need to have the connectivity b/w two customer sites of customer “xyz”
As shown in the image above, the primary path in the core backbone for CE1 to reach CE2 is CE1(R8)–R1–R2–R3–R7–CE2(R9).
We have configured two Member tunnels Tunnel10 and Tunnel20 on R1. The Tunnels 10 and 20 are mapped under a Master Tunnel 100. Below is the reference configuration:
R1#
interface Tunnel10
ip unnumbered Loopback0
mpls ip
tunnel mode mpls traffic-eng
tunnel destination 9.9.0.7
tunnel mpls traffic-eng path-option 1 dynamic
tunnel mpls traffic-eng exp 5 6 7
interface Tunnel20
ip unnumbered Loopback0
mpls ip
tunnel mode mpls traffic-eng
tunnel destination 9.9.0.7
tunnel mpls traffic-eng path-option 1 explicit name path_tunnel20
tunnel mpls traffic-eng exp 0 1 2 3 4
interface Tunnel100
ip unnumbered Loopback0
mpls ip
tunnel mode mpls traffic-eng
tunnel destination 9.9.0.7
tunnel mpls traffic-eng autoroute announce
tunnel mpls traffic-eng exp-bundle master
tunnel mpls traffic-eng exp-bundle member Tunnel10
tunnel mpls traffic-eng exp-bundle member Tunnel20
ip explicit-path name path_tunnel20 enable
exclude-address 9.9.16.6
Note: 9.9.16.0/24 is link b/w R1-R6 with .1/24 on R1 and .6/24 on R6 respectively.
exclude-address 9.9.16.6
Note: 9.9.16.0/24 is link b/w R1-R6 with .1/24 on R1 and .6/24 on R6 respectively.
Class Based Tunnel Selection - Scenerio1
If primary path is up(as show by green marker in the diagram above), the ping from CE1 to CE2 with all precedence values will go via primary path. Let’s ping from CE1 to CE2 using few precedence values say 0, 3, and 7.We have enabled “debug mpls packet” on routers to check the status.
Ping from CE1(Loopack 0/9.9.0.8/32) towards CE2 (Loopack0/9.9.0.9/32)using precedence value=0
R8#ping ip
Target IP address: 9.9.0.9
Extended commands [n]: y
Source address or interface: 9.9.0.8
Type of service [0]: 0
Sending 5, 100-byte ICMP Echos to 9.9.0.9, timeout is 2 seconds:
Packet sent with a source address of 9.9.0.8
!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 84/112/160 ms
R2#debug mpls packet
*Aug 1 21:23:26.203: MPLS turbo: Fa1/0: rx: Len 122 Stack {29 0 254} {27 0 254} – ipv4 data
*Aug 1 21:23:26.207: MPLS turbo: Fa2/0: tx: Len 122 Stack {29 0 253} {27 0 254} – ipv4 data
*Aug 1 21:23:26.275: MPLS turbo: Fa2/0: rx: Len 122 Stack {31 0 253} {28 0 254} – ipv4 data
*Aug 1 21:23:26.347: MPLS turbo: Fa1/0: rx: Len 122 Stack {29 0 254} {27 0 254} – ipv4 data
*Aug 1 21:23:26.351: MPLS turbo: Fa2/0: tx: Len 122 Stack {29 0 253} {27 0 254} – ipv4 data
Target IP address: 9.9.0.9
Extended commands [n]: y
Source address or interface: 9.9.0.8
Type of service [0]: 0
Sending 5, 100-byte ICMP Echos to 9.9.0.9, timeout is 2 seconds:
Packet sent with a source address of 9.9.0.8
!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 84/112/160 ms
R2#debug mpls packet
*Aug 1 21:23:26.203: MPLS turbo: Fa1/0: rx: Len 122 Stack {29 0 254} {27 0 254} – ipv4 data
*Aug 1 21:23:26.207: MPLS turbo: Fa2/0: tx: Len 122 Stack {29 0 253} {27 0 254} – ipv4 data
*Aug 1 21:23:26.275: MPLS turbo: Fa2/0: rx: Len 122 Stack {31 0 253} {28 0 254} – ipv4 data
*Aug 1 21:23:26.347: MPLS turbo: Fa1/0: rx: Len 122 Stack {29 0 254} {27 0 254} – ipv4 data
*Aug 1 21:23:26.351: MPLS turbo: Fa2/0: tx: Len 122 Stack {29 0 253} {27 0 254} – ipv4 data
Class Based Tunnel Selection - Scenerio2
If primary path(say R1-R2 link) is down. We have manually shut R1-R2 link for testing.The ping from CE1 to CE2 with precedence values 5,6, and 7 will go via 1st backup path-TE Tunnel10 (as show by Red marker in the diagram above), and the ping with precedence values 0-4 will go via the 2nd backup path-TE Tunnel20(as shown by Blue marker in the topolgy diagram above).Let’s ping from CE1 to CE2 using few precedence values say 7 (TOS value 224).
R8#ping ip
Target IP address: 9.9.0.9
Extended commands [n]: y
Source address or interface: 9.9.0.8
Type of service [0]: 224
Sending 5, 100-byte ICMP Echos to 9.9.0.9, timeout is 2 seconds:
Packet sent with a source address of 9.9.0.8
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 40/84/132 ms
R6#debug mpls packet
*Aug 1 21:37:08.583: MPLS turbo: Fa1/0: rx: Len 122 Stack {16 7 254} {27 7 254} – ipv4 data
*Aug 1 21:37:08.587: MPLS turbo: Fa2/0: tx: Len 118 Stack {27 7 253} – ipv4 data
*Aug 1 21:37:08.651: MPLS turbo: Fa2/0: rx: Len 122 Stack {29 7 254} {28 7 254} – ipv4 data
*Aug 1 21:37:08.655: MPLS turbo: Fa1/0: tx: Len 118 Stack {28 7 253} – ipv4 data
Let’s ping from CE1 to CE2 using few precedence values say 3 (TOS value 96).
R8#ping ip
Target IP address: 9.9.0.9
Extended commands [n]: y
Source address or interface: 9.9.0.8
Type of service [0]: 96
Sending 5, 100-byte ICMP Echos to 9.9.0.9, timeout is 2 seconds:
Packet sent with a source address of 9.9.0.8
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 72/112/180 ms
R4#debug mpls packet
*Aug 1 21:51:23.811: MPLS turbo: Fa1/0: rx: Len 122 Stack {25 3 254} {27 3 254} – ipv4 data
*Aug 1 21:51:23.815: MPLS turbo: Fa2/0: tx: Len 122 Stack {16 3 253} {27 3 254} – ipv4 data
*Aug 1 21:51:23.935: MPLS turbo: Fa2/0: rx: Len 122 Stack {29 3 253} {28 3 254} – ipv4 data
If we’ll restore the primary path again, the data with all precedence values will again start flowing through the primary path (Green marker in the topology diagram).
CBTS is only meant to be run on Cisco IOS-XE Platform. We cannot run CBTS on IOS-XR platform nodes. We have to use another version of CBTS named Policy Based Tunnel Selection(PBTS)
Hope you have enjoyed reading this Post. Please share your feedback if you liked this post. You can also write to us on networkurge@gmail.com.