From eb4ed6e8c719ae7421df92782eb71a2abed289e5 Mon Sep 17 00:00:00 2001 From: rgirada Date: Thu, 7 Oct 2021 23:18:14 -0700 Subject: [PATCH 1/2] ospfd: Few modifications in "show ip ospf neighbor" o/p. Description: 1. Adding uptime to the 'show ip ospf neighbor' o/p. 2. Adding uptime and deadtime in string format for json consumption. Signed-off-by: Rajesh Girada --- ospfd/ospf_vty.c | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index 64d3b7a028..96c28be1b9 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -4335,9 +4335,9 @@ DEFUN (show_ip_ospf_interface_traffic, static void show_ip_ospf_neighbour_header(struct vty *vty) { - vty_out(vty, "\n%-15s %3s %-15s %9s %-15s %-32s %5s %5s %5s\n", - "Neighbor ID", "Pri", "State", "Dead Time", "Address", - "Interface", "RXmtL", "RqstL", "DBsmL"); + vty_out(vty, "\n%-15s %-3s %-15s %-15s %-9s %-15s %-32s %5s %5s %5s\n", + "Neighbor ID", "Pri", "State", "Up Time", "Dead Time", + "Address", "Interface", "RXmtL", "RqstL", "DBsmL"); } static void show_ip_ospf_neighbor_sub(struct vty *vty, @@ -4350,6 +4350,9 @@ static void show_ip_ospf_neighbor_sub(struct vty *vty, char buf[PREFIX_STRLEN]; char timebuf[OSPF_TIME_DUMP_SIZE]; json_object *json_neighbor = NULL, *json_neigh_array = NULL; + 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)) { @@ -4359,6 +4362,13 @@ static void show_ip_ospf_neighbor_sub(struct vty *vty, /* 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 (use_json) { char neigh_str[INET_ADDRSTRLEN]; @@ -4415,9 +4425,23 @@ static void show_ip_ospf_neighbor_sub(struct vty *vty, ->u.sands, NULL) / 1000LL; + json_object_int_add(json_neighbor, + "upTimeInMsec", + time_val); json_object_int_add(json_neighbor, "deadTimeMsecs", 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", @@ -4451,8 +4475,12 @@ static void show_ip_ospf_neighbor_sub(struct vty *vty, nbr->priority, msgbuf); else vty_out(vty, "%-15pI4 %3d %-15s ", - &nbr->router_id, - nbr->priority, msgbuf); + &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, From 059fd3a48a8fca175125c4e1467c4471873b6659 Mon Sep 17 00:00:00 2001 From: rgirada Date: Fri, 8 Oct 2021 00:15:48 -0700 Subject: [PATCH 2/2] ospfd: Adding apropriate ism state in ptop neighbors. Description: In PointToPoint networks, There wont be DR and BDR. But by default, All neighbours ism state is shown as DR_OTHER. Changed the nbr state format to /- (ex : FULL/-) to P2pnetworks. Signed-off-by: Rajesh Girada --- ospfd/ospf_dump.c | 29 ++++++++++++++++++++++++++--- ospfd/ospf_dump.h | 5 ++++- ospfd/ospf_snmp.c | 2 +- ospfd/ospf_vty.c | 4 ++-- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/ospfd/ospf_dump.c b/ospfd/ospf_dump.c index b1aeefcd43..fab5b7d3cc 100644 --- a/ospfd/ospf_dump.c +++ b/ospfd/ospf_dump.c @@ -127,7 +127,9 @@ const char *ospf_area_desc_string(struct ospf_area *area) return buf; } -#define OSPF_IF_STRING_MAXLEN 40 +#define OSPF_IF_STRING_MAXLEN 40 + +/* Display both nbr and ism state of the ospf neighbor.*/ const char *ospf_if_name_string(struct ospf_interface *oi) { static char buf[OSPF_IF_STRING_MAXLEN] = ""; @@ -146,6 +148,13 @@ const char *ospf_if_name_string(struct ospf_interface *oi) return buf; } +/* Display only the nbr state.*/ +void ospf_nbr_state_message(struct ospf_neighbor *nbr, char *buf, size_t size) +{ + snprintf(buf, size, "%s", + lookup_msg(ospf_nsm_state_msg, nbr->state, NULL)); +} + int ospf_nbr_ism_state(struct ospf_neighbor *nbr) { int state; @@ -161,9 +170,23 @@ int ospf_nbr_ism_state(struct ospf_neighbor *nbr) return state; } -void ospf_nbr_state_message(struct ospf_neighbor *nbr, char *buf, size_t size) +void ospf_nbr_ism_state_message(struct ospf_neighbor *nbr, char *buf, + size_t size) { - int state = ospf_nbr_ism_state(nbr); + int state; + struct ospf_interface *oi = nbr->oi; + + if (!oi) + return; + + /* network type is point-to-point */ + if (oi->type == OSPF_IFTYPE_POINTOPOINT) { + snprintf(buf, size, "%s/-", + lookup_msg(ospf_nsm_state_msg, nbr->state, NULL)); + return; + } + + state = ospf_nbr_ism_state(nbr); snprintf(buf, size, "%s/%s", lookup_msg(ospf_nsm_state_msg, nbr->state, NULL), diff --git a/ospfd/ospf_dump.h b/ospfd/ospf_dump.h index 031ec2f428..58227d038e 100644 --- a/ospfd/ospf_dump.h +++ b/ospfd/ospf_dump.h @@ -151,7 +151,10 @@ extern const char *ospf_area_name_string(struct ospf_area *); extern const char *ospf_area_desc_string(struct ospf_area *); extern const char *ospf_if_name_string(struct ospf_interface *); extern int ospf_nbr_ism_state(struct ospf_neighbor *nbr); -extern void ospf_nbr_state_message(struct ospf_neighbor *, char *, size_t); +extern void ospf_nbr_state_message(struct ospf_neighbor *nbr, char *buf, + size_t size); +extern void ospf_nbr_ism_state_message(struct ospf_neighbor *nbr, char *buf, + size_t size); extern const char *ospf_timer_dump(struct thread *, char *, size_t); extern const char *ospf_timeval_dump(struct timeval *, char *, size_t); extern void ospf_packet_dump(struct stream *); diff --git a/ospfd/ospf_snmp.c b/ospfd/ospf_snmp.c index 432f95f9dd..a1ea4e45d7 100644 --- a/ospfd/ospf_snmp.c +++ b/ospfd/ospf_snmp.c @@ -2432,7 +2432,7 @@ static void ospfTrapNbrStateChange(struct ospf_neighbor *on) oid index[sizeof(oid) * (IN_ADDR_SIZE + 1)]; char msgbuf[16]; - ospf_nbr_state_message(on, msgbuf, sizeof(msgbuf)); + ospf_nbr_ism_state_message(on, msgbuf, sizeof(msgbuf)); if (IS_DEBUG_OSPF_EVENT) zlog_info("%s: trap sent: %pI4 now %s", __func__, &on->address.u.prefix4, msgbuf); diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index 96c28be1b9..a3fb291bfc 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -4400,7 +4400,7 @@ static void show_ip_ospf_neighbor_sub(struct vty *vty, json_neighbor = json_object_new_object(); - ospf_nbr_state_message(nbr, msgbuf, 16); + ospf_nbr_ism_state_message(nbr, msgbuf, 16); json_object_int_add(json_neighbor, "priority", nbr->priority); @@ -4467,7 +4467,7 @@ static void show_ip_ospf_neighbor_sub(struct vty *vty, json_object_array_add(json_neigh_array, json_neighbor); } else { - ospf_nbr_state_message(nbr, msgbuf, 16); + ospf_nbr_ism_state_message(nbr, msgbuf, 16); if (nbr->state == NSM_Attempt && nbr->router_id.s_addr == INADDR_ANY)