diff options
Diffstat (limited to 'bfdd/event.c')
| -rw-r--r-- | bfdd/event.c | 87 | 
1 files changed, 87 insertions, 0 deletions
diff --git a/bfdd/event.c b/bfdd/event.c index e797e71f05..e5f43b6cc6 100644 --- a/bfdd/event.c +++ b/bfdd/event.c @@ -58,6 +58,73 @@ void bfd_echo_recvtimer_update(struct bfd_session *bs)  			   &bs->echo_recvtimer_ev);  } +void sbfd_init_recvtimer_update(struct bfd_session *bs) +{ +	struct timeval tv = { .tv_sec = 0, .tv_usec = bs->detect_TO }; + +	/* Remove previous schedule if any. */ +	sbfd_init_recvtimer_delete(bs); + +	/* Don't add event if peer is deactivated. */ +	if (CHECK_FLAG(bs->flags, BFD_SESS_FLAG_SHUTDOWN) || bs->sock == -1) +		return; + +	tv_normalize(&tv); +#ifdef BFD_EVENT_DEBUG +	log_debug("%s: sec = %ld, usec = %ld", __func__, tv.tv_sec, tv.tv_usec); +#endif /* BFD_EVENT_DEBUG */ + +	event_add_timer_tv(master, sbfd_init_recvtimer_cb, bs, &tv, &bs->recvtimer_ev); +} + +void sbfd_echo_recvtimer_update(struct bfd_session *bs) +{ +	struct timeval tv = { .tv_sec = 0, .tv_usec = bs->echo_detect_TO }; + +	/* Remove previous schedule if any. */ +	sbfd_echo_recvtimer_delete(bs); + +	/* Don't add event if peer is deactivated. */ +	if (CHECK_FLAG(bs->flags, BFD_SESS_FLAG_SHUTDOWN) || bs->sock == -1) +		return; + +	tv_normalize(&tv); + +	event_add_timer_tv(master, sbfd_echo_recvtimer_cb, bs, &tv, &bs->echo_recvtimer_ev); +} + +void sbfd_init_xmttimer_update(struct bfd_session *bs, uint64_t jitter) +{ +	struct timeval tv = { .tv_sec = 0, .tv_usec = jitter }; + +	/* Remove previous schedule if any. */ +	sbfd_init_xmttimer_delete(bs); + +	/* Don't add event if peer is deactivated. */ +	if (CHECK_FLAG(bs->flags, BFD_SESS_FLAG_SHUTDOWN) || bs->sock == -1) +		return; + +	tv_normalize(&tv); + +	event_add_timer_tv(master, sbfd_init_xmt_cb, bs, &tv, &bs->xmttimer_ev); +} + +void sbfd_echo_xmttimer_update(struct bfd_session *bs, uint64_t jitter) +{ +	struct timeval tv = { .tv_sec = 0, .tv_usec = jitter }; + +	/* Remove previous schedule if any. */ +	sbfd_echo_xmttimer_delete(bs); + +	/* Don't add event if peer is deactivated. */ +	if (CHECK_FLAG(bs->flags, BFD_SESS_FLAG_SHUTDOWN) || bs->sock == -1) +		return; + +	tv_normalize(&tv); + +	event_add_timer_tv(master, sbfd_echo_xmt_cb, bs, &tv, &bs->echo_xmttimer_ev); +} +  void bfd_xmttimer_update(struct bfd_session *bs, uint64_t jitter)  {  	struct timeval tv = {.tv_sec = 0, .tv_usec = jitter}; @@ -112,3 +179,23 @@ void bfd_echo_xmttimer_delete(struct bfd_session *bs)  {  	EVENT_OFF(bs->echo_xmttimer_ev);  } + +void sbfd_init_recvtimer_delete(struct bfd_session *bs) +{ +	EVENT_OFF(bs->recvtimer_ev); +} + +void sbfd_echo_recvtimer_delete(struct bfd_session *bs) +{ +	EVENT_OFF(bs->echo_recvtimer_ev); +} + +void sbfd_init_xmttimer_delete(struct bfd_session *bs) +{ +	EVENT_OFF(bs->xmttimer_ev); +} + +void sbfd_echo_xmttimer_delete(struct bfd_session *bs) +{ +	EVENT_OFF(bs->echo_xmttimer_ev); +}  | 
