mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2025-01-03 07:31:54 +00:00
Merge commit 'aa70e14c' into thread-next
This commit is contained in:
commit
6c85016dd4
@ -635,7 +635,7 @@ bfd_reconfigure_iface(struct bfd_proto *p UNUSED, struct bfd_iface *ifa, struct
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bfd_request_notify(struct bfd_request *req, u8 state, u8 diag)
|
bfd_request_notify(struct bfd_request *req, u8 state, u8 remote, u8 diag)
|
||||||
{
|
{
|
||||||
u8 old_state = req->state;
|
u8 old_state = req->state;
|
||||||
|
|
||||||
@ -645,7 +645,7 @@ bfd_request_notify(struct bfd_request *req, u8 state, u8 diag)
|
|||||||
req->state = state;
|
req->state = state;
|
||||||
req->diag = diag;
|
req->diag = diag;
|
||||||
req->old_state = old_state;
|
req->old_state = old_state;
|
||||||
req->down = (old_state == BFD_STATE_UP) && (state == BFD_STATE_DOWN);
|
req->down = (old_state == BFD_STATE_UP) && (state == BFD_STATE_DOWN) && (remote != BFD_STATE_ADMIN_DOWN);
|
||||||
|
|
||||||
if (req->hook)
|
if (req->hook)
|
||||||
{
|
{
|
||||||
@ -780,7 +780,7 @@ bfd_pickup_requests(void *_data UNUSED)
|
|||||||
|
|
||||||
node *n;
|
node *n;
|
||||||
WALK_LIST(n, tmp_list)
|
WALK_LIST(n, tmp_list)
|
||||||
bfd_request_notify(SKIP_BACK(struct bfd_request, n, n), BFD_STATE_ADMIN_DOWN, 0);
|
bfd_request_notify(SKIP_BACK(struct bfd_request, n, n), BFD_STATE_ADMIN_DOWN, BFD_STATE_ADMIN_DOWN, 0);
|
||||||
|
|
||||||
BFD_LOCK;
|
BFD_LOCK;
|
||||||
add_tail_list(&bfd_global.wait_list, &tmp_list);
|
add_tail_list(&bfd_global.wait_list, &tmp_list);
|
||||||
@ -1026,7 +1026,7 @@ bfd_notify_hook(void *data)
|
|||||||
struct bfd_proto *p = data;
|
struct bfd_proto *p = data;
|
||||||
struct bfd_session *s;
|
struct bfd_session *s;
|
||||||
list tmp_list;
|
list tmp_list;
|
||||||
u8 state, diag;
|
u8 loc_state, rem_state, diag;
|
||||||
node *n, *nn;
|
node *n, *nn;
|
||||||
|
|
||||||
bfd_lock_sessions(p);
|
bfd_lock_sessions(p);
|
||||||
@ -1039,12 +1039,13 @@ bfd_notify_hook(void *data)
|
|||||||
{
|
{
|
||||||
bfd_lock_sessions(p);
|
bfd_lock_sessions(p);
|
||||||
rem_node(&s->n);
|
rem_node(&s->n);
|
||||||
state = s->loc_state;
|
loc_state = s->loc_state;
|
||||||
|
rem_state = s->rem_state;
|
||||||
diag = s->loc_diag;
|
diag = s->loc_diag;
|
||||||
bfd_unlock_sessions(p);
|
bfd_unlock_sessions(p);
|
||||||
|
|
||||||
WALK_LIST_DELSAFE(n, nn, s->request_list)
|
WALK_LIST_DELSAFE(n, nn, s->request_list)
|
||||||
bfd_request_notify(SKIP_BACK(struct bfd_request, n, n), state, diag);
|
bfd_request_notify(SKIP_BACK(struct bfd_request, n, n), loc_state, rem_state, diag);
|
||||||
|
|
||||||
/* Remove the session if all requests were removed in notify hooks */
|
/* Remove the session if all requests were removed in notify hooks */
|
||||||
if (EMPTY_LIST(s->request_list))
|
if (EMPTY_LIST(s->request_list))
|
||||||
|
Loading…
Reference in New Issue
Block a user