ospfd: fix display of plain-text data on "show ... json" commands

Add a 'json' parameter to the 'show_opaque_info' callback definition,
and update all instances of that callback to not display plain-text
data when the user requested JSON data.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
This commit is contained in:
Renato Westphal 2021-10-07 21:06:01 -03:00
parent a792fa7b15
commit 3e63092b83
8 changed files with 51 additions and 16 deletions

View file

@ -2059,7 +2059,8 @@ void ospf_apiserver_nsm_change(struct ospf_neighbor *nbr, int old_status)
} }
} }
void ospf_apiserver_show_info(struct vty *vty, struct ospf_lsa *lsa) void ospf_apiserver_show_info(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa)
{ {
struct opaque_lsa { struct opaque_lsa {
struct lsa_header header; struct lsa_header header;
@ -2070,6 +2071,9 @@ void ospf_apiserver_show_info(struct vty *vty, struct ospf_lsa *lsa)
struct opaque_lsa *olsa; struct opaque_lsa *olsa;
int opaquelen; int opaquelen;
if (json)
return;
olsa = (struct opaque_lsa *)lsa->data; olsa = (struct opaque_lsa *)lsa->data;
if (VALID_OPAQUE_INFO_LEN(lsa->data)) if (VALID_OPAQUE_INFO_LEN(lsa->data))

View file

@ -182,7 +182,8 @@ extern void ospf_apiserver_nsm_change(struct ospf_neighbor *nbr,
extern void ospf_apiserver_config_write_router(struct vty *vty); extern void ospf_apiserver_config_write_router(struct vty *vty);
extern void ospf_apiserver_config_write_if(struct vty *vty, extern void ospf_apiserver_config_write_if(struct vty *vty,
struct interface *ifp); struct interface *ifp);
extern void ospf_apiserver_show_info(struct vty *vty, struct ospf_lsa *lsa); extern void ospf_apiserver_show_info(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa);
extern int ospf_ospf_apiserver_lsa_originator(void *arg); extern int ospf_ospf_apiserver_lsa_originator(void *arg);
extern struct ospf_lsa *ospf_apiserver_lsa_refresher(struct ospf_lsa *lsa); extern struct ospf_lsa *ospf_apiserver_lsa_refresher(struct ospf_lsa *lsa);
extern void ospf_apiserver_flush_opaque_lsa(struct ospf_apiserver *apiserv, extern void ospf_apiserver_flush_opaque_lsa(struct ospf_apiserver *apiserv,

View file

@ -80,7 +80,8 @@ static struct ospf_ext_lp OspfEXT;
*/ */
/* Extended Prefix Opaque LSA related callback functions */ /* Extended Prefix Opaque LSA related callback functions */
static void ospf_ext_pref_show_info(struct vty *vty, struct ospf_lsa *lsa); static void ospf_ext_pref_show_info(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa);
static int ospf_ext_pref_lsa_originate(void *arg); static int ospf_ext_pref_lsa_originate(void *arg);
static struct ospf_lsa *ospf_ext_pref_lsa_refresh(struct ospf_lsa *lsa); static struct ospf_lsa *ospf_ext_pref_lsa_refresh(struct ospf_lsa *lsa);
static void ospf_ext_pref_lsa_schedule(struct ext_itf *exti, static void ospf_ext_pref_lsa_schedule(struct ext_itf *exti,
@ -90,7 +91,8 @@ static int ospf_ext_link_new_if(struct interface *ifp);
static int ospf_ext_link_del_if(struct interface *ifp); static int ospf_ext_link_del_if(struct interface *ifp);
static void ospf_ext_ism_change(struct ospf_interface *oi, int old_status); static void ospf_ext_ism_change(struct ospf_interface *oi, int old_status);
static void ospf_ext_link_nsm_change(struct ospf_neighbor *nbr, int old_status); static void ospf_ext_link_nsm_change(struct ospf_neighbor *nbr, int old_status);
static void ospf_ext_link_show_info(struct vty *vty, struct ospf_lsa *lsa); static void ospf_ext_link_show_info(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa);
static int ospf_ext_link_lsa_originate(void *arg); static int ospf_ext_link_lsa_originate(void *arg);
static struct ospf_lsa *ospf_ext_link_lsa_refresh(struct ospf_lsa *lsa); static struct ospf_lsa *ospf_ext_link_lsa_refresh(struct ospf_lsa *lsa);
static void ospf_ext_link_lsa_schedule(struct ext_itf *exti, static void ospf_ext_link_lsa_schedule(struct ext_itf *exti,
@ -1846,12 +1848,16 @@ static uint16_t show_vty_link_info(struct vty *vty, struct tlv_header *ext,
} }
/* Extended Link TLVs */ /* Extended Link TLVs */
static void ospf_ext_link_show_info(struct vty *vty, struct ospf_lsa *lsa) static void ospf_ext_link_show_info(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa)
{ {
struct lsa_header *lsah = lsa->data; struct lsa_header *lsah = lsa->data;
struct tlv_header *tlvh; struct tlv_header *tlvh;
uint16_t length = 0, sum = 0; uint16_t length = 0, sum = 0;
if (json)
return;
/* Initialize TLV browsing */ /* Initialize TLV browsing */
length = lsa->size - OSPF_LSA_HEADER_SIZE; length = lsa->size - OSPF_LSA_HEADER_SIZE;
@ -1932,12 +1938,16 @@ static uint16_t show_vty_pref_info(struct vty *vty, struct tlv_header *ext,
} }
/* Extended Prefix TLVs */ /* Extended Prefix TLVs */
static void ospf_ext_pref_show_info(struct vty *vty, struct ospf_lsa *lsa) static void ospf_ext_pref_show_info(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa)
{ {
struct lsa_header *lsah = lsa->data; struct lsa_header *lsah = lsa->data;
struct tlv_header *tlvh; struct tlv_header *tlvh;
uint16_t length = 0, sum = 0; uint16_t length = 0, sum = 0;
if (json)
return;
/* Initialize TLV browsing */ /* Initialize TLV browsing */
length = lsa->size - OSPF_LSA_HEADER_SIZE; length = lsa->size - OSPF_LSA_HEADER_SIZE;

View file

@ -75,7 +75,8 @@ static const char * const ospf_rejected_reason_desc[] = {
"Router is in the process of graceful restart", "Router is in the process of graceful restart",
}; };
static void show_ospf_grace_lsa_info(struct vty *vty, struct ospf_lsa *lsa); static void show_ospf_grace_lsa_info(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa);
static bool ospf_check_change_in_rxmt_list(struct ospf_neighbor *nbr); static bool ospf_check_change_in_rxmt_list(struct ospf_neighbor *nbr);
static unsigned int ospf_enable_rtr_hash_key(const void *data) static unsigned int ospf_enable_rtr_hash_key(const void *data)
@ -1012,7 +1013,8 @@ void ospf_gr_helper_set_supported_planned_only_restart(struct ospf *ospf,
* Returns: * Returns:
* Nothing. * Nothing.
*/ */
static void show_ospf_grace_lsa_info(struct vty *vty, struct ospf_lsa *lsa) static void show_ospf_grace_lsa_info(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa)
{ {
struct lsa_header *lsah = NULL; struct lsa_header *lsah = NULL;
struct tlv_header *tlvh = NULL; struct tlv_header *tlvh = NULL;
@ -1022,6 +1024,9 @@ static void show_ospf_grace_lsa_info(struct vty *vty, struct ospf_lsa *lsa)
uint16_t length = 0; uint16_t length = 0;
int sum = 0; int sum = 0;
if (json)
return;
lsah = (struct lsa_header *)lsa->data; lsah = (struct lsa_header *)lsa->data;
if (lsa->size <= OSPF_LSA_HEADER_SIZE) { if (lsa->size <= OSPF_LSA_HEADER_SIZE) {

View file

@ -274,7 +274,8 @@ struct ospf_opaque_functab {
void (*config_write_router)(struct vty *vty); void (*config_write_router)(struct vty *vty);
void (*config_write_if)(struct vty *vty, struct interface *ifp); void (*config_write_if)(struct vty *vty, struct interface *ifp);
void (*config_write_debug)(struct vty *vty); void (*config_write_debug)(struct vty *vty);
void (*show_opaque_info)(struct vty *vty, struct ospf_lsa *lsa); void (*show_opaque_info)(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa);
int (*lsa_originator)(void *arg); int (*lsa_originator)(void *arg);
struct ospf_lsa *(*lsa_refresher)(struct ospf_lsa *lsa); struct ospf_lsa *(*lsa_refresher)(struct ospf_lsa *lsa);
int (*new_lsa_hook)(struct ospf_lsa *lsa); int (*new_lsa_hook)(struct ospf_lsa *lsa);
@ -373,7 +374,8 @@ int ospf_register_opaque_functab(
void (*config_write_router)(struct vty *vty), void (*config_write_router)(struct vty *vty),
void (*config_write_if)(struct vty *vty, struct interface *ifp), void (*config_write_if)(struct vty *vty, struct interface *ifp),
void (*config_write_debug)(struct vty *vty), void (*config_write_debug)(struct vty *vty),
void (*show_opaque_info)(struct vty *vty, struct ospf_lsa *lsa), void (*show_opaque_info)(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa),
int (*lsa_originator)(void *arg), int (*lsa_originator)(void *arg),
struct ospf_lsa *(*lsa_refresher)(struct ospf_lsa *lsa), struct ospf_lsa *(*lsa_refresher)(struct ospf_lsa *lsa),
int (*new_lsa_hook)(struct ospf_lsa *lsa), int (*new_lsa_hook)(struct ospf_lsa *lsa),
@ -1207,7 +1209,7 @@ void show_opaque_info_detail(struct vty *vty, struct ospf_lsa *lsa,
/* Call individual output functions. */ /* Call individual output functions. */
if ((functab = ospf_opaque_functab_lookup(lsa)) != NULL) if ((functab = ospf_opaque_functab_lookup(lsa)) != NULL)
if (functab->show_opaque_info != NULL) if (functab->show_opaque_info != NULL)
(*functab->show_opaque_info)(vty, lsa); (*functab->show_opaque_info)(vty, json, lsa);
return; return;
} }

View file

@ -136,7 +136,8 @@ extern int ospf_register_opaque_functab(
void (*config_write_router)(struct vty *vty), void (*config_write_router)(struct vty *vty),
void (*config_write_if)(struct vty *vty, struct interface *ifp), void (*config_write_if)(struct vty *vty, struct interface *ifp),
void (*config_write_debug)(struct vty *vty), void (*config_write_debug)(struct vty *vty),
void (*show_opaque_info)(struct vty *vty, struct ospf_lsa *lsa), void (*show_opaque_info)(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa),
int (*lsa_originator)(void *arg), int (*lsa_originator)(void *arg),
struct ospf_lsa *(*lsa_refresher)(struct ospf_lsa *lsa), struct ospf_lsa *(*lsa_refresher)(struct ospf_lsa *lsa),
int (*new_lsa_hook)(struct ospf_lsa *lsa), int (*new_lsa_hook)(struct ospf_lsa *lsa),

View file

@ -73,7 +73,9 @@ static struct ospf_router_info OspfRI;
static void ospf_router_info_ism_change(struct ospf_interface *oi, static void ospf_router_info_ism_change(struct ospf_interface *oi,
int old_status); int old_status);
static void ospf_router_info_config_write_router(struct vty *vty); static void ospf_router_info_config_write_router(struct vty *vty);
static void ospf_router_info_show_info(struct vty *vty, struct ospf_lsa *lsa); static void ospf_router_info_show_info(struct vty *vty,
struct json_object *json,
struct ospf_lsa *lsa);
static int ospf_router_info_lsa_originate(void *arg); static int ospf_router_info_lsa_originate(void *arg);
static struct ospf_lsa *ospf_router_info_lsa_refresh(struct ospf_lsa *lsa); static struct ospf_lsa *ospf_router_info_lsa_refresh(struct ospf_lsa *lsa);
static void ospf_router_info_lsa_schedule(struct ospf_ri_area_info *ai, static void ospf_router_info_lsa_schedule(struct ospf_ri_area_info *ai,
@ -1552,12 +1554,17 @@ static uint16_t show_vty_sr_msd(struct vty *vty, struct tlv_header *tlvh)
return TLV_SIZE(tlvh); return TLV_SIZE(tlvh);
} }
static void ospf_router_info_show_info(struct vty *vty, struct ospf_lsa *lsa) static void ospf_router_info_show_info(struct vty *vty,
struct json_object *json,
struct ospf_lsa *lsa)
{ {
struct lsa_header *lsah = lsa->data; struct lsa_header *lsah = lsa->data;
struct tlv_header *tlvh; struct tlv_header *tlvh;
uint16_t length = 0, sum = 0; uint16_t length = 0, sum = 0;
if (json)
return;
/* Initialize TLV browsing */ /* Initialize TLV browsing */
length = lsa->size - OSPF_LSA_HEADER_SIZE; length = lsa->size - OSPF_LSA_HEADER_SIZE;

View file

@ -87,7 +87,8 @@ static int ospf_mpls_te_del_if(struct interface *ifp);
static void ospf_mpls_te_ism_change(struct ospf_interface *oi, int old_status); static void ospf_mpls_te_ism_change(struct ospf_interface *oi, int old_status);
static void ospf_mpls_te_nsm_change(struct ospf_neighbor *nbr, int old_status); static void ospf_mpls_te_nsm_change(struct ospf_neighbor *nbr, int old_status);
static void ospf_mpls_te_config_write_router(struct vty *vty); static void ospf_mpls_te_config_write_router(struct vty *vty);
static void ospf_mpls_te_show_info(struct vty *vty, struct ospf_lsa *lsa); static void ospf_mpls_te_show_info(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa);
static int ospf_mpls_te_lsa_originate_area(void *arg); static int ospf_mpls_te_lsa_originate_area(void *arg);
static int ospf_mpls_te_lsa_inter_as_as(void *arg); static int ospf_mpls_te_lsa_inter_as_as(void *arg);
static int ospf_mpls_te_lsa_inter_as_area(void *arg); static int ospf_mpls_te_lsa_inter_as_area(void *arg);
@ -3783,7 +3784,8 @@ static uint16_t ospf_mpls_te_show_link_subtlv(struct vty *vty,
return sum; return sum;
} }
static void ospf_mpls_te_show_info(struct vty *vty, struct ospf_lsa *lsa) static void ospf_mpls_te_show_info(struct vty *vty, struct json_object *json,
struct ospf_lsa *lsa)
{ {
struct lsa_header *lsah = lsa->data; struct lsa_header *lsah = lsa->data;
struct tlv_header *tlvh, *next; struct tlv_header *tlvh, *next;
@ -3791,6 +3793,9 @@ static void ospf_mpls_te_show_info(struct vty *vty, struct ospf_lsa *lsa)
uint16_t (*subfunc)(struct vty * vty, struct tlv_header * tlvh, uint16_t (*subfunc)(struct vty * vty, struct tlv_header * tlvh,
uint16_t subtotal, uint16_t total) = NULL; uint16_t subtotal, uint16_t total) = NULL;
if (json)
return;
sum = 0; sum = 0;
total = lsa->size - OSPF_LSA_HEADER_SIZE; total = lsa->size - OSPF_LSA_HEADER_SIZE;