From: Neale Ranns Date: Mon, 16 Jul 2018 13:12:33 +0000 (-0700) Subject: Adjacency-BFD: assume BFD down on create X-Git-Tag: v18.10-rc1~602 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=4faab21a75a208d83c184bd424938c4dbf6b38e4;hp=15dff7234270b5f4ad724d3a69d3ed73db2a966b;p=vpp.git Adjacency-BFD: assume BFD down on create Change-Id: I13279a1a96df457209fb25748a643c01b18ff4e0 Signed-off-by: Neale Ranns --- 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); diff --git a/src/vnet/fib/fib_test.c b/src/vnet/fib/fib_test.c index 95540834f52..fb268e63d9e 100644 --- a/src/vnet/fib/fib_test.c +++ b/src/vnet/fib/fib_test.c @@ -8198,7 +8198,7 @@ fib_test_bfd (void) /* * whilst the BFD session is not signalled, the adj is up */ - FIB_TEST(adj_is_up(ai_10_10_10_1), "Adj state up on uninit session"); + FIB_TEST(!adj_is_up(ai_10_10_10_1), "Adj state down on uninit session"); /* * bring the BFD session up @@ -8214,7 +8214,6 @@ fib_test_bfd (void) adj_bfd_notify(BFD_LISTEN_EVENT_UPDATE, &bfd_10_10_10_1); FIB_TEST(!adj_is_up(ai_10_10_10_1), "Adj state down on DOWN session"); - /* * add an attached next hop FIB entry via the down adj */