{"id":5145,"date":"2026-03-27T17:21:46","date_gmt":"2026-03-27T17:21:46","guid":{"rendered":"https:\/\/geekmungus.co.uk\/?p=5145"},"modified":"2026-03-27T17:21:46","modified_gmt":"2026-03-27T17:21:46","slug":"bgp-test-lab-part-20-routing-information-base-rib-bgp-debug-logging-and-other-things","status":"publish","type":"post","link":"https:\/\/geekmungus.co.uk\/?p=5145","title":{"rendered":"BGP Test Lab &#8211; Part 20 &#8211; Routing Information Base (RIB), BGP Debug Logging and other Things"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The Routing Information Base (RIB) is one of the key workings of the BGP protocol on a router. The RIB is not just a routing table, it&#8217;s a dynamic repository of all the information that a router has learned from BGP Neighbours, along with a host of associated other attributes, such as the route&#8217;s AS Path, MED, local preference and so on.&nbsp;The RIB as a whole makes a comprehensive set of data that forms the foundation for the BGP decision process, that allows a router to evaluate and select the best path for traffic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The article will be quick piecemeal,&nbsp;where i&#8217;ll throw in a number of different topics that, up until now we&#8217;ve not covered at all or only briefly mentioned.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-StructureoftheRIB\">Structure of the RIB<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The RIB is split into three main parts which are summarised below, but depending on the vendor and the different names for things, it can get a bit confusing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So to be clear, the BGP RIB has three parts, the Adj-RIB-In (RIB-In), the Local RIB (Loc-RIB) and the Adj-RIB-Out (RIB-Out).&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Adj-RIB-In(RIB-In)\">Adj-RIB-In (RIB-In)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Adj-RIB-In collects all the routes (prefixes) from BGP Neighbours (peers). It&#8217;s just all the routes in raw form, before any modifications or policy filtering. So potentially within this you&#8217;ll find routes that your filters (policy) will discard too.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-LocalRIB(Loc-RIB)\">Local RIB (Loc-RIB)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When the router receives the routes (from the Adj-RIB-In), it runs them through the various filters and policies after which the result is stored in the Local RIB. It is the Local RIB that contains only the routes that are active and &#8220;best&#8221; and compliant with any of the policies will make it in here and be actually used to govern the flow of traffic through the router onto its further destinations &#8211; when put into the Routing Table (Global RIB, FIB Forwarding Information Base).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Adj-RIB-Out(RIB-Out)\">Adj-RIB-Out (RIB-Out)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Opposite to the Adj-RIB-In is the Adj-RIB-Out, this repository contains all the routes (prefixes) that a router is going to advertise to its BGP Neighbours. However, BGP ensures that only the &#8220;best&#8221; and validated routes (prefix) are only shared with its neighbours after they have been subject to any policy filtering (and\/or manipulation).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-RoutingTable(GlobalRIB,FIB-ForwardingInformationBase)\">Routing Table (Global RIB,&nbsp;FIB &#8211; Forwarding Information Base)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Note that network engineers often use the terms &#8220;Routing Table&#8221; and &#8220;RIB&#8221; interchangeably, but they are different. The RIB is the database of all routing information &#8220;warts and all&#8221; so to speak, while the Routing Table (or Global RIB or FIB &#8211; Forwarding Information Base) is the list of active routes that are being actively used by the Router to forward traffic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OK, that might&nbsp;be a&nbsp;bit confusing, so think of it like this. The BGP RIB has three parts, the incoming routes&nbsp;(RIB-In), the best selected routes that are compliant with policies etc. (Loc-RIB) and the outgoing routes (RIB-Out). The &#8220;best selected routes&#8221; from the (Loc-RIB) are the ones that go into the &#8220;Routing Table&#8221; (a.k.a Global RIB, FIB or CEF in Cisco-land) and are used in actually determining&nbsp;the forwarding of packets through the router.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-AdministrativeDistance(AD)alsoknownasRoutePriority\">Administrative Distance (AD) also known as Route Priority<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The Administrative Distance (AD) is a locally used value that indicates the trustworthiness of different routing sources (which come from different protocols), it is not carried in BGP, it is not visible to neighbours and is only used when installing routes into the Routing Table (Global RIB\/FIB) which will then be used in actually determining the forwarding of packets through the router.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And sometimes it doesn&#8217;t apply, because in terms of BGP (or any other protocol): BGP does NOT compete using AD inside BGP. The AD only matters when competing against other routing protocols if two or more identical routes (network prefixes) are received via different protocols and the router needs a way to &#8220;tie-break&#8221; (referee) these to decide which is actually used by the router in forwarding packets.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A vendor neutral list is of the Administrative Distance is shown below:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Protocol<\/th><th>AD<\/th><\/tr><\/thead><tbody><tr><td>Connected<\/td><td>0<\/td><\/tr><tr><td>Static<\/td><td>1<\/td><\/tr><tr><td>eBGP<\/td><td>20<\/td><\/tr><tr><td>EIGRP (internal)<\/td><td>90<\/td><\/tr><tr><td>OSPF<\/td><td>110<\/td><\/tr><tr><td>RIP<\/td><td>120<\/td><\/tr><tr><td>iBGP<\/td><td>200<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-WhereisitApplied?\">Where is it Applied?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">So if you remember the flow:&nbsp;<strong>Adj-RIB-In \u2192&nbsp;Loc-RIB&nbsp;\u2192 Routing Table (Global RIB)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then the Administrative Distance is evaluated at this stage:&nbsp;<strong>Loc-RIB \u2192 Routing Table (Global RIB)<\/strong>, and is done for multiple protocols (if they exist) to act as the &#8220;tie-breaker&#8221; of if to install a route into the Routing Table (Global RIB) if the router learns the same route (network prefix) via more than one network protocol at once.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Metric\">Metric<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Before looking at some examples, we&#8217;ll quickly review what a Metric is, because we have three similar sounding things: Administrative Distance (Route Preference in EXOS),&nbsp;Route Metric,&nbsp;BGP attributes (like MED, LocalPref).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The&nbsp;<strong>Metric&nbsp;<\/strong>is a value that is either set (or derived by the routing protocol&nbsp;a.k.a.&nbsp;the Origin) and used where we have two (or more) routes from the same protocol with the same destination (network\/route prefix), for example two routes learned via&nbsp;eBGP, it is at this point the&nbsp;<strong>Metric&nbsp;<\/strong>would be used. And of course although not important here, within BGP itself, attributes are used to select the &#8220;Best Path&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Although for static routes, here&#8217;s an example for the 10.10.10.128\/25 network, you can see it has two routes for the same network prefix, but different metrics 100 and 200, so within the same Origin (or routing protocol) the route with the lower metric (100) would win and be used.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Switch # show iproute\nOri  Destination        Gateway         Mtr  Flags         VLAN       Duration\n#s   10.10.10.128\/25    10.10.10.129    100  UG---S-um--f- Default    0d:0h:2m:41s\n s   10.10.10.128\/25    10.10.10.130    200  UG---S-um---- Default    0d:0h:2m:40s<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So in our case the\u00a0<strong>Administrative Distance (AD) a.k.a. Preference<\/strong>\u00a0is only used where you have two (or more) routes from different protocols with the same destination (network\/route prefix). For example, two routes for 10.10.10.128\/25, where one is being learned via OSPF and the other via\u00a0eBGP, different protocols; so same route, different protocols, AD is the tiebreaker.\u00a0<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Decision Layer<\/th><th>What Decides<\/th><\/tr><\/thead><tbody><tr><td>Between protocols<\/td><td>Administrative Distance<\/td><\/tr><tr><td>Within one protocol<\/td><td>Metric<\/td><\/tr><tr><td>Within BGP only<\/td><td>BGP decision process (attributes)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Where can I see the AD for a route?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Everything I have found on this seems to indicate you can&#8217;t see the AD alongside a route in the routing table, like another column, it doesn&#8217;t appear to be possible to see this value in the output.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What you can see is the &#8220;Origin&#8221;, which is where the route has come from (been learned from), with this you are then able to determine the AD (from the table above &#8211; or your router&#8217;s configuration), to then understand why the route that is appearing in this output below (which is the Routing Table &#8211; Global RIB) is, or is not the one you were expecting to see!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"726\" height=\"489\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-146.png\" alt=\"\" class=\"wp-image-5146\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-146.png 726w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-146-300x202.png 300w\" sizes=\"auto, (max-width: 726px) 100vw, 726px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Example1-eBGPvsOSPF\">Example 1 &#8211;&nbsp;eBGP&nbsp;vs OSPF<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s say on Router K, we&#8217;ve learned the route: 10.5.1.0\/24 via&nbsp;eBGP from&nbsp;Router L.&nbsp;But we have also learned this same route via OSPF from Router L.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If we examine the Administrative Distance (AD) of each of these they are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>eBGP (AD 20)<\/li>\n\n\n\n<li>OSPF (AD 110)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">So although the route was installed in the BGP&nbsp;Loc-RIB&nbsp;and the OSPF LSDB, only the&nbsp;eBGP learned&nbsp;route is actually installed into the Routing Table (Global RIB) for use to govern the forwarding of packets through the router.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Example2-iBGPvsOSPF\">Example 2 &#8211;&nbsp;iBGP&nbsp;vs OSPF<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For the second example let&#8217;s assume that on Router F we&#8217;ve learned the route 10.5.0.0\/24 from Router K&nbsp;via iBGP, but we have also learned this same route via OSPF from Router K too.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We can see the route (for this network prefix) in the&nbsp;Loc-RIB&nbsp;for BGP. We can also see the route (for this network prefix) in the OSPF LSDB too. But there can be only one winner. So which would it be? Which origin would make it into the Routing Table (Global RIB) and be used to actually route packets?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now if we examine the AD value of each of these two routes, these are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>iBGP\u00a0(AD 200)<\/li>\n\n\n\n<li>OSPF (AD 110)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Which means that in this case the OSPF route will win, and will be used in the Routing Table to forward traffic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is called an &#8220;RIB Failure&#8221; (from a BGP perspective), BGP has selected what it thinks is the &#8220;best path&#8221; but it can&#8217;t install it into the Routing Table (Global RIB) because a lower-AD route already exists; OSPF in this example.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Example3-StaticRoutevs(e)BGP\">Example 3 &#8211; Static Route vs (e)BGP<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For the third and final example, let&#8217;s assume that on Router L we have a static route to 0.0.0.0\/0 (i.e. a default route) that has been configured on Router L, but Router L has also learned this same static (default) route via&nbsp;eBGP&nbsp;(from Router K), what happens?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If we examine the AD value of each of these two routes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Static (AD 1)<\/li>\n\n\n\n<li>eBGP (AD 20)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In this case the Static route will win and will be preferred and installed into the Routing Table (Global RIB).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Again this is considered to&nbsp;be a&nbsp;&#8220;RIB Failure&#8221; from a BGP perspective, however BGP will advertise this &#8220;best path&#8221; to its neighbours (subject to policy\/filters of course).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-WhyiseBGPpreferredoveriBGPorforanyotherinternalroutingprotocolforthatmatter?\">Why is&nbsp;eBGP&nbsp;preferred over&nbsp;iBGP&nbsp;or for any other internal routing protocol for that matter?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Why is&nbsp;eBGP&nbsp;preferred over&nbsp;iBGP?&nbsp;Why are other IGP protocol routes (e.g. Static, OSPF,&nbsp;EIGRP&nbsp;etc) preferred over iBGP?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Good questions, firstly think about what&nbsp;eBGP&nbsp;is being used for. It&#8217;s used to learn about Internet (outside) routes, so you&#8217;d want these preferred over any internal routes. Why would the route to a network prefix used by Google (outside your network) learned via&nbsp;eBGP&nbsp;be preferred over the same network prefix learned via OSPF for example? You wouldn&#8217;t want this to work like that, you&#8217;d generally want external routes (prefixes) to override any IGP protocols; so that the Internet edge behaviour makes sense.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So why is the&nbsp;iBGP&nbsp;AD so high? It&#8217;s so that if you have an internal route learned via&nbsp;iBGP&nbsp;and another IGP protocol such as Static or OSPF, that these (i.e. Static or OSPF) would take preference, so you don&#8217;t break internal connectivity.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-AdjustingAdministrativeDistance\">Adjusting Administrative Distance<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Being that AD is only considered locally (within the Router), you can tweak the Administrative Distance; to then change the behaviour of your router in certain circumstances. Bear in mind this must be done with great care, changing the default AD ordering directly affects the behaviour of the routing and can have unintended consequences if your routing table is very complicated and\/or if you (or someone else) makes a design decision in future based on what they think should happen, unexpected behaviour can result.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Extreme Networks article&nbsp;<a href=\"https:\/\/extreme-networks.my.site.com\/ExtrArticleDetail?an=000123008\">EXOS&nbsp;\/ Switch Engine : How to change the administrative distance of routes<\/a>&nbsp;describes how to change the AD values.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An example of when this might happen or need to happen is say if you are learning a route via&nbsp;iBGP, but a route from&nbsp;eBGP&nbsp;is taking preference, but you don&#8217;t want it to, you can adjust the AD of the routing protocol to tweak this, but as mentioned this can have unintended consequences so it is worth understanding fully and testing in a lab environment before you do so.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-RIBFailure\">RIB Failure<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A term you&#8217;ll come across is RIB Failure. Essentially RIB Failure is a state whereby BGP has selected its &#8220;best path&#8221;, but it was unable to install it into the Routing Table (i.e. the Local RIB) for the router to actively use to forward\/route packets.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So why can this happen? There are a few common reasons, such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A route (to that network prefix) with better administrative distance is already present, therefore this route BGP has selected can&#8217;t be installed.<\/li>\n\n\n\n<li>A route&#8217;s next-hop address, i.e. the router the packet needs to be routed to reach that network, is not able\u00a0to be reached\u00a0by the router, because of this, it can&#8217;t install the route. We came across this in earlier articles, think: next-hop-self and the use of an IGP to ensure that the next-hop addresses are\u00a0routable, even if the router is using a route learned by another routing protocol (IGP) such as OSPF.<\/li>\n\n\n\n<li>A memory failure exists, perhaps faulty memory within the router.<\/li>\n\n\n\n<li>Too many routes exist in the Route Table and\/or the number of routes within a VRF (see next section) exceeds the route-limit configured. So even though the router knows about the route it doesn&#8217;t have capacity to install it and use it because of either\u00a0physical or logical constraints on the memory.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-VRF(VirtualRoutingandForwarding)\">VRF (Virtual Routing and Forwarding)<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A technology that enables multiple independent routing tables to exist on a single router (hardware), its essentially allowing multiple Virtual Routers to run on a single hardware router.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each VRF has:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Its own routing table<\/li>\n\n\n\n<li>Its own interfaces<\/li>\n\n\n\n<li>Its own BGP\/OSPF sessions<\/li>\n\n\n\n<li>Its own default route<\/li>\n\n\n\n<li>Its own forwarding decisions<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">And they do&nbsp;<strong>not<\/strong>&nbsp;see each other\u2019s routes unless explicitly configured to.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Relating this to BGP, a VRF would allow a provider to allow multiple BGP route tables for multiple customers to exist on the same physical hardware (and network) where the IP addresses overlap, but the customers and their networks are kept separate.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">VRFs are great tool in creating multi-tenant (multi-customer) networks. Relating it to the BGP RIB, each VRF would have its own fully functional BGP RIB, so each customer would see their own BGP RIB just for them.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-BGPDebugLogging\">BGP Debug Logging<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Working out what is happening when something goes wrong is key to identifying the issue and remediating it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-ChecktheRouterLogs\">Check the Router Logs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A quick place to start is to look at the Router Logs, for example the below using &#8220;show log | include BGP&#8221;, and then filtering for BGP (as shown in the output below).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, it is often helpful to just check the logs for any other issues which may be affecting BGP, rather than BGP itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Perhaps a link has gone down, or a route has been removed from another routing protocol (e.g. OSPF) for example.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tris-routerK.7 # show log | include BGP\n03\/06\/2026 08:52:41.00 &lt;Noti:BGP.NeighborMgr.PeerEstTrans> &#91;VR 2] Peer 192.168.100.66 (0) has entered Established state, holdtime: 45, passive:0\n03\/05\/2026 13:07:08.83 &lt;Noti:BGP.NeighborMgr.PeerEstTrans> &#91;VR 2] Peer 192.168.100.66 (0) has left Established state, holdtime: 45, passive:0\n03\/05\/2026 13:07:08.83 &lt;Warn:BGP.DecisnCoord.StorNbrPfxMaxExcd> &#91;VR 0x00000002] The maximum number of prefixes stored for a neighbor would be exceeded.\n03\/05\/2026 13:07:08.83 &lt;Warn:BGP.DecisnCoord.StorNbrPfxMaxExcd> &#91;VR 0x00000002] The maximum number of prefixes stored for a neighbor would be exceeded.\n03\/05\/2026 13:07:08.83 &lt;Warn:BGP.DecisnCoord.StorNbrPfxMaxExcd> &#91;VR 0x00000002] The maximum number of prefixes stored for a neighbor would be exceeded.\n03\/05\/2026 13:06:26.28 &lt;Warn:BGP.DecisnCoord.NumPeerPfxRchWarnThrsh> &#91;VR 0x00000002] The number of prefixes from a peer has reached the warning threshold.\n03\/05\/2026 13:06:26.24 &lt;Noti:BGP.NeighborMgr.PeerEstTrans> &#91;VR 2] Peer 192.168.100.66 (0) has entered Established state, holdtime: 45, passive:0\n03\/05\/2026 12:56:19.66 &lt;Noti:BGP.NeighborMgr.PeerEstTrans> &#91;VR 2] Peer 192.168.100.66 (0) has left Established state, holdtime: 45, passive:0\n03\/05\/2026 12:56:19.66 &lt;Warn:BGP.DecisnCoord.StorNbrPfxMaxExcd> &#91;VR 0x00000002] The maximum number of prefixes stored for a neighbor would be exceeded.\n03\/05\/2026 12:56:19.66 &lt;Warn:BGP.DecisnCoord.StorNbrPfxMaxExcd> &#91;VR 0x00000002] The maximum number of prefixes stored for a neighbor would be exceeded.\n03\/05\/2026 12:56:19.66 &lt;Warn:BGP.DecisnCoord.StorNbrPfxMaxExcd> &#91;VR 0x00000002] The maximum number of prefixes stored for a neighbor would be exceeded.\n03\/05\/2026 12:56:19.66 &lt;Warn:BGP.DecisnCoord.NumPeerPfxRchWarnThrsh> &#91;VR 0x00000002] The number of prefixes from a peer has reached the warning threshold.\n03\/05\/2026 12:53:44.64 &lt;Noti:BGP.NeighborMgr.PeerEstTrans> &#91;VR 2] Peer 192.168.100.66 (0) has entered Established state, holdtime: 45, passive:0\n03\/05\/2026 12:53:29.73 &lt;Warn:BGP.NeighborMgr.BfdMsgRcvNotCorr> A BFDI message was received that could not be correlated to a BGP connection 192.168.100.66\n03\/05\/2026 12:53:29.73 &lt;Warn:BGP.NeighborMgr.BfdMsgRcvNotCorr> A BFDI message was received that could not be correlated to a BGP connection 192.168.100.66\n03\/05\/2026 12:53:29.63 &lt;Noti:BGP.NeighborMgr.PeerEstTrans> &#91;VR 2] Peer 192.168.100.66 (0) has left Established state, holdtime: 45, passive:0\n03\/05\/2026 12:48:07.79 &lt;Warn:BGP.DecisnCoord.NumPeerPfxRchWarnThrsh> &#91;VR 0x00000002] The number of prefixes from a peer has reached the warning threshold.\n03\/05\/2026 12:48:07.75 &lt;Noti:BGP.NeighborMgr.PeerEstTrans> &#91;VR 2] Peer 192.168.100.66 (0) has entered Established state, holdtime: 45, passive:0\n03\/05\/2026 12:47:52.80 &lt;Warn:BGP.NeighborMgr.BfdMsgRcvNotCorr> A BFDI message was received that could not be correlated to a BGP connection 192.168.100.66\n03\/05\/2026 12:47:52.80 &lt;Warn:BGP.NeighborMgr.BfdMsgRcvNotCorr> A BFDI message was received that could not be correlated to a BGP connection 192.168.100.66\n03\/05\/2026 12:47:52.74 &lt;Noti:BGP.NeighborMgr.PeerEstTrans> &#91;VR 2] Peer 192.168.100.66 (0) has left Established state, holdtime: 45, passive:0\n03\/03\/2026 10:33:28.13 &lt;Noti:BGP.NeighborMgr.PeerEstTrans> &#91;VR 2] Peer 192.168.100.66 (0) has entered Established state, holdtime: 45, passive:0<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-CheckBGPNeighbours\">Check BGP Neighbours<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When attempting to determine what is going on, checking the BGP Neighbours is a good point to start. Are all the expected BGP Neighbours up and in ESTABLISHED state?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Remember the previous article that goes into the FSM (BGP Finite State Machine) and the states that BGP goes through, again these can be helpful to determine what is happening at any particular time.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tris-routerK.2 # show bgp neighbor\n\n     Peer                                    AS         Weight State        InMsgs OutMsgs(InQ)  Up\/Down\n------------------------------------------------------------------------------------------------------------\nIe-- 1.1.1.6                                 65004      1      ESTABLISHED  34258  34282 (0    ) 20:16:28:43\nEe-- 192.168.100.66                          65005      1      ESTABLISHED  33133  33124 (0    ) 5:0:04:14\n\nFlags: (d) disabled, (e) enabled, (E) external peer, (I) internal peer\n       (m) EBGP multihop, (r) route reflector client\n\nBGP Peer Statistics\n  Total Peers       : 2\n  EBGP Peers        : 1                 IBGP Peers          : 1\n  RR Client         : 0                 EBGP Multihop       : 0\n  Enabled           : 2                 Disabled            : 0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If not, looking into why is a good place to start investigating. You can of course dive in deeper to a particular neighbour to see what is happening with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tris-routerK.3 # show bgp neighbor 1.1.1.6\n\nPeer Description    :\nIBGP Peer           : 1.1.1.6           AS                  : 65004\nEnabled             : Yes               OperStatus          : Up\nWeight              : 1                 Shutdown-Priority   : 1024\nConnectRetry        : 120               MinAsOrig           : 5\nHoldTimeCfg         : 180               KeepaliveCfg        : 60\nSource Interface    : 1.1.1.12          RRClient            : No\nEBGP-Multihop       : No                Remove Private AS   : No\nBFD                 : Off               BFD Status          : Not Required\nCapabilities Config : ipv4-unicast,ipv4-multicast,4-Byte-As,route-refresh (old &amp; new)\nPolicy for NLRI Type ipv4-unicast\n  In Policy         : None\n  Out Policy        : None\n  NextHopSelf       : Disabled          Send Communities    : No\n  Soft Input Recfg  : Disabled          Allow Looped AS-Path: No\nPolicy for NLRI Type ipv4-multicast\n  In Policy         : None\n  Out Policy        : None\n  NextHopSelf       : Disabled          Send Communities    : No\n  Soft Input Recfg  : Disabled          Allow Looped AS-Path: No\nPolicy for NLRI Type vpnv4\n  In Policy         : None\n  Out Policy        : None\n  NextHopSelf       : Disabled          Send Communities    : Standard, Extended\n  Soft Input Recfg  : Disabled          Allow Looped AS-Path: No\nPolicy for NLRI Type ipv6-unicast\n  In Policy         : None\n  Out Policy        : None\n  NextHopSelf       : Disabled          Send Communities    : No\n  Soft Input Recfg  : Disabled          Allow Looped AS-Path: No\nPolicy for NLRI Type ipv6-multicast\n  In Policy         : None\n  Out Policy        : None\n  NextHopSelf       : Disabled          Send Communities    : No\n  Soft Input Recfg  : Disabled          Allow Looped AS-Path: No\nPolicy for NLRI Type ipv4-vxlan\n  In Policy         : None\n  Out Policy        : None\n  NextHopSelf       : Enabled           Send Communities    : No\n  Soft Input Recfg  : Disabled          Allow Looped AS-Path: No\nState               : ESTABLISHED\nFSM Up since        : Wed Feb 18 16:28:12 2026\n (Duration: 20:16:31:35)\nRemote Addr         : 1.1.1.6           Local Addr          : 1.1.1.12\nRemote Port         : 179               Local Port          : 41736\nRemote RouterId     : 1.1.1.6           Local RouterId      : 1.1.1.12\nHoldTimeNegotiated  : 180               KeepAliveNegotiated : 60\nFsmTransitions      : 1\nInUpdateElapsedTime : 11:23:49:46       InMsgElapsedTime    : 11:23:49:46\nInUpdates           : 33                OutUpdates (in TxQ) : 51 (0)\nInTotalMsgs         : 34261             OutTotalMsgs        : 34286\nInRouteRefreshes    : 0                 OutRouteRefreshes   : 0\nRoute Statistics for NLRI Type ipv4-unicast\n  Received          : 10                Accepted            : 10\n  Rejected          : 0                 Active              : 10\n  Suppressed        : 0\nRoute Statistics for NLRI Type ipv4-multicast\n  Received          : 0                 Accepted            : 0\n  Rejected          : 0                 Active              : 0\n  Suppressed        : 0\nCapabilities Tx     : ipv4-unicast,ipv4-multicast,4-Byte-As,route-refresh (old &amp; new)\nCapabilities Rx     : ipv4-unicast,ipv4-multicast,4-Byte-As,route-refresh (old &amp; new)\nNLRI for the session:  ipv4-unicast,ipv4-multicast\nLast State          : ESTABLISHED       Last Event          : RX_KEEP\nLastError           : 'None'\n\nBGP Peer Statistics\n  Total Peers       : 2\n  EBGP Peers        : 1                 IBGP Peers          : 1\n  RR Client         : 0                 EBGP Multihop       : 0\n  Enabled           : 2                 Disabled            : 0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here you can see the errors, last state, but also verify you are getting messages from the BGP neighbour or not, which may help you identify any issues.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Transmitted,Received,RejectedandAcceptedRoutes\">Transmitted, Received, Rejected and Accepted Routes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If the BGP Neighbour appears to be in the correct state, examining the routes being transmitted, received, rejected and accepted will help determine if you&#8217;re expecting to see some routes, but no longer getting them, what your next steps might need to be.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>show bgp neighbor 1.1.1.6 accepted-routes all\nshow bgp neighbor 1.1.1.6 rejected-routes all\nshow bgp neighbor 1.1.1.6 recieved-routes all\nshow bgp neighbor 1.1.1.6 transmitted-routes all\nshow bgp neighbor 1.1.1.6 suppressed-routes all<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">An example output would be something like:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"927\" height=\"467\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-147.png\" alt=\"\" class=\"wp-image-5147\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-147.png 927w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-147-300x151.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-147-768x387.png 768w\" sizes=\"auto, (max-width: 927px) 100vw, 927px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re expecting to see a route, but it is not appearing, here you can see if its being rejected (for some reason).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-BGPLocalRIB(Loc-RIB)\">BGP Local RIB (Loc-RIB)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Checking the BGP Local RIB is another key step in troubleshooting. Remember this is the BGP Local RIB, so what BGP&#8217;s view of the world is, but it&#8217;s not what is actually used by the router to forward packets, that&#8217;s the Route Table (Global RIB) which we&#8217;ll look at in the next section.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tris-routerK.8 # show bgp routes all\n\nRoutes:\n     Destination         Peer                                    Next-Hop        LPref Weight MED        AS-Path\n----------------------------------------------------------------------------------------------------------------\n*>?  10.1.0.0\/16         1.1.1.6                                 192.168.100.41  100   1      0          65001.0\n*>i  10.1.0.0\/24         1.1.1.6                                 192.168.100.41  100   1      0          65001.0\n*>i  10.1.1.0\/24         1.1.1.6                                 192.168.100.41  100   1      0          65001.0\n*>i  10.1.2.0\/24         1.1.1.6                                 192.168.100.41  100   1      0          65001.0\n*>i  10.1.3.0\/24         1.1.1.6                                 192.168.100.41  100   1      0          65001.0\n*>?  10.1.5.0\/24         1.1.1.6                                 192.168.100.41  100   1      0          65001.0\n*>i  10.2.0.0\/24         1.1.1.6                                 192.168.100.45  100   1      0          65002\n*>i  10.2.1.0\/24         1.1.1.6                                 192.168.100.45  100   1      0          65002\n*>i  10.2.2.0\/24         1.1.1.6                                 192.168.100.45  100   1      0          65002\n*>i  10.4.0.0\/24         1.1.1.6                                 1.1.1.6         100   1      0\n*>i  10.5.0.0\/24         192.168.100.66                          192.168.100.66  100   1      0          65005\n*>i  10.5.1.0\/24         192.168.100.66                          192.168.100.66  100   1      0          65005\n*>i  10.5.2.0\/24         192.168.100.66                          192.168.100.66  100   1      0          65005\n*>i  10.5.3.0\/24         192.168.100.66                          192.168.100.66  100   1      0          65005\n\nFlags: (*) Preferred BGP route, (>) Active, (d) Suppressed, (h) History\n       (s) Stale, (m) Multipath, (u) Unfeasible\n\nOrigin: (?) Incomplete, (e) EGP, (i) IGP\n\nBGP Route Statistics\n  Total Rxed Routes : 15\n  Feasible Routes   : 14\n  Active Routes     : 14\n  Rejected Routes   : 1\n  Unfeasible Routes : 0\nRoute Statistics on Session Type\n  Routes from Int Peer: 10\n  Routes from Ext Peer: 4<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here we can see the status of the routes (described below) you may also see multiple routes for the same network prefix.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The first column which contains the *&gt;i in these particular examples is the status flags (and origin) for the route.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Route Status options include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Preferred BGP Route ( * )<\/strong>\u00a0&#8211; The preferred route by BGP, meaning the &#8220;best&#8221; route, the one that is being used (and put into the Routing Table (Global RIB)). If you see multiple routes which have the same route prefix (and you don&#8217;t have\u00a0ECMP\u00a0enabled) then you may see a route without an asterisk ( * ) for a particular network prefix, this is just another route which is not considered to be &#8220;best&#8221; at this time.<\/li>\n\n\n\n<li><strong>Suppressed (d)<\/strong>\u00a0\u2013 This route has been suppressed, meaning BGP knows about it, but is not using (or advertising it) for some reason. It could be because there is a summary route, i.e. a route prefix that covers multiple route prefixes, so rather than advertising (or using in the Route Table) 3 route prefixes, instead one could be used. For example, 10.0.0.0\/23 being used instead of 10.0.0.0\/24 and 10.0.1.0\/24, making these latter two &#8220;suppressed&#8221; routes. A route may also be suppressed if it is flapping, due to dampening.<\/li>\n\n\n\n<li><strong>History (h)<\/strong>\u00a0&#8211; This route is kept in memory to retain flap-dampening statistics. This route is not currently announced by the peer.<\/li>\n\n\n\n<li><strong>Stale (s)<\/strong>\u00a0&#8211; The route is marked as stale, it is not actively used.<\/li>\n\n\n\n<li><strong>Multipath (m)<\/strong>\u00a0&#8211; We had a previous article on this, if you have two or more network prefixes (routes) with the same destination, and you also have\u00a0ECMP\u00a0enabled, then you will see two (or more) best routes which are identified by the &#8220;m&#8221;.<\/li>\n\n\n\n<li><strong>Unfeasible (u)<\/strong>\u00a0&#8211; We saw this in very early articles, it&#8217;s a route that BGP has received from a BGP neighbour, but it can&#8217;t install it (for the router to use) because its unfeasible, which basically means that the router has no route to the &#8220;next-hop&#8221; IP. This was where things like the IGP come in, to distribute the point to point link subnets\/networks, so routers within the AS can get to the various destinations, and install a route.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-RouteTable(GlobalRIB)\">Route Table (Global RIB)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Checking the Routing Table (Global RIB) which is what the router actually uses to forward the packets around, these are the actual installed routes in live use. The Route Table (Global RIB) is an aggregation of all the route tables of the various protocols that might be running on the router, for example, BGP,&nbsp;EIGRP, OSPF, Static etc. You may of course see a network prefix (route) in the BGP&nbsp;Loc-RIB, which doesn&#8217;t appear in the Route Table (Global RIB) perhaps because there is another protocol with a lower AD (discussed earlier) that is stopping it from being installed.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tris-routerK.33 # show iproute\nOri  Destination        Gateway         Mtr  Flags         VLAN       Duration\n#oa  1.1.1.6\/32         192.168.100.61  12   UG-D---um--f- RK-RF      20d:17h:34m:33s\n#d   1.1.1.12\/32        1.1.1.12        1    U------um--f- RouterK-LP 20d:17h:34m:56s\n#bi  10.1.0.0\/16        192.168.100.61  1    UG-D---um--f- RK-RF      0d:0h:6m:22s\n#bi  10.1.0.0\/24        192.168.100.61  1    UG-D---um--c- RK-RF      12d:1h:6m:9s\n#bi  10.1.1.0\/24        192.168.100.61  1    UG-D---um--c- RK-RF      14d:23h:51m:56s\n#bi  10.1.2.0\/24        192.168.100.61  1    UG-D---um--c- RK-RF      14d:23h:51m:56s\n#bi  10.1.3.0\/24        192.168.100.61  1    UG-D---um--c- RK-RF      12d:1h:6m:6s\n#bi  10.1.5.0\/24        192.168.100.61  1    UG-D---um--c- RK-RF      12d:0h:52m:28s\n#bi  10.2.0.0\/24        192.168.100.61  1    UG-D---um--f- RK-RF      12d:1h:6m:6s\n#bi  10.2.1.0\/24        192.168.100.61  1    UG-D---um--f- RK-RF      14d:23h:51m:52s\n#bi  10.2.2.0\/24        192.168.100.61  1    UG-D---um--f- RK-RF      14d:23h:51m:52s\n#bi  10.4.0.0\/24        192.168.100.61  0    UG-D---um--f- RK-RF      20d:17h:34m:17s\n#d   10.4.1.0\/24        10.4.1.1        1    U------um--f- RouterK-LAN1 20d:17h:34m:55s\n#be  10.5.0.0\/24        192.168.100.66  1    UG-D---um--f- RK-RL      0d:0h:5m:11s\n#be  10.5.1.0\/24        192.168.100.66  1    UG-D---um--f- RK-RL      0d:0h:5m:11s\n#be  10.5.2.0\/24        192.168.100.66  1    UG-D---um--f- RK-RL      0d:0h:5m:11s\n#be  10.5.3.0\/24        192.168.100.66  1    UG-D---um--f- RK-RL      0d:0h:5m:11s\n#oa  192.168.100.40\/30  192.168.100.61  4    UG-D---um--f- RK-RF      14d:23h:51m:57s\n#oa  192.168.100.44\/30  192.168.100.61  4    UG-D---um--f- RK-RF      14d:23h:51m:53s\n#d   192.168.100.60\/30  192.168.100.62  1    U------um--f- RK-RF      20d:17h:34m:56s\n#d   192.168.100.64\/30  192.168.100.65  1    U------um--f- RK-RL      20d:17h:34m:56s\n\nOrigin(Ori): (ap) Auto-peering, (b) BlackHole, (be) EBGP, (bg) BGP, (bi) IBGP,\n             (bo) BOOTP,(ct) CBT, (d) Direct, (df) DownIF, (dv) DVMRP,\n             (e1) ISISL1Ext, (e2) ISISL2Ext, (h) Hardcoded,  (hm) Host-mobility\n             (i) ICMP,(i1) ISISL1 (i2) ISISL2,(is) ISIS, (mb) MBGP,\n             (mbe) MBGPExt, (mbi) MBGPInter, (mp) MPLS Lsp,\n             (mo) MOSPF (o) OSPF, (o1) OSPFExt1, (o2) OSPFExt2,(oa) OSPFIntra\n             (oe) OSPFAsExt, (or) OSPFInter, (pd) PIM-DM, (ps) PIM-SM,\n             (r) RIP, (ra) RtAdvrt, (s) Static, (sv) SLB_VIP, (un) UnKnown,\n             (*) Preferred unicast route (@) Preferred multicast route,\n             (#) Preferred unicast and multicast route.\n\nFlags: (b) BFD protection requested, (B) BlackHole, (c) Compressed, (D) Dynamic,\n       (f) Provided to FIB, (G) Gateway, (H) Host Route,\n       (I) ICMP ping protection requested, (l) Calculated LDP LSP,\n       (L) Matching LDP LSP, (m) Multicast, (p) BFD protection active,\n       (P) LPM-routing, (R) Modified, (s) Static LSP, (S) Static,\n       (t) Calculated RSVP-TE LSP, (T) Matching RSVP-TE LSP, (u) Unicast,\n       (U) Up, (3) L3VPN Route.<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-RouteAggregation\">Route Aggregation<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Route aggregation is a technique where the characteristics of several routes are combined so that they are advertised as a single route. Using aggregation reduces the amount of information that a BGP router (speaker) must store and exchange with other BGP routers (speakers). Meaning reduced information stores, exchanged and a smaller routing table, which is especially important when dealing with an Internet scale routing table.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s say we have these two routes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>10.1.0.0\/24<\/li>\n\n\n\n<li>10.1.1.0\/24<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">They can be summarised (aggregated) into:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>10.1.0.0\/23<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Or, if there is a predictable and hierarchical IP space, it could be summarised (aggregated) into:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>10.1.0.0\/16<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Which would mean additional network prefixes (routes) such as 10.1.2.0\/24 and 10.1.3.0\/24, and so on, could be added in future, and they would automatically be catered for by this summary (aggregated) route, without needing to add additional routes to the Route Table.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Example\">Example<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s try an example shall we? We have our current network topology, we&#8217;ll be specifically looking at Router K and Router L.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"709\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/BGP-Test-Lab-Part-20-Routing-Information-Base-RIB-BGP-Debug-Logging-and-other-Things-Page-1-1024x709.jpeg\" alt=\"\" class=\"wp-image-5148\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/BGP-Test-Lab-Part-20-Routing-Information-Base-RIB-BGP-Debug-Logging-and-other-Things-Page-1-1024x709.jpeg 1024w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/BGP-Test-Lab-Part-20-Routing-Information-Base-RIB-BGP-Debug-Logging-and-other-Things-Page-1-300x208.jpeg 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/BGP-Test-Lab-Part-20-Routing-Information-Base-RIB-BGP-Debug-Logging-and-other-Things-Page-1-768x532.jpeg 768w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/BGP-Test-Lab-Part-20-Routing-Information-Base-RIB-BGP-Debug-Logging-and-other-Things-Page-1-1536x1064.jpeg 1536w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/BGP-Test-Lab-Part-20-Routing-Information-Base-RIB-BGP-Debug-Logging-and-other-Things-Page-1.jpeg 1957w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So Router K is learning its routes for network prefix 10.1.0.0\/16 from Router F, which is in turn learning the network prefix from Router B (in AS Blue 65001).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But when examining the route table on Router K, we see the following set of routes, we first have the&nbsp;supernet&nbsp;10.1.0.0\/16, but then individual routes for all the network prefixes from within AS Blue that are also being advertised into BGP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These are superfluous routes in reality. Although the more specific route will win when being evaluated, all the next-hop are the same, so in this case the first route 10.1.0.0\/16 would send the traffic in the right direction, so all the others are just not required.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is a very specific example with a few routes, but as you can see at a larger scale this could be considerably more!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"922\" height=\"355\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-148.png\" alt=\"\" class=\"wp-image-5149\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-148.png 922w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-148-300x116.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-148-768x296.png 768w\" sizes=\"auto, (max-width: 922px) 100vw, 922px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So this is where Route Aggregation comes in and can be used to reduce this set of routes down to something more sensible for when they are passed on to its BGP Neighbour(s), Router L in this particular example.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-RouterK\">Router K&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On Router K, we enable BGP Aggregation, then we create a rule to summarise the 10.1.0.0\/16 into a summary route (aggregated route) that would include a particular set of network prefixes: 10.1.0.0\/24, 10.1.1.0\/24, 10.1.2.0\/24, 10.1.3.0\/24 and 10.1.5.0\/24 in this case.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enable bgp aggregation\nconfigure bgp add aggregate-address 10.1.0.0\/16 as-set summary-only<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The&nbsp;<strong>10.1.0.0\/16<\/strong>&nbsp;is the network prefix we wish to summarise under, i.e. the network prefix that will be sent instead.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The&nbsp;<strong>summary-only<\/strong>&nbsp;keyword enables the summarization of routes not included in routing updates, it creates the aggregate route and suppresses advertisements of more specific routes to all neighbours; ergo the more specific 10.1.0.0\/24, 10.1.1.0\/24, 10.1.2.0\/24, 10.1.3.0\/24 and 10.1.5.0\/24 network prefixes are summarised behind: 10.1.0.0\/16 instead.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is also the settings for as-set and as-match and there are the&nbsp;<strong>advertise-policy<\/strong>&nbsp;and&nbsp;<strong>attribute-policy<\/strong>, we&#8217;ll discuss all these in a moment in more detail.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Verify\">Verify<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">So now we have applied the aggregation&nbsp;and&nbsp;summarisation, if we examine Router L, which is getting the updates from Router K, we see both the&nbsp;supernet&nbsp;network prefix and the individual network prefixes listed as individual routes.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"959\" height=\"393\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-149.png\" alt=\"\" class=\"wp-image-5150\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-149.png 959w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-149-300x123.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-149-768x315.png 768w\" sizes=\"auto, (max-width: 959px) 100vw, 959px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">But, afterwards we see only the single network prefix (route) for the 10.1.0.0\/16 supernet, being that all the next-hops for these routes were all the same they can be safely summarised.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"995\" height=\"305\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-150.png\" alt=\"\" class=\"wp-image-5151\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-150.png 995w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-150-300x92.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-150-768x235.png 768w\" sizes=\"auto, (max-width: 995px) 100vw, 995px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So essentially Router K is&nbsp;<strong>suppressing&nbsp;<\/strong>the routes for: 10.1.0.0\/24, 10.1.1.0\/24, 10.1.2.0\/24, 10.1.3.0\/24 and 10.1.5.0\/24 so they are not transmitted to Router L (or any of its other neighbours for that matter).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-AS-Set(as-set)andAS-Match(as-match)\">AS-Set (as-set) and AS-Match (as-match)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">So here is a very important consideration within BGP when using aggregation (summerisation) and that is how an aggregated route&#8217;s (network prefix) AS-Path are shown once two (or more) routes have been aggregated (summarised).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s say we have these two routes (network prefixes):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>10.1.0.0\/24   AS_PATH: 65001\n10.1.1.0\/24   AS_PATH: 65002<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So the routes: 10.1.0.0\/24 and 10.1.1.0\/24, could be summarised into 10.0.0.0\/23 instead.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But what would the AS-Path be for this new summarised route?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Would it be 65001 or 65002 or both, or neither nor something else entirely?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is where the&nbsp;<strong>AS-Set<\/strong>&nbsp;and&nbsp;<strong>AS-Match<\/strong>&nbsp;configurations come in.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-NoAS-SetorNoAS-Match\">No AS-Set or No AS-Match<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Firstly, let&#8217;s have a look and if we do not enable AS-Set or AS-Match, but enable aggregation (summerise) on a route.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So in this example we are&nbsp;enabling&nbsp;summarisation&nbsp;on Router K with the following command, but without enabling AS-Set or AS-Match<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>configure bgp add aggregate-address 10.1.0.0\/16 summary-only<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then we observe what the route&#8217;s (network prefix&#8217;s) AS-Path looks like, as you can see circled in red, it just shows the source AS, in this case AS Red (65004), even though the 10.1.0.0\/16 originally came from AS Blue (65001).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ergo, without AS-Set or AS-Match all the AS-Path information is lost, and instead the receiving router just sees the transmitting AS, which in this case is 65004 (AS Red).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"956\" height=\"298\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-151.png\" alt=\"\" class=\"wp-image-5152\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-151.png 956w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-151-300x94.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-151-768x239.png 768w\" sizes=\"auto, (max-width: 956px) 100vw, 956px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This loss of information may or may not be problematic depending on your situation, however without AS-Set or AS-Match, you risk:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Routing loops, because\u00a0eBGP\u00a0can&#8217;t see previous AS&#8217;s in a route, so can re-advertise a route back to its source.<\/li>\n\n\n\n<li>Incorrect best-path decisions.<\/li>\n\n\n\n<li>Overly attractive aggregate routes, which send traffic\u00a0in sub optimal\u00a0ways.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">So essentially, not having\u00a0<strong>AS-Set<\/strong>\u00a0or\u00a0<strong>AS-Match<\/strong>\u00a0enabled means you lose the AS-Path information in the aggregated (summerised) route.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-AS-Set\">AS-Set<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">An AS-Set is an unordered list of network prefixes (routes) which are included in the AS-Path, if you specify to use AS-Set when summarising (aggregating) routes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So for example the command below will enable AS-Set on Router K, which will then summarise (aggregate) the routes within 10.1.0.0\/16 together into a single route, but also by specifying the&nbsp;<strong>AS-Set<\/strong>&nbsp;option, we will preserve the AS-Path information in an unordered list which is an aggregation of all the&nbsp;ASs&nbsp;that make up the various routes being aggregated prepended with the source AS (AS Red 65004) in our case.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, in our example we have only one source AS within the aggregate routes, but let&#8217;s say we had three routes (network prefixes) being aggregated together each with their own source AS; 65001, 65002 and 65003.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then the AS-Path for the aggregate route would be:&nbsp;<strong>65004&nbsp;<\/strong><strong>{65001 65002 65003}<\/strong>&nbsp;, notice they are in incremental order (that&#8217;s how they are presented), but it is an unordered set.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>configure bgp add aggregate-address 10.1.0.0\/16 as-set summary-only<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Which then gives us the following when we examine how they are seen at Router L:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"303\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-152.png\" alt=\"\" class=\"wp-image-5153\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-152.png 1000w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-152-300x91.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-152-768x233.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We can now see the source AS, just one in this case inside curly braces.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A set is an unordered list, although BGP puts the AS Numbers in ascending order, they are an unordered list of all the&nbsp;ASs of&nbsp;all the network prefixes being summarised.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They are unordered, because it would make no sense for them to be ordered, what order would they have in any case when you are aggregating two or more network prefixes (routes) together anyway?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-AS-Match\">AS-Match<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The AS-Match argument in Extreme Networks&nbsp;XOS&nbsp;means that it will preserve the order of AS Numbers in the AS-Path for a summarised, aggregate route, so unlike AS-Set which creates an unordered list, this creates an ordered list of AS of all the aggregate routes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But wait, that doesn&#8217;t make any sense how would it do that? Perhaps it does not. Let&#8217;s find out with a quick test.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-RouterH\">Router H<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">But what we are now going to do is add another two network prefixes&nbsp;<strong>10.5.4.0\/24 and 10.5.5.0\/24<\/strong>&nbsp;and put that under a different aggregate route&nbsp;<strong>10.5.4.0\/22<\/strong>&nbsp;advertised from a completely different AS so we can see how its path changes<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>create vlan \"RouterH-LAN2\" tag 1030\nconfigure vlan \"RouterH-LAN2\" ipaddress 10.5.4.1\/24\nenable ipforwarding \"RouterH-LAN2\"\nenable loopback-mode vlan \"RouterH-LAN2\"\n\nconfigure bgp add network 10.5.4.0\/24<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Router G<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>create vlan \"RouterG-LAN2\" tag 1031\nconfigure vlan \"RouterG-LAN2\" ipaddress 10.5.5.1\/24\nenable ipforwarding \"RouterG-LAN2\"\nenable loopback-mode vlan \"RouterG-LAN2\"\n\nconfigure bgp add network 10.5.5.0\/24<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now on Router K, we&#8217;ll add an aggregation and then observe the result on Router L.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-RouterK.1\">Router K<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ll now start summarising those two networks on Router K, ready to observe on Router L.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>configure bgp add aggregate-address 10.5.4.0\/22 as-match summary-only<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-WithoutSummarisation(withAS-Match)\">Without&nbsp;Summarisation&nbsp;(with AS-Match)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">We can see the two routes which are coming from different source AS, 10.5.4.0\/24 from 65002 and 10.5.5.0\/24 from 65001.0.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"983\" height=\"423\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-153.png\" alt=\"\" class=\"wp-image-5154\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-153.png 983w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-153-300x129.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-153-768x330.png 768w\" sizes=\"auto, (max-width: 983px) 100vw, 983px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-WithSummarisation(withAS-Match)\">With Summarisation&nbsp;(with AS-Match)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">But now with AS-Match&nbsp;summarisation, we see only a single route for 10.5.4.0\/22 (which is our aggregate\/summary route), but notice the AS-Path, we have 65004 which is where Router L is seeing it learnt from, but then its put the other two AS in a set.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"396\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-154-1024x396.png\" alt=\"\" class=\"wp-image-5155\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-154-1024x396.png 1024w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-154-300x116.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-154-768x297.png 768w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-154.png 1052w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-WithSummarisation(withAS-Set)\">With&nbsp;Summarisation&nbsp;(with AS-Set)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">So now let&#8217;s compare the above as observed on Router L, with AS-Set used in the configuration instead.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"400\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-155-1024x400.png\" alt=\"\" class=\"wp-image-5156\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-155-1024x400.png 1024w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-155-300x117.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-155-768x300.png 768w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-155.png 1037w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">As we can see it all looks exactly the same!<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Thoughts\">Thoughts<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In our example here for all intents and purposes it makes no difference to use AS-Set or AS-Match. In combining routes from two different sources AS, the order can&#8217;t be preserved, so it is not, and instead it is added as an AS-Set, even though the configuration says to use AS-Match instead.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, there is potential that it can and will make a difference in certain scenarios, but just not the ones we&#8217;re able to test within the lab.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-ContinuedInvestigation\">Continued Investigation<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">So if we now remove the network 10.5.5.0\/24 from Router G and instead put that network on Router H, along with 10.5.4.0\/24, so they are both now originating from the same AS and then have as-match configured on Router K to summarise the routes going to Router L, what do we then see?<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"978\" height=\"409\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-156.png\" alt=\"\" class=\"wp-image-5157\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-156.png 978w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-156-300x125.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-156-768x321.png 768w\" sizes=\"auto, (max-width: 978px) 100vw, 978px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We see a single route with an AS-Path of 65004 and 65002 which is what we&#8217;d expect, it&#8217;s not an AS-Set (notice the missing curly braces), so this order is preserved.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-BreakaLink\">Break a Link<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">So we&#8217;re now going to down the link between Router D and Router F, so AS Green (65002) and AS Red (65004) cannot directly communicate any more, they must go via AS Blue (65001) instead.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If we then observe what happens on Router L, what do we then see?<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1022\" height=\"404\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-157.png\" alt=\"\" class=\"wp-image-5158\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-157.png 1022w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-157-300x119.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-157-768x304.png 768w\" sizes=\"auto, (max-width: 1022px) 100vw, 1022px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We see three AS numbers listed, all in the expected order, i.e. AS Green (65002) originating the route, it being learnt via AS Blue (65001.0) and then Router L learning it from AS Red (65004).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Conclusion\">Conclusion<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">If we swap Router K to as-set instead, we see something very interesting, and that proves that the AS-Match is doing what it is expected to and preserve the order of the AS-Path, unlike AS-Set which does not.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"219\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-159-1024x219.png\" alt=\"\" class=\"wp-image-5160\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-159-1024x219.png 1024w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-159-300x64.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-159-768x164.png 768w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-159-1536x329.png 1536w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-159-2048x438.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-SummaryOnly,AdvertisePolicyandAttributePolicy\">Summary Only, Advertise Policy and Attribute Policy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ll quickly and briefly go over these additional parts of the aggregation configuration, which give you some additional control.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-SummaryOnly\">Summary Only<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Using the Summary Only argument means that the router suppresses any routes that fall within the summary aggregate route.&nbsp;So in our example:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The 10.5.4.0\/24 and 10.5.5.0\/24 are being summarised by 10.5.4.0\/22, both these \/24 routes are suppressed, and instead a single 10.5.4.0\/22 route is transmitted.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This is a quite blunt instrument and might be fine depending on what you are trying to achieve,&nbsp;but you&nbsp;may also want some additional control.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-AdvertisePolicy\">Advertise Policy<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">The advertisement policy command can be specified, along with a policy file, which then defines the routes that are to be included within the aggregation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So rather than summarising (aggregating) 10.5.4.0\/22 and 10.5.5.0\/22 into 10.5.4.0\/22, perhaps we just want 10.5.4.0\/24 to be summarised, but for 10.5.5.0\/24 to be transmitted as a separate route (network prefix).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is where the advertisement policy can apply a bit of nuance.&nbsp;<\/p>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-RouterK.2\">Router K<\/h6>\n\n\n\n<p class=\"wp-block-paragraph\">We first create the policy file called:&nbsp;<strong>10_5_4_0-22_Agg.pol<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>entry no_aggregation {\nif match any {\n\tnlri 10.5.5.0\/24 ;\n}\nthen {\n    deny  ;\n}\n}\nentry yes_aggregation {\nif match any {\n    nlri 10.5.4.0\/24 ;\n}\nthen {\n    permit  ;\n}\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then we apply it as follows, notice we also use the summary-only command to ensure that the summary route is also being provided.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>configure bgp add aggregate-address 10.5.4.0\/22 as-match advertise-policy 10_5_4_0-22_Agg summary-only<\/code><\/pre>\n\n\n\n<h6 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Verify.1\">Verify<\/h6>\n\n\n\n<p class=\"wp-block-paragraph\">Then, if we examine the Route Table on Router L, we can see that we are indeed seeing the summary route of 10.5.4.0\/22, but now only the excluded route (network prefix) 10.5.5.0\/24, with the 10.5.4.0\/24 route (network prefix) not being transmitted separately.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"425\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-160-1024x425.png\" alt=\"\" class=\"wp-image-5161\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-160-1024x425.png 1024w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-160-300x124.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-160-768x319.png 768w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-160.png 1032w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We can further confirm this by checking the transmitted routes from Router K to Router L, and within that we can see that 10.5.4.0\/24 is no longer being transmitted as a separate route.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"815\" height=\"415\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-161.png\" alt=\"\" class=\"wp-image-5162\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-161.png 815w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-161-300x153.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-161-768x391.png 768w\" sizes=\"auto, (max-width: 815px) 100vw, 815px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This functionality can also be known as:&nbsp;<strong>suppress-map<\/strong>: Allows for granular control, letting you choose which specific routes to suppress while allowing others to be advertised alongside the summary or an&nbsp;<strong>unsuppress-map<\/strong>: Allows you to selectively advertise specific, suppressed routes to certain neighbours<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-AttributePolicy\">Attribute Policy<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">You also have an option to modify the attributes of an aggregated (summerised) route when it is transmitted onto downstream routers; so the&nbsp;BGP attributes such as Local Preference (Local-Pref), the MED, AS_Path Prepending, Community strings and so on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The aggregate (summary) route does not inherit attributes from its component routes, so you need to explicitly add attributes to the summary aggregate route if you want them to be added.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You may want to do this because without any Attribute Policy, the summary (aggregate) route might be too attractive (and selected when you don&#8217;t want it to be), not attractive enough (and thus ignored) or break the traffic engineering, meaning perhaps you are advertising a summary route to via two links to the outside world, and expecting link A to be primary and link B to be backup, if the route is bare, the downstream ISP may not know this (due to the lack of attributes) and you&#8217;ll get unexpected or suboptimal use of the links and your network.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As an example, let&#8217;s just set an attribute MED on the transmitted summarised (aggregate) route from Router K, we&#8217;re not going to do anything with it on Router L, but we just want to see that it is being transmitted with this value. If we wanted then on Router L we could make routing decisions based on this value, perhaps to direct traffic via that link (between Router L and Router K) rather than another link to reach the same destination, i.e. the traffic engineering aspects.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-RouterK.3\">Router K<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">We first create a policy file:&nbsp;<strong>10_5_4_0-22_Agg-Attrib.pol<\/strong>&nbsp;with the following contents:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>entry set-community {\nif match any {\n        nlri 10.5.4.0\/22;\n} then {\n        med add 50;\n        permit;\n}\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then we apply it with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>configure bgp add aggregate-address 10.5.4.0\/22 as-match advertise-policy 10_5_4_0-22_Agg summary-only attribute-policy 10_5_4_0-22_Agg-Attrib<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Verify.2\">Verify<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Finally on Router L, let&#8217;s have a look at the route being sent and if it&#8217;s had its MED attribute changed or not. And as we can see it has, so this shows that the summary (aggregate) route indeed has its MED updated.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1014\" height=\"427\" src=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-162.png\" alt=\"\" class=\"wp-image-5163\" srcset=\"https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-162.png 1014w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-162-300x126.png 300w, https:\/\/geekmungus.co.uk\/wp-content\/uploads\/2026\/03\/image-162-768x323.png 768w\" sizes=\"auto, (max-width: 1014px) 100vw, 1014px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/extreme-networks.my.site.com\/ExtrArticleDetail?an=000120646\">https:\/\/extreme-networks.my.site.com\/ExtrArticleDetail?an=000120646<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-Conclusion.1\">Conclusion<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ve explored a number of different topics covering the RIB and Routing Tables, Administrative Distance and Route Aggregation (Summarisation), all sorts of different things that are worth understanding when working with BGP.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"BGPTestLabPart20RoutingInformationBase(RIB),BGPDebugLoggingandotherThings-AdditionalInformation\">Additional Information<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/documentation.extremenetworks.com\/exos_32.7.1\/downloads\/EXOS_User_Guide_32.7.1.pdf\">https:\/\/documentation.extremenetworks.com\/exos_32.7.1\/downloads\/EXOS_User_Guide_32.7.1.pdf<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/documentation.extremenetworks.com\/exos_commands_32.7.1\/downloads\/EXOS_Command_Reference_32.7.1.pdf\">https:\/\/documentation.extremenetworks.com\/exos_commands_32.7.1\/downloads\/EXOS_Command_Reference_32.7.1.pdf<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/documentation.extremenetworks.com\/exos_32.6.1\/GUID-21562F39-BB0D-46A3-B815-5B711D8DF508.shtml\">https:\/\/documentation.extremenetworks.com\/exos_32.6.1\/GUID-21562F39-BB0D-46A3-B815-5B711D8DF508.shtml<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/documentation.extremenetworks.com\/VOSS\/SW\/84\/VOSSUserGuide\/GUID-D79352A9-532E-4AFB-9ADC-1C9A38D47577.shtml\">https:\/\/documentation.extremenetworks.com\/VOSS\/SW\/84\/VOSSUserGuide\/GUID-D79352A9-532E-4AFB-9ADC-1C9A38D47577.shtml<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/documentation.extremenetworks.com\/exos_22.1\/GUID-1B90BC12-6F57-436A-8DD7-227267F4FE9F.shtml\">https:\/\/documentation.extremenetworks.com\/exos_22.1\/GUID-1B90BC12-6F57-436A-8DD7-227267F4FE9F.shtml<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/support.huawei.com\/enterprise\/en\/doc\/EDOC1100516100\/907e1c81\/understanding-bgp-route-summarization#:~:text=BGP%20supports%20automatic%20and%20manual,summary%20route%20to%20BGP%20peers\">https:\/\/support.huawei.com\/enterprise\/en\/doc\/EDOC1100516100\/907e1c81\/understanding-bgp-route-summarization#:~:text=BGP%20supports%20automatic%20and%20manual,summary%20route%20to%20BGP%20peers<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.analysisman.com\/2025\/05\/extreme-troubleshooting-bgp.html\">https:\/\/www.analysisman.com\/2025\/05\/extreme-troubleshooting-bgp.html<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>The Routing Information Base (RIB) is one of the key workings of the BGP protocol on a router. The RIB is not just a routing table, it&#8217;s a dynamic repository of all the information that a router has learned from BGP Neighbours, along with a host of associated other attributes, such as the route&#8217;s AS &#8230; <a title=\"BGP Test Lab &#8211; Part 20 &#8211; Routing Information Base (RIB), BGP Debug Logging and other Things\" class=\"read-more\" href=\"https:\/\/geekmungus.co.uk\/?p=5145\" aria-label=\"Read more about BGP Test Lab &#8211; Part 20 &#8211; Routing Information Base (RIB), BGP Debug Logging and other Things\">Read more<\/a><\/p>\n","protected":false},"author":4,"featured_media":4783,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[62,41,17],"tags":[],"class_list":["post-5145","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bgp","category-extreme-networks","category-networking"],"_links":{"self":[{"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/5145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5145"}],"version-history":[{"count":1,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/5145\/revisions"}],"predecessor-version":[{"id":5164,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/5145\/revisions\/5164"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=\/wp\/v2\/media\/4783"}],"wp:attachment":[{"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekmungus.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}