Configuring Object Tracking

This module describes the configuration of object tracking on your Cisco IOS XR network. For complete descriptions of the commands listed in this module, see Additional References section. To locate documentation for other commands that might appear in the course of performing a configuration task, see Technical Documentation section in the Additional References topic.

Prerequisites for Implementing Object Tracking

You must be in a user group associated with a task group that includes the proper task IDs. The command reference guides include the task IDs required for each command. If you suspect user group assignment is preventing you from using a command, contact your AAA administrator for assistance.

Information about Object Tracking

Object tracking is a mechanism to track an object and to take an action on another object with no relationship to the tracked objects, based on changes to the properties of the object being tracked.

Each tracked object is identified by a unique name specified on the tracking command-line interface (CLI). Cisco IOS XR processes then use this name to track a specific object.

The tracking process periodically polls the tracked object and reports any changes to its state in terms of its being up or down, either immediately or after a delay, as configured by the user.

Multiple objects can also be tracked by means of a list, using a flexible method for combining objects with Boolean logic. This functionality includes:

  • Boolean AND function—When a tracked list has been assigned a Boolean AND function, each object defined within a subset must be in an up state, so that the tracked object can also be in the up state.
  • Boolean OR function—When the tracked list has been assigned a Boolean OR function, it means that at least one object defined within a subset must also be in an up state, so that the tracked object can also be in the up state.

How to Implement Object Tracking

This section describes the various object tracking procedures.

Tracking the Line Protocol State of an Interface

Perform this task in global configuration mode to track the line protocol state of an interface.

A tracked object is considered up when a line protocol of the interface is up.

After configuring the tracked object, you may associate the interface whose state should be tracked and specify the number of seconds to wait before the tracking object polls the interface for its state.

SUMMARY STEPS

  1. configure
  2. track track-name
  3. type line-protocol state
  4. interface type interface-path-id
  5. exit
  6. (Optional) delay { up seconds| down seconds}
  7. Use one of the following commands:
    • end
    • commit

DETAILED STEPS

  Command or Action Purpose
Step 1

configure

Step 2

track track-name

Example:


RP/0/RP0/CPU0:router(config)# track track1

Enters track configuration mode.

  • track-name —Specifies a name for the object to be tracked.

Step 3

type line-protocol state

Example:


RP/0/RP0/CPU0:router(config-track)# type line-protocol state

Creates a track based on the line protocol of an interface.

Step 4

interface type interface-path-id

Example:


RP/0/RP0/CPU0:router(config-track-line-prot)# interface atm 0/2/0/0.1

Specifies the interface to track the protocol state.

  • type —Specifies the interface type. For more information, use the question mark (?) online help function.
  • interface-path-id —Identifies a physical interface or a virtual interface.
Note 

Use the show interfaces command to see a list of all possible interfaces currently configured on the router.

Note 

The loopback and null interfaces are always in the up state and, therefore, cannot be tracked.

Step 5

exit

Example:

RP/0/RP0/CPU0:router(config-track-line-prot)# exit

Exits the track line protocol configuration mode.

Step 6

(Optional) delay { up seconds| down seconds}

Example:


RP/0/RP0/CPU0:router(config-track)# delay up 10
(Optional)

Schedules the delay that can occur between tracking whether the object is up or down.

Step 7

Use one of the following commands:

  • end
  • commit

Example:


RP/0/RP0/CPU0:router(config-track)# end

or


RP/0/RP0/CPU0:router(config-track)# commit

Saves configuration changes.

  • When you issue the end command, the system prompts you to commit changes:

    
    Uncommitted changes found, commit them 
    before exiting(yes/no/cancel)?
    [cancel]:
    
    • Entering yes saves configuration changes to the running configuration file, exits the configuration session, and returns the router to EXEC mode.

    • Entering no exits the configuration session and returns the router to EXEC mode without committing the configuration changes.

    • Entering cancel leaves the router in the current configuration session without exiting or committing the configuration changes.

  • Use the commit command to save the configuration changes to the running configuration file and remain within the configuration session.

Tracking IP Route Reachability

When a host or a network goes down on a remote site, routing protocols notify the router and the routing table is updated accordingly. The routing process is configured to notify the tracking process when the route state changes due to a routing update.

A tracked object is considered up when a routing table entry exists for the route and the route is accessible.

SUMMARY STEPS

  1. configure
  2. track track-name
  3. type route reachability
  4. Use one of the following commands:
    • vrf vrf-table-name
    • route ipv4 IP-prefix/mask
  5. exit
  6. (Optional) delay { up seconds| down seconds}
  7. commit

DETAILED STEPS

  Command or Action Purpose
Step 1

configure

Step 2

track track-name

Example:


RP/0/RP0/CPU0:router(config)# track track1

Enters track configuration mode.

  • track-name —Specifies a name for the object to be tracked.

Step 3

type route reachability

Example:


RP/0/RP0/CPU0:router(config-track)# type route reachability vrf internet

Configures the routing process to notify the tracking process when the state of the route changes due to a routing update.

Step 4

Use one of the following commands:

  • vrf vrf-table-name
  • route ipv4 IP-prefix/mask

Example:


RP/0/RP0/CPU0:router(config-track-route)# vrf vrf-table-4

or


RP/0/RP0/CPU0:router(config-track-route)# route ipv4 10.56.8.10/16

Configures the type of IP route to be tracked, which can consist of either of the following, depending on your router type:

  • vrf-table-name —A VRF table name.
  • IP-prefix/mask —An IP prefix consisting of the network and subnet mask (for example, 10.56.8.10/16).
Step 5

exit

Example:

RP/0/RP0/CPU0:router(config-track-line-prot)# exit

Exits the track line protocol configuration mode.

Step 6

(Optional) delay { up seconds| down seconds}

Example:


RP/0/RP0/CPU0:router(config-track)# delay up 10
(Optional)

Schedules the delay that can occur between tracking whether the object is up or down.

Step 7

commit

Building a Track Based on a List of Objects

Perform this task in the global configuration mode to create a tracked list of objects (which, in this case, are lists of interfaces or prefixes) using a Boolean expression to determine the state of the list.

A tracked list contains one or more objects. The Boolean expression enables two types of calculations by using either AND or OR operators. For example, when tracking two interfaces, using the AND operator, up means that both interfaces are up, and down means that either interface is down.


Note

An object must exist before it can be added to a tracked list.

The NOT operator is specified for one or more objects and negates the state of the object.


After configuring the tracked object, you must associate the interface whose state should be tracked and you may optionally specify the number of seconds to wait before the tracking object polls the interface for its state.

SUMMARY STEPS

  1. configure
  2. track track-name
  3. type list boolean { and | or }
  4. object object-name [ not ]
  5. exit
  6. (Optional) delay { up seconds| down seconds}
  7. Use one of the following commands:
    • end
    • commit

DETAILED STEPS

  Command or Action Purpose
Step 1

configure

Step 2

track track-name

Example:


RP/0/RP0/CPU0:router(config)# track track1

Enters track configuration mode.

  • track-name —Specifies a name for the object to be tracked.

Step 3

type list boolean { and | or }

Example:


RP/0/RP0/CPU0:router(config-track-list)# type list boolean and

Configures a Boolean list object and enters track list configuration mode.

  • boolean —Specifies that the state of the tracked list is based on a Boolean calculation.
  • and —Specifies that the list is up if all objects are up, or down if one or more objects are down. For example when tracking two interfaces, up means that both interfaces are up, and down means that either interface is down.
  • or —Specifies that the list is up if at least one object is up. For example, when tracking two interfaces, up means that either interface is up, and down means that both interfaces are down.
Step 4

object object-name [ not ]

Example:


RP/0/RP0/CPU0:router(config-track-list)# object 3 not 

Specifies the object to be tracked by the list

  • obect-name —Name of the object to track.
  • not —Negates the state of the object.
Step 5

exit

Example:

RP/0/RP0/CPU0:router(config-track-line-prot)# exit

Exits the track line protocol configuration mode.

Step 6

(Optional) delay { up seconds| down seconds}

Example:


RP/0/RP0/CPU0:router(config-track)# delay up 10
(Optional)

Schedules the delay that can occur between tracking whether the object is up or down.

Step 7

Use one of the following commands:

  • end
  • commit

Example:


RP/0/RP0/CPU0:router(config-track)# end

or


RP/0/RP0/CPU0:router(config-track)# commit

Saves configuration changes.

  • When you issue the end command, the system prompts you to commit changes:

    
    Uncommitted changes found, commit them 
    before exiting(yes/no/cancel)?
    [cancel]:
    
    • Entering yes saves configuration changes to the running configuration file, exits the configuration session, and returns the router to EXEC mode.

    • Entering no exits the configuration session and returns the router to EXEC mode without committing the configuration changes.

    • Entering cancel leaves the router in the current configuration session without exiting or committing the configuration changes.

  • Use the commit command to save the configuration changes to the running configuration file and remain within the configuration session.

Building a Track Based on a List of Objects - Threshold Percentage

Perform this task in the global configuration mode to create a tracked list of objects (which, in this case, are lists of interfaces or prefixes) using a threshold percentage to determine the state of the list.

SUMMARY STEPS

  1. configure
  2. track track-name
  3. type list threshold percentage
  4. object object-name
  5. threshold percentage up percentage down percentage
  6. Use one of the following commands:
    • end
    • commit

DETAILED STEPS

  Command or Action Purpose
Step 1

configure

Step 2

track track-name

Example:


RP/0/RP0/CPU0:router(config)# track track1

Enters track configuration mode.

  • track-name —Specifies a name for the object to be tracked.

Step 3

type list threshold percentage

Example:


RP/0/RP0/CPU0:router(config-track-list)# type list threshold percentage

Configures a track of type threshold percentage list.

Step 4

object object-name

Example:


RP/0/RP0/CPU0:router(config-track-list-threshold)# object 1
RP/0/RP0/CPU0:router(config-track-list-threshold)# object 2
RP/0/RP0/CPU0:router(config-track-list-threshold)# object 3
RP/0/RP0/CPU0:router(config-track-list-threshold)# object 4

Configures object 1, object 2, object 3 and object 4 as members of track type track1.

Step 5

threshold percentage up percentage down percentage

Example:


RP/0/RP0/CPU0:router(config-track-list-threshold)# threshold 
percentage up 50 down 33

Configures the percentage of objects that need to be UP or DOWN for the list to be considered UP or Down respectively.

For example, if object 1, object 2, and object 3 are in the UP state and object 4 is in the DOWN state, the list is considered to be in the UP state.

Step 6

Use one of the following commands:

  • end
  • commit

Example:


RP/0/RP0/CPU0:router(config-track)# end

or


RP/0/RP0/CPU0:router(config-track)# commit

Saves configuration changes.

  • When you issue the end command, the system prompts you to commit changes:

    
    Uncommitted changes found, commit them 
    before exiting(yes/no/cancel)?
    [cancel]:
    
    • Entering yes saves configuration changes to the running configuration file, exits the configuration session, and returns the router to EXEC mode.

    • Entering no exits the configuration session and returns the router to EXEC mode without committing the configuration changes.

    • Entering cancel leaves the router in the current configuration session without exiting or committing the configuration changes.

  • Use the commit command to save the configuration changes to the running configuration file and remain within the configuration session.

Building a Track Based on a List of Objects - Threshold Weight

Perform this task in the global configuration mode to create a tracked list of objects (which, in this case, are lists of interfaces or prefixes) using a threshold weight to determine the state of the list.

SUMMARY STEPS

  1. configure
  2. track track-name
  3. type list threshold weight
  4. object object-name weight weight
  5. threshold weight up weight down weight
  6. Use one of the following commands:
    • end
    • commit

DETAILED STEPS

  Command or Action Purpose
Step 1

configure

Step 2

track track-name

Example:


RP/0/RP0/CPU0:router(config)# track track1

Enters track configuration mode.

  • track-name —Specifies a name for the object to be tracked.

Step 3

type list threshold weight

Example:


RP/0/RP0/CPU0:router(config-track-list)# type list threshold weight

Configures a a track of type, threshold weighted list.

Step 4

object object-name weight weight

Example:


RP/0/RP0/CPU0:router(config-track-list-threshold)# object 1 weight 10
RP/0/RP0/CPU0:router(config-track-list-threshold)# object 2 weight 5
RP/0/RP0/CPU0:router(config-track-list-threshold)# object 3 weight 3

Configures object 1, object 2 and object 3 as members of track t1 and with weights 10, 5 and 3 respectively.

Step 5

threshold weight up weight down weight

Example:


RP/0/RP0/CPU0:router(config-track-list-threshold)# threshold weight 
up 10 down 5

Configures the range of weights for the objects that need to be UP or DOWN for the list to be considered UP or DOWN respectively. In this example, the list is considered to be in the DOWN state because objects 1 and 2 are in the UP state and the cumulative weight is 15 (not in the 10-5 range).

Step 6

Use one of the following commands:

  • end
  • commit

Example:


RP/0/RP0/CPU0:router(config-track)# end

or


RP/0/RP0/CPU0:router(config-track)# commit

Saves configuration changes.

  • When you issue the end command, the system prompts you to commit changes:

    
    Uncommitted changes found, commit them 
    before exiting(yes/no/cancel)?
    [cancel]:
    
    • Entering yes saves configuration changes to the running configuration file, exits the configuration session, and returns the router to EXEC mode.

    • Entering no exits the configuration session and returns the router to EXEC mode without committing the configuration changes.

    • Entering cancel leaves the router in the current configuration session without exiting or committing the configuration changes.

  • Use the commit command to save the configuration changes to the running configuration file and remain within the configuration session.

Configuration Examples for Configuring Object Tracking

Tracking Whether the Interface Is Up or Down: Running Configuration Example


track connection100
  type list boolean and
    object object3 not
    delay up 10
    !
interface service-ipsec 23
  line-protocol track connection100
  !
  

Tracking the Line Protocol State of an Interface: Running Configuration Example

In this example, traffic arrives from interface service-ipsec1 and exits through interface gigabitethernet0/0/0/3:


track IPSec1
  type line-protocol state
    interface gigabitethernet0/0/0/3
    !
interface service-ipsec 1
  ipv4 address 70.0.0.1 255.255.255.0
  profile vrf1_profile_ipsec
  line-protocol track IPSec1
  tunnel source 80.0.0.1
  tunnel destination 80.0.0.2
  service-location preferred-active 0/0/1
  !
  

This example displays the output from the show track command after performing the previous example:


RP/0/RP0/CPU0:router# show run track 

  Track IPSec1 
  Interface GigabitEthernet0_0_0_3 line-protocol
  !
    Line protocol is UP
    1 change, last change 10:37:32 UTC Thu Sep 20 2007
    Tracked by:
    service-ipsec1
    !

Tracking IP Route Reachability: Running Configuration Example

In this example, traffic arriving from interface service-ipsec1 has its destination in network 7.0.0.0/24. This tracking procedure follows the state of the routing protocol prefix to signal when there are changes in the routing table.


track PREFIX1
  type route reachability
    route ipv4 7.0.0.0/24
    !
  interface service-ipsec 1
  vrf 1
  ipv4 address 70.0.0.2 255.255.255.0
  profile vrf_1_ipsec
  line-protocol track PREFIX1
  tunnel source 80.0.0.2
  tunnel destination 80.0.0.1
  service-location preferred-active 0/2/0
  

Building a Track Based on a List of Objects: Running Configuration Example

In this example, traffic arriving from interface service-ipsec1 exits through interface gigabitethernet0/0/0/3 and interface ATM 0/2/0/0.1. The destination of the traffic is at network 7.0.0.0/24.

If either one of the interfaces or the remote network goes down, the flow of traffic must stop. To do this, we use a Boolean AND expression.


track C1
 type route reachability
  route ipv4 3.3.3.3/32
 !
!
track C2
 type route reachability
  route ipv4 1.2.3.4/32
 !
!
track C3
 type route reachability
  route ipv4 10.0.20.2/32
 !
!
track C4
 type route reachability
  route ipv4 10.0.20.0/24
 !
!
track OBJ
 type list boolean and
  object C1
  object C2
 !
!
track OBJ2
 type list boolean or
  object C1
  object C2
 !