mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-09 09:47:11 +00:00
ldpd: accept notifications during the session establishment process
If we don't do this, we'll never trigger the backoff exponential timer
since it's impossible to distinguish between Initialization NAK's and
general errors.
Also:
* Implement some missing bits from RFC 5036;
* remove superfluous log message in session_shutdown()
(send_notification() logs that we're sending a fatal notification).
Regression introduced by commit 8819fc3
.
Fixes the following ANVL LDP regressions: 6.19 and 6.21.
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
This commit is contained in:
parent
3dcdcbb478
commit
9b2868bc01
@ -237,6 +237,16 @@ recv_notification(struct nbr *nbr, char *buf, uint16_t len)
|
||||
if (nbr->state == NBR_STA_OPENSENT)
|
||||
nbr_start_idtimer(nbr);
|
||||
|
||||
/*
|
||||
* RFC 5036 - Section 3.5.1.1:
|
||||
* "When an LSR receives a Shutdown message during session
|
||||
* initialization, it SHOULD transmit a Shutdown message and
|
||||
* then close the transport connection".
|
||||
*/
|
||||
if (nbr->state != NBR_STA_OPER && nm.status_code == S_SHUTDOWN)
|
||||
send_notification(nbr->tcp, S_SHUTDOWN,
|
||||
msg.id, msg.type);
|
||||
|
||||
nbr_fsm(nbr, NBR_EVT_CLOSE_SESSION);
|
||||
return (-1);
|
||||
}
|
||||
|
@ -519,6 +519,8 @@ session_read(struct thread *thread)
|
||||
return (0);
|
||||
}
|
||||
break;
|
||||
case MSG_TYPE_NOTIFICATION:
|
||||
break;
|
||||
default:
|
||||
if (nbr->state != NBR_STA_OPER) {
|
||||
session_shutdown(nbr, S_SHUTDOWN,
|
||||
@ -661,8 +663,6 @@ session_shutdown(struct nbr *nbr, uint32_t status, uint32_t msg_id,
|
||||
case NBR_STA_OPENREC:
|
||||
case NBR_STA_OPENSENT:
|
||||
case NBR_STA_OPER:
|
||||
log_debug("%s: lsr-id %s", __func__, inet_ntoa(nbr->id));
|
||||
|
||||
send_notification(nbr->tcp, status, msg_id, msg_type);
|
||||
|
||||
nbr_fsm(nbr, NBR_EVT_CLOSE_SESSION);
|
||||
|
Loading…
Reference in New Issue
Block a user