summaryrefslogtreecommitdiff
path: root/packages/frr/patches/0001-ospfd-Support-show-advertise-router-in-show-ip-ospf-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frr/patches/0001-ospfd-Support-show-advertise-router-in-show-ip-ospf-.patch')
-rw-r--r--packages/frr/patches/0001-ospfd-Support-show-advertise-router-in-show-ip-ospf-.patch232
1 files changed, 232 insertions, 0 deletions
diff --git a/packages/frr/patches/0001-ospfd-Support-show-advertise-router-in-show-ip-ospf-.patch b/packages/frr/patches/0001-ospfd-Support-show-advertise-router-in-show-ip-ospf-.patch
new file mode 100644
index 00000000..d759c8e6
--- /dev/null
+++ b/packages/frr/patches/0001-ospfd-Support-show-advertise-router-in-show-ip-ospf-.patch
@@ -0,0 +1,232 @@
+From fa263896c413f0a31425743a38d426dc3cfd659f Mon Sep 17 00:00:00 2001
+From: Zhiyuan Wan <h@iloli.bid>
+Date: Wed, 29 Mar 2023 23:05:20 +0800
+Subject: [PATCH 1/3] ospfd: Support show advertise router in 'show ip ospf
+ route' command
+
+Users can now use 'show ip ospf route [detail]' command to show the
+originator of each OSPF route item.
+
+Signed-off-by: Zhiyuan Wan <h@iloli.bid>
+---
+ doc/user/ospfd.rst | 7 +++---
+ ospfd/ospf_vty.c | 56 ++++++++++++++++++++++++++++++++++++----------
+ 2 files changed, 48 insertions(+), 15 deletions(-)
+
+diff --git a/doc/user/ospfd.rst b/doc/user/ospfd.rst
+index 30d55f34a..69db359bd 100644
+--- a/doc/user/ospfd.rst
++++ b/doc/user/ospfd.rst
+@@ -824,10 +824,11 @@ Showing Information
+
+ Show detailed information about the OSPF link-state database.
+
+-.. clicmd:: show ip ospf route [json]
++.. clicmd:: show ip ospf route [detail] [json]
+
+ Show the OSPF routing table, as determined by the most recent SPF
+- calculation.
++ calculation. If detail is specified, each routing item's
++ advertiser will be show up.
+
+ .. clicmd:: show ip ospf [vrf <NAME|all>] border-routers [json]
+
+@@ -838,7 +839,7 @@ Showing Information
+
+ .. clicmd:: show ip ospf graceful-restart helper [detail] [json]
+
+- Displays the Grcaeful Restart Helper details including helper
++ Displays the Graceful Restart Helper details including helper
+ config changes.
+
+ .. _opaque-lsa:
+diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
+index 8c0afd852..3de36d49c 100644
+--- a/ospfd/ospf_vty.c
++++ b/ospfd/ospf_vty.c
+@@ -10401,7 +10401,7 @@ static void config_write_stub_router(struct vty *vty, struct ospf *ospf)
+
+ static void show_ip_ospf_route_network(struct vty *vty, struct ospf *ospf,
+ struct route_table *rt,
+- json_object *json)
++ json_object *json, bool detail)
+ {
+ struct route_node *rn;
+ struct ospf_route * or ;
+@@ -10526,6 +10526,10 @@ static void show_ip_ospf_route_network(struct vty *vty, struct ospf *ospf,
+ ifindex2ifname(
+ path->ifindex,
+ ospf->vrf_id));
++ json_object_string_addf(
++ json_nexthop,
++ "adv", "%pI4",
++ &path->adv_router);
+ } else {
+ vty_out(vty,
+ "%24s via %pI4, %s\n",
+@@ -10535,6 +10539,11 @@ static void show_ip_ospf_route_network(struct vty *vty, struct ospf *ospf,
+ path->ifindex,
+ ospf->vrf_id));
+ }
++ if (detail && !json)
++ vty_out(vty,
++ "%24s adv %pI4\n",
++ "",
++ &path->adv_router);
+ }
+ }
+ }
+@@ -10689,7 +10698,7 @@ static void show_ip_ospf_route_router(struct vty *vty, struct ospf *ospf,
+
+ static void show_ip_ospf_route_external(struct vty *vty, struct ospf *ospf,
+ struct route_table *rt,
+- json_object *json)
++ json_object *json, bool detail)
+ {
+ struct route_node *rn;
+ struct ospf_route *er;
+@@ -10793,6 +10802,10 @@ static void show_ip_ospf_route_external(struct vty *vty, struct ospf *ospf,
+ ifindex2ifname(
+ path->ifindex,
+ ospf->vrf_id));
++ json_object_string_addf(
++ json_nexthop, "adv",
++ "%pI4",
++ &path->adv_router);
+ } else {
+ vty_out(vty,
+ "%24s via %pI4, %s\n",
+@@ -10802,6 +10815,10 @@ static void show_ip_ospf_route_external(struct vty *vty, struct ospf *ospf,
+ path->ifindex,
+ ospf->vrf_id));
+ }
++ if (detail && !json)
++ vty_out(vty,
++ "%24s adv %pI4\n", "",
++ &path->adv_router);
+ }
+ }
+ }
+@@ -11088,7 +11105,8 @@ DEFUN (show_ip_ospf_instance_border_routers,
+ }
+
+ static int show_ip_ospf_route_common(struct vty *vty, struct ospf *ospf,
+- json_object *json, uint8_t use_vrf)
++ json_object *json, uint8_t use_vrf,
++ bool detail)
+ {
+ json_object *json_vrf = NULL;
+
+@@ -11116,7 +11134,8 @@ static int show_ip_ospf_route_common(struct vty *vty, struct ospf *ospf,
+ }
+
+ /* Show Network routes. */
+- show_ip_ospf_route_network(vty, ospf, ospf->new_table, json_vrf);
++ show_ip_ospf_route_network(vty, ospf, ospf->new_table, json_vrf,
++ detail);
+
+ /* Show Router routes. */
+ show_ip_ospf_route_router(vty, ospf, ospf->new_rtrs, json_vrf);
+@@ -11127,7 +11146,7 @@ static int show_ip_ospf_route_common(struct vty *vty, struct ospf *ospf,
+
+ /* Show AS External routes. */
+ show_ip_ospf_route_external(vty, ospf, ospf->old_external_route,
+- json_vrf);
++ json_vrf, detail);
+
+ if (json) {
+ if (use_vrf) {
+@@ -11145,13 +11164,14 @@ static int show_ip_ospf_route_common(struct vty *vty, struct ospf *ospf,
+
+ DEFUN (show_ip_ospf_route,
+ show_ip_ospf_route_cmd,
+- "show ip ospf [vrf <NAME|all>] route [json]",
++ "show ip ospf [vrf <NAME|all>] route [detail] [json]",
+ SHOW_STR
+ IP_STR
+ "OSPF information\n"
+ VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "OSPF routing table\n"
++ "Detailed information\n"
+ JSON_STR)
+ {
+ struct ospf *ospf = NULL;
+@@ -11160,14 +11180,19 @@ DEFUN (show_ip_ospf_route,
+ bool all_vrf = false;
+ int ret = CMD_SUCCESS;
+ int inst = 0;
++ int idx = 0;
+ int idx_vrf = 0;
+ uint8_t use_vrf = 0;
+ bool uj = use_json(argc, argv);
++ bool detail = false;
+ json_object *json = NULL;
+
+ if (uj)
+ json = json_object_new_object();
+
++ if (argv_find(argv, argc, "detail", &idx))
++ detail = true;
++
+ OSPF_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+
+ /* vrf input is provided could be all or specific vrf*/
+@@ -11181,8 +11206,8 @@ DEFUN (show_ip_ospf_route,
+ if (!ospf->oi_running)
+ continue;
+ ospf_output = true;
+- ret = show_ip_ospf_route_common(vty, ospf, json,
+- use_vrf);
++ ret = show_ip_ospf_route_common(
++ vty, ospf, json, use_vrf, detail);
+ }
+
+ if (uj) {
+@@ -11219,7 +11244,8 @@ DEFUN (show_ip_ospf_route,
+ }
+
+ if (ospf) {
+- ret = show_ip_ospf_route_common(vty, ospf, json, use_vrf);
++ ret = show_ip_ospf_route_common(vty, ospf, json, use_vrf,
++ detail);
+ /* Keep Non-pretty format */
+ if (uj)
+ vty_out(vty, "%s\n",
+@@ -11235,16 +11261,22 @@ DEFUN (show_ip_ospf_route,
+
+ DEFUN (show_ip_ospf_instance_route,
+ show_ip_ospf_instance_route_cmd,
+- "show ip ospf (1-65535) route",
++ "show ip ospf (1-65535) route [detail]",
+ SHOW_STR
+ IP_STR
+ "OSPF information\n"
+ "Instance ID\n"
+- "OSPF routing table\n")
++ "OSPF routing table\n"
++ "Detailed information\n")
+ {
+ int idx_number = 3;
++ int idx = 0;
+ struct ospf *ospf;
+ unsigned short instance = 0;
++ bool detail = false;
++
++ if (argv_find(argv, argc, "detail", &idx))
++ detail = true;
+
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ if (instance != ospf_instance)
+@@ -11254,7 +11286,7 @@ DEFUN (show_ip_ospf_instance_route,
+ if (!ospf || !ospf->oi_running)
+ return CMD_SUCCESS;
+
+- return show_ip_ospf_route_common(vty, ospf, NULL, 0);
++ return show_ip_ospf_route_common(vty, ospf, NULL, 0, detail);
+ }
+
+
+--
+2.30.2
+