return 0;
}
-/* dump notify packet */
-void
-bgp_notify_print(struct peer *peer, struct bgp_notify *bgp_notify,
- const char *direct)
+const char *
+bgp_notify_code_str (char code)
{
- const char *subcode_str;
- const char *code_str;
+ return LOOKUP_DEF (bgp_notify_msg, code, "Unrecognized Error Code");
+}
- subcode_str = "";
- code_str = LOOKUP_DEF (bgp_notify_msg, bgp_notify->code,
- "Unrecognized Error Code");
+const char *
+bgp_notify_subcode_str (char code, char subcode)
+{
- switch (bgp_notify->code)
+ switch (code)
{
case BGP_NOTIFY_HEADER_ERR:
- subcode_str = LOOKUP_DEF (bgp_notify_head_msg, bgp_notify->subcode,
- "Unrecognized Error Subcode");
- break;
+ return LOOKUP_DEF (bgp_notify_head_msg, subcode,
+ "Unrecognized Error Subcode");
case BGP_NOTIFY_OPEN_ERR:
- subcode_str = LOOKUP_DEF (bgp_notify_open_msg, bgp_notify->subcode,
- "Unrecognized Error Subcode");
- break;
+ return LOOKUP_DEF (bgp_notify_open_msg, subcode,
+ "Unrecognized Error Subcode");
case BGP_NOTIFY_UPDATE_ERR:
- subcode_str = LOOKUP_DEF (bgp_notify_update_msg, bgp_notify->subcode,
- "Unrecognized Error Subcode");
- break;
+ return LOOKUP_DEF (bgp_notify_update_msg, subcode,
+ "Unrecognized Error Subcode");
case BGP_NOTIFY_HOLD_ERR:
break;
case BGP_NOTIFY_FSM_ERR:
break;
case BGP_NOTIFY_CEASE:
- subcode_str = LOOKUP_DEF (bgp_notify_cease_msg, bgp_notify->subcode,
- "Unrecognized Error Subcode");
- break;
+ return LOOKUP_DEF (bgp_notify_cease_msg, subcode,
+ "Unrecognized Error Subcode");
case BGP_NOTIFY_CAPABILITY_ERR:
- subcode_str = LOOKUP_DEF (bgp_notify_capability_msg, bgp_notify->subcode,
- "Unrecognized Error Subcode");
- break;
+ return LOOKUP_DEF (bgp_notify_capability_msg, subcode,
+ "Unrecognized Error Subcode");
}
+ return "";
+}
+
+/* dump notify packet */
+void
+bgp_notify_print(struct peer *peer, struct bgp_notify *bgp_notify,
+ const char *direct)
+{
+ const char *subcode_str;
+ const char *code_str;
if (BGP_DEBUG (neighbor_events, NEIGHBOR_EVENTS) || bgp_flag_check (peer->bgp, BGP_FLAG_LOG_NEIGHBOR_CHANGES))
- zlog_info ("%%NOTIFICATION: %s neighbor %s %d/%d (%s%s) %d bytes %s",
- strcmp (direct, "received") == 0 ? "received from" : "sent to",
- peer->host, bgp_notify->code, bgp_notify->subcode,
- code_str, subcode_str, bgp_notify->length,
- bgp_notify->data ? bgp_notify->data : "");
+ {
+ code_str = bgp_notify_code_str(bgp_notify->code);
+ subcode_str = bgp_notify_subcode_str(bgp_notify->code, bgp_notify->subcode);
+
+ zlog_info ("%%NOTIFICATION: %s neighbor %s %d/%d (%s%s) %d bytes %s",
+ strcmp (direct, "received") == 0 ? "received from" : "sent to",
+ peer->host, bgp_notify->code, bgp_notify->subcode,
+ code_str, subcode_str, bgp_notify->length,
+ bgp_notify->data ? bgp_notify->data : "");
+ }
}
static void
bgp_notify.subcode = sub_code;
bgp_notify.data = NULL;
bgp_notify.length = length - BGP_MSG_NOTIFY_MIN_SIZE;
+
+ peer->notify.code = bgp_notify.code;
+ peer->notify.subcode = bgp_notify.subcode;
if (bgp_notify.length)
{
}
/* peer reset cause */
- if (sub_code != BGP_NOTIFY_CEASE_CONFIG_CHANGE)
+ if (code == BGP_NOTIFY_CEASE)
{
if (sub_code == BGP_NOTIFY_CEASE_ADMIN_RESET)
peer->last_reset = PEER_DOWN_USER_RESET;
else
peer->last_reset = PEER_DOWN_NOTIFY_SEND;
}
+ else
+ peer->last_reset = PEER_DOWN_NOTIFY_SEND;
/* Call immediately. */
BGP_WRITE_OFF (peer->t_write);
/* peer count update */
peer->notify_in++;
- if (peer->status == Established)
- peer->last_reset = PEER_DOWN_NOTIFY_RECEIVED;
+ peer->last_reset = PEER_DOWN_NOTIFY_RECEIVED;
/* We have to check for Notify with Unsupported Optional Parameter.
in that case we fallback to open without the capability option.
char buf1[BUFSIZ], buf[SU_ADDRSTRLEN];
char timebuf[BGP_UPTIME_LEN];
char dn_flag[2];
+ const char *subcode_str;
+ const char *code_str;
afi_t afi;
safi_t safi;
u_int16_t i;
}
else
{
- vty_out (vty, " Last reset %s, due to %s%s",
- peer_uptime (p->resettime, timebuf, BGP_UPTIME_LEN, 0, NULL),
- peer_down_str[(int) p->last_reset], VTY_NEWLINE);
+ vty_out (vty, " Last reset %s, ",
+ peer_uptime (p->resettime, timebuf, BGP_UPTIME_LEN, 0, NULL));
+
+ if (p->last_reset == PEER_DOWN_NOTIFY_SEND ||
+ p->last_reset == PEER_DOWN_NOTIFY_RECEIVED)
+ {
+ code_str = bgp_notify_code_str(p->notify.code);
+ subcode_str = bgp_notify_subcode_str(p->notify.code, p->notify.subcode);
+ vty_out (vty, "due to NOTIFICATION %s (%s%s)%s",
+ p->last_reset == PEER_DOWN_NOTIFY_SEND ? "sent" : "received",
+ code_str, subcode_str, VTY_NEWLINE);
+ }
+ else
+ {
+ vty_out (vty, "due to %s%s",
+ peer_down_str[(int) p->last_reset], VTY_NEWLINE);
+ }
if (p->last_reset_cause_size)
{