BGP - sending partial table

Unanswered Question
Nov 10th, 2008

Most of the posts in this forum center around receiving partial tables. What is the best way to send a partial table? I know I can control subnets via a distribute list (and specify ¼ or ½ of the IPV4 table via an ACL) and I can control what AS# we send via a prefix list (such as specifying our AS# but that is not much of a chunk of the whole table). . Either way seems kind of simple and possibly hard to manage. I guess what I am looking for is a best practices for advertising a partial table.


  • 1
  • 2
  • 3
  • 4
  • 5
Overall Rating: 5 (3 ratings)
Richard Burts Mon, 11/10/2008 - 14:00


The perspective of what to advertise is somewhat different depending on whether you are a customer or are a service provider. If you are a customer you generally want to advertise only routes that originate within your network (otherwise you start providing transit services to other organizations and most customers do not want to do this). So from the perspective of the customer the partial table is the routes that originated within your own network and that is a pretty easy filter to configure.

From the perspective of the service provider the concept of a partial table advertisement is more meaningful. Frequently the partial table may be the grouping of routes that originated within the provider network (or networks that originate with direct customers of the provider and which use the provider's AS#). Or the partial table may be the routes that originate from the provider and customer networks and routes that originate 1 AS away from the customer (so that would be 1 or 2 AS# in the AS path advertised to you). Or perhaps the partial table is the provider/customer routes and routes 1 or 2 AS away (or 1 or 2 or 3 or pick some number of AS as the limit). You can write an AS path filter to allow a specified number of AS to be advertised.



todh Thu, 11/13/2008 - 05:24

Thanks everyone for the very helpful responses. We would be approaching this from the perspective of the service provider and would be interested in advertising routes associated with our AS and all AS directly connected to us which I guess would be equivalent up to 2 AS away. This leads me to my next question, any general guidance on how to do that? I have been reading up on regular expressions but I find it confusing. I have also tried searching without much luck. Thanks.

marikakis Thu, 11/13/2008 - 06:43


The regular expressions can get very confusing. People normally think through it only once, and then repeat the same logic each time without much extra thought. For example:

1) For routes originating in your own AS you permit: ^$

The AS_PATH string is empty for locally originated routes. Between the beginning of the string (^) and the end of the string ($) there exists nothing.

2) For routes of your direct customer, lets say it has been assigned AS VWXYZ, you permit:


Between the beginning of the string (^) and the end of the string ($) there exists at least one occurence (+) of VWXYZ (underscore is separator in case customer prepends own AS multiple times).

3) For routes of your direct customer AS VWXYZ, that also has its own customer, lets say AS ABCDE, you permit: ^(_VWXYZ)+(_ABCDE)+$

The logic is the same as in previous case. Only thing to notice is that the originator is on the right of the string. Note that ^(_VWXYZ)+(_ABCDE)*$ also works (* means that no occurence of ABCDE is ok). Routes originated in AS VWXYZ would pass as well when * is used, which is probably not an issue.

4) If you have many customers that have many customers, you could combine 2 and 3 to cut down some typing, like this:


This matches a string with at least one occurence of VWXYZ followed by (zero or more occurences of ABCDE) OR (zero or more occurences of FGHIJ) OR (zero or more occurences of KLMNO) OR (zero or more occurences of PQRST). For example: VWXYZ, VWXYZ ABCDE, VWXYZ ABCDE ABCDE, VWXYZ ABCDE ABCDE ABCDE, VWXYZ FGHIJ, etc.

Other solutions might accomplish similar results or even better. You just have to be careful not to allow something that should not be allowed.

Kind Regards,


todh Thu, 11/13/2008 - 06:59

That is exactly what I need to get going on this. Thanks for taking your time to explain. I appreciate the help. Tod

Giuseppe Larosa Tue, 11/11/2008 - 01:29

Hello Tod,

>> What is the best way to send a partial table?

there is no single answer because it depends from whom is on the other end of the eBGP session.

for a peering relationship between two ISPs you should pass only your own routes and those of your direct customers.

if you are requested to send a partial table to a customer other criteria can be used: geographic relevance, interest.

All these criteria can be coded in BGP communities : so to a customer requesting selected routes the provider could send the routes that satisfy an ad hoc BGP community filter.

Because BGP community is not a single value but can be made of multiple community providers usually add multiple community to classify routes: for example one to say the country/region, one for type / industry of customer and so on

Hope to help


Mohamed Sobair Tue, 11/11/2008 - 01:55


Applying the appropriate filters in place would achieve what you are looking for.

In BGP, In order to avoid being a transit AS you should apply the appropriate filters, a BGP speaker by default will advertise all received BGP routes by its neighbors or through a Network command , redistribution or aggregation.




This Discussion