diff options
| author | Russ White <russ@riw.us> | 2025-02-04 06:36:43 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-04 06:36:43 -0500 | 
| commit | adeb30d8f37ef3668bbc56a1e1347ac451bba479 (patch) | |
| tree | 88251415f13e7c243b3f7f2c91269ad94dce6bd4 /bfdd/event.c | |
| parent | 817c2c98230f3825df65283fc68f1b8f8a317d04 (diff) | |
| parent | 427cf6627db14475fb505d6ac85f35c140aaeaa5 (diff) | |
Merge pull request #17336 from forrestchu/sbfd
implement SBFD
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); +}  | 
