summaryrefslogtreecommitdiff
path: root/bgpd/bgp_route.c
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@vyatta.com>2010-01-15 16:22:10 +0300
committerDenis Ovsienko <infrastation@yandex.ru>2010-01-15 16:22:10 +0300
commit65957886bfd0dd9d95360d8b015781fc82cc09be (patch)
tree71352e214bd59277a50a43779bb2cbafbace6cc3 /bgpd/bgp_route.c
parent2cd754de60210748e61069fed2c9d4086d24c21e (diff)
bgp: use monotonic clock for time of day
BGP uses time() to get system time of day; but that value fluctuates with time adjustments from NTP. This can cause premature flapping of peer sessions and other failures. Use the system monotonic clock supported by Quagga thread library to avoid issue. See: http://bugzilla.vyatta.com/show_bug.cgi?id=4467 * bgpd/bgp_fsm.c * bgp_uptime_reset(): dismiss function * bgpd/bgpd.c * bgp_clock(): new function * bgpd/bgp_damp.c * bgp_reuse_timer(): employ bgp_clock() instead of time(NULL) * bgp_damp_withdraw(): idem * bgp_damp_update(): idem * bgp_damp_scan(): idem * bgp_damp_info_vty(): idem * bgp_damp_reuse_time_vty(): idem * bgpd/bgp_fsm.c * bgp_routeadv_timer(): idem * bgp_stop(): idem * bgp_establish(): idem * bgpd/bgp_packet.c * bgp_update_receive(): idem * bgpd/bgp_route.c * bgp_update_rsclient(): idem * bgp_update_main(): idem * bgp_static_update_rsclient(): idem * bgp_static_update_main(): idem * bgp_static_update_vpnv4(): idem * bgp_aggregate_route(): idem * bgp_aggregate_add(): idem * bgp_redistribute_add(): idem * bgpd/bgp_snmp.c * bgpPeerTable(): idem * bgpTrapEstablished(): idem * bgpTrapBackwardTransition(): idem * bgpd/bgpd.c * peer_create(): idem * peer_uptime(): idem * bgp_master_init(): idem
Diffstat (limited to 'bgpd/bgp_route.c')
-rw-r--r--bgpd/bgp_route.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index f3144fea..a92ca4e2 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -1878,7 +1878,7 @@ bgp_update_rsclient (struct peer *rsclient, afi_t afi, safi_t safi,
/* If the update is implicit withdraw. */
if (ri)
{
- ri->uptime = time (NULL);
+ ri->uptime = bgp_clock ();
/* Same attribute comes in. */
if (!CHECK_FLAG(ri->flags, BGP_INFO_REMOVED)
@@ -1946,7 +1946,7 @@ bgp_update_rsclient (struct peer *rsclient, afi_t afi, safi_t safi,
new->sub_type = sub_type;
new->peer = peer;
new->attr = attr_new;
- new->uptime = time (NULL);
+ new->uptime = bgp_clock ();
/* Update MPLS tag. */
if (safi == SAFI_MPLS_VPN)
@@ -2133,7 +2133,7 @@ bgp_update_main (struct peer *peer, struct prefix *p, struct attr *attr,
/* If the update is implicit withdraw. */
if (ri)
{
- ri->uptime = time (NULL);
+ ri->uptime = bgp_clock ();
/* Same attribute comes in. */
if (!CHECK_FLAG (ri->flags, BGP_INFO_REMOVED)
@@ -2284,7 +2284,7 @@ bgp_update_main (struct peer *peer, struct prefix *p, struct attr *attr,
new->sub_type = sub_type;
new->peer = peer;
new->attr = attr_new;
- new->uptime = time (NULL);
+ new->uptime = bgp_clock ();
/* Update MPLS tag. */
if (safi == SAFI_MPLS_VPN)
@@ -3337,7 +3337,7 @@ bgp_static_update_rsclient (struct peer *rsclient, struct prefix *p,
bgp_info_restore(rn, ri);
bgp_attr_unintern (ri->attr);
ri->attr = attr_new;
- ri->uptime = time (NULL);
+ ri->uptime = bgp_clock ();
/* Process change. */
bgp_process (bgp, rn, afi, safi);
@@ -3355,7 +3355,7 @@ bgp_static_update_rsclient (struct peer *rsclient, struct prefix *p,
new->peer = bgp->peer_self;
SET_FLAG (new->flags, BGP_INFO_VALID);
new->attr = attr_new;
- new->uptime = time (NULL);
+ new->uptime = bgp_clock ();
/* Register new BGP information. */
bgp_info_add (rn, new);
@@ -3463,7 +3463,7 @@ bgp_static_update_main (struct bgp *bgp, struct prefix *p,
bgp_aggregate_decrement (bgp, p, ri, afi, safi);
bgp_attr_unintern (ri->attr);
ri->attr = attr_new;
- ri->uptime = time (NULL);
+ ri->uptime = bgp_clock ();
/* Process change. */
bgp_aggregate_increment (bgp, p, ri, afi, safi);
@@ -3482,7 +3482,7 @@ bgp_static_update_main (struct bgp *bgp, struct prefix *p,
new->peer = bgp->peer_self;
SET_FLAG (new->flags, BGP_INFO_VALID);
new->attr = attr_new;
- new->uptime = time (NULL);
+ new->uptime = bgp_clock ();
/* Aggregate address increment. */
bgp_aggregate_increment (bgp, p, new, afi, safi);
@@ -3533,7 +3533,7 @@ bgp_static_update_vpnv4 (struct bgp *bgp, struct prefix *p, u_int16_t afi,
new->peer = bgp->peer_self;
new->attr = bgp_attr_default_intern (BGP_ORIGIN_IGP);
SET_FLAG (new->flags, BGP_INFO_VALID);
- new->uptime = time (NULL);
+ new->uptime = bgp_clock ();
new->extra = bgp_info_extra_new();
memcpy (new->extra->tag, tag, 3);
@@ -4729,7 +4729,7 @@ bgp_aggregate_route (struct bgp *bgp, struct prefix *p, struct bgp_info *rinew,
new->peer = bgp->peer_self;
SET_FLAG (new->flags, BGP_INFO_VALID);
new->attr = bgp_attr_aggregate_intern (bgp, origin, aspath, community, aggregate->as_set);
- new->uptime = time (NULL);
+ new->uptime = bgp_clock ();
bgp_info_add (rn, new);
bgp_unlock_node (rn);
@@ -4900,7 +4900,7 @@ bgp_aggregate_add (struct bgp *bgp, struct prefix *p, afi_t afi, safi_t safi,
new->peer = bgp->peer_self;
SET_FLAG (new->flags, BGP_INFO_VALID);
new->attr = bgp_attr_aggregate_intern (bgp, origin, aspath, community, aggregate->as_set);
- new->uptime = time (NULL);
+ new->uptime = bgp_clock ();
bgp_info_add (rn, new);
bgp_unlock_node (rn);
@@ -5514,7 +5514,7 @@ bgp_redistribute_add (struct prefix *p, struct in_addr *nexthop,
bgp_aggregate_decrement (bgp, p, bi, afi, SAFI_UNICAST);
bgp_attr_unintern (bi->attr);
bi->attr = new_attr;
- bi->uptime = time (NULL);
+ bi->uptime = bgp_clock ();
/* Process change. */
bgp_aggregate_increment (bgp, p, bi, afi, SAFI_UNICAST);
@@ -5532,7 +5532,7 @@ bgp_redistribute_add (struct prefix *p, struct in_addr *nexthop,
new->peer = bgp->peer_self;
SET_FLAG (new->flags, BGP_INFO_VALID);
new->attr = new_attr;
- new->uptime = time (NULL);
+ new->uptime = bgp_clock ();
bgp_aggregate_increment (bgp, p, new, afi, SAFI_UNICAST);
bgp_info_add (bn, new);