In the MPLS Traffic Engineering (TE) configuration lesson, I explained how to configure an MPLS network into a network that supports MPLS TE. With a dynamic path option and no constraints, a tunnel follows the same path as your IGP routing. In this lesson, I’ll explain how to configure an explicit path. This means that you can decide which routers and/or interfaces the tunnel should use or avoid.

This is the topology we’ll use:

Mpls Te Pe C Router Topology

This network has been pre-configured to support MPLS TE. We have a tunnel from PE1 to PE2. I use Cisco IOS Software, IOSv Software (VIOS-ADVENTERPRISEK9-M), Version 15.9(3)M4.

  • Configurations
  • CE1
  • CE2
  • P1
  • P2
  • P3
  • PE1
  • PE2

Want to take a look for yourself? Here you will find the startup configuration of each device.

The tunnel I have uses a dynamic path option. Here is the configuration:

PE1#show running-config interface Tunnel 1

interface Tunnel1
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 6.6.6.6
 tunnel mpls traffic-eng priority 7 7
 tunnel mpls traffic-eng bandwidth 750
 tunnel mpls traffic-eng path-option 1 dynamic

This tunnel takes the shortest path through P1:

PE1#show mpls traffic-eng tunnels tunnel 1

Name: PE1_t1                              (Tunnel1) Destination: 6.6.6.6
  Status:
    Admin: up         Oper: up     Path: valid       Signalling: connected
    path option 1, type dynamic (Basis for Setup, path weight 20)

  Config Parameters:
    Bandwidth: 750      kbps (Global)  Priority: 7  7   Affinity: 0x0/0xFFFF
    Metric Type: TE (default)
    AutoRoute:  disabled  LockDown: disabled  Loadshare: 750      bw-based
    auto-bw: disabled
  Active Path Option Parameters:
    State: dynamic path option 1 is active
    BandwidthOverride: disabled  LockDown: disabled  Verbatim: disabled


  InLabel  :  - 
  OutLabel : GigabitEthernet0/1, 17
  RSVP Signalling Info:
       Src 2.2.2.2, Dst 6.6.6.6, Tun_Id 1, Tun_Instance 6
    RSVP Path Info:
      My Address: 192.168.23.2   
      Explicit Route: 192.168.23.3 192.168.36.3 192.168.36.6 6.6.6.6
      Record   Route:   NONE
      Tspec: ave rate=750 kbits, burst=1000 bytes, peak rate=750 kbits
    RSVP Resv Info:
      Record   Route:   NONE
      Fspec: ave rate=750 kbits, burst=1000 bytes, peak rate=750 kbits
  Shortest Unconstrained Path Info:
    Path Weight: 20 (TE)
    Explicit Route: 192.168.23.2 192.168.23.3 192.168.36.3 192.168.36.6 
                    6.6.6.6 
  History:
    Tunnel:
      Time since created: 2 days, 23 hours, 35 minutes
      Time since path change: 2 days, 23 hours, 34 minutes
      Number of LSP IDs (Tun_Instances) used: 6
    Current LSP:
      Uptime: 2 days, 23 hours, 34 minutes

The output above shows that PE1 uses the shortest path to P1 to get to PE2. Let’s see if we can force the tunnel through P2 and P3 instead.

Configuration

There are multiple options to accomplish this. We can either include or exclude specific router IDs or interface IP addresses, forcing the tunnel to take another path. We’ll try all combinations.

Exclude

We’ll start with examples of how to exclude specific router IDs or interfaces.

Router ID

We’ll configure PE1 so that a tunnel can’t use a path with P1 in it. We do this with the ip explicit-path command:

PE1(config)#ip explicit-path name EXCLUDE_P1 enable
PE1(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 address in the path
  no               Delete a specific explicit-path entry index

An explicit path can have a name or identifier. I use a name and I’ll add the router ID of P1:

PE1(cfg-ip-expl-path)#exclude-address 3.3.3.3

To test this, I’ll create a new tunnel:

PE1(config)#interface Tunnel 2
PE1(config-if)#ip unnumbered loopback 0
PE1(config-if)#tunnel mode mpls traffic-eng
PE1(config-if)#tunnel destination 6.6.6.6
PE1(config-if)#tunnel mpls traffic-eng bandwidth 750

We’ll add a new path option:

PE1(config-if)#tunnel mpls traffic-eng path-option 1 ?
  dynamic   setup based on dynamically calculcated path
  explicit  setup based on preconfigured path

Instead of dynamic, we’ll select explicit and select name:

PE1(config-if)#tunnel mpls traffic-eng path-option 1 explicit ?
  identifier  Specify an IP explicit path by number
  name        Specify an IP explicit path by name

We refer to the name of the explicit path we created:

PE1(config-if)#tunnel mpls traffic-eng path-option 1 explicit name EXCLUDE_P1

Now check out our new tunnel:

PE1#show mpls traffic-eng tunnels tunnel 2

Name: PE1_t2                              (Tunnel2) Destination: 6.6.6.6
  Status:
    Admin: up         Oper: up     Path: valid       Signalling: connected
    path option 1, type explicit EXCLUDE_P1 (Basis for Setup, path weight 30)

  Config Parameters:
    Bandwidth: 750      kbps (Global)  Priority: 7  7   Affinity: 0x0/0xFFFF
    Metric Type: TE (default)
    AutoRoute:  disabled  LockDown: disabled  Loadshare: 750      bw-based
    auto-bw: disabled
  Active Path Option Parameters:
    State: explicit path option 1 is active
    BandwidthOverride: disabled  LockDown: disabled  Verbatim: disabled


  InLabel  :  - 
  OutLabel : GigabitEthernet0/2, 16
  RSVP Signalling Info:
       Src 2.2.2.2, Dst 6.6.6.6, Tun_Id 2, Tun_Instance 1
    RSVP Path Info:
      My Address: 192.168.24.2   
      Explicit Route: 192.168.24.4 192.168.45.4 192.168.45.5 192.168.56.5 
                      192.168.56.6 6.6.6.6 
      Record   Route:   NONE
      Tspec: ave rate=750 kbits, burst=1000 bytes, peak rate=750 kbits
    RSVP Resv Info:
      Record   Route:   NONE
      Fspec: ave rate=750 kbits, burst=1000 bytes, peak rate=750 kbits
  Shortest Unconstrained Path Info:
    Path Weight: 20 (TE)
    Explicit Route: 192.168.23.2 192.168.23.3 192.168.36.3 192.168.36.6 
                    6.6.6.6 
  History:
    Tunnel:
      Time since created: 1 minutes, 42 seconds
      Time since path change: 6 seconds
      Number of LSP IDs (Tun_Instances) used: 1
    Current LSP:
      Uptime: 6 seconds

The output above shows the explicit path that we use. Because we can’t go through P1, this tunnel goes through P2 and P3 to get to PE2.

Interfaces

Now let’s see if we can exclude specific interfaces. I’ll try to exclude the GigabitEthernet 0/1 interface on PE1. We’ll use the ip explicit-path command again:

PE1(config)#ip explicit-path name EXCLUDE_P1_GI01
PE1(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 address in the path
  no               Delete a specific explicit-path entry index

Once again, we’ll use the exclude-address command. I’ll exclude the IP address:

PE1(cfg-ip-expl-path)#exclude-address 192.168.36.3

Let’s create a new tunnel interface with a path option that uses our explicit path:

PE1(config)#interface Tunnel 3
PE1(config-if)#ip unnumbered Loopback0
PE1(config-if)#tunnel mode mpls traffic-eng
PE1(config-if)#tunnel destination 6.6.6.6
PE1(config-if)#tunnel mpls traffic-eng bandwidth 750
PE1(config-if)#tunnel mpls traffic-eng path-option 1 explicit name EXCLUDE_P1_GI01

Here’s our new tunnel interface:

PE1#show mpls traffic-eng tunnels tunnel 3

Name: PE1_t3                              (Tunnel3) Destination: 6.6.6.6
  Status:
    Admin: up         Oper: up     Path: valid       Signalling: connected
    path option 1, type explicit EXCLUDE_P1_GI01 (Basis for Setup, path weight 30)

  Config Parameters:
    Bandwidth: 750      kbps (Global)  Priority: 7  7   Affinity: 0x0/0xFFFF
    Metric Type: TE (default)
    AutoRoute:  disabled  LockDown: disabled  Loadshare: 750      bw-based
    auto-bw: disabled
  Active Path Option Parameters:
    State: explicit path option 1 is active
    BandwidthOverride: disabled  LockDown: disabled  Verbatim: disabled


  InLabel  :  - 
  OutLabel : GigabitEthernet0/2, 29
  RSVP Signalling Info:
       Src 2.2.2.2, Dst 6.6.6.6, Tun_Id 3, Tun_Instance 1
    RSVP Path Info:
      My Address: 192.168.24.2   
      Explicit Route: 192.168.24.4 192.168.45.4 192.168.45.5 192.168.56.5 
                      192.168.56.6 6.6.6.6
      Record   Route:   NONE
      Tspec: ave rate=750 kbits, burst=1000 bytes, peak rate=750 kbits
    RSVP Resv Info:
      Record   Route:   NONE
      Fspec: ave rate=750 kbits, burst=1000 bytes, peak rate=750 kbits
  Shortest Unconstrained Path Info:
    Path Weight: 20 (TE)
    Explicit Route: 192.168.23.2 192.168.23.3 192.168.36.3 192.168.36.6 
                    6.6.6.6 
  History:
    Tunnel:
      Time since created: 3 minutes, 45 seconds
      Time since path change: 3 minutes, 31 seconds
      Number of LSP IDs (Tun_Instances) used: 1
    Current LSP:
      Uptime: 3 minutes, 31 seconds

This tunnel goes through P2 and P3 because it’s not allowed to go through P1’s GigabitEthernet 0/1 interface.