Advertise Maps


More Narbik Labs. I have arrived at the BGP section, and its very good. It touches on some more obscure features that are really useful.

One of the things i ran into was the use of advertise-maps, exist-maps and non-exist maps. I have used these before, but very briefly.

I also have notes on the use of the mentioned maps, but its one of those things that if you dont use it, you forget it. When i read the task description i immediately

thought of using route-maps in some way. However, the task required some conditional requirements. More specifically, if this network exist

advertise this other network, otherwise dont. Right there, that cancelled my immediate idea.

So lets take a look at the suggested way of accomplishing this task. Namely using advertise-maps, exist-maps and non-exist-maps.

First of, our topology:

Topology for advertise maps

To begin with, we create a normal iBGP peering. I will not go into detail on how to do this since its documented so well alot of different places, including Cisco’s DocCD.

We then advertise all loopbacks on both R1 and R2. Lets verify that its all working so far:

R1(config-router)#do sh ip bgp
 Network          Next Hop            Metric LocPrf Weight Path
*> 1.1.1.0/24       0.0.0.0                  0         32768 i
*>i2.2.2.0/24       192.168.12.2             0    100      0 i
*> 11.11.11.0/24    0.0.0.0                  0         32768 i

*Note, that i cut some output out to breviate the post.

Its all working so far, lets include R2 for completeness:

R2(config-router)#do sh ip bgp
 Network          Next Hop            Metric LocPrf Weight Path
*>i1.1.1.0/24       192.168.12.1             0    100      0 i
*> 2.2.2.0/24       0.0.0.0                  0         32768 i
*>i11.11.11.0/24    192.168.12.1             0    100      0 i

Alright, we are seeing the routes appear as we expected to.

Lets get to the advertise-map part.

These maps will be applied on a per neighbor basis. Ask the following question: “What prefixes do we want to send to this neighbor under what circumstances?”.

As with any other neighbor parameter, it will be under the router-config and after a neighbor command:

R1(config-router)#neighbor 192.168.12.2 ?
  activate                    Enable the Address Family for this Neighbor
  advertise-map         specify route-map for conditional advertisement

Now, lets define our task. We want to advertise the 1.1.1.0/24 route IF the 11.11.11.0/24 route exists in our BGP table.

First, lets create a couple of access-lists that define the networks 1.1.1.0/24 and 11.11.11.0/24:

R1(config)#access-list 1 permit 1.1.1.0 0.255.255.255
R1(config)#access-list 2 permit 11.11.11.0 0.0.0.255

Update:

We actually HAVE to match the inverse of the network in order for it to work. This only goes for the exist-map. There are some discrepancies here. If we create an ACL with the network not inversely matched, but later in the ACL creates one that is, the first ACE will be hit (sh access-list). Go figure.

Now to our maps. What we really want to create is some route-maps. Lets create our advertise map first. This map defines what network we want a condition on:

R1(config)#route-map AD-MAP
R1(config-route-map)#match ip add 1

Next up, lets create our exist-map. This map defines what routes must exist in our BGP table, if the previous (advertise-map) should be advertised:

R1(config)#route-map EXIST-MAP
R1(config-route-map)#match ip add 2

Finally we need to apply the two maps to get the functionality we want. We do this with the neighbor command as we started out with:

R1(config-router)# neighbor 192.168.12.2 advertise-map AD-MAP exist-map EXIST-MAP

Lets then do a soft-reconfig outbound to the neighbor in order to avoid the pacing-walk timer, which i believe is 60 seconds:

R1#clear ip bgp 192.168.12.2 out

Now, the network we are “meassuring” on, is loopback1 on R1, which is up now, so we expect 1.1.1.0/24 being advertised to R2:

R1#sh ip bgp nei 192.168.12.2 advertised-routes
   Network          Next Hop            Metric LocPrf Weight Path
*> 1.1.1.0/24       0.0.0.0                  0         32768 i
*> 11.11.11.0/24    0.0.0.0                  0         32768 i

And on R2:

R2#sh ip bgp
   Network          Next Hop            Metric LocPrf Weight Path
*>i1.1.1.0/24       192.168.12.1             0    100      0 i
*> 2.2.2.0/24       0.0.0.0                  0         32768 i
*>i11.11.11.0/24    192.168.12.1             0    100      0 i

So far, so good. Everything is working fine, and R2 is getting our “questionable” route.

Lets shut down loopback1 on R1 and see what happens with 1.1.1.0/24:

R1(config-if)#do sh ip bgp nei 192.168.12.2 adver
Total number of prefixes 0

Nothing! (remember that we shut down loopback1, so 11.11.11.0/24 went away automatically). Now R2 to verify it completely:

R2#sh ip bgp
   Network          Next Hop            Metric LocPrf Weight Path
*> 2.2.2.0/24       0.0.0.0                  0         32768 i

Great! our conditional advertisement works as planned. Task completed.

Lets recap. We created an advertise-map called AD-MAP. This map tells the router, that this is the network in

question. If our exist-map ends up being true the network in the advertise-map will be advertised. This exist-map is called EXIST-MAP and tells the router that if the network listed in this

exist-map is in the BGP table we want to advertise the network listed in the AD-MAP. If it doesnt exist in the BGP table, we DONT want to match it.

I hope this has been entertaining and has clarified on how and when to use advertise-maps!