summaryrefslogtreecommitdiff
path: root/zebra/zebra_vty.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/zebra_vty.c')
-rw-r--r--zebra/zebra_vty.c5701
1 files changed, 2820 insertions, 2881 deletions
diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c
index aeb01be070..9e27d7a43d 100644
--- a/zebra/zebra_vty.c
+++ b/zebra/zebra_vty.c
@@ -45,160 +45,156 @@
extern int allow_delete;
-static int do_show_ip_route(struct vty *vty, const char *vrf_name,
- safi_t safi, u_char use_json);
-static void vty_show_ip_route_detail (struct vty *vty, struct route_node *rn,
- int mcast);
+static int do_show_ip_route(struct vty *vty, const char *vrf_name, safi_t safi,
+ u_char use_json);
+static void vty_show_ip_route_detail(struct vty *vty, struct route_node *rn,
+ int mcast);
#define ONE_DAY_SECOND 60*60*24
#define ONE_WEEK_SECOND 60*60*24*7
/* General function for static route. */
-int
-zebra_static_ipv4 (struct vty *vty, safi_t safi, int add_cmd,
- const char *dest_str, const char *mask_str,
- const char *gate_str, const char *flag_str,
- const char *tag_str, const char *distance_str,
- const char *vrf_id_str, const char *label_str)
-{
- int ret;
- u_char distance;
- struct prefix p;
- struct in_addr gate;
- struct in_addr mask;
- u_char flag = 0;
- route_tag_t tag = 0;
- struct zebra_vrf *zvrf = NULL;
- const char *ifname = NULL;
- u_char type = STATIC_BLACKHOLE;
- struct static_nh_label snh_label;
-
- memset (&snh_label, 0, sizeof (struct static_nh_label));
- ret = str2prefix (dest_str, &p);
- if (ret <= 0)
- {
- vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- /* Cisco like mask notation. */
- if (mask_str)
- {
- ret = inet_aton (mask_str, &mask);
- if (ret == 0)
- {
- vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- p.prefixlen = ip_masklen (mask);
- }
-
- /* Apply mask for given prefix. */
- apply_mask (&p);
-
- /* Administrative distance. */
- if (distance_str)
- distance = atoi (distance_str);
- else
- distance = ZEBRA_STATIC_DISTANCE_DEFAULT;
-
- /* tag */
- if (tag_str)
- VTY_GET_INTEGER_RANGE("tag", tag, tag_str, 0, 4294967295);
-
- /* VRF id */
- zvrf = zebra_vrf_lookup_by_name (vrf_id_str);
-
- if (!zvrf)
- {
- vty_out (vty, "%% vrf %s is not defined%s", vrf_id_str, VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- /* Labels */
- if (label_str)
- {
- if (!mpls_enabled)
- {
- vty_out (vty, "%% MPLS not turned on in kernel, ignoring command%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (mpls_str2label (label_str, &snh_label.num_labels,
- snh_label.label))
- {
- vty_out (vty, "%% Malformed label(s)%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
-
- /* Null0 static route. */
- if ((gate_str != NULL) && (strncasecmp (gate_str, "Null0", strlen (gate_str)) == 0))
- {
- if (flag_str)
- {
- vty_out (vty, "%% can not have flag %s with Null0%s", flag_str, VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (add_cmd)
- static_add_route (AFI_IP, safi, type, &p, NULL, NULL, ifname,
- ZEBRA_FLAG_BLACKHOLE, tag, distance, zvrf, &snh_label);
- else
- static_delete_route (AFI_IP, safi, type, &p, NULL, NULL, ifname, tag,
- distance, zvrf, &snh_label);
- return CMD_SUCCESS;
- }
-
- /* Route flags */
- if (flag_str) {
- switch(flag_str[0]) {
- case 'r':
- case 'R': /* XXX */
- SET_FLAG (flag, ZEBRA_FLAG_REJECT);
- break;
- case 'b':
- case 'B': /* XXX */
- SET_FLAG (flag, ZEBRA_FLAG_BLACKHOLE);
- break;
- default:
- vty_out (vty, "%% Malformed flag %s %s", flag_str, VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
-
- if (gate_str == NULL)
- {
- if (add_cmd)
- static_add_route (AFI_IP, safi, type, &p, NULL, NULL, ifname, flag,
- tag, distance, zvrf, &snh_label);
- else
- static_delete_route (AFI_IP, safi, type, &p, NULL, NULL, ifname, tag,
- distance, zvrf, &snh_label);
-
- return CMD_SUCCESS;
- }
-
- /* When gateway is A.B.C.D format, gate is treated as nexthop
- address other case gate is treated as interface name. */
- ret = inet_aton (gate_str, &gate);
- if (!ret)
- {
- ifname = gate_str;
- type = STATIC_IFNAME;
- }
- else
- type = STATIC_IPV4_GATEWAY;
-
- if (add_cmd)
- static_add_route (AFI_IP, safi, type, &p, NULL,
- ret ? (union g_addr *)&gate : NULL, ifname,
- flag, tag, distance, zvrf, &snh_label);
- else
- static_delete_route (AFI_IP, safi, type, &p, NULL,
- ret ? (union g_addr *)&gate : NULL, ifname, tag,
- distance, zvrf, &snh_label);
-
- return CMD_SUCCESS;
+int zebra_static_ipv4(struct vty *vty, safi_t safi, int add_cmd,
+ const char *dest_str, const char *mask_str,
+ const char *gate_str, const char *flag_str,
+ const char *tag_str, const char *distance_str,
+ const char *vrf_id_str, const char *label_str)
+{
+ int ret;
+ u_char distance;
+ struct prefix p;
+ struct in_addr gate;
+ struct in_addr mask;
+ u_char flag = 0;
+ route_tag_t tag = 0;
+ struct zebra_vrf *zvrf = NULL;
+ const char *ifname = NULL;
+ u_char type = STATIC_BLACKHOLE;
+ struct static_nh_label snh_label;
+
+ memset(&snh_label, 0, sizeof(struct static_nh_label));
+ ret = str2prefix(dest_str, &p);
+ if (ret <= 0) {
+ vty_out(vty, "%% Malformed address%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ /* Cisco like mask notation. */
+ if (mask_str) {
+ ret = inet_aton(mask_str, &mask);
+ if (ret == 0) {
+ vty_out(vty, "%% Malformed address%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ p.prefixlen = ip_masklen(mask);
+ }
+
+ /* Apply mask for given prefix. */
+ apply_mask(&p);
+
+ /* Administrative distance. */
+ if (distance_str)
+ distance = atoi(distance_str);
+ else
+ distance = ZEBRA_STATIC_DISTANCE_DEFAULT;
+
+ /* tag */
+ if (tag_str)
+ VTY_GET_INTEGER_RANGE("tag", tag, tag_str, 0, 4294967295);
+
+ /* VRF id */
+ zvrf = zebra_vrf_lookup_by_name(vrf_id_str);
+
+ if (!zvrf) {
+ vty_out(vty, "%% vrf %s is not defined%s", vrf_id_str,
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ /* Labels */
+ if (label_str) {
+ if (!mpls_enabled) {
+ vty_out(vty,
+ "%% MPLS not turned on in kernel, ignoring command%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ if (mpls_str2label(label_str, &snh_label.num_labels,
+ snh_label.label)) {
+ vty_out(vty, "%% Malformed label(s)%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
+
+ /* Null0 static route. */
+ if ((gate_str != NULL)
+ && (strncasecmp(gate_str, "Null0", strlen(gate_str)) == 0)) {
+ if (flag_str) {
+ vty_out(vty, "%% can not have flag %s with Null0%s",
+ flag_str, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ if (add_cmd)
+ static_add_route(AFI_IP, safi, type, &p, NULL, NULL,
+ ifname, ZEBRA_FLAG_BLACKHOLE, tag,
+ distance, zvrf, &snh_label);
+ else
+ static_delete_route(AFI_IP, safi, type, &p, NULL, NULL,
+ ifname, tag, distance, zvrf,
+ &snh_label);
+ return CMD_SUCCESS;
+ }
+
+ /* Route flags */
+ if (flag_str) {
+ switch (flag_str[0]) {
+ case 'r':
+ case 'R': /* XXX */
+ SET_FLAG(flag, ZEBRA_FLAG_REJECT);
+ break;
+ case 'b':
+ case 'B': /* XXX */
+ SET_FLAG(flag, ZEBRA_FLAG_BLACKHOLE);
+ break;
+ default:
+ vty_out(vty, "%% Malformed flag %s %s", flag_str,
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
+
+ if (gate_str == NULL) {
+ if (add_cmd)
+ static_add_route(AFI_IP, safi, type, &p, NULL, NULL,
+ ifname, flag, tag, distance, zvrf,
+ &snh_label);
+ else
+ static_delete_route(AFI_IP, safi, type, &p, NULL, NULL,
+ ifname, tag, distance, zvrf,
+ &snh_label);
+
+ return CMD_SUCCESS;
+ }
+
+ /* When gateway is A.B.C.D format, gate is treated as nexthop
+ address other case gate is treated as interface name. */
+ ret = inet_aton(gate_str, &gate);
+ if (!ret) {
+ ifname = gate_str;
+ type = STATIC_IFNAME;
+ } else
+ type = STATIC_IPV4_GATEWAY;
+
+ if (add_cmd)
+ static_add_route(AFI_IP, safi, type, &p, NULL,
+ ret ? (union g_addr *)&gate : NULL, ifname,
+ flag, tag, distance, zvrf, &snh_label);
+ else
+ static_delete_route(AFI_IP, safi, type, &p, NULL,
+ ret ? (union g_addr *)&gate : NULL, ifname,
+ tag, distance, zvrf, &snh_label);
+
+ return CMD_SUCCESS;
}
/* Static unicast routes for multicast RPF lookup. */
@@ -212,11 +208,12 @@ DEFUN (ip_mroute_dist,
"Nexthop interface name\n"
"Distance\n")
{
- char *destprefix = argv[2]->arg;
- char *nexthop = argv[3]->arg;
- char *distance = (argc == 5) ? argv[4]->arg : NULL;
+ char *destprefix = argv[2]->arg;
+ char *nexthop = argv[3]->arg;
+ char *distance = (argc == 5) ? argv[4]->arg : NULL;
- return zebra_static_ipv4 (vty, SAFI_MULTICAST, 1, destprefix, NULL, nexthop, NULL, NULL, distance, NULL, NULL);
+ return zebra_static_ipv4(vty, SAFI_MULTICAST, 1, destprefix, NULL,
+ nexthop, NULL, NULL, distance, NULL, NULL);
}
DEFUN (no_ip_mroute_dist,
@@ -230,11 +227,12 @@ DEFUN (no_ip_mroute_dist,
"Nexthop interface name\n"
"Distance\n")
{
- char *destprefix = argv[3]->arg;
- char *nexthop = argv[4]->arg;
- char *distance = (argc == 6) ? argv[5]->arg : NULL;
+ char *destprefix = argv[3]->arg;
+ char *nexthop = argv[4]->arg;
+ char *distance = (argc == 6) ? argv[5]->arg : NULL;
- return zebra_static_ipv4 (vty, SAFI_MULTICAST, 0, destprefix, NULL, nexthop, NULL, NULL, distance, NULL, NULL);
+ return zebra_static_ipv4(vty, SAFI_MULTICAST, 0, destprefix, NULL,
+ nexthop, NULL, NULL, distance, NULL, NULL);
}
DEFUN (ip_multicast_mode,
@@ -249,25 +247,24 @@ DEFUN (ip_multicast_mode,
"Lookup both, use entry with lower distance\n"
"Lookup both, use entry with longer prefix\n")
{
- char *mode = argv[3]->text;
-
- if (strmatch (mode, "urib-only"))
- multicast_mode_ipv4_set (MCAST_URIB_ONLY);
- else if (strmatch (mode, "mrib-only"))
- multicast_mode_ipv4_set (MCAST_MRIB_ONLY);
- else if (strmatch (mode, "mrib-then-urib"))
- multicast_mode_ipv4_set (MCAST_MIX_MRIB_FIRST);
- else if (strmatch (mode, "lower-distance"))
- multicast_mode_ipv4_set (MCAST_MIX_DISTANCE);
- else if (strmatch (mode, "longer-prefix"))
- multicast_mode_ipv4_set (MCAST_MIX_PFXLEN);
- else
- {
- vty_out (vty, "Invalid mode specified%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ char *mode = argv[3]->text;
+
+ if (strmatch(mode, "urib-only"))
+ multicast_mode_ipv4_set(MCAST_URIB_ONLY);
+ else if (strmatch(mode, "mrib-only"))
+ multicast_mode_ipv4_set(MCAST_MRIB_ONLY);
+ else if (strmatch(mode, "mrib-then-urib"))
+ multicast_mode_ipv4_set(MCAST_MIX_MRIB_FIRST);
+ else if (strmatch(mode, "lower-distance"))
+ multicast_mode_ipv4_set(MCAST_MIX_DISTANCE);
+ else if (strmatch(mode, "longer-prefix"))
+ multicast_mode_ipv4_set(MCAST_MIX_PFXLEN);
+ else {
+ vty_out(vty, "Invalid mode specified%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ip_multicast_mode,
@@ -283,8 +280,8 @@ DEFUN (no_ip_multicast_mode,
"Lookup both, use entry with lower distance\n"
"Lookup both, use entry with longer prefix\n")
{
- multicast_mode_ipv4_set (MCAST_NO_CONFIG);
- return CMD_SUCCESS;
+ multicast_mode_ipv4_set(MCAST_NO_CONFIG);
+ return CMD_SUCCESS;
}
@@ -295,7 +292,7 @@ DEFUN (show_ip_rpf,
IP_STR
"Display RPF information for multicast source\n")
{
- return do_show_ip_route(vty, VRF_DEFAULT_NAME, SAFI_MULTICAST, 0);
+ return do_show_ip_route(vty, VRF_DEFAULT_NAME, SAFI_MULTICAST, 0);
}
DEFUN (show_ip_rpf_addr,
@@ -306,64 +303,55 @@ DEFUN (show_ip_rpf_addr,
"Display RPF information for multicast source\n"
"IP multicast source address (e.g. 10.0.0.0)\n")
{
- int idx_ipv4 = 3;
- struct in_addr addr;
- struct route_node *rn;
- struct rib *rib;
- int ret;
-
- ret = inet_aton (argv[idx_ipv4]->arg, &addr);
- if (ret == 0)
- {
- vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- rib = rib_match_ipv4_multicast (VRF_DEFAULT, addr, &rn);
-
- if (rib)
- vty_show_ip_route_detail (vty, rn, 1);
- else
- vty_out (vty, "%% No match for RPF lookup%s", VTY_NEWLINE);
-
- return CMD_SUCCESS;
-}
-
-static void
-zebra_vty_ip_route_tdv_helper (int argc, struct cmd_token *argv[],
- int idx_curr, char **tag,
- char **distance, char **vrf, char **labels)
-{
- *distance = NULL;
- while (idx_curr < argc)
- {
- if (strmatch (argv[idx_curr]->text, "tag"))
- {
- if (tag)
- *tag = argv[idx_curr+1]->arg;
- idx_curr += 2;
- }
- else if (strmatch (argv[idx_curr]->text, "vrf"))
- {
- if (vrf)
- *vrf = argv[idx_curr+1]->arg;
- idx_curr += 2;
- }
- else if (strmatch (argv[idx_curr]->text, "label"))
- {
- if (labels)
- *labels = argv[idx_curr+1]->arg;
- idx_curr += 2;
- }
- else
- {
- if (distance)
- *distance = argv[idx_curr]->arg;
- idx_curr++;
- }
- }
-
- return;
+ int idx_ipv4 = 3;
+ struct in_addr addr;
+ struct route_node *rn;
+ struct rib *rib;
+ int ret;
+
+ ret = inet_aton(argv[idx_ipv4]->arg, &addr);
+ if (ret == 0) {
+ vty_out(vty, "%% Malformed address%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ rib = rib_match_ipv4_multicast(VRF_DEFAULT, addr, &rn);
+
+ if (rib)
+ vty_show_ip_route_detail(vty, rn, 1);
+ else
+ vty_out(vty, "%% No match for RPF lookup%s", VTY_NEWLINE);
+
+ return CMD_SUCCESS;
+}
+
+static void zebra_vty_ip_route_tdv_helper(int argc, struct cmd_token *argv[],
+ int idx_curr, char **tag,
+ char **distance, char **vrf,
+ char **labels)
+{
+ *distance = NULL;
+ while (idx_curr < argc) {
+ if (strmatch(argv[idx_curr]->text, "tag")) {
+ if (tag)
+ *tag = argv[idx_curr + 1]->arg;
+ idx_curr += 2;
+ } else if (strmatch(argv[idx_curr]->text, "vrf")) {
+ if (vrf)
+ *vrf = argv[idx_curr + 1]->arg;
+ idx_curr += 2;
+ } else if (strmatch(argv[idx_curr]->text, "label")) {
+ if (labels)
+ *labels = argv[idx_curr + 1]->arg;
+ idx_curr += 2;
+ } else {
+ if (distance)
+ *distance = argv[idx_curr]->arg;
+ idx_curr++;
+ }
+ }
+
+ return;
}
/* Static route configuration. */
@@ -381,20 +369,19 @@ DEFUN (ip_route,
"Distance value for this route\n"
VRF_CMD_HELP_STR)
{
- int idx_ipv4_prefixlen = 2;
- int idx_ipv4_ifname_null = 3;
- int idx_curr = 4;
- char *tag, *distance, *vrf;
+ int idx_ipv4_prefixlen = 2;
+ int idx_ipv4_ifname_null = 3;
+ int idx_curr = 4;
+ char *tag, *distance, *vrf;
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
- return zebra_static_ipv4 (vty, SAFI_UNICAST, 1,
- argv[idx_ipv4_prefixlen]->arg,
- NULL,
- argv[idx_ipv4_ifname_null]->arg,
- NULL,
- tag, distance, vrf, NULL);
+ return zebra_static_ipv4(vty, SAFI_UNICAST, 1,
+ argv[idx_ipv4_prefixlen]->arg, NULL,
+ argv[idx_ipv4_ifname_null]->arg, NULL, tag,
+ distance, vrf, NULL);
}
DEFUN (ip_route_flags,
@@ -412,20 +399,18 @@ DEFUN (ip_route_flags,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv4_prefixlen = 2;
- int idx_reject_blackhole = 3;
- int idx_curr = 4;
- char *tag, *distance, *vrf;
+ int idx_ipv4_prefixlen = 2;
+ int idx_reject_blackhole = 3;
+ int idx_curr = 4;
+ char *tag, *distance, *vrf;
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
- return zebra_static_ipv4 (vty, SAFI_UNICAST, 1,
- argv[idx_ipv4_prefixlen]->arg,
- NULL,
- NULL,
- argv[idx_reject_blackhole]->arg,
- tag, distance, vrf, NULL);
+ return zebra_static_ipv4(
+ vty, SAFI_UNICAST, 1, argv[idx_ipv4_prefixlen]->arg, NULL, NULL,
+ argv[idx_reject_blackhole]->arg, tag, distance, vrf, NULL);
}
/* Mask as A.B.C.D format. */
@@ -446,20 +431,20 @@ DEFUN (ip_route_mask,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv4 = 2;
- int idx_ipv4_2 = 3;
- int idx_ipv4_ifname_null = 4;
- int idx_curr = 5;
- char *tag, *distance, *vrf;
+ int idx_ipv4 = 2;
+ int idx_ipv4_2 = 3;
+ int idx_ipv4_ifname_null = 4;
+ int idx_curr = 5;
+ char *tag, *distance, *vrf;
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
- return zebra_static_ipv4 (vty, SAFI_UNICAST, 1,
- argv[idx_ipv4]->arg,
- argv[idx_ipv4_2]->arg,
- argv[idx_ipv4_ifname_null]->arg,
- NULL, tag, distance, vrf, NULL);
+ return zebra_static_ipv4(vty, SAFI_UNICAST, 1, argv[idx_ipv4]->arg,
+ argv[idx_ipv4_2]->arg,
+ argv[idx_ipv4_ifname_null]->arg, NULL, tag,
+ distance, vrf, NULL);
}
DEFUN (ip_route_mask_flags,
@@ -478,21 +463,20 @@ DEFUN (ip_route_mask_flags,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv4 = 2;
- int idx_ipv4_2 = 3;
- int idx_reject_blackhole = 4;
- int idx_curr = 5;
- char *tag, *distance, *vrf;
+ int idx_ipv4 = 2;
+ int idx_ipv4_2 = 3;
+ int idx_reject_blackhole = 4;
+ int idx_curr = 5;
+ char *tag, *distance, *vrf;
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
- return zebra_static_ipv4 (vty, SAFI_UNICAST, 1,
- argv[idx_ipv4]->arg,
- argv[idx_ipv4_2]->arg,
- NULL,
- argv[idx_reject_blackhole]->arg,
- tag, distance, vrf, NULL);
+ return zebra_static_ipv4(vty, SAFI_UNICAST, 1, argv[idx_ipv4]->arg,
+ argv[idx_ipv4_2]->arg, NULL,
+ argv[idx_reject_blackhole]->arg, tag, distance,
+ vrf, NULL);
}
DEFUN (no_ip_route,
@@ -512,20 +496,19 @@ DEFUN (no_ip_route,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv4_prefixlen = 3;
- int idx_ipv4_ifname_null = 4;
- int idx_curr = 5;
- char *tag, *distance, *vrf;
+ int idx_ipv4_prefixlen = 3;
+ int idx_ipv4_ifname_null = 4;
+ int idx_curr = 5;
+ char *tag, *distance, *vrf;
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
- return zebra_static_ipv4 (vty, SAFI_UNICAST, 0,
- argv[idx_ipv4_prefixlen]->arg,
- NULL,
- argv[idx_ipv4_ifname_null]->arg,
- NULL,
- tag, distance, vrf, NULL);
+ return zebra_static_ipv4(vty, SAFI_UNICAST, 0,
+ argv[idx_ipv4_prefixlen]->arg, NULL,
+ argv[idx_ipv4_ifname_null]->arg, NULL, tag,
+ distance, vrf, NULL);
}
DEFUN (no_ip_route_flags,
@@ -544,17 +527,17 @@ DEFUN (no_ip_route_flags,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv4_prefixlen = 3;
- int idx_curr = 5;
- char *tag, *distance, *vrf;
+ int idx_ipv4_prefixlen = 3;
+ int idx_curr = 5;
+ char *tag, *distance, *vrf;
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
- return zebra_static_ipv4 (vty, SAFI_UNICAST, 0,
- argv[idx_ipv4_prefixlen]->arg,
- NULL, NULL, NULL,
- tag, distance, vrf, NULL);
+ return zebra_static_ipv4(vty, SAFI_UNICAST, 0,
+ argv[idx_ipv4_prefixlen]->arg, NULL, NULL,
+ NULL, tag, distance, vrf, NULL);
}
DEFUN (no_ip_route_mask,
@@ -575,21 +558,20 @@ DEFUN (no_ip_route_mask,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv4 = 3;
- int idx_ipv4_2 = 4;
- int idx_ipv4_ifname_null = 5;
- int idx_curr = 6;
- char *tag, *distance, *vrf;
+ int idx_ipv4 = 3;
+ int idx_ipv4_2 = 4;
+ int idx_ipv4_ifname_null = 5;
+ int idx_curr = 6;
+ char *tag, *distance, *vrf;
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
- return zebra_static_ipv4 (vty, SAFI_UNICAST, 0,
- argv[idx_ipv4]->arg,
- argv[idx_ipv4_2]->arg,
- argv[idx_ipv4_ifname_null]->arg,
- NULL,
- tag, distance, vrf, NULL);
+ return zebra_static_ipv4(vty, SAFI_UNICAST, 0, argv[idx_ipv4]->arg,
+ argv[idx_ipv4_2]->arg,
+ argv[idx_ipv4_ifname_null]->arg, NULL, tag,
+ distance, vrf, NULL);
}
DEFUN (no_ip_route_mask_flags,
@@ -609,462 +591,509 @@ DEFUN (no_ip_route_mask_flags,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv4 = 3;
- int idx_ipv4_2 = 4;
- int idx_curr = 6;
- char *tag, *distance, *vrf;
+ int idx_ipv4 = 3;
+ int idx_ipv4_2 = 4;
+ int idx_curr = 6;
+ char *tag, *distance, *vrf;
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
- return zebra_static_ipv4 (vty, SAFI_UNICAST, 0,
- argv[idx_ipv4]->arg,
- argv[idx_ipv4_2]->arg,
- NULL, NULL,
- tag, distance, vrf, NULL);
+ return zebra_static_ipv4(vty, SAFI_UNICAST, 0, argv[idx_ipv4]->arg,
+ argv[idx_ipv4_2]->arg, NULL, NULL, tag,
+ distance, vrf, NULL);
}
/* New RIB. Detailed information for IPv4 route. */
-static void
-vty_show_ip_route_detail (struct vty *vty, struct route_node *rn, int mcast)
-{
- struct rib *rib;
- struct nexthop *nexthop, *tnexthop;
- int recursing;
- char buf[SRCDEST2STR_BUFFER];
- struct zebra_vrf *zvrf;
-
- RNODE_FOREACH_RIB (rn, rib)
- {
- const char *mcast_info = "";
- if (mcast)
- {
- rib_table_info_t *info = srcdest_rnode_table_info(rn);
- mcast_info = (info->safi == SAFI_MULTICAST)
- ? " using Multicast RIB"
- : " using Unicast RIB";
- }
-
- vty_out (vty, "Routing entry for %s%s%s",
- srcdest_rnode2str(rn, buf, sizeof(buf)), mcast_info,
- VTY_NEWLINE);
- vty_out (vty, " Known via \"%s", zebra_route_string (rib->type));
- if (rib->instance)
- vty_out (vty, "[%d]", rib->instance);
- vty_out (vty, "\"");
- vty_out (vty, ", distance %u, metric %u", rib->distance, rib->metric);
- if (rib->tag)
- vty_out (vty, ", tag %d", rib->tag);
- if (rib->mtu)
- vty_out (vty, ", mtu %u", rib->mtu);
- if (rib->vrf_id != VRF_DEFAULT)
- {
- zvrf = vrf_info_lookup(rib->vrf_id);
- vty_out (vty, ", vrf %s", zvrf_name (zvrf));
- }
- if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_SELECTED))
- vty_out (vty, ", best");
- if (rib->refcnt)
- vty_out (vty, ", refcnt %ld", rib->refcnt);
- if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_BLACKHOLE))
- vty_out (vty, ", blackhole");
- if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_REJECT))
- vty_out (vty, ", reject");
- vty_out (vty, "%s", VTY_NEWLINE);
-
- if (rib->type == ZEBRA_ROUTE_RIP
- || rib->type == ZEBRA_ROUTE_OSPF
- || rib->type == ZEBRA_ROUTE_ISIS
- || rib->type == ZEBRA_ROUTE_NHRP
- || rib->type == ZEBRA_ROUTE_TABLE
- || rib->type == ZEBRA_ROUTE_BGP)
- {
- time_t uptime;
- struct tm *tm;
-
- uptime = time (NULL);
- uptime -= rib->uptime;
- tm = gmtime (&uptime);
-
- vty_out (vty, " Last update ");
-
- if (uptime < ONE_DAY_SECOND)
- vty_out (vty, "%02d:%02d:%02d",
- tm->tm_hour, tm->tm_min, tm->tm_sec);
- else if (uptime < ONE_WEEK_SECOND)
- vty_out (vty, "%dd%02dh%02dm",
- tm->tm_yday, tm->tm_hour, tm->tm_min);
- else
- vty_out (vty, "%02dw%dd%02dh",
- tm->tm_yday/7,
- tm->tm_yday - ((tm->tm_yday/7) * 7), tm->tm_hour);
- vty_out (vty, " ago%s", VTY_NEWLINE);
- }
+static void vty_show_ip_route_detail(struct vty *vty, struct route_node *rn,
+ int mcast)
+{
+ struct rib *rib;
+ struct nexthop *nexthop, *tnexthop;
+ int recursing;
+ char buf[SRCDEST2STR_BUFFER];
+ struct zebra_vrf *zvrf;
- for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop, recursing))
- {
- char addrstr[32];
-
- vty_out (vty, " %c%s",
- CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB) ? '*' : ' ',
- recursing ? " " : "");
-
- switch (nexthop->type)
- {
- case NEXTHOP_TYPE_IPV4:
- case NEXTHOP_TYPE_IPV4_IFINDEX:
- vty_out (vty, " %s", inet_ntoa (nexthop->gate.ipv4));
- if (nexthop->ifindex)
- vty_out (vty, ", via %s",
- ifindex2ifname (nexthop->ifindex, rib->vrf_id));
- break;
- case NEXTHOP_TYPE_IPV6:
- case NEXTHOP_TYPE_IPV6_IFINDEX:
- vty_out (vty, " %s",
- inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, BUFSIZ));
- if (nexthop->ifindex)
- vty_out (vty, ", via %s",
- ifindex2ifname (nexthop->ifindex, rib->vrf_id));
- break;
- case NEXTHOP_TYPE_IFINDEX:
- vty_out (vty, " directly connected, %s",
- ifindex2ifname (nexthop->ifindex, rib->vrf_id));
- break;
- case NEXTHOP_TYPE_BLACKHOLE:
- vty_out (vty, " directly connected, Null0");
- break;
- default:
- break;
- }
- if (! CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE))
- vty_out (vty, " inactive");
-
- if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ONLINK))
- vty_out (vty, " onlink");
-
- if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_RECURSIVE))
- vty_out (vty, " (recursive)");
-
- switch (nexthop->type)
- {
- case NEXTHOP_TYPE_IPV4:
- case NEXTHOP_TYPE_IPV4_IFINDEX:
- if (nexthop->src.ipv4.s_addr)
- {
- if (inet_ntop(AF_INET, &nexthop->src.ipv4, addrstr,
- sizeof addrstr))
- vty_out (vty, ", src %s", addrstr);
- }
- break;
- case NEXTHOP_TYPE_IPV6:
- case NEXTHOP_TYPE_IPV6_IFINDEX:
- if (!IPV6_ADDR_SAME(&nexthop->src.ipv6, &in6addr_any))
- {
- if (inet_ntop(AF_INET6, &nexthop->src.ipv6, addrstr,
- sizeof addrstr))
- vty_out (vty, ", src %s", addrstr);
- }
- break;
- default:
- break;
- }
-
- /* Label information */
- if (nexthop->nh_label && nexthop->nh_label->num_labels)
- {
- vty_out (vty, " label %s",
- mpls_label2str (nexthop->nh_label->num_labels,
- nexthop->nh_label->label, buf, BUFSIZ));
- }
-
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-}
-
-static void
-vty_show_ip_route (struct vty *vty, struct route_node *rn, struct rib *rib,
- json_object *json)
-{
- struct nexthop *nexthop, *tnexthop;
- int recursing;
- int len = 0;
- char buf[SRCDEST2STR_BUFFER];
- json_object *json_nexthops = NULL;
- json_object *json_nexthop = NULL;
- json_object *json_route = NULL;
-
- if (json)
- {
- json_route = json_object_new_object();
- json_nexthops = json_object_new_array();
-
- json_object_string_add(json_route, "prefix", srcdest_rnode2str (rn, buf, sizeof buf));
- json_object_string_add(json_route, "protocol", zebra_route_string(rib->type));
-
- if (rib->instance)
- json_object_int_add(json_route, "instance", rib->instance);
-
- if (rib->vrf_id)
- json_object_int_add(json_route, "vrfId", rib->vrf_id);
-
- if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_SELECTED))
- json_object_boolean_true_add(json_route, "selected");
-
- if (rib->type != ZEBRA_ROUTE_CONNECT && rib->type != ZEBRA_ROUTE_KERNEL)
- {
- json_object_int_add(json_route, "distance", rib->distance);
- json_object_int_add(json_route, "metric", rib->metric);
- }
-
- if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_BLACKHOLE))
- json_object_boolean_true_add(json_route, "blackhole");
-
- if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_REJECT))
- json_object_boolean_true_add(json_route, "reject");
-
- if (rib->type == ZEBRA_ROUTE_RIP
- || rib->type == ZEBRA_ROUTE_OSPF
- || rib->type == ZEBRA_ROUTE_ISIS
- || rib->type == ZEBRA_ROUTE_NHRP
- || rib->type == ZEBRA_ROUTE_TABLE
- || rib->type == ZEBRA_ROUTE_BGP)
- {
- time_t uptime;
- struct tm *tm;
-
- uptime = time (NULL);
- uptime -= rib->uptime;
- tm = gmtime (&uptime);
-
- if (uptime < ONE_DAY_SECOND)
- sprintf(buf, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec);
- else if (uptime < ONE_WEEK_SECOND)
- sprintf(buf, "%dd%02dh%02dm", tm->tm_yday, tm->tm_hour, tm->tm_min);
- else
- sprintf(buf, "%02dw%dd%02dh", tm->tm_yday/7, tm->tm_yday - ((tm->tm_yday/7) * 7), tm->tm_hour);
-
- json_object_string_add(json_route, "uptime", buf);
- }
-
- for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop, recursing))
- {
- json_nexthop = json_object_new_object();
-
- if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB))
- json_object_boolean_true_add(json_nexthop, "fib");
-
- switch (nexthop->type)
- {
- case NEXTHOP_TYPE_IPV4:
- case NEXTHOP_TYPE_IPV4_IFINDEX:
- json_object_string_add(json_nexthop, "ip", inet_ntoa (nexthop->gate.ipv4));
- json_object_string_add(json_nexthop, "afi", "ipv4");
-
- if (nexthop->ifindex)
- {
- json_object_int_add(json_nexthop, "interfaceIndex", nexthop->ifindex);
- json_object_string_add(json_nexthop, "interfaceName", ifindex2ifname (nexthop->ifindex, rib->vrf_id));
- }
- break;
- case NEXTHOP_TYPE_IPV6:
- case NEXTHOP_TYPE_IPV6_IFINDEX:
- json_object_string_add(json_nexthop, "ip", inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, BUFSIZ));
- json_object_string_add(json_nexthop, "afi", "ipv6");
-
- if (nexthop->ifindex)
- {
- json_object_int_add(json_nexthop, "interfaceIndex", nexthop->ifindex);
- json_object_string_add(json_nexthop, "interfaceName", ifindex2ifname (nexthop->ifindex, rib->vrf_id));
- }
- break;
-
- case NEXTHOP_TYPE_IFINDEX:
- json_object_boolean_true_add(json_nexthop, "directlyConnected");
- json_object_int_add(json_nexthop, "interfaceIndex", nexthop->ifindex);
- json_object_string_add(json_nexthop, "interfaceName", ifindex2ifname (nexthop->ifindex, rib->vrf_id));
- break;
- case NEXTHOP_TYPE_BLACKHOLE:
- json_object_boolean_true_add(json_nexthop, "blackhole");
- break;
- default:
- break;
- }
-
- if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE))
- json_object_boolean_true_add(json_nexthop, "active");
-
- if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ONLINK))
- json_object_boolean_true_add(json_nexthop, "onLink");
-
- if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_RECURSIVE))
- json_object_boolean_true_add(json_nexthop, "recursive");
-
- switch (nexthop->type)
- {
- case NEXTHOP_TYPE_IPV4:
- case NEXTHOP_TYPE_IPV4_IFINDEX:
- if (nexthop->src.ipv4.s_addr)
- {
- if (inet_ntop(AF_INET, &nexthop->src.ipv4, buf, sizeof buf))
- json_object_string_add(json_nexthop, "source", buf);
- }
- break;
- case NEXTHOP_TYPE_IPV6:
- case NEXTHOP_TYPE_IPV6_IFINDEX:
- if (!IPV6_ADDR_SAME(&nexthop->src.ipv6, &in6addr_any))
- {
- if (inet_ntop(AF_INET6, &nexthop->src.ipv6, buf, sizeof buf))
- json_object_string_add(json_nexthop, "source", buf);
- }
- break;
- default:
- break;
- }
-
- if (nexthop->nh_label && nexthop->nh_label->num_labels)
- {
- json_object_string_add(json_nexthop, "labels",
- mpls_label2str (nexthop->nh_label->num_labels,
- nexthop->nh_label->label, buf, BUFSIZ));
- }
-
- json_object_array_add(json_nexthops, json_nexthop);
- }
-
- json_object_object_add(json_route, "nexthops", json_nexthops);
- json_object_array_add(json, json_route);
- return;
- }
-
- /* Nexthop information. */
- for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop, recursing))
- {
- if (nexthop == rib->nexthop)
- {
- /* Prefix information. */
- len = vty_out (vty, "%c", zebra_route_char (rib->type));
- if (rib->instance)
- len += vty_out (vty, "[%d]", rib->instance);
- len += vty_out (vty, "%c%c %s",
- CHECK_FLAG (rib->flags, ZEBRA_FLAG_SELECTED)
- ? '>' : ' ',
- CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB)
- ? '*' : ' ',
- srcdest_rnode2str (rn, buf, sizeof buf));
-
- /* Distance and metric display. */
- if (rib->type != ZEBRA_ROUTE_CONNECT
- && rib->type != ZEBRA_ROUTE_KERNEL)
- len += vty_out (vty, " [%d/%d]", rib->distance,
- rib->metric);
- }
- else
- vty_out (vty, " %c%*c",
- CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB)
- ? '*' : ' ',
- len - 3 + (2 * recursing), ' ');
-
- switch (nexthop->type)
- {
- case NEXTHOP_TYPE_IPV4:
- case NEXTHOP_TYPE_IPV4_IFINDEX:
- vty_out (vty, " via %s", inet_ntoa (nexthop->gate.ipv4));
- if (nexthop->ifindex)
- vty_out (vty, ", %s",
- ifindex2ifname (nexthop->ifindex, rib->vrf_id));
- break;
- case NEXTHOP_TYPE_IPV6:
- case NEXTHOP_TYPE_IPV6_IFINDEX:
- vty_out (vty, " via %s",
- inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, BUFSIZ));
- if (nexthop->ifindex)
- vty_out (vty, ", %s",
- ifindex2ifname (nexthop->ifindex, rib->vrf_id));
- break;
-
- case NEXTHOP_TYPE_IFINDEX:
- vty_out (vty, " is directly connected, %s",
- ifindex2ifname (nexthop->ifindex, rib->vrf_id));
- break;
- case NEXTHOP_TYPE_BLACKHOLE:
- vty_out (vty, " is directly connected, Null0");
- break;
- default:
- break;
- }
- if (! CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE))
- vty_out (vty, " inactive");
-
- if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ONLINK))
- vty_out (vty, " onlink");
-
- if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_RECURSIVE))
- vty_out (vty, " (recursive)");
-
- switch (nexthop->type)
- {
- case NEXTHOP_TYPE_IPV4:
- case NEXTHOP_TYPE_IPV4_IFINDEX:
- if (nexthop->src.ipv4.s_addr)
- {
- if (inet_ntop(AF_INET, &nexthop->src.ipv4, buf, sizeof buf))
- vty_out (vty, ", src %s", buf);
- }
- break;
- case NEXTHOP_TYPE_IPV6:
- case NEXTHOP_TYPE_IPV6_IFINDEX:
- if (!IPV6_ADDR_SAME(&nexthop->src.ipv6, &in6addr_any))
- {
- if (inet_ntop(AF_INET6, &nexthop->src.ipv6, buf, sizeof buf))
- vty_out (vty, ", src %s", buf);
- }
- break;
- default:
- break;
- }
-
- /* Label information */
- if (nexthop->nh_label && nexthop->nh_label->num_labels)
- {
- vty_out (vty, " label %s",
- mpls_label2str (nexthop->nh_label->num_labels,
- nexthop->nh_label->label, buf, BUFSIZ));
- }
-
- if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_BLACKHOLE))
- vty_out (vty, ", bh");
- if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_REJECT))
- vty_out (vty, ", rej");
-
- if (rib->type == ZEBRA_ROUTE_RIP
- || rib->type == ZEBRA_ROUTE_OSPF
- || rib->type == ZEBRA_ROUTE_ISIS
- || rib->type == ZEBRA_ROUTE_NHRP
- || rib->type == ZEBRA_ROUTE_TABLE
- || rib->type == ZEBRA_ROUTE_BGP)
+ RNODE_FOREACH_RIB(rn, rib)
{
- time_t uptime;
- struct tm *tm;
+ const char *mcast_info = "";
+ if (mcast) {
+ rib_table_info_t *info = srcdest_rnode_table_info(rn);
+ mcast_info = (info->safi == SAFI_MULTICAST)
+ ? " using Multicast RIB"
+ : " using Unicast RIB";
+ }
+
+ vty_out(vty, "Routing entry for %s%s%s",
+ srcdest_rnode2str(rn, buf, sizeof(buf)), mcast_info,
+ VTY_NEWLINE);
+ vty_out(vty, " Known via \"%s", zebra_route_string(rib->type));
+ if (rib->instance)
+ vty_out(vty, "[%d]", rib->instance);
+ vty_out(vty, "\"");
+ vty_out(vty, ", distance %u, metric %u", rib->distance,
+ rib->metric);
+ if (rib->tag)
+ vty_out(vty, ", tag %d", rib->tag);
+ if (rib->mtu)
+ vty_out(vty, ", mtu %u", rib->mtu);
+ if (rib->vrf_id != VRF_DEFAULT) {
+ zvrf = vrf_info_lookup(rib->vrf_id);
+ vty_out(vty, ", vrf %s", zvrf_name(zvrf));
+ }
+ if (CHECK_FLAG(rib->flags, ZEBRA_FLAG_SELECTED))
+ vty_out(vty, ", best");
+ if (rib->refcnt)
+ vty_out(vty, ", refcnt %ld", rib->refcnt);
+ if (CHECK_FLAG(rib->flags, ZEBRA_FLAG_BLACKHOLE))
+ vty_out(vty, ", blackhole");
+ if (CHECK_FLAG(rib->flags, ZEBRA_FLAG_REJECT))
+ vty_out(vty, ", reject");
+ vty_out(vty, "%s", VTY_NEWLINE);
+
+ if (rib->type == ZEBRA_ROUTE_RIP
+ || rib->type == ZEBRA_ROUTE_OSPF
+ || rib->type == ZEBRA_ROUTE_ISIS
+ || rib->type == ZEBRA_ROUTE_NHRP
+ || rib->type == ZEBRA_ROUTE_TABLE
+ || rib->type == ZEBRA_ROUTE_BGP) {
+ time_t uptime;
+ struct tm *tm;
+
+ uptime = time(NULL);
+ uptime -= rib->uptime;
+ tm = gmtime(&uptime);
+
+ vty_out(vty, " Last update ");
+
+ if (uptime < ONE_DAY_SECOND)
+ vty_out(vty, "%02d:%02d:%02d", tm->tm_hour,
+ tm->tm_min, tm->tm_sec);
+ else if (uptime < ONE_WEEK_SECOND)
+ vty_out(vty, "%dd%02dh%02dm", tm->tm_yday,
+ tm->tm_hour, tm->tm_min);
+ else
+ vty_out(vty, "%02dw%dd%02dh", tm->tm_yday / 7,
+ tm->tm_yday - ((tm->tm_yday / 7) * 7),
+ tm->tm_hour);
+ vty_out(vty, " ago%s", VTY_NEWLINE);
+ }
+
+ for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop,
+ recursing)) {
+ char addrstr[32];
+
+ vty_out(vty, " %c%s",
+ CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_FIB)
+ ? '*'
+ : ' ',
+ recursing ? " " : "");
+
+ switch (nexthop->type) {
+ case NEXTHOP_TYPE_IPV4:
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ vty_out(vty, " %s",
+ inet_ntoa(nexthop->gate.ipv4));
+ if (nexthop->ifindex)
+ vty_out(vty, ", via %s",
+ ifindex2ifname(nexthop->ifindex,
+ rib->vrf_id));
+ break;
+ case NEXTHOP_TYPE_IPV6:
+ case NEXTHOP_TYPE_IPV6_IFINDEX:
+ vty_out(vty, " %s",
+ inet_ntop(AF_INET6, &nexthop->gate.ipv6,
+ buf, BUFSIZ));
+ if (nexthop->ifindex)
+ vty_out(vty, ", via %s",
+ ifindex2ifname(nexthop->ifindex,
+ rib->vrf_id));
+ break;
+ case NEXTHOP_TYPE_IFINDEX:
+ vty_out(vty, " directly connected, %s",
+ ifindex2ifname(nexthop->ifindex,
+ rib->vrf_id));
+ break;
+ case NEXTHOP_TYPE_BLACKHOLE:
+ vty_out(vty, " directly connected, Null0");
+ break;
+ default:
+ break;
+ }
+ if (!CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE))
+ vty_out(vty, " inactive");
+
+ if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_ONLINK))
+ vty_out(vty, " onlink");
+
+ if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_RECURSIVE))
+ vty_out(vty, " (recursive)");
+
+ switch (nexthop->type) {
+ case NEXTHOP_TYPE_IPV4:
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ if (nexthop->src.ipv4.s_addr) {
+ if (inet_ntop(AF_INET,
+ &nexthop->src.ipv4,
+ addrstr, sizeof addrstr))
+ vty_out(vty, ", src %s",
+ addrstr);
+ }
+ break;
+ case NEXTHOP_TYPE_IPV6:
+ case NEXTHOP_TYPE_IPV6_IFINDEX:
+ if (!IPV6_ADDR_SAME(&nexthop->src.ipv6,
+ &in6addr_any)) {
+ if (inet_ntop(AF_INET6,
+ &nexthop->src.ipv6,
+ addrstr, sizeof addrstr))
+ vty_out(vty, ", src %s",
+ addrstr);
+ }
+ break;
+ default:
+ break;
+ }
+
+ /* Label information */
+ if (nexthop->nh_label
+ && nexthop->nh_label->num_labels) {
+ vty_out(vty, " label %s",
+ mpls_label2str(
+ nexthop->nh_label->num_labels,
+ nexthop->nh_label->label, buf,
+ BUFSIZ));
+ }
+
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+}
- uptime = time (NULL);
- uptime -= rib->uptime;
- tm = gmtime (&uptime);
+static void vty_show_ip_route(struct vty *vty, struct route_node *rn,
+ struct rib *rib, json_object *json)
+{
+ struct nexthop *nexthop, *tnexthop;
+ int recursing;
+ int len = 0;
+ char buf[SRCDEST2STR_BUFFER];
+ json_object *json_nexthops = NULL;
+ json_object *json_nexthop = NULL;
+ json_object *json_route = NULL;
+
+ if (json) {
+ json_route = json_object_new_object();
+ json_nexthops = json_object_new_array();
+
+ json_object_string_add(json_route, "prefix",
+ srcdest_rnode2str(rn, buf, sizeof buf));
+ json_object_string_add(json_route, "protocol",
+ zebra_route_string(rib->type));
+
+ if (rib->instance)
+ json_object_int_add(json_route, "instance",
+ rib->instance);
+
+ if (rib->vrf_id)
+ json_object_int_add(json_route, "vrfId", rib->vrf_id);
+
+ if (CHECK_FLAG(rib->flags, ZEBRA_FLAG_SELECTED))
+ json_object_boolean_true_add(json_route, "selected");
+
+ if (rib->type != ZEBRA_ROUTE_CONNECT
+ && rib->type != ZEBRA_ROUTE_KERNEL) {
+ json_object_int_add(json_route, "distance",
+ rib->distance);
+ json_object_int_add(json_route, "metric", rib->metric);
+ }
+
+ if (CHECK_FLAG(rib->flags, ZEBRA_FLAG_BLACKHOLE))
+ json_object_boolean_true_add(json_route, "blackhole");
+
+ if (CHECK_FLAG(rib->flags, ZEBRA_FLAG_REJECT))
+ json_object_boolean_true_add(json_route, "reject");
+
+ if (rib->type == ZEBRA_ROUTE_RIP
+ || rib->type == ZEBRA_ROUTE_OSPF
+ || rib->type == ZEBRA_ROUTE_ISIS
+ || rib->type == ZEBRA_ROUTE_NHRP
+ || rib->type == ZEBRA_ROUTE_TABLE
+ || rib->type == ZEBRA_ROUTE_BGP) {
+ time_t uptime;
+ struct tm *tm;
+
+ uptime = time(NULL);
+ uptime -= rib->uptime;
+ tm = gmtime(&uptime);
+
+ if (uptime < ONE_DAY_SECOND)
+ sprintf(buf, "%02d:%02d:%02d", tm->tm_hour,
+ tm->tm_min, tm->tm_sec);
+ else if (uptime < ONE_WEEK_SECOND)
+ sprintf(buf, "%dd%02dh%02dm", tm->tm_yday,
+ tm->tm_hour, tm->tm_min);
+ else
+ sprintf(buf, "%02dw%dd%02dh", tm->tm_yday / 7,
+ tm->tm_yday - ((tm->tm_yday / 7) * 7),
+ tm->tm_hour);
+
+ json_object_string_add(json_route, "uptime", buf);
+ }
+
+ for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop,
+ recursing)) {
+ json_nexthop = json_object_new_object();
+
+ if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_FIB))
+ json_object_boolean_true_add(json_nexthop,
+ "fib");
+
+ switch (nexthop->type) {
+ case NEXTHOP_TYPE_IPV4:
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ json_object_string_add(
+ json_nexthop, "ip",
+ inet_ntoa(nexthop->gate.ipv4));
+ json_object_string_add(json_nexthop, "afi",
+ "ipv4");
+
+ if (nexthop->ifindex) {
+ json_object_int_add(json_nexthop,
+ "interfaceIndex",
+ nexthop->ifindex);
+ json_object_string_add(
+ json_nexthop, "interfaceName",
+ ifindex2ifname(nexthop->ifindex,
+ rib->vrf_id));
+ }
+ break;
+ case NEXTHOP_TYPE_IPV6:
+ case NEXTHOP_TYPE_IPV6_IFINDEX:
+ json_object_string_add(
+ json_nexthop, "ip",
+ inet_ntop(AF_INET6, &nexthop->gate.ipv6,
+ buf, BUFSIZ));
+ json_object_string_add(json_nexthop, "afi",
+ "ipv6");
+
+ if (nexthop->ifindex) {
+ json_object_int_add(json_nexthop,
+ "interfaceIndex",
+ nexthop->ifindex);
+ json_object_string_add(
+ json_nexthop, "interfaceName",
+ ifindex2ifname(nexthop->ifindex,
+ rib->vrf_id));
+ }
+ break;
+
+ case NEXTHOP_TYPE_IFINDEX:
+ json_object_boolean_true_add(
+ json_nexthop, "directlyConnected");
+ json_object_int_add(json_nexthop,
+ "interfaceIndex",
+ nexthop->ifindex);
+ json_object_string_add(
+ json_nexthop, "interfaceName",
+ ifindex2ifname(nexthop->ifindex,
+ rib->vrf_id));
+ break;
+ case NEXTHOP_TYPE_BLACKHOLE:
+ json_object_boolean_true_add(json_nexthop,
+ "blackhole");
+ break;
+ default:
+ break;
+ }
+
+ if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE))
+ json_object_boolean_true_add(json_nexthop,
+ "active");
+
+ if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_ONLINK))
+ json_object_boolean_true_add(json_nexthop,
+ "onLink");
+
+ if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_RECURSIVE))
+ json_object_boolean_true_add(json_nexthop,
+ "recursive");
+
+ switch (nexthop->type) {
+ case NEXTHOP_TYPE_IPV4:
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ if (nexthop->src.ipv4.s_addr) {
+ if (inet_ntop(AF_INET,
+ &nexthop->src.ipv4, buf,
+ sizeof buf))
+ json_object_string_add(
+ json_nexthop, "source",
+ buf);
+ }
+ break;
+ case NEXTHOP_TYPE_IPV6:
+ case NEXTHOP_TYPE_IPV6_IFINDEX:
+ if (!IPV6_ADDR_SAME(&nexthop->src.ipv6,
+ &in6addr_any)) {
+ if (inet_ntop(AF_INET6,
+ &nexthop->src.ipv6, buf,
+ sizeof buf))
+ json_object_string_add(
+ json_nexthop, "source",
+ buf);
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (nexthop->nh_label
+ && nexthop->nh_label->num_labels) {
+ json_object_string_add(
+ json_nexthop, "labels",
+ mpls_label2str(
+ nexthop->nh_label->num_labels,
+ nexthop->nh_label->label, buf,
+ BUFSIZ));
+ }
+
+ json_object_array_add(json_nexthops, json_nexthop);
+ }
+
+ json_object_object_add(json_route, "nexthops", json_nexthops);
+ json_object_array_add(json, json_route);
+ return;
+ }
- if (uptime < ONE_DAY_SECOND)
- vty_out (vty, ", %02d:%02d:%02d",
- tm->tm_hour, tm->tm_min, tm->tm_sec);
- else if (uptime < ONE_WEEK_SECOND)
- vty_out (vty, ", %dd%02dh%02dm",
- tm->tm_yday, tm->tm_hour, tm->tm_min);
- else
- vty_out (vty, ", %02dw%dd%02dh",
- tm->tm_yday/7,
- tm->tm_yday - ((tm->tm_yday/7) * 7), tm->tm_hour);
+ /* Nexthop information. */
+ for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop, recursing)) {
+ if (nexthop == rib->nexthop) {
+ /* Prefix information. */
+ len = vty_out(vty, "%c", zebra_route_char(rib->type));
+ if (rib->instance)
+ len += vty_out(vty, "[%d]", rib->instance);
+ len += vty_out(
+ vty, "%c%c %s",
+ CHECK_FLAG(rib->flags, ZEBRA_FLAG_SELECTED)
+ ? '>'
+ : ' ',
+ CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_FIB)
+ ? '*'
+ : ' ',
+ srcdest_rnode2str(rn, buf, sizeof buf));
+
+ /* Distance and metric display. */
+ if (rib->type != ZEBRA_ROUTE_CONNECT
+ && rib->type != ZEBRA_ROUTE_KERNEL)
+ len += vty_out(vty, " [%d/%d]", rib->distance,
+ rib->metric);
+ } else
+ vty_out(vty, " %c%*c",
+ CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_FIB)
+ ? '*'
+ : ' ',
+ len - 3 + (2 * recursing), ' ');
+
+ switch (nexthop->type) {
+ case NEXTHOP_TYPE_IPV4:
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ vty_out(vty, " via %s", inet_ntoa(nexthop->gate.ipv4));
+ if (nexthop->ifindex)
+ vty_out(vty, ", %s",
+ ifindex2ifname(nexthop->ifindex,
+ rib->vrf_id));
+ break;
+ case NEXTHOP_TYPE_IPV6:
+ case NEXTHOP_TYPE_IPV6_IFINDEX:
+ vty_out(vty, " via %s",
+ inet_ntop(AF_INET6, &nexthop->gate.ipv6, buf,
+ BUFSIZ));
+ if (nexthop->ifindex)
+ vty_out(vty, ", %s",
+ ifindex2ifname(nexthop->ifindex,
+ rib->vrf_id));
+ break;
+
+ case NEXTHOP_TYPE_IFINDEX:
+ vty_out(vty, " is directly connected, %s",
+ ifindex2ifname(nexthop->ifindex, rib->vrf_id));
+ break;
+ case NEXTHOP_TYPE_BLACKHOLE:
+ vty_out(vty, " is directly connected, Null0");
+ break;
+ default:
+ break;
+ }
+ if (!CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE))
+ vty_out(vty, " inactive");
+
+ if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_ONLINK))
+ vty_out(vty, " onlink");
+
+ if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_RECURSIVE))
+ vty_out(vty, " (recursive)");
+
+ switch (nexthop->type) {
+ case NEXTHOP_TYPE_IPV4:
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ if (nexthop->src.ipv4.s_addr) {
+ if (inet_ntop(AF_INET, &nexthop->src.ipv4, buf,
+ sizeof buf))
+ vty_out(vty, ", src %s", buf);
+ }
+ break;
+ case NEXTHOP_TYPE_IPV6:
+ case NEXTHOP_TYPE_IPV6_IFINDEX:
+ if (!IPV6_ADDR_SAME(&nexthop->src.ipv6, &in6addr_any)) {
+ if (inet_ntop(AF_INET6, &nexthop->src.ipv6, buf,
+ sizeof buf))
+ vty_out(vty, ", src %s", buf);
+ }
+ break;
+ default:
+ break;
+ }
+
+ /* Label information */
+ if (nexthop->nh_label && nexthop->nh_label->num_labels) {
+ vty_out(vty, " label %s",
+ mpls_label2str(nexthop->nh_label->num_labels,
+ nexthop->nh_label->label, buf,
+ BUFSIZ));
+ }
+
+ if (CHECK_FLAG(rib->flags, ZEBRA_FLAG_BLACKHOLE))
+ vty_out(vty, ", bh");
+ if (CHECK_FLAG(rib->flags, ZEBRA_FLAG_REJECT))
+ vty_out(vty, ", rej");
+
+ if (rib->type == ZEBRA_ROUTE_RIP
+ || rib->type == ZEBRA_ROUTE_OSPF
+ || rib->type == ZEBRA_ROUTE_ISIS
+ || rib->type == ZEBRA_ROUTE_NHRP
+ || rib->type == ZEBRA_ROUTE_TABLE
+ || rib->type == ZEBRA_ROUTE_BGP) {
+ time_t uptime;
+ struct tm *tm;
+
+ uptime = time(NULL);
+ uptime -= rib->uptime;
+ tm = gmtime(&uptime);
+
+ if (uptime < ONE_DAY_SECOND)
+ vty_out(vty, ", %02d:%02d:%02d", tm->tm_hour,
+ tm->tm_min, tm->tm_sec);
+ else if (uptime < ONE_WEEK_SECOND)
+ vty_out(vty, ", %dd%02dh%02dm", tm->tm_yday,
+ tm->tm_hour, tm->tm_min);
+ else
+ vty_out(vty, ", %02dw%dd%02dh", tm->tm_yday / 7,
+ tm->tm_yday - ((tm->tm_yday / 7) * 7),
+ tm->tm_hour);
+ }
+ vty_out(vty, "%s", VTY_NEWLINE);
}
- vty_out (vty, "%s", VTY_NEWLINE);
- }
}
DEFUN (show_ip_route,
@@ -1075,91 +1104,85 @@ DEFUN (show_ip_route,
"IP routing table\n"
JSON_STR)
{
- return do_show_ip_route (vty, VRF_DEFAULT_NAME, SAFI_UNICAST, use_json(argc, argv));
-}
-
-static int
-do_show_ip_route (struct vty *vty, const char *vrf_name, safi_t safi,
- u_char use_json)
-{
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- int first = 1;
- struct zebra_vrf *zvrf = NULL;
- char buf[BUFSIZ];
- json_object *json = NULL;
- json_object *json_prefix = NULL;
-
- if (!(zvrf = zebra_vrf_lookup_by_name (vrf_name)))
- {
- if (use_json)
- vty_out (vty, "{}%s", VTY_NEWLINE);
- else
- vty_out (vty, "vrf %s not defined%s", vrf_name, VTY_NEWLINE);
- return CMD_SUCCESS;
- }
-
- if (zvrf_id (zvrf) == VRF_UNKNOWN)
- {
- if (use_json)
- vty_out (vty, "{}%s", VTY_NEWLINE);
- else
- vty_out (vty, "vrf %s inactive%s", vrf_name, VTY_NEWLINE);
- return CMD_SUCCESS;
- }
-
- table = zebra_vrf_table (AFI_IP, safi, zvrf_id (zvrf));
- if (! table)
- {
- if (use_json)
- vty_out (vty, "{}%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
-
- if (use_json)
- {
- json = json_object_new_object();
-
- /* Show all IPv4 routes. */
- for (rn = route_top (table); rn; rn = route_next (rn))
- {
- RNODE_FOREACH_RIB (rn, rib)
- {
- if (!json_prefix)
- json_prefix = json_object_new_array();
- vty_show_ip_route (vty, rn, rib, json_prefix);
- }
-
- if (json_prefix)
- {
- prefix2str (&rn->p, buf, sizeof buf);
- json_object_object_add(json, buf, json_prefix);
- json_prefix = NULL;
- }
- }
-
- vty_out (vty, "%s%s", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY), VTY_NEWLINE);
- json_object_free(json);
- }
- else
- {
- /* Show all IPv4 routes. */
- for (rn = route_top (table); rn; rn = route_next (rn))
- {
- RNODE_FOREACH_RIB (rn, rib)
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V4_HEADER);
- first = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- }
- }
-
- return CMD_SUCCESS;
+ return do_show_ip_route(vty, VRF_DEFAULT_NAME, SAFI_UNICAST,
+ use_json(argc, argv));
+}
+
+static int do_show_ip_route(struct vty *vty, const char *vrf_name, safi_t safi,
+ u_char use_json)
+{
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ int first = 1;
+ struct zebra_vrf *zvrf = NULL;
+ char buf[BUFSIZ];
+ json_object *json = NULL;
+ json_object *json_prefix = NULL;
+
+ if (!(zvrf = zebra_vrf_lookup_by_name(vrf_name))) {
+ if (use_json)
+ vty_out(vty, "{}%s", VTY_NEWLINE);
+ else
+ vty_out(vty, "vrf %s not defined%s", vrf_name,
+ VTY_NEWLINE);
+ return CMD_SUCCESS;
+ }
+
+ if (zvrf_id(zvrf) == VRF_UNKNOWN) {
+ if (use_json)
+ vty_out(vty, "{}%s", VTY_NEWLINE);
+ else
+ vty_out(vty, "vrf %s inactive%s", vrf_name,
+ VTY_NEWLINE);
+ return CMD_SUCCESS;
+ }
+
+ table = zebra_vrf_table(AFI_IP, safi, zvrf_id(zvrf));
+ if (!table) {
+ if (use_json)
+ vty_out(vty, "{}%s", VTY_NEWLINE);
+ return CMD_SUCCESS;
+ }
+
+ if (use_json) {
+ json = json_object_new_object();
+
+ /* Show all IPv4 routes. */
+ for (rn = route_top(table); rn; rn = route_next(rn)) {
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ if (!json_prefix)
+ json_prefix = json_object_new_array();
+ vty_show_ip_route(vty, rn, rib, json_prefix);
+ }
+
+ if (json_prefix) {
+ prefix2str(&rn->p, buf, sizeof buf);
+ json_object_object_add(json, buf, json_prefix);
+ json_prefix = NULL;
+ }
+ }
+
+ vty_out(vty, "%s%s", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY),
+ VTY_NEWLINE);
+ json_object_free(json);
+ } else {
+ /* Show all IPv4 routes. */
+ for (rn = route_top(table); rn; rn = route_next(rn)) {
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V4_HEADER);
+ first = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ }
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_vrf,
@@ -1171,10 +1194,10 @@ DEFUN (show_ip_route_vrf,
VRF_CMD_HELP_STR
JSON_STR)
{
- int idx_vrf = 4;
- u_char uj = use_json(argc, argv);
+ int idx_vrf = 4;
+ u_char uj = use_json(argc, argv);
- return do_show_ip_route (vty, argv[idx_vrf]->arg, SAFI_UNICAST, uj);
+ return do_show_ip_route(vty, argv[idx_vrf]->arg, SAFI_UNICAST, uj);
}
DEFUN (show_ip_nht,
@@ -1185,14 +1208,14 @@ DEFUN (show_ip_nht,
"IP nexthop tracking table\n"
VRF_CMD_HELP_STR)
{
- int idx_vrf = 4;
- vrf_id_t vrf_id = VRF_DEFAULT;
+ int idx_vrf = 4;
+ vrf_id_t vrf_id = VRF_DEFAULT;
- if (argc == 5)
- VRF_GET_ID (vrf_id, argv[idx_vrf]->arg);
+ if (argc == 5)
+ VRF_GET_ID(vrf_id, argv[idx_vrf]->arg);
- zebra_print_rnh_table(vrf_id, AF_INET, vty, RNH_NEXTHOP_TYPE);
- return CMD_SUCCESS;
+ zebra_print_rnh_table(vrf_id, AF_INET, vty, RNH_NEXTHOP_TYPE);
+ return CMD_SUCCESS;
}
@@ -1204,17 +1227,18 @@ DEFUN (show_ip_nht_vrf_all,
"IP nexthop tracking table\n"
VRF_ALL_CMD_HELP_STR)
{
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- if ((zvrf = vrf->info) != NULL)
- {
- vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
- zebra_print_rnh_table(zvrf_id (zvrf), AF_INET, vty, RNH_NEXTHOP_TYPE);
- }
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ if ((zvrf = vrf->info) != NULL) {
+ vty_out(vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name(zvrf),
+ VTY_NEWLINE);
+ zebra_print_rnh_table(zvrf_id(zvrf), AF_INET, vty,
+ RNH_NEXTHOP_TYPE);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_nht,
@@ -1225,14 +1249,14 @@ DEFUN (show_ipv6_nht,
"IPv6 nexthop tracking table\n"
VRF_CMD_HELP_STR)
{
- int idx_vrf = 4;
- vrf_id_t vrf_id = VRF_DEFAULT;
+ int idx_vrf = 4;
+ vrf_id_t vrf_id = VRF_DEFAULT;
- if (argc == 5)
- VRF_GET_ID (vrf_id, argv[idx_vrf]->arg);
+ if (argc == 5)
+ VRF_GET_ID(vrf_id, argv[idx_vrf]->arg);
- zebra_print_rnh_table(vrf_id, AF_INET6, vty, RNH_NEXTHOP_TYPE);
- return CMD_SUCCESS;
+ zebra_print_rnh_table(vrf_id, AF_INET6, vty, RNH_NEXTHOP_TYPE);
+ return CMD_SUCCESS;
}
@@ -1244,17 +1268,18 @@ DEFUN (show_ipv6_nht_vrf_all,
"IPv6 nexthop tracking table\n"
VRF_ALL_CMD_HELP_STR)
{
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- if ((zvrf = vrf->info) != NULL)
- {
- vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
- zebra_print_rnh_table(zvrf_id (zvrf), AF_INET6, vty, RNH_NEXTHOP_TYPE);
- }
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ if ((zvrf = vrf->info) != NULL) {
+ vty_out(vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name(zvrf),
+ VTY_NEWLINE);
+ zebra_print_rnh_table(zvrf_id(zvrf), AF_INET6, vty,
+ RNH_NEXTHOP_TYPE);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ip_nht_default_route,
@@ -1264,12 +1289,12 @@ DEFUN (ip_nht_default_route,
"Filter Next Hop tracking route resolution\n"
"Resolve via default route\n")
{
- if (zebra_rnh_ip_default_route)
- return CMD_SUCCESS;
+ if (zebra_rnh_ip_default_route)
+ return CMD_SUCCESS;
- zebra_rnh_ip_default_route = 1;
- zebra_evaluate_rnh(0, AF_INET, 1, RNH_NEXTHOP_TYPE, NULL);
- return CMD_SUCCESS;
+ zebra_rnh_ip_default_route = 1;
+ zebra_evaluate_rnh(0, AF_INET, 1, RNH_NEXTHOP_TYPE, NULL);
+ return CMD_SUCCESS;
}
DEFUN (no_ip_nht_default_route,
@@ -1280,12 +1305,12 @@ DEFUN (no_ip_nht_default_route,
"Filter Next Hop tracking route resolution\n"
"Resolve via default route\n")
{
- if (!zebra_rnh_ip_default_route)
- return CMD_SUCCESS;
+ if (!zebra_rnh_ip_default_route)
+ return CMD_SUCCESS;
- zebra_rnh_ip_default_route = 0;
- zebra_evaluate_rnh(0, AF_INET, 1, RNH_NEXTHOP_TYPE, NULL);
- return CMD_SUCCESS;
+ zebra_rnh_ip_default_route = 0;
+ zebra_evaluate_rnh(0, AF_INET, 1, RNH_NEXTHOP_TYPE, NULL);
+ return CMD_SUCCESS;
}
DEFUN (ipv6_nht_default_route,
@@ -1295,12 +1320,12 @@ DEFUN (ipv6_nht_default_route,
"Filter Next Hop tracking route resolution\n"
"Resolve via default route\n")
{
- if (zebra_rnh_ipv6_default_route)
- return CMD_SUCCESS;
+ if (zebra_rnh_ipv6_default_route)
+ return CMD_SUCCESS;
- zebra_rnh_ipv6_default_route = 1;
- zebra_evaluate_rnh(0, AF_INET6, 1, RNH_NEXTHOP_TYPE, NULL);
- return CMD_SUCCESS;
+ zebra_rnh_ipv6_default_route = 1;
+ zebra_evaluate_rnh(0, AF_INET6, 1, RNH_NEXTHOP_TYPE, NULL);
+ return CMD_SUCCESS;
}
DEFUN (no_ipv6_nht_default_route,
@@ -1311,12 +1336,12 @@ DEFUN (no_ipv6_nht_default_route,
"Filter Next Hop tracking route resolution\n"
"Resolve via default route\n")
{
- if (!zebra_rnh_ipv6_default_route)
- return CMD_SUCCESS;
+ if (!zebra_rnh_ipv6_default_route)
+ return CMD_SUCCESS;
- zebra_rnh_ipv6_default_route = 0;
- zebra_evaluate_rnh(0, AF_INET6, 1, RNH_NEXTHOP_TYPE, NULL);
- return CMD_SUCCESS;
+ zebra_rnh_ipv6_default_route = 0;
+ zebra_evaluate_rnh(0, AF_INET6, 1, RNH_NEXTHOP_TYPE, NULL);
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_tag,
@@ -1329,46 +1354,44 @@ DEFUN (show_ip_route_tag,
"Show only routes with tag\n"
"Tag value\n")
{
- int idx_vrf = 3;
- int idx_name = 4;
- int idx_tag = 6;
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- int first = 1;
- route_tag_t tag = 0;
- vrf_id_t vrf_id = VRF_DEFAULT;
-
- if (strmatch(argv[idx_vrf]->text, "vrf"))
- {
- VRF_GET_ID (vrf_id, argv[idx_name]->arg);
- VTY_GET_INTEGER_RANGE("tag", tag, argv[idx_tag]->arg, 0, 4294967295);
- }
- else
- {
- idx_tag -= 2;
- VTY_GET_INTEGER_RANGE("tag", tag, argv[idx_tag]->arg, 0, 4294967295);
- }
-
- table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
-
- /* Show all IPv4 routes with matching tag value. */
- for (rn = route_top (table); rn; rn = route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- if (rib->tag != tag)
- continue;
-
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V4_HEADER);
- first = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- return CMD_SUCCESS;
+ int idx_vrf = 3;
+ int idx_name = 4;
+ int idx_tag = 6;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ int first = 1;
+ route_tag_t tag = 0;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+
+ if (strmatch(argv[idx_vrf]->text, "vrf")) {
+ VRF_GET_ID(vrf_id, argv[idx_name]->arg);
+ VTY_GET_INTEGER_RANGE("tag", tag, argv[idx_tag]->arg, 0,
+ 4294967295);
+ } else {
+ idx_tag -= 2;
+ VTY_GET_INTEGER_RANGE("tag", tag, argv[idx_tag]->arg, 0,
+ 4294967295);
+ }
+
+ table = zebra_vrf_table(AFI_IP, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
+
+ /* Show all IPv4 routes with matching tag value. */
+ for (rn = route_top(table); rn; rn = route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ if (rib->tag != tag)
+ continue;
+
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V4_HEADER);
+ first = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_prefix_longer,
@@ -1381,47 +1404,41 @@ DEFUN (show_ip_route_prefix_longer,
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
"Show route matching the specified Network/Mask pair only\n")
{
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- struct prefix p;
- int ret;
- int first = 1;
- vrf_id_t vrf_id = VRF_DEFAULT;
-
- if (strmatch(argv[3]->text, "vrf"))
- {
- VRF_GET_ID (vrf_id, argv[4]->arg);
- ret = str2prefix (argv[5]->arg, &p);
- }
- else
- {
- ret = str2prefix (argv[3]->arg, &p);
- }
-
- if (! ret)
- {
- vty_out (vty, "%% Malformed Prefix%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
-
- /* Show matched type IPv4 routes. */
- for (rn = route_top (table); rn; rn = route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- if (prefix_match (&p, &rn->p))
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V4_HEADER);
- first = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ struct prefix p;
+ int ret;
+ int first = 1;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+
+ if (strmatch(argv[3]->text, "vrf")) {
+ VRF_GET_ID(vrf_id, argv[4]->arg);
+ ret = str2prefix(argv[5]->arg, &p);
+ } else {
+ ret = str2prefix(argv[3]->arg, &p);
}
- return CMD_SUCCESS;
+
+ if (!ret) {
+ vty_out(vty, "%% Malformed Prefix%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ table = zebra_vrf_table(AFI_IP, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
+
+ /* Show matched type IPv4 routes. */
+ for (rn = route_top(table); rn; rn = route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ if (prefix_match(&p, &rn->p)) {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V4_HEADER);
+ first = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_supernets,
@@ -1433,39 +1450,37 @@ DEFUN (show_ip_route_supernets,
VRF_CMD_HELP_STR
"Show supernet entries only\n")
{
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- u_int32_t addr;
- int first = 1;
- vrf_id_t vrf_id = VRF_DEFAULT;
-
- if (strmatch(argv[3]->text, "vrf"))
- VRF_GET_ID (vrf_id, argv[4]->arg);
-
- table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
-
- /* Show matched type IPv4 routes. */
- for (rn = route_top (table); rn; rn = route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- addr = ntohl (rn->p.u.prefix4.s_addr);
-
- if ((IN_CLASSC (addr) && rn->p.prefixlen < 24)
- || (IN_CLASSB (addr) && rn->p.prefixlen < 16)
- || (IN_CLASSA (addr) && rn->p.prefixlen < 8))
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V4_HEADER);
- first = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- }
- return CMD_SUCCESS;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ u_int32_t addr;
+ int first = 1;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+
+ if (strmatch(argv[3]->text, "vrf"))
+ VRF_GET_ID(vrf_id, argv[4]->arg);
+
+ table = zebra_vrf_table(AFI_IP, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
+
+ /* Show matched type IPv4 routes. */
+ for (rn = route_top(table); rn; rn = route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ addr = ntohl(rn->p.u.prefix4.s_addr);
+
+ if ((IN_CLASSC(addr) && rn->p.prefixlen < 24)
+ || (IN_CLASSB(addr) && rn->p.prefixlen < 16)
+ || (IN_CLASSA(addr) && rn->p.prefixlen < 8)) {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V4_HEADER);
+ first = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_protocol,
@@ -1477,43 +1492,40 @@ DEFUN (show_ip_route_protocol,
VRF_CMD_HELP_STR
FRR_IP_REDIST_HELP_STR_ZEBRA)
{
- int type;
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- int first = 1;
- vrf_id_t vrf_id = VRF_DEFAULT;
-
- int idx = 0;
- if (argv_find (argv, argc, "NAME", &idx))
- VRF_GET_ID (vrf_id, argv[idx]->arg);
-
- char *proto = argv[argc - 1]->text;
- type = proto_redistnum (AFI_IP, proto);
-
- if (type < 0)
- {
- vty_out (vty, "Unknown route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
-
- /* Show matched type IPv4 routes. */
- for (rn = route_top (table); rn; rn = route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- if (rib->type == type)
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V4_HEADER);
- first = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
+ int type;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ int first = 1;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+
+ int idx = 0;
+ if (argv_find(argv, argc, "NAME", &idx))
+ VRF_GET_ID(vrf_id, argv[idx]->arg);
+
+ char *proto = argv[argc - 1]->text;
+ type = proto_redistnum(AFI_IP, proto);
+
+ if (type < 0) {
+ vty_out(vty, "Unknown route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ table = zebra_vrf_table(AFI_IP, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
+
+ /* Show matched type IPv4 routes. */
+ for (rn = route_top(table); rn; rn = route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ if (rib->type == type) {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V4_HEADER);
+ first = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
}
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -1526,32 +1538,30 @@ DEFUN (show_ip_route_ospf_instance,
"Open Shortest Path First (OSPFv2)\n"
"Instance ID\n")
{
- int idx_number = 4;
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- int first = 1;
- u_short instance = 0;
-
- VTY_GET_INTEGER ("Instance", instance, argv[idx_number]->arg);
-
- table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
- if (! table)
- return CMD_SUCCESS;
-
- /* Show matched type IPv4 routes. */
- for (rn = route_top (table); rn; rn = route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- if (rib->type == ZEBRA_ROUTE_OSPF && rib->instance == instance)
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V4_HEADER);
- first = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
+ int idx_number = 4;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ int first = 1;
+ u_short instance = 0;
+
+ VTY_GET_INTEGER("Instance", instance, argv[idx_number]->arg);
+
+ table = zebra_vrf_table(AFI_IP, SAFI_UNICAST, VRF_DEFAULT);
+ if (!table)
+ return CMD_SUCCESS;
+
+ /* Show matched type IPv4 routes. */
+ for (rn = route_top(table); rn; rn = route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ if (rib->type == ZEBRA_ROUTE_OSPF && rib->instance == instance) {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V4_HEADER);
+ first = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
}
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_addr,
@@ -1563,44 +1573,39 @@ DEFUN (show_ip_route_addr,
VRF_CMD_HELP_STR
"Network in the IP routing table to display\n")
{
- int ret;
- struct prefix_ipv4 p;
- struct route_table *table;
- struct route_node *rn;
- vrf_id_t vrf_id = VRF_DEFAULT;
-
- if (strmatch(argv[3]->text, "vrf"))
- {
- VRF_GET_ID (vrf_id, argv[4]->arg);
- ret = str2prefix_ipv4 (argv[5]->arg, &p);
- }
- else
- {
- ret = str2prefix_ipv4 (argv[3]->arg, &p);
- }
+ int ret;
+ struct prefix_ipv4 p;
+ struct route_table *table;
+ struct route_node *rn;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+
+ if (strmatch(argv[3]->text, "vrf")) {
+ VRF_GET_ID(vrf_id, argv[4]->arg);
+ ret = str2prefix_ipv4(argv[5]->arg, &p);
+ } else {
+ ret = str2prefix_ipv4(argv[3]->arg, &p);
+ }
- if (ret <= 0)
- {
- vty_out (vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ if (ret <= 0) {
+ vty_out(vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
+ table = zebra_vrf_table(AFI_IP, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
- rn = route_node_match (table, (struct prefix *) &p);
- if (! rn)
- {
- vty_out (vty, "%% Network not in table%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ rn = route_node_match(table, (struct prefix *)&p);
+ if (!rn) {
+ vty_out(vty, "%% Network not in table%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- vty_show_ip_route_detail (vty, rn, 0);
+ vty_show_ip_route_detail(vty, rn, 0);
- route_unlock_node (rn);
+ route_unlock_node(rn);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_prefix,
@@ -1612,113 +1617,104 @@ DEFUN (show_ip_route_prefix,
VRF_CMD_HELP_STR
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
{
- int ret;
- struct prefix_ipv4 p;
- struct route_table *table;
- struct route_node *rn;
- vrf_id_t vrf_id = VRF_DEFAULT;
-
- if (strmatch(argv[3]->text, "vrf"))
- {
- VRF_GET_ID (vrf_id, argv[4]->arg);
- ret = str2prefix_ipv4 (argv[5]->arg, &p);
- }
- else
- {
- ret = str2prefix_ipv4 (argv[3]->arg, &p);
- }
+ int ret;
+ struct prefix_ipv4 p;
+ struct route_table *table;
+ struct route_node *rn;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+
+ if (strmatch(argv[3]->text, "vrf")) {
+ VRF_GET_ID(vrf_id, argv[4]->arg);
+ ret = str2prefix_ipv4(argv[5]->arg, &p);
+ } else {
+ ret = str2prefix_ipv4(argv[3]->arg, &p);
+ }
- if (ret <= 0)
- {
- vty_out (vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ if (ret <= 0) {
+ vty_out(vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
+ table = zebra_vrf_table(AFI_IP, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
- rn = route_node_match (table, (struct prefix *) &p);
- if (! rn || rn->p.prefixlen != p.prefixlen)
- {
- vty_out (vty, "%% Network not in table%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ rn = route_node_match(table, (struct prefix *)&p);
+ if (!rn || rn->p.prefixlen != p.prefixlen) {
+ vty_out(vty, "%% Network not in table%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- vty_show_ip_route_detail (vty, rn, 0);
+ vty_show_ip_route_detail(vty, rn, 0);
- route_unlock_node (rn);
+ route_unlock_node(rn);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-static void
-vty_show_ip_route_summary (struct vty *vty, struct route_table *table)
+static void vty_show_ip_route_summary(struct vty *vty,
+ struct route_table *table)
{
- struct route_node *rn;
- struct rib *rib;
+ struct route_node *rn;
+ struct rib *rib;
#define ZEBRA_ROUTE_IBGP ZEBRA_ROUTE_MAX
#define ZEBRA_ROUTE_TOTAL (ZEBRA_ROUTE_IBGP + 1)
- u_int32_t rib_cnt[ZEBRA_ROUTE_TOTAL + 1];
- u_int32_t fib_cnt[ZEBRA_ROUTE_TOTAL + 1];
- u_int32_t i;
- u_int32_t is_ibgp;
-
- memset (&rib_cnt, 0, sizeof(rib_cnt));
- memset (&fib_cnt, 0, sizeof(fib_cnt));
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- is_ibgp = (rib->type == ZEBRA_ROUTE_BGP &&
- CHECK_FLAG (rib->flags, ZEBRA_FLAG_IBGP));
-
- rib_cnt[ZEBRA_ROUTE_TOTAL]++;
- if (is_ibgp)
- rib_cnt[ZEBRA_ROUTE_IBGP]++;
- else
- rib_cnt[rib->type]++;
-
- if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_SELECTED))
- {
- fib_cnt[ZEBRA_ROUTE_TOTAL]++;
-
- if (is_ibgp)
- fib_cnt[ZEBRA_ROUTE_IBGP]++;
- else
- fib_cnt[rib->type]++;
- }
- }
-
- vty_out (vty, "%-20s %-20s %s (vrf %s)%s",
- "Route Source", "Routes", "FIB",
- zvrf_name (((rib_table_info_t *)table->info)->zvrf),
- VTY_NEWLINE);
-
- for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
- {
- if ((rib_cnt[i] > 0) ||
- (i == ZEBRA_ROUTE_BGP && rib_cnt[ZEBRA_ROUTE_IBGP] > 0))
- {
- if (i == ZEBRA_ROUTE_BGP)
- {
- vty_out (vty, "%-20s %-20d %-20d %s", "ebgp",
- rib_cnt[ZEBRA_ROUTE_BGP], fib_cnt[ZEBRA_ROUTE_BGP],
- VTY_NEWLINE);
- vty_out (vty, "%-20s %-20d %-20d %s", "ibgp",
- rib_cnt[ZEBRA_ROUTE_IBGP], fib_cnt[ZEBRA_ROUTE_IBGP],
- VTY_NEWLINE);
- }
- else
- vty_out (vty, "%-20s %-20d %-20d %s", zebra_route_string(i),
- rib_cnt[i], fib_cnt[i], VTY_NEWLINE);
- }
- }
-
- vty_out (vty, "------%s", VTY_NEWLINE);
- vty_out (vty, "%-20s %-20d %-20d %s", "Totals", rib_cnt[ZEBRA_ROUTE_TOTAL],
- fib_cnt[ZEBRA_ROUTE_TOTAL], VTY_NEWLINE);
- vty_out (vty, "%s", VTY_NEWLINE);
+ u_int32_t rib_cnt[ZEBRA_ROUTE_TOTAL + 1];
+ u_int32_t fib_cnt[ZEBRA_ROUTE_TOTAL + 1];
+ u_int32_t i;
+ u_int32_t is_ibgp;
+
+ memset(&rib_cnt, 0, sizeof(rib_cnt));
+ memset(&fib_cnt, 0, sizeof(fib_cnt));
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ is_ibgp = (rib->type == ZEBRA_ROUTE_BGP
+ && CHECK_FLAG(rib->flags, ZEBRA_FLAG_IBGP));
+
+ rib_cnt[ZEBRA_ROUTE_TOTAL]++;
+ if (is_ibgp)
+ rib_cnt[ZEBRA_ROUTE_IBGP]++;
+ else
+ rib_cnt[rib->type]++;
+
+ if (CHECK_FLAG(rib->flags, ZEBRA_FLAG_SELECTED)) {
+ fib_cnt[ZEBRA_ROUTE_TOTAL]++;
+
+ if (is_ibgp)
+ fib_cnt[ZEBRA_ROUTE_IBGP]++;
+ else
+ fib_cnt[rib->type]++;
+ }
+ }
+
+ vty_out(vty, "%-20s %-20s %s (vrf %s)%s", "Route Source", "Routes",
+ "FIB", zvrf_name(((rib_table_info_t *)table->info)->zvrf),
+ VTY_NEWLINE);
+
+ for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+ if ((rib_cnt[i] > 0) || (i == ZEBRA_ROUTE_BGP
+ && rib_cnt[ZEBRA_ROUTE_IBGP] > 0)) {
+ if (i == ZEBRA_ROUTE_BGP) {
+ vty_out(vty, "%-20s %-20d %-20d %s", "ebgp",
+ rib_cnt[ZEBRA_ROUTE_BGP],
+ fib_cnt[ZEBRA_ROUTE_BGP], VTY_NEWLINE);
+ vty_out(vty, "%-20s %-20d %-20d %s", "ibgp",
+ rib_cnt[ZEBRA_ROUTE_IBGP],
+ fib_cnt[ZEBRA_ROUTE_IBGP], VTY_NEWLINE);
+ } else
+ vty_out(vty, "%-20s %-20d %-20d %s",
+ zebra_route_string(i), rib_cnt[i],
+ fib_cnt[i], VTY_NEWLINE);
+ }
+ }
+
+ vty_out(vty, "------%s", VTY_NEWLINE);
+ vty_out(vty, "%-20s %-20d %-20d %s", "Totals",
+ rib_cnt[ZEBRA_ROUTE_TOTAL], fib_cnt[ZEBRA_ROUTE_TOTAL],
+ VTY_NEWLINE);
+ vty_out(vty, "%s", VTY_NEWLINE);
}
/*
@@ -1728,78 +1724,79 @@ vty_show_ip_route_summary (struct vty *vty, struct route_table *table)
* protocols on the box.
*
*/
-static void
-vty_show_ip_route_summary_prefix (struct vty *vty, struct route_table *table)
+static void vty_show_ip_route_summary_prefix(struct vty *vty,
+ struct route_table *table)
{
- struct route_node *rn;
- struct rib *rib;
- struct nexthop *nexthop;
+ struct route_node *rn;
+ struct rib *rib;
+ struct nexthop *nexthop;
#define ZEBRA_ROUTE_IBGP ZEBRA_ROUTE_MAX
#define ZEBRA_ROUTE_TOTAL (ZEBRA_ROUTE_IBGP + 1)
- u_int32_t rib_cnt[ZEBRA_ROUTE_TOTAL + 1];
- u_int32_t fib_cnt[ZEBRA_ROUTE_TOTAL + 1];
- u_int32_t i;
- int cnt;
-
- memset (&rib_cnt, 0, sizeof(rib_cnt));
- memset (&fib_cnt, 0, sizeof(fib_cnt));
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
-
- /*
- * In case of ECMP, count only once.
- */
- cnt = 0;
- for (nexthop = rib->nexthop; (!cnt && nexthop); nexthop = nexthop->next)
- {
- cnt++;
- rib_cnt[ZEBRA_ROUTE_TOTAL]++;
- rib_cnt[rib->type]++;
- if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB))
- {
- fib_cnt[ZEBRA_ROUTE_TOTAL]++;
- fib_cnt[rib->type]++;
- }
- if (rib->type == ZEBRA_ROUTE_BGP &&
- CHECK_FLAG (rib->flags, ZEBRA_FLAG_IBGP))
- {
- rib_cnt[ZEBRA_ROUTE_IBGP]++;
- if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB))
- fib_cnt[ZEBRA_ROUTE_IBGP]++;
- }
- }
- }
-
- vty_out (vty, "%-20s %-20s %s (vrf %s)%s",
- "Route Source", "Prefix Routes", "FIB",
- zvrf_name (((rib_table_info_t *)table->info)->zvrf),
- VTY_NEWLINE);
-
- for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
- {
- if (rib_cnt[i] > 0)
- {
- if (i == ZEBRA_ROUTE_BGP)
- {
- vty_out (vty, "%-20s %-20d %-20d %s", "ebgp",
- rib_cnt[ZEBRA_ROUTE_BGP] - rib_cnt[ZEBRA_ROUTE_IBGP],
- fib_cnt[ZEBRA_ROUTE_BGP] - fib_cnt[ZEBRA_ROUTE_IBGP],
- VTY_NEWLINE);
- vty_out (vty, "%-20s %-20d %-20d %s", "ibgp",
- rib_cnt[ZEBRA_ROUTE_IBGP], fib_cnt[ZEBRA_ROUTE_IBGP],
- VTY_NEWLINE);
- }
- else
- vty_out (vty, "%-20s %-20d %-20d %s", zebra_route_string(i),
- rib_cnt[i], fib_cnt[i], VTY_NEWLINE);
- }
- }
-
- vty_out (vty, "------%s", VTY_NEWLINE);
- vty_out (vty, "%-20s %-20d %-20d %s", "Totals", rib_cnt[ZEBRA_ROUTE_TOTAL],
- fib_cnt[ZEBRA_ROUTE_TOTAL], VTY_NEWLINE);
- vty_out (vty, "%s", VTY_NEWLINE);
+ u_int32_t rib_cnt[ZEBRA_ROUTE_TOTAL + 1];
+ u_int32_t fib_cnt[ZEBRA_ROUTE_TOTAL + 1];
+ u_int32_t i;
+ int cnt;
+
+ memset(&rib_cnt, 0, sizeof(rib_cnt));
+ memset(&fib_cnt, 0, sizeof(fib_cnt));
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+
+ /*
+ * In case of ECMP, count only once.
+ */
+ cnt = 0;
+ for (nexthop = rib->nexthop; (!cnt && nexthop);
+ nexthop = nexthop->next) {
+ cnt++;
+ rib_cnt[ZEBRA_ROUTE_TOTAL]++;
+ rib_cnt[rib->type]++;
+ if (CHECK_FLAG(nexthop->flags,
+ NEXTHOP_FLAG_FIB)) {
+ fib_cnt[ZEBRA_ROUTE_TOTAL]++;
+ fib_cnt[rib->type]++;
+ }
+ if (rib->type == ZEBRA_ROUTE_BGP
+ && CHECK_FLAG(rib->flags,
+ ZEBRA_FLAG_IBGP)) {
+ rib_cnt[ZEBRA_ROUTE_IBGP]++;
+ if (CHECK_FLAG(nexthop->flags,
+ NEXTHOP_FLAG_FIB))
+ fib_cnt[ZEBRA_ROUTE_IBGP]++;
+ }
+ }
+ }
+
+ vty_out(vty, "%-20s %-20s %s (vrf %s)%s", "Route Source",
+ "Prefix Routes", "FIB",
+ zvrf_name(((rib_table_info_t *)table->info)->zvrf),
+ VTY_NEWLINE);
+
+ for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+ if (rib_cnt[i] > 0) {
+ if (i == ZEBRA_ROUTE_BGP) {
+ vty_out(vty, "%-20s %-20d %-20d %s", "ebgp",
+ rib_cnt[ZEBRA_ROUTE_BGP]
+ - rib_cnt[ZEBRA_ROUTE_IBGP],
+ fib_cnt[ZEBRA_ROUTE_BGP]
+ - fib_cnt[ZEBRA_ROUTE_IBGP],
+ VTY_NEWLINE);
+ vty_out(vty, "%-20s %-20d %-20d %s", "ibgp",
+ rib_cnt[ZEBRA_ROUTE_IBGP],
+ fib_cnt[ZEBRA_ROUTE_IBGP], VTY_NEWLINE);
+ } else
+ vty_out(vty, "%-20s %-20d %-20d %s",
+ zebra_route_string(i), rib_cnt[i],
+ fib_cnt[i], VTY_NEWLINE);
+ }
+ }
+
+ vty_out(vty, "------%s", VTY_NEWLINE);
+ vty_out(vty, "%-20s %-20d %-20d %s", "Totals",
+ rib_cnt[ZEBRA_ROUTE_TOTAL], fib_cnt[ZEBRA_ROUTE_TOTAL],
+ VTY_NEWLINE);
+ vty_out(vty, "%s", VTY_NEWLINE);
}
/* Show route summary. */
@@ -1812,19 +1809,19 @@ DEFUN (show_ip_route_summary,
VRF_CMD_HELP_STR
"Summary of all routes\n")
{
- struct route_table *table;
- vrf_id_t vrf_id = VRF_DEFAULT;
+ struct route_table *table;
+ vrf_id_t vrf_id = VRF_DEFAULT;
- if (strmatch(argv[3]->text, "vrf"))
- VRF_GET_ID (vrf_id, argv[4]->arg);
+ if (strmatch(argv[3]->text, "vrf"))
+ VRF_GET_ID(vrf_id, argv[4]->arg);
- table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
+ table = zebra_vrf_table(AFI_IP, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
- vty_show_ip_route_summary (vty, table);
+ vty_show_ip_route_summary(vty, table);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* Show route summary prefix. */
@@ -1838,19 +1835,19 @@ DEFUN (show_ip_route_summary_prefix,
"Summary of all routes\n"
"Prefix routes\n")
{
- struct route_table *table;
- vrf_id_t vrf_id = VRF_DEFAULT;
+ struct route_table *table;
+ vrf_id_t vrf_id = VRF_DEFAULT;
- if (strmatch(argv[3]->text, "vrf"))
- VRF_GET_ID (vrf_id, argv[4]->arg);
+ if (strmatch(argv[3]->text, "vrf"))
+ VRF_GET_ID(vrf_id, argv[4]->arg);
- table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
+ table = zebra_vrf_table(AFI_IP, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
- vty_show_ip_route_summary_prefix (vty, table);
+ vty_show_ip_route_summary_prefix(vty, table);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -1862,41 +1859,40 @@ DEFUN (show_ip_route_vrf_all,
"IP routing table\n"
VRF_ALL_CMD_HELP_STR)
{
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
- int first = 1;
- int vrf_header = 1;
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
- continue;
-
- /* Show all IPv4 routes. */
- for (rn = route_top (table); rn; rn = route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V4_HEADER);
- first = 0;
- }
-
- if (vrf_header)
- {
- vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
- vrf_header = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- vrf_header = 1;
- }
-
- return CMD_SUCCESS;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+ int first = 1;
+ int vrf_header = 1;
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
+ continue;
+
+ /* Show all IPv4 routes. */
+ for (rn = route_top(table); rn; rn = route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V4_HEADER);
+ first = 0;
+ }
+
+ if (vrf_header) {
+ vty_out(vty, "%sVRF %s:%s", VTY_NEWLINE,
+ zvrf_name(zvrf), VTY_NEWLINE);
+ vrf_header = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ vrf_header = 1;
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_vrf_all_tag,
@@ -1909,48 +1905,48 @@ DEFUN (show_ip_route_vrf_all_tag,
"Show only routes with tag\n"
"Tag value\n")
{
- int idx_number = 6;
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
- int first = 1;
- int vrf_header = 1;
- route_tag_t tag = 0;
-
- if (argv[idx_number]->arg)
- VTY_GET_INTEGER_RANGE("tag", tag, argv[idx_number]->arg, 0, 4294967295);
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
- continue;
-
- /* Show all IPv4 routes with matching tag value. */
- for (rn = route_top (table); rn; rn = route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- if (rib->tag != tag)
- continue;
-
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V4_HEADER);
- first = 0;
- }
-
- if (vrf_header)
- {
- vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
- vrf_header = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- vrf_header = 1;
- }
- return CMD_SUCCESS;
+ int idx_number = 6;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+ int first = 1;
+ int vrf_header = 1;
+ route_tag_t tag = 0;
+
+ if (argv[idx_number]->arg)
+ VTY_GET_INTEGER_RANGE("tag", tag, argv[idx_number]->arg, 0,
+ 4294967295);
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
+ continue;
+
+ /* Show all IPv4 routes with matching tag value. */
+ for (rn = route_top(table); rn; rn = route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ if (rib->tag != tag)
+ continue;
+
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V4_HEADER);
+ first = 0;
+ }
+
+ if (vrf_header) {
+ vty_out(vty, "%sVRF %s:%s", VTY_NEWLINE,
+ zvrf_name(zvrf), VTY_NEWLINE);
+ vrf_header = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ vrf_header = 1;
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_vrf_all_prefix_longer,
@@ -1963,52 +1959,49 @@ DEFUN (show_ip_route_vrf_all_prefix_longer,
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
"Show route matching the specified Network/Mask pair only\n")
{
- int idx_ipv4_prefixlen = 5;
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- struct prefix p;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
- int ret;
- int first = 1;
- int vrf_header = 1;
-
- ret = str2prefix (argv[idx_ipv4_prefixlen]->arg, &p);
- if (! ret)
- {
- vty_out (vty, "%% Malformed Prefix%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
- continue;
-
- /* Show matched type IPv4 routes. */
- for (rn = route_top (table); rn; rn = route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- if (prefix_match (&p, &rn->p))
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V4_HEADER);
- first = 0;
- }
-
- if (vrf_header)
- {
- vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
- vrf_header = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- vrf_header = 1;
- }
-
- return CMD_SUCCESS;
+ int idx_ipv4_prefixlen = 5;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ struct prefix p;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+ int ret;
+ int first = 1;
+ int vrf_header = 1;
+
+ ret = str2prefix(argv[idx_ipv4_prefixlen]->arg, &p);
+ if (!ret) {
+ vty_out(vty, "%% Malformed Prefix%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
+ continue;
+
+ /* Show matched type IPv4 routes. */
+ for (rn = route_top(table); rn; rn = route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ if (prefix_match(&p, &rn->p)) {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V4_HEADER);
+ first = 0;
+ }
+
+ if (vrf_header) {
+ vty_out(vty, "%sVRF %s:%s", VTY_NEWLINE,
+ zvrf_name(zvrf), VTY_NEWLINE);
+ vrf_header = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ vrf_header = 1;
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_vrf_all_supernets,
@@ -2020,48 +2013,50 @@ DEFUN (show_ip_route_vrf_all_supernets,
VRF_ALL_CMD_HELP_STR
"Show supernet entries only\n")
{
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
- u_int32_t addr;
- int first = 1;
- int vrf_header = 1;
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
- continue;
-
- /* Show matched type IPv4 routes. */
- for (rn = route_top (table); rn; rn = route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- addr = ntohl (rn->p.u.prefix4.s_addr);
-
- if ((IN_CLASSC (addr) && rn->p.prefixlen < 24)
- || (IN_CLASSB (addr) && rn->p.prefixlen < 16)
- || (IN_CLASSA (addr) && rn->p.prefixlen < 8))
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V4_HEADER);
- first = 0;
- }
- if (vrf_header)
- {
- vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
- vrf_header = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- }
- vrf_header = 1;
- }
-
- return CMD_SUCCESS;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+ u_int32_t addr;
+ int first = 1;
+ int vrf_header = 1;
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
+ continue;
+
+ /* Show matched type IPv4 routes. */
+ for (rn = route_top(table); rn; rn = route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ addr = ntohl(rn->p.u.prefix4.s_addr);
+
+ if ((IN_CLASSC(addr) && rn->p.prefixlen < 24)
+ || (IN_CLASSB(addr) && rn->p.prefixlen < 16)
+ || (IN_CLASSA(addr)
+ && rn->p.prefixlen < 8)) {
+ if (first) {
+ vty_out(vty,
+ SHOW_ROUTE_V4_HEADER);
+ first = 0;
+ }
+ if (vrf_header) {
+ vty_out(vty, "%sVRF %s:%s",
+ VTY_NEWLINE,
+ zvrf_name(zvrf),
+ VTY_NEWLINE);
+ vrf_header = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ }
+ vrf_header = 1;
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_vrf_all_protocol,
@@ -2073,52 +2068,49 @@ DEFUN (show_ip_route_vrf_all_protocol,
VRF_ALL_CMD_HELP_STR
FRR_IP_REDIST_HELP_STR_ZEBRA"\n")
{
- int type;
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
- int first = 1;
- int vrf_header = 1;
-
- char *proto = argv[argc - 1]->text;
- type = proto_redistnum (AFI_IP, proto);
-
- if (type < 0)
- {
- vty_out (vty, "Unknown route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
- continue;
-
- /* Show matched type IPv4 routes. */
- for (rn = route_top (table); rn; rn = route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- if (rib->type == type)
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V4_HEADER);
- first = 0;
- }
-
- if (vrf_header)
- {
- vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
- vrf_header = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- vrf_header = 1;
- }
-
- return CMD_SUCCESS;
+ int type;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+ int first = 1;
+ int vrf_header = 1;
+
+ char *proto = argv[argc - 1]->text;
+ type = proto_redistnum(AFI_IP, proto);
+
+ if (type < 0) {
+ vty_out(vty, "Unknown route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
+ continue;
+
+ /* Show matched type IPv4 routes. */
+ for (rn = route_top(table); rn; rn = route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ if (rib->type == type) {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V4_HEADER);
+ first = 0;
+ }
+
+ if (vrf_header) {
+ vty_out(vty, "%sVRF %s:%s", VTY_NEWLINE,
+ zvrf_name(zvrf), VTY_NEWLINE);
+ vrf_header = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ vrf_header = 1;
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_vrf_all_addr,
@@ -2130,37 +2122,36 @@ DEFUN (show_ip_route_vrf_all_addr,
VRF_ALL_CMD_HELP_STR
"Network in the IP routing table to display\n")
{
- int idx_ipv4 = 5;
- int ret;
- struct prefix_ipv4 p;
- struct route_table *table;
- struct route_node *rn;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
-
- ret = str2prefix_ipv4 (argv[idx_ipv4]->arg, &p);
- if (ret <= 0)
- {
- vty_out (vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ int idx_ipv4 = 5;
+ int ret;
+ struct prefix_ipv4 p;
+ struct route_table *table;
+ struct route_node *rn;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+
+ ret = str2prefix_ipv4(argv[idx_ipv4]->arg, &p);
+ if (ret <= 0) {
+ vty_out(vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
- continue;
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
+ continue;
- rn = route_node_match (table, (struct prefix *) &p);
- if (! rn)
- continue;
+ rn = route_node_match(table, (struct prefix *)&p);
+ if (!rn)
+ continue;
- vty_show_ip_route_detail (vty, rn, 0);
+ vty_show_ip_route_detail(vty, rn, 0);
- route_unlock_node (rn);
- }
+ route_unlock_node(rn);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_vrf_all_prefix,
@@ -2172,42 +2163,40 @@ DEFUN (show_ip_route_vrf_all_prefix,
VRF_ALL_CMD_HELP_STR
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
{
- int idx_ipv4_prefixlen = 5;
- int ret;
- struct prefix_ipv4 p;
- struct route_table *table;
- struct route_node *rn;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
-
- ret = str2prefix_ipv4 (argv[idx_ipv4_prefixlen]->arg, &p);
- if (ret <= 0)
- {
- vty_out (vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ int idx_ipv4_prefixlen = 5;
+ int ret;
+ struct prefix_ipv4 p;
+ struct route_table *table;
+ struct route_node *rn;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+
+ ret = str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
+ if (ret <= 0) {
+ vty_out(vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
- continue;
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
+ continue;
- rn = route_node_match (table, (struct prefix *) &p);
- if (! rn)
- continue;
- if (rn->p.prefixlen != p.prefixlen)
- {
- route_unlock_node (rn);
- continue;
- }
+ rn = route_node_match(table, (struct prefix *)&p);
+ if (!rn)
+ continue;
+ if (rn->p.prefixlen != p.prefixlen) {
+ route_unlock_node(rn);
+ continue;
+ }
- vty_show_ip_route_detail (vty, rn, 0);
+ vty_show_ip_route_detail(vty, rn, 0);
- route_unlock_node (rn);
- }
+ route_unlock_node(rn);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_vrf_all_summary,
@@ -2219,14 +2208,15 @@ DEFUN (show_ip_route_vrf_all_summary,
VRF_ALL_CMD_HELP_STR
"Summary of all routes\n")
{
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- if ((zvrf = vrf->info) != NULL)
- vty_show_ip_route_summary (vty, zvrf->table[AFI_IP][SAFI_UNICAST]);
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ if ((zvrf = vrf->info) != NULL)
+ vty_show_ip_route_summary(vty,
+ zvrf->table[AFI_IP][SAFI_UNICAST]);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ip_route_vrf_all_summary_prefix,
@@ -2239,245 +2229,252 @@ DEFUN (show_ip_route_vrf_all_summary_prefix,
"Summary of all routes\n"
"Prefix routes\n")
{
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- if ((zvrf = vrf->info) != NULL)
- vty_show_ip_route_summary_prefix (vty, zvrf->table[AFI_IP][SAFI_UNICAST]);
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ if ((zvrf = vrf->info) != NULL)
+ vty_show_ip_route_summary_prefix(
+ vty, zvrf->table[AFI_IP][SAFI_UNICAST]);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* Write IPv4 static route configuration. */
-static int
-static_config_ipv4 (struct vty *vty, safi_t safi, const char *cmd)
-{
- struct route_node *rn;
- struct static_route *si;
- struct route_table *stable;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
- char buf[BUFSIZ];
- int write =0;
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if (!(zvrf = vrf->info))
- continue;
- if ((stable = zvrf->stable[AFI_IP][safi]) == NULL)
- continue;
-
- for (rn = route_top (stable); rn; rn = route_next (rn))
- for (si = rn->info; si; si = si->next)
- {
- vty_out (vty, "%s %s", cmd, prefix2str (&rn->p, buf, sizeof buf));
-
- switch (si->type)
- {
- case STATIC_IPV4_GATEWAY:
- vty_out (vty, " %s", inet_ntoa (si->addr.ipv4));
- break;
- case STATIC_IFNAME:
- vty_out (vty, " %s", si->ifname);
- break;
- case STATIC_BLACKHOLE:
- vty_out (vty, " Null0");
- break;
- case STATIC_IPV6_GATEWAY:
- vty_out (vty, " %s", inet_ntop (AF_INET6, &si->addr.ipv6, buf, BUFSIZ));
- break;
- case STATIC_IPV6_GATEWAY_IFNAME:
- vty_out (vty, " %s %s",
- inet_ntop (AF_INET6, &si->addr.ipv6, buf, BUFSIZ),
- ifindex2ifname (si->ifindex, si->vrf_id));
- break;
- }
-
- /* flags are incompatible with STATIC_BLACKHOLE */
- if (si->type != STATIC_BLACKHOLE)
- {
- if (CHECK_FLAG(si->flags, ZEBRA_FLAG_REJECT))
- vty_out (vty, " %s", "reject");
-
- if (CHECK_FLAG(si->flags, ZEBRA_FLAG_BLACKHOLE))
- vty_out (vty, " %s", "blackhole");
- }
-
- if (si->tag)
- vty_out (vty, " tag %"ROUTE_TAG_PRI, si->tag);
-
- if (si->distance != ZEBRA_STATIC_DISTANCE_DEFAULT)
- vty_out (vty, " %d", si->distance);
-
- if (si->vrf_id != VRF_DEFAULT)
- vty_out (vty, " vrf %s", zvrf ? zvrf_name (zvrf) : "");
-
- /* Label information */
- if (si->snh_label.num_labels)
- vty_out (vty, " label %s",
- mpls_label2str (si->snh_label.num_labels,
- si->snh_label.label, buf, sizeof buf));
-
- vty_out (vty, "%s", VTY_NEWLINE);
-
- write = 1;
- }
- }
- return write;
+static int static_config_ipv4(struct vty *vty, safi_t safi, const char *cmd)
+{
+ struct route_node *rn;
+ struct static_route *si;
+ struct route_table *stable;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+ char buf[BUFSIZ];
+ int write = 0;
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if (!(zvrf = vrf->info))
+ continue;
+ if ((stable = zvrf->stable[AFI_IP][safi]) == NULL)
+ continue;
+
+ for (rn = route_top(stable); rn; rn = route_next(rn))
+ for (si = rn->info; si; si = si->next) {
+ vty_out(vty, "%s %s", cmd,
+ prefix2str(&rn->p, buf, sizeof buf));
+
+ switch (si->type) {
+ case STATIC_IPV4_GATEWAY:
+ vty_out(vty, " %s",
+ inet_ntoa(si->addr.ipv4));
+ break;
+ case STATIC_IFNAME:
+ vty_out(vty, " %s", si->ifname);
+ break;
+ case STATIC_BLACKHOLE:
+ vty_out(vty, " Null0");
+ break;
+ case STATIC_IPV6_GATEWAY:
+ vty_out(vty, " %s",
+ inet_ntop(AF_INET6,
+ &si->addr.ipv6, buf,
+ BUFSIZ));
+ break;
+ case STATIC_IPV6_GATEWAY_IFNAME:
+ vty_out(vty, " %s %s",
+ inet_ntop(AF_INET6,
+ &si->addr.ipv6, buf,
+ BUFSIZ),
+ ifindex2ifname(si->ifindex,
+ si->vrf_id));
+ break;
+ }
+
+ /* flags are incompatible with STATIC_BLACKHOLE
+ */
+ if (si->type != STATIC_BLACKHOLE) {
+ if (CHECK_FLAG(si->flags,
+ ZEBRA_FLAG_REJECT))
+ vty_out(vty, " %s", "reject");
+
+ if (CHECK_FLAG(si->flags,
+ ZEBRA_FLAG_BLACKHOLE))
+ vty_out(vty, " %s",
+ "blackhole");
+ }
+
+ if (si->tag)
+ vty_out(vty, " tag %" ROUTE_TAG_PRI,
+ si->tag);
+
+ if (si->distance
+ != ZEBRA_STATIC_DISTANCE_DEFAULT)
+ vty_out(vty, " %d", si->distance);
+
+ if (si->vrf_id != VRF_DEFAULT)
+ vty_out(vty, " vrf %s",
+ zvrf ? zvrf_name(zvrf) : "");
+
+ /* Label information */
+ if (si->snh_label.num_labels)
+ vty_out(vty, " label %s",
+ mpls_label2str(
+ si->snh_label
+ .num_labels,
+ si->snh_label.label,
+ buf, sizeof buf));
+
+ vty_out(vty, "%s", VTY_NEWLINE);
+
+ write = 1;
+ }
+ }
+ return write;
}
/* General fucntion for IPv6 static route. */
-int
-static_ipv6_func (struct vty *vty, int add_cmd, const char *dest_str,
- const char *src_str,
- const char *gate_str, const char *ifname,
- const char *flag_str, const char *tag_str,
- const char *distance_str, const char *vrf_id_str,
- const char *label_str)
-{
- int ret;
- u_char distance;
- struct prefix p, src;
- struct prefix_ipv6 *src_p = NULL;
- struct in6_addr *gate = NULL;
- struct in6_addr gate_addr;
- u_char type = STATIC_BLACKHOLE;
- u_char flag = 0;
- route_tag_t tag = 0;
- struct zebra_vrf *zvrf;
- struct static_nh_label snh_label;
-
- ret = str2prefix (dest_str, &p);
- if (ret <= 0)
- {
- vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- if (src_str)
- {
- ret = str2prefix (src_str, &src);
- if (ret <= 0 || src.family != AF_INET6)
- {
- vty_out (vty, "%% Malformed source address%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- src_p = (struct prefix_ipv6*)&src;
- }
-
- /* Apply mask for given prefix. */
- apply_mask (&p);
-
- /* Administrative distance. */
- if (distance_str)
- distance = atoi (distance_str);
- else
- distance = ZEBRA_STATIC_DISTANCE_DEFAULT;
-
- /* tag */
- if (tag_str)
- VTY_GET_INTEGER_RANGE("tag", tag, tag_str, 0, 4294967295);
-
- /* When gateway is valid IPv6 addrees, then gate is treated as
- nexthop address other case gate is treated as interface name. */
- ret = inet_pton (AF_INET6, gate_str, &gate_addr);
-
- /* VRF id */
- zvrf = zebra_vrf_lookup_by_name (vrf_id_str);
-
- if (!zvrf)
- {
- vty_out (vty, "%% vrf %s is not defined%s", vrf_id_str, VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- /* Labels */
- memset (&snh_label, 0, sizeof (struct static_nh_label));
- if (label_str)
- {
- if (!mpls_enabled)
- {
- vty_out (vty, "%% MPLS not turned on in kernel, ignoring command%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (mpls_str2label (label_str, &snh_label.num_labels,
- snh_label.label))
- {
- vty_out (vty, "%% Malformed label(s)%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
-
- /* Null0 static route. */
- if ((gate_str != NULL) && (strncasecmp (gate_str, "Null0", strlen (gate_str)) == 0))
- {
- if (flag_str)
- {
- vty_out (vty, "%% can not have flag %s with Null0%s", flag_str, VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (add_cmd)
- static_add_route (AFI_IP6, SAFI_UNICAST, type, &p, src_p, NULL, ifname,
- ZEBRA_FLAG_BLACKHOLE, tag, distance, zvrf, &snh_label);
- else
- static_delete_route (AFI_IP6, SAFI_UNICAST, type, &p, src_p, NULL,
- ifname, tag, distance, zvrf, &snh_label);
- return CMD_SUCCESS;
- }
-
- /* Route flags */
- if (flag_str) {
- switch(flag_str[0]) {
- case 'r':
- case 'R': /* XXX */
- SET_FLAG (flag, ZEBRA_FLAG_REJECT);
- break;
- case 'b':
- case 'B': /* XXX */
- SET_FLAG (flag, ZEBRA_FLAG_BLACKHOLE);
- break;
- default:
- vty_out (vty, "%% Malformed flag %s %s", flag_str, VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
-
- if (ifname)
- {
- /* When ifname is specified. It must be come with gateway
- address. */
- if (ret != 1)
- {
- vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- type = STATIC_IPV6_GATEWAY_IFNAME;
- gate = &gate_addr;
- }
- else
- {
- if (ret == 1)
- {
- type = STATIC_IPV6_GATEWAY;
- gate = &gate_addr;
- }
- else
- {
- type = STATIC_IFNAME;
- ifname = gate_str;
- }
- }
-
- if (add_cmd)
- static_add_route (AFI_IP6, SAFI_UNICAST, type, &p, src_p, (union g_addr *)gate,
- ifname, flag, tag, distance, zvrf, &snh_label);
- else
- static_delete_route (AFI_IP6, SAFI_UNICAST, type, &p, src_p, (union g_addr *)gate,
- ifname, tag, distance, zvrf, &snh_label);
-
- return CMD_SUCCESS;
+int static_ipv6_func(struct vty *vty, int add_cmd, const char *dest_str,
+ const char *src_str, const char *gate_str,
+ const char *ifname, const char *flag_str,
+ const char *tag_str, const char *distance_str,
+ const char *vrf_id_str, const char *label_str)
+{
+ int ret;
+ u_char distance;
+ struct prefix p, src;
+ struct prefix_ipv6 *src_p = NULL;
+ struct in6_addr *gate = NULL;
+ struct in6_addr gate_addr;
+ u_char type = STATIC_BLACKHOLE;
+ u_char flag = 0;
+ route_tag_t tag = 0;
+ struct zebra_vrf *zvrf;
+ struct static_nh_label snh_label;
+
+ ret = str2prefix(dest_str, &p);
+ if (ret <= 0) {
+ vty_out(vty, "%% Malformed address%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ if (src_str) {
+ ret = str2prefix(src_str, &src);
+ if (ret <= 0 || src.family != AF_INET6) {
+ vty_out(vty, "%% Malformed source address%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ src_p = (struct prefix_ipv6 *)&src;
+ }
+
+ /* Apply mask for given prefix. */
+ apply_mask(&p);
+
+ /* Administrative distance. */
+ if (distance_str)
+ distance = atoi(distance_str);
+ else
+ distance = ZEBRA_STATIC_DISTANCE_DEFAULT;
+
+ /* tag */
+ if (tag_str)
+ VTY_GET_INTEGER_RANGE("tag", tag, tag_str, 0, 4294967295);
+
+ /* When gateway is valid IPv6 addrees, then gate is treated as
+ nexthop address other case gate is treated as interface name. */
+ ret = inet_pton(AF_INET6, gate_str, &gate_addr);
+
+ /* VRF id */
+ zvrf = zebra_vrf_lookup_by_name(vrf_id_str);
+
+ if (!zvrf) {
+ vty_out(vty, "%% vrf %s is not defined%s", vrf_id_str,
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ /* Labels */
+ memset(&snh_label, 0, sizeof(struct static_nh_label));
+ if (label_str) {
+ if (!mpls_enabled) {
+ vty_out(vty,
+ "%% MPLS not turned on in kernel, ignoring command%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ if (mpls_str2label(label_str, &snh_label.num_labels,
+ snh_label.label)) {
+ vty_out(vty, "%% Malformed label(s)%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
+
+ /* Null0 static route. */
+ if ((gate_str != NULL)
+ && (strncasecmp(gate_str, "Null0", strlen(gate_str)) == 0)) {
+ if (flag_str) {
+ vty_out(vty, "%% can not have flag %s with Null0%s",
+ flag_str, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ if (add_cmd)
+ static_add_route(AFI_IP6, SAFI_UNICAST, type, &p, src_p,
+ NULL, ifname, ZEBRA_FLAG_BLACKHOLE,
+ tag, distance, zvrf, &snh_label);
+ else
+ static_delete_route(AFI_IP6, SAFI_UNICAST, type, &p,
+ src_p, NULL, ifname, tag, distance,
+ zvrf, &snh_label);
+ return CMD_SUCCESS;
+ }
+
+ /* Route flags */
+ if (flag_str) {
+ switch (flag_str[0]) {
+ case 'r':
+ case 'R': /* XXX */
+ SET_FLAG(flag, ZEBRA_FLAG_REJECT);
+ break;
+ case 'b':
+ case 'B': /* XXX */
+ SET_FLAG(flag, ZEBRA_FLAG_BLACKHOLE);
+ break;
+ default:
+ vty_out(vty, "%% Malformed flag %s %s", flag_str,
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
+
+ if (ifname) {
+ /* When ifname is specified. It must be come with gateway
+ address. */
+ if (ret != 1) {
+ vty_out(vty, "%% Malformed address%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ type = STATIC_IPV6_GATEWAY_IFNAME;
+ gate = &gate_addr;
+ } else {
+ if (ret == 1) {
+ type = STATIC_IPV6_GATEWAY;
+ gate = &gate_addr;
+ } else {
+ type = STATIC_IFNAME;
+ ifname = gate_str;
+ }
+ }
+
+ if (add_cmd)
+ static_add_route(AFI_IP6, SAFI_UNICAST, type, &p, src_p,
+ (union g_addr *)gate, ifname, flag, tag,
+ distance, zvrf, &snh_label);
+ else
+ static_delete_route(AFI_IP6, SAFI_UNICAST, type, &p, src_p,
+ (union g_addr *)gate, ifname, tag, distance,
+ zvrf, &snh_label);
+
+ return CMD_SUCCESS;
}
DEFUN (ipv6_route,
@@ -2498,33 +2495,28 @@ DEFUN (ipv6_route,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv6_prefixlen = 2;
- int idx_ipv6_ifname;
- int idx_curr;
- char *src, *tag, *distance, *vrf;
-
- if (!strcmp(argv[3]->text, "from"))
- {
- src = argv[4]->arg;
- idx_ipv6_ifname = 5;
- idx_curr = 6;
- }
- else
- {
- src = NULL;
- idx_ipv6_ifname = 3;
- idx_curr = 4;
- }
-
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
-
- return static_ipv6_func (vty, 1,
- argv[idx_ipv6_prefixlen]->arg,
- src,
- argv[idx_ipv6_ifname]->arg,
- NULL, NULL,
- tag, distance, vrf, NULL);
+ int idx_ipv6_prefixlen = 2;
+ int idx_ipv6_ifname;
+ int idx_curr;
+ char *src, *tag, *distance, *vrf;
+
+ if (!strcmp(argv[3]->text, "from")) {
+ src = argv[4]->arg;
+ idx_ipv6_ifname = 5;
+ idx_curr = 6;
+ } else {
+ src = NULL;
+ idx_ipv6_ifname = 3;
+ idx_curr = 4;
+ }
+
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
+
+ return static_ipv6_func(vty, 1, argv[idx_ipv6_prefixlen]->arg, src,
+ argv[idx_ipv6_ifname]->arg, NULL, NULL, tag,
+ distance, vrf, NULL);
}
DEFUN (ipv6_route_flags,
@@ -2546,37 +2538,32 @@ DEFUN (ipv6_route_flags,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv6_prefixlen = 2;
- int idx_ipv6_ifname;
- int idx_reject_blackhole;
- int idx_curr;
- char *src, *tag, *distance, *vrf;
-
- if (!strcmp(argv[3]->text, "from"))
- {
- src = argv[4]->arg;
- idx_ipv6_ifname = 5;
- idx_reject_blackhole = 6;
- idx_curr = 7;
- }
- else
- {
- src = NULL;
- idx_ipv6_ifname = 3;
- idx_reject_blackhole = 4;
- idx_curr = 5;
- }
-
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
-
- return static_ipv6_func (vty, 1,
- argv[idx_ipv6_prefixlen]->arg,
- src,
- argv[idx_ipv6_ifname]->arg,
- NULL,
- argv[idx_reject_blackhole]->arg,
- tag, distance, vrf, NULL);
+ int idx_ipv6_prefixlen = 2;
+ int idx_ipv6_ifname;
+ int idx_reject_blackhole;
+ int idx_curr;
+ char *src, *tag, *distance, *vrf;
+
+ if (!strcmp(argv[3]->text, "from")) {
+ src = argv[4]->arg;
+ idx_ipv6_ifname = 5;
+ idx_reject_blackhole = 6;
+ idx_curr = 7;
+ } else {
+ src = NULL;
+ idx_ipv6_ifname = 3;
+ idx_reject_blackhole = 4;
+ idx_curr = 5;
+ }
+
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
+
+ return static_ipv6_func(vty, 1, argv[idx_ipv6_prefixlen]->arg, src,
+ argv[idx_ipv6_ifname]->arg, NULL,
+ argv[idx_reject_blackhole]->arg, tag, distance,
+ vrf, NULL);
}
DEFUN (ipv6_route_ifname,
@@ -2596,37 +2583,31 @@ DEFUN (ipv6_route_ifname,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv6_prefixlen = 2;
- int idx_ipv6 = 3;
- int idx_interface = 4;
- int idx_curr = 5;
- char *src, *tag, *distance, *vrf;
-
- if (!strcmp(argv[3]->text, "from"))
- {
- src = argv[4]->arg;
- idx_ipv6 = 5;
- idx_interface = 6;
- idx_curr = 7;
- }
- else
- {
- src = NULL;
- idx_ipv6 = 3;
- idx_interface = 4;
- idx_curr = 5;
- }
-
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
-
- return static_ipv6_func (vty, 1,
- argv[idx_ipv6_prefixlen]->arg,
- src,
- argv[idx_ipv6]->arg,
- argv[idx_interface]->arg,
- NULL,
- tag, distance, vrf, NULL);
+ int idx_ipv6_prefixlen = 2;
+ int idx_ipv6 = 3;
+ int idx_interface = 4;
+ int idx_curr = 5;
+ char *src, *tag, *distance, *vrf;
+
+ if (!strcmp(argv[3]->text, "from")) {
+ src = argv[4]->arg;
+ idx_ipv6 = 5;
+ idx_interface = 6;
+ idx_curr = 7;
+ } else {
+ src = NULL;
+ idx_ipv6 = 3;
+ idx_interface = 4;
+ idx_curr = 5;
+ }
+
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
+
+ return static_ipv6_func(vty, 1, argv[idx_ipv6_prefixlen]->arg, src,
+ argv[idx_ipv6]->arg, argv[idx_interface]->arg,
+ NULL, tag, distance, vrf, NULL);
}
DEFUN (ipv6_route_ifname_flags,
@@ -2648,40 +2629,35 @@ DEFUN (ipv6_route_ifname_flags,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv6_prefixlen = 2;
- int idx_ipv6;
- int idx_interface;
- int idx_reject_blackhole;
- int idx_curr;
- char *src, *tag, *distance, *vrf;
-
- if (!strcmp(argv[3]->text, "from"))
- {
- src = argv[4]->arg;
- idx_ipv6 = 5;
- idx_interface = 6;
- idx_reject_blackhole = 7;
- idx_curr = 8;
- }
- else
- {
- src = NULL;
- idx_ipv6 = 3;
- idx_interface = 4;
- idx_reject_blackhole = 5;
- idx_curr = 6;
- }
-
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
-
- return static_ipv6_func (vty, 1,
- argv[idx_ipv6_prefixlen]->arg,
- src,
- argv[idx_ipv6]->arg,
- argv[idx_interface]->arg,
- argv[idx_reject_blackhole]->arg,
- tag, distance, vrf, NULL);
+ int idx_ipv6_prefixlen = 2;
+ int idx_ipv6;
+ int idx_interface;
+ int idx_reject_blackhole;
+ int idx_curr;
+ char *src, *tag, *distance, *vrf;
+
+ if (!strcmp(argv[3]->text, "from")) {
+ src = argv[4]->arg;
+ idx_ipv6 = 5;
+ idx_interface = 6;
+ idx_reject_blackhole = 7;
+ idx_curr = 8;
+ } else {
+ src = NULL;
+ idx_ipv6 = 3;
+ idx_interface = 4;
+ idx_reject_blackhole = 5;
+ idx_curr = 6;
+ }
+
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
+
+ return static_ipv6_func(vty, 1, argv[idx_ipv6_prefixlen]->arg, src,
+ argv[idx_ipv6]->arg, argv[idx_interface]->arg,
+ argv[idx_reject_blackhole]->arg, tag, distance,
+ vrf, NULL);
}
DEFUN (no_ipv6_route,
@@ -2703,33 +2679,28 @@ DEFUN (no_ipv6_route,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv6_prefixlen = 3;
- int idx_ipv6_ifname;
- int idx_curr;
- char *src, *tag, *distance, *vrf;
-
- if (!strcmp(argv[4]->text, "from"))
- {
- src = argv[5]->arg;
- idx_ipv6_ifname = 6;
- idx_curr = 7;
- }
- else
- {
- src = NULL;
- idx_ipv6_ifname = 4;
- idx_curr = 5;
- }
-
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
-
- return static_ipv6_func (vty, 0,
- argv[idx_ipv6_prefixlen]->arg,
- src,
- argv[idx_ipv6_ifname]->arg,
- NULL, NULL,
- tag, distance, vrf, NULL);
+ int idx_ipv6_prefixlen = 3;
+ int idx_ipv6_ifname;
+ int idx_curr;
+ char *src, *tag, *distance, *vrf;
+
+ if (!strcmp(argv[4]->text, "from")) {
+ src = argv[5]->arg;
+ idx_ipv6_ifname = 6;
+ idx_curr = 7;
+ } else {
+ src = NULL;
+ idx_ipv6_ifname = 4;
+ idx_curr = 5;
+ }
+
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
+
+ return static_ipv6_func(vty, 0, argv[idx_ipv6_prefixlen]->arg, src,
+ argv[idx_ipv6_ifname]->arg, NULL, NULL, tag,
+ distance, vrf, NULL);
}
DEFUN (no_ipv6_route_flags,
@@ -2752,37 +2723,32 @@ DEFUN (no_ipv6_route_flags,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv6_prefixlen = 3;
- int idx_ipv6_ifname;
- int idx_reject_blackhole;
- int idx_curr;
- char *src, *tag, *distance, *vrf;
-
- if (!strcmp(argv[4]->text, "from"))
- {
- src = argv[5]->arg;
- idx_ipv6_ifname = 6;
- idx_reject_blackhole = 7;
- idx_curr = 8;
- }
- else
- {
- src = NULL;
- idx_ipv6_ifname = 4;
- idx_reject_blackhole = 5;
- idx_curr = 6;
- }
-
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
-
- return static_ipv6_func (vty, 0,
- argv[idx_ipv6_prefixlen]->arg,
- src,
- argv[idx_ipv6_ifname]->arg,
- NULL,
- argv[idx_reject_blackhole]->arg,
- tag, distance, vrf, NULL);
+ int idx_ipv6_prefixlen = 3;
+ int idx_ipv6_ifname;
+ int idx_reject_blackhole;
+ int idx_curr;
+ char *src, *tag, *distance, *vrf;
+
+ if (!strcmp(argv[4]->text, "from")) {
+ src = argv[5]->arg;
+ idx_ipv6_ifname = 6;
+ idx_reject_blackhole = 7;
+ idx_curr = 8;
+ } else {
+ src = NULL;
+ idx_ipv6_ifname = 4;
+ idx_reject_blackhole = 5;
+ idx_curr = 6;
+ }
+
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
+
+ return static_ipv6_func(vty, 0, argv[idx_ipv6_prefixlen]->arg, src,
+ argv[idx_ipv6_ifname]->arg, NULL,
+ argv[idx_reject_blackhole]->arg, tag, distance,
+ vrf, NULL);
}
DEFUN (no_ipv6_route_ifname,
@@ -2803,37 +2769,31 @@ DEFUN (no_ipv6_route_ifname,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv6_prefixlen = 3;
- int idx_ipv6;
- int idx_interface;
- int idx_curr;
- char *src, *tag, *distance, *vrf;
-
- if (!strcmp(argv[4]->text, "from"))
- {
- src = argv[5]->arg;
- idx_ipv6 = 6;
- idx_interface = 7;
- idx_curr = 8;
- }
- else
- {
- src = NULL;
- idx_ipv6 = 4;
- idx_interface = 5;
- idx_curr = 6;
- }
-
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
-
- return static_ipv6_func (vty, 0,
- argv[idx_ipv6_prefixlen]->arg,
- src,
- argv[idx_ipv6]->arg,
- argv[idx_interface]->arg,
- NULL,
- tag, distance, vrf, NULL);
+ int idx_ipv6_prefixlen = 3;
+ int idx_ipv6;
+ int idx_interface;
+ int idx_curr;
+ char *src, *tag, *distance, *vrf;
+
+ if (!strcmp(argv[4]->text, "from")) {
+ src = argv[5]->arg;
+ idx_ipv6 = 6;
+ idx_interface = 7;
+ idx_curr = 8;
+ } else {
+ src = NULL;
+ idx_ipv6 = 4;
+ idx_interface = 5;
+ idx_curr = 6;
+ }
+
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
+
+ return static_ipv6_func(vty, 0, argv[idx_ipv6_prefixlen]->arg, src,
+ argv[idx_ipv6]->arg, argv[idx_interface]->arg,
+ NULL, tag, distance, vrf, NULL);
}
DEFUN (no_ipv6_route_ifname_flags,
@@ -2856,40 +2816,35 @@ DEFUN (no_ipv6_route_ifname_flags,
"Specify labels for this route\n"
"One or more labels separated by '/'\n")
{
- int idx_ipv6_prefixlen = 3;
- int idx_ipv6;
- int idx_interface;
- int idx_reject_blackhole;
- int idx_curr;
- char *src, *tag, *distance, *vrf;
-
- if (!strcmp(argv[4]->text, "from"))
- {
- src = argv[5]->arg;
- idx_ipv6 = 6;
- idx_interface = 7;
- idx_reject_blackhole = 8;
- idx_curr = 9;
- }
- else
- {
- src = NULL;
- idx_ipv6 = 4;
- idx_interface = 5;
- idx_reject_blackhole = 6;
- idx_curr = 7;
- }
-
- tag = distance = vrf = NULL;
- zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf, NULL);
-
- return static_ipv6_func (vty, 0,
- argv[idx_ipv6_prefixlen]->arg,
- src,
- argv[idx_ipv6]->arg,
- argv[idx_interface]->arg,
- argv[idx_reject_blackhole]->arg,
- tag, distance, vrf, NULL);
+ int idx_ipv6_prefixlen = 3;
+ int idx_ipv6;
+ int idx_interface;
+ int idx_reject_blackhole;
+ int idx_curr;
+ char *src, *tag, *distance, *vrf;
+
+ if (!strcmp(argv[4]->text, "from")) {
+ src = argv[5]->arg;
+ idx_ipv6 = 6;
+ idx_interface = 7;
+ idx_reject_blackhole = 8;
+ idx_curr = 9;
+ } else {
+ src = NULL;
+ idx_ipv6 = 4;
+ idx_interface = 5;
+ idx_reject_blackhole = 6;
+ idx_curr = 7;
+ }
+
+ tag = distance = vrf = NULL;
+ zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
+ &vrf, NULL);
+
+ return static_ipv6_func(vty, 0, argv[idx_ipv6_prefixlen]->arg, src,
+ argv[idx_ipv6]->arg, argv[idx_interface]->arg,
+ argv[idx_reject_blackhole]->arg, tag, distance,
+ vrf, NULL);
}
DEFUN (show_ipv6_route,
@@ -2901,94 +2856,86 @@ DEFUN (show_ipv6_route,
VRF_CMD_HELP_STR
"Output JSON\n")
{
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- int first = 1;
- vrf_id_t vrf_id = VRF_DEFAULT;
- struct zebra_vrf *zvrf = NULL;
- char buf[SRCDEST2STR_BUFFER];
- json_object *json = NULL;
- json_object *json_prefix = NULL;
-
- int vrf = (argc > 3 && strmatch (argv[3]->text, "vrf"));
- int uj = vrf ? argc == 6 : argc == 4;
- char *vrfname = vrf ? argv[4]->arg : NULL;
-
- if (vrf)
- {
- if (!(zvrf = zebra_vrf_lookup_by_name (vrfname)))
- {
- if (uj)
- vty_out (vty, "{}%s", VTY_NEWLINE);
- else
- vty_out (vty, "vrf %s not defined%s", vrfname, VTY_NEWLINE);
- return CMD_SUCCESS;
- }
-
- if (zvrf_id (zvrf) == VRF_UNKNOWN)
- {
- if (uj)
- vty_out (vty, "{}%s", VTY_NEWLINE);
- else
- vty_out (vty, "vrf %s inactive%s", vrfname, VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- else
- vrf_id = zvrf_id (zvrf);
- }
-
- table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
- if (!table)
- {
- if (uj)
- vty_out (vty, "{}%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
-
- if (uj)
- {
- json = json_object_new_object();
-
- /* Show all IPv6 route. */
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- {
- RNODE_FOREACH_RIB (rn, rib)
- {
- if (!json_prefix)
- json_prefix = json_object_new_array();
- vty_show_ip_route (vty, rn, rib, json_prefix);
- }
-
- if (json_prefix)
- {
- srcdest_rnode2str (rn, buf, sizeof buf);
- json_object_object_add(json, buf, json_prefix);
- json_prefix = NULL;
- }
- }
-
- vty_out (vty, "%s%s", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY), VTY_NEWLINE);
- json_object_free(json);
- }
- else
- {
- /* Show all IPv6 route. */
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- {
- RNODE_FOREACH_RIB (rn, rib)
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V6_HEADER);
- first = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- }
- }
-
- return CMD_SUCCESS;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ int first = 1;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+ struct zebra_vrf *zvrf = NULL;
+ char buf[SRCDEST2STR_BUFFER];
+ json_object *json = NULL;
+ json_object *json_prefix = NULL;
+
+ int vrf = (argc > 3 && strmatch(argv[3]->text, "vrf"));
+ int uj = vrf ? argc == 6 : argc == 4;
+ char *vrfname = vrf ? argv[4]->arg : NULL;
+
+ if (vrf) {
+ if (!(zvrf = zebra_vrf_lookup_by_name(vrfname))) {
+ if (uj)
+ vty_out(vty, "{}%s", VTY_NEWLINE);
+ else
+ vty_out(vty, "vrf %s not defined%s", vrfname,
+ VTY_NEWLINE);
+ return CMD_SUCCESS;
+ }
+
+ if (zvrf_id(zvrf) == VRF_UNKNOWN) {
+ if (uj)
+ vty_out(vty, "{}%s", VTY_NEWLINE);
+ else
+ vty_out(vty, "vrf %s inactive%s", vrfname,
+ VTY_NEWLINE);
+ return CMD_SUCCESS;
+ } else
+ vrf_id = zvrf_id(zvrf);
+ }
+
+ table = zebra_vrf_table(AFI_IP6, SAFI_UNICAST, vrf_id);
+ if (!table) {
+ if (uj)
+ vty_out(vty, "{}%s", VTY_NEWLINE);
+ return CMD_SUCCESS;
+ }
+
+ if (uj) {
+ json = json_object_new_object();
+
+ /* Show all IPv6 route. */
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn)) {
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ if (!json_prefix)
+ json_prefix = json_object_new_array();
+ vty_show_ip_route(vty, rn, rib, json_prefix);
+ }
+
+ if (json_prefix) {
+ srcdest_rnode2str(rn, buf, sizeof buf);
+ json_object_object_add(json, buf, json_prefix);
+ json_prefix = NULL;
+ }
+ }
+
+ vty_out(vty, "%s%s", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY),
+ VTY_NEWLINE);
+ json_object_free(json);
+ } else {
+ /* Show all IPv6 route. */
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn)) {
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V6_HEADER);
+ first = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ }
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_route_tag,
@@ -3001,46 +2948,44 @@ DEFUN (show_ipv6_route_tag,
"Show only routes with tag\n"
"Tag value\n")
{
- int idx_vrf = 3;
- int idx_name = 4;
- int idx_tag = 6;
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- int first = 1;
- route_tag_t tag = 0;
- vrf_id_t vrf_id = VRF_DEFAULT;
-
- if (strmatch(argv[idx_vrf]->text, "vrf"))
- {
- VRF_GET_ID (vrf_id, argv[idx_name]->arg);
- VTY_GET_INTEGER_RANGE("tag", tag, argv[idx_tag]->arg, 0, 4294967295);
- }
- else
- {
- idx_tag -= 2;
- VTY_GET_INTEGER_RANGE("tag", tag, argv[idx_tag]->arg, 0, 4294967295);
- }
-
- table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
-
- /* Show all IPv6 routes with matching tag value. */
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- if (rib->tag != tag)
- continue;
-
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V6_HEADER);
- first = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- return CMD_SUCCESS;
+ int idx_vrf = 3;
+ int idx_name = 4;
+ int idx_tag = 6;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ int first = 1;
+ route_tag_t tag = 0;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+
+ if (strmatch(argv[idx_vrf]->text, "vrf")) {
+ VRF_GET_ID(vrf_id, argv[idx_name]->arg);
+ VTY_GET_INTEGER_RANGE("tag", tag, argv[idx_tag]->arg, 0,
+ 4294967295);
+ } else {
+ idx_tag -= 2;
+ VTY_GET_INTEGER_RANGE("tag", tag, argv[idx_tag]->arg, 0,
+ 4294967295);
+ }
+
+ table = zebra_vrf_table(AFI_IP6, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
+
+ /* Show all IPv6 routes with matching tag value. */
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ if (rib->tag != tag)
+ continue;
+
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V6_HEADER);
+ first = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_route_prefix_longer,
@@ -3053,52 +2998,46 @@ DEFUN (show_ipv6_route_prefix_longer,
"IPv6 prefix\n"
"Show route matching the specified Network/Mask pair only\n")
{
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- struct prefix p;
- int ret;
- int first = 1;
- vrf_id_t vrf_id = VRF_DEFAULT;
-
- if (strmatch(argv[3]->text, "vrf"))
- {
- VRF_GET_ID (vrf_id, argv[4]->arg);
- ret = str2prefix (argv[5]->arg, &p);
- }
- else
- {
- ret = str2prefix (argv[3]->arg, &p);
- }
-
- if (! ret)
- {
- vty_out (vty, "%% Malformed Prefix%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
-
- /* Show matched type IPv6 routes. */
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- struct prefix *p, *src_p;
- srcdest_rnode_prefixes(rn, &p, &src_p);
-
- if (prefix_match (p, &rn->p))
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V6_HEADER);
- first = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- }
- return CMD_SUCCESS;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ struct prefix p;
+ int ret;
+ int first = 1;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+
+ if (strmatch(argv[3]->text, "vrf")) {
+ VRF_GET_ID(vrf_id, argv[4]->arg);
+ ret = str2prefix(argv[5]->arg, &p);
+ } else {
+ ret = str2prefix(argv[3]->arg, &p);
+ }
+
+ if (!ret) {
+ vty_out(vty, "%% Malformed Prefix%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ table = zebra_vrf_table(AFI_IP6, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
+
+ /* Show matched type IPv6 routes. */
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ struct prefix *p, *src_p;
+ srcdest_rnode_prefixes(rn, &p, &src_p);
+
+ if (prefix_match(p, &rn->p)) {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V6_HEADER);
+ first = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_route_protocol,
@@ -3110,43 +3049,40 @@ DEFUN (show_ipv6_route_protocol,
VRF_CMD_HELP_STR
FRR_IP6_REDIST_HELP_STR_ZEBRA)
{
- int type;
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- int first = 1;
- vrf_id_t vrf_id = VRF_DEFAULT;
-
- int idx = 0;
- if (argv_find (argv, argc, "NAME", &idx))
- VRF_GET_ID (vrf_id, argv[idx]->arg);
-
- char *proto = argv[argc - 1]->text;
- type = proto_redistnum (AFI_IP6, proto);
-
- if (type < 0)
- {
- vty_out (vty, "Unknown route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
-
- /* Show matched type IPv6 routes. */
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- if (rib->type == type)
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V6_HEADER);
- first = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
+ int type;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ int first = 1;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+
+ int idx = 0;
+ if (argv_find(argv, argc, "NAME", &idx))
+ VRF_GET_ID(vrf_id, argv[idx]->arg);
+
+ char *proto = argv[argc - 1]->text;
+ type = proto_redistnum(AFI_IP6, proto);
+
+ if (type < 0) {
+ vty_out(vty, "Unknown route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ table = zebra_vrf_table(AFI_IP6, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
+
+ /* Show matched type IPv6 routes. */
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ if (rib->type == type) {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V6_HEADER);
+ first = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
}
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_route_addr,
@@ -3158,44 +3094,39 @@ DEFUN (show_ipv6_route_addr,
VRF_CMD_HELP_STR
"IPv6 Address\n")
{
- int ret;
- struct prefix_ipv6 p;
- struct route_table *table;
- struct route_node *rn;
- vrf_id_t vrf_id = VRF_DEFAULT;
-
- if (strmatch(argv[3]->text, "vrf"))
- {
- VRF_GET_ID (vrf_id, argv[4]->arg);
- ret = str2prefix_ipv6 (argv[5]->arg, &p);
- }
- else
- {
- ret = str2prefix_ipv6 (argv[3]->arg, &p);
- }
+ int ret;
+ struct prefix_ipv6 p;
+ struct route_table *table;
+ struct route_node *rn;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+
+ if (strmatch(argv[3]->text, "vrf")) {
+ VRF_GET_ID(vrf_id, argv[4]->arg);
+ ret = str2prefix_ipv6(argv[5]->arg, &p);
+ } else {
+ ret = str2prefix_ipv6(argv[3]->arg, &p);
+ }
- if (ret <= 0)
- {
- vty_out (vty, "Malformed IPv6 address%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ if (ret <= 0) {
+ vty_out(vty, "Malformed IPv6 address%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
+ table = zebra_vrf_table(AFI_IP6, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
- rn = route_node_match (table, (struct prefix *) &p);
- if (! rn)
- {
- vty_out (vty, "%% Network not in table%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ rn = route_node_match(table, (struct prefix *)&p);
+ if (!rn) {
+ vty_out(vty, "%% Network not in table%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- vty_show_ip_route_detail (vty, rn, 0);
+ vty_show_ip_route_detail(vty, rn, 0);
- route_unlock_node (rn);
+ route_unlock_node(rn);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_route_prefix,
@@ -3207,42 +3138,38 @@ DEFUN (show_ipv6_route_prefix,
VRF_CMD_HELP_STR
"IPv6 prefix\n")
{
- int ret;
- struct prefix_ipv6 p;
- struct route_table *table;
- struct route_node *rn;
- vrf_id_t vrf_id = VRF_DEFAULT;
-
- if (strmatch(argv[3]->text, "vrf"))
- {
- VRF_GET_ID (vrf_id, argv[4]->arg);
- ret = str2prefix_ipv6 (argv[5]->arg, &p);
- }
- else
- ret = str2prefix_ipv6 (argv[3]->arg, &p);
-
- if (ret <= 0)
- {
- vty_out (vty, "Malformed IPv6 prefix%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ int ret;
+ struct prefix_ipv6 p;
+ struct route_table *table;
+ struct route_node *rn;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+
+ if (strmatch(argv[3]->text, "vrf")) {
+ VRF_GET_ID(vrf_id, argv[4]->arg);
+ ret = str2prefix_ipv6(argv[5]->arg, &p);
+ } else
+ ret = str2prefix_ipv6(argv[3]->arg, &p);
+
+ if (ret <= 0) {
+ vty_out(vty, "Malformed IPv6 prefix%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
+ table = zebra_vrf_table(AFI_IP6, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
- rn = route_node_match (table, (struct prefix *) &p);
- if (! rn || rn->p.prefixlen != p.prefixlen)
- {
- vty_out (vty, "%% Network not in table%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ rn = route_node_match(table, (struct prefix *)&p);
+ if (!rn || rn->p.prefixlen != p.prefixlen) {
+ vty_out(vty, "%% Network not in table%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- vty_show_ip_route_detail (vty, rn, 0);
+ vty_show_ip_route_detail(vty, rn, 0);
- route_unlock_node (rn);
+ route_unlock_node(rn);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -3256,19 +3183,19 @@ DEFUN (show_ipv6_route_summary,
VRF_CMD_HELP_STR
"Summary of all IPv6 routes\n")
{
- struct route_table *table;
- vrf_id_t vrf_id = VRF_DEFAULT;
+ struct route_table *table;
+ vrf_id_t vrf_id = VRF_DEFAULT;
- if (strmatch(argv[3]->text, "vrf"))
- VRF_GET_ID (vrf_id, argv[4]->arg);
+ if (strmatch(argv[3]->text, "vrf"))
+ VRF_GET_ID(vrf_id, argv[4]->arg);
- table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
+ table = zebra_vrf_table(AFI_IP6, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
- vty_show_ip_route_summary (vty, table);
+ vty_show_ip_route_summary(vty, table);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -3283,19 +3210,19 @@ DEFUN (show_ipv6_route_summary_prefix,
"Summary of all IPv6 routes\n"
"Prefix routes\n")
{
- struct route_table *table;
- vrf_id_t vrf_id = VRF_DEFAULT;
+ struct route_table *table;
+ vrf_id_t vrf_id = VRF_DEFAULT;
- if (strmatch(argv[3]->text, "vrf"))
- VRF_GET_ID (vrf_id, argv[4]->arg);
+ if (strmatch(argv[3]->text, "vrf"))
+ VRF_GET_ID(vrf_id, argv[4]->arg);
- table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
+ table = zebra_vrf_table(AFI_IP6, SAFI_UNICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
- vty_show_ip_route_summary_prefix (vty, table);
+ vty_show_ip_route_summary_prefix(vty, table);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -3311,31 +3238,30 @@ DEFUN (show_ipv6_mroute,
"IPv6 Multicast routing table\n"
VRF_CMD_HELP_STR)
{
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- int first = 1;
- vrf_id_t vrf_id = VRF_DEFAULT;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ int first = 1;
+ vrf_id_t vrf_id = VRF_DEFAULT;
- if (argc == 5)
- VRF_GET_ID (vrf_id, argv[4]->arg);
+ if (argc == 5)
+ VRF_GET_ID(vrf_id, argv[4]->arg);
- table = zebra_vrf_table (AFI_IP6, SAFI_MULTICAST, vrf_id);
- if (! table)
- return CMD_SUCCESS;
+ table = zebra_vrf_table(AFI_IP6, SAFI_MULTICAST, vrf_id);
+ if (!table)
+ return CMD_SUCCESS;
- /* Show all IPv6 route. */
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V6_HEADER);
- first = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- return CMD_SUCCESS;
+ /* Show all IPv6 route. */
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V6_HEADER);
+ first = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ return CMD_SUCCESS;
}
@@ -3347,41 +3273,40 @@ DEFUN (show_ipv6_route_vrf_all,
"IPv6 routing table\n"
VRF_ALL_CMD_HELP_STR)
{
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
- int first = 1;
- int vrf_header = 1;
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
- continue;
-
- /* Show all IPv6 route. */
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V6_HEADER);
- first = 0;
- }
-
- if (vrf_header)
- {
- vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
- vrf_header = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- vrf_header = 1;
- }
-
- return CMD_SUCCESS;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+ int first = 1;
+ int vrf_header = 1;
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
+ continue;
+
+ /* Show all IPv6 route. */
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V6_HEADER);
+ first = 0;
+ }
+
+ if (vrf_header) {
+ vty_out(vty, "%sVRF %s:%s", VTY_NEWLINE,
+ zvrf_name(zvrf), VTY_NEWLINE);
+ vrf_header = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ vrf_header = 1;
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_route_vrf_all_tag,
@@ -3394,49 +3319,49 @@ DEFUN (show_ipv6_route_vrf_all_tag,
"Show only routes with tag\n"
"Tag value\n")
{
- int idx_number = 6;
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
- int first = 1;
- int vrf_header = 1;
- route_tag_t tag = 0;
-
- if (argv[idx_number]->arg)
- VTY_GET_INTEGER_RANGE("tag", tag, argv[idx_number]->arg, 0, 4294967295);
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
- continue;
-
- /* Show all IPv6 routes with matching tag value. */
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- if (rib->tag != tag)
- continue;
-
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V6_HEADER);
- first = 0;
- }
-
- if (vrf_header)
- {
- vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
- vrf_header = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- vrf_header = 1;
- }
-
- return CMD_SUCCESS;
+ int idx_number = 6;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+ int first = 1;
+ int vrf_header = 1;
+ route_tag_t tag = 0;
+
+ if (argv[idx_number]->arg)
+ VTY_GET_INTEGER_RANGE("tag", tag, argv[idx_number]->arg, 0,
+ 4294967295);
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
+ continue;
+
+ /* Show all IPv6 routes with matching tag value. */
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ if (rib->tag != tag)
+ continue;
+
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V6_HEADER);
+ first = 0;
+ }
+
+ if (vrf_header) {
+ vty_out(vty, "%sVRF %s:%s", VTY_NEWLINE,
+ zvrf_name(zvrf), VTY_NEWLINE);
+ vrf_header = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ vrf_header = 1;
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_route_vrf_all_prefix_longer,
@@ -3449,56 +3374,56 @@ DEFUN (show_ipv6_route_vrf_all_prefix_longer,
"IPv6 prefix\n"
"Show route matching the specified Network/Mask pair only\n")
{
- int idx_ipv6_prefixlen = 5;
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- struct prefix p;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
- int ret;
- int first = 1;
- int vrf_header = 1;
-
- ret = str2prefix (argv[idx_ipv6_prefixlen]->arg, &p);
- if (! ret)
- {
- vty_out (vty, "%% Malformed Prefix%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
- continue;
-
- /* Show matched type IPv6 routes. */
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- struct prefix *p, *src_p;
- srcdest_rnode_prefixes(rn, &p, &src_p);
- if (prefix_match (p, &rn->p))
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V6_HEADER);
- first = 0;
- }
-
- if (vrf_header)
- {
- vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
- vrf_header = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- }
- vrf_header = 1;
- }
-
- return CMD_SUCCESS;
+ int idx_ipv6_prefixlen = 5;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ struct prefix p;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+ int ret;
+ int first = 1;
+ int vrf_header = 1;
+
+ ret = str2prefix(argv[idx_ipv6_prefixlen]->arg, &p);
+ if (!ret) {
+ vty_out(vty, "%% Malformed Prefix%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
+ continue;
+
+ /* Show matched type IPv6 routes. */
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ struct prefix *p, *src_p;
+ srcdest_rnode_prefixes(rn, &p, &src_p);
+ if (prefix_match(p, &rn->p)) {
+ if (first) {
+ vty_out(vty,
+ SHOW_ROUTE_V6_HEADER);
+ first = 0;
+ }
+
+ if (vrf_header) {
+ vty_out(vty, "%sVRF %s:%s",
+ VTY_NEWLINE,
+ zvrf_name(zvrf),
+ VTY_NEWLINE);
+ vrf_header = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ }
+ vrf_header = 1;
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_route_vrf_all_protocol,
@@ -3510,52 +3435,49 @@ DEFUN (show_ipv6_route_vrf_all_protocol,
VRF_ALL_CMD_HELP_STR
FRR_IP6_REDIST_HELP_STR_ZEBRA)
{
- int type;
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
- int first = 1;
- int vrf_header = 1;
-
- char *proto = argv[argc - 1]->text;
- type = proto_redistnum (AFI_IP6, proto);
-
- if (type < 0)
- {
- vty_out (vty, "Unknown route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
- continue;
-
- /* Show matched type IPv6 routes. */
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- if (rib->type == type)
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V6_HEADER);
- first = 0;
- }
-
- if (vrf_header)
- {
- vty_out (vty, "%sVRF %s:%s", VTY_NEWLINE, zvrf_name (zvrf), VTY_NEWLINE);
- vrf_header = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- vrf_header = 1;
- }
-
- return CMD_SUCCESS;
+ int type;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+ int first = 1;
+ int vrf_header = 1;
+
+ char *proto = argv[argc - 1]->text;
+ type = proto_redistnum(AFI_IP6, proto);
+
+ if (type < 0) {
+ vty_out(vty, "Unknown route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
+ continue;
+
+ /* Show matched type IPv6 routes. */
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ if (rib->type == type) {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V6_HEADER);
+ first = 0;
+ }
+
+ if (vrf_header) {
+ vty_out(vty, "%sVRF %s:%s", VTY_NEWLINE,
+ zvrf_name(zvrf), VTY_NEWLINE);
+ vrf_header = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ vrf_header = 1;
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_route_vrf_all_addr,
@@ -3567,37 +3489,36 @@ DEFUN (show_ipv6_route_vrf_all_addr,
VRF_ALL_CMD_HELP_STR
"IPv6 Address\n")
{
- int idx_ipv6 = 5;
- int ret;
- struct prefix_ipv6 p;
- struct route_table *table;
- struct route_node *rn;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
-
- ret = str2prefix_ipv6 (argv[idx_ipv6]->arg, &p);
- if (ret <= 0)
- {
- vty_out (vty, "Malformed IPv6 address%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ int idx_ipv6 = 5;
+ int ret;
+ struct prefix_ipv6 p;
+ struct route_table *table;
+ struct route_node *rn;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+
+ ret = str2prefix_ipv6(argv[idx_ipv6]->arg, &p);
+ if (ret <= 0) {
+ vty_out(vty, "Malformed IPv6 address%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
- continue;
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
+ continue;
- rn = route_node_match (table, (struct prefix *) &p);
- if (! rn)
- continue;
+ rn = route_node_match(table, (struct prefix *)&p);
+ if (!rn)
+ continue;
- vty_show_ip_route_detail (vty, rn, 0);
+ vty_show_ip_route_detail(vty, rn, 0);
- route_unlock_node (rn);
- }
+ route_unlock_node(rn);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_route_vrf_all_prefix,
@@ -3609,42 +3530,40 @@ DEFUN (show_ipv6_route_vrf_all_prefix,
VRF_ALL_CMD_HELP_STR
"IPv6 prefix\n")
{
- int idx_ipv6_prefixlen = 5;
- int ret;
- struct prefix_ipv6 p;
- struct route_table *table;
- struct route_node *rn;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
-
- ret = str2prefix_ipv6 (argv[idx_ipv6_prefixlen]->arg, &p);
- if (ret <= 0)
- {
- vty_out (vty, "Malformed IPv6 prefix%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ int idx_ipv6_prefixlen = 5;
+ int ret;
+ struct prefix_ipv6 p;
+ struct route_table *table;
+ struct route_node *rn;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+
+ ret = str2prefix_ipv6(argv[idx_ipv6_prefixlen]->arg, &p);
+ if (ret <= 0) {
+ vty_out(vty, "Malformed IPv6 prefix%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
- continue;
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
+ continue;
- rn = route_node_match (table, (struct prefix *) &p);
- if (! rn)
- continue;
- if (rn->p.prefixlen != p.prefixlen)
- {
- route_unlock_node (rn);
- continue;
- }
+ rn = route_node_match(table, (struct prefix *)&p);
+ if (!rn)
+ continue;
+ if (rn->p.prefixlen != p.prefixlen) {
+ route_unlock_node(rn);
+ continue;
+ }
- vty_show_ip_route_detail (vty, rn, 0);
+ vty_show_ip_route_detail(vty, rn, 0);
- route_unlock_node (rn);
- }
+ route_unlock_node(rn);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_route_vrf_all_summary,
@@ -3656,14 +3575,15 @@ DEFUN (show_ipv6_route_vrf_all_summary,
VRF_ALL_CMD_HELP_STR
"Summary of all IPv6 routes\n")
{
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- if ((zvrf = vrf->info) != NULL)
- vty_show_ip_route_summary (vty, zvrf->table[AFI_IP6][SAFI_UNICAST]);
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ if ((zvrf = vrf->info) != NULL)
+ vty_show_ip_route_summary(vty,
+ zvrf->table[AFI_IP6][SAFI_UNICAST]);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_mroute_vrf_all,
@@ -3674,32 +3594,31 @@ DEFUN (show_ipv6_mroute_vrf_all,
"IPv6 Multicast routing table\n"
VRF_ALL_CMD_HELP_STR)
{
- struct route_table *table;
- struct route_node *rn;
- struct rib *rib;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
- int first = 1;
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if ((zvrf = vrf->info) == NULL ||
- (table = zvrf->table[AFI_IP6][SAFI_MULTICAST]) == NULL)
- continue;
-
- /* Show all IPv6 route. */
- for (rn = route_top (table); rn; rn = srcdest_route_next (rn))
- RNODE_FOREACH_RIB (rn, rib)
- {
- if (first)
- {
- vty_out (vty, SHOW_ROUTE_V6_HEADER);
- first = 0;
- }
- vty_show_ip_route (vty, rn, rib, NULL);
- }
- }
- return CMD_SUCCESS;
+ struct route_table *table;
+ struct route_node *rn;
+ struct rib *rib;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+ int first = 1;
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if ((zvrf = vrf->info) == NULL
+ || (table = zvrf->table[AFI_IP6][SAFI_MULTICAST]) == NULL)
+ continue;
+
+ /* Show all IPv6 route. */
+ for (rn = route_top(table); rn; rn = srcdest_route_next(rn))
+ RNODE_FOREACH_RIB(rn, rib)
+ {
+ if (first) {
+ vty_out(vty, SHOW_ROUTE_V6_HEADER);
+ first = 0;
+ }
+ vty_show_ip_route(vty, rn, rib, NULL);
+ }
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ipv6_route_vrf_all_summary_prefix,
@@ -3712,93 +3631,107 @@ DEFUN (show_ipv6_route_vrf_all_summary_prefix,
"Summary of all IPv6 routes\n"
"Prefix routes\n")
{
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- if ((zvrf = vrf->info) != NULL)
- vty_show_ip_route_summary_prefix (vty, zvrf->table[AFI_IP6][SAFI_UNICAST]);
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ if ((zvrf = vrf->info) != NULL)
+ vty_show_ip_route_summary_prefix(
+ vty, zvrf->table[AFI_IP6][SAFI_UNICAST]);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* Write IPv6 static route configuration. */
-static int
-static_config_ipv6 (struct vty *vty)
-{
- struct route_node *rn;
- struct static_route *si;
- int write = 0;
- char buf[SRCDEST2STR_BUFFER];
- struct route_table *stable;
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if (!(zvrf = vrf->info))
- continue;
- if ((stable = zvrf->stable[AFI_IP6][SAFI_UNICAST]) == NULL)
- continue;
-
- for (rn = route_top (stable); rn; rn = srcdest_route_next (rn))
- for (si = rn->info; si; si = si->next)
- {
- vty_out (vty, "ipv6 route %s", srcdest_rnode2str (rn, buf, sizeof buf));
-
- switch (si->type)
- {
- case STATIC_IPV4_GATEWAY:
- vty_out (vty, " %s", inet_ntoa (si->addr.ipv4));
- break;
- case STATIC_IPV6_GATEWAY:
- vty_out (vty, " %s", inet_ntop (AF_INET6, &si->addr.ipv6, buf, BUFSIZ));
- break;
- case STATIC_IFNAME:
- vty_out (vty, " %s", si->ifname);
- break;
- case STATIC_BLACKHOLE:
- vty_out (vty, " Null0" );
- break;
- case STATIC_IPV6_GATEWAY_IFNAME:
- vty_out (vty, " %s %s",
- inet_ntop (AF_INET6, &si->addr.ipv6, buf, BUFSIZ),
- ifindex2ifname (si->ifindex, si->vrf_id));
- break;
- }
-
- /* flags are incompatible with STATIC_BLACKHOLE */
- if (si->type != STATIC_BLACKHOLE)
- {
- if (CHECK_FLAG(si->flags, ZEBRA_FLAG_REJECT))
- vty_out (vty, " %s", "reject");
- if (CHECK_FLAG(si->flags, ZEBRA_FLAG_BLACKHOLE))
- vty_out (vty, " %s", "blackhole");
- }
-
- if (si->tag)
- vty_out (vty, " tag %"ROUTE_TAG_PRI, si->tag);
-
- if (si->distance != ZEBRA_STATIC_DISTANCE_DEFAULT)
- vty_out (vty, " %d", si->distance);
-
- if (si->vrf_id != VRF_DEFAULT)
- {
- vty_out (vty, " vrf %s", zvrf_name (zvrf));
- }
-
- /* Label information */
- if (si->snh_label.num_labels)
- vty_out (vty, " label %s",
- mpls_label2str (si->snh_label.num_labels,
- si->snh_label.label, buf, sizeof buf));
-
- vty_out (vty, "%s", VTY_NEWLINE);
-
- write = 1;
- }
- }
- return write;
+static int static_config_ipv6(struct vty *vty)
+{
+ struct route_node *rn;
+ struct static_route *si;
+ int write = 0;
+ char buf[SRCDEST2STR_BUFFER];
+ struct route_table *stable;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if (!(zvrf = vrf->info))
+ continue;
+ if ((stable = zvrf->stable[AFI_IP6][SAFI_UNICAST]) == NULL)
+ continue;
+
+ for (rn = route_top(stable); rn; rn = srcdest_route_next(rn))
+ for (si = rn->info; si; si = si->next) {
+ vty_out(vty, "ipv6 route %s",
+ srcdest_rnode2str(rn, buf, sizeof buf));
+
+ switch (si->type) {
+ case STATIC_IPV4_GATEWAY:
+ vty_out(vty, " %s",
+ inet_ntoa(si->addr.ipv4));
+ break;
+ case STATIC_IPV6_GATEWAY:
+ vty_out(vty, " %s",
+ inet_ntop(AF_INET6,
+ &si->addr.ipv6, buf,
+ BUFSIZ));
+ break;
+ case STATIC_IFNAME:
+ vty_out(vty, " %s", si->ifname);
+ break;
+ case STATIC_BLACKHOLE:
+ vty_out(vty, " Null0");
+ break;
+ case STATIC_IPV6_GATEWAY_IFNAME:
+ vty_out(vty, " %s %s",
+ inet_ntop(AF_INET6,
+ &si->addr.ipv6, buf,
+ BUFSIZ),
+ ifindex2ifname(si->ifindex,
+ si->vrf_id));
+ break;
+ }
+
+ /* flags are incompatible with STATIC_BLACKHOLE
+ */
+ if (si->type != STATIC_BLACKHOLE) {
+ if (CHECK_FLAG(si->flags,
+ ZEBRA_FLAG_REJECT))
+ vty_out(vty, " %s", "reject");
+ if (CHECK_FLAG(si->flags,
+ ZEBRA_FLAG_BLACKHOLE))
+ vty_out(vty, " %s",
+ "blackhole");
+ }
+
+ if (si->tag)
+ vty_out(vty, " tag %" ROUTE_TAG_PRI,
+ si->tag);
+
+ if (si->distance
+ != ZEBRA_STATIC_DISTANCE_DEFAULT)
+ vty_out(vty, " %d", si->distance);
+
+ if (si->vrf_id != VRF_DEFAULT) {
+ vty_out(vty, " vrf %s",
+ zvrf_name(zvrf));
+ }
+
+ /* Label information */
+ if (si->snh_label.num_labels)
+ vty_out(vty, " label %s",
+ mpls_label2str(
+ si->snh_label
+ .num_labels,
+ si->snh_label.label,
+ buf, sizeof buf));
+
+ vty_out(vty, "%s", VTY_NEWLINE);
+
+ write = 1;
+ }
+ }
+ return write;
}
DEFUN (allow_external_route_update,
@@ -3806,9 +3739,9 @@ DEFUN (allow_external_route_update,
"allow-external-route-update",
"Allow FRR routes to be overwritten by external processes\n")
{
- allow_delete = 1;
+ allow_delete = 1;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_allow_external_route_update,
@@ -3817,9 +3750,9 @@ DEFUN (no_allow_external_route_update,
NO_STR
"Allow FRR routes to be overwritten by external processes\n")
{
- allow_delete = 0;
+ allow_delete = 0;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* show vrf */
@@ -3829,40 +3762,39 @@ DEFUN (show_vrf,
SHOW_STR
"VRF\n")
{
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- if (!(zvrf = vrf->info))
- continue;
- if (!zvrf_id (zvrf))
- continue;
-
- vty_out (vty, "vrf %s ", zvrf_name (zvrf));
- if (zvrf_id (zvrf) == VRF_UNKNOWN)
- vty_out (vty, "inactive");
- else
- vty_out (vty, "id %u table %u", zvrf_id (zvrf), zvrf->table_id);
- vty_out (vty, "%s", VTY_NEWLINE);
-
- }
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ if (!(zvrf = vrf->info))
+ continue;
+ if (!zvrf_id(zvrf))
+ continue;
+
+ vty_out(vty, "vrf %s ", zvrf_name(zvrf));
+ if (zvrf_id(zvrf) == VRF_UNKNOWN)
+ vty_out(vty, "inactive");
+ else
+ vty_out(vty, "id %u table %u", zvrf_id(zvrf),
+ zvrf->table_id);
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* Static ip route configuration write function. */
-static int
-zebra_ip_config (struct vty *vty)
+static int zebra_ip_config(struct vty *vty)
{
- int write = 0;
+ int write = 0;
- write += static_config_ipv4 (vty, SAFI_UNICAST, "ip route");
- write += static_config_ipv4 (vty, SAFI_MULTICAST, "ip mroute");
- write += static_config_ipv6 (vty);
+ write += static_config_ipv4(vty, SAFI_UNICAST, "ip route");
+ write += static_config_ipv4(vty, SAFI_MULTICAST, "ip mroute");
+ write += static_config_ipv6(vty);
- write += zebra_import_table_config (vty);
- return write;
+ write += zebra_import_table_config(vty);
+ return write;
}
DEFUN (ip_zebra_import_table_distance,
@@ -3876,30 +3808,33 @@ DEFUN (ip_zebra_import_table_distance,
"route-map for filtering\n"
"route-map name\n")
{
- u_int32_t table_id = 0;
-
- VTY_GET_INTEGER("table", table_id, argv[2]->arg);
- int distance = ZEBRA_TABLE_DISTANCE_DEFAULT;
- char *rmap = strmatch (argv[argc - 2]->text, "route-map") ?
- XSTRDUP(MTYPE_ROUTE_MAP_NAME, argv[argc - 1]->arg) : NULL;
- if (argc == 7 || (argc == 5 && !rmap))
- VTY_GET_INTEGER_RANGE("distance", distance, argv[4]->arg, 1, 255);
-
- if (!is_zebra_valid_kernel_table(table_id))
- {
- vty_out(vty, "Invalid routing table ID, %d. Must be in range 1-252%s",
- table_id, VTY_NEWLINE);
- return CMD_WARNING;
- }
+ u_int32_t table_id = 0;
+
+ VTY_GET_INTEGER("table", table_id, argv[2]->arg);
+ int distance = ZEBRA_TABLE_DISTANCE_DEFAULT;
+ char *rmap =
+ strmatch(argv[argc - 2]->text, "route-map")
+ ? XSTRDUP(MTYPE_ROUTE_MAP_NAME, argv[argc - 1]->arg)
+ : NULL;
+ if (argc == 7 || (argc == 5 && !rmap))
+ VTY_GET_INTEGER_RANGE("distance", distance, argv[4]->arg, 1,
+ 255);
+
+ if (!is_zebra_valid_kernel_table(table_id)) {
+ vty_out(vty,
+ "Invalid routing table ID, %d. Must be in range 1-252%s",
+ table_id, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- if (is_zebra_main_routing_table(table_id))
- {
- vty_out(vty, "Invalid routing table ID, %d. Must be non-default table%s",
- table_id, VTY_NEWLINE);
- return CMD_WARNING;
- }
+ if (is_zebra_main_routing_table(table_id)) {
+ vty_out(vty,
+ "Invalid routing table ID, %d. Must be non-default table%s",
+ table_id, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- return (zebra_import_table(AFI_IP, table_id, distance, rmap, 1));
+ return (zebra_import_table(AFI_IP, table_id, distance, rmap, 1));
}
DEFUN (no_ip_zebra_import_table,
@@ -3914,151 +3849,155 @@ DEFUN (no_ip_zebra_import_table,
"route-map for filtering\n"
"route-map name\n")
{
- u_int32_t table_id = 0;
- VTY_GET_INTEGER("table", table_id, argv[3]->arg);
+ u_int32_t table_id = 0;
+ VTY_GET_INTEGER("table", table_id, argv[3]->arg);
- if (!is_zebra_valid_kernel_table(table_id))
- {
- vty_out(vty, "Invalid routing table ID. Must be in range 1-252%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
+ if (!is_zebra_valid_kernel_table(table_id)) {
+ vty_out(vty,
+ "Invalid routing table ID. Must be in range 1-252%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- if (is_zebra_main_routing_table(table_id))
- {
- vty_out(vty, "Invalid routing table ID, %d. Must be non-default table%s",
- table_id, VTY_NEWLINE);
- return CMD_WARNING;
- }
+ if (is_zebra_main_routing_table(table_id)) {
+ vty_out(vty,
+ "Invalid routing table ID, %d. Must be non-default table%s",
+ table_id, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- if (!is_zebra_import_table_enabled(AFI_IP, table_id))
- return CMD_SUCCESS;
+ if (!is_zebra_import_table_enabled(AFI_IP, table_id))
+ return CMD_SUCCESS;
- return (zebra_import_table(AFI_IP, table_id, 0, NULL, 0));
+ return (zebra_import_table(AFI_IP, table_id, 0, NULL, 0));
}
-static int
-config_write_protocol (struct vty *vty)
+static int config_write_protocol(struct vty *vty)
{
- if (allow_delete)
- vty_out(vty, "allow-external-route-update%s", VTY_NEWLINE);
+ if (allow_delete)
+ vty_out(vty, "allow-external-route-update%s", VTY_NEWLINE);
- if (zebra_rnh_ip_default_route)
- vty_out(vty, "ip nht resolve-via-default%s", VTY_NEWLINE);
+ if (zebra_rnh_ip_default_route)
+ vty_out(vty, "ip nht resolve-via-default%s", VTY_NEWLINE);
- if (zebra_rnh_ipv6_default_route)
- vty_out(vty, "ipv6 nht resolve-via-default%s", VTY_NEWLINE);
+ if (zebra_rnh_ipv6_default_route)
+ vty_out(vty, "ipv6 nht resolve-via-default%s", VTY_NEWLINE);
- enum multicast_mode ipv4_multicast_mode = multicast_mode_ipv4_get ();
+ enum multicast_mode ipv4_multicast_mode = multicast_mode_ipv4_get();
- if (ipv4_multicast_mode != MCAST_NO_CONFIG)
- vty_out (vty, "ip multicast rpf-lookup-mode %s%s",
- ipv4_multicast_mode == MCAST_URIB_ONLY ? "urib-only" :
- ipv4_multicast_mode == MCAST_MRIB_ONLY ? "mrib-only" :
- ipv4_multicast_mode == MCAST_MIX_MRIB_FIRST ? "mrib-then-urib" :
- ipv4_multicast_mode == MCAST_MIX_DISTANCE ? "lower-distance" :
- "longer-prefix",
- VTY_NEWLINE);
+ if (ipv4_multicast_mode != MCAST_NO_CONFIG)
+ vty_out(vty, "ip multicast rpf-lookup-mode %s%s",
+ ipv4_multicast_mode == MCAST_URIB_ONLY
+ ? "urib-only"
+ : ipv4_multicast_mode == MCAST_MRIB_ONLY
+ ? "mrib-only"
+ : ipv4_multicast_mode
+ == MCAST_MIX_MRIB_FIRST
+ ? "mrib-then-urib"
+ : ipv4_multicast_mode
+ == MCAST_MIX_DISTANCE
+ ? "lower-distance"
+ : "longer-prefix",
+ VTY_NEWLINE);
- zebra_routemap_config_write_protocol(vty);
+ zebra_routemap_config_write_protocol(vty);
- return 1;
+ return 1;
}
/* IP node for static routes. */
-static struct cmd_node ip_node = { IP_NODE, "", 1 };
-static struct cmd_node protocol_node = { PROTOCOL_NODE, "", 1 };
+static struct cmd_node ip_node = {IP_NODE, "", 1};
+static struct cmd_node protocol_node = {PROTOCOL_NODE, "", 1};
/* Route VTY. */
-void
-zebra_vty_init (void)
-{
- install_node (&ip_node, zebra_ip_config);
- install_node (&protocol_node, config_write_protocol);
-
- install_element (CONFIG_NODE, &allow_external_route_update_cmd);
- install_element (CONFIG_NODE, &no_allow_external_route_update_cmd);
- install_element (CONFIG_NODE, &ip_mroute_dist_cmd);
- install_element (CONFIG_NODE, &no_ip_mroute_dist_cmd);
- install_element (CONFIG_NODE, &ip_multicast_mode_cmd);
- install_element (CONFIG_NODE, &no_ip_multicast_mode_cmd);
- install_element (CONFIG_NODE, &ip_route_cmd);
- install_element (CONFIG_NODE, &ip_route_flags_cmd);
- install_element (CONFIG_NODE, &ip_route_mask_cmd);
- install_element (CONFIG_NODE, &ip_route_mask_flags_cmd);
- install_element (CONFIG_NODE, &no_ip_route_cmd);
- install_element (CONFIG_NODE, &no_ip_route_mask_cmd);
- install_element (CONFIG_NODE, &ip_zebra_import_table_distance_cmd);
- install_element (CONFIG_NODE, &no_ip_zebra_import_table_cmd);
-
- install_element (VIEW_NODE, &show_vrf_cmd);
- install_element (VIEW_NODE, &show_ip_route_cmd);
- install_element (VIEW_NODE, &show_ip_route_ospf_instance_cmd);
- install_element (VIEW_NODE, &show_ip_route_tag_cmd);
- install_element (VIEW_NODE, &show_ip_nht_cmd);
- install_element (VIEW_NODE, &show_ip_nht_vrf_all_cmd);
- install_element (VIEW_NODE, &show_ipv6_nht_cmd);
- install_element (VIEW_NODE, &show_ipv6_nht_vrf_all_cmd);
- install_element (VIEW_NODE, &show_ip_route_addr_cmd);
- install_element (VIEW_NODE, &show_ip_route_prefix_cmd);
- install_element (VIEW_NODE, &show_ip_route_prefix_longer_cmd);
- install_element (VIEW_NODE, &show_ip_route_protocol_cmd);
- install_element (VIEW_NODE, &show_ip_route_supernets_cmd);
- install_element (VIEW_NODE, &show_ip_route_summary_cmd);
- install_element (VIEW_NODE, &show_ip_route_summary_prefix_cmd);
-
- install_element (VIEW_NODE, &show_ip_rpf_cmd);
- install_element (VIEW_NODE, &show_ip_rpf_addr_cmd);
-
- /* Commands for VRF */
-
- install_element (CONFIG_NODE, &no_ip_route_flags_cmd);
- install_element (CONFIG_NODE, &no_ip_route_mask_flags_cmd);
-
- install_element (VIEW_NODE, &show_ip_route_vrf_cmd);
-
- install_element (VIEW_NODE, &show_ip_route_vrf_all_cmd);
- install_element (VIEW_NODE, &show_ip_route_vrf_all_tag_cmd);
- install_element (VIEW_NODE, &show_ip_route_vrf_all_addr_cmd);
- install_element (VIEW_NODE, &show_ip_route_vrf_all_prefix_cmd);
- install_element (VIEW_NODE, &show_ip_route_vrf_all_prefix_longer_cmd);
- install_element (VIEW_NODE, &show_ip_route_vrf_all_protocol_cmd);
- install_element (VIEW_NODE, &show_ip_route_vrf_all_supernets_cmd);
- install_element (VIEW_NODE, &show_ip_route_vrf_all_summary_cmd);
- install_element (VIEW_NODE, &show_ip_route_vrf_all_summary_prefix_cmd);
-
- install_element (CONFIG_NODE, &ipv6_route_cmd);
- install_element (CONFIG_NODE, &ipv6_route_flags_cmd);
- install_element (CONFIG_NODE, &ipv6_route_ifname_cmd);
- install_element (CONFIG_NODE, &ipv6_route_ifname_flags_cmd);
- install_element (CONFIG_NODE, &no_ipv6_route_cmd);
- install_element (CONFIG_NODE, &no_ipv6_route_flags_cmd);
- install_element (CONFIG_NODE, &no_ipv6_route_ifname_cmd);
- install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_cmd);
- install_element (CONFIG_NODE, &ip_nht_default_route_cmd);
- install_element (CONFIG_NODE, &no_ip_nht_default_route_cmd);
- install_element (CONFIG_NODE, &ipv6_nht_default_route_cmd);
- install_element (CONFIG_NODE, &no_ipv6_nht_default_route_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_tag_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_summary_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_summary_prefix_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_protocol_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_addr_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_prefix_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_prefix_longer_cmd);
-
- install_element (VIEW_NODE, &show_ipv6_mroute_cmd);
-
- /* Commands for VRF */
- install_element (VIEW_NODE, &show_ipv6_route_vrf_all_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_vrf_all_tag_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_vrf_all_summary_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_vrf_all_summary_prefix_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_vrf_all_protocol_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_vrf_all_addr_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_vrf_all_prefix_cmd);
- install_element (VIEW_NODE, &show_ipv6_route_vrf_all_prefix_longer_cmd);
-
- install_element (VIEW_NODE, &show_ipv6_mroute_vrf_all_cmd);
+void zebra_vty_init(void)
+{
+ install_node(&ip_node, zebra_ip_config);
+ install_node(&protocol_node, config_write_protocol);
+
+ install_element(CONFIG_NODE, &allow_external_route_update_cmd);
+ install_element(CONFIG_NODE, &no_allow_external_route_update_cmd);
+ install_element(CONFIG_NODE, &ip_mroute_dist_cmd);
+ install_element(CONFIG_NODE, &no_ip_mroute_dist_cmd);
+ install_element(CONFIG_NODE, &ip_multicast_mode_cmd);
+ install_element(CONFIG_NODE, &no_ip_multicast_mode_cmd);
+ install_element(CONFIG_NODE, &ip_route_cmd);
+ install_element(CONFIG_NODE, &ip_route_flags_cmd);
+ install_element(CONFIG_NODE, &ip_route_mask_cmd);
+ install_element(CONFIG_NODE, &ip_route_mask_flags_cmd);
+ install_element(CONFIG_NODE, &no_ip_route_cmd);
+ install_element(CONFIG_NODE, &no_ip_route_mask_cmd);
+ install_element(CONFIG_NODE, &ip_zebra_import_table_distance_cmd);
+ install_element(CONFIG_NODE, &no_ip_zebra_import_table_cmd);
+
+ install_element(VIEW_NODE, &show_vrf_cmd);
+ install_element(VIEW_NODE, &show_ip_route_cmd);
+ install_element(VIEW_NODE, &show_ip_route_ospf_instance_cmd);
+ install_element(VIEW_NODE, &show_ip_route_tag_cmd);
+ install_element(VIEW_NODE, &show_ip_nht_cmd);
+ install_element(VIEW_NODE, &show_ip_nht_vrf_all_cmd);
+ install_element(VIEW_NODE, &show_ipv6_nht_cmd);
+ install_element(VIEW_NODE, &show_ipv6_nht_vrf_all_cmd);
+ install_element(VIEW_NODE, &show_ip_route_addr_cmd);
+ install_element(VIEW_NODE, &show_ip_route_prefix_cmd);
+ install_element(VIEW_NODE, &show_ip_route_prefix_longer_cmd);
+ install_element(VIEW_NODE, &show_ip_route_protocol_cmd);
+ install_element(VIEW_NODE, &show_ip_route_supernets_cmd);
+ install_element(VIEW_NODE, &show_ip_route_summary_cmd);
+ install_element(VIEW_NODE, &show_ip_route_summary_prefix_cmd);
+
+ install_element(VIEW_NODE, &show_ip_rpf_cmd);
+ install_element(VIEW_NODE, &show_ip_rpf_addr_cmd);
+
+ /* Commands for VRF */
+
+ install_element(CONFIG_NODE, &no_ip_route_flags_cmd);
+ install_element(CONFIG_NODE, &no_ip_route_mask_flags_cmd);
+
+ install_element(VIEW_NODE, &show_ip_route_vrf_cmd);
+
+ install_element(VIEW_NODE, &show_ip_route_vrf_all_cmd);
+ install_element(VIEW_NODE, &show_ip_route_vrf_all_tag_cmd);
+ install_element(VIEW_NODE, &show_ip_route_vrf_all_addr_cmd);
+ install_element(VIEW_NODE, &show_ip_route_vrf_all_prefix_cmd);
+ install_element(VIEW_NODE, &show_ip_route_vrf_all_prefix_longer_cmd);
+ install_element(VIEW_NODE, &show_ip_route_vrf_all_protocol_cmd);
+ install_element(VIEW_NODE, &show_ip_route_vrf_all_supernets_cmd);
+ install_element(VIEW_NODE, &show_ip_route_vrf_all_summary_cmd);
+ install_element(VIEW_NODE, &show_ip_route_vrf_all_summary_prefix_cmd);
+
+ install_element(CONFIG_NODE, &ipv6_route_cmd);
+ install_element(CONFIG_NODE, &ipv6_route_flags_cmd);
+ install_element(CONFIG_NODE, &ipv6_route_ifname_cmd);
+ install_element(CONFIG_NODE, &ipv6_route_ifname_flags_cmd);
+ install_element(CONFIG_NODE, &no_ipv6_route_cmd);
+ install_element(CONFIG_NODE, &no_ipv6_route_flags_cmd);
+ install_element(CONFIG_NODE, &no_ipv6_route_ifname_cmd);
+ install_element(CONFIG_NODE, &no_ipv6_route_ifname_flags_cmd);
+ install_element(CONFIG_NODE, &ip_nht_default_route_cmd);
+ install_element(CONFIG_NODE, &no_ip_nht_default_route_cmd);
+ install_element(CONFIG_NODE, &ipv6_nht_default_route_cmd);
+ install_element(CONFIG_NODE, &no_ipv6_nht_default_route_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_tag_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_summary_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_summary_prefix_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_protocol_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_addr_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_prefix_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_prefix_longer_cmd);
+
+ install_element(VIEW_NODE, &show_ipv6_mroute_cmd);
+
+ /* Commands for VRF */
+ install_element(VIEW_NODE, &show_ipv6_route_vrf_all_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_vrf_all_tag_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_vrf_all_summary_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_vrf_all_summary_prefix_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_vrf_all_protocol_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_vrf_all_addr_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_vrf_all_prefix_cmd);
+ install_element(VIEW_NODE, &show_ipv6_route_vrf_all_prefix_longer_cmd);
+
+ install_element(VIEW_NODE, &show_ipv6_mroute_vrf_all_cmd);
}