summaryrefslogtreecommitdiff
path: root/bfdd/event.c
diff options
context:
space:
mode:
authorRuss White <russ@riw.us>2025-02-04 06:36:43 -0500
committerGitHub <noreply@github.com>2025-02-04 06:36:43 -0500
commitadeb30d8f37ef3668bbc56a1e1347ac451bba479 (patch)
tree88251415f13e7c243b3f7f2c91269ad94dce6bd4 /bfdd/event.c
parent817c2c98230f3825df65283fc68f1b8f8a317d04 (diff)
parent427cf6627db14475fb505d6ac85f35c140aaeaa5 (diff)
Merge pull request #17336 from forrestchu/sbfd
implement SBFD
Diffstat (limited to 'bfdd/event.c')
-rw-r--r--bfdd/event.c87
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);
+}