]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: wide option 6793/head
authorMadhuri Kuruganti <k.madhuri@samsung.com>
Thu, 23 Jul 2020 09:20:52 +0000 (14:50 +0530)
committerMadhuri Kuruganti <k.madhuri@samsung.com>
Thu, 23 Jul 2020 13:48:11 +0000 (19:18 +0530)
Signed-off-by: Madhuri Kuruganti <k.madhuri@samsung.com>
bgpd/bgp_evpn_vty.c
bgpd/bgp_route.c
bgpd/bgp_route.h
bgpd/bgp_updgrp_adv.c
bgpd/bgp_vpn.c

index 95e24eae12bc435befa25a84273b8865b1280859..2cb13fb85fb1be96922d07477a3d7a20f6654cef 100644 (file)
@@ -679,7 +679,8 @@ static void show_esi_routes(struct bgp *bgp,
                        if (json)
                                json_path = json_object_new_array();
 
-                       route_vty_out(vty, p, pi, 0, SAFI_EVPN, json_path);
+                       route_vty_out(vty, p, pi, 0, SAFI_EVPN, json_path,
+                                     false);
 
                        if (json)
                                json_object_array_add(json_paths, json_path);
@@ -788,7 +789,7 @@ static void show_vni_routes(struct bgp *bgp, struct bgpevpn *vpn, int type,
                                                     json_path);
                        else
                                route_vty_out(vty, p, pi, 0, SAFI_EVPN,
-                                             json_path);
+                                             json_path, false);
 
                        if (json)
                                json_object_array_add(json_paths, json_path);
@@ -1314,7 +1315,7 @@ static int bgp_show_ethernet_vpn(struct vty *vty, struct prefix_rd *prd,
                                        route_vty_out(vty,
                                                      bgp_dest_get_prefix(rm),
                                                      pi, no_display, SAFI_EVPN,
-                                                     json_array);
+                                                     json_array, false);
                                no_display = 1;
                        }
 
@@ -2813,7 +2814,7 @@ static void evpn_show_all_routes(struct vty *vty, struct bgp *bgp, int type,
                                                SAFI_EVPN, json_path);
                                } else
                                        route_vty_out(vty, p, pi, 0, SAFI_EVPN,
-                                                     json_path);
+                                                     json_path, false);
 
                                if (json)
                                        json_object_array_add(json_paths,
index 90ae6af204b3a5a85bf8bee2f1595ad8557187a0..2f12c8e93eec05c0e211158a778e32d68704efbb 100644 (file)
@@ -7411,7 +7411,7 @@ void bgp_redistribute_withdraw(struct bgp *bgp, afi_t afi, int type,
 
 /* Static function to display route. */
 static void route_vty_out_route(const struct prefix *p, struct vty *vty,
-                               json_object *json)
+                               json_object *json, bool wide)
 {
        int len = 0;
        char buf[BUFSIZ];
@@ -7466,7 +7466,7 @@ static void route_vty_out_route(const struct prefix *p, struct vty *vty,
        }
 
        if (!json) {
-               len = 17 - len;
+               len = wide ? (45 - len) : (17 - len);
                if (len < 1)
                        vty_out(vty, "\n%*s", 20, " ");
                else
@@ -7569,7 +7569,7 @@ static char *bgp_nexthop_hostname(struct peer *peer,
 /* called from terminal list command */
 void route_vty_out(struct vty *vty, const struct prefix *p,
                   struct bgp_path_info *path, int display, safi_t safi,
-                  json_object *json_paths)
+                  json_object *json_paths, bool wide)
 {
        int len;
        struct attr *attr = path->attr;
@@ -7596,11 +7596,11 @@ void route_vty_out(struct vty *vty, const struct prefix *p,
        if (!json_paths) {
                /* print prefix and mask */
                if (!display)
-                       route_vty_out_route(p, vty, json_path);
+                       route_vty_out_route(p, vty, json_path, wide);
                else
-                       vty_out(vty, "%*s", 17, " ");
+                       vty_out(vty, "%*s", (wide ? 45 : 17), " ");
        } else {
-               route_vty_out_route(p, vty, json_path);
+               route_vty_out_route(p, vty, json_path, wide);
        }
 
        /*
@@ -7690,7 +7690,7 @@ void route_vty_out(struct vty *vty, const struct prefix *p,
                        else
                                len = vty_out(vty, "%s%s", nexthop, vrf_id_str);
 
-                       len = 16 - len;
+                       len = wide ? (41 - len) : (16 - len);
                        if (len < 1)
                                vty_out(vty, "\n%*s", 36, " ");
                        else
@@ -7720,7 +7720,7 @@ void route_vty_out(struct vty *vty, const struct prefix *p,
                                len = vty_out(vty, "%pI4%s", &attr->nexthop,
                                              vrf_id_str);
 
-                       len = 16 - len;
+                       len = wide ? (41 - len) : (16 - len);
                        if (len < 1)
                                vty_out(vty, "\n%*s", 36, " ");
                        else
@@ -7756,7 +7756,7 @@ void route_vty_out(struct vty *vty, const struct prefix *p,
                                                      &attr->nexthop,
                                                      vrf_id_str);
 
-                               len = 16 - len;
+                               len = wide ? (41 - len) : (16 - len);
                                if (len < 1)
                                        vty_out(vty, "\n%*s", 36, " ");
                                else
@@ -7787,7 +7787,7 @@ void route_vty_out(struct vty *vty, const struct prefix *p,
                                len = vty_out(vty, "%pI4%s", &attr->nexthop,
                                              vrf_id_str);
 
-                       len = 16 - len;
+                       len = wide ? (41 - len) : (16 - len);
                        if (len < 1)
                                vty_out(vty, "\n%*s", 36, " ");
                        else
@@ -7860,10 +7860,9 @@ void route_vty_out(struct vty *vty, const struct prefix *p,
                                if (path->peer->conf_if) {
                                        len = vty_out(vty, "%s",
                                                      path->peer->conf_if);
-                                       len = 16 - len; /* len of IPv6
-                                                          addr + max
-                                                          len of def
-                                                          ifname */
+                                       /* len of IPv6 addr + max len of def
+                                        * ifname */
+                                       len = wide ? (41 - len) : (16 - len);
 
                                        if (len < 1)
                                                vty_out(vty, "\n%*s", 36, " ");
@@ -7882,7 +7881,7 @@ void route_vty_out(struct vty *vty, const struct prefix *p,
                                                        &attr->mp_nexthop_local,
                                                        vrf_id_str);
 
-                                       len = 16 - len;
+                                       len = wide ? (41 - len) : (16 - len);
 
                                        if (len < 1)
                                                vty_out(vty, "\n%*s", 36, " ");
@@ -7900,7 +7899,7 @@ void route_vty_out(struct vty *vty, const struct prefix *p,
                                                      &attr->mp_nexthop_global,
                                                      vrf_id_str);
 
-                               len = 16 - len;
+                               len = wide ? (41 - len) : (16 - len);
 
                                if (len < 1)
                                        vty_out(vty, "\n%*s", 36, " ");
@@ -7914,10 +7913,16 @@ void route_vty_out(struct vty *vty, const struct prefix *p,
        if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_MULTI_EXIT_DISC))
                if (json_paths)
                        json_object_int_add(json_path, "metric", attr->med);
+               else if (wide)
+                       vty_out(vty, "%7u", attr->med);
                else
                        vty_out(vty, "%10u", attr->med);
-       else if (!json_paths)
-               vty_out(vty, "          ");
+       else if (!json_paths) {
+               if (wide)
+                       vty_out(vty, "%*s", 7, " ");
+               else
+                       vty_out(vty, "%*s", 10, " ");
+       }
 
        /* Local Pref */
        if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_LOCAL_PREF))
@@ -8021,7 +8026,7 @@ void route_vty_out(struct vty *vty, const struct prefix *p,
 /* called from terminal list command */
 void route_vty_out_tmp(struct vty *vty, const struct prefix *p,
                       struct attr *attr, safi_t safi, bool use_json,
-                      json_object *json_ar)
+                      json_object *json_ar, bool wide)
 {
        json_object *json_status = NULL;
        json_object *json_net = NULL;
@@ -8053,7 +8058,7 @@ void route_vty_out_tmp(struct vty *vty, const struct prefix *p,
                        json_object_string_add(json_net, "network", buff);
                }
        } else
-               route_vty_out_route(p, vty, NULL);
+               route_vty_out_route(p, vty, NULL, wide);
 
        /* Print attribute */
        if (attr) {
@@ -8114,6 +8119,9 @@ void route_vty_out_tmp(struct vty *vty, const struct prefix *p,
                                        vty_out(vty, "%-16s",
                                                inet_ntoa(
                                                        attr->mp_nexthop_global_in));
+                               else if (wide)
+                                       vty_out(vty, "%-41s",
+                                               inet_ntoa(attr->nexthop));
                                else
                                        vty_out(vty, "%-16s",
                                                inet_ntoa(attr->nexthop));
@@ -8126,7 +8134,7 @@ void route_vty_out_tmp(struct vty *vty, const struct prefix *p,
                                        inet_ntop(AF_INET6,
                                                  &attr->mp_nexthop_global, buf,
                                                  BUFSIZ));
-                               len = 16 - len;
+                               len = wide ? (41 - len) : (16 - len);
                                if (len < 1)
                                        vty_out(vty, "\n%*s", 36, " ");
                                else
@@ -8134,7 +8142,12 @@ void route_vty_out_tmp(struct vty *vty, const struct prefix *p,
                        }
                        if (attr->flag
                            & ATTR_FLAG_BIT(BGP_ATTR_MULTI_EXIT_DISC))
-                               vty_out(vty, "%10u", attr->med);
+                               if (wide)
+                                       vty_out(vty, "%7u", attr->med);
+                               else
+                                       vty_out(vty, "%10u", attr->med);
+                       else if (wide)
+                               vty_out(vty, "       ");
                        else
                                vty_out(vty, "          ");
 
@@ -8185,7 +8198,7 @@ void route_vty_out_tag(struct vty *vty, const struct prefix *p,
        /* print prefix and mask */
        if (json == NULL) {
                if (!display)
-                       route_vty_out_route(p, vty, NULL);
+                       route_vty_out_route(p, vty, NULL, false);
                else
                        vty_out(vty, "%*s", 17, " ");
        }
@@ -8282,7 +8295,7 @@ void route_vty_out_overlay(struct vty *vty, const struct prefix *p,
 
        /* print prefix and mask */
        if (!display)
-               route_vty_out_route(p, vty, json_path);
+               route_vty_out_route(p, vty, json_path, false);
        else
                vty_out(vty, "%*s", 17, " ");
 
@@ -8397,7 +8410,7 @@ static void damp_route_vty_out(struct vty *vty, const struct prefix *p,
        /* print prefix and mask */
        if (!use_json) {
                if (!display)
-                       route_vty_out_route(p, vty, NULL);
+                       route_vty_out_route(p, vty, NULL, false);
                else
                        vty_out(vty, "%*s", 17, " ");
        }
@@ -8468,7 +8481,7 @@ static void flap_route_vty_out(struct vty *vty, const struct prefix *p,
        /* print prefix and mask */
        if (!use_json) {
                if (!display)
-                       route_vty_out_route(p, vty, NULL);
+                       route_vty_out_route(p, vty, NULL, false);
                else
                        vty_out(vty, "%*s", 17, " ");
        }
@@ -9583,7 +9596,7 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi,
                          void *output_arg, bool use_json, char *rd,
                          int is_last, unsigned long *output_cum,
                          unsigned long *total_cum,
-                         unsigned long *json_header_depth)
+                         unsigned long *json_header_depth, bool wide)
 {
        struct bgp_path_info *pi;
        struct bgp_dest *dest;
@@ -9807,7 +9820,8 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi,
                                         || type == bgp_show_type_flap_neighbor)
                                        vty_out(vty, BGP_SHOW_FLAP_HEADER);
                                else
-                                       vty_out(vty, BGP_SHOW_HEADER);
+                                       vty_out(vty, (wide ? BGP_SHOW_HEADER_WIDE
+                                                          : BGP_SHOW_HEADER));
                                header = 0;
                        }
                        if (rd != NULL && !display && !output_count) {
@@ -9828,7 +9842,7 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi,
                                                   json_paths);
                        else
                                route_vty_out(vty, dest_p, pi, display, safi,
-                                             json_paths);
+                                             json_paths, wide);
                        display++;
                }
 
@@ -9936,7 +9950,7 @@ int bgp_show_table_rd(struct vty *vty, struct bgp *bgp, safi_t safi,
                        prefix_rd2str(&prd, rd, sizeof(rd));
                        bgp_show_table(vty, bgp, safi, itable, type, output_arg,
                                       use_json, rd, next == NULL, &output_cum,
-                                      &total_cum, &json_header_depth);
+                                      &total_cum, &json_header_depth, false);
                        if (next == NULL)
                                show_msg = false;
                }
@@ -9953,7 +9967,8 @@ int bgp_show_table_rd(struct vty *vty, struct bgp *bgp, safi_t safi,
        return CMD_SUCCESS;
 }
 static int bgp_show(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
-                   enum bgp_show_type type, void *output_arg, bool use_json)
+                   enum bgp_show_type type, void *output_arg, bool use_json,
+                   bool wide)
 {
        struct bgp_table *table;
        unsigned long json_header_depth = 0;
@@ -9987,11 +10002,12 @@ static int bgp_show(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
                safi = SAFI_UNICAST;
 
        return bgp_show_table(vty, bgp, safi, table, type, output_arg, use_json,
-                             NULL, 1, NULL, NULL, &json_header_depth);
+                             NULL, 1, NULL, NULL, &json_header_depth, wide);
 }
 
 static void bgp_show_all_instances_routes_vty(struct vty *vty, afi_t afi,
-                                             safi_t safi, bool use_json)
+                                             safi_t safi, bool use_json,
+                                             bool wide)
 {
        struct listnode *node, *nnode;
        struct bgp *bgp;
@@ -10020,7 +10036,7 @@ static void bgp_show_all_instances_routes_vty(struct vty *vty, afi_t afi,
                                        : bgp->name);
                }
                bgp_show(vty, bgp, afi, safi, bgp_show_type_normal, NULL,
-                        use_json);
+                        use_json, wide);
        }
 
        if (use_json)
@@ -10507,8 +10523,8 @@ static int bgp_show_lcommunity(struct vty *vty, struct bgp *bgp, int argc,
 
        return bgp_show(vty, bgp, afi, safi,
                        (exact ? bgp_show_type_lcommunity_exact
-                        : bgp_show_type_lcommunity),
-                       lcom, uj);
+                              : bgp_show_type_lcommunity),
+                       lcom, uj, false);
 }
 
 static int bgp_show_lcommunity_list(struct vty *vty, struct bgp *bgp,
@@ -10527,8 +10543,8 @@ static int bgp_show_lcommunity_list(struct vty *vty, struct bgp *bgp,
 
        return bgp_show(vty, bgp, afi, safi,
                        (exact ? bgp_show_type_lcommunity_list_exact
-                        : bgp_show_type_lcommunity_list),
-                       list, uj);
+                              : bgp_show_type_lcommunity_list),
+                       list, uj, false);
 }
 
 DEFUN (show_ip_bgp_large_community_list,
@@ -10607,7 +10623,7 @@ DEFUN (show_ip_bgp_large_community,
                                        exact_match, afi, safi, uj);
        } else
                return bgp_show(vty, bgp, afi, safi,
-                               bgp_show_type_lcommunity_all, NULL, uj);
+                               bgp_show_type_lcommunity_all, NULL, uj, false);
 }
 
 static int bgp_table_stats_single(struct vty *vty, struct bgp *bgp, afi_t afi,
@@ -10831,7 +10847,7 @@ DEFUN(show_ip_bgp, show_ip_bgp_cmd,
 }
 
 /* BGP route print out function with JSON */
-DEFUN (show_ip_bgp_json,
+DEFPY (show_ip_bgp_json,
        show_ip_bgp_json_cmd,
        "show [ip] bgp [<view|vrf> VIEWVRFNAME] ["BGP_AFI_CMD_STR" ["BGP_SAFI_WITH_LABEL_CMD_STR"]]\
           [cidr-only\
@@ -10841,7 +10857,7 @@ DEFUN (show_ip_bgp_json,
                      |accept-own|accept-own-nexthop|route-filter-v6\
                      |route-filter-v4|route-filter-translated-v6\
                      |route-filter-translated-v4] [exact-match]\
-          ] [json]",
+          ] [json$uj | wide$wide]",
        SHOW_STR
        IP_STR
        BGP_STR
@@ -10869,7 +10885,8 @@ DEFUN (show_ip_bgp_json,
        "RT translated VPNv6 route filtering (well-known community)\n"
        "RT translated VPNv4 route filtering (well-known community)\n"
        "Exact match of the communities\n"
-       JSON_STR)
+       JSON_STR
+       "Increase table width for longer prefixes\n")
 {
        afi_t afi = AFI_IP6;
        safi_t safi = SAFI_UNICAST;
@@ -10877,7 +10894,6 @@ DEFUN (show_ip_bgp_json,
        struct bgp *bgp = NULL;
        int idx = 0;
        int exact_match = 0;
-       bool uj = use_json(argc, argv);
 
        if (uj)
                argc--;
@@ -10889,16 +10905,17 @@ DEFUN (show_ip_bgp_json,
 
        if (argv_find(argv, argc, "cidr-only", &idx))
                return bgp_show(vty, bgp, afi, safi, bgp_show_type_cidr_only,
-                               NULL, uj);
+                               NULL, uj, wide);
 
        if (argv_find(argv, argc, "dampening", &idx)) {
                if (argv_find(argv, argc, "dampened-paths", &idx))
                        return bgp_show(vty, bgp, afi, safi,
-                                       bgp_show_type_dampend_paths, NULL, uj);
+                                       bgp_show_type_dampend_paths, NULL, uj,
+                                       wide);
                else if (argv_find(argv, argc, "flap-statistics", &idx))
                        return bgp_show(vty, bgp, afi, safi,
-                                       bgp_show_type_flap_statistics, NULL,
-                                       uj);
+                                       bgp_show_type_flap_statistics, NULL, uj,
+                                       wide);
        }
 
        if (argv_find(argv, argc, "community", &idx)) {
@@ -10924,11 +10941,11 @@ DEFUN (show_ip_bgp_json,
                                                  exact_match, afi, safi, uj);
                else
                        return (bgp_show(vty, bgp, afi, safi,
-                                        bgp_show_type_community_all, NULL,
-                                        uj));
+                                        bgp_show_type_community_all, NULL, uj,
+                                        wide));
        }
 
-       return bgp_show(vty, bgp, afi, safi, sh_type, NULL, uj);
+       return bgp_show(vty, bgp, afi, safi, sh_type, NULL, uj, wide);
 }
 
 DEFUN (show_ip_bgp_route,
@@ -11039,22 +11056,22 @@ DEFUN (show_ip_bgp_regexp,
                                 bgp_show_type_regexp, uj);
 }
 
-DEFUN (show_ip_bgp_instance_all,
+DEFPY (show_ip_bgp_instance_all,
        show_ip_bgp_instance_all_cmd,
-       "show [ip] bgp <view|vrf> all ["BGP_AFI_CMD_STR" ["BGP_SAFI_WITH_LABEL_CMD_STR"]] [json]",
+       "show [ip] bgp <view|vrf> all ["BGP_AFI_CMD_STR" ["BGP_SAFI_WITH_LABEL_CMD_STR"]] [json$uj | wide$wide]",
        SHOW_STR
        IP_STR
        BGP_STR
        BGP_INSTANCE_ALL_HELP_STR
        BGP_AFI_HELP_STR
        BGP_SAFI_WITH_LABEL_HELP_STR
-       JSON_STR)
+       JSON_STR
+      "Increase table width for longer prefixes\n")
 {
        afi_t afi = AFI_IP;
        safi_t safi = SAFI_UNICAST;
        struct bgp *bgp = NULL;
        int idx = 0;
-       bool uj = use_json(argc, argv);
 
        if (uj)
                argc--;
@@ -11064,7 +11081,7 @@ DEFUN (show_ip_bgp_instance_all,
        if (!idx)
                return CMD_WARNING;
 
-       bgp_show_all_instances_routes_vty(vty, afi, safi, uj);
+       bgp_show_all_instances_routes_vty(vty, afi, safi, uj, wide);
        return CMD_SUCCESS;
 }
 
@@ -11087,7 +11104,7 @@ static int bgp_show_regexp(struct vty *vty, struct bgp *bgp, const char *regstr,
                return CMD_WARNING;
        }
 
-       rc = bgp_show(vty, bgp, afi, safi, type, regex, use_json);
+       rc = bgp_show(vty, bgp, afi, safi, type, regex, use_json, false);
        bgp_regex_free(regex);
        return rc;
 }
@@ -11105,7 +11122,7 @@ static int bgp_show_prefix_list(struct vty *vty, struct bgp *bgp,
                return CMD_WARNING;
        }
 
-       return bgp_show(vty, bgp, afi, safi, type, plist, 0);
+       return bgp_show(vty, bgp, afi, safi, type, plist, 0, false);
 }
 
 static int bgp_show_filter_list(struct vty *vty, struct bgp *bgp,
@@ -11121,7 +11138,7 @@ static int bgp_show_filter_list(struct vty *vty, struct bgp *bgp,
                return CMD_WARNING;
        }
 
-       return bgp_show(vty, bgp, afi, safi, type, as_list, 0);
+       return bgp_show(vty, bgp, afi, safi, type, as_list, 0, false);
 }
 
 static int bgp_show_route_map(struct vty *vty, struct bgp *bgp,
@@ -11136,7 +11153,7 @@ static int bgp_show_route_map(struct vty *vty, struct bgp *bgp,
                return CMD_WARNING;
        }
 
-       return bgp_show(vty, bgp, afi, safi, type, rmap, 0);
+       return bgp_show(vty, bgp, afi, safi, type, rmap, 0, false);
 }
 
 static int bgp_show_community(struct vty *vty, struct bgp *bgp,
@@ -11155,7 +11172,7 @@ static int bgp_show_community(struct vty *vty, struct bgp *bgp,
        ret = bgp_show(vty, bgp, afi, safi,
                       (exact ? bgp_show_type_community_exact
                              : bgp_show_type_community),
-                      com, use_json);
+                      com, use_json, false);
        community_free(&com);
 
        return ret;
@@ -11176,7 +11193,7 @@ static int bgp_show_community_list(struct vty *vty, struct bgp *bgp,
        return bgp_show(vty, bgp, afi, safi,
                        (exact ? bgp_show_type_community_list_exact
                               : bgp_show_type_community_list),
-                       list, 0);
+                       list, 0, false);
 }
 
 static int bgp_show_prefix_longer(struct vty *vty, struct bgp *bgp,
@@ -11194,7 +11211,7 @@ static int bgp_show_prefix_longer(struct vty *vty, struct bgp *bgp,
                return CMD_WARNING;
        }
 
-       ret = bgp_show(vty, bgp, afi, safi, type, p, 0);
+       ret = bgp_show(vty, bgp, afi, safi, type, p, 0, false);
        prefix_free(&p);
        return ret;
 }
@@ -11959,7 +11976,7 @@ DEFUN (show_bgp_l2vpn_evpn_route_prefix,
 static void show_adj_route(struct vty *vty, struct peer *peer, afi_t afi,
                           safi_t safi, enum bgp_show_adj_route_type type,
                           const char *rmap_name, bool use_json,
-                          json_object *json)
+                          json_object *json, bool wide)
 {
        struct bgp_table *table;
        struct bgp_adj_in *ain;
@@ -12115,7 +12132,9 @@ static void show_adj_route(struct vty *vty, struct peer *peer, afi_t afi,
                                }
                                if (header2) {
                                        if (!use_json)
-                                               vty_out(vty, BGP_SHOW_HEADER);
+                                               vty_out(vty,
+                                                       (wide ? BGP_SHOW_HEADER_WIDE
+                                                             : BGP_SHOW_HEADER));
                                        header2 = 0;
                                }
 
@@ -12148,7 +12167,7 @@ static void show_adj_route(struct vty *vty, struct peer *peer, afi_t afi,
                                        filtered_count++;
 
                                route_vty_out_tmp(vty, rn_p, &attr, safi,
-                                                 use_json, json_ar);
+                                                 use_json, json_ar, wide);
                                bgp_attr_undup(&attr, ain->attr);
                                output_count++;
                        }
@@ -12219,7 +12238,8 @@ static void show_adj_route(struct vty *vty, struct peer *peer, afi_t afi,
                                        if (header2) {
                                                if (!use_json)
                                                        vty_out(vty,
-                                                               BGP_SHOW_HEADER);
+                                                               (wide ? BGP_SHOW_HEADER_WIDE
+                                                                     : BGP_SHOW_HEADER));
                                                header2 = 0;
                                        }
 
@@ -12234,7 +12254,8 @@ static void show_adj_route(struct vty *vty, struct peer *peer, afi_t afi,
                                        if (ret != RMAP_DENY) {
                                                route_vty_out_tmp(
                                                        vty, rn_p, &attr, safi,
-                                                       use_json, json_ar);
+                                                       use_json, json_ar,
+                                                       wide);
                                                output_count++;
                                        } else {
                                                filtered_count++;
@@ -12273,7 +12294,7 @@ static void show_adj_route(struct vty *vty, struct peer *peer, afi_t afi,
 
 static int peer_adj_routes(struct vty *vty, struct peer *peer, afi_t afi,
                           safi_t safi, enum bgp_show_adj_route_type type,
-                          const char *rmap_name, bool use_json)
+                          const char *rmap_name, bool use_json, bool wide)
 {
        json_object *json = NULL;
 
@@ -12310,14 +12331,15 @@ static int peer_adj_routes(struct vty *vty, struct peer *peer, afi_t afi,
                return CMD_WARNING;
        }
 
-       show_adj_route(vty, peer, afi, safi, type, rmap_name, use_json, json);
+       show_adj_route(vty, peer, afi, safi, type, rmap_name, use_json, json,
+                      wide);
 
        return CMD_SUCCESS;
 }
 
-DEFUN (show_ip_bgp_instance_neighbor_advertised_route,
+DEFPY (show_ip_bgp_instance_neighbor_advertised_route,
        show_ip_bgp_instance_neighbor_advertised_route_cmd,
-       "show [ip] bgp [<view|vrf> VIEWVRFNAME] ["BGP_AFI_CMD_STR" ["BGP_SAFI_WITH_LABEL_CMD_STR"]] neighbors <A.B.C.D|X:X::X:X|WORD> <advertised-routes|received-routes|filtered-routes> [route-map WORD] [json]",
+       "show [ip] bgp [<view|vrf> VIEWVRFNAME] ["BGP_AFI_CMD_STR" ["BGP_SAFI_WITH_LABEL_CMD_STR"]] neighbors <A.B.C.D|X:X::X:X|WORD> <advertised-routes|received-routes|filtered-routes> [route-map WORD] [json$uj | wide$wide]",
        SHOW_STR
        IP_STR
        BGP_STR
@@ -12333,7 +12355,8 @@ DEFUN (show_ip_bgp_instance_neighbor_advertised_route,
        "Display the filtered routes received from neighbor\n"
        "Route-map to modify the attributes\n"
        "Name of the route map\n"
-       JSON_STR)
+       JSON_STR
+       "Increase table width for longer prefixes\n")
 {
        afi_t afi = AFI_IP6;
        safi_t safi = SAFI_UNICAST;
@@ -12343,7 +12366,6 @@ DEFUN (show_ip_bgp_instance_neighbor_advertised_route,
        struct peer *peer;
        enum bgp_show_adj_route_type type = bgp_show_adj_route_advertised;
        int idx = 0;
-       bool uj = use_json(argc, argv);
 
        if (uj)
                argc--;
@@ -12371,7 +12393,7 @@ DEFUN (show_ip_bgp_instance_neighbor_advertised_route,
        if (argv_find(argv, argc, "route-map", &idx))
                rmap_name = argv[++idx]->arg;
 
-       return peer_adj_routes(vty, peer, afi, safi, type, rmap_name, uj);
+       return peer_adj_routes(vty, peer, afi, safi, type, rmap_name, uj, wide);
 }
 
 DEFUN (show_ip_bgp_neighbor_received_prefix_filter,
@@ -12479,7 +12501,8 @@ static int bgp_show_neighbor_route(struct vty *vty, struct peer *peer,
                return CMD_WARNING;
        }
 
-       return bgp_show(vty, peer->bgp, afi, safi, type, &peer->su, use_json);
+       return bgp_show(vty, peer->bgp, afi, safi, type, &peer->su, use_json,
+                       false);
 }
 
 DEFUN (show_ip_bgp_flowspec_routes_detailed,
@@ -12508,7 +12531,8 @@ DEFUN (show_ip_bgp_flowspec_routes_detailed,
        if (!idx)
                return CMD_WARNING;
 
-       return bgp_show(vty, bgp, afi, safi, bgp_show_type_detail, NULL, uj);
+       return bgp_show(vty, bgp, afi, safi, bgp_show_type_detail, NULL, uj,
+                       false);
 }
 
 DEFUN (show_ip_bgp_neighbor_routes,
index ee52dcc8c66c23574a576f7a33984c9cc5a8ff38..0767d2912f2d5ac3ca29fc60eb952a7f80b01a1d 100644 (file)
@@ -72,6 +72,7 @@ enum bgp_show_adj_route_type {
 #define BGP_SHOW_OCODE_HEADER "Origin codes:  i - IGP, e - EGP, ? - incomplete\n\n"
 #define BGP_SHOW_NCODE_HEADER "Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self\n"
 #define BGP_SHOW_HEADER "   Network          Next Hop            Metric LocPrf Weight Path\n"
+#define BGP_SHOW_HEADER_WIDE "   Network                                      Next Hop                                  Metric LocPrf Weight Path\n"
 
 /* Maximum number of labels we can process or send with a prefix. We
  * really do only 1 for MPLS (BGP-LU) but we can do 2 for EVPN-VxLAN.
@@ -618,13 +619,13 @@ extern struct bgp_path_info *info_make(int type, int sub_type,
 
 extern void route_vty_out(struct vty *vty, const struct prefix *p,
                          struct bgp_path_info *path, int display, safi_t safi,
-                         json_object *json_paths);
+                         json_object *json_paths, bool wide);
 extern void route_vty_out_tag(struct vty *vty, const struct prefix *p,
                              struct bgp_path_info *path, int display,
                              safi_t safi, json_object *json);
 extern void route_vty_out_tmp(struct vty *vty, const struct prefix *p,
                              struct attr *attr, safi_t safi, bool use_json,
-                             json_object *json_ar);
+                             json_object *json_ar, bool wide);
 extern void route_vty_out_overlay(struct vty *vty, const struct prefix *p,
                                  struct bgp_path_info *path, int display,
                                  json_object *json);
index e8e9b33d4baf52dc472ce21a6441db3c4494b9ae..ecdcaa38b8e9d34d72449026bf77c889c5d59645 100644 (file)
@@ -262,14 +262,15 @@ static void subgrp_show_adjq_vty(struct update_subgroup *subgrp,
                                        route_vty_out_tmp(vty, dest_p,
                                                          adj->adv->baa->attr,
                                                          SUBGRP_SAFI(subgrp),
-                                                         0, NULL);
+                                                         0, NULL, false);
                                        output_count++;
                                }
                                if ((flags & UPDWALK_FLAGS_ADVERTISED)
                                    && adj->attr) {
-                                       route_vty_out_tmp(
-                                               vty, dest_p, adj->attr,
-                                               SUBGRP_SAFI(subgrp), 0, NULL);
+                                       route_vty_out_tmp(vty, dest_p,
+                                                         adj->attr,
+                                                         SUBGRP_SAFI(subgrp),
+                                                         0, NULL, false);
                                        output_count++;
                                }
                        }
index c8b8e2391ddc448968aed62cc1a3656868984c08..0b5d156e6d49f36dba1bfc593f2acaf9005a1fa2 100644 (file)
@@ -226,7 +226,7 @@ int show_adj_route_vpn(struct vty *vty, struct peer *peer,
                                rd_header = 0;
                        }
                        route_vty_out_tmp(vty, bgp_dest_get_prefix(rm), attr,
-                                         safi, use_json, json_routes);
+                                         safi, use_json, json_routes, false);
                        output_count++;
                }