From ba75f19440ebb9305295dcd4cb58d02e096b1c4a Mon Sep 17 00:00:00 2001 From: Alex Wang Date: Wed, 8 Jan 2014 18:51:43 -0800 Subject: [PATCH] bfd: Fix cpath_down set failure. Commit ccc09689 (bfd: Implement Bidirectional Forwarding Detection.) set the bfd local diagnostic to "Concatenated Path Down" in response to the set of cpath_down only when the current local diagnostic is "None". However, since the bfd local diagnostic is not reset when the bfd state is restored from last erroneous state, the set of cpath_down will not update the local diagnostic in that case. This commit fixes the bug by always checking for local diagnostic change when cpath_down is set or reset. Bug #22625 Signed-off-by: Alex Wang Signed-off-by: Ethan Jackson Acked-by: Ethan Jackson --- lib/bfd.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/bfd.c b/lib/bfd.c index b8574d516..1b35ee4a8 100644 --- a/lib/bfd.c +++ b/lib/bfd.c @@ -403,9 +403,7 @@ bfd_configure(struct bfd *bfd, const char *name, const struct smap *cfg, cpath_down = smap_get_bool(cfg, "cpath_down", false); if (bfd->cpath_down != cpath_down) { bfd->cpath_down = cpath_down; - if (bfd->diag == DIAG_NONE || bfd->diag == DIAG_CPATH_DOWN) { - bfd_set_state(bfd, bfd->state, DIAG_NONE); - } + bfd_set_state(bfd, bfd->state, DIAG_NONE); need_poll = true; } @@ -1022,7 +1020,7 @@ static void bfd_set_state(struct bfd *bfd, enum state state, enum diag diag) OVS_REQUIRES(mutex) { - if (diag == DIAG_NONE && bfd->cpath_down) { + if (bfd->cpath_down) { diag = DIAG_CPATH_DOWN; } -- 2.20.1