MPLS traffic engineering
Posted on April 4, 2010
Covering the basics, how to set up a MPLS traffic engineering tunnel. In our example I’ll be running ISIS as IGP and a 4 routers topology.
Diagram
Step 1: configure MPLS
MPLS configuration is straightforward
Globally
mpls ldp router-id Loopback0 mpls traffic-eng tunnels
At interface level
interface GigabitEthernet0/0 mpls ip mpls traffic-eng tunnels
The interface level configuration must be enable on ALL interfaces on the path of the MPLS traffic engineering tunnel.
Step 2 : Configure IGP
I’ll be using ISIS with a basic configuration (all routers in a level 2 domain), all net’s will be configured on the form 49.000X.0000.0000.YYYY.00 where X will be 1 and YYYY will be the router number (1111 for router 1)
For the process
router isis net 49.0001.0000.0000.3333.00 is-type level-2-only metric-style wide mpls traffic-eng router-id Loopback0 mpls traffic-eng level-2
And at interface level
interface GigabitEthernet0/0 ip router isis
mpls traffic-eng router-id
mpls traffic-eng level-2
Adjacency should fire up, you can check that is show clns neighbors
SPRack1R3#show clns neighbors System Id Interface SNPA State Holdtime Type Protocol SPRack1R4 Se1/0.1 DLCI 304 Up 22 L2 IS-IS SPRack1R6 Gi0/0 0023.33b1.d681 Up 8 L2 IS-IS
If adjacencies are up correctly you should see the router name as the System Id and not a number.
Step 3: Enable a RSVP path
RSVP will signal the path and reserve bandwidth for the MPLS traffic engineering tunnel according to configuration. RSVP is configured at interface level, there are 2 ways of setting the maximum reservable bandwidth
SPRack1R4(config-if)#ip rsvp bandwidth ? <1-10000000> Reservable Bandwidth (kbps) <cr>
ip rsvp bandwidth with no option will assume that 75% of the interface bandwidth can be reserved and that a single flow can use those 75%. This can be checked with show ip rsvp interface
SPRack1R4(config-if)#do sh ip rsvp int g0/1 interface allocated i/f max flow max sub max Gi0/1 0 75M 75M 0
The second option is to specify the amount of reservable bandwidth per link, you can set 2 parameters, the Reservable Bandwidth which is the maximum amount that can be reserved on this interface and the Largest Reservable Flow which controls the maximum bandwidth that a single tunnel can use.
SPRack1R4(config-if)#ip rsvp bandwidth 20 ? <1-10000000> Largest Reservable Flow (kbps) sub-pool Reservable Bandwidth for Tunnel using sub pool <cr>
In our setup I’ll leave the bandwidth to the defaults as it’s just a lab.
Interface configuration
interface GigabitEthernet0/0 bandwidth 100000 ip rsvp bandwidth
The interface level RSVP configuration must be enable on ALL interfaces on the path of the MPLS traffic engineering tunnel.
At this point the basis are set, we are ready to build our MPLS Traffic Engineering tunnel.
Step 4: setting up the MPLS Traffic Engineering tunnel
We’ll be setting up a MPLS traffic engineering tunnel between R4 and R3 in 2 forms, the first setup will have an explicit path configured, the second one will be dynamic.
REMEMBER a TE tunnel is unidirectionnal !!
We’ll start with the basic config which is common to the 2 setups.
interface Tunnel0 description TO-R3 ip unnumbered Loopback0 tunnel destination 24.1.3.3 tunnel mode mpls traffic-eng tunnel mpls traffic-eng autoroute announce tunnel mpls traffic-eng priority 7 7 tunnel mpls traffic-eng bandwidth 64000
tunnel mode mpls traffic-eng
: this will configure the tunnel as a MPLS Traffic Engineering tunneltunnel mpls traffic-eng bandwidth 64000
: this will configure the reserved bandwidth for this tunneltunnel mpls traffic-eng autoroute announce
: this will allow the tunnel to be advertised in the routing table. By default the MPLS traffic engineering tunnel will not be announced to the IGPSPRack1R4(config-if)#do sh run int tun 0 | i announce SPRack1R4(config-if)# SPRack1R4(config-if)#do sh ip route | i 24.1.3.3 i L2 24.1.3.3/32 [115/20] via 24.1.34.3, Serial0/0/0.1
SPRack1R4(config-if)#do sh run int tun 0 | i announce tunnel mpls traffic-eng autoroute announce SPRack1R4(config-if)#do sh ip route | i 24.1.3.3 i L2 24.1.3.3/32 [115/20] via 24.1.3.3, Tunnel0 SPRack1R4(config-if)#
tunnel mpls traffic-eng priority 7 7
: this configures the setup and hold priority of this tunnel (the lower the better, ranging from 0 to 7)the first number is the setup priority compared to other tunnel, if there isn’t enough bandwidth reservable for 2 tunnels the one with the lowest priority will be setup and the other one will stay down.
the second number is the hold priority, it does the same thing than the setup priority but for holding the tunnel. If for example a link goes down and the reservable bandwidth is not enough to hold 2 tunnels the one with the highest priority will be brought down.SPRack1R4(config-if)#tunnel mpls traffic-eng priority ? <0-7> setup priority SPRack1R4(config-if)#tunnel mpls traffic-eng priority 0 ? <0-7> hold priority <cr>
Our tunnel is nearly ready, all that we have to do is define how we will connect to the other router. Here we have 2 options, dynamic or explicit.
Let’s start with the dynamic one (the easiest) the network will choose how to route the traffic based on the available reservable bandwidth.
All we have to do is to configure it:
interface Tunnel0 tunnel mpls traffic-eng path-option 1 dynamic
And here we go
SPRack1R4(config-if)#do sh mpls traffic-eng tunnels Name: TO-R3 (Tunnel0) Destination: 24.1.3.3 Status: Admin: up Oper: up Path: valid Signalling: connected path option 1, type dynamic (Basis for Setup, path weight 10) Config Parameters: Bandwidth: 64000 kbps (Global) Priority: 7 7 Affinity: 0x0/0xFFFF Metric Type: TE (default) AutoRoute: enabled LockDown: disabled Loadshare: 64000 bw-based auto-bw: disabled InLabel : - OutLabel : Serial0/0/0.1, implicit-null RSVP Signalling Info: Src 24.1.4.4, Dst 24.1.3.3, Tun_Id 0, Tun_Instance 18 RSVP Path Info: My Address: 24.1.4.4 Explicit Route: 24.1.34.3 24.1.3.3 Record Route: NONE Tspec: ave rate=64000 kbits, burst=1000 bytes, peak rate=64000 kbits RSVP Resv Info: Record Route: NONE Fspec: ave rate=64000 kbits, burst=1000 bytes, peak rate=64000 kbits History: Tunnel: Time since created: 1 hours, 31 minutes Time since path change: 14 seconds Current LSP: Uptime: 14 seconds Selection: reoptimation Prior LSP: ID: path option 1 [17] Removal Trigger: configuration changed
We can see that dynamically the path was selected through the frame relay.
Now lets says we have a favorite path, there we’ll use an explicit one, we’ll choose how to reach our end router by specifying the next hops in an ip explicith-path
map
SPRack1R4(config)#ip explicit-path name TO-R3 SPRack1R4(cfg-ip-expl-path)#? Explicit-Path configuration commands: append-after Append additional entry after specified index exclude-address Exclude an address from subsequent partial path segments exit Exit from explicit-path configuration mode index Specify the next entry index to add, edit (or delete) list Re-list all or part of the explicit path entries next-address Specify the next (adjacent) address in the path no Delete a specific explicit-path entry index
In our example by default the traffic would go from R4 to R3 through the frame relay. We’ll force it through the ethernet network.
SPRack1R4(config)#ip explicit-path name TO-R3 SPRack1R4(cfg-ip-expl-path)#next-address 24.1.45.5 Explicit Path name TO-R3: 1: next-address 24.1.45.5 SPRack1R4(cfg-ip-expl-path)#next-address 24.1.56.6 Explicit Path name TO-R3: 1: next-address 24.1.45.5 2: next-address 24.1.56.6 SPRack1R4(cfg-ip-expl-path)#next-address 24.1.36.3 Explicit Path name TO-R3: 1: next-address 24.1.45.5 2: next-address 24.1.56.6 3: next-address 24.1.36.3 SPRack1R4(cfg-ip-expl-path)#next-address 24.1.3.3 Explicit Path name TO-R3: 1: next-address 24.1.45.5 2: next-address 24.1.56.6 3: next-address 24.1.36.3 4: next-address 24.1.3.3
After that we just have to tell the tunnel to use this path.
interface Tunnel0 tunnel mpls traffic-eng path-option 1 explicit name TO-R3
SPRack1R4(config-if)#do sh mpls traf tun Name: TO-R3 (Tunnel0) Destination: 24.1.3.3 Status: Admin: up Oper: up Path: valid Signalling: connected path option 1, type explicit TO-R3 (Basis for Setup, path weight 30) Config Parameters: Bandwidth: 64 kbps (Global) Priority: 7 7 Affinity: 0x0/0xFFFF Metric Type: TE (default) AutoRoute: enabled LockDown: disabled Loadshare: 64 bw-based auto-bw: disabled InLabel : - OutLabel : GigabitEthernet0/1, 21 RSVP Signalling Info: Src 24.1.4.4, Dst 24.1.3.3, Tun_Id 0, Tun_Instance 70 RSVP Path Info: My Address: 24.1.45.4 Explicit Route: 24.1.45.5 24.1.56.5 24.1.56.6 24.1.36.6 24.1.36.3 24.1.3.3 Record Route: NONE Tspec: ave rate=64 kbits, burst=1000 bytes, peak rate=64 kbits RSVP Resv Info: Record Route: NONE Fspec: ave rate=64 kbits, burst=1000 bytes, peak rate=64 kbits History: Tunnel: Time since created: 1 hours, 56 minutes Time since path change: 4 minutes, 53 seconds Current LSP: Uptime: 4 minutes, 53 seconds Prior LSP: ID: path option 1 [18] Removal Trigger: path option updated
And here we are our tunnel is setup !
We did simple configuration here (only explicit or only dynamic) but in most cases if you have an explicit path you’d have another explicit or dynamic path also in case the primary path fails. In most configs you’d see:
interface Tunnel0 tunnel mpls traffic-eng path-option 1 explicit name TO-R3 tunnel mpls traffic-eng path-option 2 dynamic
- s
- Next s
cruit
August 3, 2011 (05:01)
Can you show your topology ?