diff options
| author | Dmytro Shytyi <dmytro.shytyi@6wind.com> | 2025-03-06 16:58:24 +0100 |
|---|---|---|
| committer | Dmytro Shytyi <dmytro.shytyi@6wind.com> | 2025-03-17 11:19:58 +0100 |
| commit | e6d08a89c7348d1af045b752473ad571020a8de9 (patch) | |
| tree | 268ed48940f7c8aef8f73cea5eee0a439015879d /zebra | |
| parent | 942a7c916cc35a2ab1d7da6257810e58ab001552 (diff) | |
zebra: add rtadv information output in vtysh json
Add to "show interface json" output multiple rtadv parameters.
if_dump_vty() calls => hook_call(zebra_if_extra_info, vty, ifp);
if_dump_vty_json() now do the same call, with additional parameter:
hook_call(zebra_if_extra_info, vty, json_if, ifp);
Signed-off-by: Dmytro Shytyi <dmytro.shytyi@6wind.com>
Diffstat (limited to 'zebra')
| -rw-r--r-- | zebra/interface.c | 8 | ||||
| -rw-r--r-- | zebra/interface.h | 4 | ||||
| -rw-r--r-- | zebra/rtadv.c | 61 |
3 files changed, 66 insertions, 7 deletions
diff --git a/zebra/interface.c b/zebra/interface.c index 8080ba01de..fd1ea380a5 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -40,8 +40,8 @@ DEFINE_MTYPE_STATIC(ZEBRA, ZINFO, "Zebra Interface Information"); #define ZEBRA_PTM_SUPPORT -DEFINE_HOOK(zebra_if_extra_info, (struct vty * vty, struct interface *ifp), - (vty, ifp)); +DEFINE_HOOK(zebra_if_extra_info, (struct vty * vty, json_object *json_if, struct interface *ifp), + (vty, json_if, ifp)); DEFINE_MTYPE_STATIC(ZEBRA, ZIF_DESC, "Intf desc"); @@ -2846,7 +2846,7 @@ static void if_dump_vty(struct vty *vty, struct interface *ifp) &iflp->rmt_ip, iflp->rmt_as); } - hook_call(zebra_if_extra_info, vty, ifp); + hook_call(zebra_if_extra_info, vty, NULL, ifp); if (listhead(ifp->nbr_connected)) vty_out(vty, " Neighbor address(s):\n"); @@ -3252,6 +3252,8 @@ static void if_dump_vty_json(struct vty *vty, struct interface *ifp, json_object_int_add(json_te, "neighborAsbrAs", iflp->rmt_as); } + hook_call(zebra_if_extra_info, vty, json_if, ifp); + if (listhead(ifp->nbr_connected)) { json_object *json_nbr_addrs; diff --git a/zebra/interface.h b/zebra/interface.h index 0f5c997403..5b45656bd5 100644 --- a/zebra/interface.h +++ b/zebra/interface.h @@ -223,8 +223,8 @@ struct zebra_if { char *desc; }; -DECLARE_HOOK(zebra_if_extra_info, (struct vty * vty, struct interface *ifp), - (vty, ifp)); +DECLARE_HOOK(zebra_if_extra_info, (struct vty * vty, json_object *json_if, struct interface *ifp), + (vty, json_if, ifp)); #define IS_ZEBRA_IF_VRF(ifp) \ (((struct zebra_if *)(ifp->info))->zif_type == ZEBRA_IF_VRF) diff --git a/zebra/rtadv.c b/zebra/rtadv.c index 467bcb6b16..a767bda72e 100644 --- a/zebra/rtadv.c +++ b/zebra/rtadv.c @@ -1726,7 +1726,7 @@ int rtadv_dnssl_encode(uint8_t *out, const char *in) } /* Dump interface ND information to vty. */ -static int nd_dump_vty(struct vty *vty, struct interface *ifp) +static int nd_dump_vty(struct vty *vty, json_object *json_if, struct interface *ifp) { struct zebra_if *zif; struct rtadvconf *rtadv; @@ -1735,7 +1735,7 @@ static int nd_dump_vty(struct vty *vty, struct interface *ifp) zif = (struct zebra_if *)ifp->info; rtadv = &zif->rtadv; - if (rtadv->AdvSendAdvertisements) { + if (!json_if && rtadv->AdvSendAdvertisements) { vty_out(vty, " ND advertised reachable time is %d milliseconds\n", rtadv->AdvReachableTime); @@ -1792,6 +1792,63 @@ static int nd_dump_vty(struct vty *vty, struct interface *ifp) vty_out(vty, " ND router advertisements with Adv. Interval option.\n"); } + + if (json_if && rtadv->AdvSendAdvertisements) { + json_object_int_add(json_if, "ndAdvertisedReachableTimeMsecs", + rtadv->AdvReachableTime); + json_object_int_add(json_if, "ndAdvertisedRetransmitIntervalMsecs", + rtadv->AdvRetransTimer); + json_object_int_add(json_if, "ndAdvertisedHopCountLimitHops", rtadv->AdvCurHopLimit); + json_object_int_add(json_if, "ndRouterAdvertisementsSent", zif->ra_sent); + json_object_int_add(json_if, "ndRouterAdvertisementsRcvd", zif->ra_rcvd); + + interval = rtadv->MaxRtrAdvInterval; + if (interval % 1000) + json_object_int_add(json_if, "ndRouterAdvertisementsIntervalMsecs", + interval); + else + json_object_int_add(json_if, "ndRouterAdvertisementsIntervalSecs", + interval / 1000); + + json_object_boolean_add(json_if, "ndRouterAdvertisementsDoNotUseFastRetransmit", + !rtadv->UseFastRexmit); + + if (rtadv->AdvDefaultLifetime != -1) + json_object_int_add(json_if, "ndRouterAdvertisementsLiveForSecs", + rtadv->AdvDefaultLifetime); + else + json_object_boolean_add(json_if, + "ndRouterAdvertisementsLifetimeTracksRaInterval", + true); + + json_object_string_add(json_if, "ndRouterAdvertisementDefaultRouterPreference", + rtadv_pref_strs[rtadv->DefaultPreference]); + + if (rtadv->AdvManagedFlag) + json_object_boolean_add(json_if, "hostsUseDhcpToObtainRoutableAddresses", + true); + else + json_object_boolean_add(json_if, "hostsUseStatelessAutoconfigForAddresses", + true); + + if (rtadv->AdvHomeAgentFlag) { + json_object_boolean_add(json_if, + "ndRouterAdvertisementsWithHomeAgentFlagBit", true); + if (rtadv->HomeAgentLifetime != -1) + json_object_int_add(json_if, "homeAgentLifetimeSecs", + rtadv->HomeAgentLifetime); + else + json_object_boolean_add(json_if, + "homeAgentLifetimeTracksRaLifetime", true); + + json_object_int_add(json_if, "homeAgentPreference", + rtadv->HomeAgentLifetime); + } + if (rtadv->AdvIntervalOption) + json_object_boolean_add(json_if, + "ndRouterAdvertisementsWithAdvIntervalOption", true); + } + return 0; } |
