summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhasso <hasso>2005-02-23 14:27:24 +0000
committerhasso <hasso>2005-02-23 14:27:24 +0000
commit338b3424154af85b0762713796397d3f2345d54f (patch)
tree53e202ad7097edc2299179135265475bb48435ed
parente69b9e40c74d9d910934c94c63c08e36e9799e00 (diff)
* bgp_route.c: Make reannouncing prefixes with changed attributes
work again.
-rw-r--r--bgpd/ChangeLog5
-rw-r--r--bgpd/bgp_route.c29
2 files changed, 22 insertions, 12 deletions
diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog
index 009f7f98..29114c89 100644
--- a/bgpd/ChangeLog
+++ b/bgpd/ChangeLog
@@ -1,3 +1,8 @@
+2005-02-23 Hasso Tepper <hasso at quagga.net>
+
+ * bgp_route.c: Make reannouncing prefixes with changed attributes
+ work again.
+
2005-02-02 Akihiro Mizutani <mizutani@net-chef.net>
* bgp_vty.c: Deprecate "neighbor transparent-as" and "neighbor
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 156120b8..8c8fa528 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -1098,18 +1098,6 @@ bgp_best_selection (struct bgp *bgp, struct bgp_node *rn, struct bgp_info_pair *
new_select = ri;
}
- if ( (! old_select) || old_select != new_select
- || CHECK_FLAG (old_select->flags, BGP_INFO_ATTR_CHANGED))
- {
- if (old_select)
- UNSET_FLAG (old_select->flags, BGP_INFO_SELECTED);
- if (new_select)
- {
- SET_FLAG (new_select->flags, BGP_INFO_SELECTED);
- UNSET_FLAG (new_select->flags, BGP_INFO_ATTR_CHANGED);
- }
- }
-
result->old = old_select;
result->new = new_select;
@@ -1188,6 +1176,14 @@ bgp_process_rsclient (struct bgp *bgp, struct peer *rsclient,
if (old_select && old_select == new_select)
if (! CHECK_FLAG (old_select->flags, BGP_INFO_ATTR_CHANGED))
continue;
+
+ if (old_select)
+ UNSET_FLAG (old_select->flags, BGP_INFO_SELECTED);
+ if (new_select)
+ {
+ SET_FLAG (new_select->flags, BGP_INFO_SELECTED);
+ UNSET_FLAG (new_select->flags, BGP_INFO_ATTR_CHANGED);
+ }
bgp_process_announce_selected (rsclient, new_select, rn, &attr,
afi, safi);
@@ -1229,6 +1225,15 @@ bgp_process_main (struct bgp *bgp, struct bgp_node *rn, afi_t afi, safi_t safi)
}
}
+ if (old_select)
+ UNSET_FLAG (old_select->flags, BGP_INFO_SELECTED);
+ if (new_select)
+ {
+ SET_FLAG (new_select->flags, BGP_INFO_SELECTED);
+ UNSET_FLAG (new_select->flags, BGP_INFO_ATTR_CHANGED);
+ }
+
+
/* Check each BGP peer. */
LIST_LOOP (bgp->peer, peer, nn)
{