Annotation of embedaddon/quagga/zebra/zebra_vty.c, revision 1.1.1.4
1.1 misho 1: /* Zebra VTY functions
2: * Copyright (C) 2002 Kunihiro Ishiguro
3: *
4: * This file is part of GNU Zebra.
5: *
6: * GNU Zebra is free software; you can redistribute it and/or modify it
7: * under the terms of the GNU General Public License as published by the
8: * Free Software Foundation; either version 2, or (at your option) any
9: * later version.
10: *
11: * GNU Zebra is distributed in the hope that it will be useful, but
12: * WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * General Public License for more details.
15: *
16: * You should have received a copy of the GNU General Public License
17: * along with GNU Zebra; see the file COPYING. If not, write to the
18: * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19: * Boston, MA 02111-1307, USA.
20: */
21:
22: #include <zebra.h>
23:
24: #include "memory.h"
25: #include "if.h"
26: #include "prefix.h"
27: #include "command.h"
28: #include "table.h"
29: #include "rib.h"
1.1.1.4 ! misho 30: #include "vrf.h"
1.1 misho 31:
32: #include "zebra/zserv.h"
33:
1.1.1.4 ! misho 34: static int do_show_ip_route(struct vty *vty, safi_t safi, vrf_id_t vrf_id);
! 35: static void vty_show_ip_route_detail (struct vty *vty, struct route_node *rn,
! 36: int mcast);
! 37: static void vty_show_ip_route (struct vty *vty, struct route_node *rn,
! 38: struct rib *rib);
! 39:
! 40: /* General function for static route. */
1.1 misho 41: static int
1.1.1.4 ! misho 42: zebra_static_ipv4_safi (struct vty *vty, safi_t safi, int add_cmd,
! 43: const char *dest_str, const char *mask_str,
! 44: const char *gate_str, const char *flag_str,
! 45: const char *distance_str, const char *vrf_id_str)
1.1 misho 46: {
47: int ret;
48: u_char distance;
49: struct prefix p;
50: struct in_addr gate;
51: struct in_addr mask;
52: const char *ifname;
53: u_char flag = 0;
1.1.1.4 ! misho 54: vrf_id_t vrf_id = VRF_DEFAULT;
1.1 misho 55:
56: ret = str2prefix (dest_str, &p);
57: if (ret <= 0)
58: {
59: vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
60: return CMD_WARNING;
61: }
62:
63: /* Cisco like mask notation. */
64: if (mask_str)
65: {
66: ret = inet_aton (mask_str, &mask);
67: if (ret == 0)
68: {
69: vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
70: return CMD_WARNING;
71: }
72: p.prefixlen = ip_masklen (mask);
73: }
74:
75: /* Apply mask for given prefix. */
76: apply_mask (&p);
77:
78: /* Administrative distance. */
79: if (distance_str)
80: distance = atoi (distance_str);
81: else
82: distance = ZEBRA_STATIC_DISTANCE_DEFAULT;
83:
1.1.1.4 ! misho 84: /* VRF id */
! 85: if (vrf_id_str)
! 86: VTY_GET_INTEGER ("VRF ID", vrf_id, vrf_id_str);
! 87:
1.1 misho 88: /* Null0 static route. */
89: if ((gate_str != NULL) && (strncasecmp (gate_str, "Null0", strlen (gate_str)) == 0))
90: {
91: if (flag_str)
92: {
93: vty_out (vty, "%% can not have flag %s with Null0%s", flag_str, VTY_NEWLINE);
94: return CMD_WARNING;
95: }
96: if (add_cmd)
1.1.1.4 ! misho 97: static_add_ipv4_safi (safi, &p, NULL, NULL, ZEBRA_FLAG_BLACKHOLE, distance, vrf_id);
1.1 misho 98: else
1.1.1.4 ! misho 99: static_delete_ipv4_safi (safi, &p, NULL, NULL, distance, vrf_id);
1.1 misho 100: return CMD_SUCCESS;
101: }
102:
103: /* Route flags */
104: if (flag_str) {
105: switch(flag_str[0]) {
106: case 'r':
107: case 'R': /* XXX */
108: SET_FLAG (flag, ZEBRA_FLAG_REJECT);
109: break;
110: case 'b':
111: case 'B': /* XXX */
112: SET_FLAG (flag, ZEBRA_FLAG_BLACKHOLE);
113: break;
114: default:
115: vty_out (vty, "%% Malformed flag %s %s", flag_str, VTY_NEWLINE);
116: return CMD_WARNING;
117: }
118: }
119:
120: if (gate_str == NULL)
121: {
122: if (add_cmd)
1.1.1.4 ! misho 123: static_add_ipv4_safi (safi, &p, NULL, NULL, flag, distance, vrf_id);
1.1 misho 124: else
1.1.1.4 ! misho 125: static_delete_ipv4_safi (safi, &p, NULL, NULL, distance, vrf_id);
1.1 misho 126:
127: return CMD_SUCCESS;
128: }
129:
130: /* When gateway is A.B.C.D format, gate is treated as nexthop
131: address other case gate is treated as interface name. */
132: ret = inet_aton (gate_str, &gate);
133: if (ret)
134: ifname = NULL;
135: else
136: ifname = gate_str;
137:
138: if (add_cmd)
1.1.1.4 ! misho 139: static_add_ipv4_safi (safi, &p, ifname ? NULL : &gate, ifname, flag, distance, vrf_id);
! 140: else
! 141: static_delete_ipv4_safi (safi, &p, ifname ? NULL : &gate, ifname, distance, vrf_id);
! 142:
! 143: return CMD_SUCCESS;
! 144: }
! 145:
! 146: static int
! 147: zebra_static_ipv4 (struct vty *vty, int add_cmd, const char *dest_str,
! 148: const char *mask_str, const char *gate_str,
! 149: const char *flag_str, const char *distance_str,
! 150: const char *vrf_id_str)
! 151: {
! 152: return zebra_static_ipv4_safi (vty, SAFI_UNICAST, add_cmd, dest_str, mask_str,
! 153: gate_str, flag_str, distance_str, vrf_id_str);
! 154: }
! 155:
! 156: /* Static unicast routes for multicast RPF lookup. */
! 157: DEFUN (ip_mroute_dist,
! 158: ip_mroute_dist_cmd,
! 159: "ip mroute A.B.C.D/M (A.B.C.D|INTERFACE) <1-255>",
! 160: IP_STR
! 161: "Configure static unicast route into MRIB for multicast RPF lookup\n"
! 162: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 163: "Nexthop address\n"
! 164: "Nexthop interface name\n"
! 165: "Distance\n")
! 166: {
! 167: VTY_WARN_EXPERIMENTAL();
! 168: return zebra_static_ipv4_safi(vty, SAFI_MULTICAST, 1, argv[0], NULL, argv[1],
! 169: NULL, argc > 2 ? argv[2] : NULL, NULL);
! 170: }
! 171:
! 172: ALIAS (ip_mroute_dist,
! 173: ip_mroute_cmd,
! 174: "ip mroute A.B.C.D/M (A.B.C.D|INTERFACE)",
! 175: IP_STR
! 176: "Configure static unicast route into MRIB for multicast RPF lookup\n"
! 177: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 178: "Nexthop address\n"
! 179: "Nexthop interface name\n")
! 180:
! 181: DEFUN (ip_mroute_dist_vrf,
! 182: ip_mroute_dist_vrf_cmd,
! 183: "ip mroute A.B.C.D/M (A.B.C.D|INTERFACE) <1-255> " VRF_CMD_STR,
! 184: IP_STR
! 185: "Configure static unicast route into MRIB for multicast RPF lookup\n"
! 186: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 187: "Nexthop address\n"
! 188: "Nexthop interface name\n"
! 189: "Distance\n"
! 190: VRF_CMD_HELP_STR)
! 191: {
! 192: VTY_WARN_EXPERIMENTAL();
! 193: return zebra_static_ipv4_safi(vty, SAFI_MULTICAST, 1, argv[0], NULL, argv[1],
! 194: NULL, argc > 3 ? argv[2] : NULL,
! 195: argc > 3 ? argv[3] : argv[2]);
! 196: }
! 197:
! 198: ALIAS (ip_mroute_dist_vrf,
! 199: ip_mroute_vrf_cmd,
! 200: "ip mroute A.B.C.D/M (A.B.C.D|INTERFACE) "VRF_CMD_STR,
! 201: IP_STR
! 202: "Configure static unicast route into MRIB for multicast RPF lookup\n"
! 203: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 204: "Nexthop address\n"
! 205: "Nexthop interface name\n"
! 206: VRF_CMD_HELP_STR)
! 207:
! 208: DEFUN (no_ip_mroute_dist,
! 209: no_ip_mroute_dist_cmd,
! 210: "no ip mroute A.B.C.D/M (A.B.C.D|INTERFACE) <1-255>",
! 211: IP_STR
! 212: "Configure static unicast route into MRIB for multicast RPF lookup\n"
! 213: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 214: "Nexthop address\n"
! 215: "Nexthop interface name\n"
! 216: "Distance\n")
! 217: {
! 218: VTY_WARN_EXPERIMENTAL();
! 219: return zebra_static_ipv4_safi(vty, SAFI_MULTICAST, 0, argv[0], NULL, argv[1],
! 220: NULL, argc > 2 ? argv[2] : NULL, NULL);
! 221: }
! 222:
! 223: ALIAS (no_ip_mroute_dist,
! 224: no_ip_mroute_cmd,
! 225: "no ip mroute A.B.C.D/M (A.B.C.D|INTERFACE)",
! 226: NO_STR
! 227: IP_STR
! 228: "Configure static unicast route into MRIB for multicast RPF lookup\n"
! 229: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 230: "Nexthop address\n"
! 231: "Nexthop interface name\n")
! 232:
! 233: DEFUN (no_ip_mroute_dist_vrf,
! 234: no_ip_mroute_dist_vrf_cmd,
! 235: "no ip mroute A.B.C.D/M (A.B.C.D|INTERFACE) <1-255> " VRF_CMD_STR,
! 236: IP_STR
! 237: "Configure static unicast route into MRIB for multicast RPF lookup\n"
! 238: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 239: "Nexthop address\n"
! 240: "Nexthop interface name\n"
! 241: "Distance\n"
! 242: VRF_CMD_HELP_STR)
! 243: {
! 244: VTY_WARN_EXPERIMENTAL();
! 245: return zebra_static_ipv4_safi(vty, SAFI_MULTICAST, 0, argv[0], NULL, argv[1],
! 246: NULL, argc > 3 ? argv[2] : NULL,
! 247: argc > 3 ? argv[3] : argv[2]);
! 248: }
! 249:
! 250: ALIAS (no_ip_mroute_dist_vrf,
! 251: no_ip_mroute_vrf_cmd,
! 252: "no ip mroute A.B.C.D/M (A.B.C.D|INTERFACE) " VRF_CMD_STR,
! 253: NO_STR
! 254: IP_STR
! 255: "Configure static unicast route into MRIB for multicast RPF lookup\n"
! 256: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 257: "Nexthop address\n"
! 258: "Nexthop interface name\n"
! 259: VRF_CMD_HELP_STR)
! 260:
! 261: DEFUN (ip_multicast_mode,
! 262: ip_multicast_mode_cmd,
! 263: "ip multicast rpf-lookup-mode (urib-only|mrib-only|mrib-then-urib|lower-distance|longer-prefix)",
! 264: IP_STR
! 265: "Multicast options\n"
! 266: "RPF lookup behavior\n"
! 267: "Lookup in unicast RIB only\n"
! 268: "Lookup in multicast RIB only\n"
! 269: "Try multicast RIB first, fall back to unicast RIB\n"
! 270: "Lookup both, use entry with lower distance\n"
! 271: "Lookup both, use entry with longer prefix\n")
! 272: {
! 273: VTY_WARN_EXPERIMENTAL();
! 274:
! 275: if (!strncmp (argv[0], "u", 1))
! 276: multicast_mode_ipv4_set (MCAST_URIB_ONLY);
! 277: else if (!strncmp (argv[0], "mrib-o", 6))
! 278: multicast_mode_ipv4_set (MCAST_MRIB_ONLY);
! 279: else if (!strncmp (argv[0], "mrib-t", 6))
! 280: multicast_mode_ipv4_set (MCAST_MIX_MRIB_FIRST);
! 281: else if (!strncmp (argv[0], "low", 3))
! 282: multicast_mode_ipv4_set (MCAST_MIX_DISTANCE);
! 283: else if (!strncmp (argv[0], "lon", 3))
! 284: multicast_mode_ipv4_set (MCAST_MIX_PFXLEN);
! 285: else
! 286: {
! 287: vty_out (vty, "Invalid mode specified%s", VTY_NEWLINE);
! 288: return CMD_WARNING;
! 289: }
! 290:
! 291: return CMD_SUCCESS;
! 292: }
! 293:
! 294: DEFUN (no_ip_multicast_mode,
! 295: no_ip_multicast_mode_cmd,
! 296: "no ip multicast rpf-lookup-mode (urib-only|mrib-only|mrib-then-urib|lower-distance|longer-prefix)",
! 297: NO_STR
! 298: IP_STR
! 299: "Multicast options\n"
! 300: "RPF lookup behavior\n"
! 301: "Lookup in unicast RIB only\n"
! 302: "Lookup in multicast RIB only\n"
! 303: "Try multicast RIB first, fall back to unicast RIB\n"
! 304: "Lookup both, use entry with lower distance\n"
! 305: "Lookup both, use entry with longer prefix\n")
! 306: {
! 307: multicast_mode_ipv4_set (MCAST_NO_CONFIG);
! 308: return CMD_SUCCESS;
! 309: }
! 310:
! 311: ALIAS (no_ip_multicast_mode,
! 312: no_ip_multicast_mode_noarg_cmd,
! 313: "no ip multicast rpf-lookup-mode",
! 314: NO_STR
! 315: IP_STR
! 316: "Multicast options\n"
! 317: "RPF lookup behavior\n")
! 318:
! 319: DEFUN (show_ip_rpf,
! 320: show_ip_rpf_cmd,
! 321: "show ip rpf",
! 322: SHOW_STR
! 323: IP_STR
! 324: "Display RPF information for multicast source\n")
! 325: {
! 326: vrf_id_t vrf_id = VRF_DEFAULT;
! 327:
! 328: if (argc > 0)
! 329: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[0]);
! 330:
! 331: VTY_WARN_EXPERIMENTAL();
! 332: return do_show_ip_route(vty, SAFI_MULTICAST, vrf_id);
! 333: }
! 334:
! 335: ALIAS (show_ip_rpf,
! 336: show_ip_rpf_vrf_cmd,
! 337: "show ip rpf " VRF_CMD_STR,
! 338: SHOW_STR
! 339: IP_STR
! 340: "Display RPF information for multicast source\n"
! 341: VRF_CMD_HELP_STR)
! 342:
! 343: DEFUN (show_ip_rpf_addr,
! 344: show_ip_rpf_addr_cmd,
! 345: "show ip rpf A.B.C.D",
! 346: SHOW_STR
! 347: IP_STR
! 348: "Display RPF information for multicast source\n"
! 349: "IP multicast source address (e.g. 10.0.0.0)\n")
! 350: {
! 351: struct in_addr addr;
! 352: struct route_node *rn;
! 353: struct rib *rib;
! 354: vrf_id_t vrf_id = VRF_DEFAULT;
! 355: int ret;
! 356:
! 357: if (argc > 1)
! 358: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[1]);
! 359:
! 360: VTY_WARN_EXPERIMENTAL();
! 361:
! 362: ret = inet_aton (argv[0], &addr);
! 363: if (ret == 0)
! 364: {
! 365: vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
! 366: return CMD_WARNING;
! 367: }
! 368:
! 369: rib = rib_match_ipv4_multicast (addr, &rn, vrf_id);
! 370:
! 371: if (rib)
! 372: vty_show_ip_route_detail (vty, rn, 1);
1.1 misho 373: else
1.1.1.4 ! misho 374: vty_out (vty, "%% No match for RPF lookup%s", VTY_NEWLINE);
! 375:
! 376: return CMD_SUCCESS;
! 377: }
! 378:
! 379: ALIAS (show_ip_rpf_addr,
! 380: show_ip_rpf_addr_vrf_cmd,
! 381: "show ip rpf A.B.C.D " VRF_CMD_STR,
! 382: SHOW_STR
! 383: IP_STR
! 384: "Display RPF information for multicast source\n"
! 385: "IP multicast source address (e.g. 10.0.0.0)\n"
! 386: VRF_CMD_HELP_STR)
! 387:
! 388: DEFUN (show_ip_rpf_vrf_all,
! 389: show_ip_rpf_vrf_all_cmd,
! 390: "show ip rpf " VRF_ALL_CMD_STR,
! 391: SHOW_STR
! 392: IP_STR
! 393: "Display RPF information for multicast source\n"
! 394: VRF_ALL_CMD_HELP_STR)
! 395: {
! 396: struct zebra_vrf *zvrf;
! 397: struct route_table *table;
! 398: struct route_node *rn;
! 399: struct rib *rib;
! 400: vrf_iter_t iter;
! 401: int first = 1;
! 402:
! 403: VTY_WARN_EXPERIMENTAL();
! 404:
! 405: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 406: {
! 407: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 408: (table = zvrf->table[AFI_IP][SAFI_MULTICAST]) == NULL)
! 409: continue;
! 410:
! 411: /* Show all IPv4 routes. */
! 412: for (rn = route_top (table); rn; rn = route_next (rn))
! 413: RNODE_FOREACH_RIB (rn, rib)
! 414: {
! 415: if (first)
! 416: {
! 417: vty_out (vty, SHOW_ROUTE_V4_HEADER);
! 418: first = 0;
! 419: }
! 420: vty_show_ip_route (vty, rn, rib);
! 421: }
! 422: }
! 423:
! 424: return CMD_SUCCESS;
! 425: }
! 426:
! 427: DEFUN (show_ip_rpf_addr_vrf_all,
! 428: show_ip_rpf_addr_vrf_all_cmd,
! 429: "show ip rpf A.B.C.D " VRF_ALL_CMD_STR,
! 430: SHOW_STR
! 431: IP_STR
! 432: "Display RPF information for multicast source\n"
! 433: "IP multicast source address (e.g. 10.0.0.0)\n"
! 434: VRF_ALL_CMD_HELP_STR)
! 435: {
! 436: struct in_addr addr;
! 437: struct route_node *rn;
! 438: vrf_iter_t iter;
! 439: int ret;
! 440:
! 441: VTY_WARN_EXPERIMENTAL();
! 442:
! 443: ret = inet_aton (argv[0], &addr);
! 444: if (ret == 0)
! 445: {
! 446: vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
! 447: return CMD_WARNING;
! 448: }
! 449:
! 450: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 451: {
! 452: if (rib_match_ipv4_multicast (addr, &rn, vrf_iter2id (iter)))
! 453: vty_show_ip_route_detail (vty, rn, 1);
! 454: }
1.1 misho 455:
456: return CMD_SUCCESS;
457: }
458:
459: /* Static route configuration. */
460: DEFUN (ip_route,
461: ip_route_cmd,
462: "ip route A.B.C.D/M (A.B.C.D|INTERFACE|null0)",
463: IP_STR
464: "Establish static routes\n"
465: "IP destination prefix (e.g. 10.0.0.0/8)\n"
466: "IP gateway address\n"
467: "IP gateway interface name\n"
468: "Null interface\n")
469: {
1.1.1.4 ! misho 470: return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], NULL, NULL,
! 471: NULL);
1.1 misho 472: }
473:
474: DEFUN (ip_route_flags,
475: ip_route_flags_cmd,
476: "ip route A.B.C.D/M (A.B.C.D|INTERFACE) (reject|blackhole)",
477: IP_STR
478: "Establish static routes\n"
479: "IP destination prefix (e.g. 10.0.0.0/8)\n"
480: "IP gateway address\n"
481: "IP gateway interface name\n"
482: "Emit an ICMP unreachable when matched\n"
483: "Silently discard pkts when matched\n")
484: {
1.1.1.4 ! misho 485: return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], argv[2], NULL,
! 486: NULL);
1.1 misho 487: }
488:
489: DEFUN (ip_route_flags2,
490: ip_route_flags2_cmd,
491: "ip route A.B.C.D/M (reject|blackhole)",
492: IP_STR
493: "Establish static routes\n"
494: "IP destination prefix (e.g. 10.0.0.0/8)\n"
495: "Emit an ICMP unreachable when matched\n"
496: "Silently discard pkts when matched\n")
497: {
1.1.1.4 ! misho 498: return zebra_static_ipv4 (vty, 1, argv[0], NULL, NULL, argv[1], NULL,
! 499: NULL);
1.1 misho 500: }
501:
502: /* Mask as A.B.C.D format. */
503: DEFUN (ip_route_mask,
504: ip_route_mask_cmd,
505: "ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE|null0)",
506: IP_STR
507: "Establish static routes\n"
508: "IP destination prefix\n"
509: "IP destination prefix mask\n"
510: "IP gateway address\n"
511: "IP gateway interface name\n"
512: "Null interface\n")
513: {
1.1.1.4 ! misho 514: return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], NULL, NULL,
! 515: NULL);
1.1 misho 516: }
517:
518: DEFUN (ip_route_mask_flags,
519: ip_route_mask_flags_cmd,
520: "ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE) (reject|blackhole)",
521: IP_STR
522: "Establish static routes\n"
523: "IP destination prefix\n"
524: "IP destination prefix mask\n"
525: "IP gateway address\n"
526: "IP gateway interface name\n"
527: "Emit an ICMP unreachable when matched\n"
528: "Silently discard pkts when matched\n")
529: {
1.1.1.4 ! misho 530: return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], argv[3], NULL,
! 531: NULL);
1.1 misho 532: }
533:
534: DEFUN (ip_route_mask_flags2,
535: ip_route_mask_flags2_cmd,
536: "ip route A.B.C.D A.B.C.D (reject|blackhole)",
537: IP_STR
538: "Establish static routes\n"
539: "IP destination prefix\n"
540: "IP destination prefix mask\n"
541: "Emit an ICMP unreachable when matched\n"
542: "Silently discard pkts when matched\n")
543: {
1.1.1.4 ! misho 544: return zebra_static_ipv4 (vty, 1, argv[0], argv[1], NULL, argv[2], NULL,
! 545: NULL);
1.1 misho 546: }
547:
548: /* Distance option value. */
549: DEFUN (ip_route_distance,
550: ip_route_distance_cmd,
551: "ip route A.B.C.D/M (A.B.C.D|INTERFACE|null0) <1-255>",
552: IP_STR
553: "Establish static routes\n"
554: "IP destination prefix (e.g. 10.0.0.0/8)\n"
555: "IP gateway address\n"
556: "IP gateway interface name\n"
557: "Null interface\n"
558: "Distance value for this route\n")
559: {
1.1.1.4 ! misho 560: return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], NULL, argv[2],
! 561: NULL);
1.1 misho 562: }
563:
564: DEFUN (ip_route_flags_distance,
565: ip_route_flags_distance_cmd,
566: "ip route A.B.C.D/M (A.B.C.D|INTERFACE) (reject|blackhole) <1-255>",
567: IP_STR
568: "Establish static routes\n"
569: "IP destination prefix (e.g. 10.0.0.0/8)\n"
570: "IP gateway address\n"
571: "IP gateway interface name\n"
572: "Emit an ICMP unreachable when matched\n"
573: "Silently discard pkts when matched\n"
574: "Distance value for this route\n")
575: {
1.1.1.4 ! misho 576: return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], argv[2], argv[3],
! 577: NULL);
1.1 misho 578: }
579:
580: DEFUN (ip_route_flags_distance2,
581: ip_route_flags_distance2_cmd,
582: "ip route A.B.C.D/M (reject|blackhole) <1-255>",
583: IP_STR
584: "Establish static routes\n"
585: "IP destination prefix (e.g. 10.0.0.0/8)\n"
586: "Emit an ICMP unreachable when matched\n"
587: "Silently discard pkts when matched\n"
588: "Distance value for this route\n")
589: {
1.1.1.4 ! misho 590: return zebra_static_ipv4 (vty, 1, argv[0], NULL, NULL, argv[1], argv[2],
! 591: NULL);
1.1 misho 592: }
593:
594: DEFUN (ip_route_mask_distance,
595: ip_route_mask_distance_cmd,
596: "ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE|null0) <1-255>",
597: IP_STR
598: "Establish static routes\n"
599: "IP destination prefix\n"
600: "IP destination prefix mask\n"
601: "IP gateway address\n"
602: "IP gateway interface name\n"
603: "Null interface\n"
604: "Distance value for this route\n")
605: {
1.1.1.4 ! misho 606: return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], NULL, argv[3],
! 607: NULL);
1.1 misho 608: }
609:
610: DEFUN (ip_route_mask_flags_distance,
611: ip_route_mask_flags_distance_cmd,
612: "ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE) (reject|blackhole) <1-255>",
613: IP_STR
614: "Establish static routes\n"
615: "IP destination prefix\n"
616: "IP destination prefix mask\n"
617: "IP gateway address\n"
618: "IP gateway interface name\n"
619: "Emit an ICMP unreachable when matched\n"
1.1.1.4 ! misho 620: "Silently discard pkts when matched\n"
! 621: "Distance value for this route\n")
1.1 misho 622: {
1.1.1.4 ! misho 623: return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], argv[3], argv[4],
! 624: NULL);
1.1 misho 625: }
626:
627: DEFUN (ip_route_mask_flags_distance2,
628: ip_route_mask_flags_distance2_cmd,
629: "ip route A.B.C.D A.B.C.D (reject|blackhole) <1-255>",
630: IP_STR
631: "Establish static routes\n"
632: "IP destination prefix\n"
633: "IP destination prefix mask\n"
634: "Emit an ICMP unreachable when matched\n"
1.1.1.4 ! misho 635: "Silently discard pkts when matched\n"
! 636: "Distance value for this route\n")
1.1 misho 637: {
1.1.1.4 ! misho 638: return zebra_static_ipv4 (vty, 1, argv[0], argv[1], NULL, argv[2], argv[3],
! 639: NULL);
1.1 misho 640: }
641:
642: DEFUN (no_ip_route,
643: no_ip_route_cmd,
644: "no ip route A.B.C.D/M (A.B.C.D|INTERFACE|null0)",
645: NO_STR
646: IP_STR
647: "Establish static routes\n"
648: "IP destination prefix (e.g. 10.0.0.0/8)\n"
649: "IP gateway address\n"
650: "IP gateway interface name\n"
651: "Null interface\n")
652: {
1.1.1.4 ! misho 653: return zebra_static_ipv4 (vty, 0, argv[0], NULL, argv[1], NULL, NULL,
! 654: NULL);
1.1 misho 655: }
656:
657: ALIAS (no_ip_route,
658: no_ip_route_flags_cmd,
659: "no ip route A.B.C.D/M (A.B.C.D|INTERFACE) (reject|blackhole)",
660: NO_STR
661: IP_STR
662: "Establish static routes\n"
663: "IP destination prefix (e.g. 10.0.0.0/8)\n"
664: "IP gateway address\n"
665: "IP gateway interface name\n"
666: "Emit an ICMP unreachable when matched\n"
667: "Silently discard pkts when matched\n")
668:
669: DEFUN (no_ip_route_flags2,
670: no_ip_route_flags2_cmd,
671: "no ip route A.B.C.D/M (reject|blackhole)",
672: NO_STR
673: IP_STR
674: "Establish static routes\n"
675: "IP destination prefix (e.g. 10.0.0.0/8)\n"
676: "Emit an ICMP unreachable when matched\n"
677: "Silently discard pkts when matched\n")
678: {
1.1.1.4 ! misho 679: return zebra_static_ipv4 (vty, 0, argv[0], NULL, NULL, NULL, NULL,
! 680: NULL);
1.1 misho 681: }
682:
683: DEFUN (no_ip_route_mask,
684: no_ip_route_mask_cmd,
685: "no ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE|null0)",
686: NO_STR
687: IP_STR
688: "Establish static routes\n"
689: "IP destination prefix\n"
690: "IP destination prefix mask\n"
691: "IP gateway address\n"
692: "IP gateway interface name\n"
693: "Null interface\n")
694: {
1.1.1.4 ! misho 695: return zebra_static_ipv4 (vty, 0, argv[0], argv[1], argv[2], NULL, NULL,
! 696: NULL);
1.1 misho 697: }
698:
699: ALIAS (no_ip_route_mask,
700: no_ip_route_mask_flags_cmd,
701: "no ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE) (reject|blackhole)",
702: NO_STR
703: IP_STR
704: "Establish static routes\n"
705: "IP destination prefix\n"
706: "IP destination prefix mask\n"
707: "IP gateway address\n"
708: "IP gateway interface name\n"
709: "Emit an ICMP unreachable when matched\n"
710: "Silently discard pkts when matched\n")
711:
712: DEFUN (no_ip_route_mask_flags2,
713: no_ip_route_mask_flags2_cmd,
714: "no ip route A.B.C.D A.B.C.D (reject|blackhole)",
715: NO_STR
716: IP_STR
717: "Establish static routes\n"
718: "IP destination prefix\n"
719: "IP destination prefix mask\n"
720: "Emit an ICMP unreachable when matched\n"
721: "Silently discard pkts when matched\n")
722: {
1.1.1.4 ! misho 723: return zebra_static_ipv4 (vty, 0, argv[0], argv[1], NULL, NULL, NULL,
! 724: NULL);
1.1 misho 725: }
726:
727: DEFUN (no_ip_route_distance,
728: no_ip_route_distance_cmd,
729: "no ip route A.B.C.D/M (A.B.C.D|INTERFACE|null0) <1-255>",
730: NO_STR
731: IP_STR
732: "Establish static routes\n"
733: "IP destination prefix (e.g. 10.0.0.0/8)\n"
734: "IP gateway address\n"
735: "IP gateway interface name\n"
736: "Null interface\n"
737: "Distance value for this route\n")
738: {
1.1.1.4 ! misho 739: return zebra_static_ipv4 (vty, 0, argv[0], NULL, argv[1], NULL, argv[2],
! 740: NULL);
1.1 misho 741: }
742:
743: DEFUN (no_ip_route_flags_distance,
744: no_ip_route_flags_distance_cmd,
745: "no ip route A.B.C.D/M (A.B.C.D|INTERFACE) (reject|blackhole) <1-255>",
746: NO_STR
747: IP_STR
748: "Establish static routes\n"
749: "IP destination prefix (e.g. 10.0.0.0/8)\n"
750: "IP gateway address\n"
751: "IP gateway interface name\n"
752: "Emit an ICMP unreachable when matched\n"
753: "Silently discard pkts when matched\n"
754: "Distance value for this route\n")
755: {
1.1.1.4 ! misho 756: return zebra_static_ipv4 (vty, 0, argv[0], NULL, argv[1], argv[2], argv[3],
! 757: NULL);
1.1 misho 758: }
759:
760: DEFUN (no_ip_route_flags_distance2,
761: no_ip_route_flags_distance2_cmd,
762: "no ip route A.B.C.D/M (reject|blackhole) <1-255>",
763: NO_STR
764: IP_STR
765: "Establish static routes\n"
766: "IP destination prefix (e.g. 10.0.0.0/8)\n"
767: "Emit an ICMP unreachable when matched\n"
768: "Silently discard pkts when matched\n"
769: "Distance value for this route\n")
770: {
1.1.1.4 ! misho 771: return zebra_static_ipv4 (vty, 0, argv[0], NULL, NULL, argv[1], argv[2],
! 772: NULL);
1.1 misho 773: }
774:
775: DEFUN (no_ip_route_mask_distance,
776: no_ip_route_mask_distance_cmd,
777: "no ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE|null0) <1-255>",
778: NO_STR
779: IP_STR
780: "Establish static routes\n"
781: "IP destination prefix\n"
782: "IP destination prefix mask\n"
783: "IP gateway address\n"
784: "IP gateway interface name\n"
785: "Null interface\n"
786: "Distance value for this route\n")
787: {
1.1.1.4 ! misho 788: return zebra_static_ipv4 (vty, 0, argv[0], argv[1], argv[2], NULL, argv[3],
! 789: NULL);
1.1 misho 790: }
791:
792: DEFUN (no_ip_route_mask_flags_distance,
793: no_ip_route_mask_flags_distance_cmd,
794: "no ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE) (reject|blackhole) <1-255>",
795: NO_STR
796: IP_STR
797: "Establish static routes\n"
798: "IP destination prefix\n"
799: "IP destination prefix mask\n"
800: "IP gateway address\n"
801: "IP gateway interface name\n"
802: "Emit an ICMP unreachable when matched\n"
803: "Silently discard pkts when matched\n"
804: "Distance value for this route\n")
805: {
1.1.1.4 ! misho 806: return zebra_static_ipv4 (vty, 0, argv[0], argv[1], argv[2], argv[3], argv[4],
! 807: NULL);
1.1 misho 808: }
809:
810: DEFUN (no_ip_route_mask_flags_distance2,
811: no_ip_route_mask_flags_distance2_cmd,
812: "no ip route A.B.C.D A.B.C.D (reject|blackhole) <1-255>",
813: NO_STR
814: IP_STR
815: "Establish static routes\n"
816: "IP destination prefix\n"
817: "IP destination prefix mask\n"
818: "Emit an ICMP unreachable when matched\n"
819: "Silently discard pkts when matched\n"
820: "Distance value for this route\n")
821: {
1.1.1.4 ! misho 822: return zebra_static_ipv4 (vty, 0, argv[0], argv[1], NULL, argv[2], argv[3],
! 823: NULL);
1.1 misho 824: }
825:
1.1.1.4 ! misho 826: DEFUN (ip_route_vrf,
! 827: ip_route_vrf_cmd,
! 828: "ip route A.B.C.D/M (A.B.C.D|INTERFACE|null0) " VRF_CMD_STR,
! 829: IP_STR
! 830: "Establish static routes\n"
! 831: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 832: "IP gateway address\n"
! 833: "IP gateway interface name\n"
! 834: "Null interface\n"
! 835: VRF_CMD_HELP_STR)
! 836: {
! 837: return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], NULL, NULL,
! 838: argv[2]);
! 839: }
1.1 misho 840:
1.1.1.4 ! misho 841: DEFUN (ip_route_flags_vrf,
! 842: ip_route_flags_vrf_cmd,
! 843: "ip route A.B.C.D/M (A.B.C.D|INTERFACE) (reject|blackhole) " VRF_CMD_STR,
! 844: IP_STR
! 845: "Establish static routes\n"
! 846: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 847: "IP gateway address\n"
! 848: "IP gateway interface name\n"
! 849: "Emit an ICMP unreachable when matched\n"
! 850: "Silently discard pkts when matched\n"
! 851: VRF_CMD_HELP_STR)
1.1 misho 852: {
1.1.1.4 ! misho 853: return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], argv[2], NULL,
! 854: argv[3]);
! 855: }
1.1 misho 856:
1.1.1.4 ! misho 857: DEFUN (ip_route_flags2_vrf,
! 858: ip_route_flags2_vrf_cmd,
! 859: "ip route A.B.C.D/M (reject|blackhole) " VRF_CMD_STR,
! 860: IP_STR
! 861: "Establish static routes\n"
! 862: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 863: "Emit an ICMP unreachable when matched\n"
! 864: "Silently discard pkts when matched\n"
! 865: VRF_CMD_HELP_STR)
! 866: {
! 867: return zebra_static_ipv4 (vty, 1, argv[0], NULL, NULL, argv[1], NULL,
! 868: argv[2]);
1.1 misho 869: }
870:
1.1.1.4 ! misho 871: /* Mask as A.B.C.D format. */
! 872: DEFUN (ip_route_mask_vrf,
! 873: ip_route_mask_vrf_cmd,
! 874: "ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE|null0) " VRF_CMD_STR,
! 875: IP_STR
! 876: "Establish static routes\n"
! 877: "IP destination prefix\n"
! 878: "IP destination prefix mask\n"
! 879: "IP gateway address\n"
! 880: "IP gateway interface name\n"
! 881: "Null interface\n"
! 882: VRF_CMD_HELP_STR)
1.1 misho 883: {
1.1.1.4 ! misho 884: return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], NULL, NULL,
! 885: argv[3]);
! 886: }
1.1 misho 887:
1.1.1.4 ! misho 888: DEFUN (ip_route_mask_flags_vrf,
! 889: ip_route_mask_flags_vrf_cmd,
! 890: "ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE) (reject|blackhole) " VRF_CMD_STR,
! 891: IP_STR
! 892: "Establish static routes\n"
! 893: "IP destination prefix\n"
! 894: "IP destination prefix mask\n"
! 895: "IP gateway address\n"
! 896: "IP gateway interface name\n"
! 897: "Emit an ICMP unreachable when matched\n"
! 898: "Silently discard pkts when matched\n"
! 899: VRF_CMD_HELP_STR)
! 900: {
! 901: return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], argv[3], NULL,
! 902: argv[4]);
1.1 misho 903: }
904:
1.1.1.4 ! misho 905: DEFUN (ip_route_mask_flags2_vrf,
! 906: ip_route_mask_flags2_vrf_cmd,
! 907: "ip route A.B.C.D A.B.C.D (reject|blackhole) " VRF_CMD_STR,
! 908: IP_STR
! 909: "Establish static routes\n"
! 910: "IP destination prefix\n"
! 911: "IP destination prefix mask\n"
! 912: "Emit an ICMP unreachable when matched\n"
! 913: "Silently discard pkts when matched\n"
! 914: VRF_CMD_HELP_STR)
1.1 misho 915: {
1.1.1.4 ! misho 916: return zebra_static_ipv4 (vty, 1, argv[0], argv[1], NULL, argv[2], NULL,
! 917: argv[3]);
! 918: }
1.1 misho 919:
1.1.1.4 ! misho 920: /* Distance option value. */
! 921: DEFUN (ip_route_distance_vrf,
! 922: ip_route_distance_vrf_cmd,
! 923: "ip route A.B.C.D/M (A.B.C.D|INTERFACE|null0) <1-255> " VRF_CMD_STR,
! 924: IP_STR
! 925: "Establish static routes\n"
! 926: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 927: "IP gateway address\n"
! 928: "IP gateway interface name\n"
! 929: "Null interface\n"
! 930: "Distance value for this route\n"
! 931: VRF_CMD_HELP_STR)
! 932: {
! 933: return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], NULL, argv[2],
! 934: argv[3]);
! 935: }
1.1 misho 936:
1.1.1.4 ! misho 937: DEFUN (ip_route_flags_distance_vrf,
! 938: ip_route_flags_distance_vrf_cmd,
! 939: "ip route A.B.C.D/M (A.B.C.D|INTERFACE) (reject|blackhole) <1-255> " VRF_CMD_STR,
! 940: IP_STR
! 941: "Establish static routes\n"
! 942: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 943: "IP gateway address\n"
! 944: "IP gateway interface name\n"
! 945: "Emit an ICMP unreachable when matched\n"
! 946: "Silently discard pkts when matched\n"
! 947: "Distance value for this route\n"
! 948: VRF_CMD_HELP_STR)
! 949: {
! 950: return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], argv[2], argv[3],
! 951: argv[4]);
! 952: }
! 953:
! 954: DEFUN (ip_route_flags_distance2_vrf,
! 955: ip_route_flags_distance2_vrf_cmd,
! 956: "ip route A.B.C.D/M (reject|blackhole) <1-255> " VRF_CMD_STR,
! 957: IP_STR
! 958: "Establish static routes\n"
! 959: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 960: "Emit an ICMP unreachable when matched\n"
! 961: "Silently discard pkts when matched\n"
! 962: "Distance value for this route\n"
! 963: VRF_CMD_HELP_STR)
! 964: {
! 965: return zebra_static_ipv4 (vty, 1, argv[0], NULL, NULL, argv[1], argv[2],
! 966: argv[3]);
! 967: }
! 968:
! 969: DEFUN (ip_route_mask_distance_vrf,
! 970: ip_route_mask_distance_vrf_cmd,
! 971: "ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE|null0) <1-255> " VRF_CMD_STR,
! 972: IP_STR
! 973: "Establish static routes\n"
! 974: "IP destination prefix\n"
! 975: "IP destination prefix mask\n"
! 976: "IP gateway address\n"
! 977: "IP gateway interface name\n"
! 978: "Null interface\n"
! 979: "Distance value for this route\n"
! 980: VRF_CMD_HELP_STR)
! 981: {
! 982: return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], NULL, argv[3],
! 983: argv[4]);
! 984: }
! 985:
! 986: DEFUN (ip_route_mask_flags_distance_vrf,
! 987: ip_route_mask_flags_distance_vrf_cmd,
! 988: "ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE) (reject|blackhole) <1-255> " VRF_CMD_STR,
! 989: IP_STR
! 990: "Establish static routes\n"
! 991: "IP destination prefix\n"
! 992: "IP destination prefix mask\n"
! 993: "IP gateway address\n"
! 994: "IP gateway interface name\n"
! 995: "Emit an ICMP unreachable when matched\n"
! 996: "Silently discard pkts when matched\n"
! 997: "Distance value for this route\n"
! 998: VRF_CMD_HELP_STR)
! 999: {
! 1000: return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], argv[3], argv[4],
! 1001: argv[5]);
! 1002: }
! 1003:
! 1004: DEFUN (ip_route_mask_flags_distance2_vrf,
! 1005: ip_route_mask_flags_distance2_vrf_cmd,
! 1006: "ip route A.B.C.D A.B.C.D (reject|blackhole) <1-255> " VRF_CMD_STR,
! 1007: IP_STR
! 1008: "Establish static routes\n"
! 1009: "IP destination prefix\n"
! 1010: "IP destination prefix mask\n"
! 1011: "Emit an ICMP unreachable when matched\n"
! 1012: "Silently discard pkts when matched\n"
! 1013: "Distance value for this route\n"
! 1014: VRF_CMD_HELP_STR)
! 1015: {
! 1016: return zebra_static_ipv4 (vty, 1, argv[0], argv[1], NULL, argv[2], argv[3],
! 1017: argv[4]);
! 1018: }
! 1019:
! 1020: DEFUN (no_ip_route_vrf,
! 1021: no_ip_route_vrf_cmd,
! 1022: "no ip route A.B.C.D/M (A.B.C.D|INTERFACE|null0) " VRF_CMD_STR,
! 1023: NO_STR
! 1024: IP_STR
! 1025: "Establish static routes\n"
! 1026: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 1027: "IP gateway address\n"
! 1028: "IP gateway interface name\n"
! 1029: "Null interface\n"
! 1030: VRF_CMD_HELP_STR)
! 1031: {
! 1032: return zebra_static_ipv4 (vty, 0, argv[0], NULL, argv[1], NULL, NULL,
! 1033: (argc > 3) ? argv[3] : argv[2]);
! 1034: }
! 1035:
! 1036: ALIAS (no_ip_route_vrf,
! 1037: no_ip_route_flags_vrf_cmd,
! 1038: "no ip route A.B.C.D/M (A.B.C.D|INTERFACE) (reject|blackhole) " VRF_CMD_STR,
! 1039: NO_STR
! 1040: IP_STR
! 1041: "Establish static routes\n"
! 1042: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 1043: "IP gateway address\n"
! 1044: "IP gateway interface name\n"
! 1045: "Emit an ICMP unreachable when matched\n"
! 1046: "Silently discard pkts when matched\n"
! 1047: VRF_CMD_HELP_STR)
! 1048:
! 1049: DEFUN (no_ip_route_flags2_vrf,
! 1050: no_ip_route_flags2_vrf_cmd,
! 1051: "no ip route A.B.C.D/M (reject|blackhole) " VRF_CMD_STR,
! 1052: NO_STR
! 1053: IP_STR
! 1054: "Establish static routes\n"
! 1055: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 1056: "Emit an ICMP unreachable when matched\n"
! 1057: "Silently discard pkts when matched\n"
! 1058: VRF_CMD_HELP_STR)
! 1059: {
! 1060: return zebra_static_ipv4 (vty, 0, argv[0], NULL, NULL, NULL, NULL,
! 1061: argv[2]);
! 1062: }
! 1063:
! 1064: DEFUN (no_ip_route_mask_vrf,
! 1065: no_ip_route_mask_vrf_cmd,
! 1066: "no ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE|null0) " VRF_CMD_STR,
! 1067: NO_STR
! 1068: IP_STR
! 1069: "Establish static routes\n"
! 1070: "IP destination prefix\n"
! 1071: "IP destination prefix mask\n"
! 1072: "IP gateway address\n"
! 1073: "IP gateway interface name\n"
! 1074: "Null interface\n"
! 1075: VRF_CMD_HELP_STR)
! 1076: {
! 1077: return zebra_static_ipv4 (vty, 0, argv[0], argv[1], argv[2], NULL, NULL,
! 1078: (argc > 4) ? argv[4] : argv[3]);
! 1079: }
! 1080:
! 1081: ALIAS (no_ip_route_mask_vrf,
! 1082: no_ip_route_mask_flags_vrf_cmd,
! 1083: "no ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE) (reject|blackhole) " VRF_CMD_STR,
! 1084: NO_STR
! 1085: IP_STR
! 1086: "Establish static routes\n"
! 1087: "IP destination prefix\n"
! 1088: "IP destination prefix mask\n"
! 1089: "IP gateway address\n"
! 1090: "IP gateway interface name\n"
! 1091: "Emit an ICMP unreachable when matched\n"
! 1092: "Silently discard pkts when matched\n"
! 1093: VRF_CMD_HELP_STR)
! 1094:
! 1095: DEFUN (no_ip_route_mask_flags2_vrf,
! 1096: no_ip_route_mask_flags2_vrf_cmd,
! 1097: "no ip route A.B.C.D A.B.C.D (reject|blackhole) " VRF_CMD_STR,
! 1098: NO_STR
! 1099: IP_STR
! 1100: "Establish static routes\n"
! 1101: "IP destination prefix\n"
! 1102: "IP destination prefix mask\n"
! 1103: "Emit an ICMP unreachable when matched\n"
! 1104: "Silently discard pkts when matched\n"
! 1105: VRF_CMD_HELP_STR)
! 1106: {
! 1107: return zebra_static_ipv4 (vty, 0, argv[0], argv[1], NULL, NULL, NULL,
! 1108: argv[2]);
! 1109: }
! 1110:
! 1111: DEFUN (no_ip_route_distance_vrf,
! 1112: no_ip_route_distance_vrf_cmd,
! 1113: "no ip route A.B.C.D/M (A.B.C.D|INTERFACE|null0) <1-255> " VRF_CMD_STR,
! 1114: NO_STR
! 1115: IP_STR
! 1116: "Establish static routes\n"
! 1117: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 1118: "IP gateway address\n"
! 1119: "IP gateway interface name\n"
! 1120: "Null interface\n"
! 1121: "Distance value for this route\n"
! 1122: VRF_CMD_HELP_STR)
! 1123: {
! 1124: return zebra_static_ipv4 (vty, 0, argv[0], NULL, argv[1], NULL, argv[2],
! 1125: argv[3]);
! 1126: }
! 1127:
! 1128: DEFUN (no_ip_route_flags_distance_vrf,
! 1129: no_ip_route_flags_distance_vrf_cmd,
! 1130: "no ip route A.B.C.D/M (A.B.C.D|INTERFACE) (reject|blackhole) <1-255> " VRF_CMD_STR,
! 1131: NO_STR
! 1132: IP_STR
! 1133: "Establish static routes\n"
! 1134: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 1135: "IP gateway address\n"
! 1136: "IP gateway interface name\n"
! 1137: "Emit an ICMP unreachable when matched\n"
! 1138: "Silently discard pkts when matched\n"
! 1139: "Distance value for this route\n"
! 1140: VRF_CMD_HELP_STR)
! 1141: {
! 1142: return zebra_static_ipv4 (vty, 0, argv[0], NULL, argv[1], argv[2], argv[3],
! 1143: argv[4]);
! 1144: }
! 1145:
! 1146: DEFUN (no_ip_route_flags_distance2_vrf,
! 1147: no_ip_route_flags_distance2_vrf_cmd,
! 1148: "no ip route A.B.C.D/M (reject|blackhole) <1-255> " VRF_CMD_STR,
! 1149: NO_STR
! 1150: IP_STR
! 1151: "Establish static routes\n"
! 1152: "IP destination prefix (e.g. 10.0.0.0/8)\n"
! 1153: "Emit an ICMP unreachable when matched\n"
! 1154: "Silently discard pkts when matched\n"
! 1155: "Distance value for this route\n"
! 1156: VRF_CMD_HELP_STR)
! 1157: {
! 1158: return zebra_static_ipv4 (vty, 0, argv[0], NULL, NULL, argv[1], argv[2],
! 1159: argv[3]);
! 1160: }
! 1161:
! 1162: DEFUN (no_ip_route_mask_distance_vrf,
! 1163: no_ip_route_mask_distance_vrf_cmd,
! 1164: "no ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE|null0) <1-255> " VRF_CMD_STR,
! 1165: NO_STR
! 1166: IP_STR
! 1167: "Establish static routes\n"
! 1168: "IP destination prefix\n"
! 1169: "IP destination prefix mask\n"
! 1170: "IP gateway address\n"
! 1171: "IP gateway interface name\n"
! 1172: "Null interface\n"
! 1173: "Distance value for this route\n"
! 1174: VRF_CMD_HELP_STR)
! 1175: {
! 1176: return zebra_static_ipv4 (vty, 0, argv[0], argv[1], argv[2], NULL, argv[3],
! 1177: argv[4]);
! 1178: }
! 1179:
! 1180: DEFUN (no_ip_route_mask_flags_distance_vrf,
! 1181: no_ip_route_mask_flags_distance_vrf_cmd,
! 1182: "no ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE) (reject|blackhole) <1-255> " VRF_CMD_STR,
! 1183: NO_STR
! 1184: IP_STR
! 1185: "Establish static routes\n"
! 1186: "IP destination prefix\n"
! 1187: "IP destination prefix mask\n"
! 1188: "IP gateway address\n"
! 1189: "IP gateway interface name\n"
! 1190: "Emit an ICMP unreachable when matched\n"
! 1191: "Silently discard pkts when matched\n"
! 1192: "Distance value for this route\n"
! 1193: VRF_CMD_HELP_STR)
! 1194: {
! 1195: return zebra_static_ipv4 (vty, 0, argv[0], argv[1], argv[2], argv[3], argv[4],
! 1196: argv[5]);
! 1197: }
! 1198:
! 1199: DEFUN (no_ip_route_mask_flags_distance2_vrf,
! 1200: no_ip_route_mask_flags_distance2_vrf_cmd,
! 1201: "no ip route A.B.C.D A.B.C.D (reject|blackhole) <1-255> " VRF_CMD_STR,
! 1202: NO_STR
! 1203: IP_STR
! 1204: "Establish static routes\n"
! 1205: "IP destination prefix\n"
! 1206: "IP destination prefix mask\n"
! 1207: "Emit an ICMP unreachable when matched\n"
! 1208: "Silently discard pkts when matched\n"
! 1209: "Distance value for this route\n"
! 1210: VRF_CMD_HELP_STR)
! 1211: {
! 1212: return zebra_static_ipv4 (vty, 0, argv[0], argv[1], NULL, argv[2], argv[3],
! 1213: argv[4]);
! 1214: }
! 1215:
! 1216: char *proto_rm[AFI_MAX][ZEBRA_ROUTE_MAX+1]; /* "any" == ZEBRA_ROUTE_MAX */
! 1217:
! 1218: DEFUN (ip_protocol,
! 1219: ip_protocol_cmd,
! 1220: "ip protocol PROTO route-map ROUTE-MAP",
! 1221: NO_STR
! 1222: "Apply route map to PROTO\n"
! 1223: "Protocol name\n"
! 1224: "Route map name\n")
! 1225: {
! 1226: int i;
! 1227:
! 1228: if (strcasecmp(argv[0], "any") == 0)
! 1229: i = ZEBRA_ROUTE_MAX;
! 1230: else
! 1231: i = proto_name2num(argv[0]);
! 1232: if (i < 0)
! 1233: {
! 1234: vty_out (vty, "invalid protocol name \"%s\"%s", argv[0] ? argv[0] : "",
! 1235: VTY_NEWLINE);
! 1236: return CMD_WARNING;
! 1237: }
! 1238: if (proto_rm[AFI_IP][i])
! 1239: XFREE (MTYPE_ROUTE_MAP_NAME, proto_rm[AFI_IP][i]);
! 1240: proto_rm[AFI_IP][i] = XSTRDUP (MTYPE_ROUTE_MAP_NAME, argv[1]);
! 1241: return CMD_SUCCESS;
! 1242: }
! 1243:
! 1244: DEFUN (no_ip_protocol,
! 1245: no_ip_protocol_cmd,
! 1246: "no ip protocol PROTO",
! 1247: NO_STR
! 1248: "Remove route map from PROTO\n"
! 1249: "Protocol name\n")
! 1250: {
! 1251: int i;
! 1252:
! 1253: if (strcasecmp(argv[0], "any") == 0)
! 1254: i = ZEBRA_ROUTE_MAX;
! 1255: else
! 1256: i = proto_name2num(argv[0]);
! 1257: if (i < 0)
! 1258: {
! 1259: vty_out (vty, "invalid protocol name \"%s\"%s", argv[0] ? argv[0] : "",
! 1260: VTY_NEWLINE);
! 1261: return CMD_WARNING;
! 1262: }
! 1263: if (proto_rm[AFI_IP][i])
! 1264: XFREE (MTYPE_ROUTE_MAP_NAME, proto_rm[AFI_IP][i]);
! 1265: proto_rm[AFI_IP][i] = NULL;
! 1266: return CMD_SUCCESS;
! 1267: }
! 1268:
! 1269: /* New RIB. Detailed information for IPv4 route. */
! 1270: static void
! 1271: vty_show_ip_route_detail (struct vty *vty, struct route_node *rn, int mcast)
! 1272: {
! 1273: struct rib *rib;
! 1274: struct nexthop *nexthop, *tnexthop;
! 1275: int recursing;
! 1276: char buf[PREFIX_STRLEN];
! 1277:
! 1278: RNODE_FOREACH_RIB (rn, rib)
! 1279: {
! 1280: const char *mcast_info = "";
! 1281: if (mcast)
! 1282: {
! 1283: rib_table_info_t *info = rn->table->info;
! 1284: mcast_info = (info->safi == SAFI_MULTICAST)
! 1285: ? " using Multicast RIB"
! 1286: : " using Unicast RIB";
! 1287: }
! 1288: vty_out (vty, "Routing entry for %s%s%s",
! 1289: prefix2str (&rn->p, buf, sizeof(buf)), mcast_info,
! 1290: VTY_NEWLINE);
! 1291: vty_out (vty, " Known via \"%s\"", zebra_route_string (rib->type));
! 1292: vty_out (vty, ", distance %u, metric %u", rib->distance, rib->metric);
! 1293: if (rib->mtu)
! 1294: vty_out (vty, ", mtu %u", rib->mtu);
! 1295: vty_out (vty, ", vrf %u", rib->vrf_id);
! 1296: if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_SELECTED))
! 1297: vty_out (vty, ", best");
! 1298: if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_FIB_OVERRIDE))
! 1299: vty_out (vty, ", fib-override");
! 1300: if (CHECK_FLAG (rib->status, RIB_ENTRY_SELECTED_FIB))
! 1301: vty_out (vty, ", fib");
! 1302: if (rib->refcnt)
! 1303: vty_out (vty, ", refcnt %ld", rib->refcnt);
! 1304: if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_BLACKHOLE))
! 1305: vty_out (vty, ", blackhole");
! 1306: if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_REJECT))
! 1307: vty_out (vty, ", reject");
! 1308: vty_out (vty, "%s", VTY_NEWLINE);
! 1309:
! 1310: #define ONE_DAY_SECOND 60*60*24
! 1311: #define ONE_WEEK_SECOND 60*60*24*7
! 1312: if (rib->type == ZEBRA_ROUTE_RIP
! 1313: || rib->type == ZEBRA_ROUTE_RIPNG
! 1314: || rib->type == ZEBRA_ROUTE_OSPF
! 1315: || rib->type == ZEBRA_ROUTE_OSPF6
! 1316: || rib->type == ZEBRA_ROUTE_BABEL
! 1317: || rib->type == ZEBRA_ROUTE_ISIS
! 1318: || rib->type == ZEBRA_ROUTE_BGP)
! 1319: {
! 1320: time_t uptime;
! 1321: struct tm *tm;
! 1322:
! 1323: uptime = time (NULL);
! 1324: uptime -= rib->uptime;
! 1325: tm = gmtime (&uptime);
! 1326:
! 1327: vty_out (vty, " Last update ");
! 1328:
! 1329: if (uptime < ONE_DAY_SECOND)
! 1330: vty_out (vty, "%02d:%02d:%02d",
! 1331: tm->tm_hour, tm->tm_min, tm->tm_sec);
! 1332: else if (uptime < ONE_WEEK_SECOND)
! 1333: vty_out (vty, "%dd%02dh%02dm",
! 1334: tm->tm_yday, tm->tm_hour, tm->tm_min);
! 1335: else
! 1336: vty_out (vty, "%02dw%dd%02dh",
! 1337: tm->tm_yday/7,
! 1338: tm->tm_yday - ((tm->tm_yday/7) * 7), tm->tm_hour);
! 1339: vty_out (vty, " ago%s", VTY_NEWLINE);
! 1340: }
! 1341:
! 1342: for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop, recursing))
! 1343: {
! 1344: vty_out (vty, " %c%s",
! 1345: CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB) ? '*' : ' ',
! 1346: recursing ? " " : "");
! 1347:
! 1348: switch (nexthop->type)
! 1349: {
! 1350: case NEXTHOP_TYPE_IPV4:
! 1351: case NEXTHOP_TYPE_IPV4_IFINDEX:
! 1352: vty_out (vty, " %s", inet_ntoa (nexthop->gate.ipv4));
! 1353: if (nexthop->ifindex)
! 1354: vty_out (vty, ", via %s",
! 1355: ifindex2ifname_vrf (nexthop->ifindex, rib->vrf_id));
! 1356: break;
! 1357: case NEXTHOP_TYPE_IPV6:
! 1358: case NEXTHOP_TYPE_IPV6_IFINDEX:
! 1359: case NEXTHOP_TYPE_IPV6_IFNAME:
! 1360: vty_out (vty, " %s",
! 1361: inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, sizeof(buf)));
! 1362: if (nexthop->type == NEXTHOP_TYPE_IPV6_IFNAME)
! 1363: vty_out (vty, ", %s", nexthop->ifname);
! 1364: else if (nexthop->ifindex)
! 1365: vty_out (vty, ", via %s",
! 1366: ifindex2ifname_vrf (nexthop->ifindex, rib->vrf_id));
! 1367: break;
! 1368: case NEXTHOP_TYPE_IFINDEX:
! 1369: vty_out (vty, " directly connected, %s",
! 1370: ifindex2ifname_vrf (nexthop->ifindex, rib->vrf_id));
! 1371: break;
! 1372: case NEXTHOP_TYPE_IFNAME:
! 1373: vty_out (vty, " directly connected, %s", nexthop->ifname);
! 1374: break;
! 1375: case NEXTHOP_TYPE_BLACKHOLE:
! 1376: vty_out (vty, " directly connected, Null0");
! 1377: break;
! 1378: default:
! 1379: break;
! 1380: }
! 1381: if (! CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE))
! 1382: vty_out (vty, " inactive");
! 1383:
! 1384: if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ONLINK))
! 1385: vty_out (vty, " onlink");
! 1386:
! 1387: if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_RECURSIVE))
! 1388: vty_out (vty, " (recursive)");
! 1389:
! 1390: switch (nexthop->type)
! 1391: {
! 1392: case NEXTHOP_TYPE_IPV4:
! 1393: case NEXTHOP_TYPE_IPV4_IFINDEX:
! 1394: case NEXTHOP_TYPE_IPV4_IFNAME:
! 1395: if (nexthop->src.ipv4.s_addr)
! 1396: {
! 1397: if (inet_ntop(AF_INET, &nexthop->src.ipv4, buf, sizeof buf))
! 1398: vty_out (vty, ", src %s", buf);
! 1399: }
! 1400: break;
! 1401: #ifdef HAVE_IPV6
! 1402: case NEXTHOP_TYPE_IPV6:
! 1403: case NEXTHOP_TYPE_IPV6_IFINDEX:
! 1404: case NEXTHOP_TYPE_IPV6_IFNAME:
! 1405: if (!IPV6_ADDR_SAME(&nexthop->src.ipv6, &in6addr_any))
! 1406: {
! 1407: if (inet_ntop(AF_INET6, &nexthop->src.ipv6, buf, sizeof buf))
! 1408: vty_out (vty, ", src %s", buf);
! 1409: }
! 1410: break;
! 1411: #endif /* HAVE_IPV6 */
! 1412: default:
! 1413: break;
! 1414: }
! 1415: vty_out (vty, "%s", VTY_NEWLINE);
! 1416: }
! 1417: vty_out (vty, "%s", VTY_NEWLINE);
! 1418: }
! 1419: }
! 1420:
! 1421: static void
! 1422: vty_show_ip_route (struct vty *vty, struct route_node *rn, struct rib *rib)
! 1423: {
! 1424: struct nexthop *nexthop, *tnexthop;
! 1425: int recursing;
! 1426: int len = 0;
! 1427: char buf[BUFSIZ];
! 1428:
! 1429: /* Nexthop information. */
! 1430: for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop, recursing))
! 1431: {
! 1432: if (nexthop == rib->nexthop)
! 1433: {
! 1434: /* Prefix information. */
! 1435: len = vty_out (vty, "%c%c%c %s",
! 1436: zebra_route_char (rib->type),
! 1437: CHECK_FLAG (rib->flags, ZEBRA_FLAG_SELECTED)
! 1438: ? '>' : ' ',
! 1439: CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB)
! 1440: ? '*' : ' ',
! 1441: prefix2str (&rn->p, buf, sizeof buf));
! 1442:
! 1443: /* Distance and metric display. */
! 1444: if (rib->type != ZEBRA_ROUTE_CONNECT
! 1445: && rib->type != ZEBRA_ROUTE_KERNEL)
! 1446: len += vty_out (vty, " [%d/%d]", rib->distance,
! 1447: rib->metric);
! 1448:
! 1449: if (rib->vrf_id != VRF_DEFAULT)
! 1450: len += vty_out (vty, " [vrf %u]", rib->vrf_id);
! 1451: }
! 1452: else
! 1453: vty_out (vty, " %c%*c",
! 1454: CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB)
! 1455: ? '*' : ' ',
! 1456: len - 3 + (2 * recursing), ' ');
! 1457:
! 1458: switch (nexthop->type)
! 1459: {
! 1460: case NEXTHOP_TYPE_IPV4:
! 1461: case NEXTHOP_TYPE_IPV4_IFINDEX:
! 1462: vty_out (vty, " via %s", inet_ntoa (nexthop->gate.ipv4));
! 1463: if (nexthop->ifindex)
! 1464: vty_out (vty, ", %s",
! 1465: ifindex2ifname_vrf (nexthop->ifindex, rib->vrf_id));
! 1466: break;
! 1467: case NEXTHOP_TYPE_IPV6:
! 1468: case NEXTHOP_TYPE_IPV6_IFINDEX:
! 1469: case NEXTHOP_TYPE_IPV6_IFNAME:
! 1470: vty_out (vty, " via %s",
! 1471: inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, BUFSIZ));
! 1472: if (nexthop->type == NEXTHOP_TYPE_IPV6_IFNAME)
! 1473: vty_out (vty, ", %s", nexthop->ifname);
! 1474: else if (nexthop->ifindex)
! 1475: vty_out (vty, ", %s",
! 1476: ifindex2ifname_vrf (nexthop->ifindex, rib->vrf_id));
! 1477: break;
! 1478: case NEXTHOP_TYPE_IFINDEX:
! 1479: vty_out (vty, " is directly connected, %s",
! 1480: ifindex2ifname_vrf (nexthop->ifindex, rib->vrf_id));
! 1481: break;
! 1482: case NEXTHOP_TYPE_IFNAME:
! 1483: vty_out (vty, " is directly connected, %s", nexthop->ifname);
! 1484: break;
! 1485: case NEXTHOP_TYPE_BLACKHOLE:
! 1486: vty_out (vty, " is directly connected, Null0");
! 1487: break;
! 1488: default:
! 1489: break;
! 1490: }
! 1491: if (! CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE))
! 1492: vty_out (vty, " inactive");
! 1493:
! 1494: if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ONLINK))
! 1495: vty_out (vty, " onlink");
! 1496:
! 1497: if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_RECURSIVE))
! 1498: vty_out (vty, " (recursive)");
! 1499:
! 1500: switch (nexthop->type)
! 1501: {
! 1502: case NEXTHOP_TYPE_IPV4:
! 1503: case NEXTHOP_TYPE_IPV4_IFINDEX:
! 1504: case NEXTHOP_TYPE_IPV4_IFNAME:
! 1505: if (nexthop->src.ipv4.s_addr)
! 1506: {
! 1507: if (inet_ntop(AF_INET, &nexthop->src.ipv4, buf, sizeof buf))
! 1508: vty_out (vty, ", src %s", buf);
! 1509: }
! 1510: break;
! 1511: #ifdef HAVE_IPV6
! 1512: case NEXTHOP_TYPE_IPV6:
! 1513: case NEXTHOP_TYPE_IPV6_IFINDEX:
! 1514: case NEXTHOP_TYPE_IPV6_IFNAME:
! 1515: if (!IPV6_ADDR_SAME(&nexthop->src.ipv6, &in6addr_any))
! 1516: {
! 1517: if (inet_ntop(AF_INET6, &nexthop->src.ipv6, buf, sizeof buf))
! 1518: vty_out (vty, ", src %s", buf);
! 1519: }
! 1520: break;
! 1521: #endif /* HAVE_IPV6 */
! 1522: default:
! 1523: break;
! 1524: }
! 1525:
! 1526: if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_BLACKHOLE))
! 1527: vty_out (vty, ", bh");
! 1528: if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_REJECT))
! 1529: vty_out (vty, ", rej");
! 1530:
! 1531: if (rib->type == ZEBRA_ROUTE_RIP
! 1532: || rib->type == ZEBRA_ROUTE_RIPNG
! 1533: || rib->type == ZEBRA_ROUTE_OSPF
! 1534: || rib->type == ZEBRA_ROUTE_OSPF6
! 1535: || rib->type == ZEBRA_ROUTE_BABEL
! 1536: || rib->type == ZEBRA_ROUTE_ISIS
! 1537: || rib->type == ZEBRA_ROUTE_BGP)
! 1538: {
! 1539: time_t uptime;
! 1540: struct tm *tm;
! 1541:
! 1542: uptime = time (NULL);
! 1543: uptime -= rib->uptime;
! 1544: tm = gmtime (&uptime);
! 1545:
! 1546: #define ONE_DAY_SECOND 60*60*24
! 1547: #define ONE_WEEK_SECOND 60*60*24*7
! 1548:
! 1549: if (uptime < ONE_DAY_SECOND)
! 1550: vty_out (vty, ", %02d:%02d:%02d",
! 1551: tm->tm_hour, tm->tm_min, tm->tm_sec);
! 1552: else if (uptime < ONE_WEEK_SECOND)
! 1553: vty_out (vty, ", %dd%02dh%02dm",
! 1554: tm->tm_yday, tm->tm_hour, tm->tm_min);
! 1555: else
! 1556: vty_out (vty, ", %02dw%dd%02dh",
! 1557: tm->tm_yday/7,
! 1558: tm->tm_yday - ((tm->tm_yday/7) * 7), tm->tm_hour);
! 1559: }
! 1560: vty_out (vty, "%s", VTY_NEWLINE);
! 1561: }
! 1562: }
! 1563:
! 1564: DEFUN (show_ip_route,
! 1565: show_ip_route_cmd,
! 1566: "show ip route",
! 1567: SHOW_STR
! 1568: IP_STR
! 1569: "IP routing table\n")
! 1570: {
! 1571: vrf_id_t vrf_id = VRF_DEFAULT;
! 1572:
! 1573: if (argc > 0)
! 1574: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[0]);
! 1575:
! 1576: return do_show_ip_route(vty, SAFI_UNICAST, vrf_id);
! 1577: }
! 1578:
! 1579: static int do_show_ip_route(struct vty *vty, safi_t safi, vrf_id_t vrf_id)
! 1580: {
! 1581: struct route_table *table;
! 1582: struct route_node *rn;
! 1583: struct rib *rib;
! 1584: int first = 1;
! 1585:
! 1586: table = zebra_vrf_table (AFI_IP, safi, vrf_id);
! 1587: if (! table)
! 1588: return CMD_SUCCESS;
! 1589:
! 1590: /* Show all IPv4 routes. */
! 1591: for (rn = route_top (table); rn; rn = route_next (rn))
! 1592: RNODE_FOREACH_RIB (rn, rib)
! 1593: {
! 1594: if (first)
! 1595: {
! 1596: vty_out (vty, SHOW_ROUTE_V4_HEADER);
! 1597: first = 0;
! 1598: }
! 1599: vty_show_ip_route (vty, rn, rib);
! 1600: }
! 1601: return CMD_SUCCESS;
! 1602: }
! 1603:
! 1604: ALIAS (show_ip_route,
! 1605: show_ip_route_vrf_cmd,
! 1606: "show ip route " VRF_CMD_STR,
! 1607: SHOW_STR
! 1608: IP_STR
! 1609: "IP routing table\n"
! 1610: VRF_CMD_HELP_STR)
! 1611:
! 1612: DEFUN (show_ip_route_prefix_longer,
! 1613: show_ip_route_prefix_longer_cmd,
! 1614: "show ip route A.B.C.D/M longer-prefixes",
! 1615: SHOW_STR
! 1616: IP_STR
! 1617: "IP routing table\n"
! 1618: "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
! 1619: "Show route matching the specified Network/Mask pair only\n")
! 1620: {
! 1621: struct route_table *table;
! 1622: struct route_node *rn;
! 1623: struct rib *rib;
! 1624: struct prefix p;
! 1625: int ret;
! 1626: int first = 1;
! 1627: vrf_id_t vrf_id = VRF_DEFAULT;
! 1628:
! 1629: ret = str2prefix (argv[0], &p);
! 1630: if (! ret)
! 1631: {
! 1632: vty_out (vty, "%% Malformed Prefix%s", VTY_NEWLINE);
! 1633: return CMD_WARNING;
! 1634: }
! 1635:
! 1636: if (argc > 1)
! 1637: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[1]);
! 1638:
! 1639: table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
! 1640: if (! table)
! 1641: return CMD_SUCCESS;
! 1642:
! 1643: /* Show matched type IPv4 routes. */
! 1644: for (rn = route_top (table); rn; rn = route_next (rn))
! 1645: RNODE_FOREACH_RIB (rn, rib)
! 1646: if (prefix_match (&p, &rn->p))
! 1647: {
! 1648: if (first)
! 1649: {
! 1650: vty_out (vty, SHOW_ROUTE_V4_HEADER);
! 1651: first = 0;
! 1652: }
! 1653: vty_show_ip_route (vty, rn, rib);
! 1654: }
! 1655: return CMD_SUCCESS;
! 1656: }
! 1657:
! 1658: ALIAS (show_ip_route_prefix_longer,
! 1659: show_ip_route_prefix_longer_vrf_cmd,
! 1660: "show ip route A.B.C.D/M longer-prefixes " VRF_CMD_STR,
! 1661: SHOW_STR
! 1662: IP_STR
! 1663: "IP routing table\n"
! 1664: "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
! 1665: "Show route matching the specified Network/Mask pair only\n"
! 1666: VRF_CMD_HELP_STR)
! 1667:
! 1668: DEFUN (show_ip_route_supernets,
! 1669: show_ip_route_supernets_cmd,
! 1670: "show ip route supernets-only",
! 1671: SHOW_STR
! 1672: IP_STR
! 1673: "IP routing table\n"
! 1674: "Show supernet entries only\n")
! 1675: {
! 1676: struct route_table *table;
! 1677: struct route_node *rn;
! 1678: struct rib *rib;
! 1679: u_int32_t addr;
! 1680: int first = 1;
! 1681: vrf_id_t vrf_id = VRF_DEFAULT;
! 1682:
! 1683: if (argc > 0)
! 1684: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[0]);
! 1685:
! 1686: table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
! 1687: if (! table)
! 1688: return CMD_SUCCESS;
! 1689:
! 1690: /* Show matched type IPv4 routes. */
! 1691: for (rn = route_top (table); rn; rn = route_next (rn))
! 1692: RNODE_FOREACH_RIB (rn, rib)
! 1693: {
! 1694: addr = ntohl (rn->p.u.prefix4.s_addr);
! 1695:
! 1696: if ((IN_CLASSC (addr) && rn->p.prefixlen < 24)
! 1697: || (IN_CLASSB (addr) && rn->p.prefixlen < 16)
! 1698: || (IN_CLASSA (addr) && rn->p.prefixlen < 8))
! 1699: {
! 1700: if (first)
! 1701: {
! 1702: vty_out (vty, SHOW_ROUTE_V4_HEADER);
! 1703: first = 0;
! 1704: }
! 1705: vty_show_ip_route (vty, rn, rib);
! 1706: }
! 1707: }
! 1708: return CMD_SUCCESS;
! 1709: }
! 1710:
! 1711: ALIAS (show_ip_route_supernets,
! 1712: show_ip_route_supernets_vrf_cmd,
! 1713: "show ip route supernets-only " VRF_CMD_STR,
! 1714: SHOW_STR
! 1715: IP_STR
! 1716: "IP routing table\n"
! 1717: "Show supernet entries only\n"
! 1718: VRF_CMD_HELP_STR)
! 1719:
! 1720: DEFUN (show_ip_route_protocol,
! 1721: show_ip_route_protocol_cmd,
! 1722: "show ip route " QUAGGA_IP_REDIST_STR_ZEBRA,
! 1723: SHOW_STR
! 1724: IP_STR
! 1725: "IP routing table\n"
! 1726: QUAGGA_IP_REDIST_HELP_STR_ZEBRA)
! 1727: {
! 1728: int type;
! 1729: struct route_table *table;
! 1730: struct route_node *rn;
! 1731: struct rib *rib;
! 1732: int first = 1;
! 1733: vrf_id_t vrf_id = VRF_DEFAULT;
! 1734:
! 1735: type = proto_redistnum (AFI_IP, argv[0]);
! 1736: if (type < 0)
! 1737: {
! 1738: vty_out (vty, "Unknown route type%s", VTY_NEWLINE);
! 1739: return CMD_WARNING;
! 1740: }
! 1741:
! 1742: if (argc > 1)
! 1743: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[1]);
! 1744:
! 1745: table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
! 1746: if (! table)
! 1747: return CMD_SUCCESS;
! 1748:
! 1749: /* Show matched type IPv4 routes. */
! 1750: for (rn = route_top (table); rn; rn = route_next (rn))
! 1751: RNODE_FOREACH_RIB (rn, rib)
! 1752: if (rib->type == type)
! 1753: {
! 1754: if (first)
! 1755: {
! 1756: vty_out (vty, SHOW_ROUTE_V4_HEADER);
! 1757: first = 0;
! 1758: }
! 1759: vty_show_ip_route (vty, rn, rib);
! 1760: }
! 1761: return CMD_SUCCESS;
! 1762: }
! 1763:
! 1764: ALIAS (show_ip_route_protocol,
! 1765: show_ip_route_protocol_vrf_cmd,
! 1766: "show ip route " QUAGGA_IP_REDIST_STR_ZEBRA " " VRF_CMD_STR,
! 1767: SHOW_STR
! 1768: IP_STR
! 1769: "IP routing table\n"
! 1770: QUAGGA_IP_REDIST_HELP_STR_ZEBRA
! 1771: VRF_CMD_HELP_STR)
! 1772:
! 1773: DEFUN (show_ip_route_addr,
! 1774: show_ip_route_addr_cmd,
! 1775: "show ip route A.B.C.D",
! 1776: SHOW_STR
! 1777: IP_STR
! 1778: "IP routing table\n"
! 1779: "Network in the IP routing table to display\n")
! 1780: {
! 1781: int ret;
! 1782: struct prefix_ipv4 p;
! 1783: struct route_table *table;
! 1784: struct route_node *rn;
! 1785: vrf_id_t vrf_id = VRF_DEFAULT;
! 1786:
! 1787: ret = str2prefix_ipv4 (argv[0], &p);
! 1788: if (ret <= 0)
! 1789: {
! 1790: vty_out (vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
! 1791: return CMD_WARNING;
! 1792: }
! 1793:
! 1794: if (argc > 1)
! 1795: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[1]);
! 1796:
! 1797: table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
! 1798: if (! table)
! 1799: return CMD_SUCCESS;
! 1800:
! 1801: rn = route_node_match (table, (struct prefix *) &p);
! 1802: if (! rn)
! 1803: {
! 1804: vty_out (vty, "%% Network not in table%s", VTY_NEWLINE);
! 1805: return CMD_WARNING;
! 1806: }
1.1 misho 1807:
1.1.1.4 ! misho 1808: vty_show_ip_route_detail (vty, rn, 0);
1.1 misho 1809:
1.1.1.4 ! misho 1810: route_unlock_node (rn);
1.1 misho 1811:
1.1.1.4 ! misho 1812: return CMD_SUCCESS;
! 1813: }
1.1 misho 1814:
1.1.1.4 ! misho 1815: ALIAS (show_ip_route_addr,
! 1816: show_ip_route_addr_vrf_cmd,
! 1817: "show ip route A.B.C.D " VRF_CMD_STR,
! 1818: SHOW_STR
! 1819: IP_STR
! 1820: "IP routing table\n"
! 1821: "Network in the IP routing table to display\n"
! 1822: VRF_CMD_HELP_STR)
! 1823:
! 1824: DEFUN (show_ip_route_prefix,
! 1825: show_ip_route_prefix_cmd,
! 1826: "show ip route A.B.C.D/M",
! 1827: SHOW_STR
! 1828: IP_STR
! 1829: "IP routing table\n"
! 1830: "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
! 1831: {
! 1832: int ret;
! 1833: struct prefix_ipv4 p;
! 1834: struct route_table *table;
! 1835: struct route_node *rn;
! 1836: vrf_id_t vrf_id = VRF_DEFAULT;
! 1837:
! 1838: ret = str2prefix_ipv4 (argv[0], &p);
! 1839: if (ret <= 0)
! 1840: {
! 1841: vty_out (vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
! 1842: return CMD_WARNING;
! 1843: }
! 1844:
! 1845: if (argc > 1)
! 1846: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[1]);
! 1847:
! 1848: table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
! 1849: if (! table)
! 1850: return CMD_SUCCESS;
! 1851:
! 1852: rn = route_node_match (table, (struct prefix *) &p);
! 1853: if (! rn || rn->p.prefixlen != p.prefixlen)
! 1854: {
! 1855: vty_out (vty, "%% Network not in table%s", VTY_NEWLINE);
! 1856: if (rn)
! 1857: route_unlock_node (rn);
! 1858: return CMD_WARNING;
! 1859: }
! 1860:
! 1861: vty_show_ip_route_detail (vty, rn, 0);
! 1862:
! 1863: route_unlock_node (rn);
! 1864:
! 1865: return CMD_SUCCESS;
! 1866: }
1.1 misho 1867:
1.1.1.4 ! misho 1868: ALIAS (show_ip_route_prefix,
! 1869: show_ip_route_prefix_vrf_cmd,
! 1870: "show ip route A.B.C.D/M " VRF_CMD_STR,
! 1871: SHOW_STR
! 1872: IP_STR
! 1873: "IP routing table\n"
! 1874: "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
! 1875: VRF_CMD_HELP_STR)
! 1876:
! 1877: static void
! 1878: vty_show_ip_route_summary (struct vty *vty, struct route_table *table)
! 1879: {
! 1880: struct route_node *rn;
! 1881: struct rib *rib;
! 1882: struct nexthop *nexthop;
! 1883: #define ZEBRA_ROUTE_IBGP ZEBRA_ROUTE_MAX
! 1884: #define ZEBRA_ROUTE_TOTAL (ZEBRA_ROUTE_IBGP + 1)
! 1885: u_int32_t rib_cnt[ZEBRA_ROUTE_TOTAL + 1];
! 1886: u_int32_t fib_cnt[ZEBRA_ROUTE_TOTAL + 1];
! 1887: u_int32_t i;
1.1 misho 1888:
1.1.1.4 ! misho 1889: memset (&rib_cnt, 0, sizeof(rib_cnt));
! 1890: memset (&fib_cnt, 0, sizeof(fib_cnt));
! 1891: for (rn = route_top (table); rn; rn = route_next (rn))
! 1892: RNODE_FOREACH_RIB (rn, rib)
! 1893: for (nexthop = rib->nexthop; nexthop; nexthop = nexthop->next)
! 1894: {
! 1895: rib_cnt[ZEBRA_ROUTE_TOTAL]++;
! 1896: rib_cnt[rib->type]++;
! 1897: if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB)
! 1898: || nexthop_has_fib_child(nexthop))
1.1 misho 1899: {
1.1.1.4 ! misho 1900: fib_cnt[ZEBRA_ROUTE_TOTAL]++;
! 1901: fib_cnt[rib->type]++;
! 1902: }
! 1903: if (rib->type == ZEBRA_ROUTE_BGP &&
! 1904: CHECK_FLAG (rib->flags, ZEBRA_FLAG_IBGP))
! 1905: {
! 1906: rib_cnt[ZEBRA_ROUTE_IBGP]++;
! 1907: if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB)
! 1908: || nexthop_has_fib_child(nexthop))
! 1909: fib_cnt[ZEBRA_ROUTE_IBGP]++;
1.1 misho 1910: }
1.1.1.4 ! misho 1911: }
! 1912:
! 1913: vty_out (vty, "%-20s %-20s %s (vrf %u)%s",
! 1914: "Route Source", "Routes", "FIB",
! 1915: ((rib_table_info_t *)table->info)->zvrf->vrf_id,
! 1916: VTY_NEWLINE);
1.1 misho 1917:
1.1.1.4 ! misho 1918: for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
! 1919: {
! 1920: if (rib_cnt[i] > 0)
! 1921: {
! 1922: if (i == ZEBRA_ROUTE_BGP)
1.1 misho 1923: {
1.1.1.4 ! misho 1924: vty_out (vty, "%-20s %-20d %-20d %s", "ebgp",
! 1925: rib_cnt[ZEBRA_ROUTE_BGP] - rib_cnt[ZEBRA_ROUTE_IBGP],
! 1926: fib_cnt[ZEBRA_ROUTE_BGP] - fib_cnt[ZEBRA_ROUTE_IBGP],
! 1927: VTY_NEWLINE);
! 1928: vty_out (vty, "%-20s %-20d %-20d %s", "ibgp",
! 1929: rib_cnt[ZEBRA_ROUTE_IBGP], fib_cnt[ZEBRA_ROUTE_IBGP],
! 1930: VTY_NEWLINE);
1.1 misho 1931: }
1.1.1.4 ! misho 1932: else
! 1933: vty_out (vty, "%-20s %-20d %-20d %s", zebra_route_string(i),
! 1934: rib_cnt[i], fib_cnt[i], VTY_NEWLINE);
1.1 misho 1935: }
1936: }
1.1.1.4 ! misho 1937:
! 1938: vty_out (vty, "------%s", VTY_NEWLINE);
! 1939: vty_out (vty, "%-20s %-20d %-20d %s", "Totals", rib_cnt[ZEBRA_ROUTE_TOTAL],
! 1940: fib_cnt[ZEBRA_ROUTE_TOTAL], VTY_NEWLINE);
! 1941: vty_out (vty, "%s", VTY_NEWLINE);
1.1 misho 1942: }
1943:
1.1.1.4 ! misho 1944: /*
! 1945: * Implementation of the ip route summary prefix command.
! 1946: *
! 1947: * This command prints the primary prefixes that have been installed by various
! 1948: * protocols on the box.
! 1949: *
! 1950: */
1.1 misho 1951: static void
1.1.1.4 ! misho 1952: vty_show_ip_route_summary_prefix (struct vty *vty, struct route_table *table)
1.1 misho 1953: {
1.1.1.4 ! misho 1954: struct route_node *rn;
! 1955: struct rib *rib;
1.1 misho 1956: struct nexthop *nexthop;
1.1.1.4 ! misho 1957: #define ZEBRA_ROUTE_IBGP ZEBRA_ROUTE_MAX
! 1958: #define ZEBRA_ROUTE_TOTAL (ZEBRA_ROUTE_IBGP + 1)
! 1959: u_int32_t rib_cnt[ZEBRA_ROUTE_TOTAL + 1];
! 1960: u_int32_t fib_cnt[ZEBRA_ROUTE_TOTAL + 1];
! 1961: u_int32_t i;
! 1962: int cnt;
1.1 misho 1963:
1.1.1.4 ! misho 1964: memset (&rib_cnt, 0, sizeof(rib_cnt));
! 1965: memset (&fib_cnt, 0, sizeof(fib_cnt));
! 1966: for (rn = route_top (table); rn; rn = route_next (rn))
! 1967: RNODE_FOREACH_RIB (rn, rib)
! 1968: {
1.1 misho 1969:
1.1.1.4 ! misho 1970: /*
! 1971: * In case of ECMP, count only once.
! 1972: */
! 1973: cnt = 0;
! 1974: for (nexthop = rib->nexthop; (!cnt && nexthop); nexthop = nexthop->next)
! 1975: {
! 1976: cnt++;
! 1977: rib_cnt[ZEBRA_ROUTE_TOTAL]++;
! 1978: rib_cnt[rib->type]++;
! 1979: if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB))
! 1980: {
! 1981: fib_cnt[ZEBRA_ROUTE_TOTAL]++;
! 1982: fib_cnt[rib->type]++;
! 1983: }
! 1984: if (rib->type == ZEBRA_ROUTE_BGP &&
! 1985: CHECK_FLAG (rib->flags, ZEBRA_FLAG_IBGP))
! 1986: {
! 1987: rib_cnt[ZEBRA_ROUTE_IBGP]++;
! 1988: if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB))
! 1989: fib_cnt[ZEBRA_ROUTE_IBGP]++;
! 1990: }
! 1991: }
! 1992: }
1.1 misho 1993:
1.1.1.4 ! misho 1994: vty_out (vty, "%-20s %-20s %s (vrf %u)%s",
! 1995: "Route Source", "Prefix Routes", "FIB",
! 1996: ((rib_table_info_t *)table->info)->zvrf->vrf_id,
! 1997: VTY_NEWLINE);
! 1998:
! 1999: for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
! 2000: {
! 2001: if (rib_cnt[i] > 0)
1.1 misho 2002: {
1.1.1.4 ! misho 2003: if (i == ZEBRA_ROUTE_BGP)
1.1 misho 2004: {
1.1.1.4 ! misho 2005: vty_out (vty, "%-20s %-20d %-20d %s", "ebgp",
! 2006: rib_cnt[ZEBRA_ROUTE_BGP] - rib_cnt[ZEBRA_ROUTE_IBGP],
! 2007: fib_cnt[ZEBRA_ROUTE_BGP] - fib_cnt[ZEBRA_ROUTE_IBGP],
! 2008: VTY_NEWLINE);
! 2009: vty_out (vty, "%-20s %-20d %-20d %s", "ibgp",
! 2010: rib_cnt[ZEBRA_ROUTE_IBGP], fib_cnt[ZEBRA_ROUTE_IBGP],
! 2011: VTY_NEWLINE);
1.1 misho 2012: }
1.1.1.4 ! misho 2013: else
! 2014: vty_out (vty, "%-20s %-20d %-20d %s", zebra_route_string(i),
! 2015: rib_cnt[i], fib_cnt[i], VTY_NEWLINE);
1.1 misho 2016: }
1.1.1.4 ! misho 2017: }
1.1 misho 2018:
1.1.1.4 ! misho 2019: vty_out (vty, "------%s", VTY_NEWLINE);
! 2020: vty_out (vty, "%-20s %-20d %-20d %s", "Totals", rib_cnt[ZEBRA_ROUTE_TOTAL],
! 2021: fib_cnt[ZEBRA_ROUTE_TOTAL], VTY_NEWLINE);
! 2022: vty_out (vty, "%s", VTY_NEWLINE);
! 2023: }
! 2024:
! 2025: /* Show route summary. */
! 2026: DEFUN (show_ip_route_summary,
! 2027: show_ip_route_summary_cmd,
! 2028: "show ip route summary",
! 2029: SHOW_STR
! 2030: IP_STR
! 2031: "IP routing table\n"
! 2032: "Summary of all routes\n")
! 2033: {
! 2034: struct route_table *table;
! 2035: vrf_id_t vrf_id = VRF_DEFAULT;
! 2036:
! 2037: if (argc > 0)
! 2038: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[0]);
! 2039:
! 2040: table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
! 2041: if (! table)
! 2042: return CMD_SUCCESS;
! 2043:
! 2044: vty_show_ip_route_summary (vty, table);
! 2045:
! 2046: return CMD_SUCCESS;
! 2047: }
! 2048:
! 2049: ALIAS (show_ip_route_summary,
! 2050: show_ip_route_summary_vrf_cmd,
! 2051: "show ip route summary " VRF_CMD_STR,
! 2052: SHOW_STR
! 2053: IP_STR
! 2054: "IP routing table\n"
! 2055: "Summary of all routes\n"
! 2056: VRF_CMD_HELP_STR)
! 2057:
! 2058: /* Show route summary prefix. */
! 2059: DEFUN (show_ip_route_summary_prefix,
! 2060: show_ip_route_summary_prefix_cmd,
! 2061: "show ip route summary prefix",
! 2062: SHOW_STR
! 2063: IP_STR
! 2064: "IP routing table\n"
! 2065: "Summary of all routes\n"
! 2066: "Prefix routes\n")
! 2067: {
! 2068: struct route_table *table;
! 2069: vrf_id_t vrf_id = VRF_DEFAULT;
1.1 misho 2070:
1.1.1.4 ! misho 2071: if (argc > 0)
! 2072: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[0]);
1.1 misho 2073:
1.1.1.4 ! misho 2074: table = zebra_vrf_table (AFI_IP, SAFI_UNICAST, vrf_id);
! 2075: if (! table)
! 2076: return CMD_SUCCESS;
1.1 misho 2077:
1.1.1.4 ! misho 2078: vty_show_ip_route_summary_prefix (vty, table);
1.1 misho 2079:
1.1.1.4 ! misho 2080: return CMD_SUCCESS;
1.1 misho 2081: }
2082:
1.1.1.4 ! misho 2083: ALIAS (show_ip_route_summary_prefix,
! 2084: show_ip_route_summary_prefix_vrf_cmd,
! 2085: "show ip route summary prefix " VRF_CMD_STR,
1.1 misho 2086: SHOW_STR
2087: IP_STR
1.1.1.4 ! misho 2088: "IP routing table\n"
! 2089: "Summary of all routes\n"
! 2090: "Prefix routes\n"
! 2091: VRF_CMD_HELP_STR)
! 2092:
! 2093: DEFUN (show_ip_route_vrf_all,
! 2094: show_ip_route_vrf_all_cmd,
! 2095: "show ip route " VRF_ALL_CMD_STR,
! 2096: SHOW_STR
! 2097: IP_STR
! 2098: "IP routing table\n"
! 2099: VRF_ALL_CMD_HELP_STR)
1.1 misho 2100: {
2101: struct route_table *table;
2102: struct route_node *rn;
2103: struct rib *rib;
1.1.1.4 ! misho 2104: struct zebra_vrf *zvrf;
! 2105: vrf_iter_t iter;
1.1 misho 2106: int first = 1;
2107:
1.1.1.4 ! misho 2108: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 2109: {
! 2110: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 2111: (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
! 2112: continue;
! 2113:
! 2114: /* Show all IPv4 routes. */
! 2115: for (rn = route_top (table); rn; rn = route_next (rn))
! 2116: RNODE_FOREACH_RIB (rn, rib)
! 2117: {
! 2118: if (first)
! 2119: {
! 2120: vty_out (vty, SHOW_ROUTE_V4_HEADER);
! 2121: first = 0;
! 2122: }
! 2123: vty_show_ip_route (vty, rn, rib);
! 2124: }
! 2125: }
1.1 misho 2126:
2127: return CMD_SUCCESS;
2128: }
2129:
1.1.1.4 ! misho 2130: DEFUN (show_ip_route_prefix_longer_vrf_all,
! 2131: show_ip_route_prefix_longer_vrf_all_cmd,
! 2132: "show ip route A.B.C.D/M longer-prefixes " VRF_ALL_CMD_STR,
1.1 misho 2133: SHOW_STR
2134: IP_STR
2135: "IP routing table\n"
2136: "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
1.1.1.4 ! misho 2137: "Show route matching the specified Network/Mask pair only\n"
! 2138: VRF_ALL_CMD_HELP_STR)
1.1 misho 2139: {
2140: struct route_table *table;
2141: struct route_node *rn;
2142: struct rib *rib;
2143: struct prefix p;
1.1.1.4 ! misho 2144: struct zebra_vrf *zvrf;
! 2145: vrf_iter_t iter;
1.1 misho 2146: int ret;
2147: int first = 1;
2148:
2149: ret = str2prefix (argv[0], &p);
2150: if (! ret)
2151: {
2152: vty_out (vty, "%% Malformed Prefix%s", VTY_NEWLINE);
2153: return CMD_WARNING;
2154: }
2155:
1.1.1.4 ! misho 2156: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 2157: {
! 2158: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 2159: (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
! 2160: continue;
! 2161:
! 2162: /* Show matched type IPv4 routes. */
! 2163: for (rn = route_top (table); rn; rn = route_next (rn))
! 2164: RNODE_FOREACH_RIB (rn, rib)
! 2165: if (prefix_match (&p, &rn->p))
! 2166: {
! 2167: if (first)
! 2168: {
! 2169: vty_out (vty, SHOW_ROUTE_V4_HEADER);
! 2170: first = 0;
! 2171: }
! 2172: vty_show_ip_route (vty, rn, rib);
! 2173: }
! 2174: }
! 2175:
1.1 misho 2176: return CMD_SUCCESS;
2177: }
2178:
1.1.1.4 ! misho 2179: DEFUN (show_ip_route_supernets_vrf_all,
! 2180: show_ip_route_supernets_vrf_all_cmd,
! 2181: "show ip route supernets-only " VRF_ALL_CMD_STR,
1.1 misho 2182: SHOW_STR
2183: IP_STR
2184: "IP routing table\n"
1.1.1.4 ! misho 2185: "Show supernet entries only\n"
! 2186: VRF_ALL_CMD_HELP_STR)
1.1 misho 2187: {
2188: struct route_table *table;
2189: struct route_node *rn;
2190: struct rib *rib;
1.1.1.4 ! misho 2191: struct zebra_vrf *zvrf;
! 2192: vrf_iter_t iter;
! 2193: u_int32_t addr;
1.1 misho 2194: int first = 1;
2195:
1.1.1.4 ! misho 2196: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 2197: {
! 2198: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 2199: (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
! 2200: continue;
! 2201:
! 2202: /* Show matched type IPv4 routes. */
! 2203: for (rn = route_top (table); rn; rn = route_next (rn))
! 2204: RNODE_FOREACH_RIB (rn, rib)
! 2205: {
! 2206: addr = ntohl (rn->p.u.prefix4.s_addr);
1.1 misho 2207:
1.1.1.4 ! misho 2208: if ((IN_CLASSC (addr) && rn->p.prefixlen < 24)
! 2209: || (IN_CLASSB (addr) && rn->p.prefixlen < 16)
! 2210: || (IN_CLASSA (addr) && rn->p.prefixlen < 8))
! 2211: {
! 2212: if (first)
! 2213: {
! 2214: vty_out (vty, SHOW_ROUTE_V4_HEADER);
! 2215: first = 0;
! 2216: }
! 2217: vty_show_ip_route (vty, rn, rib);
! 2218: }
! 2219: }
! 2220: }
1.1 misho 2221:
2222: return CMD_SUCCESS;
2223: }
2224:
1.1.1.4 ! misho 2225: DEFUN (show_ip_route_protocol_vrf_all,
! 2226: show_ip_route_protocol_vrf_all_cmd,
! 2227: "show ip route " QUAGGA_IP_REDIST_STR_ZEBRA " " VRF_ALL_CMD_STR,
1.1 misho 2228: SHOW_STR
2229: IP_STR
2230: "IP routing table\n"
1.1.1.4 ! misho 2231: QUAGGA_IP_REDIST_HELP_STR_ZEBRA
! 2232: VRF_ALL_CMD_HELP_STR)
1.1 misho 2233: {
2234: int type;
2235: struct route_table *table;
2236: struct route_node *rn;
2237: struct rib *rib;
1.1.1.4 ! misho 2238: struct zebra_vrf *zvrf;
! 2239: vrf_iter_t iter;
1.1 misho 2240: int first = 1;
2241:
1.1.1.2 misho 2242: type = proto_redistnum (AFI_IP, argv[0]);
2243: if (type < 0)
1.1 misho 2244: {
2245: vty_out (vty, "Unknown route type%s", VTY_NEWLINE);
2246: return CMD_WARNING;
2247: }
2248:
1.1.1.4 ! misho 2249: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 2250: {
! 2251: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 2252: (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
! 2253: continue;
! 2254:
! 2255: /* Show matched type IPv4 routes. */
! 2256: for (rn = route_top (table); rn; rn = route_next (rn))
! 2257: RNODE_FOREACH_RIB (rn, rib)
! 2258: if (rib->type == type)
! 2259: {
! 2260: if (first)
! 2261: {
! 2262: vty_out (vty, SHOW_ROUTE_V4_HEADER);
! 2263: first = 0;
! 2264: }
! 2265: vty_show_ip_route (vty, rn, rib);
! 2266: }
! 2267: }
! 2268:
1.1 misho 2269: return CMD_SUCCESS;
2270: }
2271:
1.1.1.4 ! misho 2272: DEFUN (show_ip_route_addr_vrf_all,
! 2273: show_ip_route_addr_vrf_all_cmd,
! 2274: "show ip route A.B.C.D " VRF_ALL_CMD_STR,
1.1 misho 2275: SHOW_STR
2276: IP_STR
2277: "IP routing table\n"
1.1.1.4 ! misho 2278: "Network in the IP routing table to display\n"
! 2279: VRF_ALL_CMD_HELP_STR)
1.1 misho 2280: {
2281: int ret;
2282: struct prefix_ipv4 p;
2283: struct route_table *table;
2284: struct route_node *rn;
1.1.1.4 ! misho 2285: struct zebra_vrf *zvrf;
! 2286: vrf_iter_t iter;
1.1 misho 2287:
2288: ret = str2prefix_ipv4 (argv[0], &p);
2289: if (ret <= 0)
2290: {
2291: vty_out (vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
2292: return CMD_WARNING;
2293: }
2294:
1.1.1.4 ! misho 2295: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
1.1 misho 2296: {
1.1.1.4 ! misho 2297: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 2298: (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
! 2299: continue;
1.1 misho 2300:
1.1.1.4 ! misho 2301: rn = route_node_match (table, (struct prefix *) &p);
! 2302: if (! rn)
! 2303: continue;
1.1 misho 2304:
1.1.1.4 ! misho 2305: vty_show_ip_route_detail (vty, rn, 0);
! 2306:
! 2307: route_unlock_node (rn);
! 2308: }
1.1 misho 2309:
2310: return CMD_SUCCESS;
2311: }
2312:
1.1.1.4 ! misho 2313: DEFUN (show_ip_route_prefix_vrf_all,
! 2314: show_ip_route_prefix_vrf_all_cmd,
! 2315: "show ip route A.B.C.D/M " VRF_ALL_CMD_STR,
1.1 misho 2316: SHOW_STR
2317: IP_STR
2318: "IP routing table\n"
1.1.1.4 ! misho 2319: "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
! 2320: VRF_ALL_CMD_HELP_STR)
1.1 misho 2321: {
2322: int ret;
2323: struct prefix_ipv4 p;
2324: struct route_table *table;
2325: struct route_node *rn;
1.1.1.4 ! misho 2326: struct zebra_vrf *zvrf;
! 2327: vrf_iter_t iter;
1.1 misho 2328:
2329: ret = str2prefix_ipv4 (argv[0], &p);
2330: if (ret <= 0)
2331: {
2332: vty_out (vty, "%% Malformed IPv4 address%s", VTY_NEWLINE);
2333: return CMD_WARNING;
2334: }
2335:
1.1.1.4 ! misho 2336: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
1.1 misho 2337: {
1.1.1.4 ! misho 2338: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 2339: (table = zvrf->table[AFI_IP][SAFI_UNICAST]) == NULL)
! 2340: continue;
! 2341:
! 2342: rn = route_node_match (table, (struct prefix *) &p);
! 2343: if (! rn)
! 2344: continue;
! 2345: if (rn->p.prefixlen != p.prefixlen)
! 2346: {
! 2347: route_unlock_node (rn);
! 2348: continue;
! 2349: }
1.1 misho 2350:
1.1.1.4 ! misho 2351: vty_show_ip_route_detail (vty, rn, 0);
1.1 misho 2352:
1.1.1.4 ! misho 2353: route_unlock_node (rn);
! 2354: }
1.1 misho 2355:
2356: return CMD_SUCCESS;
2357: }
2358:
1.1.1.4 ! misho 2359: DEFUN (show_ip_route_summary_vrf_all,
! 2360: show_ip_route_summary_vrf_all_cmd,
! 2361: "show ip route summary " VRF_ALL_CMD_STR,
! 2362: SHOW_STR
! 2363: IP_STR
! 2364: "IP routing table\n"
! 2365: "Summary of all routes\n"
! 2366: VRF_ALL_CMD_HELP_STR)
1.1 misho 2367: {
1.1.1.4 ! misho 2368: struct zebra_vrf *zvrf;
! 2369: vrf_iter_t iter;
1.1 misho 2370:
1.1.1.4 ! misho 2371: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 2372: if ((zvrf = vrf_iter2info (iter)) != NULL)
! 2373: vty_show_ip_route_summary (vty, zvrf->table[AFI_IP][SAFI_UNICAST]);
1.1 misho 2374:
1.1.1.4 ! misho 2375: return CMD_SUCCESS;
1.1 misho 2376: }
2377:
1.1.1.4 ! misho 2378: DEFUN (show_ip_route_summary_prefix_vrf_all,
! 2379: show_ip_route_summary_prefix_vrf_all_cmd,
! 2380: "show ip route summary prefix " VRF_ALL_CMD_STR,
1.1 misho 2381: SHOW_STR
2382: IP_STR
2383: "IP routing table\n"
1.1.1.4 ! misho 2384: "Summary of all routes\n"
! 2385: "Prefix routes\n"
! 2386: VRF_ALL_CMD_HELP_STR)
! 2387: {
! 2388: struct zebra_vrf *zvrf;
! 2389: vrf_iter_t iter;
! 2390:
! 2391: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 2392: if ((zvrf = vrf_iter2info (iter)) != NULL)
! 2393: vty_show_ip_route_summary_prefix (vty, zvrf->table[AFI_IP][SAFI_UNICAST]);
1.1 misho 2394:
2395: return CMD_SUCCESS;
2396: }
2397:
2398: /* Write IPv4 static route configuration. */
2399: static int
1.1.1.4 ! misho 2400: static_config_ipv4 (struct vty *vty, safi_t safi, const char *cmd)
1.1 misho 2401: {
2402: struct route_node *rn;
1.1.1.4 ! misho 2403: struct static_route *si;
1.1 misho 2404: struct route_table *stable;
1.1.1.4 ! misho 2405: struct zebra_vrf *zvrf;
! 2406: vrf_iter_t iter;
1.1 misho 2407: int write;
2408:
2409: write = 0;
2410:
1.1.1.4 ! misho 2411: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 2412: {
! 2413: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 2414: (stable = zvrf->stable[AFI_IP][safi]) == NULL)
! 2415: continue;
1.1 misho 2416:
1.1.1.4 ! misho 2417: for (rn = route_top (stable); rn; rn = route_next (rn))
! 2418: for (si = rn->info; si; si = si->next)
1.1 misho 2419: {
1.1.1.4 ! misho 2420: vty_out (vty, "%s %s/%d", cmd, inet_ntoa (rn->p.u.prefix4),
! 2421: rn->p.prefixlen);
1.1 misho 2422:
1.1.1.4 ! misho 2423: switch (si->type)
! 2424: {
! 2425: case STATIC_IPV4_GATEWAY:
! 2426: vty_out (vty, " %s", inet_ntoa (si->addr.ipv4));
! 2427: break;
! 2428: case STATIC_IPV4_IFNAME:
! 2429: vty_out (vty, " %s", si->ifname);
! 2430: break;
! 2431: case STATIC_IPV4_BLACKHOLE:
! 2432: vty_out (vty, " Null0");
! 2433: break;
! 2434: }
! 2435:
! 2436: /* flags are incompatible with STATIC_IPV4_BLACKHOLE */
! 2437: if (si->type != STATIC_IPV4_BLACKHOLE)
! 2438: {
! 2439: if (CHECK_FLAG(si->flags, ZEBRA_FLAG_REJECT))
! 2440: vty_out (vty, " %s", "reject");
! 2441:
! 2442: if (CHECK_FLAG(si->flags, ZEBRA_FLAG_BLACKHOLE))
! 2443: vty_out (vty, " %s", "blackhole");
! 2444: }
! 2445:
! 2446: if (si->distance != ZEBRA_STATIC_DISTANCE_DEFAULT)
! 2447: vty_out (vty, " %d", si->distance);
1.1 misho 2448:
1.1.1.4 ! misho 2449: if (si->vrf_id != VRF_DEFAULT)
! 2450: vty_out (vty, " vrf %u", si->vrf_id);
1.1 misho 2451:
1.1.1.4 ! misho 2452: vty_out (vty, "%s", VTY_NEWLINE);
1.1 misho 2453:
1.1.1.4 ! misho 2454: write = 1;
! 2455: }
! 2456: }
1.1 misho 2457: return write;
2458: }
2459:
2460: DEFUN (show_ip_protocol,
2461: show_ip_protocol_cmd,
2462: "show ip protocol",
2463: SHOW_STR
2464: IP_STR
2465: "IP protocol filtering status\n")
2466: {
2467: int i;
2468:
2469: vty_out(vty, "Protocol : route-map %s", VTY_NEWLINE);
2470: vty_out(vty, "------------------------%s", VTY_NEWLINE);
2471: for (i=0;i<ZEBRA_ROUTE_MAX;i++)
2472: {
2473: if (proto_rm[AFI_IP][i])
2474: vty_out (vty, "%-10s : %-10s%s", zebra_route_string(i),
2475: proto_rm[AFI_IP][i],
2476: VTY_NEWLINE);
2477: else
2478: vty_out (vty, "%-10s : none%s", zebra_route_string(i), VTY_NEWLINE);
2479: }
2480: if (proto_rm[AFI_IP][i])
2481: vty_out (vty, "%-10s : %-10s%s", "any", proto_rm[AFI_IP][i],
2482: VTY_NEWLINE);
2483: else
2484: vty_out (vty, "%-10s : none%s", "any", VTY_NEWLINE);
2485:
2486: return CMD_SUCCESS;
2487: }
2488:
2489: #ifdef HAVE_IPV6
2490: /* General fucntion for IPv6 static route. */
2491: static int
2492: static_ipv6_func (struct vty *vty, int add_cmd, const char *dest_str,
2493: const char *gate_str, const char *ifname,
1.1.1.4 ! misho 2494: const char *flag_str, const char *distance_str,
! 2495: const char *vrf_id_str)
1.1 misho 2496: {
2497: int ret;
2498: u_char distance;
2499: struct prefix p;
2500: struct in6_addr *gate = NULL;
2501: struct in6_addr gate_addr;
2502: u_char type = 0;
1.1.1.4 ! misho 2503: vrf_id_t vrf_id = VRF_DEFAULT;
1.1 misho 2504: u_char flag = 0;
2505:
2506: ret = str2prefix (dest_str, &p);
2507: if (ret <= 0)
2508: {
2509: vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
2510: return CMD_WARNING;
2511: }
2512:
2513: /* Apply mask for given prefix. */
2514: apply_mask (&p);
2515:
2516: /* Route flags */
2517: if (flag_str) {
2518: switch(flag_str[0]) {
2519: case 'r':
2520: case 'R': /* XXX */
2521: SET_FLAG (flag, ZEBRA_FLAG_REJECT);
2522: break;
2523: case 'b':
2524: case 'B': /* XXX */
2525: SET_FLAG (flag, ZEBRA_FLAG_BLACKHOLE);
2526: break;
2527: default:
2528: vty_out (vty, "%% Malformed flag %s %s", flag_str, VTY_NEWLINE);
2529: return CMD_WARNING;
2530: }
2531: }
2532:
2533: /* Administrative distance. */
2534: if (distance_str)
2535: distance = atoi (distance_str);
2536: else
2537: distance = ZEBRA_STATIC_DISTANCE_DEFAULT;
2538:
2539: /* When gateway is valid IPv6 addrees, then gate is treated as
2540: nexthop address other case gate is treated as interface name. */
2541: ret = inet_pton (AF_INET6, gate_str, &gate_addr);
2542:
2543: if (ifname)
2544: {
2545: /* When ifname is specified. It must be come with gateway
2546: address. */
2547: if (ret != 1)
2548: {
2549: vty_out (vty, "%% Malformed address%s", VTY_NEWLINE);
2550: return CMD_WARNING;
2551: }
2552: type = STATIC_IPV6_GATEWAY_IFNAME;
2553: gate = &gate_addr;
2554: }
2555: else
2556: {
2557: if (ret == 1)
2558: {
2559: type = STATIC_IPV6_GATEWAY;
2560: gate = &gate_addr;
2561: }
2562: else
2563: {
2564: type = STATIC_IPV6_IFNAME;
2565: ifname = gate_str;
2566: }
2567: }
2568:
1.1.1.4 ! misho 2569: /* VRF id */
! 2570: if (vrf_id_str)
! 2571: VTY_GET_INTEGER ("VRF ID", vrf_id, vrf_id_str);
! 2572:
1.1 misho 2573: if (add_cmd)
1.1.1.4 ! misho 2574: static_add_ipv6 (&p, type, gate, ifname, flag, distance, vrf_id);
1.1 misho 2575: else
1.1.1.4 ! misho 2576: static_delete_ipv6 (&p, type, gate, ifname, distance, vrf_id);
1.1 misho 2577:
2578: return CMD_SUCCESS;
2579: }
2580:
2581: DEFUN (ipv6_route,
2582: ipv6_route_cmd,
2583: "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE)",
2584: IP_STR
2585: "Establish static routes\n"
2586: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2587: "IPv6 gateway address\n"
2588: "IPv6 gateway interface name\n")
2589: {
1.1.1.4 ! misho 2590: return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, NULL,
! 2591: NULL);
1.1 misho 2592: }
2593:
2594: DEFUN (ipv6_route_flags,
2595: ipv6_route_flags_cmd,
2596: "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole)",
2597: IP_STR
2598: "Establish static routes\n"
2599: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2600: "IPv6 gateway address\n"
2601: "IPv6 gateway interface name\n"
2602: "Emit an ICMP unreachable when matched\n"
2603: "Silently discard pkts when matched\n")
2604: {
1.1.1.4 ! misho 2605: return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], NULL,
! 2606: NULL);
1.1 misho 2607: }
2608:
2609: DEFUN (ipv6_route_ifname,
2610: ipv6_route_ifname_cmd,
2611: "ipv6 route X:X::X:X/M X:X::X:X INTERFACE",
2612: IP_STR
2613: "Establish static routes\n"
2614: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2615: "IPv6 gateway address\n"
2616: "IPv6 gateway interface name\n")
2617: {
1.1.1.4 ! misho 2618: return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, NULL,
! 2619: NULL);
1.1 misho 2620: }
2621:
2622: DEFUN (ipv6_route_ifname_flags,
2623: ipv6_route_ifname_flags_cmd,
2624: "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole)",
2625: IP_STR
2626: "Establish static routes\n"
2627: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2628: "IPv6 gateway address\n"
2629: "IPv6 gateway interface name\n"
2630: "Emit an ICMP unreachable when matched\n"
2631: "Silently discard pkts when matched\n")
2632: {
1.1.1.4 ! misho 2633: return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], NULL,
! 2634: NULL);
1.1 misho 2635: }
2636:
2637: DEFUN (ipv6_route_pref,
2638: ipv6_route_pref_cmd,
2639: "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) <1-255>",
2640: IP_STR
2641: "Establish static routes\n"
2642: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2643: "IPv6 gateway address\n"
2644: "IPv6 gateway interface name\n"
2645: "Distance value for this prefix\n")
2646: {
1.1.1.4 ! misho 2647: return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, argv[2],
! 2648: NULL);
1.1 misho 2649: }
2650:
2651: DEFUN (ipv6_route_flags_pref,
2652: ipv6_route_flags_pref_cmd,
2653: "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) <1-255>",
2654: IP_STR
2655: "Establish static routes\n"
2656: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2657: "IPv6 gateway address\n"
2658: "IPv6 gateway interface name\n"
2659: "Emit an ICMP unreachable when matched\n"
2660: "Silently discard pkts when matched\n"
2661: "Distance value for this prefix\n")
2662: {
1.1.1.4 ! misho 2663: return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], argv[3],
! 2664: NULL);
1.1 misho 2665: }
2666:
2667: DEFUN (ipv6_route_ifname_pref,
2668: ipv6_route_ifname_pref_cmd,
2669: "ipv6 route X:X::X:X/M X:X::X:X INTERFACE <1-255>",
2670: IP_STR
2671: "Establish static routes\n"
2672: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2673: "IPv6 gateway address\n"
2674: "IPv6 gateway interface name\n"
2675: "Distance value for this prefix\n")
2676: {
1.1.1.4 ! misho 2677: return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, argv[3],
! 2678: NULL);
1.1 misho 2679: }
2680:
2681: DEFUN (ipv6_route_ifname_flags_pref,
2682: ipv6_route_ifname_flags_pref_cmd,
2683: "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) <1-255>",
2684: IP_STR
2685: "Establish static routes\n"
2686: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2687: "IPv6 gateway address\n"
2688: "IPv6 gateway interface name\n"
2689: "Emit an ICMP unreachable when matched\n"
2690: "Silently discard pkts when matched\n"
2691: "Distance value for this prefix\n")
2692: {
1.1.1.4 ! misho 2693: return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], argv[4],
! 2694: NULL);
1.1 misho 2695: }
2696:
2697: DEFUN (no_ipv6_route,
2698: no_ipv6_route_cmd,
2699: "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE)",
2700: NO_STR
2701: IP_STR
2702: "Establish static routes\n"
2703: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2704: "IPv6 gateway address\n"
2705: "IPv6 gateway interface name\n")
2706: {
1.1.1.4 ! misho 2707: return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, NULL,
! 2708: NULL);
1.1 misho 2709: }
2710:
2711: ALIAS (no_ipv6_route,
2712: no_ipv6_route_flags_cmd,
2713: "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole)",
2714: NO_STR
2715: IP_STR
2716: "Establish static routes\n"
2717: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2718: "IPv6 gateway address\n"
2719: "IPv6 gateway interface name\n"
2720: "Emit an ICMP unreachable when matched\n"
2721: "Silently discard pkts when matched\n")
2722:
2723: DEFUN (no_ipv6_route_ifname,
2724: no_ipv6_route_ifname_cmd,
2725: "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE",
2726: NO_STR
2727: IP_STR
2728: "Establish static routes\n"
2729: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2730: "IPv6 gateway address\n"
2731: "IPv6 gateway interface name\n")
2732: {
1.1.1.4 ! misho 2733: return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, NULL,
! 2734: NULL);
1.1 misho 2735: }
2736:
2737: ALIAS (no_ipv6_route_ifname,
2738: no_ipv6_route_ifname_flags_cmd,
2739: "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole)",
2740: NO_STR
2741: IP_STR
2742: "Establish static routes\n"
2743: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2744: "IPv6 gateway address\n"
2745: "IPv6 gateway interface name\n"
2746: "Emit an ICMP unreachable when matched\n"
2747: "Silently discard pkts when matched\n")
2748:
2749: DEFUN (no_ipv6_route_pref,
2750: no_ipv6_route_pref_cmd,
2751: "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) <1-255>",
2752: NO_STR
2753: IP_STR
2754: "Establish static routes\n"
2755: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2756: "IPv6 gateway address\n"
2757: "IPv6 gateway interface name\n"
2758: "Distance value for this prefix\n")
2759: {
1.1.1.4 ! misho 2760: return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, argv[2],
! 2761: NULL);
1.1 misho 2762: }
2763:
2764: DEFUN (no_ipv6_route_flags_pref,
2765: no_ipv6_route_flags_pref_cmd,
2766: "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) <1-255>",
2767: NO_STR
2768: IP_STR
2769: "Establish static routes\n"
2770: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2771: "IPv6 gateway address\n"
2772: "IPv6 gateway interface name\n"
2773: "Emit an ICMP unreachable when matched\n"
2774: "Silently discard pkts when matched\n"
2775: "Distance value for this prefix\n")
2776: {
2777: /* We do not care about argv[2] */
1.1.1.4 ! misho 2778: return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, argv[2], argv[3],
! 2779: NULL);
1.1 misho 2780: }
2781:
2782: DEFUN (no_ipv6_route_ifname_pref,
2783: no_ipv6_route_ifname_pref_cmd,
2784: "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <1-255>",
2785: NO_STR
2786: IP_STR
2787: "Establish static routes\n"
2788: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2789: "IPv6 gateway address\n"
2790: "IPv6 gateway interface name\n"
2791: "Distance value for this prefix\n")
2792: {
1.1.1.4 ! misho 2793: return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, argv[3],
! 2794: NULL);
1.1 misho 2795: }
2796:
2797: DEFUN (no_ipv6_route_ifname_flags_pref,
2798: no_ipv6_route_ifname_flags_pref_cmd,
2799: "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) <1-255>",
2800: NO_STR
2801: IP_STR
2802: "Establish static routes\n"
2803: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
2804: "IPv6 gateway address\n"
2805: "IPv6 gateway interface name\n"
2806: "Emit an ICMP unreachable when matched\n"
2807: "Silently discard pkts when matched\n"
2808: "Distance value for this prefix\n")
2809: {
1.1.1.4 ! misho 2810: return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], argv[3], argv[4],
! 2811: NULL);
1.1 misho 2812: }
2813:
1.1.1.4 ! misho 2814: DEFUN (ipv6_route_vrf,
! 2815: ipv6_route_vrf_cmd,
! 2816: "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) " VRF_CMD_STR,
! 2817: IP_STR
! 2818: "Establish static routes\n"
! 2819: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 2820: "IPv6 gateway address\n"
! 2821: "IPv6 gateway interface name\n"
! 2822: VRF_CMD_HELP_STR)
1.1 misho 2823: {
1.1.1.4 ! misho 2824: return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, NULL,
! 2825: argv[2]);
! 2826: }
1.1 misho 2827:
1.1.1.4 ! misho 2828: DEFUN (ipv6_route_flags_vrf,
! 2829: ipv6_route_flags_vrf_cmd,
! 2830: "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) " VRF_CMD_STR,
! 2831: IP_STR
! 2832: "Establish static routes\n"
! 2833: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 2834: "IPv6 gateway address\n"
! 2835: "IPv6 gateway interface name\n"
! 2836: "Emit an ICMP unreachable when matched\n"
! 2837: "Silently discard pkts when matched\n"
! 2838: VRF_CMD_HELP_STR)
! 2839: {
! 2840: return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], NULL,
! 2841: argv[3]);
! 2842: }
1.1 misho 2843:
1.1.1.4 ! misho 2844: DEFUN (ipv6_route_ifname_vrf,
! 2845: ipv6_route_ifname_vrf_cmd,
! 2846: "ipv6 route X:X::X:X/M X:X::X:X INTERFACE " VRF_CMD_STR,
! 2847: IP_STR
! 2848: "Establish static routes\n"
! 2849: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 2850: "IPv6 gateway address\n"
! 2851: "IPv6 gateway interface name\n"
! 2852: VRF_CMD_HELP_STR)
! 2853: {
! 2854: return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, NULL,
! 2855: argv[3]);
! 2856: }
1.1 misho 2857:
1.1.1.4 ! misho 2858: DEFUN (ipv6_route_ifname_flags_vrf,
! 2859: ipv6_route_ifname_flags_vrf_cmd,
! 2860: "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) " VRF_CMD_STR,
! 2861: IP_STR
! 2862: "Establish static routes\n"
! 2863: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 2864: "IPv6 gateway address\n"
! 2865: "IPv6 gateway interface name\n"
! 2866: "Emit an ICMP unreachable when matched\n"
! 2867: "Silently discard pkts when matched\n"
! 2868: VRF_CMD_HELP_STR)
! 2869: {
! 2870: return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], NULL,
! 2871: argv[4]);
! 2872: }
1.1 misho 2873:
1.1.1.4 ! misho 2874: DEFUN (ipv6_route_pref_vrf,
! 2875: ipv6_route_pref_vrf_cmd,
! 2876: "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) <1-255> " VRF_CMD_STR,
! 2877: IP_STR
! 2878: "Establish static routes\n"
! 2879: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 2880: "IPv6 gateway address\n"
! 2881: "IPv6 gateway interface name\n"
! 2882: "Distance value for this prefix\n"
! 2883: VRF_CMD_HELP_STR)
! 2884: {
! 2885: return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, argv[2],
! 2886: argv[3]);
! 2887: }
1.1 misho 2888:
1.1.1.4 ! misho 2889: DEFUN (ipv6_route_flags_pref_vrf,
! 2890: ipv6_route_flags_pref_vrf_cmd,
! 2891: "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) <1-255> " VRF_CMD_STR,
! 2892: IP_STR
! 2893: "Establish static routes\n"
! 2894: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 2895: "IPv6 gateway address\n"
! 2896: "IPv6 gateway interface name\n"
! 2897: "Emit an ICMP unreachable when matched\n"
! 2898: "Silently discard pkts when matched\n"
! 2899: "Distance value for this prefix\n"
! 2900: VRF_CMD_HELP_STR)
! 2901: {
! 2902: return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], argv[3],
! 2903: argv[4]);
! 2904: }
1.1 misho 2905:
1.1.1.4 ! misho 2906: DEFUN (ipv6_route_ifname_pref_vrf,
! 2907: ipv6_route_ifname_pref_vrf_cmd,
! 2908: "ipv6 route X:X::X:X/M X:X::X:X INTERFACE <1-255> " VRF_CMD_STR,
! 2909: IP_STR
! 2910: "Establish static routes\n"
! 2911: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 2912: "IPv6 gateway address\n"
! 2913: "IPv6 gateway interface name\n"
! 2914: "Distance value for this prefix\n"
! 2915: VRF_CMD_HELP_STR)
! 2916: {
! 2917: return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, argv[3],
! 2918: argv[4]);
1.1 misho 2919: }
2920:
1.1.1.4 ! misho 2921: DEFUN (ipv6_route_ifname_flags_pref_vrf,
! 2922: ipv6_route_ifname_flags_pref_vrf_cmd,
! 2923: "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) <1-255> " VRF_CMD_STR,
! 2924: IP_STR
! 2925: "Establish static routes\n"
! 2926: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 2927: "IPv6 gateway address\n"
! 2928: "IPv6 gateway interface name\n"
! 2929: "Emit an ICMP unreachable when matched\n"
! 2930: "Silently discard pkts when matched\n"
! 2931: "Distance value for this prefix\n"
! 2932: VRF_CMD_HELP_STR)
1.1 misho 2933: {
1.1.1.4 ! misho 2934: return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], argv[4],
! 2935: argv[5]);
! 2936: }
1.1 misho 2937:
1.1.1.4 ! misho 2938: DEFUN (no_ipv6_route_vrf,
! 2939: no_ipv6_route_vrf_cmd,
! 2940: "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) " VRF_CMD_STR,
! 2941: NO_STR
! 2942: IP_STR
! 2943: "Establish static routes\n"
! 2944: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 2945: "IPv6 gateway address\n"
! 2946: "IPv6 gateway interface name\n"
! 2947: VRF_CMD_HELP_STR)
! 2948: {
! 2949: return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, NULL,
! 2950: (argc > 3) ? argv[3] : argv[2]);
! 2951: }
1.1 misho 2952:
1.1.1.4 ! misho 2953: ALIAS (no_ipv6_route_vrf,
! 2954: no_ipv6_route_flags_vrf_cmd,
! 2955: "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) " VRF_CMD_STR,
! 2956: NO_STR
! 2957: IP_STR
! 2958: "Establish static routes\n"
! 2959: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 2960: "IPv6 gateway address\n"
! 2961: "IPv6 gateway interface name\n"
! 2962: "Emit an ICMP unreachable when matched\n"
! 2963: "Silently discard pkts when matched\n"
! 2964: VRF_CMD_HELP_STR)
1.1 misho 2965:
1.1.1.4 ! misho 2966: DEFUN (no_ipv6_route_ifname_vrf,
! 2967: no_ipv6_route_ifname_vrf_cmd,
! 2968: "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE " VRF_CMD_STR,
! 2969: NO_STR
! 2970: IP_STR
! 2971: "Establish static routes\n"
! 2972: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 2973: "IPv6 gateway address\n"
! 2974: "IPv6 gateway interface name\n"
! 2975: VRF_CMD_HELP_STR)
! 2976: {
! 2977: return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, NULL,
! 2978: (argc > 4) ? argv[4] : argv[3]);
! 2979: }
1.1 misho 2980:
1.1.1.4 ! misho 2981: ALIAS (no_ipv6_route_ifname_vrf,
! 2982: no_ipv6_route_ifname_flags_vrf_cmd,
! 2983: "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) " VRF_CMD_STR,
! 2984: NO_STR
! 2985: IP_STR
! 2986: "Establish static routes\n"
! 2987: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 2988: "IPv6 gateway address\n"
! 2989: "IPv6 gateway interface name\n"
! 2990: "Emit an ICMP unreachable when matched\n"
! 2991: "Silently discard pkts when matched\n"
! 2992: VRF_CMD_HELP_STR)
1.1 misho 2993:
1.1.1.4 ! misho 2994: DEFUN (no_ipv6_route_pref_vrf,
! 2995: no_ipv6_route_pref_vrf_cmd,
! 2996: "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) <1-255> " VRF_CMD_STR,
! 2997: NO_STR
! 2998: IP_STR
! 2999: "Establish static routes\n"
! 3000: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 3001: "IPv6 gateway address\n"
! 3002: "IPv6 gateway interface name\n"
! 3003: "Distance value for this prefix\n"
! 3004: VRF_CMD_HELP_STR)
! 3005: {
! 3006: return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, argv[2],
! 3007: argv[3]);
! 3008: }
1.1 misho 3009:
1.1.1.4 ! misho 3010: DEFUN (no_ipv6_route_flags_pref_vrf,
! 3011: no_ipv6_route_flags_pref_vrf_cmd,
! 3012: "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) <1-255> " VRF_CMD_STR,
! 3013: NO_STR
! 3014: IP_STR
! 3015: "Establish static routes\n"
! 3016: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 3017: "IPv6 gateway address\n"
! 3018: "IPv6 gateway interface name\n"
! 3019: "Emit an ICMP unreachable when matched\n"
! 3020: "Silently discard pkts when matched\n"
! 3021: "Distance value for this prefix\n"
! 3022: VRF_CMD_HELP_STR)
! 3023: {
! 3024: /* We do not care about argv[2] */
! 3025: return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, argv[2], argv[3],
! 3026: argv[4]);
! 3027: }
1.1 misho 3028:
1.1.1.4 ! misho 3029: DEFUN (no_ipv6_route_ifname_pref_vrf,
! 3030: no_ipv6_route_ifname_pref_vrf_cmd,
! 3031: "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <1-255> " VRF_CMD_STR,
! 3032: NO_STR
! 3033: IP_STR
! 3034: "Establish static routes\n"
! 3035: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 3036: "IPv6 gateway address\n"
! 3037: "IPv6 gateway interface name\n"
! 3038: "Distance value for this prefix\n"
! 3039: VRF_CMD_HELP_STR)
! 3040: {
! 3041: return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, argv[3],
! 3042: argv[4]);
! 3043: }
1.1 misho 3044:
1.1.1.4 ! misho 3045: DEFUN (no_ipv6_route_ifname_flags_pref_vrf,
! 3046: no_ipv6_route_ifname_flags_pref_vrf_cmd,
! 3047: "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) <1-255> " VRF_CMD_STR,
! 3048: NO_STR
! 3049: IP_STR
! 3050: "Establish static routes\n"
! 3051: "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
! 3052: "IPv6 gateway address\n"
! 3053: "IPv6 gateway interface name\n"
! 3054: "Emit an ICMP unreachable when matched\n"
! 3055: "Silently discard pkts when matched\n"
! 3056: "Distance value for this prefix\n"
! 3057: VRF_CMD_HELP_STR)
! 3058: {
! 3059: return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], argv[3], argv[4],
! 3060: argv[5]);
1.1 misho 3061: }
3062:
3063: DEFUN (show_ipv6_route,
3064: show_ipv6_route_cmd,
3065: "show ipv6 route",
3066: SHOW_STR
3067: IP_STR
3068: "IPv6 routing table\n")
3069: {
3070: struct route_table *table;
3071: struct route_node *rn;
3072: struct rib *rib;
3073: int first = 1;
1.1.1.4 ! misho 3074: vrf_id_t vrf_id = VRF_DEFAULT;
1.1 misho 3075:
1.1.1.4 ! misho 3076: if (argc > 0)
! 3077: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[0]);
! 3078:
! 3079: table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
1.1 misho 3080: if (! table)
3081: return CMD_SUCCESS;
3082:
3083: /* Show all IPv6 route. */
3084: for (rn = route_top (table); rn; rn = route_next (rn))
1.1.1.3 misho 3085: RNODE_FOREACH_RIB (rn, rib)
1.1 misho 3086: {
3087: if (first)
3088: {
1.1.1.2 misho 3089: vty_out (vty, SHOW_ROUTE_V6_HEADER);
1.1 misho 3090: first = 0;
3091: }
1.1.1.4 ! misho 3092: vty_show_ip_route (vty, rn, rib);
1.1 misho 3093: }
3094: return CMD_SUCCESS;
3095: }
3096:
1.1.1.4 ! misho 3097: ALIAS (show_ipv6_route,
! 3098: show_ipv6_route_vrf_cmd,
! 3099: "show ipv6 route " VRF_CMD_STR,
! 3100: SHOW_STR
! 3101: IP_STR
! 3102: "IPv6 routing table\n"
! 3103: VRF_CMD_HELP_STR)
! 3104:
1.1 misho 3105: DEFUN (show_ipv6_route_prefix_longer,
3106: show_ipv6_route_prefix_longer_cmd,
3107: "show ipv6 route X:X::X:X/M longer-prefixes",
3108: SHOW_STR
3109: IP_STR
3110: "IPv6 routing table\n"
3111: "IPv6 prefix\n"
3112: "Show route matching the specified Network/Mask pair only\n")
3113: {
3114: struct route_table *table;
3115: struct route_node *rn;
3116: struct rib *rib;
3117: struct prefix p;
3118: int ret;
3119: int first = 1;
1.1.1.4 ! misho 3120: vrf_id_t vrf_id = VRF_DEFAULT;
1.1 misho 3121:
3122: ret = str2prefix (argv[0], &p);
3123: if (! ret)
3124: {
3125: vty_out (vty, "%% Malformed Prefix%s", VTY_NEWLINE);
3126: return CMD_WARNING;
3127: }
3128:
1.1.1.4 ! misho 3129: if (argc > 1)
! 3130: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[1]);
! 3131:
! 3132: table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
! 3133: if (! table)
! 3134: return CMD_SUCCESS;
! 3135:
1.1 misho 3136: /* Show matched type IPv6 routes. */
3137: for (rn = route_top (table); rn; rn = route_next (rn))
1.1.1.3 misho 3138: RNODE_FOREACH_RIB (rn, rib)
1.1 misho 3139: if (prefix_match (&p, &rn->p))
3140: {
3141: if (first)
3142: {
1.1.1.2 misho 3143: vty_out (vty, SHOW_ROUTE_V6_HEADER);
1.1 misho 3144: first = 0;
3145: }
1.1.1.4 ! misho 3146: vty_show_ip_route (vty, rn, rib);
1.1 misho 3147: }
3148: return CMD_SUCCESS;
3149: }
3150:
1.1.1.4 ! misho 3151: ALIAS (show_ipv6_route_prefix_longer,
! 3152: show_ipv6_route_prefix_longer_vrf_cmd,
! 3153: "show ipv6 route X:X::X:X/M longer-prefixes " VRF_CMD_STR,
! 3154: SHOW_STR
! 3155: IP_STR
! 3156: "IPv6 routing table\n"
! 3157: "IPv6 prefix\n"
! 3158: "Show route matching the specified Network/Mask pair only\n"
! 3159: VRF_CMD_HELP_STR)
! 3160:
1.1 misho 3161: DEFUN (show_ipv6_route_protocol,
3162: show_ipv6_route_protocol_cmd,
1.1.1.2 misho 3163: "show ipv6 route " QUAGGA_IP6_REDIST_STR_ZEBRA,
1.1 misho 3164: SHOW_STR
3165: IP_STR
3166: "IP routing table\n"
1.1.1.2 misho 3167: QUAGGA_IP6_REDIST_HELP_STR_ZEBRA)
1.1 misho 3168: {
3169: int type;
3170: struct route_table *table;
3171: struct route_node *rn;
3172: struct rib *rib;
3173: int first = 1;
1.1.1.4 ! misho 3174: vrf_id_t vrf_id = VRF_DEFAULT;
1.1 misho 3175:
1.1.1.2 misho 3176: type = proto_redistnum (AFI_IP6, argv[0]);
3177: if (type < 0)
1.1 misho 3178: {
3179: vty_out (vty, "Unknown route type%s", VTY_NEWLINE);
3180: return CMD_WARNING;
3181: }
1.1.1.4 ! misho 3182:
! 3183: if (argc > 1)
! 3184: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[1]);
! 3185:
! 3186: table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
1.1 misho 3187: if (! table)
3188: return CMD_SUCCESS;
3189:
3190: /* Show matched type IPv6 routes. */
3191: for (rn = route_top (table); rn; rn = route_next (rn))
1.1.1.3 misho 3192: RNODE_FOREACH_RIB (rn, rib)
1.1 misho 3193: if (rib->type == type)
3194: {
3195: if (first)
3196: {
1.1.1.2 misho 3197: vty_out (vty, SHOW_ROUTE_V6_HEADER);
1.1 misho 3198: first = 0;
3199: }
1.1.1.4 ! misho 3200: vty_show_ip_route (vty, rn, rib);
1.1 misho 3201: }
3202: return CMD_SUCCESS;
3203: }
3204:
1.1.1.4 ! misho 3205: ALIAS (show_ipv6_route_protocol,
! 3206: show_ipv6_route_protocol_vrf_cmd,
! 3207: "show ipv6 route " QUAGGA_IP6_REDIST_STR_ZEBRA " " VRF_CMD_STR,
! 3208: SHOW_STR
! 3209: IP_STR
! 3210: "IP routing table\n"
! 3211: QUAGGA_IP6_REDIST_HELP_STR_ZEBRA
! 3212: VRF_CMD_HELP_STR)
! 3213:
1.1 misho 3214: DEFUN (show_ipv6_route_addr,
3215: show_ipv6_route_addr_cmd,
3216: "show ipv6 route X:X::X:X",
3217: SHOW_STR
3218: IP_STR
3219: "IPv6 routing table\n"
3220: "IPv6 Address\n")
3221: {
3222: int ret;
3223: struct prefix_ipv6 p;
3224: struct route_table *table;
3225: struct route_node *rn;
1.1.1.4 ! misho 3226: vrf_id_t vrf_id = VRF_DEFAULT;
1.1 misho 3227:
3228: ret = str2prefix_ipv6 (argv[0], &p);
3229: if (ret <= 0)
3230: {
3231: vty_out (vty, "Malformed IPv6 address%s", VTY_NEWLINE);
3232: return CMD_WARNING;
3233: }
3234:
1.1.1.4 ! misho 3235: if (argc > 1)
! 3236: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[1]);
! 3237:
! 3238: table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
1.1 misho 3239: if (! table)
3240: return CMD_SUCCESS;
3241:
3242: rn = route_node_match (table, (struct prefix *) &p);
3243: if (! rn)
3244: {
3245: vty_out (vty, "%% Network not in table%s", VTY_NEWLINE);
3246: return CMD_WARNING;
3247: }
3248:
1.1.1.4 ! misho 3249: vty_show_ip_route_detail (vty, rn, 0);
1.1 misho 3250:
3251: route_unlock_node (rn);
3252:
3253: return CMD_SUCCESS;
3254: }
3255:
1.1.1.4 ! misho 3256: ALIAS (show_ipv6_route_addr,
! 3257: show_ipv6_route_addr_vrf_cmd,
! 3258: "show ipv6 route X:X::X:X " VRF_CMD_STR,
! 3259: SHOW_STR
! 3260: IP_STR
! 3261: "IPv6 routing table\n"
! 3262: "IPv6 Address\n"
! 3263: VRF_CMD_HELP_STR)
! 3264:
1.1 misho 3265: DEFUN (show_ipv6_route_prefix,
3266: show_ipv6_route_prefix_cmd,
3267: "show ipv6 route X:X::X:X/M",
3268: SHOW_STR
3269: IP_STR
3270: "IPv6 routing table\n"
3271: "IPv6 prefix\n")
3272: {
3273: int ret;
3274: struct prefix_ipv6 p;
3275: struct route_table *table;
3276: struct route_node *rn;
1.1.1.4 ! misho 3277: vrf_id_t vrf_id = VRF_DEFAULT;
1.1 misho 3278:
3279: ret = str2prefix_ipv6 (argv[0], &p);
3280: if (ret <= 0)
3281: {
3282: vty_out (vty, "Malformed IPv6 prefix%s", VTY_NEWLINE);
3283: return CMD_WARNING;
3284: }
3285:
1.1.1.4 ! misho 3286: if (argc > 1)
! 3287: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[1]);
! 3288:
! 3289: table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
1.1 misho 3290: if (! table)
3291: return CMD_SUCCESS;
3292:
3293: rn = route_node_match (table, (struct prefix *) &p);
3294: if (! rn || rn->p.prefixlen != p.prefixlen)
3295: {
3296: vty_out (vty, "%% Network not in table%s", VTY_NEWLINE);
1.1.1.4 ! misho 3297: if (rn)
! 3298: route_unlock_node (rn);
1.1 misho 3299: return CMD_WARNING;
3300: }
3301:
1.1.1.4 ! misho 3302: vty_show_ip_route_detail (vty, rn, 0);
1.1 misho 3303:
3304: route_unlock_node (rn);
3305:
3306: return CMD_SUCCESS;
3307: }
3308:
1.1.1.4 ! misho 3309: ALIAS (show_ipv6_route_prefix,
! 3310: show_ipv6_route_prefix_vrf_cmd,
! 3311: "show ipv6 route X:X::X:X/M " VRF_CMD_STR,
! 3312: SHOW_STR
! 3313: IP_STR
! 3314: "IPv6 routing table\n"
! 3315: "IPv6 prefix\n"
! 3316: VRF_CMD_HELP_STR)
! 3317:
1.1 misho 3318: /* Show route summary. */
3319: DEFUN (show_ipv6_route_summary,
3320: show_ipv6_route_summary_cmd,
3321: "show ipv6 route summary",
3322: SHOW_STR
3323: IP_STR
3324: "IPv6 routing table\n"
3325: "Summary of all IPv6 routes\n")
3326: {
3327: struct route_table *table;
1.1.1.4 ! misho 3328: vrf_id_t vrf_id = VRF_DEFAULT;
1.1 misho 3329:
1.1.1.4 ! misho 3330: if (argc > 0)
! 3331: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[0]);
! 3332:
! 3333: table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
1.1 misho 3334: if (! table)
3335: return CMD_SUCCESS;
3336:
3337: vty_show_ip_route_summary (vty, table);
3338:
3339: return CMD_SUCCESS;
3340: }
3341:
1.1.1.4 ! misho 3342: ALIAS (show_ipv6_route_summary,
! 3343: show_ipv6_route_summary_vrf_cmd,
! 3344: "show ipv6 route summary " VRF_CMD_STR,
! 3345: SHOW_STR
! 3346: IP_STR
! 3347: "IPv6 routing table\n"
! 3348: "Summary of all IPv6 routes\n"
! 3349: VRF_CMD_HELP_STR)
! 3350:
! 3351: /* Show ipv6 route summary prefix. */
! 3352: DEFUN (show_ipv6_route_summary_prefix,
! 3353: show_ipv6_route_summary_prefix_cmd,
! 3354: "show ipv6 route summary prefix",
! 3355: SHOW_STR
! 3356: IP_STR
! 3357: "IPv6 routing table\n"
! 3358: "Summary of all IPv6 routes\n"
! 3359: "Prefix routes\n")
! 3360: {
! 3361: struct route_table *table;
! 3362: vrf_id_t vrf_id = VRF_DEFAULT;
! 3363:
! 3364: if (argc > 0)
! 3365: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[0]);
! 3366:
! 3367: table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
! 3368: if (! table)
! 3369: return CMD_SUCCESS;
! 3370:
! 3371: vty_show_ip_route_summary_prefix (vty, table);
! 3372:
! 3373: return CMD_SUCCESS;
! 3374: }
! 3375:
! 3376: ALIAS (show_ipv6_route_summary_prefix,
! 3377: show_ipv6_route_summary_prefix_vrf_cmd,
! 3378: "show ipv6 route summary prefix " VRF_CMD_STR,
! 3379: SHOW_STR
! 3380: IP_STR
! 3381: "IPv6 routing table\n"
! 3382: "Summary of all IPv6 routes\n"
! 3383: "Prefix routes\n"
! 3384: VRF_CMD_HELP_STR)
! 3385:
1.1.1.2 misho 3386: /*
3387: * Show IPv6 mroute command.Used to dump
3388: * the Multicast routing table.
3389: */
3390:
3391: DEFUN (show_ipv6_mroute,
3392: show_ipv6_mroute_cmd,
3393: "show ipv6 mroute",
3394: SHOW_STR
3395: IP_STR
3396: "IPv6 Multicast routing table\n")
3397: {
3398: struct route_table *table;
3399: struct route_node *rn;
3400: struct rib *rib;
3401: int first = 1;
1.1.1.4 ! misho 3402: vrf_id_t vrf_id = VRF_DEFAULT;
! 3403:
! 3404: if (argc > 0)
! 3405: VTY_GET_INTEGER ("VRF ID", vrf_id, argv[0]);
1.1.1.2 misho 3406:
1.1.1.4 ! misho 3407: table = zebra_vrf_table (AFI_IP6, SAFI_MULTICAST, vrf_id);
1.1.1.2 misho 3408: if (! table)
3409: return CMD_SUCCESS;
3410:
3411: /* Show all IPv6 route. */
3412: for (rn = route_top (table); rn; rn = route_next (rn))
1.1.1.3 misho 3413: RNODE_FOREACH_RIB (rn, rib)
1.1.1.2 misho 3414: {
3415: if (first)
3416: {
3417: vty_out (vty, SHOW_ROUTE_V6_HEADER);
3418: first = 0;
3419: }
1.1.1.4 ! misho 3420: vty_show_ip_route (vty, rn, rib);
1.1.1.2 misho 3421: }
3422: return CMD_SUCCESS;
3423: }
3424:
1.1.1.4 ! misho 3425: ALIAS (show_ipv6_mroute,
! 3426: show_ipv6_mroute_vrf_cmd,
! 3427: "show ipv6 mroute " VRF_CMD_STR,
! 3428: SHOW_STR
! 3429: IP_STR
! 3430: "IPv6 Multicast routing table\n"
! 3431: VRF_CMD_HELP_STR)
! 3432:
! 3433: DEFUN (show_ipv6_route_vrf_all,
! 3434: show_ipv6_route_vrf_all_cmd,
! 3435: "show ipv6 route " VRF_ALL_CMD_STR,
! 3436: SHOW_STR
! 3437: IP_STR
! 3438: "IPv6 routing table\n"
! 3439: VRF_ALL_CMD_HELP_STR)
! 3440: {
! 3441: struct route_table *table;
! 3442: struct route_node *rn;
! 3443: struct rib *rib;
! 3444: struct zebra_vrf *zvrf;
! 3445: vrf_iter_t iter;
! 3446: int first = 1;
! 3447:
! 3448: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 3449: {
! 3450: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 3451: (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
! 3452: continue;
! 3453:
! 3454: /* Show all IPv6 route. */
! 3455: for (rn = route_top (table); rn; rn = route_next (rn))
! 3456: RNODE_FOREACH_RIB (rn, rib)
! 3457: {
! 3458: if (first)
! 3459: {
! 3460: vty_out (vty, SHOW_ROUTE_V6_HEADER);
! 3461: first = 0;
! 3462: }
! 3463: vty_show_ip_route (vty, rn, rib);
! 3464: }
! 3465: }
! 3466:
! 3467: return CMD_SUCCESS;
! 3468: }
! 3469:
! 3470: DEFUN (show_ipv6_route_prefix_longer_vrf_all,
! 3471: show_ipv6_route_prefix_longer_vrf_all_cmd,
! 3472: "show ipv6 route X:X::X:X/M longer-prefixes " VRF_ALL_CMD_STR,
! 3473: SHOW_STR
! 3474: IP_STR
! 3475: "IPv6 routing table\n"
! 3476: "IPv6 prefix\n"
! 3477: "Show route matching the specified Network/Mask pair only\n"
! 3478: VRF_ALL_CMD_HELP_STR)
! 3479: {
! 3480: struct route_table *table;
! 3481: struct route_node *rn;
! 3482: struct rib *rib;
! 3483: struct prefix p;
! 3484: struct zebra_vrf *zvrf;
! 3485: vrf_iter_t iter;
! 3486: int ret;
! 3487: int first = 1;
! 3488:
! 3489: ret = str2prefix (argv[0], &p);
! 3490: if (! ret)
! 3491: {
! 3492: vty_out (vty, "%% Malformed Prefix%s", VTY_NEWLINE);
! 3493: return CMD_WARNING;
! 3494: }
! 3495:
! 3496: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 3497: {
! 3498: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 3499: (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
! 3500: continue;
! 3501:
! 3502: /* Show matched type IPv6 routes. */
! 3503: for (rn = route_top (table); rn; rn = route_next (rn))
! 3504: RNODE_FOREACH_RIB (rn, rib)
! 3505: if (prefix_match (&p, &rn->p))
! 3506: {
! 3507: if (first)
! 3508: {
! 3509: vty_out (vty, SHOW_ROUTE_V6_HEADER);
! 3510: first = 0;
! 3511: }
! 3512: vty_show_ip_route (vty, rn, rib);
! 3513: }
! 3514: }
! 3515:
! 3516: return CMD_SUCCESS;
! 3517: }
! 3518:
! 3519: DEFUN (show_ipv6_route_protocol_vrf_all,
! 3520: show_ipv6_route_protocol_vrf_all_cmd,
! 3521: "show ipv6 route " QUAGGA_IP6_REDIST_STR_ZEBRA " " VRF_ALL_CMD_STR,
! 3522: SHOW_STR
! 3523: IP_STR
! 3524: "IP routing table\n"
! 3525: QUAGGA_IP6_REDIST_HELP_STR_ZEBRA
! 3526: VRF_ALL_CMD_HELP_STR)
! 3527: {
! 3528: int type;
! 3529: struct route_table *table;
! 3530: struct route_node *rn;
! 3531: struct rib *rib;
! 3532: struct zebra_vrf *zvrf;
! 3533: vrf_iter_t iter;
! 3534: int first = 1;
! 3535:
! 3536: type = proto_redistnum (AFI_IP6, argv[0]);
! 3537: if (type < 0)
! 3538: {
! 3539: vty_out (vty, "Unknown route type%s", VTY_NEWLINE);
! 3540: return CMD_WARNING;
! 3541: }
! 3542:
! 3543: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 3544: {
! 3545: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 3546: (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
! 3547: continue;
! 3548:
! 3549: /* Show matched type IPv6 routes. */
! 3550: for (rn = route_top (table); rn; rn = route_next (rn))
! 3551: RNODE_FOREACH_RIB (rn, rib)
! 3552: if (rib->type == type)
! 3553: {
! 3554: if (first)
! 3555: {
! 3556: vty_out (vty, SHOW_ROUTE_V6_HEADER);
! 3557: first = 0;
! 3558: }
! 3559: vty_show_ip_route (vty, rn, rib);
! 3560: }
! 3561: }
! 3562:
! 3563: return CMD_SUCCESS;
! 3564: }
! 3565:
! 3566: DEFUN (show_ipv6_route_addr_vrf_all,
! 3567: show_ipv6_route_addr_vrf_all_cmd,
! 3568: "show ipv6 route X:X::X:X " VRF_ALL_CMD_STR,
! 3569: SHOW_STR
! 3570: IP_STR
! 3571: "IPv6 routing table\n"
! 3572: "IPv6 Address\n"
! 3573: VRF_ALL_CMD_HELP_STR)
! 3574: {
! 3575: int ret;
! 3576: struct prefix_ipv6 p;
! 3577: struct route_table *table;
! 3578: struct route_node *rn;
! 3579: struct zebra_vrf *zvrf;
! 3580: vrf_iter_t iter;
! 3581:
! 3582: ret = str2prefix_ipv6 (argv[0], &p);
! 3583: if (ret <= 0)
! 3584: {
! 3585: vty_out (vty, "Malformed IPv6 address%s", VTY_NEWLINE);
! 3586: return CMD_WARNING;
! 3587: }
! 3588:
! 3589: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 3590: {
! 3591: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 3592: (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
! 3593: continue;
! 3594:
! 3595: rn = route_node_match (table, (struct prefix *) &p);
! 3596: if (! rn)
! 3597: continue;
! 3598:
! 3599: vty_show_ip_route_detail (vty, rn, 0);
! 3600:
! 3601: route_unlock_node (rn);
! 3602: }
! 3603:
! 3604: return CMD_SUCCESS;
! 3605: }
! 3606:
! 3607: DEFUN (show_ipv6_route_prefix_vrf_all,
! 3608: show_ipv6_route_prefix_vrf_all_cmd,
! 3609: "show ipv6 route X:X::X:X/M " VRF_ALL_CMD_STR,
! 3610: SHOW_STR
! 3611: IP_STR
! 3612: "IPv6 routing table\n"
! 3613: "IPv6 prefix\n"
! 3614: VRF_ALL_CMD_HELP_STR)
! 3615: {
! 3616: int ret;
! 3617: struct prefix_ipv6 p;
! 3618: struct route_table *table;
! 3619: struct route_node *rn;
! 3620: struct zebra_vrf *zvrf;
! 3621: vrf_iter_t iter;
! 3622:
! 3623: ret = str2prefix_ipv6 (argv[0], &p);
! 3624: if (ret <= 0)
! 3625: {
! 3626: vty_out (vty, "Malformed IPv6 prefix%s", VTY_NEWLINE);
! 3627: return CMD_WARNING;
! 3628: }
! 3629:
! 3630: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 3631: {
! 3632: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 3633: (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
! 3634: continue;
! 3635:
! 3636: rn = route_node_match (table, (struct prefix *) &p);
! 3637: if (! rn)
! 3638: continue;
! 3639: if (rn->p.prefixlen != p.prefixlen)
! 3640: {
! 3641: route_unlock_node (rn);
! 3642: continue;
! 3643: }
! 3644:
! 3645: vty_show_ip_route_detail (vty, rn, 0);
! 3646:
! 3647: route_unlock_node (rn);
! 3648: }
! 3649:
! 3650: return CMD_SUCCESS;
! 3651: }
! 3652:
! 3653: /* Show route summary. */
! 3654: DEFUN (show_ipv6_route_summary_vrf_all,
! 3655: show_ipv6_route_summary_vrf_all_cmd,
! 3656: "show ipv6 route summary " VRF_ALL_CMD_STR,
! 3657: SHOW_STR
! 3658: IP_STR
! 3659: "IPv6 routing table\n"
! 3660: "Summary of all IPv6 routes\n"
! 3661: VRF_ALL_CMD_HELP_STR)
! 3662: {
! 3663: struct zebra_vrf *zvrf;
! 3664: vrf_iter_t iter;
! 3665:
! 3666: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 3667: if ((zvrf = vrf_iter2info (iter)) != NULL)
! 3668: vty_show_ip_route_summary (vty, zvrf->table[AFI_IP6][SAFI_UNICAST]);
! 3669:
! 3670: return CMD_SUCCESS;
! 3671: }
! 3672:
! 3673: DEFUN (show_ipv6_mroute_vrf_all,
! 3674: show_ipv6_mroute_vrf_all_cmd,
! 3675: "show ipv6 mroute " VRF_ALL_CMD_STR,
! 3676: SHOW_STR
! 3677: IP_STR
! 3678: "IPv6 Multicast routing table\n"
! 3679: VRF_ALL_CMD_HELP_STR)
! 3680: {
! 3681: struct route_table *table;
! 3682: struct route_node *rn;
! 3683: struct rib *rib;
! 3684: struct zebra_vrf *zvrf;
! 3685: vrf_iter_t iter;
! 3686: int first = 1;
! 3687:
! 3688: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 3689: {
! 3690: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 3691: (table = zvrf->table[AFI_IP6][SAFI_UNICAST]) == NULL)
! 3692: continue;
! 3693:
! 3694: /* Show all IPv6 route. */
! 3695: for (rn = route_top (table); rn; rn = route_next (rn))
! 3696: RNODE_FOREACH_RIB (rn, rib)
! 3697: {
! 3698: if (first)
! 3699: {
! 3700: vty_out (vty, SHOW_ROUTE_V6_HEADER);
! 3701: first = 0;
! 3702: }
! 3703: vty_show_ip_route (vty, rn, rib);
! 3704: }
! 3705: }
! 3706: return CMD_SUCCESS;
! 3707: }
! 3708:
! 3709: DEFUN (show_ipv6_route_summary_prefix_vrf_all,
! 3710: show_ipv6_route_summary_prefix_vrf_all_cmd,
! 3711: "show ipv6 route summary prefix " VRF_ALL_CMD_STR,
! 3712: SHOW_STR
! 3713: IP_STR
! 3714: "IPv6 routing table\n"
! 3715: "Summary of all IPv6 routes\n"
! 3716: "Prefix routes\n"
! 3717: VRF_ALL_CMD_HELP_STR)
! 3718: {
! 3719: struct zebra_vrf *zvrf;
! 3720: vrf_iter_t iter;
! 3721:
! 3722: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 3723: if ((zvrf = vrf_iter2info (iter)) != NULL)
! 3724: vty_show_ip_route_summary_prefix (vty, zvrf->table[AFI_IP6][SAFI_UNICAST]);
! 3725:
! 3726: return CMD_SUCCESS;
! 3727: }
! 3728:
1.1 misho 3729: /* Write IPv6 static route configuration. */
3730: static int
3731: static_config_ipv6 (struct vty *vty)
3732: {
3733: struct route_node *rn;
1.1.1.4 ! misho 3734: struct static_route *si;
1.1 misho 3735: int write;
3736: char buf[BUFSIZ];
3737: struct route_table *stable;
1.1.1.4 ! misho 3738: struct zebra_vrf *zvrf;
! 3739: vrf_iter_t iter;
1.1 misho 3740:
3741: write = 0;
3742:
1.1.1.4 ! misho 3743: for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 3744: {
! 3745: if ((zvrf = vrf_iter2info (iter)) == NULL ||
! 3746: (stable = zvrf->stable[AFI_IP6][SAFI_UNICAST]) == NULL)
! 3747: continue;
1.1 misho 3748:
1.1.1.4 ! misho 3749: for (rn = route_top (stable); rn; rn = route_next (rn))
! 3750: for (si = rn->info; si; si = si->next)
! 3751: {
! 3752: vty_out (vty, "ipv6 route %s", prefix2str (&rn->p, buf, sizeof buf));
1.1 misho 3753:
1.1.1.4 ! misho 3754: switch (si->type)
! 3755: {
! 3756: case STATIC_IPV6_GATEWAY:
! 3757: vty_out (vty, " %s",
! 3758: inet_ntop (AF_INET6, &si->addr.ipv6, buf, BUFSIZ));
! 3759: break;
! 3760: case STATIC_IPV6_IFNAME:
! 3761: vty_out (vty, " %s", si->ifname);
! 3762: break;
! 3763: case STATIC_IPV6_GATEWAY_IFNAME:
! 3764: vty_out (vty, " %s %s",
! 3765: inet_ntop (AF_INET6, &si->addr.ipv6, buf, BUFSIZ),
! 3766: si->ifname);
! 3767: break;
! 3768: }
1.1 misho 3769:
1.1.1.4 ! misho 3770: if (CHECK_FLAG(si->flags, ZEBRA_FLAG_REJECT))
! 3771: vty_out (vty, " %s", "reject");
! 3772:
! 3773: if (CHECK_FLAG(si->flags, ZEBRA_FLAG_BLACKHOLE))
! 3774: vty_out (vty, " %s", "blackhole");
1.1 misho 3775:
1.1.1.4 ! misho 3776: if (si->distance != ZEBRA_STATIC_DISTANCE_DEFAULT)
! 3777: vty_out (vty, " %d", si->distance);
1.1 misho 3778:
1.1.1.4 ! misho 3779: if (si->vrf_id != VRF_DEFAULT)
! 3780: vty_out (vty, " vrf %u", si->vrf_id);
1.1 misho 3781:
1.1.1.4 ! misho 3782: vty_out (vty, "%s", VTY_NEWLINE);
! 3783:
! 3784: write = 1;
! 3785: }
! 3786: }
1.1 misho 3787: return write;
3788: }
3789: #endif /* HAVE_IPV6 */
3790:
3791: /* Static ip route configuration write function. */
3792: static int
3793: zebra_ip_config (struct vty *vty)
3794: {
3795: int write = 0;
3796:
1.1.1.4 ! misho 3797: write += static_config_ipv4 (vty, SAFI_UNICAST, "ip route");
! 3798: write += static_config_ipv4 (vty, SAFI_MULTICAST, "ip mroute");
1.1 misho 3799: #ifdef HAVE_IPV6
3800: write += static_config_ipv6 (vty);
3801: #endif /* HAVE_IPV6 */
3802:
3803: return write;
3804: }
3805:
1.1.1.4 ! misho 3806: static int config_write_vty(struct vty *vty)
! 3807: {
1.1 misho 3808: int i;
1.1.1.4 ! misho 3809: enum multicast_mode ipv4_multicast_mode = multicast_mode_ipv4_get ();
! 3810:
! 3811: if (ipv4_multicast_mode != MCAST_NO_CONFIG)
! 3812: vty_out (vty, "ip multicast rpf-lookup-mode %s%s",
! 3813: ipv4_multicast_mode == MCAST_URIB_ONLY ? "urib-only" :
! 3814: ipv4_multicast_mode == MCAST_MRIB_ONLY ? "mrib-only" :
! 3815: ipv4_multicast_mode == MCAST_MIX_MRIB_FIRST ? "mrib-then-urib" :
! 3816: ipv4_multicast_mode == MCAST_MIX_DISTANCE ? "lower-distance" :
! 3817: "longer-prefix",
! 3818: VTY_NEWLINE);
1.1 misho 3819:
3820: for (i=0;i<ZEBRA_ROUTE_MAX;i++)
3821: {
3822: if (proto_rm[AFI_IP][i])
3823: vty_out (vty, "ip protocol %s route-map %s%s", zebra_route_string(i),
3824: proto_rm[AFI_IP][i], VTY_NEWLINE);
3825: }
3826: if (proto_rm[AFI_IP][ZEBRA_ROUTE_MAX])
3827: vty_out (vty, "ip protocol %s route-map %s%s", "any",
3828: proto_rm[AFI_IP][ZEBRA_ROUTE_MAX], VTY_NEWLINE);
3829:
3830: return 1;
3831: }
3832:
3833: /* table node for protocol filtering */
3834: static struct cmd_node protocol_node = { PROTOCOL_NODE, "", 1 };
3835:
3836: /* IP node for static routes. */
3837: static struct cmd_node ip_node = { IP_NODE, "", 1 };
3838:
3839: /* Route VTY. */
3840: void
3841: zebra_vty_init (void)
3842: {
3843: install_node (&ip_node, zebra_ip_config);
1.1.1.4 ! misho 3844: install_node (&protocol_node, config_write_vty);
1.1 misho 3845:
1.1.1.4 ! misho 3846: install_element (CONFIG_NODE, &ip_mroute_cmd);
! 3847: install_element (CONFIG_NODE, &ip_mroute_dist_cmd);
! 3848: install_element (CONFIG_NODE, &no_ip_mroute_cmd);
! 3849: install_element (CONFIG_NODE, &no_ip_mroute_dist_cmd);
! 3850: install_element (CONFIG_NODE, &ip_multicast_mode_cmd);
! 3851: install_element (CONFIG_NODE, &no_ip_multicast_mode_cmd);
! 3852: install_element (CONFIG_NODE, &no_ip_multicast_mode_noarg_cmd);
1.1 misho 3853: install_element (CONFIG_NODE, &ip_protocol_cmd);
3854: install_element (CONFIG_NODE, &no_ip_protocol_cmd);
3855: install_element (VIEW_NODE, &show_ip_protocol_cmd);
3856: install_element (ENABLE_NODE, &show_ip_protocol_cmd);
3857: install_element (CONFIG_NODE, &ip_route_cmd);
3858: install_element (CONFIG_NODE, &ip_route_flags_cmd);
3859: install_element (CONFIG_NODE, &ip_route_flags2_cmd);
3860: install_element (CONFIG_NODE, &ip_route_mask_cmd);
3861: install_element (CONFIG_NODE, &ip_route_mask_flags_cmd);
3862: install_element (CONFIG_NODE, &ip_route_mask_flags2_cmd);
3863: install_element (CONFIG_NODE, &no_ip_route_cmd);
3864: install_element (CONFIG_NODE, &no_ip_route_flags_cmd);
3865: install_element (CONFIG_NODE, &no_ip_route_flags2_cmd);
3866: install_element (CONFIG_NODE, &no_ip_route_mask_cmd);
3867: install_element (CONFIG_NODE, &no_ip_route_mask_flags_cmd);
3868: install_element (CONFIG_NODE, &no_ip_route_mask_flags2_cmd);
3869: install_element (CONFIG_NODE, &ip_route_distance_cmd);
3870: install_element (CONFIG_NODE, &ip_route_flags_distance_cmd);
3871: install_element (CONFIG_NODE, &ip_route_flags_distance2_cmd);
3872: install_element (CONFIG_NODE, &ip_route_mask_distance_cmd);
3873: install_element (CONFIG_NODE, &ip_route_mask_flags_distance_cmd);
3874: install_element (CONFIG_NODE, &ip_route_mask_flags_distance2_cmd);
3875: install_element (CONFIG_NODE, &no_ip_route_distance_cmd);
3876: install_element (CONFIG_NODE, &no_ip_route_flags_distance_cmd);
3877: install_element (CONFIG_NODE, &no_ip_route_flags_distance2_cmd);
3878: install_element (CONFIG_NODE, &no_ip_route_mask_flags_distance_cmd);
3879: install_element (CONFIG_NODE, &no_ip_route_mask_flags_distance2_cmd);
3880:
3881: install_element (VIEW_NODE, &show_ip_route_cmd);
3882: install_element (VIEW_NODE, &show_ip_route_addr_cmd);
3883: install_element (VIEW_NODE, &show_ip_route_prefix_cmd);
3884: install_element (VIEW_NODE, &show_ip_route_prefix_longer_cmd);
3885: install_element (VIEW_NODE, &show_ip_route_protocol_cmd);
3886: install_element (VIEW_NODE, &show_ip_route_supernets_cmd);
3887: install_element (VIEW_NODE, &show_ip_route_summary_cmd);
1.1.1.4 ! misho 3888: install_element (VIEW_NODE, &show_ip_route_summary_prefix_cmd);
1.1 misho 3889: install_element (ENABLE_NODE, &show_ip_route_cmd);
3890: install_element (ENABLE_NODE, &show_ip_route_addr_cmd);
3891: install_element (ENABLE_NODE, &show_ip_route_prefix_cmd);
3892: install_element (ENABLE_NODE, &show_ip_route_prefix_longer_cmd);
3893: install_element (ENABLE_NODE, &show_ip_route_protocol_cmd);
3894: install_element (ENABLE_NODE, &show_ip_route_supernets_cmd);
3895: install_element (ENABLE_NODE, &show_ip_route_summary_cmd);
1.1.1.4 ! misho 3896: install_element (ENABLE_NODE, &show_ip_route_summary_prefix_cmd);
1.1 misho 3897:
1.1.1.4 ! misho 3898: install_element (VIEW_NODE, &show_ip_rpf_cmd);
! 3899: install_element (ENABLE_NODE, &show_ip_rpf_cmd);
! 3900: install_element (VIEW_NODE, &show_ip_rpf_addr_cmd);
! 3901: install_element (ENABLE_NODE, &show_ip_rpf_addr_cmd);
! 3902:
! 3903: /* Commands for VRF */
! 3904:
! 3905: install_element (CONFIG_NODE, &ip_mroute_vrf_cmd);
! 3906: install_element (CONFIG_NODE, &ip_mroute_dist_vrf_cmd);
! 3907: install_element (CONFIG_NODE, &no_ip_mroute_vrf_cmd);
! 3908: install_element (CONFIG_NODE, &no_ip_mroute_dist_vrf_cmd);
! 3909:
! 3910: install_element (CONFIG_NODE, &ip_route_vrf_cmd);
! 3911: install_element (CONFIG_NODE, &ip_route_flags_vrf_cmd);
! 3912: install_element (CONFIG_NODE, &ip_route_flags2_vrf_cmd);
! 3913: install_element (CONFIG_NODE, &ip_route_mask_vrf_cmd);
! 3914: install_element (CONFIG_NODE, &ip_route_mask_flags_vrf_cmd);
! 3915: install_element (CONFIG_NODE, &ip_route_mask_flags2_vrf_cmd);
! 3916: install_element (CONFIG_NODE, &no_ip_route_vrf_cmd);
! 3917: install_element (CONFIG_NODE, &no_ip_route_flags_vrf_cmd);
! 3918: install_element (CONFIG_NODE, &no_ip_route_flags2_vrf_cmd);
! 3919: install_element (CONFIG_NODE, &no_ip_route_mask_vrf_cmd);
! 3920: install_element (CONFIG_NODE, &no_ip_route_mask_flags_vrf_cmd);
! 3921: install_element (CONFIG_NODE, &no_ip_route_mask_flags2_vrf_cmd);
! 3922: install_element (CONFIG_NODE, &ip_route_distance_vrf_cmd);
! 3923: install_element (CONFIG_NODE, &ip_route_flags_distance_vrf_cmd);
! 3924: install_element (CONFIG_NODE, &ip_route_flags_distance2_vrf_cmd);
! 3925: install_element (CONFIG_NODE, &ip_route_mask_distance_vrf_cmd);
! 3926: install_element (CONFIG_NODE, &ip_route_mask_flags_distance_vrf_cmd);
! 3927: install_element (CONFIG_NODE, &ip_route_mask_flags_distance2_vrf_cmd);
! 3928: install_element (CONFIG_NODE, &no_ip_route_distance_vrf_cmd);
! 3929: install_element (CONFIG_NODE, &no_ip_route_flags_distance_vrf_cmd);
! 3930: install_element (CONFIG_NODE, &no_ip_route_flags_distance2_vrf_cmd);
! 3931: install_element (CONFIG_NODE, &no_ip_route_mask_flags_distance_vrf_cmd);
! 3932: install_element (CONFIG_NODE, &no_ip_route_mask_flags_distance2_vrf_cmd);
! 3933:
! 3934: install_element (VIEW_NODE, &show_ip_route_vrf_cmd);
! 3935: install_element (VIEW_NODE, &show_ip_route_addr_vrf_cmd);
! 3936: install_element (VIEW_NODE, &show_ip_route_prefix_vrf_cmd);
! 3937: install_element (VIEW_NODE, &show_ip_route_prefix_longer_vrf_cmd);
! 3938: install_element (VIEW_NODE, &show_ip_route_protocol_vrf_cmd);
! 3939: install_element (VIEW_NODE, &show_ip_route_supernets_vrf_cmd);
! 3940: install_element (VIEW_NODE, &show_ip_route_summary_vrf_cmd);
! 3941: install_element (VIEW_NODE, &show_ip_route_summary_prefix_vrf_cmd);
! 3942: install_element (ENABLE_NODE, &show_ip_route_vrf_cmd);
! 3943: install_element (ENABLE_NODE, &show_ip_route_addr_vrf_cmd);
! 3944: install_element (ENABLE_NODE, &show_ip_route_prefix_vrf_cmd);
! 3945: install_element (ENABLE_NODE, &show_ip_route_prefix_longer_vrf_cmd);
! 3946: install_element (ENABLE_NODE, &show_ip_route_protocol_vrf_cmd);
! 3947: install_element (ENABLE_NODE, &show_ip_route_supernets_vrf_cmd);
! 3948: install_element (ENABLE_NODE, &show_ip_route_summary_vrf_cmd);
! 3949: install_element (ENABLE_NODE, &show_ip_route_summary_prefix_vrf_cmd);
! 3950:
! 3951: install_element (VIEW_NODE, &show_ip_route_vrf_all_cmd);
! 3952: install_element (VIEW_NODE, &show_ip_route_addr_vrf_all_cmd);
! 3953: install_element (VIEW_NODE, &show_ip_route_prefix_vrf_all_cmd);
! 3954: install_element (VIEW_NODE, &show_ip_route_prefix_longer_vrf_all_cmd);
! 3955: install_element (VIEW_NODE, &show_ip_route_protocol_vrf_all_cmd);
! 3956: install_element (VIEW_NODE, &show_ip_route_supernets_vrf_all_cmd);
! 3957: install_element (VIEW_NODE, &show_ip_route_summary_vrf_all_cmd);
! 3958: install_element (VIEW_NODE, &show_ip_route_summary_prefix_vrf_all_cmd);
! 3959: install_element (ENABLE_NODE, &show_ip_route_vrf_all_cmd);
! 3960: install_element (ENABLE_NODE, &show_ip_route_addr_vrf_all_cmd);
! 3961: install_element (ENABLE_NODE, &show_ip_route_prefix_vrf_all_cmd);
! 3962: install_element (ENABLE_NODE, &show_ip_route_prefix_longer_vrf_all_cmd);
! 3963: install_element (ENABLE_NODE, &show_ip_route_protocol_vrf_all_cmd);
! 3964: install_element (ENABLE_NODE, &show_ip_route_supernets_vrf_all_cmd);
! 3965: install_element (ENABLE_NODE, &show_ip_route_summary_vrf_all_cmd);
! 3966: install_element (ENABLE_NODE, &show_ip_route_summary_prefix_vrf_all_cmd);
! 3967:
! 3968: install_element (VIEW_NODE, &show_ip_rpf_vrf_cmd);
! 3969: install_element (VIEW_NODE, &show_ip_rpf_vrf_all_cmd);
! 3970: install_element (VIEW_NODE, &show_ip_rpf_addr_vrf_cmd);
! 3971: install_element (VIEW_NODE, &show_ip_rpf_addr_vrf_all_cmd);
! 3972: install_element (ENABLE_NODE, &show_ip_rpf_vrf_cmd);
! 3973: install_element (ENABLE_NODE, &show_ip_rpf_vrf_all_cmd);
! 3974: install_element (ENABLE_NODE, &show_ip_rpf_addr_vrf_cmd);
! 3975: install_element (ENABLE_NODE, &show_ip_rpf_addr_vrf_all_cmd);
1.1.1.2 misho 3976:
1.1 misho 3977: #ifdef HAVE_IPV6
3978: install_element (CONFIG_NODE, &ipv6_route_cmd);
3979: install_element (CONFIG_NODE, &ipv6_route_flags_cmd);
3980: install_element (CONFIG_NODE, &ipv6_route_ifname_cmd);
3981: install_element (CONFIG_NODE, &ipv6_route_ifname_flags_cmd);
3982: install_element (CONFIG_NODE, &no_ipv6_route_cmd);
3983: install_element (CONFIG_NODE, &no_ipv6_route_flags_cmd);
3984: install_element (CONFIG_NODE, &no_ipv6_route_ifname_cmd);
3985: install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_cmd);
3986: install_element (CONFIG_NODE, &ipv6_route_pref_cmd);
3987: install_element (CONFIG_NODE, &ipv6_route_flags_pref_cmd);
3988: install_element (CONFIG_NODE, &ipv6_route_ifname_pref_cmd);
3989: install_element (CONFIG_NODE, &ipv6_route_ifname_flags_pref_cmd);
3990: install_element (CONFIG_NODE, &no_ipv6_route_pref_cmd);
3991: install_element (CONFIG_NODE, &no_ipv6_route_flags_pref_cmd);
3992: install_element (CONFIG_NODE, &no_ipv6_route_ifname_pref_cmd);
3993: install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_pref_cmd);
3994: install_element (VIEW_NODE, &show_ipv6_route_cmd);
3995: install_element (VIEW_NODE, &show_ipv6_route_summary_cmd);
1.1.1.4 ! misho 3996: install_element (VIEW_NODE, &show_ipv6_route_summary_prefix_cmd);
1.1 misho 3997: install_element (VIEW_NODE, &show_ipv6_route_protocol_cmd);
3998: install_element (VIEW_NODE, &show_ipv6_route_addr_cmd);
3999: install_element (VIEW_NODE, &show_ipv6_route_prefix_cmd);
4000: install_element (VIEW_NODE, &show_ipv6_route_prefix_longer_cmd);
4001: install_element (ENABLE_NODE, &show_ipv6_route_cmd);
4002: install_element (ENABLE_NODE, &show_ipv6_route_protocol_cmd);
4003: install_element (ENABLE_NODE, &show_ipv6_route_addr_cmd);
4004: install_element (ENABLE_NODE, &show_ipv6_route_prefix_cmd);
4005: install_element (ENABLE_NODE, &show_ipv6_route_prefix_longer_cmd);
4006: install_element (ENABLE_NODE, &show_ipv6_route_summary_cmd);
1.1.1.4 ! misho 4007: install_element (ENABLE_NODE, &show_ipv6_route_summary_prefix_cmd);
1.1.1.2 misho 4008:
4009: install_element (VIEW_NODE, &show_ipv6_mroute_cmd);
4010: install_element (ENABLE_NODE, &show_ipv6_mroute_cmd);
1.1.1.4 ! misho 4011:
! 4012: /* Commands for VRF */
! 4013:
! 4014: install_element (CONFIG_NODE, &ipv6_route_vrf_cmd);
! 4015: install_element (CONFIG_NODE, &ipv6_route_flags_vrf_cmd);
! 4016: install_element (CONFIG_NODE, &ipv6_route_ifname_vrf_cmd);
! 4017: install_element (CONFIG_NODE, &ipv6_route_ifname_flags_vrf_cmd);
! 4018: install_element (CONFIG_NODE, &no_ipv6_route_vrf_cmd);
! 4019: install_element (CONFIG_NODE, &no_ipv6_route_flags_vrf_cmd);
! 4020: install_element (CONFIG_NODE, &no_ipv6_route_ifname_vrf_cmd);
! 4021: install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_vrf_cmd);
! 4022: install_element (CONFIG_NODE, &ipv6_route_pref_vrf_cmd);
! 4023: install_element (CONFIG_NODE, &ipv6_route_flags_pref_vrf_cmd);
! 4024: install_element (CONFIG_NODE, &ipv6_route_ifname_pref_vrf_cmd);
! 4025: install_element (CONFIG_NODE, &ipv6_route_ifname_flags_pref_vrf_cmd);
! 4026: install_element (CONFIG_NODE, &no_ipv6_route_pref_vrf_cmd);
! 4027: install_element (CONFIG_NODE, &no_ipv6_route_flags_pref_vrf_cmd);
! 4028: install_element (CONFIG_NODE, &no_ipv6_route_ifname_pref_vrf_cmd);
! 4029: install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_pref_vrf_cmd);
! 4030:
! 4031: install_element (VIEW_NODE, &show_ipv6_route_vrf_cmd);
! 4032: install_element (VIEW_NODE, &show_ipv6_route_summary_vrf_cmd);
! 4033: install_element (VIEW_NODE, &show_ipv6_route_summary_prefix_vrf_cmd);
! 4034: install_element (VIEW_NODE, &show_ipv6_route_protocol_vrf_cmd);
! 4035: install_element (VIEW_NODE, &show_ipv6_route_addr_vrf_cmd);
! 4036: install_element (VIEW_NODE, &show_ipv6_route_prefix_vrf_cmd);
! 4037: install_element (VIEW_NODE, &show_ipv6_route_prefix_longer_vrf_cmd);
! 4038: install_element (ENABLE_NODE, &show_ipv6_route_vrf_cmd);
! 4039: install_element (ENABLE_NODE, &show_ipv6_route_protocol_vrf_cmd);
! 4040: install_element (ENABLE_NODE, &show_ipv6_route_addr_vrf_cmd);
! 4041: install_element (ENABLE_NODE, &show_ipv6_route_prefix_vrf_cmd);
! 4042: install_element (ENABLE_NODE, &show_ipv6_route_prefix_longer_vrf_cmd);
! 4043: install_element (ENABLE_NODE, &show_ipv6_route_summary_vrf_cmd);
! 4044: install_element (ENABLE_NODE, &show_ipv6_route_summary_prefix_vrf_cmd);
! 4045:
! 4046: install_element (VIEW_NODE, &show_ipv6_route_vrf_all_cmd);
! 4047: install_element (VIEW_NODE, &show_ipv6_route_summary_vrf_all_cmd);
! 4048: install_element (VIEW_NODE, &show_ipv6_route_summary_prefix_vrf_all_cmd);
! 4049: install_element (VIEW_NODE, &show_ipv6_route_protocol_vrf_all_cmd);
! 4050: install_element (VIEW_NODE, &show_ipv6_route_addr_vrf_all_cmd);
! 4051: install_element (VIEW_NODE, &show_ipv6_route_prefix_vrf_all_cmd);
! 4052: install_element (VIEW_NODE, &show_ipv6_route_prefix_longer_vrf_all_cmd);
! 4053: install_element (ENABLE_NODE, &show_ipv6_route_vrf_all_cmd);
! 4054: install_element (ENABLE_NODE, &show_ipv6_route_protocol_vrf_all_cmd);
! 4055: install_element (ENABLE_NODE, &show_ipv6_route_addr_vrf_all_cmd);
! 4056: install_element (ENABLE_NODE, &show_ipv6_route_prefix_vrf_all_cmd);
! 4057: install_element (ENABLE_NODE, &show_ipv6_route_prefix_longer_vrf_all_cmd);
! 4058: install_element (ENABLE_NODE, &show_ipv6_route_summary_vrf_all_cmd);
! 4059: install_element (ENABLE_NODE, &show_ipv6_route_summary_prefix_vrf_all_cmd);
! 4060:
! 4061: install_element (VIEW_NODE, &show_ipv6_mroute_vrf_cmd);
! 4062: install_element (ENABLE_NODE, &show_ipv6_mroute_vrf_cmd);
! 4063:
! 4064: install_element (VIEW_NODE, &show_ipv6_mroute_vrf_all_cmd);
! 4065: install_element (ENABLE_NODE, &show_ipv6_mroute_vrf_all_cmd);
1.1 misho 4066: #endif /* HAVE_IPV6 */
4067: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>