Check for expired timers even when receiving no events.
Signed-off-by: Benjamin Cama <benoar@dolka.fr>
This commit is contained in:
parent
ae7d3c9fca
commit
500eb6e594
3 changed files with 49 additions and 26 deletions
25
bgp.c
25
bgp.c
|
|
@ -35,6 +35,7 @@ static struct bgp_route_list *bgp_insert_route(struct bgp_route_list *head,
|
|||
static struct bgp_route6_list *bgp_insert_route6(struct bgp_route6_list *head,
|
||||
struct bgp_route6_list *new);
|
||||
|
||||
static void bgp_process_timers(struct bgp_peer *peer);
|
||||
static void bgp_free_routes(struct bgp_route_list *routes);
|
||||
static void bgp_free_routes6(struct bgp_route6_list *routes);
|
||||
static char const *bgp_msg_type_str(uint8_t type);
|
||||
|
|
@ -826,6 +827,25 @@ int bgp_process(uint32_t events[])
|
|||
}
|
||||
|
||||
/* process timers */
|
||||
bgp_process_timers(peer);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void bgp_process_peers_timers()
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!bgp_configured)
|
||||
return;
|
||||
|
||||
for (i = 0; i < BGP_NUM_PEERS; i++)
|
||||
bgp_process_timers(&bgp_peers[i]);
|
||||
}
|
||||
|
||||
static void bgp_process_timers(struct bgp_peer *peer)
|
||||
{
|
||||
if (peer->state == Established)
|
||||
{
|
||||
if (time_now > peer->expire_time)
|
||||
|
|
@ -834,7 +854,7 @@ int bgp_process(uint32_t events[])
|
|||
peer->name, peer->hold);
|
||||
|
||||
bgp_send_notification(peer, BGP_ERR_HOLD_TIMER_EXP, 0);
|
||||
continue;
|
||||
return;
|
||||
}
|
||||
|
||||
if (time_now > peer->keepalive_time && !peer->outbuf->packet.header.len)
|
||||
|
|
@ -854,9 +874,6 @@ int bgp_process(uint32_t events[])
|
|||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void bgp_free_routes(struct bgp_route_list *routes)
|
||||
{
|
||||
struct bgp_route_list *tmp;
|
||||
|
|
|
|||
1
bgp.h
1
bgp.h
|
|
@ -278,6 +278,7 @@ int bgp_del_route6(struct in6_addr ip, int prefixlen);
|
|||
void bgp_enable_routing(int enable);
|
||||
int bgp_set_poll(void);
|
||||
int bgp_process(uint32_t events[]);
|
||||
void bgp_process_peers_timers();
|
||||
char const *bgp_state_str(enum bgp_state state);
|
||||
|
||||
extern char const *cvs_id_bgp;
|
||||
|
|
|
|||
5
l2tpns.c
5
l2tpns.c
|
|
@ -3769,6 +3769,11 @@ static void mainloop(void)
|
|||
more++;
|
||||
}
|
||||
}
|
||||
#ifdef BGP
|
||||
else
|
||||
/* no event received, but timers could still have expired */
|
||||
bgp_process_peers_timers();
|
||||
#endif /* BGP */
|
||||
|
||||
if (time_changed)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue