summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ldpd/notification.c10
-rw-r--r--ldpd/packet.c4
2 files changed, 12 insertions, 2 deletions
diff --git a/ldpd/notification.c b/ldpd/notification.c
index f10faa4a54..4a5f3c8fa4 100644
--- a/ldpd/notification.c
+++ b/ldpd/notification.c
@@ -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);
}
diff --git a/ldpd/packet.c b/ldpd/packet.c
index 46893b992b..75e1a9a027 100644
--- a/ldpd/packet.c
+++ b/ldpd/packet.c
@@ -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);