json_object_string_add(json_peer,
"lastNotificationReason",
errorcodesubcode_str);
+ json_object_boolean_add(json_peer,
+ "lastNotificationHardReset",
+ peer->notify.hard_reset);
if (peer->last_reset == PEER_DOWN_NOTIFY_RECEIVED
&& peer->notify.code == BGP_NOTIFY_CEASE
&& (peer->notify.subcode
subcode_str =
bgp_notify_subcode_str(peer->notify.code,
peer->notify.subcode);
- vty_out(vty, " Notification %s (%s%s)\n",
+ vty_out(vty, " Notification %s (%s%s%s)\n",
peer->last_reset == PEER_DOWN_NOTIFY_SEND
- ? "sent"
- : "received",
- code_str, subcode_str);
+ ? "sent"
+ : "received",
+ code_str, subcode_str,
+ peer->notify.hard_reset
+ ? bgp_notify_subcode_str(
+ BGP_NOTIFY_CEASE,
+ BGP_NOTIFY_CEASE_HARD_RESET)
+ : "");
} else {
vty_out(vty, " %s\n",
peer_down_str[(int)peer->last_reset]);
}
}
-static void bgp_show_neighnor_graceful_restart_rbit(struct vty *vty,
- struct peer *p,
- bool use_json,
- json_object *json)
+static void bgp_show_neighnor_graceful_restart_flags(struct vty *vty,
+ struct peer *p,
+ bool use_json,
+ json_object *json)
{
- bool rbit_status = false;
-
- if (!use_json)
- vty_out(vty, "\n R bit: ");
+ bool rbit = false;
+ bool nbit = false;
if (CHECK_FLAG(p->cap, PEER_CAP_RESTART_ADV)
&& (CHECK_FLAG(p->cap, PEER_CAP_RESTART_RCV))
&& (peer_established(p))) {
-
- if (CHECK_FLAG(p->cap, PEER_CAP_RESTART_BIT_RCV))
- rbit_status = true;
- else
- rbit_status = false;
+ rbit = CHECK_FLAG(p->cap, PEER_CAP_GRACEFUL_RESTART_R_BIT_RCV);
+ nbit = CHECK_FLAG(p->cap, PEER_CAP_GRACEFUL_RESTART_N_BIT_RCV);
}
- if (rbit_status) {
- if (use_json)
- json_object_boolean_true_add(json, "rBit");
- else
- vty_out(vty, "True\n");
+ if (use_json) {
+ json_object_boolean_add(json, "rBit", rbit);
+ json_object_boolean_add(json, "nBit", nbit);
} else {
- if (use_json)
- json_object_boolean_false_add(json, "rBit");
- else
- vty_out(vty, "False\n");
+ vty_out(vty, "\n R bit: %s", rbit ? "True" : "False");
+ vty_out(vty, "\n N bit: %s\n", nbit ? "True" : "False");
}
}