From 4faab21a75a208d83c184bd424938c4dbf6b38e4 Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Mon, 16 Jul 2018 06:12:33 -0700 Subject: Adjacency-BFD: assume BFD down on create Change-Id: I13279a1a96df457209fb25748a643c01b18ff4e0 Signed-off-by: Neale Ranns --- src/vnet/adj/adj_bfd.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/vnet/adj') diff --git a/src/vnet/adj/adj_bfd.c b/src/vnet/adj/adj_bfd.c index de7abfe4470..624d22fbccf 100644 --- a/src/vnet/adj/adj_bfd.c +++ b/src/vnet/adj/adj_bfd.c @@ -29,6 +29,13 @@ typedef enum adj_bfd_state_t_ ADJ_BFD_STATE_UP, } adj_bfd_state_t; +#define ADJ_BFD_STATES { \ + [ADJ_BFD_STATE_DOWN] = "down", \ + [ADJ_BFD_STATE_UP] = "up", \ +} + +static const char *adj_bfd_state_names[] = ADJ_BFD_STATES; + /** * BFD delegate daa */ @@ -165,16 +172,17 @@ adj_bfd_notify (bfd_listen_event_e event, pool_get(abd_pool, abd); /* - * pretend the session is up and skip the walk. - * If we set it down then we get traffic loss on new children. - * if we walk then we lose traffic for existing children. Wait - * for the first BFD UP/DOWN before we let the session's state - * influence forwarding. + * it would be best here if we could ignore this create and just + * wait for the first update, but this is not posible because + * BFD sessions are created in the down state, and can remain this + * way without transitioning to another state if the peer is + * unresponxive. So we have to assuem down and wait for up. */ - abd->abd_state = ADJ_BFD_STATE_UP; + abd->abd_state = ADJ_BFD_STATE_DOWN; abd->abd_index = session->bs_idx; adj_delegate_add(adj_get(ai), ADJ_DELEGATE_BFD, abd - abd_pool); + adj_bfd_update_walk(ai); } break; @@ -258,8 +266,8 @@ adj_delegate_fmt_bfd (const adj_delegate_t *aed, u8 *s) { const adj_bfd_delegate_t *abd = adj_bfd_from_const_base(aed); - s = format(s, "BFD:[state:%d index:%d]", - abd->abd_state, + s = format(s, "BFD:[state:%s index:%d]", + adj_bfd_state_names[abd->abd_state], abd->abd_index); return (s); -- cgit 1.2.3-korg