]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_vty.c
bgpd: Implement CEASE/Hard Reset notification
[mirror_frr.git] / bgpd / bgp_vty.c
index 2aa77576a1ab70df48e2211af32e55b775cc1e61..0cbb341ff3910afe7e1ed7c1024ce9c3fdc0fde8 100644 (file)
@@ -10052,6 +10052,9 @@ static void bgp_show_peer_reset(struct vty * vty, struct peer *peer,
                        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
@@ -10085,11 +10088,16 @@ static void bgp_show_peer_reset(struct vty * vty, struct peer *peer,
                        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]);
@@ -11246,36 +11254,27 @@ static void bgp_show_peer_afi_orf_cap(struct vty *vty, struct peer *p,
        }
 }
 
-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");
        }
 }