Route maps are a powerful tool used to manipulate routing information and policies within a network. They allow network administrators to control and influence how routes are advertised, received, and selected on Cisco routers.

Route maps are extremely versatile and can be used in conjunction with routing protocols and other features to very granularly manipulate both control plane functionalities and data plane traffic.
In this article, we’ll take a look at route maps, how they function, and with what features they can be used. We’ll also be looking at a couple of examples of some of the most common ways they are used.
What are Route Maps?
Route maps are logical constructs that can be configured within a Cisco router that can be leveraged in a variety of ways.
They are often employed in conjunction with routing protocols such as BGP, OSPF, and EIGRP, to manipulate the advertising of routes between routers running those protocols.
Manipulating the exchange of routing information is what they are most often used for. However, they are versatile enough to be employed in combination with other features to perform things like policy-based routing (PBR), Quality of Service (QoS) classification of traffic, applying matched traffic to IP SLAs, and even simply filtering user traffic in conjunction with Access Lists.
Components of a Route Map Configuration
Route maps are composed of a series of one or more route map statements with a structure similar to the following pseudocode:
- Route map statement 1
- Match condition checked
- if no match, go to statement 2
- if matched, apply an action, route map ends.
- Match condition checked
- Route map statement 2
- Match condition checked
- if no match, go to statement 3
- if matched, apply an action, route map ends.
- Match condition checked
- Route map statement 3
- Match condition checked
- if no match, go to end.
- if matched, apply an action, route map ends.
- Match condition checked
- Implicit Deny, route map ends.
These route map statements have a match condition that can have one of two results: either a match or no match.
If there is a match, an action is applied, and the processing of the route map ends. If there is no match, then the next statement in the route map is examined.
The same logic continues until there is a match and an action is taken, or until the end of the route map is reached, where there is an implicit deny action.
Let’s take a closer look at each of the components that comprise a route map:
Route Map Statement
A route map statement can have either a permit or a deny keyword, much like access lists. If you have a permit keyword and the match condition is met, then any action configured for that route map statement will be applied.
Match Statement
These statements define the conditions under which a route map will take action. For example, a match statement can specify that a route map should apply only to routes that match certain criteria, such as an IP address prefix, a BGP AS path, or a specific tag.
If a match condition is met, and you have a deny keyword in the route map, then processing is simply stopped. No further action is taken. If a match is made in a route map entry with a permit keyword, then, any configured action to be taken is applied.
What kinds of conditions can you match? Take a look at this context-sensitive help from the CLI of a Cisco router that shows what kind of match conditions you can specify:
Router(config-route-map)#match ?
additional-paths BGP Add-Path match policies
as-path Match BGP AS path list
clns CLNS information
community Match BGP community list
extcommunity Match BGP/VPN extended community list
interface Match first hop interface of route
ip IP specific information
ipv6 IPv6 specific information
length Packet length
local-preference Local preference for route
mdt-group Match routes corresponding to MDT group
metric Match metric of route
mpls-label Match routes which have MPLS labels
policy-list Match IP policy list
route-type Match route-type of route
rpki Match RPKI state of route
security-group Security Group
source-protocol Match source-protocol of route
tag Match tag of route
track tracking object
Don’t worry about the syntax of the command for now. We’ll get to that shortly. For now, the purpose of the above command is just to see the multitude of options available for match criteria. The above list may differ slightly depending on the platform and the IOS version being used.
Set Statement
If the conditions specified in the match statement are met, the set statement defines the actions to be taken.
This could involve modifying attributes of the route, such as the next hop, metric, or BGP attributes like local preference or communities.
Set statements are only employed if there is a permit keyword used. If a deny keyword is used for a particular route map entry, no set actions will be taken, even if they are configured.
What kinds of parameters can you set? Take a look at this context-sensitive help from the CLI of a Cisco router that shows what kind of set parameters can be specified:
Router (config-route-map)#set ?
aigp-metric accumulated metric value
as-path Prepend string for a BGP AS-path attribute
automatic-tag Automatically compute TAG value
clns OSI summary address
comm-list set BGP community list (for deletion)
community BGP community attribute
dampening Set BGP route flap dampening parameters
default Set default information
extcomm-list Set BGP/VPN extended community list (for deletion)
extcommunity BGP extended community attribute
global Set to global routing table
interface Output interface
ip IP specific information
ipv6 IPv6 specific information
level Where to import route
lisp Locator ID Separation Protocol specific information
local-preference BGP local preference path attribute
metric Metric value for destination routing protocol
metric-type Type of metric for destination routing protocol
mpls-label Set MPLS label for prefix
origin BGP origin code
tag Tag value for destination routing protocol
traffic-index BGP traffic classification number for accounting
vrf Define VRF name
weight BGP weight for routing table
Don’t worry about the syntax for this for now, the purpose of the above command is just to see the multitude of options available for setting parameters. The above list may differ slightly depending on the platform and the IOS version being used.
Sequence Numbers
As mentioned before, route maps consist of one or more entries. Each entry is identified by a sequence number.
The sequence number dictates the order in which the entries are evaluated. The router processes the route map entries in order from the lowest to the highest sequence number.
These numbers also help in allowing you to add or remove particular entries in the appropriate sequence when editing a route map.
Putting it all together
If you have never dealt with route maps, it is likely that the above descriptions have not been fully comprehensible, and that’s OK.
In order to gain a full understanding of these concepts, how they work, and how they are put together, you must gain experience from creating, modifying, and applying route maps in various scenarios. Once you have done this, you can review the above explanation again, and I can guarantee that you will understand it more fully.
In the following sections, I have an example of a route map and how it is applied to help you gain this understanding from experience.
Applying Route Maps
In this section, we will describe a very common application of route maps. A route map will be used to filter out a network from an EIGRP advertisement from one router to another.
Filtering EIGRP routes
Let’s say that R1, which has an IP address of 192.168.13.3, is sending an EIGRP update to R2 containing a series of routes that it is advertising. Looking at R2’s routing table, we can see those EIGRP routes:
R2#show ip route eigrp
D 192.168.24.0/24 [90/33280] via 192.168.13.3, 00:21:53, FastEthernet0/0
D 192.168.34.0/24 [90/33280] via 192.168.13.3, 00:21:50, FastEthernet0/0
D 192.168.44.0/24 [90/33280] via 192.168.13.3, 00:21:47, FastEthernet0/0
Let’s say you want to apply a route map on R2 so that any incoming EIGRP updates coming into the local router will have the 192.168.34.0/24 network filtered out.
To achieve this, you can create an access list to match the specific route and then use a route map to reference the access list. You can then add the route map to the EIGRP process. Here’s how you can complete the steps:
Define an Access List to Match the Route:
First, you create an access list that will match the specific network 192.168.34.0/24 that you want to filter out.
R2(config)#access-list 10 deny 192.168.34.0 0.0.0.255
R2(config)#access-list 10 permit any
The first line denies the specific route 192.168.34.0/24 and the second line permits all other routes, ensuring that no other routes are filtered out. Remember, ACLs have an implicit “deny all” at the end.
Create a Route Map to Use the Access List:
Next, create a route map that references the access list. This route map will be used to filter the route in incoming EIGRP updates.
R2(config)#route-map FILTER_EIGRP_IN deny 10
R2(config-route-map)#match ip address 10
R2(config-route-map)#route-map FILTER_EIGRP_IN permit 20
The first statement with sequence number 10 matches the route specified in access list 10 that we created above and denies it from being accepted into the routing table.
The second statement with sequence number 20 allows all other routes to be processed normally. This statement is necessary because a route map has an implicit deny at the end.
Apply the Route Map to the EIGRP Process:
Finally, apply the route map to the inbound EIGRP updates on the interface facing R1.
R2(config)#router eigrp 100
R2(config-router)#network 192.168.0.0
R2(config-router)#distribute-list route-map FILTER_EIGRP_IN in
The distribute-list route-map FILTER_EIGRP_IN in command applies the FILTER_EIGRP_IN route map to incoming EIGRP routing updates on R2.
This will filter out the 192.168.34.0/24 route from being installed into R2’s routing table. It’s important to note here that the in keyword refers to the direction of the EIGRP updates and not the direction of the user data.
So, this route map will be applied to the actual contents (the advertised routes) of an EIGRP update that is received (in an incoming direction) from a neighboring EIGRP router.
The result is that R2 receives the EIGRP update, and the route map removes the specific routing entry from the update before it is processed by EIGRP. The result is that R2 will no longer have that route in the routing table. Let’s see if this worked:
R2#show ip route eigrp
D 192.168.24.0/24 [90/33280] via 192.168.13.3, 00:21:53, FastEthernet0/0
D 192.168.44.0/24 [90/33280] via 192.168.13.3, 00:21:47, FastEthernet0/0
As you can see, the 192.168.34.0/24 network has not been added to the routing table.
A wide range of uses
The implementation of route maps can become extremely complicated. There are so many applications and so many different ways of implementing them, as you have seen from the multitude of match and set options available.
Route maps are also able to call upon ACLs, prefix lists, distribute lists, and even other route maps as part of their match statements.
As a result, you can write very elaborate and powerful hierarchical scripts to perform highly complex manipulations of a whole series of features.
Conclusion
To fully appreciate and harness the power of route maps, the only true way to do so is through experience.
So, either by implementing them in production networks as needed or by practicing with them in lab environments in various scenarios, practical experience is a vital part of learning these elaborate and powerful networking tools.
Related Posts
- Difference Between Routers and Switches in TCP/IP Networks
- 11 Different Types of IP Addresses Used in Computer Networks
- Compare and Contrast Network Topologies (Star, Mesh, Bus, Hybrid etc)
- 11 Networking Companies Like Cisco (Competitors)
- What is a Wildcard Mask – All About Wildcard Masks Used in Networking