]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ospfd: Fixing "show ip ospf neighbour <nbrid>" command
authorrgirada <rgirada@vmware.com>
Sun, 19 Jun 2022 18:04:39 +0000 (11:04 -0700)
committerrgirada <rgirada@vmware.com>
Wed, 22 Jun 2022 15:40:24 +0000 (08:40 -0700)
Description:
"show ip ospf neighbour [nbrid] [json]" is expected to give brief output
of the specific neighbour. But it gives the detailed output without
the detail keyword.
"show ip ospf neighbour [nbrid] [deatil] [json]" command is failed to
fetch the ecpected o/p. Corrected it.

Ex o/p:
frr(config-if)# do show ip ospf  neighbor

Neighbor ID     Pri State           Up Time         Dead Time Address         Interface                        RXmtL RqstL DBsmL
8.8.8.8           1 Full/DR         17m03s            31.192s 20.1.1.194      ens192:20.1.1.220                    0     0     0
30.1.1.100        1 Full/DR         56.229s           32.000s 30.1.1.100      ens224:30.1.1.220                    0     0     0

frr(config-if)#
frr(config-if)#
frr(config-if)# do show ip ospf  neighbor 8.8.8.8
Neighbor 8.8.8.8, interface address 20.1.1.194
In the area 0.0.0.0 via interface ens192
Neighbor priority is 1, State is Full/DR, 6 state changes
Most recent state change statistics:
  Progressive change 17m18s ago
DR is 20.1.1.194, BDR is 20.1.1.220
Options 2 *|-|-|-|-|-|E|-
Dead timer due in 35.833s
Database Summary List 0
Link State Request List 0
Link State Retransmission List 0
Thread Inactivity Timer on
Thread Database Description Retransmision off
Thread Link State Request Retransmission on
Thread Link State Update Retransmission on

Graceful restart Helper info:
  Graceful Restart HELPER Status : None

frr(config-if)# do show ip ospf  neighbor 8.8.8.8 detail
No such interface.
frr(config-if)# do show ip ospf  neighbor 8.8.8.8 detail json
{}
frr(config-if)#

Signed-off-by: Rajesh Girada <rgirada@vmware.com>
doc/user/ospfd.rst
ospfd/ospf_vty.c

index e438d04e932add40058922f0835a20ea39d2caed..26810bd8830de88566c785bf3651b2e4376f8d2c 100644 (file)
@@ -798,6 +798,8 @@ Showing Information
 
 .. clicmd:: show ip ospf neighbor detail [json]
 
+.. clicmd:: show ip ospf neighbor A.B.C.D [detail] [json]
+
 .. clicmd:: show ip ospf neighbor INTERFACE detail [json]
 
    Display lsa information of LSDB.
index ee665cd25cd38d1d15a6290e0a9502c8194f1a8b..747643465c7096ff08dd93521819ae6374c8b40d 100644 (file)
@@ -4335,190 +4335,159 @@ static void show_ip_ospf_neighbour_header(struct vty *vty)
                "Address", "Interface", "RXmtL", "RqstL", "DBsmL");
 }
 
-static void show_ip_ospf_neighbor_sub(struct vty *vty,
-                                     struct ospf_interface *oi,
-                                     json_object *json, bool use_json)
+static void show_ip_ospf_neighbour_brief(struct vty *vty,
+                                        struct ospf_neighbor *nbr,
+                                        struct ospf_neighbor *prev_nbr,
+                                        json_object *json, bool use_json)
 {
-       struct route_node *rn;
-       struct ospf_neighbor *nbr, *prev_nbr = NULL;
        char msgbuf[16];
        char timebuf[OSPF_TIME_DUMP_SIZE];
        json_object *json_neighbor = NULL, *json_neigh_array = NULL;
-       struct timeval res = {.tv_sec = 0, .tv_usec = 0};
+       struct timeval res;
        long time_val = 0;
        char uptime[OSPF_TIME_DUMP_SIZE];
 
-       for (rn = route_top(oi->nbrs); rn; rn = route_next(rn)) {
-               if ((nbr = rn->info)) {
-                       /* Do not show myself. */
-                       if (nbr == oi->nbr_self)
-                               continue;
-                       /* Down state is not shown. */
-                       if (nbr->state == NSM_Down)
-                               continue;
-
-                       if (nbr->ts_last_progress.tv_sec
-                           || nbr->ts_last_progress.tv_usec)
-                               time_val = monotime_since(
-                                                  &nbr->ts_last_progress, &res)
-                                          / 1000LL;
+       if (nbr->ts_last_progress.tv_sec || nbr->ts_last_progress.tv_usec)
+               time_val =
+                       monotime_since(&nbr->ts_last_progress, &res) / 1000LL;
 
-                       if (use_json) {
-                               char neigh_str[INET_ADDRSTRLEN];
+       if (use_json) {
+               char neigh_str[INET_ADDRSTRLEN];
 
-                               if (prev_nbr
-                                   && !IPV4_ADDR_SAME(&prev_nbr->src,
-                                                      &nbr->src)) {
-                                       /* Start new neigh list */
-                                       json_neigh_array = NULL;
-                               }
+               if (prev_nbr && !IPV4_ADDR_SAME(&prev_nbr->src, &nbr->src)) {
+                       /* Start new neigh list */
+                       json_neigh_array = NULL;
+               }
 
-                               if (nbr->state == NSM_Attempt
-                                   && nbr->router_id.s_addr == INADDR_ANY)
-                                       strlcpy(neigh_str, "neighbor",
-                                               sizeof(neigh_str));
-                               else
-                                       inet_ntop(AF_INET, &nbr->router_id,
-                                                 neigh_str, sizeof(neigh_str));
+               if (nbr->state == NSM_Attempt &&
+                   nbr->router_id.s_addr == INADDR_ANY)
+                       strlcpy(neigh_str, "neighbor", sizeof(neigh_str));
+               else
+                       inet_ntop(AF_INET, &nbr->router_id, neigh_str,
+                                 sizeof(neigh_str));
 
-                               json_object_object_get_ex(json, neigh_str,
-                                                         &json_neigh_array);
+               json_object_object_get_ex(json, neigh_str, &json_neigh_array);
 
-                               if (!json_neigh_array) {
-                                       json_neigh_array =
-                                               json_object_new_array();
-                                       json_object_object_add(
-                                               json, neigh_str,
-                                               json_neigh_array);
-                               }
+               if (!json_neigh_array) {
+                       json_neigh_array = json_object_new_array();
+                       json_object_object_add(json, neigh_str,
+                                              json_neigh_array);
+               }
 
-                               json_neighbor = json_object_new_object();
+               json_neighbor = json_object_new_object();
 
-                               ospf_nbr_ism_state_message(nbr, msgbuf,
-                                                          sizeof(msgbuf));
+               ospf_nbr_ism_state_message(nbr, msgbuf, sizeof(msgbuf));
 #if CONFDATE > 20230321
-CPP_NOTICE("Remove show_ip_ospf_neighbor_sub() JSON keys: priority, state, deadTimeMsecs, address, retransmitCounter, requestCounter, dbSummaryCounter")
+               CPP_NOTICE(
+                       "Remove show_ip_ospf_neighbor_sub() JSON keys: priority, state, deadTimeMsecs, address, retransmitCounter, requestCounter, dbSummaryCounter")
 #endif
-                               json_object_int_add(json_neighbor, "priority",
-                                                   nbr->priority);
-                               json_object_string_add(json_neighbor, "state",
-                                                      msgbuf);
-                               json_object_int_add(json_neighbor,
-                                                   "nbrPriority",
-                                                   nbr->priority);
-                               json_object_string_add(json_neighbor,
-                                                      "nbrState", msgbuf);
+               json_object_int_add(json_neighbor, "priority", nbr->priority);
+               json_object_string_add(json_neighbor, "state", msgbuf);
+               json_object_int_add(json_neighbor, "nbrPriority",
+                                   nbr->priority);
+               json_object_string_add(json_neighbor, "nbrState", msgbuf);
 
-                               json_object_string_add(
-                                       json_neighbor, "converged",
-                                       lookup_msg(ospf_nsm_state_msg,
-                                                  nbr->state, NULL));
-                               json_object_string_add(
-                                       json_neighbor, "role",
-                                       lookup_msg(ospf_ism_state_msg,
-                                                  ospf_nbr_ism_state(nbr),
-                                                  NULL));
-
-                               if (nbr->t_inactivity) {
-                                       long time_store;
-
-                                       time_store = monotime_until(
-                                                            &nbr->t_inactivity
-                                                                     ->u.sands,
-                                                            NULL)
-                                                    / 1000LL;
-                                       json_object_int_add(json_neighbor,
-                                                           "upTimeInMsec",
-                                                           time_val);
-                                       json_object_int_add(json_neighbor,
-                                                           "deadTimeMsecs",
-                                                           time_store);
-                                       json_object_int_add(
-                                               json_neighbor,
-                                               "routerDeadIntervalTimerDueMsec",
-                                               time_store);
-                                       json_object_string_add(
-                                               json_neighbor, "upTime",
-                                               ospf_timeval_dump(
-                                                       &res, uptime,
-                                                       sizeof(uptime)));
-                                       json_object_string_add(
-                                               json_neighbor, "deadTime",
-                                               ospf_timer_dump(
-                                                       nbr->t_inactivity,
-                                                       timebuf,
-                                                       sizeof(timebuf)));
-                               } else {
-                                       json_object_string_add(json_neighbor,
-                                                              "deadTimeMsecs",
-                                                              "inactive");
-                                       json_object_string_add(
-                                               json_neighbor,
-                                               "routerDeadIntervalTimerDueMsec",
-                                               "inactive");
-                               }
-                               json_object_string_addf(json_neighbor,
-                                                       "address", "%pI4",
-                                                       &nbr->src);
-                               json_object_string_addf(json_neighbor,
-                                                       "ifaceAddress", "%pI4",
-                                                       &nbr->src);
-                               json_object_string_add(json_neighbor,
-                                                      "ifaceName",
-                                                      IF_NAME(oi));
-                               json_object_int_add(
-                                       json_neighbor, "retransmitCounter",
-                                       ospf_ls_retransmit_count(nbr));
-                               json_object_int_add(
-                                       json_neighbor,
-                                       "linkStateRetransmissionListCounter",
-                                       ospf_ls_retransmit_count(nbr));
-                               json_object_int_add(json_neighbor,
-                                                   "requestCounter",
-                                                   ospf_ls_request_count(nbr));
-                               json_object_int_add(
-                                       json_neighbor,
-                                       "linkStateRequestListCounter",
-                                       ospf_ls_request_count(nbr));
-                               json_object_int_add(json_neighbor,
-                                                   "dbSummaryCounter",
-                                                   ospf_db_summary_count(nbr));
-                               json_object_int_add(
-                                       json_neighbor,
-                                       "databaseSummaryListCounter",
-                                       ospf_db_summary_count(nbr));
+               json_object_string_add(
+                       json_neighbor, "converged",
+                       lookup_msg(ospf_nsm_state_msg, nbr->state, NULL));
+               json_object_string_add(json_neighbor, "role",
+                                      lookup_msg(ospf_ism_state_msg,
+                                                 ospf_nbr_ism_state(nbr),
+                                                 NULL));
+               if (nbr->t_inactivity) {
+                       long time_store;
 
-                               json_object_array_add(json_neigh_array,
-                                                     json_neighbor);
-                       } else {
-                               ospf_nbr_ism_state_message(nbr, msgbuf,
-                                                          sizeof(msgbuf));
+                       time_store = monotime_until(&nbr->t_inactivity->u.sands,
+                                                   NULL) /
+                                    1000LL;
+                       json_object_int_add(json_neighbor, "upTimeInMsec",
+                                           time_val);
+                       json_object_int_add(json_neighbor, "deadTimeMsecs",
+                                           time_store);
+                       json_object_int_add(json_neighbor,
+                                           "routerDeadIntervalTimerDueMsec",
+                                           time_store);
+                       json_object_string_add(
+                               json_neighbor, "upTime",
+                               ospf_timeval_dump(&res, uptime,
+                                                 sizeof(uptime)));
+                       json_object_string_add(
+                               json_neighbor, "deadTime",
+                               ospf_timer_dump(nbr->t_inactivity, timebuf,
+                                               sizeof(timebuf)));
+               } else {
+                       json_object_string_add(json_neighbor, "deadTimeMsecs",
+                                              "inactive");
+                       json_object_string_add(json_neighbor,
+                                              "routerDeadIntervalTimerDueMsec",
+                                              "inactive");
+               }
+               json_object_string_addf(json_neighbor, "address", "%pI4",
+                                       &nbr->src);
+               json_object_string_addf(json_neighbor, "ifaceAddress", "%pI4",
+                                       &nbr->src);
+               json_object_string_add(json_neighbor, "ifaceName",
+                                      IF_NAME(nbr->oi));
+               json_object_int_add(json_neighbor, "retransmitCounter",
+                                   ospf_ls_retransmit_count(nbr));
+               json_object_int_add(json_neighbor,
+                                   "linkStateRetransmissionListCounter",
+                                   ospf_ls_retransmit_count(nbr));
+               json_object_int_add(json_neighbor, "requestCounter",
+                                   ospf_ls_request_count(nbr));
+               json_object_int_add(json_neighbor,
+                                   "linkStateRequestListCounter",
+                                   ospf_ls_request_count(nbr));
+               json_object_int_add(json_neighbor, "dbSummaryCounter",
+                                   ospf_db_summary_count(nbr));
+               json_object_int_add(json_neighbor, "databaseSummaryListCounter",
+                                   ospf_db_summary_count(nbr));
 
-                               if (nbr->state == NSM_Attempt
-                                   && nbr->router_id.s_addr == INADDR_ANY)
-                                       vty_out(vty, "%-15s %3d %-15s ", "-",
-                                               nbr->priority, msgbuf);
-                               else
-                                       vty_out(vty, "%-15pI4 %3d %-15s ",
-                                               &nbr->router_id, nbr->priority,
-                                               msgbuf);
+               json_object_array_add(json_neigh_array, json_neighbor);
+       } else {
+               ospf_nbr_ism_state_message(nbr, msgbuf, sizeof(msgbuf));
 
-                               vty_out(vty, "%-15s ",
-                                       ospf_timeval_dump(&res, uptime,
-                                                         sizeof(uptime)));
+               if (nbr->state == NSM_Attempt &&
+                   nbr->router_id.s_addr == INADDR_ANY)
+                       vty_out(vty, "%-15s %3d %-15s ", "-", nbr->priority,
+                               msgbuf);
+               else
+                       vty_out(vty, "%-15pI4 %3d %-15s ", &nbr->router_id,
+                               nbr->priority, msgbuf);
+
+               vty_out(vty, "%-15s ",
+                       ospf_timeval_dump(&res, uptime, sizeof(uptime)));
+
+               vty_out(vty, "%9s ",
+                       ospf_timer_dump(nbr->t_inactivity, timebuf,
+                                       sizeof(timebuf)));
+               vty_out(vty, "%-15pI4 ", &nbr->src);
+               vty_out(vty, "%-32s %5ld %5ld %5d\n", IF_NAME(nbr->oi),
+                       ospf_ls_retransmit_count(nbr),
+                       ospf_ls_request_count(nbr), ospf_db_summary_count(nbr));
+       }
+}
+
+static void show_ip_ospf_neighbor_sub(struct vty *vty,
+                                     struct ospf_interface *oi,
+                                     json_object *json, bool use_json)
+{
+       struct route_node *rn;
+       struct ospf_neighbor *nbr, *prev_nbr = NULL;
+
+       for (rn = route_top(oi->nbrs); rn; rn = route_next(rn)) {
+               if ((nbr = rn->info)) {
+                       /* Do not show myself. */
+                       if (nbr == oi->nbr_self)
+                               continue;
+                       /* Down state is not shown. */
+                       if (nbr->state == NSM_Down)
+                               continue;
 
-                               vty_out(vty, "%9s ",
-                                       ospf_timer_dump(nbr->t_inactivity,
-                                                       timebuf,
-                                                       sizeof(timebuf)));
-                               vty_out(vty, "%-15pI4 ", &nbr->src);
-                               vty_out(vty, "%-32s %5ld %5ld %5d\n",
-                                       IF_NAME(oi),
-                                       ospf_ls_retransmit_count(nbr),
-                                       ospf_ls_request_count(nbr),
-                                       ospf_db_summary_count(nbr));
-                       }
                        prev_nbr = nbr;
+
+                       show_ip_ospf_neighbour_brief(vty, nbr, prev_nbr, json,
+                                                    use_json);
                }
        }
 }
@@ -5411,7 +5380,8 @@ static void show_ip_ospf_neighbor_detail_sub(struct vty *vty,
 
 static int show_ip_ospf_neighbor_id_common(struct vty *vty, struct ospf *ospf,
                                           struct in_addr *router_id,
-                                          bool use_json, uint8_t use_vrf)
+                                          bool use_json, uint8_t use_vrf,
+                                          bool is_detail)
 {
        struct listnode *node;
        struct ospf_neighbor *nbr;
@@ -5433,8 +5403,12 @@ static int show_ip_ospf_neighbor_id_common(struct vty *vty, struct ospf *ospf,
 
        for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi)) {
                if ((nbr = ospf_nbr_lookup_by_routerid(oi->nbrs, router_id))) {
-                       show_ip_ospf_neighbor_detail_sub(vty, oi, nbr, NULL,
-                                                        json, use_json);
+                       if (is_detail)
+                               show_ip_ospf_neighbor_detail_sub(
+                                       vty, oi, nbr, NULL, json, use_json);
+                       else
+                               show_ip_ospf_neighbour_brief(vty, nbr, NULL,
+                                                            json, use_json);
                }
        }
 
@@ -5446,15 +5420,13 @@ static int show_ip_ospf_neighbor_id_common(struct vty *vty, struct ospf *ospf,
        return CMD_SUCCESS;
 }
 
-DEFPY (show_ip_ospf_neighbor_id,
-       show_ip_ospf_neighbor_id_cmd,
-       "show ip ospf neighbor A.B.C.D$router_id [json$json]",
-       SHOW_STR
-       IP_STR
-       "OSPF information\n"
-       "Neighbor list\n"
-       "Neighbor ID\n"
-       JSON_STR)
+DEFPY(show_ip_ospf_neighbor_id, show_ip_ospf_neighbor_id_cmd,
+      "show ip ospf neighbor A.B.C.D$router_id [detail$detail] [json$json]",
+      SHOW_STR IP_STR
+      "OSPF information\n"
+      "Neighbor list\n"
+      "Neighbor ID\n"
+      "Detailed output\n" JSON_STR)
 {
        struct ospf *ospf;
        struct listnode *node;
@@ -5464,22 +5436,20 @@ DEFPY (show_ip_ospf_neighbor_id,
                if (!ospf->oi_running)
                        continue;
                ret = show_ip_ospf_neighbor_id_common(vty, ospf, &router_id,
-                                                     !!json, 0);
+                                                     !!json, 0, !!detail);
        }
 
        return ret;
 }
 
-DEFPY (show_ip_ospf_instance_neighbor_id,
-       show_ip_ospf_instance_neighbor_id_cmd,
-       "show ip ospf (1-65535)$instance neighbor A.B.C.D$router_id [json$json]",
-       SHOW_STR
-       IP_STR
-       "OSPF information\n"
-       "Instance ID\n"
-       "Neighbor list\n"
-       "Neighbor ID\n"
-       JSON_STR)
+DEFPY(show_ip_ospf_instance_neighbor_id, show_ip_ospf_instance_neighbor_id_cmd,
+      "show ip ospf (1-65535)$instance neighbor A.B.C.D$router_id [detail$detail] [json$json]",
+      SHOW_STR IP_STR
+      "OSPF information\n"
+      "Instance ID\n"
+      "Neighbor list\n"
+      "Neighbor ID\n"
+      "Detailed output\n" JSON_STR)
 {
        struct ospf *ospf;
 
@@ -5490,8 +5460,8 @@ DEFPY (show_ip_ospf_instance_neighbor_id,
        if (!ospf || !ospf->oi_running)
                return CMD_SUCCESS;
 
-       return show_ip_ospf_neighbor_id_common(vty, ospf, &router_id, !!json,
-                                              0);
+       return show_ip_ospf_neighbor_id_common(vty, ospf, &router_id, !!json, 0,
+                                              !!detail);
 }
 
 static int show_ip_ospf_neighbor_detail_common(struct vty *vty,