diff options
author | Daniel Walton <dwalton@cumulusnetworks.com> | 2015-11-04 17:31:33 +0100 |
---|---|---|
committer | Daniel Walton <dwalton@cumulusnetworks.com> | 2015-11-04 17:31:33 +0100 |
commit | 40d2700de36db09416c361224b6b11ff9f94568f (patch) | |
tree | f061efd0edd287102e7d3233b9135c5003cb3730 /bgpd/bgp_updgrp.c | |
parent | BGP: enable deterministic-med by default (diff) | |
download | frr-40d2700de36db09416c361224b6b11ff9f94568f.tar.xz frr-40d2700de36db09416c361224b6b11ff9f94568f.zip |
BGP ORF fails to filter prefixes correctly
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Ticket: CM-7145
Diffstat (limited to 'bgpd/bgp_updgrp.c')
-rw-r--r-- | bgpd/bgp_updgrp.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/bgpd/bgp_updgrp.c b/bgpd/bgp_updgrp.c index a280b55c1..c39c68782 100644 --- a/bgpd/bgp_updgrp.c +++ b/bgpd/bgp_updgrp.c @@ -151,6 +151,7 @@ conf_copy (struct peer *dst, struct peer *src, afi_t afi, safi_t safi) dst->cap = src->cap; dst->af_cap[afi][safi] = src->af_cap[afi][safi]; dst->afc_nego[afi][safi] = src->afc_nego[afi][safi]; + dst->orf_plist[afi][safi] = src->orf_plist[afi][safi]; dst->local_as = src->local_as; dst->change_local_as = src->change_local_as; dst->shared_network = src->shared_network; @@ -372,12 +373,14 @@ updgrp_hash_key_make (void *p) key); /* - * Every peer configured to be a lonesoul gets its own update group. - * - * Every route server client gets its own update group as well. Optimize - * later. + * There are certain peers that must get their own update-group: + * - lonesoul peers + * - route server clients + * - peers that negotiated ORF */ if (CHECK_FLAG (peer->flags, PEER_FLAG_LONESOUL) || + CHECK_FLAG (peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV) || + CHECK_FLAG (peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_OLD_RCV) || CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT)) key = jhash_1word (jhash (peer->host, strlen (peer->host), SEED2), key); @@ -488,6 +491,8 @@ updgrp_hash_cmp (const void *p1, const void *p2) return 0; if ((CHECK_FLAG (pe1->flags, PEER_FLAG_LONESOUL) || + CHECK_FLAG (pe1->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV) || + CHECK_FLAG (pe1->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_OLD_RCV) || CHECK_FLAG (pe1->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT)) && !sockunion_same (&pe1->su, &pe2->su)) return 0; |