diff options
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-.patch | 232 |
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 + |