diff options
author | Vasilis Tsiligiannis <b_tsiligiannis@silverton.gr> | 2009-07-20 00:59:10 +0200 |
---|---|---|
committer | Paul Jakma <paul@quagga.net> | 2009-07-28 16:02:07 +0200 |
commit | 736d440845c8c0cfdb56b86254887bab5fc7f3f5 (patch) | |
tree | e1b7f27c18b03494509e9b9ef0a694b726630418 /bgpd/bgp_aspath.c | |
parent | bgpd: Implement BGP confederation error handling (RFC5065, Par. 5) (diff) | |
download | frr-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.c | 4 |
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); |