From e70063854b08e8e73a81c9f4e88ece4f098edf1f Mon Sep 17 00:00:00 2001
From: Donald Sharp <sharpd@nvidia.com>
Date: Thu, 5 Sep 2024 09:11:04 -0400
Subject: [PATCH] zebra: Don't display the vrf if not using namespace based
 vrfs

Currently when doing a `show ip route table XXXX`, zebra is displaying
the current default vrf as the vrf we are in.  We are displaying a
table not a vrf.  This is only true if you are not using namespace
based vrf's, so modify the output to display accordingly.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
---
 zebra/table_manager.h |  1 +
 zebra/zebra_vrf.c     |  2 ++
 zebra/zebra_vty.c     | 35 ++++++++++++++++++++++++++++++-----
 3 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/zebra/table_manager.h b/zebra/table_manager.h
index 21691994cba6..f16efdd6266b 100644
--- a/zebra/table_manager.h
+++ b/zebra/table_manager.h
@@ -24,6 +24,7 @@ extern "C" {
 #if !defined(GNU_LINUX)
 /* BSD systems
  */
+#define RT_TABLE_ID_MAIN 0
 #else
 /* Linux Systems
  */
diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c
index e464e47b1f0c..2b3cfc876664 100644
--- a/zebra/zebra_vrf.c
+++ b/zebra/zebra_vrf.c
@@ -398,6 +398,7 @@ vrf_id_t zebra_vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id)
 
 	RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) {
 		zvrf = vrf->info;
+
 		if (zvrf == NULL)
 			continue;
 		/* case vrf with netns : match the netnsid */
@@ -408,6 +409,7 @@ vrf_id_t zebra_vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id)
 			/* VRF is VRF_BACKEND_VRF_LITE */
 			if (zvrf->table_id != table_id)
 				continue;
+
 			return zvrf_id(zvrf);
 		}
 	}
diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c
index 3bf20ff42e7c..9c9ed428fedc 100644
--- a/zebra/zebra_vty.c
+++ b/zebra/zebra_vty.c
@@ -942,11 +942,36 @@ static void do_show_route_helper(struct vty *vty, struct zebra_vrf *zvrf,
 					if (!tableid)
 						vty_out(vty, "VRF %s:\n",
 							zvrf_name(zvrf));
-					else
-						vty_out(vty,
-							"VRF %s table %u:\n",
-							zvrf_name(zvrf),
-							tableid);
+					else {
+						if (vrf_is_backend_netns())
+							vty_out(vty,
+								"VRF %s table %u:\n",
+								zvrf_name(zvrf),
+								tableid);
+						else {
+							vrf_id_t vrf = zebra_vrf_lookup_by_table(
+								tableid,
+								zvrf->zns->ns_id);
+
+							if (vrf == VRF_DEFAULT &&
+							    tableid !=
+								    RT_TABLE_ID_MAIN)
+								vty_out(vty,
+									"table %u:\n",
+									tableid);
+							else {
+								struct zebra_vrf *zvrf2 =
+									zebra_vrf_lookup_by_id(
+										vrf);
+
+								vty_out(vty,
+									"VRF %s table %u:\n",
+									zvrf_name(
+										zvrf2),
+									tableid);
+							}
+						}
+					}
 				}
 				ctx->header_done = true;
 				first = 0;