<div dir="ltr"><div><span style="font-family:monospace">Hi folks,<br><br>I was doing some testing with BIRD in a hierarchical route reflector configuration.  Something that looks like this...<br><br>                         +--------+              +--------+              +--------+              +--------+                        <br></span></div><span style="font-family:monospace">                         |  Left  |              |  Left  |              | Right  |              | Right  |                        <br></span><div><span style="font-family:monospace">                         | Tier 2 |              | Tier 1 |              | Tier 1 |              | Tier 2 |                        <br>                         |   RR   |              |   RR   |              |   RR   |              |   RR   |                        <br>+-----------+            |        |              |        |              |        |              |        |                        <br>|           |            +--------+              +--------+              +--------+              +--------+          +------------+<br>|           |                                                                                                        |            |<br>|  Sending  |                                                                                                        | Receiving  |<br>| PE Router |                                                                                                        | PE Router  |<br>|           |                                                                                                        |            |<br>+-----------+            +--------+              +--------+              +--------+              +--------+          +------------+<br></span></div><div><span style="font-family:monospace">                         |  Left  |              | Left   |              | Right  |              | Right  |                        <br></span></div><div><span style="font-family:monospace">                         | Tier 2 |              | Tier 1 |              | Tier 1 |              | Tier 2 |                        <br>                         |   RR   |              |   RR   |              |   RR   |              |   RR   |                        <br>                         |        |              |        |              |        |              |        |                        <br></span><div><span style="font-family:monospace">                         +--------+              +--------+              +--------+              +--------+      <br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Basically we have two PEs that are connected to local tier 2 RRs which then connect to the tier 1 RRs to form a mesh.  I couldn't get the lines to not look a mess on the diagram but the peering looks as follows...</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">* PE routers peer to both local tier 2 RRs (left or right side)</span></div><div><span style="font-family:monospace">* Tier 2 RRs peer to both tier 1 RRs (within left or right)</span></div><div><span style="font-family:monospace">* Tier 1 RRs peer to both tier 1 RRs (between left and right)</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">The only peering exception in terms of a full mesh peering is that RRs of the same type do not peer together in the same area (left or right).  In terms of the diagram that means that vertical peering between nodes does not exist.  <br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">What I'm seeing is that in a peering configuration with BGP add-path BIRD is sending all of the paths it is aware of to all of its peers.  For instance...</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">* A prefix originated from the PE on the left side of the diagram shows up as one path in each left side tier 2 RR it is peered with (1 path in each left side tier 2 RR)</span></div><div><span style="font-family:monospace">* The left side tier 2 RRs both peer to each left side tier 1 RRs so they each send a path to each of the left side tier 1 RRs (2 paths in each left side tier 1 RR)</span></div><div><span style="font-family:monospace">* The left side tier 1 RRs both peer to each of the right side tier 1 RRs so they send both paths they are aware of to each right side tier 1 RR (4 paths in each right side tier 1 RR)</span></div><div><span style="font-family:monospace">* The right side tier 1 RRs both peer to each of the right side tier 2 RRs so they send their 4 paths to each right side tier 2 RR (8 paths in each right side tier 2 RR)</span></div><div><span style="font-family:monospace">* The right side (receiving) PE ends up getting 8 paths from each right side tier 2 RR meaning it has a total of 16 paths for one prefix.  <br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Put more simply - a single path originating in the left side ends up getting multiplied by a factor of two at each route reflector "layer".  From my basic understanding of the code I believe this happens because BIRD considers paths unique on a per neighbor basis.  Because of this - identical paths learned from unique neighbors can get assigned unique path IDs and therefore be propagated through the topology.  From my understanding of RFC 7911 - this sort of topology was not discussed so there is no defined means for how to handle add-path and the deduplication of these paths in this kind of hierarchical route reflector setup.  However I believe that in some other BGP implementations you can configure the route reflectors to only send paths with unique next-hops which would effectively deduplicate the paths in this kind of topology.  <br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">I was curious if other folks had run into this before and if there has been any talk about possible solutions for BIRD to work with add-path in a hierarchical route reflector model without the path multiplication occurring.  <br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Thanks! - Jon</span></div><div><span style="font-family:monospace"><br></span></div></div></div>