summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_aspath.c
diff options
context:
space:
mode:
authorVasilis Tsiligiannis <b_tsiligiannis@silverton.gr>2009-07-20 00:59:10 +0200
committerPaul Jakma <paul@quagga.net>2009-07-28 16:02:07 +0200
commit736d440845c8c0cfdb56b86254887bab5fc7f3f5 (patch)
treee1b7f27c18b03494509e9b9ef0a694b726630418 /bgpd/bgp_aspath.c
parentbgpd: Implement BGP confederation error handling (RFC5065, Par. 5) (diff)
downloadfrr-736d440845c8c0cfdb56b86254887bab5fc7f3f5.tar.xz
frr-736d440845c8c0cfdb56b86254887bab5fc7f3f5.zip
bgpd: Delete AS_CONFED_SEQUENCE when prepending an AS_SEQUENCE type segment
AS_CONFED_SEQUENCE segment should always be deleted when prepending (e.g. with a route-map) an AS_SEQUENCE segment to an AS path. Otherwise, AS_CONFED_SEQUENCE will not be deleted later when updating EBGP peers (since it is not the leftmost segment) and will leak outside the confederation.
Diffstat (limited to 'bgpd/bgp_aspath.c')
-rw-r--r--bgpd/bgp_aspath.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/bgpd/bgp_aspath.c b/bgpd/bgp_aspath.c
index e65541f97..440815b46 100644
--- a/bgpd/bgp_aspath.c
+++ b/bgpd/bgp_aspath.c
@@ -1208,6 +1208,10 @@ aspath_prepend (struct aspath *as1, struct aspath *as2)
while (seg1 && seg1->next)
seg1 = seg1->next;
+ /* Delete any AS_CONFED_SEQUENCE segment from as2. */
+ if (seg1->type == AS_SEQUENCE && seg2->type == AS_CONFED_SEQUENCE)
+ as2 = aspath_delete_confed_seq (as2);
+
/* Compare last segment type of as1 and first segment type of as2. */
if (seg1->type != seg2->type)
return aspath_merge (as1, as2);