]> git.puffer.fish Git - matthieu/frr.git/commitdiff
isisd: show non-zero algos in "show isis route prefix-sid" (2/2)
authorEric Kinzie <ekinzie@labn.net>
Fri, 2 Sep 2022 14:33:43 +0000 (16:33 +0200)
committerLouis Scalbert <louis.scalbert@6wind.com>
Tue, 18 Apr 2023 09:33:15 +0000 (11:33 +0200)
Show Prefix-SIDs and labels for all available Flex-Algos.

Signed-off-by: Eric Kinzie <ekinzie@labn.net>
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
isisd/isis_spf.c

index 9560e0c67a073089d05afd1c02bee4738ee4037f..30a558a52f5a4cf4ee2813f69f7318cf53034b7b 100644 (file)
@@ -2355,23 +2355,28 @@ static void isis_print_route(struct ttable *tt, const struct prefix *prefix,
        char buf_prefix[BUFSIZ];
 
        (void)prefix2str(prefix, buf_prefix, sizeof(buf_prefix));
-               for (ALL_LIST_ELEMENTS_RO(rinfo->nexthops, node, nexthop)) {
+       for (int alg = 0; alg < SR_ALGORITHM_COUNT; alg++) {
+               for (ALL_LIST_ELEMENTS_RO(rinfo->sr_algo[alg].nexthops, node,
+                                         nexthop)) {
                        struct interface *ifp;
                        char buf_iface[BUFSIZ];
                        char buf_nhop[BUFSIZ];
 
                        if (!no_adjacencies) {
-                               inet_ntop(nexthop->family, &nexthop->ip, buf_nhop,
-                                         sizeof(buf_nhop));
-                               ifp = if_lookup_by_index(nexthop->ifindex, VRF_DEFAULT);
+                               inet_ntop(nexthop->family, &nexthop->ip,
+                                         buf_nhop, sizeof(buf_nhop));
+                               ifp = if_lookup_by_index(nexthop->ifindex,
+                                                        VRF_DEFAULT);
                                if (ifp)
                                        strlcpy(buf_iface, ifp->name,
                                                sizeof(buf_iface));
                                else
                                        snprintf(buf_iface, sizeof(buf_iface),
-                                                "ifindex %u", nexthop->ifindex);
+                                                "ifindex %u",
+                                                nexthop->ifindex);
                        } else {
-                               strlcpy(buf_nhop, print_sys_hostname(nexthop->sysid),
+                               strlcpy(buf_nhop,
+                                       print_sys_hostname(nexthop->sysid),
                                        sizeof(buf_nhop));
                                strlcpy(buf_iface, "-", sizeof(buf_iface));
                        }
@@ -2380,40 +2385,45 @@ static void isis_print_route(struct ttable *tt, const struct prefix *prefix,
                                char buf_sid[BUFSIZ] = {};
                                char buf_lblop[BUFSIZ] = {};
 
-                               if (nexthop->sr.present) {
+                               if (rinfo->sr_algo[alg].present) {
                                        snprintf(buf_sid, sizeof(buf_sid), "%u",
-                                                nexthop->sr.sid.value);
-                                       sr_op2str(
-                                               buf_lblop, sizeof(buf_lblop),
-                                               rinfo->sr_algo[SR_ALGORITHM_SPF].label,
-                                               nexthop->sr.label);
-                               } else {
+                                                rinfo->sr_algo[alg].sid.value);
+                                       sr_op2str(buf_lblop, sizeof(buf_lblop),
+                                                 rinfo->sr_algo[alg].label,
+                                                 nexthop->sr.label);
+                               } else if (alg == SR_ALGORITHM_SPF) {
                                        strlcpy(buf_sid, "-", sizeof(buf_sid));
-                                       strlcpy(buf_lblop, "-", sizeof(buf_lblop));
+                                       strlcpy(buf_lblop, "-",
+                                               sizeof(buf_lblop));
+                               } else {
+                                       continue;
                                }
 
                                if (first) {
-                                       ttable_add_row(tt, "%s|%u|%s|%s|%s|%s",
-                                                          buf_prefix, rinfo->cost,
-                                                          buf_iface, buf_nhop, buf_sid,
-                                                          buf_lblop);
+                                       ttable_add_row(tt,
+                                                      "%s|%u|%s|%s|%s|%s|%d",
+                                                      buf_prefix, rinfo->cost,
+                                                      buf_iface, buf_nhop,
+                                                      buf_sid, buf_lblop, alg);
                                        first = false;
                                } else
-                                       ttable_add_row(tt, "||%s|%s|%s|%s", buf_iface,
-                                                          buf_nhop, buf_sid, buf_lblop);
+                                       ttable_add_row(tt, "||%s|%s|%s|%s|%d",
+                                                      buf_iface, buf_nhop,
+                                                      buf_sid, buf_lblop, alg);
                        } else {
                                char buf_labels[BUFSIZ] = {};
 
                                if (nexthop->label_stack) {
                                        for (int i = 0;
-                                                i < nexthop->label_stack->num_labels;
-                                                i++) {
+                                            i <
+                                            nexthop->label_stack->num_labels;
+                                            i++) {
                                                char buf_label[BUFSIZ];
 
-                                               label2str(
-                                                       nexthop->label_stack->label[i],
-                                                       0, buf_label,
-                                                       sizeof(buf_label));
+                                               label2str(nexthop->label_stack
+                                                                 ->label[i],
+                                                         0, buf_label,
+                                                         sizeof(buf_label));
                                                if (i != 0)
                                                        strlcat(buf_labels, "/",
                                                                sizeof(buf_labels));
@@ -2421,21 +2431,27 @@ static void isis_print_route(struct ttable *tt, const struct prefix *prefix,
                                                        sizeof(buf_labels));
                                        }
                                } else if (nexthop->sr.present)
-                                       label2str(nexthop->sr.label, 0, buf_labels,
+                                       label2str(nexthop->sr.label, 0,
+                                                 buf_labels,
                                                  sizeof(buf_labels));
                                else
-                                       strlcpy(buf_labels, "-", sizeof(buf_labels));
+                                       strlcpy(buf_labels, "-",
+                                               sizeof(buf_labels));
 
                                if (first) {
-                                       ttable_add_row(tt, "%s|%u|%s|%s|%s", buf_prefix,
-                                                          rinfo->cost, buf_iface, buf_nhop,
-                                                          buf_labels);
+                                       ttable_add_row(tt, "%s|%u|%s|%s|%s",
+                                                      buf_prefix, rinfo->cost,
+                                                      buf_iface, buf_nhop,
+                                                      buf_labels);
                                        first = false;
                                } else
-                                       ttable_add_row(tt, "||%s|%s|%s", buf_iface,
-                                                          buf_nhop, buf_labels);
+                                       ttable_add_row(tt, "||%s|%s|%s",
+                                                      buf_iface, buf_nhop,
+                                                      buf_labels);
                        }
                }
+       }
+
        if (list_isempty(rinfo->nexthops)) {
                if (prefix_sid) {
                        char buf_sid[BUFSIZ] = {};
@@ -2496,7 +2512,9 @@ void isis_print_routes(struct vty *vty, struct isis_spftree *spftree,
        /* Prepare table. */
        tt = ttable_new(&ttable_styles[TTSTYLE_BLANK]);
        if (prefix_sid)
-               ttable_add_row(tt, "Prefix|Metric|Interface|Nexthop|SID|Label Op.");
+               ttable_add_row(
+                       tt,
+                       "Prefix|Metric|Interface|Nexthop|SID|Label Op.|Algo");
        else
                ttable_add_row(tt, "Prefix|Metric|Interface|Nexthop|Label(s)");
        tt->style.cell.rpad = 2;