Annotation of embedaddon/quagga/ospfd/ospf_vty.c, revision 1.1
1.1 ! misho 1: /* OSPF VTY interface.
! 2: * Copyright (C) 2005 6WIND <alain.ritoux@6wind.com>
! 3: * Copyright (C) 2000 Toshiaki Takada
! 4: *
! 5: * This file is part of GNU Zebra.
! 6: *
! 7: * GNU Zebra is free software; you can redistribute it and/or modify it
! 8: * under the terms of the GNU General Public License as published by the
! 9: * Free Software Foundation; either version 2, or (at your option) any
! 10: * later version.
! 11: *
! 12: * GNU Zebra is distributed in the hope that it will be useful, but
! 13: * WITHOUT ANY WARRANTY; without even the implied warranty of
! 14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 15: * General Public License for more details.
! 16: *
! 17: * You should have received a copy of the GNU General Public License
! 18: * along with GNU Zebra; see the file COPYING. If not, write to the Free
! 19: * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! 20: * 02111-1307, USA.
! 21: */
! 22:
! 23: #include <zebra.h>
! 24:
! 25: #include "memory.h"
! 26: #include "thread.h"
! 27: #include "prefix.h"
! 28: #include "table.h"
! 29: #include "vty.h"
! 30: #include "command.h"
! 31: #include "plist.h"
! 32: #include "log.h"
! 33: #include "zclient.h"
! 34:
! 35: #include "ospfd/ospfd.h"
! 36: #include "ospfd/ospf_asbr.h"
! 37: #include "ospfd/ospf_lsa.h"
! 38: #include "ospfd/ospf_lsdb.h"
! 39: #include "ospfd/ospf_ism.h"
! 40: #include "ospfd/ospf_interface.h"
! 41: #include "ospfd/ospf_nsm.h"
! 42: #include "ospfd/ospf_neighbor.h"
! 43: #include "ospfd/ospf_flood.h"
! 44: #include "ospfd/ospf_abr.h"
! 45: #include "ospfd/ospf_spf.h"
! 46: #include "ospfd/ospf_route.h"
! 47: #include "ospfd/ospf_zebra.h"
! 48: /*#include "ospfd/ospf_routemap.h" */
! 49: #include "ospfd/ospf_vty.h"
! 50: #include "ospfd/ospf_dump.h"
! 51:
! 52:
! 53: static const char *ospf_network_type_str[] =
! 54: {
! 55: "Null",
! 56: "POINTOPOINT",
! 57: "BROADCAST",
! 58: "NBMA",
! 59: "POINTOMULTIPOINT",
! 60: "VIRTUALLINK",
! 61: "LOOPBACK"
! 62: };
! 63:
! 64:
! 65: /* Utility functions. */
! 66: static int
! 67: ospf_str2area_id (const char *str, struct in_addr *area_id, int *format)
! 68: {
! 69: char *endptr = NULL;
! 70: unsigned long ret;
! 71:
! 72: /* match "A.B.C.D". */
! 73: if (strchr (str, '.') != NULL)
! 74: {
! 75: ret = inet_aton (str, area_id);
! 76: if (!ret)
! 77: return -1;
! 78: *format = OSPF_AREA_ID_FORMAT_ADDRESS;
! 79: }
! 80: /* match "<0-4294967295>". */
! 81: else
! 82: {
! 83: ret = strtoul (str, &endptr, 10);
! 84: if (*endptr != '\0' || (ret == ULONG_MAX && errno == ERANGE))
! 85: return -1;
! 86:
! 87: area_id->s_addr = htonl (ret);
! 88: *format = OSPF_AREA_ID_FORMAT_DECIMAL;
! 89: }
! 90:
! 91: return 0;
! 92: }
! 93:
! 94:
! 95: static int
! 96: str2distribute_source (const char *str, int *source)
! 97: {
! 98: /* Sanity check. */
! 99: if (str == NULL)
! 100: return 0;
! 101:
! 102: if (strncmp (str, "k", 1) == 0)
! 103: *source = ZEBRA_ROUTE_KERNEL;
! 104: else if (strncmp (str, "c", 1) == 0)
! 105: *source = ZEBRA_ROUTE_CONNECT;
! 106: else if (strncmp (str, "s", 1) == 0)
! 107: *source = ZEBRA_ROUTE_STATIC;
! 108: else if (strncmp (str, "r", 1) == 0)
! 109: *source = ZEBRA_ROUTE_RIP;
! 110: else if (strncmp (str, "b", 1) == 0)
! 111: *source = ZEBRA_ROUTE_BGP;
! 112: else
! 113: return 0;
! 114:
! 115: return 1;
! 116: }
! 117:
! 118: static int
! 119: str2metric (const char *str, int *metric)
! 120: {
! 121: /* Sanity check. */
! 122: if (str == NULL)
! 123: return 0;
! 124:
! 125: *metric = strtol (str, NULL, 10);
! 126: if (*metric < 0 && *metric > 16777214)
! 127: {
! 128: /* vty_out (vty, "OSPF metric value is invalid%s", VTY_NEWLINE); */
! 129: return 0;
! 130: }
! 131:
! 132: return 1;
! 133: }
! 134:
! 135: static int
! 136: str2metric_type (const char *str, int *metric_type)
! 137: {
! 138: /* Sanity check. */
! 139: if (str == NULL)
! 140: return 0;
! 141:
! 142: if (strncmp (str, "1", 1) == 0)
! 143: *metric_type = EXTERNAL_METRIC_TYPE_1;
! 144: else if (strncmp (str, "2", 1) == 0)
! 145: *metric_type = EXTERNAL_METRIC_TYPE_2;
! 146: else
! 147: return 0;
! 148:
! 149: return 1;
! 150: }
! 151:
! 152: int
! 153: ospf_oi_count (struct interface *ifp)
! 154: {
! 155: struct route_node *rn;
! 156: int i = 0;
! 157:
! 158: for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
! 159: if (rn->info)
! 160: i++;
! 161:
! 162: return i;
! 163: }
! 164:
! 165:
! 166: DEFUN (router_ospf,
! 167: router_ospf_cmd,
! 168: "router ospf",
! 169: "Enable a routing process\n"
! 170: "Start OSPF configuration\n")
! 171: {
! 172: vty->node = OSPF_NODE;
! 173: vty->index = ospf_get ();
! 174:
! 175: return CMD_SUCCESS;
! 176: }
! 177:
! 178: DEFUN (no_router_ospf,
! 179: no_router_ospf_cmd,
! 180: "no router ospf",
! 181: NO_STR
! 182: "Enable a routing process\n"
! 183: "Start OSPF configuration\n")
! 184: {
! 185: struct ospf *ospf;
! 186:
! 187: ospf = ospf_lookup ();
! 188: if (ospf == NULL)
! 189: {
! 190: vty_out (vty, "There isn't active ospf instance%s", VTY_NEWLINE);
! 191: return CMD_WARNING;
! 192: }
! 193:
! 194: ospf_finish (ospf);
! 195:
! 196: return CMD_SUCCESS;
! 197: }
! 198:
! 199: DEFUN (ospf_router_id,
! 200: ospf_router_id_cmd,
! 201: "ospf router-id A.B.C.D",
! 202: "OSPF specific commands\n"
! 203: "router-id for the OSPF process\n"
! 204: "OSPF router-id in IP address format\n")
! 205: {
! 206: struct ospf *ospf = vty->index;
! 207: struct in_addr router_id;
! 208: int ret;
! 209:
! 210: ret = inet_aton (argv[0], &router_id);
! 211: if (!ret)
! 212: {
! 213: vty_out (vty, "Please specify Router ID by A.B.C.D%s", VTY_NEWLINE);
! 214: return CMD_WARNING;
! 215: }
! 216:
! 217: ospf->router_id_static = router_id;
! 218:
! 219: ospf_router_id_update (ospf);
! 220:
! 221: return CMD_SUCCESS;
! 222: }
! 223:
! 224: ALIAS (ospf_router_id,
! 225: router_ospf_id_cmd,
! 226: "router-id A.B.C.D",
! 227: "router-id for the OSPF process\n"
! 228: "OSPF router-id in IP address format\n")
! 229:
! 230: DEFUN (no_ospf_router_id,
! 231: no_ospf_router_id_cmd,
! 232: "no ospf router-id",
! 233: NO_STR
! 234: "OSPF specific commands\n"
! 235: "router-id for the OSPF process\n")
! 236: {
! 237: struct ospf *ospf = vty->index;
! 238:
! 239: ospf->router_id_static.s_addr = 0;
! 240:
! 241: ospf_router_id_update (ospf);
! 242:
! 243: return CMD_SUCCESS;
! 244: }
! 245:
! 246: ALIAS (no_ospf_router_id,
! 247: no_router_ospf_id_cmd,
! 248: "no router-id",
! 249: NO_STR
! 250: "router-id for the OSPF process\n")
! 251:
! 252: static void
! 253: ospf_passive_interface_default (struct ospf *ospf, u_char newval)
! 254: {
! 255: struct listnode *ln;
! 256: struct interface *ifp;
! 257: struct ospf_interface *oi;
! 258:
! 259: ospf->passive_interface_default = newval;
! 260:
! 261: for (ALL_LIST_ELEMENTS_RO (om->iflist, ln, ifp))
! 262: {
! 263: if (ifp &&
! 264: OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp), passive_interface))
! 265: UNSET_IF_PARAM (IF_DEF_PARAMS (ifp), passive_interface);
! 266: }
! 267: for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, ln, oi))
! 268: {
! 269: if (OSPF_IF_PARAM_CONFIGURED (oi->params, passive_interface))
! 270: UNSET_IF_PARAM (oi->params, passive_interface);
! 271: /* update multicast memberships */
! 272: ospf_if_set_multicast(oi);
! 273: }
! 274: }
! 275:
! 276: static void
! 277: ospf_passive_interface_update (struct ospf *ospf, struct interface *ifp,
! 278: struct in_addr addr,
! 279: struct ospf_if_params *params, u_char value)
! 280: {
! 281: u_char dflt;
! 282:
! 283: params->passive_interface = value;
! 284: if (params != IF_DEF_PARAMS (ifp))
! 285: {
! 286: if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp), passive_interface))
! 287: dflt = IF_DEF_PARAMS (ifp)->passive_interface;
! 288: else
! 289: dflt = ospf->passive_interface_default;
! 290:
! 291: if (value != dflt)
! 292: SET_IF_PARAM (params, passive_interface);
! 293: else
! 294: UNSET_IF_PARAM (params, passive_interface);
! 295:
! 296: ospf_free_if_params (ifp, addr);
! 297: ospf_if_update_params (ifp, addr);
! 298: }
! 299: else
! 300: {
! 301: if (value != ospf->passive_interface_default)
! 302: SET_IF_PARAM (params, passive_interface);
! 303: else
! 304: UNSET_IF_PARAM (params, passive_interface);
! 305: }
! 306: }
! 307:
! 308: DEFUN (ospf_passive_interface,
! 309: ospf_passive_interface_addr_cmd,
! 310: "passive-interface IFNAME A.B.C.D",
! 311: "Suppress routing updates on an interface\n"
! 312: "Interface's name\n")
! 313: {
! 314: struct interface *ifp;
! 315: struct in_addr addr;
! 316: int ret;
! 317: struct ospf_if_params *params;
! 318: struct route_node *rn;
! 319: struct ospf *ospf = vty->index;
! 320:
! 321: if (argc == 0)
! 322: {
! 323: ospf_passive_interface_default (ospf, OSPF_IF_PASSIVE);
! 324: return CMD_SUCCESS;
! 325: }
! 326:
! 327: ifp = if_get_by_name (argv[0]);
! 328:
! 329: params = IF_DEF_PARAMS (ifp);
! 330:
! 331: if (argc == 2)
! 332: {
! 333: ret = inet_aton(argv[1], &addr);
! 334: if (!ret)
! 335: {
! 336: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 337: VTY_NEWLINE);
! 338: return CMD_WARNING;
! 339: }
! 340:
! 341: params = ospf_get_if_params (ifp, addr);
! 342: ospf_if_update_params (ifp, addr);
! 343: }
! 344: ospf_passive_interface_update (ospf, ifp, addr, params, OSPF_IF_PASSIVE);
! 345:
! 346: /* XXX We should call ospf_if_set_multicast on exactly those
! 347: * interfaces for which the passive property changed. It is too much
! 348: * work to determine this set, so we do this for every interface.
! 349: * This is safe and reasonable because ospf_if_set_multicast uses a
! 350: * record of joined groups to avoid systems calls if the desired
! 351: * memberships match the current memership.
! 352: */
! 353:
! 354: for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next (rn))
! 355: {
! 356: struct ospf_interface *oi = rn->info;
! 357:
! 358: if (oi && (OSPF_IF_PARAM(oi, passive_interface) == OSPF_IF_PASSIVE))
! 359: ospf_if_set_multicast(oi);
! 360: }
! 361: /*
! 362: * XXX It is not clear what state transitions the interface needs to
! 363: * undergo when going from active to passive. Fixing this will
! 364: * require precise identification of interfaces having such a
! 365: * transition.
! 366: */
! 367:
! 368: return CMD_SUCCESS;
! 369: }
! 370:
! 371: ALIAS (ospf_passive_interface,
! 372: ospf_passive_interface_cmd,
! 373: "passive-interface IFNAME",
! 374: "Suppress routing updates on an interface\n"
! 375: "Interface's name\n")
! 376:
! 377: ALIAS (ospf_passive_interface,
! 378: ospf_passive_interface_default_cmd,
! 379: "passive-interface default",
! 380: "Suppress routing updates on an interface\n"
! 381: "Suppress routing updates on interfaces by default\n")
! 382:
! 383: DEFUN (no_ospf_passive_interface,
! 384: no_ospf_passive_interface_addr_cmd,
! 385: "no passive-interface IFNAME A.B.C.D",
! 386: NO_STR
! 387: "Allow routing updates on an interface\n"
! 388: "Interface's name\n")
! 389: {
! 390: struct interface *ifp;
! 391: struct in_addr addr;
! 392: struct ospf_if_params *params;
! 393: int ret;
! 394: struct route_node *rn;
! 395: struct ospf *ospf = vty->index;
! 396:
! 397: if (argc == 0)
! 398: {
! 399: ospf_passive_interface_default (ospf, OSPF_IF_ACTIVE);
! 400: return CMD_SUCCESS;
! 401: }
! 402:
! 403: ifp = if_get_by_name (argv[0]);
! 404:
! 405: params = IF_DEF_PARAMS (ifp);
! 406:
! 407: if (argc == 2)
! 408: {
! 409: ret = inet_aton(argv[1], &addr);
! 410: if (!ret)
! 411: {
! 412: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 413: VTY_NEWLINE);
! 414: return CMD_WARNING;
! 415: }
! 416:
! 417: params = ospf_lookup_if_params (ifp, addr);
! 418: if (params == NULL)
! 419: return CMD_SUCCESS;
! 420: }
! 421: ospf_passive_interface_update (ospf, ifp, addr, params, OSPF_IF_ACTIVE);
! 422:
! 423: /* XXX We should call ospf_if_set_multicast on exactly those
! 424: * interfaces for which the passive property changed. It is too much
! 425: * work to determine this set, so we do this for every interface.
! 426: * This is safe and reasonable because ospf_if_set_multicast uses a
! 427: * record of joined groups to avoid systems calls if the desired
! 428: * memberships match the current memership.
! 429: */
! 430: for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next (rn))
! 431: {
! 432: struct ospf_interface *oi = rn->info;
! 433:
! 434: if (oi && (OSPF_IF_PARAM(oi, passive_interface) == OSPF_IF_ACTIVE))
! 435: ospf_if_set_multicast(oi);
! 436: }
! 437:
! 438: return CMD_SUCCESS;
! 439: }
! 440:
! 441: ALIAS (no_ospf_passive_interface,
! 442: no_ospf_passive_interface_cmd,
! 443: "no passive-interface IFNAME",
! 444: NO_STR
! 445: "Allow routing updates on an interface\n"
! 446: "Interface's name\n")
! 447:
! 448: ALIAS (no_ospf_passive_interface,
! 449: no_ospf_passive_interface_default_cmd,
! 450: "no passive-interface default",
! 451: NO_STR
! 452: "Allow routing updates on an interface\n"
! 453: "Allow routing updates on interfaces by default\n")
! 454:
! 455: DEFUN (ospf_network_area,
! 456: ospf_network_area_cmd,
! 457: "network A.B.C.D/M area (A.B.C.D|<0-4294967295>)",
! 458: "Enable routing on an IP network\n"
! 459: "OSPF network prefix\n"
! 460: "Set the OSPF area ID\n"
! 461: "OSPF area ID in IP address format\n"
! 462: "OSPF area ID as a decimal value\n")
! 463: {
! 464: struct ospf *ospf= vty->index;
! 465: struct prefix_ipv4 p;
! 466: struct in_addr area_id;
! 467: int ret, format;
! 468:
! 469: /* Get network prefix and Area ID. */
! 470: VTY_GET_IPV4_PREFIX ("network prefix", p, argv[0]);
! 471: VTY_GET_OSPF_AREA_ID (area_id, format, argv[1]);
! 472:
! 473: ret = ospf_network_set (ospf, &p, area_id);
! 474: if (ret == 0)
! 475: {
! 476: vty_out (vty, "There is already same network statement.%s", VTY_NEWLINE);
! 477: return CMD_WARNING;
! 478: }
! 479:
! 480: return CMD_SUCCESS;
! 481: }
! 482:
! 483: DEFUN (no_ospf_network_area,
! 484: no_ospf_network_area_cmd,
! 485: "no network A.B.C.D/M area (A.B.C.D|<0-4294967295>)",
! 486: NO_STR
! 487: "Enable routing on an IP network\n"
! 488: "OSPF network prefix\n"
! 489: "Set the OSPF area ID\n"
! 490: "OSPF area ID in IP address format\n"
! 491: "OSPF area ID as a decimal value\n")
! 492: {
! 493: struct ospf *ospf = (struct ospf *) vty->index;
! 494: struct prefix_ipv4 p;
! 495: struct in_addr area_id;
! 496: int ret, format;
! 497:
! 498: /* Get network prefix and Area ID. */
! 499: VTY_GET_IPV4_PREFIX ("network prefix", p, argv[0]);
! 500: VTY_GET_OSPF_AREA_ID (area_id, format, argv[1]);
! 501:
! 502: ret = ospf_network_unset (ospf, &p, area_id);
! 503: if (ret == 0)
! 504: {
! 505: vty_out (vty, "Can't find specified network area configuration.%s",
! 506: VTY_NEWLINE);
! 507: return CMD_WARNING;
! 508: }
! 509:
! 510: return CMD_SUCCESS;
! 511: }
! 512:
! 513:
! 514: DEFUN (ospf_area_range,
! 515: ospf_area_range_cmd,
! 516: "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M",
! 517: "OSPF area parameters\n"
! 518: "OSPF area ID in IP address format\n"
! 519: "OSPF area ID as a decimal value\n"
! 520: "Summarize routes matching address/mask (border routers only)\n"
! 521: "Area range prefix\n")
! 522: {
! 523: struct ospf *ospf = vty->index;
! 524: struct prefix_ipv4 p;
! 525: struct in_addr area_id;
! 526: int format;
! 527: u_int32_t cost;
! 528:
! 529: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 530: VTY_GET_IPV4_PREFIX ("area range", p, argv[1]);
! 531:
! 532: ospf_area_range_set (ospf, area_id, &p, OSPF_AREA_RANGE_ADVERTISE);
! 533: if (argc > 2)
! 534: {
! 535: VTY_GET_INTEGER ("range cost", cost, argv[2]);
! 536: ospf_area_range_cost_set (ospf, area_id, &p, cost);
! 537: }
! 538:
! 539: return CMD_SUCCESS;
! 540: }
! 541:
! 542: ALIAS (ospf_area_range,
! 543: ospf_area_range_advertise_cmd,
! 544: "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M advertise",
! 545: "OSPF area parameters\n"
! 546: "OSPF area ID in IP address format\n"
! 547: "OSPF area ID as a decimal value\n"
! 548: "OSPF area range for route advertise (default)\n"
! 549: "Area range prefix\n"
! 550: "Advertise this range (default)\n")
! 551:
! 552: ALIAS (ospf_area_range,
! 553: ospf_area_range_cost_cmd,
! 554: "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M cost <0-16777215>",
! 555: "OSPF area parameters\n"
! 556: "OSPF area ID in IP address format\n"
! 557: "OSPF area ID as a decimal value\n"
! 558: "Summarize routes matching address/mask (border routers only)\n"
! 559: "Area range prefix\n"
! 560: "User specified metric for this range\n"
! 561: "Advertised metric for this range\n")
! 562:
! 563: ALIAS (ospf_area_range,
! 564: ospf_area_range_advertise_cost_cmd,
! 565: "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M advertise cost <0-16777215>",
! 566: "OSPF area parameters\n"
! 567: "OSPF area ID in IP address format\n"
! 568: "OSPF area ID as a decimal value\n"
! 569: "Summarize routes matching address/mask (border routers only)\n"
! 570: "Area range prefix\n"
! 571: "Advertise this range (default)\n"
! 572: "User specified metric for this range\n"
! 573: "Advertised metric for this range\n")
! 574:
! 575: DEFUN (ospf_area_range_not_advertise,
! 576: ospf_area_range_not_advertise_cmd,
! 577: "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M not-advertise",
! 578: "OSPF area parameters\n"
! 579: "OSPF area ID in IP address format\n"
! 580: "OSPF area ID as a decimal value\n"
! 581: "Summarize routes matching address/mask (border routers only)\n"
! 582: "Area range prefix\n"
! 583: "DoNotAdvertise this range\n")
! 584: {
! 585: struct ospf *ospf = vty->index;
! 586: struct prefix_ipv4 p;
! 587: struct in_addr area_id;
! 588: int format;
! 589:
! 590: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 591: VTY_GET_IPV4_PREFIX ("area range", p, argv[1]);
! 592:
! 593: ospf_area_range_set (ospf, area_id, &p, 0);
! 594:
! 595: return CMD_SUCCESS;
! 596: }
! 597:
! 598: DEFUN (no_ospf_area_range,
! 599: no_ospf_area_range_cmd,
! 600: "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M",
! 601: NO_STR
! 602: "OSPF area parameters\n"
! 603: "OSPF area ID in IP address format\n"
! 604: "OSPF area ID as a decimal value\n"
! 605: "Summarize routes matching address/mask (border routers only)\n"
! 606: "Area range prefix\n")
! 607: {
! 608: struct ospf *ospf = vty->index;
! 609: struct prefix_ipv4 p;
! 610: struct in_addr area_id;
! 611: int format;
! 612:
! 613: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 614: VTY_GET_IPV4_PREFIX ("area range", p, argv[1]);
! 615:
! 616: ospf_area_range_unset (ospf, area_id, &p);
! 617:
! 618: return CMD_SUCCESS;
! 619: }
! 620:
! 621: ALIAS (no_ospf_area_range,
! 622: no_ospf_area_range_advertise_cmd,
! 623: "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M (advertise|not-advertise)",
! 624: NO_STR
! 625: "OSPF area parameters\n"
! 626: "OSPF area ID in IP address format\n"
! 627: "OSPF area ID as a decimal value\n"
! 628: "Summarize routes matching address/mask (border routers only)\n"
! 629: "Area range prefix\n"
! 630: "Advertise this range (default)\n"
! 631: "DoNotAdvertise this range\n")
! 632:
! 633: ALIAS (no_ospf_area_range,
! 634: no_ospf_area_range_cost_cmd,
! 635: "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M cost <0-16777215>",
! 636: NO_STR
! 637: "OSPF area parameters\n"
! 638: "OSPF area ID in IP address format\n"
! 639: "OSPF area ID as a decimal value\n"
! 640: "Summarize routes matching address/mask (border routers only)\n"
! 641: "Area range prefix\n"
! 642: "User specified metric for this range\n"
! 643: "Advertised metric for this range\n")
! 644:
! 645: ALIAS (no_ospf_area_range,
! 646: no_ospf_area_range_advertise_cost_cmd,
! 647: "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M advertise cost <0-16777215>",
! 648: NO_STR
! 649: "OSPF area parameters\n"
! 650: "OSPF area ID in IP address format\n"
! 651: "OSPF area ID as a decimal value\n"
! 652: "Summarize routes matching address/mask (border routers only)\n"
! 653: "Area range prefix\n"
! 654: "Advertise this range (default)\n"
! 655: "User specified metric for this range\n"
! 656: "Advertised metric for this range\n")
! 657:
! 658: DEFUN (ospf_area_range_substitute,
! 659: ospf_area_range_substitute_cmd,
! 660: "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M substitute A.B.C.D/M",
! 661: "OSPF area parameters\n"
! 662: "OSPF area ID in IP address format\n"
! 663: "OSPF area ID as a decimal value\n"
! 664: "Summarize routes matching address/mask (border routers only)\n"
! 665: "Area range prefix\n"
! 666: "Announce area range as another prefix\n"
! 667: "Network prefix to be announced instead of range\n")
! 668: {
! 669: struct ospf *ospf = vty->index;
! 670: struct prefix_ipv4 p, s;
! 671: struct in_addr area_id;
! 672: int format;
! 673:
! 674: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 675: VTY_GET_IPV4_PREFIX ("area range", p, argv[1]);
! 676: VTY_GET_IPV4_PREFIX ("substituted network prefix", s, argv[2]);
! 677:
! 678: ospf_area_range_substitute_set (ospf, area_id, &p, &s);
! 679:
! 680: return CMD_SUCCESS;
! 681: }
! 682:
! 683: DEFUN (no_ospf_area_range_substitute,
! 684: no_ospf_area_range_substitute_cmd,
! 685: "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M substitute A.B.C.D/M",
! 686: NO_STR
! 687: "OSPF area parameters\n"
! 688: "OSPF area ID in IP address format\n"
! 689: "OSPF area ID as a decimal value\n"
! 690: "Summarize routes matching address/mask (border routers only)\n"
! 691: "Area range prefix\n"
! 692: "Announce area range as another prefix\n"
! 693: "Network prefix to be announced instead of range\n")
! 694: {
! 695: struct ospf *ospf = vty->index;
! 696: struct prefix_ipv4 p, s;
! 697: struct in_addr area_id;
! 698: int format;
! 699:
! 700: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 701: VTY_GET_IPV4_PREFIX ("area range", p, argv[1]);
! 702: VTY_GET_IPV4_PREFIX ("substituted network prefix", s, argv[2]);
! 703:
! 704: ospf_area_range_substitute_unset (ospf, area_id, &p);
! 705:
! 706: return CMD_SUCCESS;
! 707: }
! 708:
! 709:
! 710: /* Command Handler Logic in VLink stuff is delicate!!
! 711:
! 712: ALTER AT YOUR OWN RISK!!!!
! 713:
! 714: Various dummy values are used to represent 'NoChange' state for
! 715: VLink configuration NOT being changed by a VLink command, and
! 716: special syntax is used within the command strings so that the
! 717: typed in command verbs can be seen in the configuration command
! 718: bacckend handler. This is to drastically reduce the verbeage
! 719: required to coe up with a reasonably compatible Cisco VLink command
! 720:
! 721: - Matthew Grant <grantma@anathoth.gen.nz>
! 722: Wed, 21 Feb 2001 15:13:52 +1300
! 723: */
! 724:
! 725:
! 726: /* Configuration data for virtual links
! 727: */
! 728: struct ospf_vl_config_data {
! 729: struct vty *vty; /* vty stuff */
! 730: struct in_addr area_id; /* area ID from command line */
! 731: int format; /* command line area ID format */
! 732: struct in_addr vl_peer; /* command line vl_peer */
! 733: int auth_type; /* Authehntication type, if given */
! 734: char *auth_key; /* simple password if present */
! 735: int crypto_key_id; /* Cryptographic key ID */
! 736: char *md5_key; /* MD5 authentication key */
! 737: int hello_interval; /* Obvious what these are... */
! 738: int retransmit_interval;
! 739: int transmit_delay;
! 740: int dead_interval;
! 741: };
! 742:
! 743: static void
! 744: ospf_vl_config_data_init (struct ospf_vl_config_data *vl_config,
! 745: struct vty *vty)
! 746: {
! 747: memset (vl_config, 0, sizeof (struct ospf_vl_config_data));
! 748: vl_config->auth_type = OSPF_AUTH_CMD_NOTSEEN;
! 749: vl_config->vty = vty;
! 750: }
! 751:
! 752: static struct ospf_vl_data *
! 753: ospf_find_vl_data (struct ospf *ospf, struct ospf_vl_config_data *vl_config)
! 754: {
! 755: struct ospf_area *area;
! 756: struct ospf_vl_data *vl_data;
! 757: struct vty *vty;
! 758: struct in_addr area_id;
! 759:
! 760: vty = vl_config->vty;
! 761: area_id = vl_config->area_id;
! 762:
! 763: if (area_id.s_addr == OSPF_AREA_BACKBONE)
! 764: {
! 765: vty_out (vty,
! 766: "Configuring VLs over the backbone is not allowed%s",
! 767: VTY_NEWLINE);
! 768: return NULL;
! 769: }
! 770: area = ospf_area_get (ospf, area_id, vl_config->format);
! 771:
! 772: if (area->external_routing != OSPF_AREA_DEFAULT)
! 773: {
! 774: if (vl_config->format == OSPF_AREA_ID_FORMAT_ADDRESS)
! 775: vty_out (vty, "Area %s is %s%s",
! 776: inet_ntoa (area_id),
! 777: area->external_routing == OSPF_AREA_NSSA?"nssa":"stub",
! 778: VTY_NEWLINE);
! 779: else
! 780: vty_out (vty, "Area %ld is %s%s",
! 781: (u_long)ntohl (area_id.s_addr),
! 782: area->external_routing == OSPF_AREA_NSSA?"nssa":"stub",
! 783: VTY_NEWLINE);
! 784: return NULL;
! 785: }
! 786:
! 787: if ((vl_data = ospf_vl_lookup (ospf, area, vl_config->vl_peer)) == NULL)
! 788: {
! 789: vl_data = ospf_vl_data_new (area, vl_config->vl_peer);
! 790: if (vl_data->vl_oi == NULL)
! 791: {
! 792: vl_data->vl_oi = ospf_vl_new (ospf, vl_data);
! 793: ospf_vl_add (ospf, vl_data);
! 794: ospf_spf_calculate_schedule (ospf);
! 795: }
! 796: }
! 797: return vl_data;
! 798: }
! 799:
! 800:
! 801: static int
! 802: ospf_vl_set_security (struct ospf_vl_data *vl_data,
! 803: struct ospf_vl_config_data *vl_config)
! 804: {
! 805: struct crypt_key *ck;
! 806: struct vty *vty;
! 807: struct interface *ifp = vl_data->vl_oi->ifp;
! 808:
! 809: vty = vl_config->vty;
! 810:
! 811: if (vl_config->auth_type != OSPF_AUTH_CMD_NOTSEEN)
! 812: {
! 813: SET_IF_PARAM (IF_DEF_PARAMS (ifp), auth_type);
! 814: IF_DEF_PARAMS (ifp)->auth_type = vl_config->auth_type;
! 815: }
! 816:
! 817: if (vl_config->auth_key)
! 818: {
! 819: memset(IF_DEF_PARAMS (ifp)->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE+1);
! 820: strncpy ((char *) IF_DEF_PARAMS (ifp)->auth_simple, vl_config->auth_key,
! 821: OSPF_AUTH_SIMPLE_SIZE);
! 822: }
! 823: else if (vl_config->md5_key)
! 824: {
! 825: if (ospf_crypt_key_lookup (IF_DEF_PARAMS (ifp)->auth_crypt, vl_config->crypto_key_id)
! 826: != NULL)
! 827: {
! 828: vty_out (vty, "OSPF: Key %d already exists%s",
! 829: vl_config->crypto_key_id, VTY_NEWLINE);
! 830: return CMD_WARNING;
! 831: }
! 832: ck = ospf_crypt_key_new ();
! 833: ck->key_id = vl_config->crypto_key_id;
! 834: memset(ck->auth_key, 0, OSPF_AUTH_MD5_SIZE+1);
! 835: strncpy ((char *) ck->auth_key, vl_config->md5_key, OSPF_AUTH_MD5_SIZE);
! 836:
! 837: ospf_crypt_key_add (IF_DEF_PARAMS (ifp)->auth_crypt, ck);
! 838: }
! 839: else if (vl_config->crypto_key_id != 0)
! 840: {
! 841: /* Delete a key */
! 842:
! 843: if (ospf_crypt_key_lookup (IF_DEF_PARAMS (ifp)->auth_crypt,
! 844: vl_config->crypto_key_id) == NULL)
! 845: {
! 846: vty_out (vty, "OSPF: Key %d does not exist%s",
! 847: vl_config->crypto_key_id, VTY_NEWLINE);
! 848: return CMD_WARNING;
! 849: }
! 850:
! 851: ospf_crypt_key_delete (IF_DEF_PARAMS (ifp)->auth_crypt, vl_config->crypto_key_id);
! 852:
! 853: }
! 854:
! 855: return CMD_SUCCESS;
! 856: }
! 857:
! 858: static int
! 859: ospf_vl_set_timers (struct ospf_vl_data *vl_data,
! 860: struct ospf_vl_config_data *vl_config)
! 861: {
! 862: struct interface *ifp = ifp = vl_data->vl_oi->ifp;
! 863: /* Virtual Link data initialised to defaults, so only set
! 864: if a value given */
! 865: if (vl_config->hello_interval)
! 866: {
! 867: SET_IF_PARAM (IF_DEF_PARAMS (ifp), v_hello);
! 868: IF_DEF_PARAMS (ifp)->v_hello = vl_config->hello_interval;
! 869: }
! 870:
! 871: if (vl_config->dead_interval)
! 872: {
! 873: SET_IF_PARAM (IF_DEF_PARAMS (ifp), v_wait);
! 874: IF_DEF_PARAMS (ifp)->v_wait = vl_config->dead_interval;
! 875: }
! 876:
! 877: if (vl_config->retransmit_interval)
! 878: {
! 879: SET_IF_PARAM (IF_DEF_PARAMS (ifp), retransmit_interval);
! 880: IF_DEF_PARAMS (ifp)->retransmit_interval = vl_config->retransmit_interval;
! 881: }
! 882:
! 883: if (vl_config->transmit_delay)
! 884: {
! 885: SET_IF_PARAM (IF_DEF_PARAMS (ifp), transmit_delay);
! 886: IF_DEF_PARAMS (ifp)->transmit_delay = vl_config->transmit_delay;
! 887: }
! 888:
! 889: return CMD_SUCCESS;
! 890: }
! 891:
! 892:
! 893:
! 894: /* The business end of all of the above */
! 895: static int
! 896: ospf_vl_set (struct ospf *ospf, struct ospf_vl_config_data *vl_config)
! 897: {
! 898: struct ospf_vl_data *vl_data;
! 899: int ret;
! 900:
! 901: vl_data = ospf_find_vl_data (ospf, vl_config);
! 902: if (!vl_data)
! 903: return CMD_WARNING;
! 904:
! 905: /* Process this one first as it can have a fatal result, which can
! 906: only logically occur if the virtual link exists already
! 907: Thus a command error does not result in a change to the
! 908: running configuration such as unexpectedly altered timer
! 909: values etc.*/
! 910: ret = ospf_vl_set_security (vl_data, vl_config);
! 911: if (ret != CMD_SUCCESS)
! 912: return ret;
! 913:
! 914: /* Set any time based parameters, these area already range checked */
! 915:
! 916: ret = ospf_vl_set_timers (vl_data, vl_config);
! 917: if (ret != CMD_SUCCESS)
! 918: return ret;
! 919:
! 920: return CMD_SUCCESS;
! 921:
! 922: }
! 923:
! 924: /* This stuff exists to make specifying all the alias commands A LOT simpler
! 925: */
! 926: #define VLINK_HELPSTR_IPADDR \
! 927: "OSPF area parameters\n" \
! 928: "OSPF area ID in IP address format\n" \
! 929: "OSPF area ID as a decimal value\n" \
! 930: "Configure a virtual link\n" \
! 931: "Router ID of the remote ABR\n"
! 932:
! 933: #define VLINK_HELPSTR_AUTHTYPE_SIMPLE \
! 934: "Enable authentication on this virtual link\n" \
! 935: "dummy string \n"
! 936:
! 937: #define VLINK_HELPSTR_AUTHTYPE_ALL \
! 938: VLINK_HELPSTR_AUTHTYPE_SIMPLE \
! 939: "Use null authentication\n" \
! 940: "Use message-digest authentication\n"
! 941:
! 942: #define VLINK_HELPSTR_TIME_PARAM_NOSECS \
! 943: "Time between HELLO packets\n" \
! 944: "Time between retransmitting lost link state advertisements\n" \
! 945: "Link state transmit delay\n" \
! 946: "Interval after which a neighbor is declared dead\n"
! 947:
! 948: #define VLINK_HELPSTR_TIME_PARAM \
! 949: VLINK_HELPSTR_TIME_PARAM_NOSECS \
! 950: "Seconds\n"
! 951:
! 952: #define VLINK_HELPSTR_AUTH_SIMPLE \
! 953: "Authentication password (key)\n" \
! 954: "The OSPF password (key)"
! 955:
! 956: #define VLINK_HELPSTR_AUTH_MD5 \
! 957: "Message digest authentication password (key)\n" \
! 958: "dummy string \n" \
! 959: "Key ID\n" \
! 960: "Use MD5 algorithm\n" \
! 961: "The OSPF password (key)"
! 962:
! 963: DEFUN (ospf_area_vlink,
! 964: ospf_area_vlink_cmd,
! 965: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D",
! 966: VLINK_HELPSTR_IPADDR)
! 967: {
! 968: struct ospf *ospf = vty->index;
! 969: struct ospf_vl_config_data vl_config;
! 970: char auth_key[OSPF_AUTH_SIMPLE_SIZE+1];
! 971: char md5_key[OSPF_AUTH_MD5_SIZE+1];
! 972: int i;
! 973: int ret;
! 974:
! 975: ospf_vl_config_data_init(&vl_config, vty);
! 976:
! 977: /* Read off first 2 parameters and check them */
! 978: ret = ospf_str2area_id (argv[0], &vl_config.area_id, &vl_config.format);
! 979: if (ret < 0)
! 980: {
! 981: vty_out (vty, "OSPF area ID is invalid%s", VTY_NEWLINE);
! 982: return CMD_WARNING;
! 983: }
! 984:
! 985: ret = inet_aton (argv[1], &vl_config.vl_peer);
! 986: if (! ret)
! 987: {
! 988: vty_out (vty, "Please specify valid Router ID as a.b.c.d%s",
! 989: VTY_NEWLINE);
! 990: return CMD_WARNING;
! 991: }
! 992:
! 993: if (argc <=2)
! 994: {
! 995: /* Thats all folks! - BUGS B. strikes again!!!*/
! 996:
! 997: return ospf_vl_set (ospf, &vl_config);
! 998: }
! 999:
! 1000: /* Deal with other parameters */
! 1001: for (i=2; i < argc; i++)
! 1002: {
! 1003:
! 1004: /* vty_out (vty, "argv[%d] - %s%s", i, argv[i], VTY_NEWLINE); */
! 1005:
! 1006: switch (argv[i][0])
! 1007: {
! 1008:
! 1009: case 'a':
! 1010: if (i > 2 || strncmp (argv[i], "authentication-", 15) == 0)
! 1011: {
! 1012: /* authentication-key - this option can occur anywhere on
! 1013: command line. At start of command line
! 1014: must check for authentication option. */
! 1015: memset (auth_key, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
! 1016: strncpy (auth_key, argv[i+1], OSPF_AUTH_SIMPLE_SIZE);
! 1017: vl_config.auth_key = auth_key;
! 1018: i++;
! 1019: }
! 1020: else if (strncmp (argv[i], "authentication", 14) == 0)
! 1021: {
! 1022: /* authentication - this option can only occur at start
! 1023: of command line */
! 1024: vl_config.auth_type = OSPF_AUTH_SIMPLE;
! 1025: if ((i+1) < argc)
! 1026: {
! 1027: if (strncmp (argv[i+1], "n", 1) == 0)
! 1028: {
! 1029: /* "authentication null" */
! 1030: vl_config.auth_type = OSPF_AUTH_NULL;
! 1031: i++;
! 1032: }
! 1033: else if (strncmp (argv[i+1], "m", 1) == 0
! 1034: && strcmp (argv[i+1], "message-digest-") != 0)
! 1035: {
! 1036: /* "authentication message-digest" */
! 1037: vl_config.auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
! 1038: i++;
! 1039: }
! 1040: }
! 1041: }
! 1042: break;
! 1043:
! 1044: case 'm':
! 1045: /* message-digest-key */
! 1046: i++;
! 1047: vl_config.crypto_key_id = strtol (argv[i], NULL, 10);
! 1048: if (vl_config.crypto_key_id < 0)
! 1049: return CMD_WARNING;
! 1050: i++;
! 1051: memset(md5_key, 0, OSPF_AUTH_MD5_SIZE+1);
! 1052: strncpy (md5_key, argv[i], OSPF_AUTH_MD5_SIZE);
! 1053: vl_config.md5_key = md5_key;
! 1054: break;
! 1055:
! 1056: case 'h':
! 1057: /* Hello interval */
! 1058: i++;
! 1059: vl_config.hello_interval = strtol (argv[i], NULL, 10);
! 1060: if (vl_config.hello_interval < 0)
! 1061: return CMD_WARNING;
! 1062: break;
! 1063:
! 1064: case 'r':
! 1065: /* Retransmit Interval */
! 1066: i++;
! 1067: vl_config.retransmit_interval = strtol (argv[i], NULL, 10);
! 1068: if (vl_config.retransmit_interval < 0)
! 1069: return CMD_WARNING;
! 1070: break;
! 1071:
! 1072: case 't':
! 1073: /* Transmit Delay */
! 1074: i++;
! 1075: vl_config.transmit_delay = strtol (argv[i], NULL, 10);
! 1076: if (vl_config.transmit_delay < 0)
! 1077: return CMD_WARNING;
! 1078: break;
! 1079:
! 1080: case 'd':
! 1081: /* Dead Interval */
! 1082: i++;
! 1083: vl_config.dead_interval = strtol (argv[i], NULL, 10);
! 1084: if (vl_config.dead_interval < 0)
! 1085: return CMD_WARNING;
! 1086: break;
! 1087: }
! 1088: }
! 1089:
! 1090:
! 1091: /* Action configuration */
! 1092:
! 1093: return ospf_vl_set (ospf, &vl_config);
! 1094:
! 1095: }
! 1096:
! 1097: DEFUN (no_ospf_area_vlink,
! 1098: no_ospf_area_vlink_cmd,
! 1099: "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D",
! 1100: NO_STR
! 1101: VLINK_HELPSTR_IPADDR)
! 1102: {
! 1103: struct ospf *ospf = vty->index;
! 1104: struct ospf_area *area;
! 1105: struct ospf_vl_config_data vl_config;
! 1106: struct ospf_vl_data *vl_data = NULL;
! 1107: char auth_key[OSPF_AUTH_SIMPLE_SIZE+1];
! 1108: int i;
! 1109: int ret, format;
! 1110:
! 1111: ospf_vl_config_data_init(&vl_config, vty);
! 1112:
! 1113: ret = ospf_str2area_id (argv[0], &vl_config.area_id, &format);
! 1114: if (ret < 0)
! 1115: {
! 1116: vty_out (vty, "OSPF area ID is invalid%s", VTY_NEWLINE);
! 1117: return CMD_WARNING;
! 1118: }
! 1119:
! 1120: area = ospf_area_lookup_by_area_id (ospf, vl_config.area_id);
! 1121: if (!area)
! 1122: {
! 1123: vty_out (vty, "Area does not exist%s", VTY_NEWLINE);
! 1124: return CMD_WARNING;
! 1125: }
! 1126:
! 1127: ret = inet_aton (argv[1], &vl_config.vl_peer);
! 1128: if (! ret)
! 1129: {
! 1130: vty_out (vty, "Please specify valid Router ID as a.b.c.d%s",
! 1131: VTY_NEWLINE);
! 1132: return CMD_WARNING;
! 1133: }
! 1134:
! 1135: if (argc <=2)
! 1136: {
! 1137: /* Basic VLink no command */
! 1138: /* Thats all folks! - BUGS B. strikes again!!!*/
! 1139: if ((vl_data = ospf_vl_lookup (ospf, area, vl_config.vl_peer)))
! 1140: ospf_vl_delete (ospf, vl_data);
! 1141:
! 1142: ospf_area_check_free (ospf, vl_config.area_id);
! 1143:
! 1144: return CMD_SUCCESS;
! 1145: }
! 1146:
! 1147: /* If we are down here, we are reseting parameters */
! 1148:
! 1149: /* Deal with other parameters */
! 1150: for (i=2; i < argc; i++)
! 1151: {
! 1152: /* vty_out (vty, "argv[%d] - %s%s", i, argv[i], VTY_NEWLINE); */
! 1153:
! 1154: switch (argv[i][0])
! 1155: {
! 1156:
! 1157: case 'a':
! 1158: if (i > 2 || strncmp (argv[i], "authentication-", 15) == 0)
! 1159: {
! 1160: /* authentication-key - this option can occur anywhere on
! 1161: command line. At start of command line
! 1162: must check for authentication option. */
! 1163: memset (auth_key, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
! 1164: vl_config.auth_key = auth_key;
! 1165: }
! 1166: else if (strncmp (argv[i], "authentication", 14) == 0)
! 1167: {
! 1168: /* authentication - this option can only occur at start
! 1169: of command line */
! 1170: vl_config.auth_type = OSPF_AUTH_NOTSET;
! 1171: }
! 1172: break;
! 1173:
! 1174: case 'm':
! 1175: /* message-digest-key */
! 1176: /* Delete one key */
! 1177: i++;
! 1178: vl_config.crypto_key_id = strtol (argv[i], NULL, 10);
! 1179: if (vl_config.crypto_key_id < 0)
! 1180: return CMD_WARNING;
! 1181: vl_config.md5_key = NULL;
! 1182: break;
! 1183:
! 1184: case 'h':
! 1185: /* Hello interval */
! 1186: vl_config.hello_interval = OSPF_HELLO_INTERVAL_DEFAULT;
! 1187: break;
! 1188:
! 1189: case 'r':
! 1190: /* Retransmit Interval */
! 1191: vl_config.retransmit_interval = OSPF_RETRANSMIT_INTERVAL_DEFAULT;
! 1192: break;
! 1193:
! 1194: case 't':
! 1195: /* Transmit Delay */
! 1196: vl_config.transmit_delay = OSPF_TRANSMIT_DELAY_DEFAULT;
! 1197: break;
! 1198:
! 1199: case 'd':
! 1200: /* Dead Interval */
! 1201: i++;
! 1202: vl_config.dead_interval = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
! 1203: break;
! 1204: }
! 1205: }
! 1206:
! 1207:
! 1208: /* Action configuration */
! 1209:
! 1210: return ospf_vl_set (ospf, &vl_config);
! 1211: }
! 1212:
! 1213: ALIAS (ospf_area_vlink,
! 1214: ospf_area_vlink_param1_cmd,
! 1215: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1216: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
! 1217: VLINK_HELPSTR_IPADDR
! 1218: VLINK_HELPSTR_TIME_PARAM)
! 1219:
! 1220: ALIAS (no_ospf_area_vlink,
! 1221: no_ospf_area_vlink_param1_cmd,
! 1222: "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1223: "(hello-interval|retransmit-interval|transmit-delay|dead-interval)",
! 1224: NO_STR
! 1225: VLINK_HELPSTR_IPADDR
! 1226: VLINK_HELPSTR_TIME_PARAM)
! 1227:
! 1228: ALIAS (ospf_area_vlink,
! 1229: ospf_area_vlink_param2_cmd,
! 1230: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1231: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
! 1232: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
! 1233: VLINK_HELPSTR_IPADDR
! 1234: VLINK_HELPSTR_TIME_PARAM
! 1235: VLINK_HELPSTR_TIME_PARAM)
! 1236:
! 1237: ALIAS (no_ospf_area_vlink,
! 1238: no_ospf_area_vlink_param2_cmd,
! 1239: "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1240: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) "
! 1241: "(hello-interval|retransmit-interval|transmit-delay|dead-interval)",
! 1242: NO_STR
! 1243: VLINK_HELPSTR_IPADDR
! 1244: VLINK_HELPSTR_TIME_PARAM
! 1245: VLINK_HELPSTR_TIME_PARAM)
! 1246:
! 1247: ALIAS (ospf_area_vlink,
! 1248: ospf_area_vlink_param3_cmd,
! 1249: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1250: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
! 1251: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
! 1252: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
! 1253: VLINK_HELPSTR_IPADDR
! 1254: VLINK_HELPSTR_TIME_PARAM
! 1255: VLINK_HELPSTR_TIME_PARAM
! 1256: VLINK_HELPSTR_TIME_PARAM)
! 1257:
! 1258: ALIAS (no_ospf_area_vlink,
! 1259: no_ospf_area_vlink_param3_cmd,
! 1260: "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1261: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) "
! 1262: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) "
! 1263: "(hello-interval|retransmit-interval|transmit-delay|dead-interval)",
! 1264: NO_STR
! 1265: VLINK_HELPSTR_IPADDR
! 1266: VLINK_HELPSTR_TIME_PARAM
! 1267: VLINK_HELPSTR_TIME_PARAM
! 1268: VLINK_HELPSTR_TIME_PARAM)
! 1269:
! 1270: ALIAS (ospf_area_vlink,
! 1271: ospf_area_vlink_param4_cmd,
! 1272: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1273: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
! 1274: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
! 1275: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
! 1276: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
! 1277: VLINK_HELPSTR_IPADDR
! 1278: VLINK_HELPSTR_TIME_PARAM
! 1279: VLINK_HELPSTR_TIME_PARAM
! 1280: VLINK_HELPSTR_TIME_PARAM
! 1281: VLINK_HELPSTR_TIME_PARAM)
! 1282:
! 1283: ALIAS (no_ospf_area_vlink,
! 1284: no_ospf_area_vlink_param4_cmd,
! 1285: "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1286: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) "
! 1287: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) "
! 1288: "(hello-interval|retransmit-interval|transmit-delay|dead-interval) "
! 1289: "(hello-interval|retransmit-interval|transmit-delay|dead-interval)",
! 1290: NO_STR
! 1291: VLINK_HELPSTR_IPADDR
! 1292: VLINK_HELPSTR_TIME_PARAM
! 1293: VLINK_HELPSTR_TIME_PARAM
! 1294: VLINK_HELPSTR_TIME_PARAM
! 1295: VLINK_HELPSTR_TIME_PARAM)
! 1296:
! 1297: ALIAS (ospf_area_vlink,
! 1298: ospf_area_vlink_authtype_args_cmd,
! 1299: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1300: "(authentication|) (message-digest|null)",
! 1301: VLINK_HELPSTR_IPADDR
! 1302: VLINK_HELPSTR_AUTHTYPE_ALL)
! 1303:
! 1304: ALIAS (ospf_area_vlink,
! 1305: ospf_area_vlink_authtype_cmd,
! 1306: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1307: "(authentication|)",
! 1308: VLINK_HELPSTR_IPADDR
! 1309: VLINK_HELPSTR_AUTHTYPE_SIMPLE)
! 1310:
! 1311: ALIAS (no_ospf_area_vlink,
! 1312: no_ospf_area_vlink_authtype_cmd,
! 1313: "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1314: "(authentication|)",
! 1315: NO_STR
! 1316: VLINK_HELPSTR_IPADDR
! 1317: VLINK_HELPSTR_AUTHTYPE_SIMPLE)
! 1318:
! 1319: ALIAS (ospf_area_vlink,
! 1320: ospf_area_vlink_md5_cmd,
! 1321: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1322: "(message-digest-key|) <1-255> md5 KEY",
! 1323: VLINK_HELPSTR_IPADDR
! 1324: VLINK_HELPSTR_AUTH_MD5)
! 1325:
! 1326: ALIAS (no_ospf_area_vlink,
! 1327: no_ospf_area_vlink_md5_cmd,
! 1328: "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1329: "(message-digest-key|) <1-255>",
! 1330: NO_STR
! 1331: VLINK_HELPSTR_IPADDR
! 1332: VLINK_HELPSTR_AUTH_MD5)
! 1333:
! 1334: ALIAS (ospf_area_vlink,
! 1335: ospf_area_vlink_authkey_cmd,
! 1336: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1337: "(authentication-key|) AUTH_KEY",
! 1338: VLINK_HELPSTR_IPADDR
! 1339: VLINK_HELPSTR_AUTH_SIMPLE)
! 1340:
! 1341: ALIAS (no_ospf_area_vlink,
! 1342: no_ospf_area_vlink_authkey_cmd,
! 1343: "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1344: "(authentication-key|)",
! 1345: NO_STR
! 1346: VLINK_HELPSTR_IPADDR
! 1347: VLINK_HELPSTR_AUTH_SIMPLE)
! 1348:
! 1349: ALIAS (ospf_area_vlink,
! 1350: ospf_area_vlink_authtype_args_authkey_cmd,
! 1351: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1352: "(authentication|) (message-digest|null) "
! 1353: "(authentication-key|) AUTH_KEY",
! 1354: VLINK_HELPSTR_IPADDR
! 1355: VLINK_HELPSTR_AUTHTYPE_ALL
! 1356: VLINK_HELPSTR_AUTH_SIMPLE)
! 1357:
! 1358: ALIAS (ospf_area_vlink,
! 1359: ospf_area_vlink_authtype_authkey_cmd,
! 1360: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1361: "(authentication|) "
! 1362: "(authentication-key|) AUTH_KEY",
! 1363: VLINK_HELPSTR_IPADDR
! 1364: VLINK_HELPSTR_AUTHTYPE_SIMPLE
! 1365: VLINK_HELPSTR_AUTH_SIMPLE)
! 1366:
! 1367: ALIAS (no_ospf_area_vlink,
! 1368: no_ospf_area_vlink_authtype_authkey_cmd,
! 1369: "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1370: "(authentication|) "
! 1371: "(authentication-key|)",
! 1372: NO_STR
! 1373: VLINK_HELPSTR_IPADDR
! 1374: VLINK_HELPSTR_AUTHTYPE_SIMPLE
! 1375: VLINK_HELPSTR_AUTH_SIMPLE)
! 1376:
! 1377: ALIAS (ospf_area_vlink,
! 1378: ospf_area_vlink_authtype_args_md5_cmd,
! 1379: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1380: "(authentication|) (message-digest|null) "
! 1381: "(message-digest-key|) <1-255> md5 KEY",
! 1382: VLINK_HELPSTR_IPADDR
! 1383: VLINK_HELPSTR_AUTHTYPE_ALL
! 1384: VLINK_HELPSTR_AUTH_MD5)
! 1385:
! 1386: ALIAS (ospf_area_vlink,
! 1387: ospf_area_vlink_authtype_md5_cmd,
! 1388: "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1389: "(authentication|) "
! 1390: "(message-digest-key|) <1-255> md5 KEY",
! 1391: VLINK_HELPSTR_IPADDR
! 1392: VLINK_HELPSTR_AUTHTYPE_SIMPLE
! 1393: VLINK_HELPSTR_AUTH_MD5)
! 1394:
! 1395: ALIAS (no_ospf_area_vlink,
! 1396: no_ospf_area_vlink_authtype_md5_cmd,
! 1397: "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
! 1398: "(authentication|) "
! 1399: "(message-digest-key|)",
! 1400: NO_STR
! 1401: VLINK_HELPSTR_IPADDR
! 1402: VLINK_HELPSTR_AUTHTYPE_SIMPLE
! 1403: VLINK_HELPSTR_AUTH_MD5)
! 1404:
! 1405:
! 1406: DEFUN (ospf_area_shortcut,
! 1407: ospf_area_shortcut_cmd,
! 1408: "area (A.B.C.D|<0-4294967295>) shortcut (default|enable|disable)",
! 1409: "OSPF area parameters\n"
! 1410: "OSPF area ID in IP address format\n"
! 1411: "OSPF area ID as a decimal value\n"
! 1412: "Configure the area's shortcutting mode\n"
! 1413: "Set default shortcutting behavior\n"
! 1414: "Enable shortcutting through the area\n"
! 1415: "Disable shortcutting through the area\n")
! 1416: {
! 1417: struct ospf *ospf = vty->index;
! 1418: struct ospf_area *area;
! 1419: struct in_addr area_id;
! 1420: int mode;
! 1421: int format;
! 1422:
! 1423: VTY_GET_OSPF_AREA_ID_NO_BB ("shortcut", area_id, format, argv[0]);
! 1424:
! 1425: area = ospf_area_get (ospf, area_id, format);
! 1426:
! 1427: if (strncmp (argv[1], "de", 2) == 0)
! 1428: mode = OSPF_SHORTCUT_DEFAULT;
! 1429: else if (strncmp (argv[1], "di", 2) == 0)
! 1430: mode = OSPF_SHORTCUT_DISABLE;
! 1431: else if (strncmp (argv[1], "e", 1) == 0)
! 1432: mode = OSPF_SHORTCUT_ENABLE;
! 1433: else
! 1434: return CMD_WARNING;
! 1435:
! 1436: ospf_area_shortcut_set (ospf, area, mode);
! 1437:
! 1438: if (ospf->abr_type != OSPF_ABR_SHORTCUT)
! 1439: vty_out (vty, "Shortcut area setting will take effect "
! 1440: "only when the router is configured as Shortcut ABR%s",
! 1441: VTY_NEWLINE);
! 1442:
! 1443: return CMD_SUCCESS;
! 1444: }
! 1445:
! 1446: DEFUN (no_ospf_area_shortcut,
! 1447: no_ospf_area_shortcut_cmd,
! 1448: "no area (A.B.C.D|<0-4294967295>) shortcut (enable|disable)",
! 1449: NO_STR
! 1450: "OSPF area parameters\n"
! 1451: "OSPF area ID in IP address format\n"
! 1452: "OSPF area ID as a decimal value\n"
! 1453: "Deconfigure the area's shortcutting mode\n"
! 1454: "Deconfigure enabled shortcutting through the area\n"
! 1455: "Deconfigure disabled shortcutting through the area\n")
! 1456: {
! 1457: struct ospf *ospf = vty->index;
! 1458: struct ospf_area *area;
! 1459: struct in_addr area_id;
! 1460: int format;
! 1461:
! 1462: VTY_GET_OSPF_AREA_ID_NO_BB ("shortcut", area_id, format, argv[0]);
! 1463:
! 1464: area = ospf_area_lookup_by_area_id (ospf, area_id);
! 1465: if (!area)
! 1466: return CMD_SUCCESS;
! 1467:
! 1468: ospf_area_shortcut_unset (ospf, area);
! 1469:
! 1470: return CMD_SUCCESS;
! 1471: }
! 1472:
! 1473:
! 1474: DEFUN (ospf_area_stub,
! 1475: ospf_area_stub_cmd,
! 1476: "area (A.B.C.D|<0-4294967295>) stub",
! 1477: "OSPF area parameters\n"
! 1478: "OSPF area ID in IP address format\n"
! 1479: "OSPF area ID as a decimal value\n"
! 1480: "Configure OSPF area as stub\n")
! 1481: {
! 1482: struct ospf *ospf = vty->index;
! 1483: struct in_addr area_id;
! 1484: int ret, format;
! 1485:
! 1486: VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[0]);
! 1487:
! 1488: ret = ospf_area_stub_set (ospf, area_id);
! 1489: if (ret == 0)
! 1490: {
! 1491: vty_out (vty, "First deconfigure all virtual link through this area%s",
! 1492: VTY_NEWLINE);
! 1493: return CMD_WARNING;
! 1494: }
! 1495:
! 1496: ospf_area_no_summary_unset (ospf, area_id);
! 1497:
! 1498: return CMD_SUCCESS;
! 1499: }
! 1500:
! 1501: DEFUN (ospf_area_stub_no_summary,
! 1502: ospf_area_stub_no_summary_cmd,
! 1503: "area (A.B.C.D|<0-4294967295>) stub no-summary",
! 1504: "OSPF stub parameters\n"
! 1505: "OSPF area ID in IP address format\n"
! 1506: "OSPF area ID as a decimal value\n"
! 1507: "Configure OSPF area as stub\n"
! 1508: "Do not inject inter-area routes into stub\n")
! 1509: {
! 1510: struct ospf *ospf = vty->index;
! 1511: struct in_addr area_id;
! 1512: int ret, format;
! 1513:
! 1514: VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[0]);
! 1515:
! 1516: ret = ospf_area_stub_set (ospf, area_id);
! 1517: if (ret == 0)
! 1518: {
! 1519: vty_out (vty, "%% Area cannot be stub as it contains a virtual link%s",
! 1520: VTY_NEWLINE);
! 1521: return CMD_WARNING;
! 1522: }
! 1523:
! 1524: ospf_area_no_summary_set (ospf, area_id);
! 1525:
! 1526: return CMD_SUCCESS;
! 1527: }
! 1528:
! 1529: DEFUN (no_ospf_area_stub,
! 1530: no_ospf_area_stub_cmd,
! 1531: "no area (A.B.C.D|<0-4294967295>) stub",
! 1532: NO_STR
! 1533: "OSPF area parameters\n"
! 1534: "OSPF area ID in IP address format\n"
! 1535: "OSPF area ID as a decimal value\n"
! 1536: "Configure OSPF area as stub\n")
! 1537: {
! 1538: struct ospf *ospf = vty->index;
! 1539: struct in_addr area_id;
! 1540: int format;
! 1541:
! 1542: VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[0]);
! 1543:
! 1544: ospf_area_stub_unset (ospf, area_id);
! 1545: ospf_area_no_summary_unset (ospf, area_id);
! 1546:
! 1547: return CMD_SUCCESS;
! 1548: }
! 1549:
! 1550: DEFUN (no_ospf_area_stub_no_summary,
! 1551: no_ospf_area_stub_no_summary_cmd,
! 1552: "no area (A.B.C.D|<0-4294967295>) stub no-summary",
! 1553: NO_STR
! 1554: "OSPF area parameters\n"
! 1555: "OSPF area ID in IP address format\n"
! 1556: "OSPF area ID as a decimal value\n"
! 1557: "Configure OSPF area as stub\n"
! 1558: "Do not inject inter-area routes into area\n")
! 1559: {
! 1560: struct ospf *ospf = vty->index;
! 1561: struct in_addr area_id;
! 1562: int format;
! 1563:
! 1564: VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[0]);
! 1565: ospf_area_no_summary_unset (ospf, area_id);
! 1566:
! 1567: return CMD_SUCCESS;
! 1568: }
! 1569:
! 1570: static int
! 1571: ospf_area_nssa_cmd_handler (struct vty *vty, int argc, const char *argv[],
! 1572: int nosum)
! 1573: {
! 1574: struct ospf *ospf = vty->index;
! 1575: struct in_addr area_id;
! 1576: int ret, format;
! 1577:
! 1578: VTY_GET_OSPF_AREA_ID_NO_BB ("NSSA", area_id, format, argv[0]);
! 1579:
! 1580: ret = ospf_area_nssa_set (ospf, area_id);
! 1581: if (ret == 0)
! 1582: {
! 1583: vty_out (vty, "%% Area cannot be nssa as it contains a virtual link%s",
! 1584: VTY_NEWLINE);
! 1585: return CMD_WARNING;
! 1586: }
! 1587:
! 1588: if (argc > 1)
! 1589: {
! 1590: if (strncmp (argv[1], "translate-c", 11) == 0)
! 1591: ospf_area_nssa_translator_role_set (ospf, area_id,
! 1592: OSPF_NSSA_ROLE_CANDIDATE);
! 1593: else if (strncmp (argv[1], "translate-n", 11) == 0)
! 1594: ospf_area_nssa_translator_role_set (ospf, area_id,
! 1595: OSPF_NSSA_ROLE_NEVER);
! 1596: else if (strncmp (argv[1], "translate-a", 11) == 0)
! 1597: ospf_area_nssa_translator_role_set (ospf, area_id,
! 1598: OSPF_NSSA_ROLE_ALWAYS);
! 1599: }
! 1600: else
! 1601: {
! 1602: ospf_area_nssa_translator_role_set (ospf, area_id,
! 1603: OSPF_NSSA_ROLE_CANDIDATE);
! 1604: }
! 1605:
! 1606: if (nosum)
! 1607: ospf_area_no_summary_set (ospf, area_id);
! 1608: else
! 1609: ospf_area_no_summary_unset (ospf, area_id);
! 1610:
! 1611: ospf_schedule_abr_task (ospf);
! 1612:
! 1613: return CMD_SUCCESS;
! 1614: }
! 1615:
! 1616: DEFUN (ospf_area_nssa_translate_no_summary,
! 1617: ospf_area_nssa_translate_no_summary_cmd,
! 1618: "area (A.B.C.D|<0-4294967295>) nssa (translate-candidate|translate-never|translate-always) no-summary",
! 1619: "OSPF area parameters\n"
! 1620: "OSPF area ID in IP address format\n"
! 1621: "OSPF area ID as a decimal value\n"
! 1622: "Configure OSPF area as nssa\n"
! 1623: "Configure NSSA-ABR for translate election (default)\n"
! 1624: "Configure NSSA-ABR to never translate\n"
! 1625: "Configure NSSA-ABR to always translate\n"
! 1626: "Do not inject inter-area routes into nssa\n")
! 1627: {
! 1628: return ospf_area_nssa_cmd_handler (vty, argc, argv, 1);
! 1629: }
! 1630:
! 1631: DEFUN (ospf_area_nssa_translate,
! 1632: ospf_area_nssa_translate_cmd,
! 1633: "area (A.B.C.D|<0-4294967295>) nssa (translate-candidate|translate-never|translate-always)",
! 1634: "OSPF area parameters\n"
! 1635: "OSPF area ID in IP address format\n"
! 1636: "OSPF area ID as a decimal value\n"
! 1637: "Configure OSPF area as nssa\n"
! 1638: "Configure NSSA-ABR for translate election (default)\n"
! 1639: "Configure NSSA-ABR to never translate\n"
! 1640: "Configure NSSA-ABR to always translate\n")
! 1641: {
! 1642: return ospf_area_nssa_cmd_handler (vty, argc, argv, 0);
! 1643: }
! 1644:
! 1645: DEFUN (ospf_area_nssa,
! 1646: ospf_area_nssa_cmd,
! 1647: "area (A.B.C.D|<0-4294967295>) nssa",
! 1648: "OSPF area parameters\n"
! 1649: "OSPF area ID in IP address format\n"
! 1650: "OSPF area ID as a decimal value\n"
! 1651: "Configure OSPF area as nssa\n")
! 1652: {
! 1653: return ospf_area_nssa_cmd_handler (vty, argc, argv, 0);
! 1654: }
! 1655:
! 1656: DEFUN (ospf_area_nssa_no_summary,
! 1657: ospf_area_nssa_no_summary_cmd,
! 1658: "area (A.B.C.D|<0-4294967295>) nssa no-summary",
! 1659: "OSPF area parameters\n"
! 1660: "OSPF area ID in IP address format\n"
! 1661: "OSPF area ID as a decimal value\n"
! 1662: "Configure OSPF area as nssa\n"
! 1663: "Do not inject inter-area routes into nssa\n")
! 1664: {
! 1665: return ospf_area_nssa_cmd_handler (vty, argc, argv, 1);
! 1666: }
! 1667:
! 1668: DEFUN (no_ospf_area_nssa,
! 1669: no_ospf_area_nssa_cmd,
! 1670: "no area (A.B.C.D|<0-4294967295>) nssa",
! 1671: NO_STR
! 1672: "OSPF area parameters\n"
! 1673: "OSPF area ID in IP address format\n"
! 1674: "OSPF area ID as a decimal value\n"
! 1675: "Configure OSPF area as nssa\n")
! 1676: {
! 1677: struct ospf *ospf = vty->index;
! 1678: struct in_addr area_id;
! 1679: int format;
! 1680:
! 1681: VTY_GET_OSPF_AREA_ID_NO_BB ("NSSA", area_id, format, argv[0]);
! 1682:
! 1683: ospf_area_nssa_unset (ospf, area_id);
! 1684: ospf_area_no_summary_unset (ospf, area_id);
! 1685:
! 1686: ospf_schedule_abr_task (ospf);
! 1687:
! 1688: return CMD_SUCCESS;
! 1689: }
! 1690:
! 1691: DEFUN (no_ospf_area_nssa_no_summary,
! 1692: no_ospf_area_nssa_no_summary_cmd,
! 1693: "no area (A.B.C.D|<0-4294967295>) nssa no-summary",
! 1694: NO_STR
! 1695: "OSPF area parameters\n"
! 1696: "OSPF area ID in IP address format\n"
! 1697: "OSPF area ID as a decimal value\n"
! 1698: "Configure OSPF area as nssa\n"
! 1699: "Do not inject inter-area routes into nssa\n")
! 1700: {
! 1701: struct ospf *ospf = vty->index;
! 1702: struct in_addr area_id;
! 1703: int format;
! 1704:
! 1705: VTY_GET_OSPF_AREA_ID_NO_BB ("NSSA", area_id, format, argv[0]);
! 1706: ospf_area_no_summary_unset (ospf, area_id);
! 1707:
! 1708: return CMD_SUCCESS;
! 1709: }
! 1710:
! 1711: DEFUN (ospf_area_default_cost,
! 1712: ospf_area_default_cost_cmd,
! 1713: "area (A.B.C.D|<0-4294967295>) default-cost <0-16777215>",
! 1714: "OSPF area parameters\n"
! 1715: "OSPF area ID in IP address format\n"
! 1716: "OSPF area ID as a decimal value\n"
! 1717: "Set the summary-default cost of a NSSA or stub area\n"
! 1718: "Stub's advertised default summary cost\n")
! 1719: {
! 1720: struct ospf *ospf = vty->index;
! 1721: struct ospf_area *area;
! 1722: struct in_addr area_id;
! 1723: u_int32_t cost;
! 1724: int format;
! 1725: struct prefix_ipv4 p;
! 1726:
! 1727: VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id, format, argv[0]);
! 1728: VTY_GET_INTEGER_RANGE ("stub default cost", cost, argv[1], 0, 16777215);
! 1729:
! 1730: area = ospf_area_get (ospf, area_id, format);
! 1731:
! 1732: if (area->external_routing == OSPF_AREA_DEFAULT)
! 1733: {
! 1734: vty_out (vty, "The area is neither stub, nor NSSA%s", VTY_NEWLINE);
! 1735: return CMD_WARNING;
! 1736: }
! 1737:
! 1738: area->default_cost = cost;
! 1739:
! 1740: p.family = AF_INET;
! 1741: p.prefix.s_addr = OSPF_DEFAULT_DESTINATION;
! 1742: p.prefixlen = 0;
! 1743: if (IS_DEBUG_OSPF_EVENT)
! 1744: zlog_debug ("ospf_abr_announce_stub_defaults(): "
! 1745: "announcing 0.0.0.0/0 to area %s",
! 1746: inet_ntoa (area->area_id));
! 1747: ospf_abr_announce_network_to_area (&p, area->default_cost, area);
! 1748:
! 1749: return CMD_SUCCESS;
! 1750: }
! 1751:
! 1752: DEFUN (no_ospf_area_default_cost,
! 1753: no_ospf_area_default_cost_cmd,
! 1754: "no area (A.B.C.D|<0-4294967295>) default-cost <0-16777215>",
! 1755: NO_STR
! 1756: "OSPF area parameters\n"
! 1757: "OSPF area ID in IP address format\n"
! 1758: "OSPF area ID as a decimal value\n"
! 1759: "Set the summary-default cost of a NSSA or stub area\n"
! 1760: "Stub's advertised default summary cost\n")
! 1761: {
! 1762: struct ospf *ospf = vty->index;
! 1763: struct ospf_area *area;
! 1764: struct in_addr area_id;
! 1765: u_int32_t cost;
! 1766: int format;
! 1767: struct prefix_ipv4 p;
! 1768:
! 1769: VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id, format, argv[0]);
! 1770: VTY_GET_INTEGER_RANGE ("stub default cost", cost, argv[1], 0, 16777215);
! 1771:
! 1772: area = ospf_area_lookup_by_area_id (ospf, area_id);
! 1773: if (area == NULL)
! 1774: return CMD_SUCCESS;
! 1775:
! 1776: if (area->external_routing == OSPF_AREA_DEFAULT)
! 1777: {
! 1778: vty_out (vty, "The area is neither stub, nor NSSA%s", VTY_NEWLINE);
! 1779: return CMD_WARNING;
! 1780: }
! 1781:
! 1782: area->default_cost = 1;
! 1783:
! 1784: p.family = AF_INET;
! 1785: p.prefix.s_addr = OSPF_DEFAULT_DESTINATION;
! 1786: p.prefixlen = 0;
! 1787: if (IS_DEBUG_OSPF_EVENT)
! 1788: zlog_debug ("ospf_abr_announce_stub_defaults(): "
! 1789: "announcing 0.0.0.0/0 to area %s",
! 1790: inet_ntoa (area->area_id));
! 1791: ospf_abr_announce_network_to_area (&p, area->default_cost, area);
! 1792:
! 1793:
! 1794: ospf_area_check_free (ospf, area_id);
! 1795:
! 1796: return CMD_SUCCESS;
! 1797: }
! 1798:
! 1799: DEFUN (ospf_area_export_list,
! 1800: ospf_area_export_list_cmd,
! 1801: "area (A.B.C.D|<0-4294967295>) export-list NAME",
! 1802: "OSPF area parameters\n"
! 1803: "OSPF area ID in IP address format\n"
! 1804: "OSPF area ID as a decimal value\n"
! 1805: "Set the filter for networks announced to other areas\n"
! 1806: "Name of the access-list\n")
! 1807: {
! 1808: struct ospf *ospf = vty->index;
! 1809: struct ospf_area *area;
! 1810: struct in_addr area_id;
! 1811: int format;
! 1812:
! 1813: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 1814:
! 1815: area = ospf_area_get (ospf, area_id, format);
! 1816: ospf_area_export_list_set (ospf, area, argv[1]);
! 1817:
! 1818: return CMD_SUCCESS;
! 1819: }
! 1820:
! 1821: DEFUN (no_ospf_area_export_list,
! 1822: no_ospf_area_export_list_cmd,
! 1823: "no area (A.B.C.D|<0-4294967295>) export-list NAME",
! 1824: NO_STR
! 1825: "OSPF area parameters\n"
! 1826: "OSPF area ID in IP address format\n"
! 1827: "OSPF area ID as a decimal value\n"
! 1828: "Unset the filter for networks announced to other areas\n"
! 1829: "Name of the access-list\n")
! 1830: {
! 1831: struct ospf *ospf = vty->index;
! 1832: struct ospf_area *area;
! 1833: struct in_addr area_id;
! 1834: int format;
! 1835:
! 1836: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 1837:
! 1838: area = ospf_area_lookup_by_area_id (ospf, area_id);
! 1839: if (area == NULL)
! 1840: return CMD_SUCCESS;
! 1841:
! 1842: ospf_area_export_list_unset (ospf, area);
! 1843:
! 1844: return CMD_SUCCESS;
! 1845: }
! 1846:
! 1847:
! 1848: DEFUN (ospf_area_import_list,
! 1849: ospf_area_import_list_cmd,
! 1850: "area (A.B.C.D|<0-4294967295>) import-list NAME",
! 1851: "OSPF area parameters\n"
! 1852: "OSPF area ID in IP address format\n"
! 1853: "OSPF area ID as a decimal value\n"
! 1854: "Set the filter for networks from other areas announced to the specified one\n"
! 1855: "Name of the access-list\n")
! 1856: {
! 1857: struct ospf *ospf = vty->index;
! 1858: struct ospf_area *area;
! 1859: struct in_addr area_id;
! 1860: int format;
! 1861:
! 1862: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 1863:
! 1864: area = ospf_area_get (ospf, area_id, format);
! 1865: ospf_area_import_list_set (ospf, area, argv[1]);
! 1866:
! 1867: return CMD_SUCCESS;
! 1868: }
! 1869:
! 1870: DEFUN (no_ospf_area_import_list,
! 1871: no_ospf_area_import_list_cmd,
! 1872: "no area (A.B.C.D|<0-4294967295>) import-list NAME",
! 1873: NO_STR
! 1874: "OSPF area parameters\n"
! 1875: "OSPF area ID in IP address format\n"
! 1876: "OSPF area ID as a decimal value\n"
! 1877: "Unset the filter for networks announced to other areas\n"
! 1878: "Name of the access-list\n")
! 1879: {
! 1880: struct ospf *ospf = vty->index;
! 1881: struct ospf_area *area;
! 1882: struct in_addr area_id;
! 1883: int format;
! 1884:
! 1885: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 1886:
! 1887: area = ospf_area_lookup_by_area_id (ospf, area_id);
! 1888: if (area == NULL)
! 1889: return CMD_SUCCESS;
! 1890:
! 1891: ospf_area_import_list_unset (ospf, area);
! 1892:
! 1893: return CMD_SUCCESS;
! 1894: }
! 1895:
! 1896: DEFUN (ospf_area_filter_list,
! 1897: ospf_area_filter_list_cmd,
! 1898: "area (A.B.C.D|<0-4294967295>) filter-list prefix WORD (in|out)",
! 1899: "OSPF area parameters\n"
! 1900: "OSPF area ID in IP address format\n"
! 1901: "OSPF area ID as a decimal value\n"
! 1902: "Filter networks between OSPF areas\n"
! 1903: "Filter prefixes between OSPF areas\n"
! 1904: "Name of an IP prefix-list\n"
! 1905: "Filter networks sent to this area\n"
! 1906: "Filter networks sent from this area\n")
! 1907: {
! 1908: struct ospf *ospf = vty->index;
! 1909: struct ospf_area *area;
! 1910: struct in_addr area_id;
! 1911: struct prefix_list *plist;
! 1912: int format;
! 1913:
! 1914: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 1915:
! 1916: area = ospf_area_get (ospf, area_id, format);
! 1917: plist = prefix_list_lookup (AFI_IP, argv[1]);
! 1918: if (strncmp (argv[2], "in", 2) == 0)
! 1919: {
! 1920: PREFIX_LIST_IN (area) = plist;
! 1921: if (PREFIX_NAME_IN (area))
! 1922: free (PREFIX_NAME_IN (area));
! 1923:
! 1924: PREFIX_NAME_IN (area) = strdup (argv[1]);
! 1925: ospf_schedule_abr_task (ospf);
! 1926: }
! 1927: else
! 1928: {
! 1929: PREFIX_LIST_OUT (area) = plist;
! 1930: if (PREFIX_NAME_OUT (area))
! 1931: free (PREFIX_NAME_OUT (area));
! 1932:
! 1933: PREFIX_NAME_OUT (area) = strdup (argv[1]);
! 1934: ospf_schedule_abr_task (ospf);
! 1935: }
! 1936:
! 1937: return CMD_SUCCESS;
! 1938: }
! 1939:
! 1940: DEFUN (no_ospf_area_filter_list,
! 1941: no_ospf_area_filter_list_cmd,
! 1942: "no area (A.B.C.D|<0-4294967295>) filter-list prefix WORD (in|out)",
! 1943: NO_STR
! 1944: "OSPF area parameters\n"
! 1945: "OSPF area ID in IP address format\n"
! 1946: "OSPF area ID as a decimal value\n"
! 1947: "Filter networks between OSPF areas\n"
! 1948: "Filter prefixes between OSPF areas\n"
! 1949: "Name of an IP prefix-list\n"
! 1950: "Filter networks sent to this area\n"
! 1951: "Filter networks sent from this area\n")
! 1952: {
! 1953: struct ospf *ospf = vty->index;
! 1954: struct ospf_area *area;
! 1955: struct in_addr area_id;
! 1956: struct prefix_list *plist;
! 1957: int format;
! 1958:
! 1959: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 1960:
! 1961: if ((area = ospf_area_lookup_by_area_id (ospf, area_id)) == NULL)
! 1962: return CMD_SUCCESS;
! 1963:
! 1964: plist = prefix_list_lookup (AFI_IP, argv[1]);
! 1965: if (strncmp (argv[2], "in", 2) == 0)
! 1966: {
! 1967: if (PREFIX_NAME_IN (area))
! 1968: if (strcmp (PREFIX_NAME_IN (area), argv[1]) != 0)
! 1969: return CMD_SUCCESS;
! 1970:
! 1971: PREFIX_LIST_IN (area) = NULL;
! 1972: if (PREFIX_NAME_IN (area))
! 1973: free (PREFIX_NAME_IN (area));
! 1974:
! 1975: PREFIX_NAME_IN (area) = NULL;
! 1976:
! 1977: ospf_schedule_abr_task (ospf);
! 1978: }
! 1979: else
! 1980: {
! 1981: if (PREFIX_NAME_OUT (area))
! 1982: if (strcmp (PREFIX_NAME_OUT (area), argv[1]) != 0)
! 1983: return CMD_SUCCESS;
! 1984:
! 1985: PREFIX_LIST_OUT (area) = NULL;
! 1986: if (PREFIX_NAME_OUT (area))
! 1987: free (PREFIX_NAME_OUT (area));
! 1988:
! 1989: PREFIX_NAME_OUT (area) = NULL;
! 1990:
! 1991: ospf_schedule_abr_task (ospf);
! 1992: }
! 1993:
! 1994: return CMD_SUCCESS;
! 1995: }
! 1996:
! 1997:
! 1998: DEFUN (ospf_area_authentication_message_digest,
! 1999: ospf_area_authentication_message_digest_cmd,
! 2000: "area (A.B.C.D|<0-4294967295>) authentication message-digest",
! 2001: "OSPF area parameters\n"
! 2002: "Enable authentication\n"
! 2003: "Use message-digest authentication\n")
! 2004: {
! 2005: struct ospf *ospf = vty->index;
! 2006: struct ospf_area *area;
! 2007: struct in_addr area_id;
! 2008: int format;
! 2009:
! 2010: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 2011:
! 2012: area = ospf_area_get (ospf, area_id, format);
! 2013: area->auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
! 2014:
! 2015: return CMD_SUCCESS;
! 2016: }
! 2017:
! 2018: DEFUN (ospf_area_authentication,
! 2019: ospf_area_authentication_cmd,
! 2020: "area (A.B.C.D|<0-4294967295>) authentication",
! 2021: "OSPF area parameters\n"
! 2022: "OSPF area ID in IP address format\n"
! 2023: "OSPF area ID as a decimal value\n"
! 2024: "Enable authentication\n")
! 2025: {
! 2026: struct ospf *ospf = vty->index;
! 2027: struct ospf_area *area;
! 2028: struct in_addr area_id;
! 2029: int format;
! 2030:
! 2031: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 2032:
! 2033: area = ospf_area_get (ospf, area_id, format);
! 2034: area->auth_type = OSPF_AUTH_SIMPLE;
! 2035:
! 2036: return CMD_SUCCESS;
! 2037: }
! 2038:
! 2039: DEFUN (no_ospf_area_authentication,
! 2040: no_ospf_area_authentication_cmd,
! 2041: "no area (A.B.C.D|<0-4294967295>) authentication",
! 2042: NO_STR
! 2043: "OSPF area parameters\n"
! 2044: "OSPF area ID in IP address format\n"
! 2045: "OSPF area ID as a decimal value\n"
! 2046: "Enable authentication\n")
! 2047: {
! 2048: struct ospf *ospf = vty->index;
! 2049: struct ospf_area *area;
! 2050: struct in_addr area_id;
! 2051: int format;
! 2052:
! 2053: VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
! 2054:
! 2055: area = ospf_area_lookup_by_area_id (ospf, area_id);
! 2056: if (area == NULL)
! 2057: return CMD_SUCCESS;
! 2058:
! 2059: area->auth_type = OSPF_AUTH_NULL;
! 2060:
! 2061: ospf_area_check_free (ospf, area_id);
! 2062:
! 2063: return CMD_SUCCESS;
! 2064: }
! 2065:
! 2066:
! 2067: DEFUN (ospf_abr_type,
! 2068: ospf_abr_type_cmd,
! 2069: "ospf abr-type (cisco|ibm|shortcut|standard)",
! 2070: "OSPF specific commands\n"
! 2071: "Set OSPF ABR type\n"
! 2072: "Alternative ABR, cisco implementation\n"
! 2073: "Alternative ABR, IBM implementation\n"
! 2074: "Shortcut ABR\n"
! 2075: "Standard behavior (RFC2328)\n")
! 2076: {
! 2077: struct ospf *ospf = vty->index;
! 2078: u_char abr_type = OSPF_ABR_UNKNOWN;
! 2079:
! 2080: if (strncmp (argv[0], "c", 1) == 0)
! 2081: abr_type = OSPF_ABR_CISCO;
! 2082: else if (strncmp (argv[0], "i", 1) == 0)
! 2083: abr_type = OSPF_ABR_IBM;
! 2084: else if (strncmp (argv[0], "sh", 2) == 0)
! 2085: abr_type = OSPF_ABR_SHORTCUT;
! 2086: else if (strncmp (argv[0], "st", 2) == 0)
! 2087: abr_type = OSPF_ABR_STAND;
! 2088: else
! 2089: return CMD_WARNING;
! 2090:
! 2091: /* If ABR type value is changed, schedule ABR task. */
! 2092: if (ospf->abr_type != abr_type)
! 2093: {
! 2094: ospf->abr_type = abr_type;
! 2095: ospf_schedule_abr_task (ospf);
! 2096: }
! 2097:
! 2098: return CMD_SUCCESS;
! 2099: }
! 2100:
! 2101: DEFUN (no_ospf_abr_type,
! 2102: no_ospf_abr_type_cmd,
! 2103: "no ospf abr-type (cisco|ibm|shortcut|standard)",
! 2104: NO_STR
! 2105: "OSPF specific commands\n"
! 2106: "Set OSPF ABR type\n"
! 2107: "Alternative ABR, cisco implementation\n"
! 2108: "Alternative ABR, IBM implementation\n"
! 2109: "Shortcut ABR\n")
! 2110: {
! 2111: struct ospf *ospf = vty->index;
! 2112: u_char abr_type = OSPF_ABR_UNKNOWN;
! 2113:
! 2114: if (strncmp (argv[0], "c", 1) == 0)
! 2115: abr_type = OSPF_ABR_CISCO;
! 2116: else if (strncmp (argv[0], "i", 1) == 0)
! 2117: abr_type = OSPF_ABR_IBM;
! 2118: else if (strncmp (argv[0], "sh", 2) == 0)
! 2119: abr_type = OSPF_ABR_SHORTCUT;
! 2120: else if (strncmp (argv[0], "st", 2) == 0)
! 2121: abr_type = OSPF_ABR_STAND;
! 2122: else
! 2123: return CMD_WARNING;
! 2124:
! 2125: /* If ABR type value is changed, schedule ABR task. */
! 2126: if (ospf->abr_type == abr_type)
! 2127: {
! 2128: ospf->abr_type = OSPF_ABR_DEFAULT;
! 2129: ospf_schedule_abr_task (ospf);
! 2130: }
! 2131:
! 2132: return CMD_SUCCESS;
! 2133: }
! 2134:
! 2135: DEFUN (ospf_log_adjacency_changes,
! 2136: ospf_log_adjacency_changes_cmd,
! 2137: "log-adjacency-changes",
! 2138: "Log changes in adjacency state\n")
! 2139: {
! 2140: struct ospf *ospf = vty->index;
! 2141:
! 2142: SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES);
! 2143: return CMD_SUCCESS;
! 2144: }
! 2145:
! 2146: DEFUN (ospf_log_adjacency_changes_detail,
! 2147: ospf_log_adjacency_changes_detail_cmd,
! 2148: "log-adjacency-changes detail",
! 2149: "Log changes in adjacency state\n"
! 2150: "Log all state changes\n")
! 2151: {
! 2152: struct ospf *ospf = vty->index;
! 2153:
! 2154: SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES);
! 2155: SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
! 2156: return CMD_SUCCESS;
! 2157: }
! 2158:
! 2159: DEFUN (no_ospf_log_adjacency_changes,
! 2160: no_ospf_log_adjacency_changes_cmd,
! 2161: "no log-adjacency-changes",
! 2162: NO_STR
! 2163: "Log changes in adjacency state\n")
! 2164: {
! 2165: struct ospf *ospf = vty->index;
! 2166:
! 2167: UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
! 2168: UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES);
! 2169: return CMD_SUCCESS;
! 2170: }
! 2171:
! 2172: DEFUN (no_ospf_log_adjacency_changes_detail,
! 2173: no_ospf_log_adjacency_changes_detail_cmd,
! 2174: "no log-adjacency-changes detail",
! 2175: NO_STR
! 2176: "Log changes in adjacency state\n"
! 2177: "Log all state changes\n")
! 2178: {
! 2179: struct ospf *ospf = vty->index;
! 2180:
! 2181: UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
! 2182: return CMD_SUCCESS;
! 2183: }
! 2184:
! 2185: DEFUN (ospf_compatible_rfc1583,
! 2186: ospf_compatible_rfc1583_cmd,
! 2187: "compatible rfc1583",
! 2188: "OSPF compatibility list\n"
! 2189: "compatible with RFC 1583\n")
! 2190: {
! 2191: struct ospf *ospf = vty->index;
! 2192:
! 2193: if (!CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE))
! 2194: {
! 2195: SET_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE);
! 2196: ospf_spf_calculate_schedule (ospf);
! 2197: }
! 2198: return CMD_SUCCESS;
! 2199: }
! 2200:
! 2201: DEFUN (no_ospf_compatible_rfc1583,
! 2202: no_ospf_compatible_rfc1583_cmd,
! 2203: "no compatible rfc1583",
! 2204: NO_STR
! 2205: "OSPF compatibility list\n"
! 2206: "compatible with RFC 1583\n")
! 2207: {
! 2208: struct ospf *ospf = vty->index;
! 2209:
! 2210: if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE))
! 2211: {
! 2212: UNSET_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE);
! 2213: ospf_spf_calculate_schedule (ospf);
! 2214: }
! 2215: return CMD_SUCCESS;
! 2216: }
! 2217:
! 2218: ALIAS (ospf_compatible_rfc1583,
! 2219: ospf_rfc1583_flag_cmd,
! 2220: "ospf rfc1583compatibility",
! 2221: "OSPF specific commands\n"
! 2222: "Enable the RFC1583Compatibility flag\n")
! 2223:
! 2224: ALIAS (no_ospf_compatible_rfc1583,
! 2225: no_ospf_rfc1583_flag_cmd,
! 2226: "no ospf rfc1583compatibility",
! 2227: NO_STR
! 2228: "OSPF specific commands\n"
! 2229: "Disable the RFC1583Compatibility flag\n")
! 2230:
! 2231: static int
! 2232: ospf_timers_spf_set (struct vty *vty, unsigned int delay,
! 2233: unsigned int hold,
! 2234: unsigned int max)
! 2235: {
! 2236: struct ospf *ospf = vty->index;
! 2237:
! 2238: ospf->spf_delay = delay;
! 2239: ospf->spf_holdtime = hold;
! 2240: ospf->spf_max_holdtime = max;
! 2241:
! 2242: return CMD_SUCCESS;
! 2243: }
! 2244:
! 2245: DEFUN (ospf_timers_throttle_spf,
! 2246: ospf_timers_throttle_spf_cmd,
! 2247: "timers throttle spf <0-600000> <0-600000> <0-600000>",
! 2248: "Adjust routing timers\n"
! 2249: "Throttling adaptive timer\n"
! 2250: "OSPF SPF timers\n"
! 2251: "Delay (msec) from first change received till SPF calculation\n"
! 2252: "Initial hold time (msec) between consecutive SPF calculations\n"
! 2253: "Maximum hold time (msec)\n")
! 2254: {
! 2255: unsigned int delay, hold, max;
! 2256:
! 2257: if (argc != 3)
! 2258: {
! 2259: vty_out (vty, "Insufficient arguments%s", VTY_NEWLINE);
! 2260: return CMD_WARNING;
! 2261: }
! 2262:
! 2263: VTY_GET_INTEGER_RANGE ("SPF delay timer", delay, argv[0], 0, 600000);
! 2264: VTY_GET_INTEGER_RANGE ("SPF hold timer", hold, argv[1], 0, 600000);
! 2265: VTY_GET_INTEGER_RANGE ("SPF max-hold timer", max, argv[2], 0, 600000);
! 2266:
! 2267: return ospf_timers_spf_set (vty, delay, hold, max);
! 2268: }
! 2269:
! 2270: DEFUN_DEPRECATED (ospf_timers_spf,
! 2271: ospf_timers_spf_cmd,
! 2272: "timers spf <0-4294967295> <0-4294967295>",
! 2273: "Adjust routing timers\n"
! 2274: "OSPF SPF timers\n"
! 2275: "Delay (s) between receiving a change to SPF calculation\n"
! 2276: "Hold time (s) between consecutive SPF calculations\n")
! 2277: {
! 2278: unsigned int delay, hold;
! 2279:
! 2280: if (argc != 2)
! 2281: {
! 2282: vty_out (vty, "Insufficient number of arguments%s", VTY_NEWLINE);
! 2283: return CMD_WARNING;
! 2284: }
! 2285:
! 2286: VTY_GET_INTEGER ("SPF delay timer", delay, argv[0]);
! 2287: VTY_GET_INTEGER ("SPF hold timer", hold, argv[1]);
! 2288:
! 2289: /* truncate down the second values if they're greater than 600000ms */
! 2290: if (delay > (600000 / 1000))
! 2291: delay = 600000;
! 2292: else if (delay == 0)
! 2293: /* 0s delay was probably specified because of lack of ms resolution */
! 2294: delay = OSPF_SPF_DELAY_DEFAULT;
! 2295: if (hold > (600000 / 1000))
! 2296: hold = 600000;
! 2297:
! 2298: return ospf_timers_spf_set (vty, delay * 1000, hold * 1000, hold * 1000);
! 2299: }
! 2300:
! 2301: DEFUN (no_ospf_timers_throttle_spf,
! 2302: no_ospf_timers_throttle_spf_cmd,
! 2303: "no timers throttle spf",
! 2304: NO_STR
! 2305: "Adjust routing timers\n"
! 2306: "Throttling adaptive timer\n"
! 2307: "OSPF SPF timers\n")
! 2308: {
! 2309: return ospf_timers_spf_set (vty,
! 2310: OSPF_SPF_DELAY_DEFAULT,
! 2311: OSPF_SPF_HOLDTIME_DEFAULT,
! 2312: OSPF_SPF_MAX_HOLDTIME_DEFAULT);
! 2313: }
! 2314:
! 2315: ALIAS_DEPRECATED (no_ospf_timers_throttle_spf,
! 2316: no_ospf_timers_spf_cmd,
! 2317: "no timers spf",
! 2318: NO_STR
! 2319: "Adjust routing timers\n"
! 2320: "OSPF SPF timers\n")
! 2321:
! 2322: DEFUN (ospf_neighbor,
! 2323: ospf_neighbor_cmd,
! 2324: "neighbor A.B.C.D",
! 2325: NEIGHBOR_STR
! 2326: "Neighbor IP address\n")
! 2327: {
! 2328: struct ospf *ospf = vty->index;
! 2329: struct in_addr nbr_addr;
! 2330: unsigned int priority = OSPF_NEIGHBOR_PRIORITY_DEFAULT;
! 2331: unsigned int interval = OSPF_POLL_INTERVAL_DEFAULT;
! 2332:
! 2333: VTY_GET_IPV4_ADDRESS ("neighbor address", nbr_addr, argv[0]);
! 2334:
! 2335: if (argc > 1)
! 2336: VTY_GET_INTEGER_RANGE ("neighbor priority", priority, argv[1], 0, 255);
! 2337:
! 2338: if (argc > 2)
! 2339: VTY_GET_INTEGER_RANGE ("poll interval", interval, argv[2], 1, 65535);
! 2340:
! 2341: ospf_nbr_nbma_set (ospf, nbr_addr);
! 2342: if (argc > 1)
! 2343: ospf_nbr_nbma_priority_set (ospf, nbr_addr, priority);
! 2344: if (argc > 2)
! 2345: ospf_nbr_nbma_poll_interval_set (ospf, nbr_addr, priority);
! 2346:
! 2347: return CMD_SUCCESS;
! 2348: }
! 2349:
! 2350: ALIAS (ospf_neighbor,
! 2351: ospf_neighbor_priority_poll_interval_cmd,
! 2352: "neighbor A.B.C.D priority <0-255> poll-interval <1-65535>",
! 2353: NEIGHBOR_STR
! 2354: "Neighbor IP address\n"
! 2355: "Neighbor Priority\n"
! 2356: "Priority\n"
! 2357: "Dead Neighbor Polling interval\n"
! 2358: "Seconds\n")
! 2359:
! 2360: ALIAS (ospf_neighbor,
! 2361: ospf_neighbor_priority_cmd,
! 2362: "neighbor A.B.C.D priority <0-255>",
! 2363: NEIGHBOR_STR
! 2364: "Neighbor IP address\n"
! 2365: "Neighbor Priority\n"
! 2366: "Seconds\n")
! 2367:
! 2368: DEFUN (ospf_neighbor_poll_interval,
! 2369: ospf_neighbor_poll_interval_cmd,
! 2370: "neighbor A.B.C.D poll-interval <1-65535>",
! 2371: NEIGHBOR_STR
! 2372: "Neighbor IP address\n"
! 2373: "Dead Neighbor Polling interval\n"
! 2374: "Seconds\n")
! 2375: {
! 2376: struct ospf *ospf = vty->index;
! 2377: struct in_addr nbr_addr;
! 2378: unsigned int priority = OSPF_NEIGHBOR_PRIORITY_DEFAULT;
! 2379: unsigned int interval = OSPF_POLL_INTERVAL_DEFAULT;
! 2380:
! 2381: VTY_GET_IPV4_ADDRESS ("neighbor address", nbr_addr, argv[0]);
! 2382:
! 2383: if (argc > 1)
! 2384: VTY_GET_INTEGER_RANGE ("poll interval", interval, argv[1], 1, 65535);
! 2385:
! 2386: if (argc > 2)
! 2387: VTY_GET_INTEGER_RANGE ("neighbor priority", priority, argv[2], 0, 255);
! 2388:
! 2389: ospf_nbr_nbma_set (ospf, nbr_addr);
! 2390: if (argc > 1)
! 2391: ospf_nbr_nbma_poll_interval_set (ospf, nbr_addr, interval);
! 2392: if (argc > 2)
! 2393: ospf_nbr_nbma_priority_set (ospf, nbr_addr, priority);
! 2394:
! 2395: return CMD_SUCCESS;
! 2396: }
! 2397:
! 2398: ALIAS (ospf_neighbor_poll_interval,
! 2399: ospf_neighbor_poll_interval_priority_cmd,
! 2400: "neighbor A.B.C.D poll-interval <1-65535> priority <0-255>",
! 2401: NEIGHBOR_STR
! 2402: "Neighbor address\n"
! 2403: "OSPF dead-router polling interval\n"
! 2404: "Seconds\n"
! 2405: "OSPF priority of non-broadcast neighbor\n"
! 2406: "Priority\n")
! 2407:
! 2408: DEFUN (no_ospf_neighbor,
! 2409: no_ospf_neighbor_cmd,
! 2410: "no neighbor A.B.C.D",
! 2411: NO_STR
! 2412: NEIGHBOR_STR
! 2413: "Neighbor IP address\n")
! 2414: {
! 2415: struct ospf *ospf = vty->index;
! 2416: struct in_addr nbr_addr;
! 2417: int ret;
! 2418:
! 2419: VTY_GET_IPV4_ADDRESS ("neighbor address", nbr_addr, argv[0]);
! 2420:
! 2421: ret = ospf_nbr_nbma_unset (ospf, nbr_addr);
! 2422:
! 2423: return CMD_SUCCESS;
! 2424: }
! 2425:
! 2426: ALIAS (no_ospf_neighbor,
! 2427: no_ospf_neighbor_priority_cmd,
! 2428: "no neighbor A.B.C.D priority <0-255>",
! 2429: NO_STR
! 2430: NEIGHBOR_STR
! 2431: "Neighbor IP address\n"
! 2432: "Neighbor Priority\n"
! 2433: "Priority\n")
! 2434:
! 2435: ALIAS (no_ospf_neighbor,
! 2436: no_ospf_neighbor_poll_interval_cmd,
! 2437: "no neighbor A.B.C.D poll-interval <1-65535>",
! 2438: NO_STR
! 2439: NEIGHBOR_STR
! 2440: "Neighbor IP address\n"
! 2441: "Dead Neighbor Polling interval\n"
! 2442: "Seconds\n")
! 2443:
! 2444: ALIAS (no_ospf_neighbor,
! 2445: no_ospf_neighbor_priority_pollinterval_cmd,
! 2446: "no neighbor A.B.C.D priority <0-255> poll-interval <1-65535>",
! 2447: NO_STR
! 2448: NEIGHBOR_STR
! 2449: "Neighbor IP address\n"
! 2450: "Neighbor Priority\n"
! 2451: "Priority\n"
! 2452: "Dead Neighbor Polling interval\n"
! 2453: "Seconds\n")
! 2454:
! 2455:
! 2456: DEFUN (ospf_refresh_timer, ospf_refresh_timer_cmd,
! 2457: "refresh timer <10-1800>",
! 2458: "Adjust refresh parameters\n"
! 2459: "Set refresh timer\n"
! 2460: "Timer value in seconds\n")
! 2461: {
! 2462: struct ospf *ospf = vty->index;
! 2463: unsigned int interval;
! 2464:
! 2465: VTY_GET_INTEGER_RANGE ("refresh timer", interval, argv[0], 10, 1800);
! 2466: interval = (interval / 10) * 10;
! 2467:
! 2468: ospf_timers_refresh_set (ospf, interval);
! 2469:
! 2470: return CMD_SUCCESS;
! 2471: }
! 2472:
! 2473: DEFUN (no_ospf_refresh_timer, no_ospf_refresh_timer_val_cmd,
! 2474: "no refresh timer <10-1800>",
! 2475: "Adjust refresh parameters\n"
! 2476: "Unset refresh timer\n"
! 2477: "Timer value in seconds\n")
! 2478: {
! 2479: struct ospf *ospf = vty->index;
! 2480: unsigned int interval;
! 2481:
! 2482: if (argc == 1)
! 2483: {
! 2484: VTY_GET_INTEGER_RANGE ("refresh timer", interval, argv[0], 10, 1800);
! 2485:
! 2486: if (ospf->lsa_refresh_interval != interval ||
! 2487: interval == OSPF_LSA_REFRESH_INTERVAL_DEFAULT)
! 2488: return CMD_SUCCESS;
! 2489: }
! 2490:
! 2491: ospf_timers_refresh_unset (ospf);
! 2492:
! 2493: return CMD_SUCCESS;
! 2494: }
! 2495:
! 2496: ALIAS (no_ospf_refresh_timer,
! 2497: no_ospf_refresh_timer_cmd,
! 2498: "no refresh timer",
! 2499: "Adjust refresh parameters\n"
! 2500: "Unset refresh timer\n")
! 2501:
! 2502: DEFUN (ospf_auto_cost_reference_bandwidth,
! 2503: ospf_auto_cost_reference_bandwidth_cmd,
! 2504: "auto-cost reference-bandwidth <1-4294967>",
! 2505: "Calculate OSPF interface cost according to bandwidth\n"
! 2506: "Use reference bandwidth method to assign OSPF cost\n"
! 2507: "The reference bandwidth in terms of Mbits per second\n")
! 2508: {
! 2509: struct ospf *ospf = vty->index;
! 2510: u_int32_t refbw;
! 2511: struct listnode *node;
! 2512: struct interface *ifp;
! 2513:
! 2514: refbw = strtol (argv[0], NULL, 10);
! 2515: if (refbw < 1 || refbw > 4294967)
! 2516: {
! 2517: vty_out (vty, "reference-bandwidth value is invalid%s", VTY_NEWLINE);
! 2518: return CMD_WARNING;
! 2519: }
! 2520:
! 2521: /* If reference bandwidth is changed. */
! 2522: if ((refbw * 1000) == ospf->ref_bandwidth)
! 2523: return CMD_SUCCESS;
! 2524:
! 2525: ospf->ref_bandwidth = refbw * 1000;
! 2526: for (ALL_LIST_ELEMENTS_RO (om->iflist, node, ifp))
! 2527: ospf_if_recalculate_output_cost (ifp);
! 2528:
! 2529: return CMD_SUCCESS;
! 2530: }
! 2531:
! 2532: DEFUN (no_ospf_auto_cost_reference_bandwidth,
! 2533: no_ospf_auto_cost_reference_bandwidth_cmd,
! 2534: "no auto-cost reference-bandwidth",
! 2535: NO_STR
! 2536: "Calculate OSPF interface cost according to bandwidth\n"
! 2537: "Use reference bandwidth method to assign OSPF cost\n")
! 2538: {
! 2539: struct ospf *ospf = vty->index;
! 2540: struct listnode *node, *nnode;
! 2541: struct interface *ifp;
! 2542:
! 2543: if (ospf->ref_bandwidth == OSPF_DEFAULT_REF_BANDWIDTH)
! 2544: return CMD_SUCCESS;
! 2545:
! 2546: ospf->ref_bandwidth = OSPF_DEFAULT_REF_BANDWIDTH;
! 2547: vty_out (vty, "%% OSPF: Reference bandwidth is changed.%s", VTY_NEWLINE);
! 2548: vty_out (vty, " Please ensure reference bandwidth is consistent across all routers%s", VTY_NEWLINE);
! 2549:
! 2550: for (ALL_LIST_ELEMENTS (om->iflist, node, nnode, ifp))
! 2551: ospf_if_recalculate_output_cost (ifp);
! 2552:
! 2553: return CMD_SUCCESS;
! 2554: }
! 2555:
! 2556: const char *ospf_abr_type_descr_str[] =
! 2557: {
! 2558: "Unknown",
! 2559: "Standard (RFC2328)",
! 2560: "Alternative IBM",
! 2561: "Alternative Cisco",
! 2562: "Alternative Shortcut"
! 2563: };
! 2564:
! 2565: const char *ospf_shortcut_mode_descr_str[] =
! 2566: {
! 2567: "Default",
! 2568: "Enabled",
! 2569: "Disabled"
! 2570: };
! 2571:
! 2572:
! 2573:
! 2574: static void
! 2575: show_ip_ospf_area (struct vty *vty, struct ospf_area *area)
! 2576: {
! 2577: /* Show Area ID. */
! 2578: vty_out (vty, " Area ID: %s", inet_ntoa (area->area_id));
! 2579:
! 2580: /* Show Area type/mode. */
! 2581: if (OSPF_IS_AREA_BACKBONE (area))
! 2582: vty_out (vty, " (Backbone)%s", VTY_NEWLINE);
! 2583: else
! 2584: {
! 2585: if (area->external_routing == OSPF_AREA_STUB)
! 2586: vty_out (vty, " (Stub%s%s)",
! 2587: area->no_summary ? ", no summary" : "",
! 2588: area->shortcut_configured ? "; " : "");
! 2589:
! 2590: else if (area->external_routing == OSPF_AREA_NSSA)
! 2591: vty_out (vty, " (NSSA%s%s)",
! 2592: area->no_summary ? ", no summary" : "",
! 2593: area->shortcut_configured ? "; " : "");
! 2594:
! 2595: vty_out (vty, "%s", VTY_NEWLINE);
! 2596: vty_out (vty, " Shortcutting mode: %s",
! 2597: ospf_shortcut_mode_descr_str[area->shortcut_configured]);
! 2598: vty_out (vty, ", S-bit consensus: %s%s",
! 2599: area->shortcut_capability ? "ok" : "no", VTY_NEWLINE);
! 2600: }
! 2601:
! 2602: /* Show number of interfaces. */
! 2603: vty_out (vty, " Number of interfaces in this area: Total: %d, "
! 2604: "Active: %d%s", listcount (area->oiflist),
! 2605: area->act_ints, VTY_NEWLINE);
! 2606:
! 2607: if (area->external_routing == OSPF_AREA_NSSA)
! 2608: {
! 2609: vty_out (vty, " It is an NSSA configuration. %s Elected NSSA/ABR performs type-7/type-5 LSA translation. %s", VTY_NEWLINE, VTY_NEWLINE);
! 2610: if (! IS_OSPF_ABR (area->ospf))
! 2611: vty_out (vty, " It is not ABR, therefore not Translator. %s",
! 2612: VTY_NEWLINE);
! 2613: else if (area->NSSATranslatorState)
! 2614: {
! 2615: vty_out (vty, " We are an ABR and ");
! 2616: if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_CANDIDATE)
! 2617: vty_out (vty, "the NSSA Elected Translator. %s",
! 2618: VTY_NEWLINE);
! 2619: else if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_ALWAYS)
! 2620: vty_out (vty, "always an NSSA Translator. %s",
! 2621: VTY_NEWLINE);
! 2622: }
! 2623: else
! 2624: {
! 2625: vty_out (vty, " We are an ABR, but ");
! 2626: if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_CANDIDATE)
! 2627: vty_out (vty, "not the NSSA Elected Translator. %s",
! 2628: VTY_NEWLINE);
! 2629: else
! 2630: vty_out (vty, "never an NSSA Translator. %s",
! 2631: VTY_NEWLINE);
! 2632: }
! 2633: }
! 2634: /* Stub-router state for this area */
! 2635: if (CHECK_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED))
! 2636: {
! 2637: char timebuf[OSPF_TIME_DUMP_SIZE];
! 2638: vty_out (vty, " Originating stub / maximum-distance Router-LSA%s",
! 2639: VTY_NEWLINE);
! 2640: if (CHECK_FLAG(area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED))
! 2641: vty_out (vty, " Administratively activated (indefinitely)%s",
! 2642: VTY_NEWLINE);
! 2643: if (area->t_stub_router)
! 2644: vty_out (vty, " Active from startup, %s remaining%s",
! 2645: ospf_timer_dump (area->t_stub_router, timebuf,
! 2646: sizeof(timebuf)), VTY_NEWLINE);
! 2647: }
! 2648:
! 2649: /* Show number of fully adjacent neighbors. */
! 2650: vty_out (vty, " Number of fully adjacent neighbors in this area:"
! 2651: " %d%s", area->full_nbrs, VTY_NEWLINE);
! 2652:
! 2653: /* Show authentication type. */
! 2654: vty_out (vty, " Area has ");
! 2655: if (area->auth_type == OSPF_AUTH_NULL)
! 2656: vty_out (vty, "no authentication%s", VTY_NEWLINE);
! 2657: else if (area->auth_type == OSPF_AUTH_SIMPLE)
! 2658: vty_out (vty, "simple password authentication%s", VTY_NEWLINE);
! 2659: else if (area->auth_type == OSPF_AUTH_CRYPTOGRAPHIC)
! 2660: vty_out (vty, "message digest authentication%s", VTY_NEWLINE);
! 2661:
! 2662: if (!OSPF_IS_AREA_BACKBONE (area))
! 2663: vty_out (vty, " Number of full virtual adjacencies going through"
! 2664: " this area: %d%s", area->full_vls, VTY_NEWLINE);
! 2665:
! 2666: /* Show SPF calculation times. */
! 2667: vty_out (vty, " SPF algorithm executed %d times%s",
! 2668: area->spf_calculation, VTY_NEWLINE);
! 2669:
! 2670: /* Show number of LSA. */
! 2671: vty_out (vty, " Number of LSA %ld%s", area->lsdb->total, VTY_NEWLINE);
! 2672: vty_out (vty, " Number of router LSA %ld. Checksum Sum 0x%08x%s",
! 2673: ospf_lsdb_count (area->lsdb, OSPF_ROUTER_LSA),
! 2674: ospf_lsdb_checksum (area->lsdb, OSPF_ROUTER_LSA), VTY_NEWLINE);
! 2675: vty_out (vty, " Number of network LSA %ld. Checksum Sum 0x%08x%s",
! 2676: ospf_lsdb_count (area->lsdb, OSPF_NETWORK_LSA),
! 2677: ospf_lsdb_checksum (area->lsdb, OSPF_NETWORK_LSA), VTY_NEWLINE);
! 2678: vty_out (vty, " Number of summary LSA %ld. Checksum Sum 0x%08x%s",
! 2679: ospf_lsdb_count (area->lsdb, OSPF_SUMMARY_LSA),
! 2680: ospf_lsdb_checksum (area->lsdb, OSPF_SUMMARY_LSA), VTY_NEWLINE);
! 2681: vty_out (vty, " Number of ASBR summary LSA %ld. Checksum Sum 0x%08x%s",
! 2682: ospf_lsdb_count (area->lsdb, OSPF_ASBR_SUMMARY_LSA),
! 2683: ospf_lsdb_checksum (area->lsdb, OSPF_ASBR_SUMMARY_LSA), VTY_NEWLINE);
! 2684: vty_out (vty, " Number of NSSA LSA %ld. Checksum Sum 0x%08x%s",
! 2685: ospf_lsdb_count (area->lsdb, OSPF_AS_NSSA_LSA),
! 2686: ospf_lsdb_checksum (area->lsdb, OSPF_AS_NSSA_LSA), VTY_NEWLINE);
! 2687: #ifdef HAVE_OPAQUE_LSA
! 2688: vty_out (vty, " Number of opaque link LSA %ld. Checksum Sum 0x%08x%s",
! 2689: ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_LINK_LSA),
! 2690: ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_LINK_LSA), VTY_NEWLINE);
! 2691: vty_out (vty, " Number of opaque area LSA %ld. Checksum Sum 0x%08x%s",
! 2692: ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_AREA_LSA),
! 2693: ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_AREA_LSA), VTY_NEWLINE);
! 2694: #endif /* HAVE_OPAQUE_LSA */
! 2695: vty_out (vty, "%s", VTY_NEWLINE);
! 2696: }
! 2697:
! 2698: DEFUN (show_ip_ospf,
! 2699: show_ip_ospf_cmd,
! 2700: "show ip ospf",
! 2701: SHOW_STR
! 2702: IP_STR
! 2703: "OSPF information\n")
! 2704: {
! 2705: struct listnode *node, *nnode;
! 2706: struct ospf_area * area;
! 2707: struct ospf *ospf;
! 2708: struct timeval result;
! 2709: char timebuf[OSPF_TIME_DUMP_SIZE];
! 2710:
! 2711: /* Check OSPF is enable. */
! 2712: ospf = ospf_lookup ();
! 2713: if (ospf == NULL)
! 2714: {
! 2715: vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 2716: return CMD_SUCCESS;
! 2717: }
! 2718:
! 2719: /* Show Router ID. */
! 2720: vty_out (vty, " OSPF Routing Process, Router ID: %s%s",
! 2721: inet_ntoa (ospf->router_id),
! 2722: VTY_NEWLINE);
! 2723:
! 2724: /* Graceful shutdown */
! 2725: if (ospf->t_deferred_shutdown)
! 2726: vty_out (vty, " Deferred shutdown in progress, %s remaining%s",
! 2727: ospf_timer_dump (ospf->t_deferred_shutdown,
! 2728: timebuf, sizeof (timebuf)), VTY_NEWLINE);
! 2729: /* Show capability. */
! 2730: vty_out (vty, " Supports only single TOS (TOS0) routes%s", VTY_NEWLINE);
! 2731: vty_out (vty, " This implementation conforms to RFC2328%s", VTY_NEWLINE);
! 2732: vty_out (vty, " RFC1583Compatibility flag is %s%s",
! 2733: CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE) ?
! 2734: "enabled" : "disabled", VTY_NEWLINE);
! 2735: #ifdef HAVE_OPAQUE_LSA
! 2736: vty_out (vty, " OpaqueCapability flag is %s%s%s",
! 2737: CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE) ?
! 2738: "enabled" : "disabled",
! 2739: IS_OPAQUE_LSA_ORIGINATION_BLOCKED (ospf->opaque) ?
! 2740: " (origination blocked)" : "",
! 2741: VTY_NEWLINE);
! 2742: #endif /* HAVE_OPAQUE_LSA */
! 2743:
! 2744: /* Show stub-router configuration */
! 2745: if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED
! 2746: || ospf->stub_router_shutdown_time != OSPF_STUB_ROUTER_UNCONFIGURED)
! 2747: {
! 2748: vty_out (vty, " Stub router advertisement is configured%s",
! 2749: VTY_NEWLINE);
! 2750: if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED)
! 2751: vty_out (vty, " Enabled for %us after start-up%s",
! 2752: ospf->stub_router_startup_time, VTY_NEWLINE);
! 2753: if (ospf->stub_router_shutdown_time != OSPF_STUB_ROUTER_UNCONFIGURED)
! 2754: vty_out (vty, " Enabled for %us prior to full shutdown%s",
! 2755: ospf->stub_router_shutdown_time, VTY_NEWLINE);
! 2756: }
! 2757:
! 2758: /* Show SPF timers. */
! 2759: vty_out (vty, " Initial SPF scheduling delay %d millisec(s)%s"
! 2760: " Minimum hold time between consecutive SPFs %d millisec(s)%s"
! 2761: " Maximum hold time between consecutive SPFs %d millisec(s)%s"
! 2762: " Hold time multiplier is currently %d%s",
! 2763: ospf->spf_delay, VTY_NEWLINE,
! 2764: ospf->spf_holdtime, VTY_NEWLINE,
! 2765: ospf->spf_max_holdtime, VTY_NEWLINE,
! 2766: ospf->spf_hold_multiplier, VTY_NEWLINE);
! 2767: vty_out (vty, " SPF algorithm ");
! 2768: if (ospf->ts_spf.tv_sec || ospf->ts_spf.tv_usec)
! 2769: {
! 2770: result = tv_sub (recent_relative_time (), ospf->ts_spf);
! 2771: vty_out (vty, "last executed %s ago%s",
! 2772: ospf_timeval_dump (&result, timebuf, sizeof (timebuf)),
! 2773: VTY_NEWLINE);
! 2774: }
! 2775: else
! 2776: vty_out (vty, "has not been run%s", VTY_NEWLINE);
! 2777: vty_out (vty, " SPF timer %s%s%s",
! 2778: (ospf->t_spf_calc ? "due in " : "is "),
! 2779: ospf_timer_dump (ospf->t_spf_calc, timebuf, sizeof (timebuf)),
! 2780: VTY_NEWLINE);
! 2781:
! 2782: /* Show refresh parameters. */
! 2783: vty_out (vty, " Refresh timer %d secs%s",
! 2784: ospf->lsa_refresh_interval, VTY_NEWLINE);
! 2785:
! 2786: /* Show ABR/ASBR flags. */
! 2787: if (CHECK_FLAG (ospf->flags, OSPF_FLAG_ABR))
! 2788: vty_out (vty, " This router is an ABR, ABR type is: %s%s",
! 2789: ospf_abr_type_descr_str[ospf->abr_type], VTY_NEWLINE);
! 2790:
! 2791: if (CHECK_FLAG (ospf->flags, OSPF_FLAG_ASBR))
! 2792: vty_out (vty, " This router is an ASBR "
! 2793: "(injecting external routing information)%s", VTY_NEWLINE);
! 2794:
! 2795: /* Show Number of AS-external-LSAs. */
! 2796: vty_out (vty, " Number of external LSA %ld. Checksum Sum 0x%08x%s",
! 2797: ospf_lsdb_count (ospf->lsdb, OSPF_AS_EXTERNAL_LSA),
! 2798: ospf_lsdb_checksum (ospf->lsdb, OSPF_AS_EXTERNAL_LSA), VTY_NEWLINE);
! 2799: #ifdef HAVE_OPAQUE_LSA
! 2800: vty_out (vty, " Number of opaque AS LSA %ld. Checksum Sum 0x%08x%s",
! 2801: ospf_lsdb_count (ospf->lsdb, OSPF_OPAQUE_AS_LSA),
! 2802: ospf_lsdb_checksum (ospf->lsdb, OSPF_OPAQUE_AS_LSA), VTY_NEWLINE);
! 2803: #endif /* HAVE_OPAQUE_LSA */
! 2804: /* Show number of areas attached. */
! 2805: vty_out (vty, " Number of areas attached to this router: %d%s",
! 2806: listcount (ospf->areas), VTY_NEWLINE);
! 2807:
! 2808: if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES))
! 2809: {
! 2810: if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL))
! 2811: vty_out(vty, " All adjacency changes are logged%s",VTY_NEWLINE);
! 2812: else
! 2813: vty_out(vty, " Adjacency changes are logged%s",VTY_NEWLINE);
! 2814: }
! 2815:
! 2816: vty_out (vty, "%s",VTY_NEWLINE);
! 2817:
! 2818: /* Show each area status. */
! 2819: for (ALL_LIST_ELEMENTS (ospf->areas, node, nnode, area))
! 2820: show_ip_ospf_area (vty, area);
! 2821:
! 2822: return CMD_SUCCESS;
! 2823: }
! 2824:
! 2825:
! 2826: static void
! 2827: show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf,
! 2828: struct interface *ifp)
! 2829: {
! 2830: int is_up;
! 2831: struct ospf_neighbor *nbr;
! 2832: struct route_node *rn;
! 2833:
! 2834: /* Is interface up? */
! 2835: vty_out (vty, "%s is %s%s", ifp->name,
! 2836: ((is_up = if_is_operative(ifp)) ? "up" : "down"), VTY_NEWLINE);
! 2837: vty_out (vty, " ifindex %u, MTU %u bytes, BW %u Kbit %s%s",
! 2838: ifp->ifindex, ifp->mtu, ifp->bandwidth, if_flag_dump(ifp->flags),
! 2839: VTY_NEWLINE);
! 2840:
! 2841: /* Is interface OSPF enabled? */
! 2842: if (ospf_oi_count(ifp) == 0)
! 2843: {
! 2844: vty_out (vty, " OSPF not enabled on this interface%s", VTY_NEWLINE);
! 2845: return;
! 2846: }
! 2847: else if (!is_up)
! 2848: {
! 2849: vty_out (vty, " OSPF is enabled, but not running on this interface%s",
! 2850: VTY_NEWLINE);
! 2851: return;
! 2852: }
! 2853:
! 2854: for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
! 2855: {
! 2856: struct ospf_interface *oi = rn->info;
! 2857:
! 2858: if (oi == NULL)
! 2859: continue;
! 2860:
! 2861: /* Show OSPF interface information. */
! 2862: vty_out (vty, " Internet Address %s/%d,",
! 2863: inet_ntoa (oi->address->u.prefix4), oi->address->prefixlen);
! 2864:
! 2865: if (oi->connected->destination || oi->type == OSPF_IFTYPE_VIRTUALLINK)
! 2866: {
! 2867: struct in_addr *dest;
! 2868: const char *dstr;
! 2869:
! 2870: if (CONNECTED_PEER(oi->connected)
! 2871: || oi->type == OSPF_IFTYPE_VIRTUALLINK)
! 2872: dstr = "Peer";
! 2873: else
! 2874: dstr = "Broadcast";
! 2875:
! 2876: /* For Vlinks, showing the peer address is probably more
! 2877: * informative than the local interface that is being used
! 2878: */
! 2879: if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
! 2880: dest = &oi->vl_data->peer_addr;
! 2881: else
! 2882: dest = &oi->connected->destination->u.prefix4;
! 2883:
! 2884: vty_out (vty, " %s %s,", dstr, inet_ntoa (*dest));
! 2885: }
! 2886:
! 2887: vty_out (vty, " Area %s%s", ospf_area_desc_string (oi->area),
! 2888: VTY_NEWLINE);
! 2889:
! 2890: vty_out (vty, " MTU mismatch detection:%s%s",
! 2891: OSPF_IF_PARAM(oi, mtu_ignore) ? "disabled" : "enabled", VTY_NEWLINE);
! 2892:
! 2893: vty_out (vty, " Router ID %s, Network Type %s, Cost: %d%s",
! 2894: inet_ntoa (ospf->router_id), ospf_network_type_str[oi->type],
! 2895: oi->output_cost, VTY_NEWLINE);
! 2896:
! 2897: vty_out (vty, " Transmit Delay is %d sec, State %s, Priority %d%s",
! 2898: OSPF_IF_PARAM (oi,transmit_delay), LOOKUP (ospf_ism_state_msg, oi->state),
! 2899: PRIORITY (oi), VTY_NEWLINE);
! 2900:
! 2901: /* Show DR information. */
! 2902: if (DR (oi).s_addr == 0)
! 2903: vty_out (vty, " No designated router on this network%s", VTY_NEWLINE);
! 2904: else
! 2905: {
! 2906: nbr = ospf_nbr_lookup_by_addr (oi->nbrs, &DR (oi));
! 2907: if (nbr == NULL)
! 2908: vty_out (vty, " No designated router on this network%s", VTY_NEWLINE);
! 2909: else
! 2910: {
! 2911: vty_out (vty, " Designated Router (ID) %s,",
! 2912: inet_ntoa (nbr->router_id));
! 2913: vty_out (vty, " Interface Address %s%s",
! 2914: inet_ntoa (nbr->address.u.prefix4), VTY_NEWLINE);
! 2915: }
! 2916: }
! 2917:
! 2918: /* Show BDR information. */
! 2919: if (BDR (oi).s_addr == 0)
! 2920: vty_out (vty, " No backup designated router on this network%s",
! 2921: VTY_NEWLINE);
! 2922: else
! 2923: {
! 2924: nbr = ospf_nbr_lookup_by_addr (oi->nbrs, &BDR (oi));
! 2925: if (nbr == NULL)
! 2926: vty_out (vty, " No backup designated router on this network%s",
! 2927: VTY_NEWLINE);
! 2928: else
! 2929: {
! 2930: vty_out (vty, " Backup Designated Router (ID) %s,",
! 2931: inet_ntoa (nbr->router_id));
! 2932: vty_out (vty, " Interface Address %s%s",
! 2933: inet_ntoa (nbr->address.u.prefix4), VTY_NEWLINE);
! 2934: }
! 2935: }
! 2936:
! 2937: /* Next network-LSA sequence number we'll use, if we're elected DR */
! 2938: if (oi->params && ntohl (oi->params->network_lsa_seqnum)
! 2939: != OSPF_INITIAL_SEQUENCE_NUMBER)
! 2940: vty_out (vty, " Saved Network-LSA sequence number 0x%x%s",
! 2941: ntohl (oi->params->network_lsa_seqnum), VTY_NEWLINE);
! 2942:
! 2943: vty_out (vty, " Multicast group memberships:");
! 2944: if (OI_MEMBER_CHECK(oi, MEMBER_ALLROUTERS)
! 2945: || OI_MEMBER_CHECK(oi, MEMBER_DROUTERS))
! 2946: {
! 2947: if (OI_MEMBER_CHECK(oi, MEMBER_ALLROUTERS))
! 2948: vty_out (vty, " OSPFAllRouters");
! 2949: if (OI_MEMBER_CHECK(oi, MEMBER_DROUTERS))
! 2950: vty_out (vty, " OSPFDesignatedRouters");
! 2951: }
! 2952: else
! 2953: vty_out (vty, " <None>");
! 2954: vty_out (vty, "%s", VTY_NEWLINE);
! 2955:
! 2956: vty_out (vty, " Timer intervals configured,");
! 2957: vty_out (vty, " Hello ");
! 2958: if (OSPF_IF_PARAM (oi, fast_hello) == 0)
! 2959: vty_out (vty, "%ds,", OSPF_IF_PARAM (oi, v_hello));
! 2960: else
! 2961: vty_out (vty, "%dms,", 1000 / OSPF_IF_PARAM (oi, fast_hello));
! 2962: vty_out (vty, " Dead %ds, Wait %ds, Retransmit %d%s",
! 2963: OSPF_IF_PARAM (oi, v_wait),
! 2964: OSPF_IF_PARAM (oi, v_wait),
! 2965: OSPF_IF_PARAM (oi, retransmit_interval),
! 2966: VTY_NEWLINE);
! 2967:
! 2968: if (OSPF_IF_PASSIVE_STATUS (oi) == OSPF_IF_ACTIVE)
! 2969: {
! 2970: char timebuf[OSPF_TIME_DUMP_SIZE];
! 2971: vty_out (vty, " Hello due in %s%s",
! 2972: ospf_timer_dump (oi->t_hello, timebuf, sizeof(timebuf)),
! 2973: VTY_NEWLINE);
! 2974: }
! 2975: else /* passive-interface is set */
! 2976: vty_out (vty, " No Hellos (Passive interface)%s", VTY_NEWLINE);
! 2977:
! 2978: vty_out (vty, " Neighbor Count is %d, Adjacent neighbor count is %d%s",
! 2979: ospf_nbr_count (oi, 0), ospf_nbr_count (oi, NSM_Full),
! 2980: VTY_NEWLINE);
! 2981: }
! 2982: }
! 2983:
! 2984: DEFUN (show_ip_ospf_interface,
! 2985: show_ip_ospf_interface_cmd,
! 2986: "show ip ospf interface [INTERFACE]",
! 2987: SHOW_STR
! 2988: IP_STR
! 2989: "OSPF information\n"
! 2990: "Interface information\n"
! 2991: "Interface name\n")
! 2992: {
! 2993: struct interface *ifp;
! 2994: struct ospf *ospf;
! 2995: struct listnode *node;
! 2996:
! 2997: ospf = ospf_lookup ();
! 2998: if (ospf == NULL)
! 2999: {
! 3000: vty_out (vty, "OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 3001: return CMD_SUCCESS;
! 3002: }
! 3003:
! 3004: /* Show All Interfaces. */
! 3005: if (argc == 0)
! 3006: for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
! 3007: show_ip_ospf_interface_sub (vty, ospf, ifp);
! 3008: /* Interface name is specified. */
! 3009: else
! 3010: {
! 3011: if ((ifp = if_lookup_by_name (argv[0])) == NULL)
! 3012: vty_out (vty, "No such interface name%s", VTY_NEWLINE);
! 3013: else
! 3014: show_ip_ospf_interface_sub (vty, ospf, ifp);
! 3015: }
! 3016:
! 3017: return CMD_SUCCESS;
! 3018: }
! 3019:
! 3020: static void
! 3021: show_ip_ospf_neighbour_header (struct vty *vty)
! 3022: {
! 3023: vty_out (vty, "%s%15s %3s %-15s %9s %-15s %-20s %5s %5s %5s%s",
! 3024: VTY_NEWLINE,
! 3025: "Neighbor ID", "Pri", "State", "Dead Time",
! 3026: "Address", "Interface", "RXmtL", "RqstL", "DBsmL",
! 3027: VTY_NEWLINE);
! 3028: }
! 3029:
! 3030: static void
! 3031: show_ip_ospf_neighbor_sub (struct vty *vty, struct ospf_interface *oi)
! 3032: {
! 3033: struct route_node *rn;
! 3034: struct ospf_neighbor *nbr;
! 3035: char msgbuf[16];
! 3036: char timebuf[OSPF_TIME_DUMP_SIZE];
! 3037:
! 3038: for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
! 3039: if ((nbr = rn->info))
! 3040: /* Do not show myself. */
! 3041: if (nbr != oi->nbr_self)
! 3042: /* Down state is not shown. */
! 3043: if (nbr->state != NSM_Down)
! 3044: {
! 3045: ospf_nbr_state_message (nbr, msgbuf, 16);
! 3046:
! 3047: if (nbr->state == NSM_Attempt && nbr->router_id.s_addr == 0)
! 3048: vty_out (vty, "%-15s %3d %-15s ",
! 3049: "-", nbr->priority,
! 3050: msgbuf);
! 3051: else
! 3052: vty_out (vty, "%-15s %3d %-15s ",
! 3053: inet_ntoa (nbr->router_id), nbr->priority,
! 3054: msgbuf);
! 3055:
! 3056: vty_out (vty, "%9s ",
! 3057: ospf_timer_dump (nbr->t_inactivity, timebuf,
! 3058: sizeof(timebuf)));
! 3059:
! 3060: vty_out (vty, "%-15s ", inet_ntoa (nbr->src));
! 3061: vty_out (vty, "%-20s %5ld %5ld %5d%s",
! 3062: IF_NAME (oi), ospf_ls_retransmit_count (nbr),
! 3063: ospf_ls_request_count (nbr), ospf_db_summary_count (nbr),
! 3064: VTY_NEWLINE);
! 3065: }
! 3066: }
! 3067:
! 3068: DEFUN (show_ip_ospf_neighbor,
! 3069: show_ip_ospf_neighbor_cmd,
! 3070: "show ip ospf neighbor",
! 3071: SHOW_STR
! 3072: IP_STR
! 3073: "OSPF information\n"
! 3074: "Neighbor list\n")
! 3075: {
! 3076: struct ospf *ospf;
! 3077: struct ospf_interface *oi;
! 3078: struct listnode *node;
! 3079:
! 3080: ospf = ospf_lookup ();
! 3081: if (ospf == NULL)
! 3082: {
! 3083: vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 3084: return CMD_SUCCESS;
! 3085: }
! 3086:
! 3087: show_ip_ospf_neighbour_header (vty);
! 3088:
! 3089: for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
! 3090: show_ip_ospf_neighbor_sub (vty, oi);
! 3091:
! 3092: return CMD_SUCCESS;
! 3093: }
! 3094:
! 3095: DEFUN (show_ip_ospf_neighbor_all,
! 3096: show_ip_ospf_neighbor_all_cmd,
! 3097: "show ip ospf neighbor all",
! 3098: SHOW_STR
! 3099: IP_STR
! 3100: "OSPF information\n"
! 3101: "Neighbor list\n"
! 3102: "include down status neighbor\n")
! 3103: {
! 3104: struct ospf *ospf = ospf_lookup ();
! 3105: struct listnode *node;
! 3106: struct ospf_interface *oi;
! 3107:
! 3108: if (ospf == NULL)
! 3109: {
! 3110: vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 3111: return CMD_SUCCESS;
! 3112: }
! 3113:
! 3114: show_ip_ospf_neighbour_header (vty);
! 3115:
! 3116: for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
! 3117: {
! 3118: struct listnode *nbr_node;
! 3119: struct ospf_nbr_nbma *nbr_nbma;
! 3120:
! 3121: show_ip_ospf_neighbor_sub (vty, oi);
! 3122:
! 3123: /* print Down neighbor status */
! 3124: for (ALL_LIST_ELEMENTS_RO (oi->nbr_nbma, nbr_node, nbr_nbma))
! 3125: {
! 3126: if (nbr_nbma->nbr == NULL
! 3127: || nbr_nbma->nbr->state == NSM_Down)
! 3128: {
! 3129: vty_out (vty, "%-15s %3d %-15s %9s ",
! 3130: "-", nbr_nbma->priority, "Down", "-");
! 3131: vty_out (vty, "%-15s %-20s %5d %5d %5d%s",
! 3132: inet_ntoa (nbr_nbma->addr), IF_NAME (oi),
! 3133: 0, 0, 0, VTY_NEWLINE);
! 3134: }
! 3135: }
! 3136: }
! 3137:
! 3138: return CMD_SUCCESS;
! 3139: }
! 3140:
! 3141: DEFUN (show_ip_ospf_neighbor_int,
! 3142: show_ip_ospf_neighbor_int_cmd,
! 3143: "show ip ospf neighbor IFNAME",
! 3144: SHOW_STR
! 3145: IP_STR
! 3146: "OSPF information\n"
! 3147: "Neighbor list\n"
! 3148: "Interface name\n")
! 3149: {
! 3150: struct ospf *ospf;
! 3151: struct interface *ifp;
! 3152: struct route_node *rn;
! 3153:
! 3154: ifp = if_lookup_by_name (argv[0]);
! 3155: if (!ifp)
! 3156: {
! 3157: vty_out (vty, "No such interface.%s", VTY_NEWLINE);
! 3158: return CMD_WARNING;
! 3159: }
! 3160:
! 3161: ospf = ospf_lookup ();
! 3162: if (ospf == NULL)
! 3163: {
! 3164: vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 3165: return CMD_SUCCESS;
! 3166: }
! 3167:
! 3168: show_ip_ospf_neighbour_header (vty);
! 3169:
! 3170: for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
! 3171: {
! 3172: struct ospf_interface *oi = rn->info;
! 3173:
! 3174: if (oi == NULL)
! 3175: continue;
! 3176:
! 3177: show_ip_ospf_neighbor_sub (vty, oi);
! 3178: }
! 3179:
! 3180: return CMD_SUCCESS;
! 3181: }
! 3182:
! 3183: static void
! 3184: show_ip_ospf_nbr_nbma_detail_sub (struct vty *vty, struct ospf_interface *oi,
! 3185: struct ospf_nbr_nbma *nbr_nbma)
! 3186: {
! 3187: char timebuf[OSPF_TIME_DUMP_SIZE];
! 3188:
! 3189: /* Show neighbor ID. */
! 3190: vty_out (vty, " Neighbor %s,", "-");
! 3191:
! 3192: /* Show interface address. */
! 3193: vty_out (vty, " interface address %s%s",
! 3194: inet_ntoa (nbr_nbma->addr), VTY_NEWLINE);
! 3195: /* Show Area ID. */
! 3196: vty_out (vty, " In the area %s via interface %s%s",
! 3197: ospf_area_desc_string (oi->area), IF_NAME (oi), VTY_NEWLINE);
! 3198: /* Show neighbor priority and state. */
! 3199: vty_out (vty, " Neighbor priority is %d, State is %s,",
! 3200: nbr_nbma->priority, "Down");
! 3201: /* Show state changes. */
! 3202: vty_out (vty, " %d state changes%s", nbr_nbma->state_change, VTY_NEWLINE);
! 3203:
! 3204: /* Show PollInterval */
! 3205: vty_out (vty, " Poll interval %d%s", nbr_nbma->v_poll, VTY_NEWLINE);
! 3206:
! 3207: /* Show poll-interval timer. */
! 3208: vty_out (vty, " Poll timer due in %s%s",
! 3209: ospf_timer_dump (nbr_nbma->t_poll, timebuf, sizeof(timebuf)),
! 3210: VTY_NEWLINE);
! 3211:
! 3212: /* Show poll-interval timer thread. */
! 3213: vty_out (vty, " Thread Poll Timer %s%s",
! 3214: nbr_nbma->t_poll != NULL ? "on" : "off", VTY_NEWLINE);
! 3215: }
! 3216:
! 3217: static void
! 3218: show_ip_ospf_neighbor_detail_sub (struct vty *vty, struct ospf_interface *oi,
! 3219: struct ospf_neighbor *nbr)
! 3220: {
! 3221: char timebuf[OSPF_TIME_DUMP_SIZE];
! 3222:
! 3223: /* Show neighbor ID. */
! 3224: if (nbr->state == NSM_Attempt && nbr->router_id.s_addr == 0)
! 3225: vty_out (vty, " Neighbor %s,", "-");
! 3226: else
! 3227: vty_out (vty, " Neighbor %s,", inet_ntoa (nbr->router_id));
! 3228:
! 3229: /* Show interface address. */
! 3230: vty_out (vty, " interface address %s%s",
! 3231: inet_ntoa (nbr->address.u.prefix4), VTY_NEWLINE);
! 3232: /* Show Area ID. */
! 3233: vty_out (vty, " In the area %s via interface %s%s",
! 3234: ospf_area_desc_string (oi->area), oi->ifp->name, VTY_NEWLINE);
! 3235: /* Show neighbor priority and state. */
! 3236: vty_out (vty, " Neighbor priority is %d, State is %s,",
! 3237: nbr->priority, LOOKUP (ospf_nsm_state_msg, nbr->state));
! 3238: /* Show state changes. */
! 3239: vty_out (vty, " %d state changes%s", nbr->state_change, VTY_NEWLINE);
! 3240: if (nbr->ts_last_progress.tv_sec || nbr->ts_last_progress.tv_usec)
! 3241: {
! 3242: struct timeval res
! 3243: = tv_sub (recent_relative_time (), nbr->ts_last_progress);
! 3244: vty_out (vty, " Most recent state change statistics:%s",
! 3245: VTY_NEWLINE);
! 3246: vty_out (vty, " Progressive change %s ago%s",
! 3247: ospf_timeval_dump (&res, timebuf, sizeof(timebuf)),
! 3248: VTY_NEWLINE);
! 3249: }
! 3250: if (nbr->ts_last_regress.tv_sec || nbr->ts_last_regress.tv_usec)
! 3251: {
! 3252: struct timeval res
! 3253: = tv_sub (recent_relative_time (), nbr->ts_last_regress);
! 3254: vty_out (vty, " Regressive change %s ago, due to %s%s",
! 3255: ospf_timeval_dump (&res, timebuf, sizeof(timebuf)),
! 3256: (nbr->last_regress_str ? nbr->last_regress_str : "??"),
! 3257: VTY_NEWLINE);
! 3258: }
! 3259: /* Show Designated Rotuer ID. */
! 3260: vty_out (vty, " DR is %s,", inet_ntoa (nbr->d_router));
! 3261: /* Show Backup Designated Rotuer ID. */
! 3262: vty_out (vty, " BDR is %s%s", inet_ntoa (nbr->bd_router), VTY_NEWLINE);
! 3263: /* Show options. */
! 3264: vty_out (vty, " Options %d %s%s", nbr->options,
! 3265: ospf_options_dump (nbr->options), VTY_NEWLINE);
! 3266: /* Show Router Dead interval timer. */
! 3267: vty_out (vty, " Dead timer due in %s%s",
! 3268: ospf_timer_dump (nbr->t_inactivity, timebuf, sizeof (timebuf)),
! 3269: VTY_NEWLINE);
! 3270: /* Show Database Summary list. */
! 3271: vty_out (vty, " Database Summary List %d%s",
! 3272: ospf_db_summary_count (nbr), VTY_NEWLINE);
! 3273: /* Show Link State Request list. */
! 3274: vty_out (vty, " Link State Request List %ld%s",
! 3275: ospf_ls_request_count (nbr), VTY_NEWLINE);
! 3276: /* Show Link State Retransmission list. */
! 3277: vty_out (vty, " Link State Retransmission List %ld%s",
! 3278: ospf_ls_retransmit_count (nbr), VTY_NEWLINE);
! 3279: /* Show inactivity timer thread. */
! 3280: vty_out (vty, " Thread Inactivity Timer %s%s",
! 3281: nbr->t_inactivity != NULL ? "on" : "off", VTY_NEWLINE);
! 3282: /* Show Database Description retransmission thread. */
! 3283: vty_out (vty, " Thread Database Description Retransmision %s%s",
! 3284: nbr->t_db_desc != NULL ? "on" : "off", VTY_NEWLINE);
! 3285: /* Show Link State Request Retransmission thread. */
! 3286: vty_out (vty, " Thread Link State Request Retransmission %s%s",
! 3287: nbr->t_ls_req != NULL ? "on" : "off", VTY_NEWLINE);
! 3288: /* Show Link State Update Retransmission thread. */
! 3289: vty_out (vty, " Thread Link State Update Retransmission %s%s%s",
! 3290: nbr->t_ls_upd != NULL ? "on" : "off", VTY_NEWLINE, VTY_NEWLINE);
! 3291: }
! 3292:
! 3293: DEFUN (show_ip_ospf_neighbor_id,
! 3294: show_ip_ospf_neighbor_id_cmd,
! 3295: "show ip ospf neighbor A.B.C.D",
! 3296: SHOW_STR
! 3297: IP_STR
! 3298: "OSPF information\n"
! 3299: "Neighbor list\n"
! 3300: "Neighbor ID\n")
! 3301: {
! 3302: struct ospf *ospf;
! 3303: struct listnode *node;
! 3304: struct ospf_neighbor *nbr;
! 3305: struct ospf_interface *oi;
! 3306: struct in_addr router_id;
! 3307: int ret;
! 3308:
! 3309: ret = inet_aton (argv[0], &router_id);
! 3310: if (!ret)
! 3311: {
! 3312: vty_out (vty, "Please specify Neighbor ID by A.B.C.D%s", VTY_NEWLINE);
! 3313: return CMD_WARNING;
! 3314: }
! 3315:
! 3316: ospf = ospf_lookup ();
! 3317: if (ospf == NULL)
! 3318: {
! 3319: vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 3320: return CMD_SUCCESS;
! 3321: }
! 3322:
! 3323: for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
! 3324: if ((nbr = ospf_nbr_lookup_by_routerid (oi->nbrs, &router_id)))
! 3325: show_ip_ospf_neighbor_detail_sub (vty, oi, nbr);
! 3326:
! 3327: return CMD_SUCCESS;
! 3328: }
! 3329:
! 3330: DEFUN (show_ip_ospf_neighbor_detail,
! 3331: show_ip_ospf_neighbor_detail_cmd,
! 3332: "show ip ospf neighbor detail",
! 3333: SHOW_STR
! 3334: IP_STR
! 3335: "OSPF information\n"
! 3336: "Neighbor list\n"
! 3337: "detail of all neighbors\n")
! 3338: {
! 3339: struct ospf *ospf;
! 3340: struct ospf_interface *oi;
! 3341: struct listnode *node;
! 3342:
! 3343: ospf = ospf_lookup ();
! 3344: if (ospf == NULL)
! 3345: {
! 3346: vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 3347: return CMD_SUCCESS;
! 3348: }
! 3349:
! 3350: for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
! 3351: {
! 3352: struct route_node *rn;
! 3353: struct ospf_neighbor *nbr;
! 3354:
! 3355: for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
! 3356: if ((nbr = rn->info))
! 3357: if (nbr != oi->nbr_self)
! 3358: if (nbr->state != NSM_Down)
! 3359: show_ip_ospf_neighbor_detail_sub (vty, oi, nbr);
! 3360: }
! 3361:
! 3362: return CMD_SUCCESS;
! 3363: }
! 3364:
! 3365: DEFUN (show_ip_ospf_neighbor_detail_all,
! 3366: show_ip_ospf_neighbor_detail_all_cmd,
! 3367: "show ip ospf neighbor detail all",
! 3368: SHOW_STR
! 3369: IP_STR
! 3370: "OSPF information\n"
! 3371: "Neighbor list\n"
! 3372: "detail of all neighbors\n"
! 3373: "include down status neighbor\n")
! 3374: {
! 3375: struct ospf *ospf;
! 3376: struct listnode *node;
! 3377: struct ospf_interface *oi;
! 3378:
! 3379: ospf = ospf_lookup ();
! 3380: if (ospf == NULL)
! 3381: {
! 3382: vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 3383: return CMD_SUCCESS;
! 3384: }
! 3385:
! 3386: for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
! 3387: {
! 3388: struct route_node *rn;
! 3389: struct ospf_neighbor *nbr;
! 3390: struct ospf_nbr_nbma *nbr_nbma;
! 3391:
! 3392: for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
! 3393: if ((nbr = rn->info))
! 3394: if (nbr != oi->nbr_self)
! 3395: if (oi->type == OSPF_IFTYPE_NBMA && nbr->state != NSM_Down)
! 3396: show_ip_ospf_neighbor_detail_sub (vty, oi, rn->info);
! 3397:
! 3398: if (oi->type == OSPF_IFTYPE_NBMA)
! 3399: {
! 3400: struct listnode *nd;
! 3401:
! 3402: for (ALL_LIST_ELEMENTS_RO (oi->nbr_nbma, nd, nbr_nbma))
! 3403: if (nbr_nbma->nbr == NULL
! 3404: || nbr_nbma->nbr->state == NSM_Down)
! 3405: show_ip_ospf_nbr_nbma_detail_sub (vty, oi, nbr_nbma);
! 3406: }
! 3407: }
! 3408:
! 3409: return CMD_SUCCESS;
! 3410: }
! 3411:
! 3412: DEFUN (show_ip_ospf_neighbor_int_detail,
! 3413: show_ip_ospf_neighbor_int_detail_cmd,
! 3414: "show ip ospf neighbor IFNAME detail",
! 3415: SHOW_STR
! 3416: IP_STR
! 3417: "OSPF information\n"
! 3418: "Neighbor list\n"
! 3419: "Interface name\n"
! 3420: "detail of all neighbors")
! 3421: {
! 3422: struct ospf *ospf;
! 3423: struct ospf_interface *oi;
! 3424: struct interface *ifp;
! 3425: struct route_node *rn, *nrn;
! 3426: struct ospf_neighbor *nbr;
! 3427:
! 3428: ifp = if_lookup_by_name (argv[0]);
! 3429: if (!ifp)
! 3430: {
! 3431: vty_out (vty, "No such interface.%s", VTY_NEWLINE);
! 3432: return CMD_WARNING;
! 3433: }
! 3434:
! 3435: ospf = ospf_lookup ();
! 3436: if (ospf == NULL)
! 3437: {
! 3438: vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 3439: return CMD_SUCCESS;
! 3440: }
! 3441:
! 3442:
! 3443: for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
! 3444: if ((oi = rn->info))
! 3445: for (nrn = route_top (oi->nbrs); nrn; nrn = route_next (nrn))
! 3446: if ((nbr = nrn->info))
! 3447: if (nbr != oi->nbr_self)
! 3448: if (nbr->state != NSM_Down)
! 3449: show_ip_ospf_neighbor_detail_sub (vty, oi, nbr);
! 3450:
! 3451: return CMD_SUCCESS;
! 3452: }
! 3453:
! 3454:
! 3455: /* Show functions */
! 3456: static int
! 3457: show_lsa_summary (struct vty *vty, struct ospf_lsa *lsa, int self)
! 3458: {
! 3459: struct router_lsa *rl;
! 3460: struct summary_lsa *sl;
! 3461: struct as_external_lsa *asel;
! 3462: struct prefix_ipv4 p;
! 3463:
! 3464: if (lsa != NULL)
! 3465: /* If self option is set, check LSA self flag. */
! 3466: if (self == 0 || IS_LSA_SELF (lsa))
! 3467: {
! 3468: /* LSA common part show. */
! 3469: vty_out (vty, "%-15s ", inet_ntoa (lsa->data->id));
! 3470: vty_out (vty, "%-15s %4d 0x%08lx 0x%04x",
! 3471: inet_ntoa (lsa->data->adv_router), LS_AGE (lsa),
! 3472: (u_long)ntohl (lsa->data->ls_seqnum), ntohs (lsa->data->checksum));
! 3473: /* LSA specific part show. */
! 3474: switch (lsa->data->type)
! 3475: {
! 3476: case OSPF_ROUTER_LSA:
! 3477: rl = (struct router_lsa *) lsa->data;
! 3478: vty_out (vty, " %-d", ntohs (rl->links));
! 3479: break;
! 3480: case OSPF_SUMMARY_LSA:
! 3481: sl = (struct summary_lsa *) lsa->data;
! 3482:
! 3483: p.family = AF_INET;
! 3484: p.prefix = sl->header.id;
! 3485: p.prefixlen = ip_masklen (sl->mask);
! 3486: apply_mask_ipv4 (&p);
! 3487:
! 3488: vty_out (vty, " %s/%d", inet_ntoa (p.prefix), p.prefixlen);
! 3489: break;
! 3490: case OSPF_AS_EXTERNAL_LSA:
! 3491: case OSPF_AS_NSSA_LSA:
! 3492: asel = (struct as_external_lsa *) lsa->data;
! 3493:
! 3494: p.family = AF_INET;
! 3495: p.prefix = asel->header.id;
! 3496: p.prefixlen = ip_masklen (asel->mask);
! 3497: apply_mask_ipv4 (&p);
! 3498:
! 3499: vty_out (vty, " %s %s/%d [0x%lx]",
! 3500: IS_EXTERNAL_METRIC (asel->e[0].tos) ? "E2" : "E1",
! 3501: inet_ntoa (p.prefix), p.prefixlen,
! 3502: (u_long)ntohl (asel->e[0].route_tag));
! 3503: break;
! 3504: case OSPF_NETWORK_LSA:
! 3505: case OSPF_ASBR_SUMMARY_LSA:
! 3506: #ifdef HAVE_OPAQUE_LSA
! 3507: case OSPF_OPAQUE_LINK_LSA:
! 3508: case OSPF_OPAQUE_AREA_LSA:
! 3509: case OSPF_OPAQUE_AS_LSA:
! 3510: #endif /* HAVE_OPAQUE_LSA */
! 3511: default:
! 3512: break;
! 3513: }
! 3514: vty_out (vty, VTY_NEWLINE);
! 3515: }
! 3516:
! 3517: return 0;
! 3518: }
! 3519:
! 3520: static const char *show_database_desc[] =
! 3521: {
! 3522: "unknown",
! 3523: "Router Link States",
! 3524: "Net Link States",
! 3525: "Summary Link States",
! 3526: "ASBR-Summary Link States",
! 3527: "AS External Link States",
! 3528: "Group Membership LSA",
! 3529: "NSSA-external Link States",
! 3530: #ifdef HAVE_OPAQUE_LSA
! 3531: "Type-8 LSA",
! 3532: "Link-Local Opaque-LSA",
! 3533: "Area-Local Opaque-LSA",
! 3534: "AS-external Opaque-LSA",
! 3535: #endif /* HAVE_OPAQUE_LSA */
! 3536: };
! 3537:
! 3538: static const char *show_database_header[] =
! 3539: {
! 3540: "",
! 3541: "Link ID ADV Router Age Seq# CkSum Link count",
! 3542: "Link ID ADV Router Age Seq# CkSum",
! 3543: "Link ID ADV Router Age Seq# CkSum Route",
! 3544: "Link ID ADV Router Age Seq# CkSum",
! 3545: "Link ID ADV Router Age Seq# CkSum Route",
! 3546: " --- header for Group Member ----",
! 3547: "Link ID ADV Router Age Seq# CkSum Route",
! 3548: #ifdef HAVE_OPAQUE_LSA
! 3549: " --- type-8 ---",
! 3550: "Opaque-Type/Id ADV Router Age Seq# CkSum",
! 3551: "Opaque-Type/Id ADV Router Age Seq# CkSum",
! 3552: "Opaque-Type/Id ADV Router Age Seq# CkSum",
! 3553: #endif /* HAVE_OPAQUE_LSA */
! 3554: };
! 3555:
! 3556: static void
! 3557: show_ip_ospf_database_header (struct vty *vty, struct ospf_lsa *lsa)
! 3558: {
! 3559: struct router_lsa *rlsa = (struct router_lsa*) lsa->data;
! 3560:
! 3561: vty_out (vty, " LS age: %d%s", LS_AGE (lsa), VTY_NEWLINE);
! 3562: vty_out (vty, " Options: 0x%-2x : %s%s",
! 3563: lsa->data->options,
! 3564: ospf_options_dump(lsa->data->options),
! 3565: VTY_NEWLINE);
! 3566: vty_out (vty, " LS Flags: 0x%-2x %s%s",
! 3567: lsa->flags,
! 3568: ((lsa->flags & OSPF_LSA_LOCAL_XLT) ? "(Translated from Type-7)" : ""),
! 3569: VTY_NEWLINE);
! 3570:
! 3571: if (lsa->data->type == OSPF_ROUTER_LSA)
! 3572: {
! 3573: vty_out (vty, " Flags: 0x%x" , rlsa->flags);
! 3574:
! 3575: if (rlsa->flags)
! 3576: vty_out (vty, " :%s%s%s%s",
! 3577: IS_ROUTER_LSA_BORDER (rlsa) ? " ABR" : "",
! 3578: IS_ROUTER_LSA_EXTERNAL (rlsa) ? " ASBR" : "",
! 3579: IS_ROUTER_LSA_VIRTUAL (rlsa) ? " VL-endpoint" : "",
! 3580: IS_ROUTER_LSA_SHORTCUT (rlsa) ? " Shortcut" : "");
! 3581:
! 3582: vty_out (vty, "%s", VTY_NEWLINE);
! 3583: }
! 3584: vty_out (vty, " LS Type: %s%s",
! 3585: LOOKUP (ospf_lsa_type_msg, lsa->data->type), VTY_NEWLINE);
! 3586: vty_out (vty, " Link State ID: %s %s%s", inet_ntoa (lsa->data->id),
! 3587: LOOKUP (ospf_link_state_id_type_msg, lsa->data->type), VTY_NEWLINE);
! 3588: vty_out (vty, " Advertising Router: %s%s",
! 3589: inet_ntoa (lsa->data->adv_router), VTY_NEWLINE);
! 3590: vty_out (vty, " LS Seq Number: %08lx%s", (u_long)ntohl (lsa->data->ls_seqnum),
! 3591: VTY_NEWLINE);
! 3592: vty_out (vty, " Checksum: 0x%04x%s", ntohs (lsa->data->checksum),
! 3593: VTY_NEWLINE);
! 3594: vty_out (vty, " Length: %d%s", ntohs (lsa->data->length), VTY_NEWLINE);
! 3595: }
! 3596:
! 3597: const char *link_type_desc[] =
! 3598: {
! 3599: "(null)",
! 3600: "another Router (point-to-point)",
! 3601: "a Transit Network",
! 3602: "Stub Network",
! 3603: "a Virtual Link",
! 3604: };
! 3605:
! 3606: const char *link_id_desc[] =
! 3607: {
! 3608: "(null)",
! 3609: "Neighboring Router ID",
! 3610: "Designated Router address",
! 3611: "Net",
! 3612: "Neighboring Router ID",
! 3613: };
! 3614:
! 3615: const char *link_data_desc[] =
! 3616: {
! 3617: "(null)",
! 3618: "Router Interface address",
! 3619: "Router Interface address",
! 3620: "Network Mask",
! 3621: "Router Interface address",
! 3622: };
! 3623:
! 3624: /* Show router-LSA each Link information. */
! 3625: static void
! 3626: show_ip_ospf_database_router_links (struct vty *vty,
! 3627: struct router_lsa *rl)
! 3628: {
! 3629: int len, i, type;
! 3630:
! 3631: len = ntohs (rl->header.length) - 4;
! 3632: for (i = 0; i < ntohs (rl->links) && len > 0; len -= 12, i++)
! 3633: {
! 3634: type = rl->link[i].type;
! 3635:
! 3636: vty_out (vty, " Link connected to: %s%s",
! 3637: link_type_desc[type], VTY_NEWLINE);
! 3638: vty_out (vty, " (Link ID) %s: %s%s", link_id_desc[type],
! 3639: inet_ntoa (rl->link[i].link_id), VTY_NEWLINE);
! 3640: vty_out (vty, " (Link Data) %s: %s%s", link_data_desc[type],
! 3641: inet_ntoa (rl->link[i].link_data), VTY_NEWLINE);
! 3642: vty_out (vty, " Number of TOS metrics: 0%s", VTY_NEWLINE);
! 3643: vty_out (vty, " TOS 0 Metric: %d%s",
! 3644: ntohs (rl->link[i].metric), VTY_NEWLINE);
! 3645: vty_out (vty, "%s", VTY_NEWLINE);
! 3646: }
! 3647: }
! 3648:
! 3649: /* Show router-LSA detail information. */
! 3650: static int
! 3651: show_router_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
! 3652: {
! 3653: if (lsa != NULL)
! 3654: {
! 3655: struct router_lsa *rl = (struct router_lsa *) lsa->data;
! 3656:
! 3657: show_ip_ospf_database_header (vty, lsa);
! 3658:
! 3659: vty_out (vty, " Number of Links: %d%s%s", ntohs (rl->links),
! 3660: VTY_NEWLINE, VTY_NEWLINE);
! 3661:
! 3662: show_ip_ospf_database_router_links (vty, rl);
! 3663: vty_out (vty, "%s", VTY_NEWLINE);
! 3664: }
! 3665:
! 3666: return 0;
! 3667: }
! 3668:
! 3669: /* Show network-LSA detail information. */
! 3670: static int
! 3671: show_network_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
! 3672: {
! 3673: int length, i;
! 3674:
! 3675: if (lsa != NULL)
! 3676: {
! 3677: struct network_lsa *nl = (struct network_lsa *) lsa->data;
! 3678:
! 3679: show_ip_ospf_database_header (vty, lsa);
! 3680:
! 3681: vty_out (vty, " Network Mask: /%d%s",
! 3682: ip_masklen (nl->mask), VTY_NEWLINE);
! 3683:
! 3684: length = ntohs (lsa->data->length) - OSPF_LSA_HEADER_SIZE - 4;
! 3685:
! 3686: for (i = 0; length > 0; i++, length -= 4)
! 3687: vty_out (vty, " Attached Router: %s%s",
! 3688: inet_ntoa (nl->routers[i]), VTY_NEWLINE);
! 3689:
! 3690: vty_out (vty, "%s", VTY_NEWLINE);
! 3691: }
! 3692:
! 3693: return 0;
! 3694: }
! 3695:
! 3696: /* Show summary-LSA detail information. */
! 3697: static int
! 3698: show_summary_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
! 3699: {
! 3700: if (lsa != NULL)
! 3701: {
! 3702: struct summary_lsa *sl = (struct summary_lsa *) lsa->data;
! 3703:
! 3704: show_ip_ospf_database_header (vty, lsa);
! 3705:
! 3706: vty_out (vty, " Network Mask: /%d%s", ip_masklen (sl->mask),
! 3707: VTY_NEWLINE);
! 3708: vty_out (vty, " TOS: 0 Metric: %d%s", GET_METRIC (sl->metric),
! 3709: VTY_NEWLINE);
! 3710: vty_out (vty, "%s", VTY_NEWLINE);
! 3711: }
! 3712:
! 3713: return 0;
! 3714: }
! 3715:
! 3716: /* Show summary-ASBR-LSA detail information. */
! 3717: static int
! 3718: show_summary_asbr_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
! 3719: {
! 3720: if (lsa != NULL)
! 3721: {
! 3722: struct summary_lsa *sl = (struct summary_lsa *) lsa->data;
! 3723:
! 3724: show_ip_ospf_database_header (vty, lsa);
! 3725:
! 3726: vty_out (vty, " Network Mask: /%d%s",
! 3727: ip_masklen (sl->mask), VTY_NEWLINE);
! 3728: vty_out (vty, " TOS: 0 Metric: %d%s", GET_METRIC (sl->metric),
! 3729: VTY_NEWLINE);
! 3730: vty_out (vty, "%s", VTY_NEWLINE);
! 3731: }
! 3732:
! 3733: return 0;
! 3734: }
! 3735:
! 3736: /* Show AS-external-LSA detail information. */
! 3737: static int
! 3738: show_as_external_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
! 3739: {
! 3740: if (lsa != NULL)
! 3741: {
! 3742: struct as_external_lsa *al = (struct as_external_lsa *) lsa->data;
! 3743:
! 3744: show_ip_ospf_database_header (vty, lsa);
! 3745:
! 3746: vty_out (vty, " Network Mask: /%d%s",
! 3747: ip_masklen (al->mask), VTY_NEWLINE);
! 3748: vty_out (vty, " Metric Type: %s%s",
! 3749: IS_EXTERNAL_METRIC (al->e[0].tos) ?
! 3750: "2 (Larger than any link state path)" : "1", VTY_NEWLINE);
! 3751: vty_out (vty, " TOS: 0%s", VTY_NEWLINE);
! 3752: vty_out (vty, " Metric: %d%s",
! 3753: GET_METRIC (al->e[0].metric), VTY_NEWLINE);
! 3754: vty_out (vty, " Forward Address: %s%s",
! 3755: inet_ntoa (al->e[0].fwd_addr), VTY_NEWLINE);
! 3756:
! 3757: vty_out (vty, " External Route Tag: %lu%s%s",
! 3758: (u_long)ntohl (al->e[0].route_tag), VTY_NEWLINE, VTY_NEWLINE);
! 3759: }
! 3760:
! 3761: return 0;
! 3762: }
! 3763:
! 3764: /* N.B. This function currently seems to be unused. */
! 3765: static int
! 3766: show_as_external_lsa_stdvty (struct ospf_lsa *lsa)
! 3767: {
! 3768: struct as_external_lsa *al = (struct as_external_lsa *) lsa->data;
! 3769:
! 3770: /* show_ip_ospf_database_header (vty, lsa); */
! 3771:
! 3772: zlog_debug( " Network Mask: /%d%s",
! 3773: ip_masklen (al->mask), "\n");
! 3774: zlog_debug( " Metric Type: %s%s",
! 3775: IS_EXTERNAL_METRIC (al->e[0].tos) ?
! 3776: "2 (Larger than any link state path)" : "1", "\n");
! 3777: zlog_debug( " TOS: 0%s", "\n");
! 3778: zlog_debug( " Metric: %d%s",
! 3779: GET_METRIC (al->e[0].metric), "\n");
! 3780: zlog_debug( " Forward Address: %s%s",
! 3781: inet_ntoa (al->e[0].fwd_addr), "\n");
! 3782:
! 3783: zlog_debug( " External Route Tag: %u%s%s",
! 3784: ntohl (al->e[0].route_tag), "\n", "\n");
! 3785:
! 3786: return 0;
! 3787: }
! 3788:
! 3789: /* Show AS-NSSA-LSA detail information. */
! 3790: static int
! 3791: show_as_nssa_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
! 3792: {
! 3793: if (lsa != NULL)
! 3794: {
! 3795: struct as_external_lsa *al = (struct as_external_lsa *) lsa->data;
! 3796:
! 3797: show_ip_ospf_database_header (vty, lsa);
! 3798:
! 3799: vty_out (vty, " Network Mask: /%d%s",
! 3800: ip_masklen (al->mask), VTY_NEWLINE);
! 3801: vty_out (vty, " Metric Type: %s%s",
! 3802: IS_EXTERNAL_METRIC (al->e[0].tos) ?
! 3803: "2 (Larger than any link state path)" : "1", VTY_NEWLINE);
! 3804: vty_out (vty, " TOS: 0%s", VTY_NEWLINE);
! 3805: vty_out (vty, " Metric: %d%s",
! 3806: GET_METRIC (al->e[0].metric), VTY_NEWLINE);
! 3807: vty_out (vty, " NSSA: Forward Address: %s%s",
! 3808: inet_ntoa (al->e[0].fwd_addr), VTY_NEWLINE);
! 3809:
! 3810: vty_out (vty, " External Route Tag: %u%s%s",
! 3811: ntohl (al->e[0].route_tag), VTY_NEWLINE, VTY_NEWLINE);
! 3812: }
! 3813:
! 3814: return 0;
! 3815: }
! 3816:
! 3817: static int
! 3818: show_func_dummy (struct vty *vty, struct ospf_lsa *lsa)
! 3819: {
! 3820: return 0;
! 3821: }
! 3822:
! 3823: #ifdef HAVE_OPAQUE_LSA
! 3824: static int
! 3825: show_opaque_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
! 3826: {
! 3827: if (lsa != NULL)
! 3828: {
! 3829: show_ip_ospf_database_header (vty, lsa);
! 3830: show_opaque_info_detail (vty, lsa);
! 3831:
! 3832: vty_out (vty, "%s", VTY_NEWLINE);
! 3833: }
! 3834: return 0;
! 3835: }
! 3836: #endif /* HAVE_OPAQUE_LSA */
! 3837:
! 3838: int (*show_function[])(struct vty *, struct ospf_lsa *) =
! 3839: {
! 3840: NULL,
! 3841: show_router_lsa_detail,
! 3842: show_network_lsa_detail,
! 3843: show_summary_lsa_detail,
! 3844: show_summary_asbr_lsa_detail,
! 3845: show_as_external_lsa_detail,
! 3846: show_func_dummy,
! 3847: show_as_nssa_lsa_detail, /* almost same as external */
! 3848: #ifdef HAVE_OPAQUE_LSA
! 3849: NULL, /* type-8 */
! 3850: show_opaque_lsa_detail,
! 3851: show_opaque_lsa_detail,
! 3852: show_opaque_lsa_detail,
! 3853: #endif /* HAVE_OPAQUE_LSA */
! 3854: };
! 3855:
! 3856: static void
! 3857: show_lsa_prefix_set (struct vty *vty, struct prefix_ls *lp, struct in_addr *id,
! 3858: struct in_addr *adv_router)
! 3859: {
! 3860: memset (lp, 0, sizeof (struct prefix_ls));
! 3861: lp->family = 0;
! 3862: if (id == NULL)
! 3863: lp->prefixlen = 0;
! 3864: else if (adv_router == NULL)
! 3865: {
! 3866: lp->prefixlen = 32;
! 3867: lp->id = *id;
! 3868: }
! 3869: else
! 3870: {
! 3871: lp->prefixlen = 64;
! 3872: lp->id = *id;
! 3873: lp->adv_router = *adv_router;
! 3874: }
! 3875: }
! 3876:
! 3877: static void
! 3878: show_lsa_detail_proc (struct vty *vty, struct route_table *rt,
! 3879: struct in_addr *id, struct in_addr *adv_router)
! 3880: {
! 3881: struct prefix_ls lp;
! 3882: struct route_node *rn, *start;
! 3883: struct ospf_lsa *lsa;
! 3884:
! 3885: show_lsa_prefix_set (vty, &lp, id, adv_router);
! 3886: start = route_node_get (rt, (struct prefix *) &lp);
! 3887: if (start)
! 3888: {
! 3889: route_lock_node (start);
! 3890: for (rn = start; rn; rn = route_next_until (rn, start))
! 3891: if ((lsa = rn->info))
! 3892: {
! 3893: if (show_function[lsa->data->type] != NULL)
! 3894: show_function[lsa->data->type] (vty, lsa);
! 3895: }
! 3896: route_unlock_node (start);
! 3897: }
! 3898: }
! 3899:
! 3900: /* Show detail LSA information
! 3901: -- if id is NULL then show all LSAs. */
! 3902: static void
! 3903: show_lsa_detail (struct vty *vty, struct ospf *ospf, int type,
! 3904: struct in_addr *id, struct in_addr *adv_router)
! 3905: {
! 3906: struct listnode *node;
! 3907: struct ospf_area *area;
! 3908:
! 3909: switch (type)
! 3910: {
! 3911: case OSPF_AS_EXTERNAL_LSA:
! 3912: #ifdef HAVE_OPAQUE_LSA
! 3913: case OSPF_OPAQUE_AS_LSA:
! 3914: #endif /* HAVE_OPAQUE_LSA */
! 3915: vty_out (vty, " %s %s%s",
! 3916: show_database_desc[type],
! 3917: VTY_NEWLINE, VTY_NEWLINE);
! 3918: show_lsa_detail_proc (vty, AS_LSDB (ospf, type), id, adv_router);
! 3919: break;
! 3920: default:
! 3921: for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
! 3922: {
! 3923: vty_out (vty, "%s %s (Area %s)%s%s",
! 3924: VTY_NEWLINE, show_database_desc[type],
! 3925: ospf_area_desc_string (area), VTY_NEWLINE, VTY_NEWLINE);
! 3926: show_lsa_detail_proc (vty, AREA_LSDB (area, type), id, adv_router);
! 3927: }
! 3928: break;
! 3929: }
! 3930: }
! 3931:
! 3932: static void
! 3933: show_lsa_detail_adv_router_proc (struct vty *vty, struct route_table *rt,
! 3934: struct in_addr *adv_router)
! 3935: {
! 3936: struct route_node *rn;
! 3937: struct ospf_lsa *lsa;
! 3938:
! 3939: for (rn = route_top (rt); rn; rn = route_next (rn))
! 3940: if ((lsa = rn->info))
! 3941: if (IPV4_ADDR_SAME (adv_router, &lsa->data->adv_router))
! 3942: {
! 3943: if (CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT))
! 3944: continue;
! 3945: if (show_function[lsa->data->type] != NULL)
! 3946: show_function[lsa->data->type] (vty, lsa);
! 3947: }
! 3948: }
! 3949:
! 3950: /* Show detail LSA information. */
! 3951: static void
! 3952: show_lsa_detail_adv_router (struct vty *vty, struct ospf *ospf, int type,
! 3953: struct in_addr *adv_router)
! 3954: {
! 3955: struct listnode *node;
! 3956: struct ospf_area *area;
! 3957:
! 3958: switch (type)
! 3959: {
! 3960: case OSPF_AS_EXTERNAL_LSA:
! 3961: #ifdef HAVE_OPAQUE_LSA
! 3962: case OSPF_OPAQUE_AS_LSA:
! 3963: #endif /* HAVE_OPAQUE_LSA */
! 3964: vty_out (vty, " %s %s%s",
! 3965: show_database_desc[type],
! 3966: VTY_NEWLINE, VTY_NEWLINE);
! 3967: show_lsa_detail_adv_router_proc (vty, AS_LSDB (ospf, type),
! 3968: adv_router);
! 3969: break;
! 3970: default:
! 3971: for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
! 3972: {
! 3973: vty_out (vty, "%s %s (Area %s)%s%s",
! 3974: VTY_NEWLINE, show_database_desc[type],
! 3975: ospf_area_desc_string (area), VTY_NEWLINE, VTY_NEWLINE);
! 3976: show_lsa_detail_adv_router_proc (vty, AREA_LSDB (area, type),
! 3977: adv_router);
! 3978: }
! 3979: break;
! 3980: }
! 3981: }
! 3982:
! 3983: static void
! 3984: show_ip_ospf_database_summary (struct vty *vty, struct ospf *ospf, int self)
! 3985: {
! 3986: struct ospf_lsa *lsa;
! 3987: struct route_node *rn;
! 3988: struct ospf_area *area;
! 3989: struct listnode *node;
! 3990: int type;
! 3991:
! 3992: for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
! 3993: {
! 3994: for (type = OSPF_MIN_LSA; type < OSPF_MAX_LSA; type++)
! 3995: {
! 3996: switch (type)
! 3997: {
! 3998: case OSPF_AS_EXTERNAL_LSA:
! 3999: #ifdef HAVE_OPAQUE_LSA
! 4000: case OSPF_OPAQUE_AS_LSA:
! 4001: #endif /* HAVE_OPAQUE_LSA */
! 4002: continue;
! 4003: default:
! 4004: break;
! 4005: }
! 4006: if (ospf_lsdb_count_self (area->lsdb, type) > 0 ||
! 4007: (!self && ospf_lsdb_count (area->lsdb, type) > 0))
! 4008: {
! 4009: vty_out (vty, " %s (Area %s)%s%s",
! 4010: show_database_desc[type],
! 4011: ospf_area_desc_string (area),
! 4012: VTY_NEWLINE, VTY_NEWLINE);
! 4013: vty_out (vty, "%s%s", show_database_header[type], VTY_NEWLINE);
! 4014:
! 4015: LSDB_LOOP (AREA_LSDB (area, type), rn, lsa)
! 4016: show_lsa_summary (vty, lsa, self);
! 4017:
! 4018: vty_out (vty, "%s", VTY_NEWLINE);
! 4019: }
! 4020: }
! 4021: }
! 4022:
! 4023: for (type = OSPF_MIN_LSA; type < OSPF_MAX_LSA; type++)
! 4024: {
! 4025: switch (type)
! 4026: {
! 4027: case OSPF_AS_EXTERNAL_LSA:
! 4028: #ifdef HAVE_OPAQUE_LSA
! 4029: case OSPF_OPAQUE_AS_LSA:
! 4030: #endif /* HAVE_OPAQUE_LSA */
! 4031: break;
! 4032: default:
! 4033: continue;
! 4034: }
! 4035: if (ospf_lsdb_count_self (ospf->lsdb, type) ||
! 4036: (!self && ospf_lsdb_count (ospf->lsdb, type)))
! 4037: {
! 4038: vty_out (vty, " %s%s%s",
! 4039: show_database_desc[type],
! 4040: VTY_NEWLINE, VTY_NEWLINE);
! 4041: vty_out (vty, "%s%s", show_database_header[type],
! 4042: VTY_NEWLINE);
! 4043:
! 4044: LSDB_LOOP (AS_LSDB (ospf, type), rn, lsa)
! 4045: show_lsa_summary (vty, lsa, self);
! 4046:
! 4047: vty_out (vty, "%s", VTY_NEWLINE);
! 4048: }
! 4049: }
! 4050:
! 4051: vty_out (vty, "%s", VTY_NEWLINE);
! 4052: }
! 4053:
! 4054: static void
! 4055: show_ip_ospf_database_maxage (struct vty *vty, struct ospf *ospf)
! 4056: {
! 4057: struct listnode *node;
! 4058: struct ospf_lsa *lsa;
! 4059:
! 4060: vty_out (vty, "%s MaxAge Link States:%s%s",
! 4061: VTY_NEWLINE, VTY_NEWLINE, VTY_NEWLINE);
! 4062:
! 4063: for (ALL_LIST_ELEMENTS_RO (ospf->maxage_lsa, node, lsa))
! 4064: {
! 4065: vty_out (vty, "Link type: %d%s", lsa->data->type, VTY_NEWLINE);
! 4066: vty_out (vty, "Link State ID: %s%s",
! 4067: inet_ntoa (lsa->data->id), VTY_NEWLINE);
! 4068: vty_out (vty, "Advertising Router: %s%s",
! 4069: inet_ntoa (lsa->data->adv_router), VTY_NEWLINE);
! 4070: vty_out (vty, "LSA lock count: %d%s", lsa->lock, VTY_NEWLINE);
! 4071: vty_out (vty, "%s", VTY_NEWLINE);
! 4072: }
! 4073: }
! 4074:
! 4075: #define OSPF_LSA_TYPE_NSSA_DESC "NSSA external link state\n"
! 4076: #define OSPF_LSA_TYPE_NSSA_CMD_STR "|nssa-external"
! 4077:
! 4078: #ifdef HAVE_OPAQUE_LSA
! 4079: #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC "Link local Opaque-LSA\n"
! 4080: #define OSPF_LSA_TYPE_OPAQUE_AREA_DESC "Link area Opaque-LSA\n"
! 4081: #define OSPF_LSA_TYPE_OPAQUE_AS_DESC "Link AS Opaque-LSA\n"
! 4082: #define OSPF_LSA_TYPE_OPAQUE_CMD_STR "|opaque-link|opaque-area|opaque-as"
! 4083: #else /* HAVE_OPAQUE_LSA */
! 4084: #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC ""
! 4085: #define OSPF_LSA_TYPE_OPAQUE_AREA_DESC ""
! 4086: #define OSPF_LSA_TYPE_OPAQUE_AS_DESC ""
! 4087: #define OSPF_LSA_TYPE_OPAQUE_CMD_STR ""
! 4088: #endif /* HAVE_OPAQUE_LSA */
! 4089:
! 4090: #define OSPF_LSA_TYPES_CMD_STR \
! 4091: "asbr-summary|external|network|router|summary" \
! 4092: OSPF_LSA_TYPE_NSSA_CMD_STR \
! 4093: OSPF_LSA_TYPE_OPAQUE_CMD_STR
! 4094:
! 4095: #define OSPF_LSA_TYPES_DESC \
! 4096: "ASBR summary link states\n" \
! 4097: "External link states\n" \
! 4098: "Network link states\n" \
! 4099: "Router link states\n" \
! 4100: "Network summary link states\n" \
! 4101: OSPF_LSA_TYPE_NSSA_DESC \
! 4102: OSPF_LSA_TYPE_OPAQUE_LINK_DESC \
! 4103: OSPF_LSA_TYPE_OPAQUE_AREA_DESC \
! 4104: OSPF_LSA_TYPE_OPAQUE_AS_DESC
! 4105:
! 4106: DEFUN (show_ip_ospf_database,
! 4107: show_ip_ospf_database_cmd,
! 4108: "show ip ospf database",
! 4109: SHOW_STR
! 4110: IP_STR
! 4111: "OSPF information\n"
! 4112: "Database summary\n")
! 4113: {
! 4114: struct ospf *ospf;
! 4115: int type, ret;
! 4116: struct in_addr id, adv_router;
! 4117:
! 4118: ospf = ospf_lookup ();
! 4119: if (ospf == NULL)
! 4120: {
! 4121: vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 4122: return CMD_SUCCESS;
! 4123: }
! 4124:
! 4125: vty_out (vty, "%s OSPF Router with ID (%s)%s%s", VTY_NEWLINE,
! 4126: inet_ntoa (ospf->router_id), VTY_NEWLINE, VTY_NEWLINE);
! 4127:
! 4128: /* Show all LSA. */
! 4129: if (argc == 0)
! 4130: {
! 4131: show_ip_ospf_database_summary (vty, ospf, 0);
! 4132: return CMD_SUCCESS;
! 4133: }
! 4134:
! 4135: /* Set database type to show. */
! 4136: if (strncmp (argv[0], "r", 1) == 0)
! 4137: type = OSPF_ROUTER_LSA;
! 4138: else if (strncmp (argv[0], "ne", 2) == 0)
! 4139: type = OSPF_NETWORK_LSA;
! 4140: else if (strncmp (argv[0], "ns", 2) == 0)
! 4141: type = OSPF_AS_NSSA_LSA;
! 4142: else if (strncmp (argv[0], "su", 2) == 0)
! 4143: type = OSPF_SUMMARY_LSA;
! 4144: else if (strncmp (argv[0], "a", 1) == 0)
! 4145: type = OSPF_ASBR_SUMMARY_LSA;
! 4146: else if (strncmp (argv[0], "e", 1) == 0)
! 4147: type = OSPF_AS_EXTERNAL_LSA;
! 4148: else if (strncmp (argv[0], "se", 2) == 0)
! 4149: {
! 4150: show_ip_ospf_database_summary (vty, ospf, 1);
! 4151: return CMD_SUCCESS;
! 4152: }
! 4153: else if (strncmp (argv[0], "m", 1) == 0)
! 4154: {
! 4155: show_ip_ospf_database_maxage (vty, ospf);
! 4156: return CMD_SUCCESS;
! 4157: }
! 4158: #ifdef HAVE_OPAQUE_LSA
! 4159: else if (strncmp (argv[0], "opaque-l", 8) == 0)
! 4160: type = OSPF_OPAQUE_LINK_LSA;
! 4161: else if (strncmp (argv[0], "opaque-ar", 9) == 0)
! 4162: type = OSPF_OPAQUE_AREA_LSA;
! 4163: else if (strncmp (argv[0], "opaque-as", 9) == 0)
! 4164: type = OSPF_OPAQUE_AS_LSA;
! 4165: #endif /* HAVE_OPAQUE_LSA */
! 4166: else
! 4167: return CMD_WARNING;
! 4168:
! 4169: /* `show ip ospf database LSA'. */
! 4170: if (argc == 1)
! 4171: show_lsa_detail (vty, ospf, type, NULL, NULL);
! 4172: else if (argc >= 2)
! 4173: {
! 4174: ret = inet_aton (argv[1], &id);
! 4175: if (!ret)
! 4176: return CMD_WARNING;
! 4177:
! 4178: /* `show ip ospf database LSA ID'. */
! 4179: if (argc == 2)
! 4180: show_lsa_detail (vty, ospf, type, &id, NULL);
! 4181: /* `show ip ospf database LSA ID adv-router ADV_ROUTER'. */
! 4182: else if (argc == 3)
! 4183: {
! 4184: if (strncmp (argv[2], "s", 1) == 0)
! 4185: adv_router = ospf->router_id;
! 4186: else
! 4187: {
! 4188: ret = inet_aton (argv[2], &adv_router);
! 4189: if (!ret)
! 4190: return CMD_WARNING;
! 4191: }
! 4192: show_lsa_detail (vty, ospf, type, &id, &adv_router);
! 4193: }
! 4194: }
! 4195:
! 4196: return CMD_SUCCESS;
! 4197: }
! 4198:
! 4199: ALIAS (show_ip_ospf_database,
! 4200: show_ip_ospf_database_type_cmd,
! 4201: "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR "|max-age|self-originate)",
! 4202: SHOW_STR
! 4203: IP_STR
! 4204: "OSPF information\n"
! 4205: "Database summary\n"
! 4206: OSPF_LSA_TYPES_DESC
! 4207: "LSAs in MaxAge list\n"
! 4208: "Self-originated link states\n")
! 4209:
! 4210: ALIAS (show_ip_ospf_database,
! 4211: show_ip_ospf_database_type_id_cmd,
! 4212: "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") A.B.C.D",
! 4213: SHOW_STR
! 4214: IP_STR
! 4215: "OSPF information\n"
! 4216: "Database summary\n"
! 4217: OSPF_LSA_TYPES_DESC
! 4218: "Link State ID (as an IP address)\n")
! 4219:
! 4220: ALIAS (show_ip_ospf_database,
! 4221: show_ip_ospf_database_type_id_adv_router_cmd,
! 4222: "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") A.B.C.D adv-router A.B.C.D",
! 4223: SHOW_STR
! 4224: IP_STR
! 4225: "OSPF information\n"
! 4226: "Database summary\n"
! 4227: OSPF_LSA_TYPES_DESC
! 4228: "Link State ID (as an IP address)\n"
! 4229: "Advertising Router link states\n"
! 4230: "Advertising Router (as an IP address)\n")
! 4231:
! 4232: ALIAS (show_ip_ospf_database,
! 4233: show_ip_ospf_database_type_id_self_cmd,
! 4234: "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") A.B.C.D (self-originate|)",
! 4235: SHOW_STR
! 4236: IP_STR
! 4237: "OSPF information\n"
! 4238: "Database summary\n"
! 4239: OSPF_LSA_TYPES_DESC
! 4240: "Link State ID (as an IP address)\n"
! 4241: "Self-originated link states\n"
! 4242: "\n")
! 4243:
! 4244: DEFUN (show_ip_ospf_database_type_adv_router,
! 4245: show_ip_ospf_database_type_adv_router_cmd,
! 4246: "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") adv-router A.B.C.D",
! 4247: SHOW_STR
! 4248: IP_STR
! 4249: "OSPF information\n"
! 4250: "Database summary\n"
! 4251: OSPF_LSA_TYPES_DESC
! 4252: "Advertising Router link states\n"
! 4253: "Advertising Router (as an IP address)\n")
! 4254: {
! 4255: struct ospf *ospf;
! 4256: int type, ret;
! 4257: struct in_addr adv_router;
! 4258:
! 4259: ospf = ospf_lookup ();
! 4260: if (ospf == NULL)
! 4261: {
! 4262: vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 4263: return CMD_SUCCESS;
! 4264: }
! 4265:
! 4266: vty_out (vty, "%s OSPF Router with ID (%s)%s%s", VTY_NEWLINE,
! 4267: inet_ntoa (ospf->router_id), VTY_NEWLINE, VTY_NEWLINE);
! 4268:
! 4269: if (argc != 2)
! 4270: return CMD_WARNING;
! 4271:
! 4272: /* Set database type to show. */
! 4273: if (strncmp (argv[0], "r", 1) == 0)
! 4274: type = OSPF_ROUTER_LSA;
! 4275: else if (strncmp (argv[0], "ne", 2) == 0)
! 4276: type = OSPF_NETWORK_LSA;
! 4277: else if (strncmp (argv[0], "ns", 2) == 0)
! 4278: type = OSPF_AS_NSSA_LSA;
! 4279: else if (strncmp (argv[0], "s", 1) == 0)
! 4280: type = OSPF_SUMMARY_LSA;
! 4281: else if (strncmp (argv[0], "a", 1) == 0)
! 4282: type = OSPF_ASBR_SUMMARY_LSA;
! 4283: else if (strncmp (argv[0], "e", 1) == 0)
! 4284: type = OSPF_AS_EXTERNAL_LSA;
! 4285: #ifdef HAVE_OPAQUE_LSA
! 4286: else if (strncmp (argv[0], "opaque-l", 8) == 0)
! 4287: type = OSPF_OPAQUE_LINK_LSA;
! 4288: else if (strncmp (argv[0], "opaque-ar", 9) == 0)
! 4289: type = OSPF_OPAQUE_AREA_LSA;
! 4290: else if (strncmp (argv[0], "opaque-as", 9) == 0)
! 4291: type = OSPF_OPAQUE_AS_LSA;
! 4292: #endif /* HAVE_OPAQUE_LSA */
! 4293: else
! 4294: return CMD_WARNING;
! 4295:
! 4296: /* `show ip ospf database LSA adv-router ADV_ROUTER'. */
! 4297: if (strncmp (argv[1], "s", 1) == 0)
! 4298: adv_router = ospf->router_id;
! 4299: else
! 4300: {
! 4301: ret = inet_aton (argv[1], &adv_router);
! 4302: if (!ret)
! 4303: return CMD_WARNING;
! 4304: }
! 4305:
! 4306: show_lsa_detail_adv_router (vty, ospf, type, &adv_router);
! 4307:
! 4308: return CMD_SUCCESS;
! 4309: }
! 4310:
! 4311: ALIAS (show_ip_ospf_database_type_adv_router,
! 4312: show_ip_ospf_database_type_self_cmd,
! 4313: "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") (self-originate|)",
! 4314: SHOW_STR
! 4315: IP_STR
! 4316: "OSPF information\n"
! 4317: "Database summary\n"
! 4318: OSPF_LSA_TYPES_DESC
! 4319: "Self-originated link states\n")
! 4320:
! 4321:
! 4322: DEFUN (ip_ospf_authentication_args,
! 4323: ip_ospf_authentication_args_addr_cmd,
! 4324: "ip ospf authentication (null|message-digest) A.B.C.D",
! 4325: "IP Information\n"
! 4326: "OSPF interface commands\n"
! 4327: "Enable authentication on this interface\n"
! 4328: "Use null authentication\n"
! 4329: "Use message-digest authentication\n"
! 4330: "Address of interface")
! 4331: {
! 4332: struct interface *ifp;
! 4333: struct in_addr addr;
! 4334: int ret;
! 4335: struct ospf_if_params *params;
! 4336:
! 4337: ifp = vty->index;
! 4338: params = IF_DEF_PARAMS (ifp);
! 4339:
! 4340: if (argc == 2)
! 4341: {
! 4342: ret = inet_aton(argv[1], &addr);
! 4343: if (!ret)
! 4344: {
! 4345: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 4346: VTY_NEWLINE);
! 4347: return CMD_WARNING;
! 4348: }
! 4349:
! 4350: params = ospf_get_if_params (ifp, addr);
! 4351: ospf_if_update_params (ifp, addr);
! 4352: }
! 4353:
! 4354: /* Handle null authentication */
! 4355: if ( argv[0][0] == 'n' )
! 4356: {
! 4357: SET_IF_PARAM (params, auth_type);
! 4358: params->auth_type = OSPF_AUTH_NULL;
! 4359: return CMD_SUCCESS;
! 4360: }
! 4361:
! 4362: /* Handle message-digest authentication */
! 4363: if ( argv[0][0] == 'm' )
! 4364: {
! 4365: SET_IF_PARAM (params, auth_type);
! 4366: params->auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
! 4367: return CMD_SUCCESS;
! 4368: }
! 4369:
! 4370: vty_out (vty, "You shouldn't get here!%s", VTY_NEWLINE);
! 4371: return CMD_WARNING;
! 4372: }
! 4373:
! 4374: ALIAS (ip_ospf_authentication_args,
! 4375: ip_ospf_authentication_args_cmd,
! 4376: "ip ospf authentication (null|message-digest)",
! 4377: "IP Information\n"
! 4378: "OSPF interface commands\n"
! 4379: "Enable authentication on this interface\n"
! 4380: "Use null authentication\n"
! 4381: "Use message-digest authentication\n")
! 4382:
! 4383: DEFUN (ip_ospf_authentication,
! 4384: ip_ospf_authentication_addr_cmd,
! 4385: "ip ospf authentication A.B.C.D",
! 4386: "IP Information\n"
! 4387: "OSPF interface commands\n"
! 4388: "Enable authentication on this interface\n"
! 4389: "Address of interface")
! 4390: {
! 4391: struct interface *ifp;
! 4392: struct in_addr addr;
! 4393: int ret;
! 4394: struct ospf_if_params *params;
! 4395:
! 4396: ifp = vty->index;
! 4397: params = IF_DEF_PARAMS (ifp);
! 4398:
! 4399: if (argc == 1)
! 4400: {
! 4401: ret = inet_aton(argv[0], &addr);
! 4402: if (!ret)
! 4403: {
! 4404: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 4405: VTY_NEWLINE);
! 4406: return CMD_WARNING;
! 4407: }
! 4408:
! 4409: params = ospf_get_if_params (ifp, addr);
! 4410: ospf_if_update_params (ifp, addr);
! 4411: }
! 4412:
! 4413: SET_IF_PARAM (params, auth_type);
! 4414: params->auth_type = OSPF_AUTH_SIMPLE;
! 4415:
! 4416: return CMD_SUCCESS;
! 4417: }
! 4418:
! 4419: ALIAS (ip_ospf_authentication,
! 4420: ip_ospf_authentication_cmd,
! 4421: "ip ospf authentication",
! 4422: "IP Information\n"
! 4423: "OSPF interface commands\n"
! 4424: "Enable authentication on this interface\n")
! 4425:
! 4426: DEFUN (no_ip_ospf_authentication,
! 4427: no_ip_ospf_authentication_addr_cmd,
! 4428: "no ip ospf authentication A.B.C.D",
! 4429: NO_STR
! 4430: "IP Information\n"
! 4431: "OSPF interface commands\n"
! 4432: "Enable authentication on this interface\n"
! 4433: "Address of interface")
! 4434: {
! 4435: struct interface *ifp;
! 4436: struct in_addr addr;
! 4437: int ret;
! 4438: struct ospf_if_params *params;
! 4439:
! 4440: ifp = vty->index;
! 4441: params = IF_DEF_PARAMS (ifp);
! 4442:
! 4443: if (argc == 1)
! 4444: {
! 4445: ret = inet_aton(argv[0], &addr);
! 4446: if (!ret)
! 4447: {
! 4448: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 4449: VTY_NEWLINE);
! 4450: return CMD_WARNING;
! 4451: }
! 4452:
! 4453: params = ospf_lookup_if_params (ifp, addr);
! 4454: if (params == NULL)
! 4455: return CMD_SUCCESS;
! 4456: }
! 4457:
! 4458: params->auth_type = OSPF_AUTH_NOTSET;
! 4459: UNSET_IF_PARAM (params, auth_type);
! 4460:
! 4461: if (params != IF_DEF_PARAMS (ifp))
! 4462: {
! 4463: ospf_free_if_params (ifp, addr);
! 4464: ospf_if_update_params (ifp, addr);
! 4465: }
! 4466:
! 4467: return CMD_SUCCESS;
! 4468: }
! 4469:
! 4470: ALIAS (no_ip_ospf_authentication,
! 4471: no_ip_ospf_authentication_cmd,
! 4472: "no ip ospf authentication",
! 4473: NO_STR
! 4474: "IP Information\n"
! 4475: "OSPF interface commands\n"
! 4476: "Enable authentication on this interface\n")
! 4477:
! 4478: DEFUN (ip_ospf_authentication_key,
! 4479: ip_ospf_authentication_key_addr_cmd,
! 4480: "ip ospf authentication-key AUTH_KEY A.B.C.D",
! 4481: "IP Information\n"
! 4482: "OSPF interface commands\n"
! 4483: "Authentication password (key)\n"
! 4484: "The OSPF password (key)\n"
! 4485: "Address of interface")
! 4486: {
! 4487: struct interface *ifp;
! 4488: struct in_addr addr;
! 4489: int ret;
! 4490: struct ospf_if_params *params;
! 4491:
! 4492: ifp = vty->index;
! 4493: params = IF_DEF_PARAMS (ifp);
! 4494:
! 4495: if (argc == 2)
! 4496: {
! 4497: ret = inet_aton(argv[1], &addr);
! 4498: if (!ret)
! 4499: {
! 4500: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 4501: VTY_NEWLINE);
! 4502: return CMD_WARNING;
! 4503: }
! 4504:
! 4505: params = ospf_get_if_params (ifp, addr);
! 4506: ospf_if_update_params (ifp, addr);
! 4507: }
! 4508:
! 4509:
! 4510: memset (params->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
! 4511: strncpy ((char *) params->auth_simple, argv[0], OSPF_AUTH_SIMPLE_SIZE);
! 4512: SET_IF_PARAM (params, auth_simple);
! 4513:
! 4514: return CMD_SUCCESS;
! 4515: }
! 4516:
! 4517: ALIAS (ip_ospf_authentication_key,
! 4518: ip_ospf_authentication_key_cmd,
! 4519: "ip ospf authentication-key AUTH_KEY",
! 4520: "IP Information\n"
! 4521: "OSPF interface commands\n"
! 4522: "Authentication password (key)\n"
! 4523: "The OSPF password (key)")
! 4524:
! 4525: ALIAS (ip_ospf_authentication_key,
! 4526: ospf_authentication_key_cmd,
! 4527: "ospf authentication-key AUTH_KEY",
! 4528: "OSPF interface commands\n"
! 4529: "Authentication password (key)\n"
! 4530: "The OSPF password (key)")
! 4531:
! 4532: DEFUN (no_ip_ospf_authentication_key,
! 4533: no_ip_ospf_authentication_key_addr_cmd,
! 4534: "no ip ospf authentication-key A.B.C.D",
! 4535: NO_STR
! 4536: "IP Information\n"
! 4537: "OSPF interface commands\n"
! 4538: "Authentication password (key)\n"
! 4539: "Address of interface")
! 4540: {
! 4541: struct interface *ifp;
! 4542: struct in_addr addr;
! 4543: int ret;
! 4544: struct ospf_if_params *params;
! 4545:
! 4546: ifp = vty->index;
! 4547: params = IF_DEF_PARAMS (ifp);
! 4548:
! 4549: if (argc == 1)
! 4550: {
! 4551: ret = inet_aton(argv[0], &addr);
! 4552: if (!ret)
! 4553: {
! 4554: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 4555: VTY_NEWLINE);
! 4556: return CMD_WARNING;
! 4557: }
! 4558:
! 4559: params = ospf_lookup_if_params (ifp, addr);
! 4560: if (params == NULL)
! 4561: return CMD_SUCCESS;
! 4562: }
! 4563:
! 4564: memset (params->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE);
! 4565: UNSET_IF_PARAM (params, auth_simple);
! 4566:
! 4567: if (params != IF_DEF_PARAMS (ifp))
! 4568: {
! 4569: ospf_free_if_params (ifp, addr);
! 4570: ospf_if_update_params (ifp, addr);
! 4571: }
! 4572:
! 4573: return CMD_SUCCESS;
! 4574: }
! 4575:
! 4576: ALIAS (no_ip_ospf_authentication_key,
! 4577: no_ip_ospf_authentication_key_cmd,
! 4578: "no ip ospf authentication-key",
! 4579: NO_STR
! 4580: "IP Information\n"
! 4581: "OSPF interface commands\n"
! 4582: "Authentication password (key)\n")
! 4583:
! 4584: ALIAS (no_ip_ospf_authentication_key,
! 4585: no_ospf_authentication_key_cmd,
! 4586: "no ospf authentication-key",
! 4587: NO_STR
! 4588: "OSPF interface commands\n"
! 4589: "Authentication password (key)\n")
! 4590:
! 4591: DEFUN (ip_ospf_message_digest_key,
! 4592: ip_ospf_message_digest_key_addr_cmd,
! 4593: "ip ospf message-digest-key <1-255> md5 KEY A.B.C.D",
! 4594: "IP Information\n"
! 4595: "OSPF interface commands\n"
! 4596: "Message digest authentication password (key)\n"
! 4597: "Key ID\n"
! 4598: "Use MD5 algorithm\n"
! 4599: "The OSPF password (key)"
! 4600: "Address of interface")
! 4601: {
! 4602: struct interface *ifp;
! 4603: struct crypt_key *ck;
! 4604: u_char key_id;
! 4605: struct in_addr addr;
! 4606: int ret;
! 4607: struct ospf_if_params *params;
! 4608:
! 4609: ifp = vty->index;
! 4610: params = IF_DEF_PARAMS (ifp);
! 4611:
! 4612: if (argc == 3)
! 4613: {
! 4614: ret = inet_aton(argv[2], &addr);
! 4615: if (!ret)
! 4616: {
! 4617: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 4618: VTY_NEWLINE);
! 4619: return CMD_WARNING;
! 4620: }
! 4621:
! 4622: params = ospf_get_if_params (ifp, addr);
! 4623: ospf_if_update_params (ifp, addr);
! 4624: }
! 4625:
! 4626: key_id = strtol (argv[0], NULL, 10);
! 4627: if (ospf_crypt_key_lookup (params->auth_crypt, key_id) != NULL)
! 4628: {
! 4629: vty_out (vty, "OSPF: Key %d already exists%s", key_id, VTY_NEWLINE);
! 4630: return CMD_WARNING;
! 4631: }
! 4632:
! 4633: ck = ospf_crypt_key_new ();
! 4634: ck->key_id = (u_char) key_id;
! 4635: memset (ck->auth_key, 0, OSPF_AUTH_MD5_SIZE+1);
! 4636: strncpy ((char *) ck->auth_key, argv[1], OSPF_AUTH_MD5_SIZE);
! 4637:
! 4638: ospf_crypt_key_add (params->auth_crypt, ck);
! 4639: SET_IF_PARAM (params, auth_crypt);
! 4640:
! 4641: return CMD_SUCCESS;
! 4642: }
! 4643:
! 4644: ALIAS (ip_ospf_message_digest_key,
! 4645: ip_ospf_message_digest_key_cmd,
! 4646: "ip ospf message-digest-key <1-255> md5 KEY",
! 4647: "IP Information\n"
! 4648: "OSPF interface commands\n"
! 4649: "Message digest authentication password (key)\n"
! 4650: "Key ID\n"
! 4651: "Use MD5 algorithm\n"
! 4652: "The OSPF password (key)")
! 4653:
! 4654: ALIAS (ip_ospf_message_digest_key,
! 4655: ospf_message_digest_key_cmd,
! 4656: "ospf message-digest-key <1-255> md5 KEY",
! 4657: "OSPF interface commands\n"
! 4658: "Message digest authentication password (key)\n"
! 4659: "Key ID\n"
! 4660: "Use MD5 algorithm\n"
! 4661: "The OSPF password (key)")
! 4662:
! 4663: DEFUN (no_ip_ospf_message_digest_key,
! 4664: no_ip_ospf_message_digest_key_addr_cmd,
! 4665: "no ip ospf message-digest-key <1-255> A.B.C.D",
! 4666: NO_STR
! 4667: "IP Information\n"
! 4668: "OSPF interface commands\n"
! 4669: "Message digest authentication password (key)\n"
! 4670: "Key ID\n"
! 4671: "Address of interface")
! 4672: {
! 4673: struct interface *ifp;
! 4674: struct crypt_key *ck;
! 4675: int key_id;
! 4676: struct in_addr addr;
! 4677: int ret;
! 4678: struct ospf_if_params *params;
! 4679:
! 4680: ifp = vty->index;
! 4681: params = IF_DEF_PARAMS (ifp);
! 4682:
! 4683: if (argc == 2)
! 4684: {
! 4685: ret = inet_aton(argv[1], &addr);
! 4686: if (!ret)
! 4687: {
! 4688: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 4689: VTY_NEWLINE);
! 4690: return CMD_WARNING;
! 4691: }
! 4692:
! 4693: params = ospf_lookup_if_params (ifp, addr);
! 4694: if (params == NULL)
! 4695: return CMD_SUCCESS;
! 4696: }
! 4697:
! 4698: key_id = strtol (argv[0], NULL, 10);
! 4699: ck = ospf_crypt_key_lookup (params->auth_crypt, key_id);
! 4700: if (ck == NULL)
! 4701: {
! 4702: vty_out (vty, "OSPF: Key %d does not exist%s", key_id, VTY_NEWLINE);
! 4703: return CMD_WARNING;
! 4704: }
! 4705:
! 4706: ospf_crypt_key_delete (params->auth_crypt, key_id);
! 4707:
! 4708: if (params != IF_DEF_PARAMS (ifp))
! 4709: {
! 4710: ospf_free_if_params (ifp, addr);
! 4711: ospf_if_update_params (ifp, addr);
! 4712: }
! 4713:
! 4714: return CMD_SUCCESS;
! 4715: }
! 4716:
! 4717: ALIAS (no_ip_ospf_message_digest_key,
! 4718: no_ip_ospf_message_digest_key_cmd,
! 4719: "no ip ospf message-digest-key <1-255>",
! 4720: NO_STR
! 4721: "IP Information\n"
! 4722: "OSPF interface commands\n"
! 4723: "Message digest authentication password (key)\n"
! 4724: "Key ID\n")
! 4725:
! 4726: ALIAS (no_ip_ospf_message_digest_key,
! 4727: no_ospf_message_digest_key_cmd,
! 4728: "no ospf message-digest-key <1-255>",
! 4729: NO_STR
! 4730: "OSPF interface commands\n"
! 4731: "Message digest authentication password (key)\n"
! 4732: "Key ID\n")
! 4733:
! 4734: DEFUN (ip_ospf_cost,
! 4735: ip_ospf_cost_u32_inet4_cmd,
! 4736: "ip ospf cost <1-65535> A.B.C.D",
! 4737: "IP Information\n"
! 4738: "OSPF interface commands\n"
! 4739: "Interface cost\n"
! 4740: "Cost\n"
! 4741: "Address of interface")
! 4742: {
! 4743: struct interface *ifp = vty->index;
! 4744: u_int32_t cost;
! 4745: struct in_addr addr;
! 4746: int ret;
! 4747: struct ospf_if_params *params;
! 4748:
! 4749: params = IF_DEF_PARAMS (ifp);
! 4750:
! 4751: cost = strtol (argv[0], NULL, 10);
! 4752:
! 4753: /* cost range is <1-65535>. */
! 4754: if (cost < 1 || cost > 65535)
! 4755: {
! 4756: vty_out (vty, "Interface output cost is invalid%s", VTY_NEWLINE);
! 4757: return CMD_WARNING;
! 4758: }
! 4759:
! 4760: if (argc == 2)
! 4761: {
! 4762: ret = inet_aton(argv[1], &addr);
! 4763: if (!ret)
! 4764: {
! 4765: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 4766: VTY_NEWLINE);
! 4767: return CMD_WARNING;
! 4768: }
! 4769:
! 4770: params = ospf_get_if_params (ifp, addr);
! 4771: ospf_if_update_params (ifp, addr);
! 4772: }
! 4773:
! 4774: SET_IF_PARAM (params, output_cost_cmd);
! 4775: params->output_cost_cmd = cost;
! 4776:
! 4777: ospf_if_recalculate_output_cost (ifp);
! 4778:
! 4779: return CMD_SUCCESS;
! 4780: }
! 4781:
! 4782: ALIAS (ip_ospf_cost,
! 4783: ip_ospf_cost_u32_cmd,
! 4784: "ip ospf cost <1-65535>",
! 4785: "IP Information\n"
! 4786: "OSPF interface commands\n"
! 4787: "Interface cost\n"
! 4788: "Cost")
! 4789:
! 4790: ALIAS (ip_ospf_cost,
! 4791: ospf_cost_u32_cmd,
! 4792: "ospf cost <1-65535>",
! 4793: "OSPF interface commands\n"
! 4794: "Interface cost\n"
! 4795: "Cost")
! 4796:
! 4797: ALIAS (ip_ospf_cost,
! 4798: ospf_cost_u32_inet4_cmd,
! 4799: "ospf cost <1-65535> A.B.C.D",
! 4800: "OSPF interface commands\n"
! 4801: "Interface cost\n"
! 4802: "Cost\n"
! 4803: "Address of interface")
! 4804:
! 4805: DEFUN (no_ip_ospf_cost,
! 4806: no_ip_ospf_cost_inet4_cmd,
! 4807: "no ip ospf cost A.B.C.D",
! 4808: NO_STR
! 4809: "IP Information\n"
! 4810: "OSPF interface commands\n"
! 4811: "Interface cost\n"
! 4812: "Address of interface")
! 4813: {
! 4814: struct interface *ifp = vty->index;
! 4815: struct in_addr addr;
! 4816: int ret;
! 4817: struct ospf_if_params *params;
! 4818:
! 4819: ifp = vty->index;
! 4820: params = IF_DEF_PARAMS (ifp);
! 4821:
! 4822: if (argc == 1)
! 4823: {
! 4824: ret = inet_aton(argv[0], &addr);
! 4825: if (!ret)
! 4826: {
! 4827: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 4828: VTY_NEWLINE);
! 4829: return CMD_WARNING;
! 4830: }
! 4831:
! 4832: params = ospf_lookup_if_params (ifp, addr);
! 4833: if (params == NULL)
! 4834: return CMD_SUCCESS;
! 4835: }
! 4836:
! 4837: UNSET_IF_PARAM (params, output_cost_cmd);
! 4838:
! 4839: if (params != IF_DEF_PARAMS (ifp))
! 4840: {
! 4841: ospf_free_if_params (ifp, addr);
! 4842: ospf_if_update_params (ifp, addr);
! 4843: }
! 4844:
! 4845: ospf_if_recalculate_output_cost (ifp);
! 4846:
! 4847: return CMD_SUCCESS;
! 4848: }
! 4849:
! 4850: ALIAS (no_ip_ospf_cost,
! 4851: no_ip_ospf_cost_cmd,
! 4852: "no ip ospf cost",
! 4853: NO_STR
! 4854: "IP Information\n"
! 4855: "OSPF interface commands\n"
! 4856: "Interface cost\n")
! 4857:
! 4858: ALIAS (no_ip_ospf_cost,
! 4859: no_ospf_cost_cmd,
! 4860: "no ospf cost",
! 4861: NO_STR
! 4862: "OSPF interface commands\n"
! 4863: "Interface cost\n")
! 4864:
! 4865: ALIAS (no_ip_ospf_cost,
! 4866: no_ospf_cost_inet4_cmd,
! 4867: "no ospf cost A.B.C.D",
! 4868: NO_STR
! 4869: "OSPF interface commands\n"
! 4870: "Interface cost\n"
! 4871: "Address of interface")
! 4872:
! 4873: DEFUN (no_ip_ospf_cost2,
! 4874: no_ip_ospf_cost_u32_cmd,
! 4875: "no ip ospf cost <1-65535>",
! 4876: NO_STR
! 4877: "IP Information\n"
! 4878: "OSPF interface commands\n"
! 4879: "Interface cost\n"
! 4880: "Cost")
! 4881: {
! 4882: struct interface *ifp = vty->index;
! 4883: struct in_addr addr;
! 4884: u_int32_t cost;
! 4885: int ret;
! 4886: struct ospf_if_params *params;
! 4887:
! 4888: ifp = vty->index;
! 4889: params = IF_DEF_PARAMS (ifp);
! 4890:
! 4891: /* According to the semantics we are mimicking "no ip ospf cost N" is
! 4892: * always treated as "no ip ospf cost" regardless of the actual value
! 4893: * of N already configured for the interface. Thus the first argument
! 4894: * is always checked to be a number, but is ignored after that.
! 4895: */
! 4896: cost = strtol (argv[0], NULL, 10);
! 4897: if (cost < 1 || cost > 65535)
! 4898: {
! 4899: vty_out (vty, "Interface output cost is invalid%s", VTY_NEWLINE);
! 4900: return CMD_WARNING;
! 4901: }
! 4902:
! 4903: if (argc == 2)
! 4904: {
! 4905: ret = inet_aton(argv[1], &addr);
! 4906: if (!ret)
! 4907: {
! 4908: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 4909: VTY_NEWLINE);
! 4910: return CMD_WARNING;
! 4911: }
! 4912:
! 4913: params = ospf_lookup_if_params (ifp, addr);
! 4914: if (params == NULL)
! 4915: return CMD_SUCCESS;
! 4916: }
! 4917:
! 4918: UNSET_IF_PARAM (params, output_cost_cmd);
! 4919:
! 4920: if (params != IF_DEF_PARAMS (ifp))
! 4921: {
! 4922: ospf_free_if_params (ifp, addr);
! 4923: ospf_if_update_params (ifp, addr);
! 4924: }
! 4925:
! 4926: ospf_if_recalculate_output_cost (ifp);
! 4927:
! 4928: return CMD_SUCCESS;
! 4929: }
! 4930:
! 4931: ALIAS (no_ip_ospf_cost2,
! 4932: no_ospf_cost_u32_cmd,
! 4933: "no ospf cost <1-65535>",
! 4934: NO_STR
! 4935: "OSPF interface commands\n"
! 4936: "Interface cost\n"
! 4937: "Cost")
! 4938:
! 4939: ALIAS (no_ip_ospf_cost2,
! 4940: no_ip_ospf_cost_u32_inet4_cmd,
! 4941: "no ip ospf cost <1-65535> A.B.C.D",
! 4942: NO_STR
! 4943: "IP Information\n"
! 4944: "OSPF interface commands\n"
! 4945: "Interface cost\n"
! 4946: "Cost\n"
! 4947: "Address of interface")
! 4948:
! 4949: ALIAS (no_ip_ospf_cost2,
! 4950: no_ospf_cost_u32_inet4_cmd,
! 4951: "no ospf cost <1-65535> A.B.C.D",
! 4952: NO_STR
! 4953: "OSPF interface commands\n"
! 4954: "Interface cost\n"
! 4955: "Cost\n"
! 4956: "Address of interface")
! 4957:
! 4958: static void
! 4959: ospf_nbr_timer_update (struct ospf_interface *oi)
! 4960: {
! 4961: struct route_node *rn;
! 4962: struct ospf_neighbor *nbr;
! 4963:
! 4964: for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
! 4965: if ((nbr = rn->info))
! 4966: {
! 4967: nbr->v_inactivity = OSPF_IF_PARAM (oi, v_wait);
! 4968: nbr->v_db_desc = OSPF_IF_PARAM (oi, retransmit_interval);
! 4969: nbr->v_ls_req = OSPF_IF_PARAM (oi, retransmit_interval);
! 4970: nbr->v_ls_upd = OSPF_IF_PARAM (oi, retransmit_interval);
! 4971: }
! 4972: }
! 4973:
! 4974: static int
! 4975: ospf_vty_dead_interval_set (struct vty *vty, const char *interval_str,
! 4976: const char *nbr_str,
! 4977: const char *fast_hello_str)
! 4978: {
! 4979: struct interface *ifp = vty->index;
! 4980: u_int32_t seconds;
! 4981: u_char hellomult;
! 4982: struct in_addr addr;
! 4983: int ret;
! 4984: struct ospf_if_params *params;
! 4985: struct ospf_interface *oi;
! 4986: struct route_node *rn;
! 4987:
! 4988: params = IF_DEF_PARAMS (ifp);
! 4989:
! 4990: if (nbr_str)
! 4991: {
! 4992: ret = inet_aton(nbr_str, &addr);
! 4993: if (!ret)
! 4994: {
! 4995: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 4996: VTY_NEWLINE);
! 4997: return CMD_WARNING;
! 4998: }
! 4999:
! 5000: params = ospf_get_if_params (ifp, addr);
! 5001: ospf_if_update_params (ifp, addr);
! 5002: }
! 5003:
! 5004: if (interval_str)
! 5005: {
! 5006: VTY_GET_INTEGER_RANGE ("Router Dead Interval", seconds, interval_str,
! 5007: 1, 65535);
! 5008:
! 5009: /* reset fast_hello too, just to be sure */
! 5010: UNSET_IF_PARAM (params, fast_hello);
! 5011: params->fast_hello = OSPF_FAST_HELLO_DEFAULT;
! 5012: }
! 5013: else if (fast_hello_str)
! 5014: {
! 5015: VTY_GET_INTEGER_RANGE ("Hello Multiplier", hellomult, fast_hello_str,
! 5016: 1, 10);
! 5017: /* 1s dead-interval with sub-second hellos desired */
! 5018: seconds = OSPF_ROUTER_DEAD_INTERVAL_MINIMAL;
! 5019: SET_IF_PARAM (params, fast_hello);
! 5020: params->fast_hello = hellomult;
! 5021: }
! 5022: else
! 5023: {
! 5024: vty_out (vty, "Please specify dead-interval or hello-multiplier%s",
! 5025: VTY_NEWLINE);
! 5026: return CMD_WARNING;
! 5027: }
! 5028:
! 5029: SET_IF_PARAM (params, v_wait);
! 5030: params->v_wait = seconds;
! 5031:
! 5032: /* Update timer values in neighbor structure. */
! 5033: if (nbr_str)
! 5034: {
! 5035: struct ospf *ospf;
! 5036: if ((ospf = ospf_lookup()))
! 5037: {
! 5038: oi = ospf_if_lookup_by_local_addr (ospf, ifp, addr);
! 5039: if (oi)
! 5040: ospf_nbr_timer_update (oi);
! 5041: }
! 5042: }
! 5043: else
! 5044: {
! 5045: for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
! 5046: if ((oi = rn->info))
! 5047: ospf_nbr_timer_update (oi);
! 5048: }
! 5049:
! 5050: return CMD_SUCCESS;
! 5051: }
! 5052:
! 5053:
! 5054: DEFUN (ip_ospf_dead_interval,
! 5055: ip_ospf_dead_interval_addr_cmd,
! 5056: "ip ospf dead-interval <1-65535> A.B.C.D",
! 5057: "IP Information\n"
! 5058: "OSPF interface commands\n"
! 5059: "Interval after which a neighbor is declared dead\n"
! 5060: "Seconds\n"
! 5061: "Address of interface\n")
! 5062: {
! 5063: if (argc == 2)
! 5064: return ospf_vty_dead_interval_set (vty, argv[0], argv[1], NULL);
! 5065: else
! 5066: return ospf_vty_dead_interval_set (vty, argv[0], NULL, NULL);
! 5067: }
! 5068:
! 5069: ALIAS (ip_ospf_dead_interval,
! 5070: ip_ospf_dead_interval_cmd,
! 5071: "ip ospf dead-interval <1-65535>",
! 5072: "IP Information\n"
! 5073: "OSPF interface commands\n"
! 5074: "Interval after which a neighbor is declared dead\n"
! 5075: "Seconds\n")
! 5076:
! 5077: ALIAS (ip_ospf_dead_interval,
! 5078: ospf_dead_interval_cmd,
! 5079: "ospf dead-interval <1-65535>",
! 5080: "OSPF interface commands\n"
! 5081: "Interval after which a neighbor is declared dead\n"
! 5082: "Seconds\n")
! 5083:
! 5084: DEFUN (ip_ospf_dead_interval_minimal,
! 5085: ip_ospf_dead_interval_minimal_addr_cmd,
! 5086: "ip ospf dead-interval minimal hello-multiplier <1-10> A.B.C.D",
! 5087: "IP Information\n"
! 5088: "OSPF interface commands\n"
! 5089: "Interval after which a neighbor is declared dead\n"
! 5090: "Minimal 1s dead-interval with fast sub-second hellos\n"
! 5091: "Hello multiplier factor\n"
! 5092: "Number of Hellos to send each second\n"
! 5093: "Address of interface\n")
! 5094: {
! 5095: if (argc == 2)
! 5096: return ospf_vty_dead_interval_set (vty, NULL, argv[1], argv[0]);
! 5097: else
! 5098: return ospf_vty_dead_interval_set (vty, NULL, NULL, argv[0]);
! 5099: }
! 5100:
! 5101: ALIAS (ip_ospf_dead_interval_minimal,
! 5102: ip_ospf_dead_interval_minimal_cmd,
! 5103: "ip ospf dead-interval minimal hello-multiplier <1-10>",
! 5104: "IP Information\n"
! 5105: "OSPF interface commands\n"
! 5106: "Interval after which a neighbor is declared dead\n"
! 5107: "Minimal 1s dead-interval with fast sub-second hellos\n"
! 5108: "Hello multiplier factor\n"
! 5109: "Number of Hellos to send each second\n")
! 5110:
! 5111: DEFUN (no_ip_ospf_dead_interval,
! 5112: no_ip_ospf_dead_interval_addr_cmd,
! 5113: "no ip ospf dead-interval A.B.C.D",
! 5114: NO_STR
! 5115: "IP Information\n"
! 5116: "OSPF interface commands\n"
! 5117: "Interval after which a neighbor is declared dead\n"
! 5118: "Address of interface")
! 5119: {
! 5120: struct interface *ifp = vty->index;
! 5121: struct in_addr addr;
! 5122: int ret;
! 5123: struct ospf_if_params *params;
! 5124: struct ospf_interface *oi;
! 5125: struct route_node *rn;
! 5126:
! 5127: ifp = vty->index;
! 5128: params = IF_DEF_PARAMS (ifp);
! 5129:
! 5130: if (argc == 1)
! 5131: {
! 5132: ret = inet_aton(argv[0], &addr);
! 5133: if (!ret)
! 5134: {
! 5135: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 5136: VTY_NEWLINE);
! 5137: return CMD_WARNING;
! 5138: }
! 5139:
! 5140: params = ospf_lookup_if_params (ifp, addr);
! 5141: if (params == NULL)
! 5142: return CMD_SUCCESS;
! 5143: }
! 5144:
! 5145: UNSET_IF_PARAM (params, v_wait);
! 5146: params->v_wait = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
! 5147:
! 5148: UNSET_IF_PARAM (params, fast_hello);
! 5149: params->fast_hello = OSPF_FAST_HELLO_DEFAULT;
! 5150:
! 5151: if (params != IF_DEF_PARAMS (ifp))
! 5152: {
! 5153: ospf_free_if_params (ifp, addr);
! 5154: ospf_if_update_params (ifp, addr);
! 5155: }
! 5156:
! 5157: /* Update timer values in neighbor structure. */
! 5158: if (argc == 1)
! 5159: {
! 5160: struct ospf *ospf;
! 5161:
! 5162: if ((ospf = ospf_lookup()))
! 5163: {
! 5164: oi = ospf_if_lookup_by_local_addr (ospf, ifp, addr);
! 5165: if (oi)
! 5166: ospf_nbr_timer_update (oi);
! 5167: }
! 5168: }
! 5169: else
! 5170: {
! 5171: for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
! 5172: if ((oi = rn->info))
! 5173: ospf_nbr_timer_update (oi);
! 5174: }
! 5175:
! 5176: return CMD_SUCCESS;
! 5177: }
! 5178:
! 5179: ALIAS (no_ip_ospf_dead_interval,
! 5180: no_ip_ospf_dead_interval_cmd,
! 5181: "no ip ospf dead-interval",
! 5182: NO_STR
! 5183: "IP Information\n"
! 5184: "OSPF interface commands\n"
! 5185: "Interval after which a neighbor is declared dead\n")
! 5186:
! 5187: ALIAS (no_ip_ospf_dead_interval,
! 5188: no_ospf_dead_interval_cmd,
! 5189: "no ospf dead-interval",
! 5190: NO_STR
! 5191: "OSPF interface commands\n"
! 5192: "Interval after which a neighbor is declared dead\n")
! 5193:
! 5194: DEFUN (ip_ospf_hello_interval,
! 5195: ip_ospf_hello_interval_addr_cmd,
! 5196: "ip ospf hello-interval <1-65535> A.B.C.D",
! 5197: "IP Information\n"
! 5198: "OSPF interface commands\n"
! 5199: "Time between HELLO packets\n"
! 5200: "Seconds\n"
! 5201: "Address of interface")
! 5202: {
! 5203: struct interface *ifp = vty->index;
! 5204: u_int32_t seconds;
! 5205: struct in_addr addr;
! 5206: int ret;
! 5207: struct ospf_if_params *params;
! 5208:
! 5209: params = IF_DEF_PARAMS (ifp);
! 5210:
! 5211: seconds = strtol (argv[0], NULL, 10);
! 5212:
! 5213: /* HelloInterval range is <1-65535>. */
! 5214: if (seconds < 1 || seconds > 65535)
! 5215: {
! 5216: vty_out (vty, "Hello Interval is invalid%s", VTY_NEWLINE);
! 5217: return CMD_WARNING;
! 5218: }
! 5219:
! 5220: if (argc == 2)
! 5221: {
! 5222: ret = inet_aton(argv[1], &addr);
! 5223: if (!ret)
! 5224: {
! 5225: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 5226: VTY_NEWLINE);
! 5227: return CMD_WARNING;
! 5228: }
! 5229:
! 5230: params = ospf_get_if_params (ifp, addr);
! 5231: ospf_if_update_params (ifp, addr);
! 5232: }
! 5233:
! 5234: SET_IF_PARAM (params, v_hello);
! 5235: params->v_hello = seconds;
! 5236:
! 5237: return CMD_SUCCESS;
! 5238: }
! 5239:
! 5240: ALIAS (ip_ospf_hello_interval,
! 5241: ip_ospf_hello_interval_cmd,
! 5242: "ip ospf hello-interval <1-65535>",
! 5243: "IP Information\n"
! 5244: "OSPF interface commands\n"
! 5245: "Time between HELLO packets\n"
! 5246: "Seconds\n")
! 5247:
! 5248: ALIAS (ip_ospf_hello_interval,
! 5249: ospf_hello_interval_cmd,
! 5250: "ospf hello-interval <1-65535>",
! 5251: "OSPF interface commands\n"
! 5252: "Time between HELLO packets\n"
! 5253: "Seconds\n")
! 5254:
! 5255: DEFUN (no_ip_ospf_hello_interval,
! 5256: no_ip_ospf_hello_interval_addr_cmd,
! 5257: "no ip ospf hello-interval A.B.C.D",
! 5258: NO_STR
! 5259: "IP Information\n"
! 5260: "OSPF interface commands\n"
! 5261: "Time between HELLO packets\n"
! 5262: "Address of interface")
! 5263: {
! 5264: struct interface *ifp = vty->index;
! 5265: struct in_addr addr;
! 5266: int ret;
! 5267: struct ospf_if_params *params;
! 5268:
! 5269: ifp = vty->index;
! 5270: params = IF_DEF_PARAMS (ifp);
! 5271:
! 5272: if (argc == 1)
! 5273: {
! 5274: ret = inet_aton(argv[0], &addr);
! 5275: if (!ret)
! 5276: {
! 5277: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 5278: VTY_NEWLINE);
! 5279: return CMD_WARNING;
! 5280: }
! 5281:
! 5282: params = ospf_lookup_if_params (ifp, addr);
! 5283: if (params == NULL)
! 5284: return CMD_SUCCESS;
! 5285: }
! 5286:
! 5287: UNSET_IF_PARAM (params, v_hello);
! 5288: params->v_hello = OSPF_HELLO_INTERVAL_DEFAULT;
! 5289:
! 5290: if (params != IF_DEF_PARAMS (ifp))
! 5291: {
! 5292: ospf_free_if_params (ifp, addr);
! 5293: ospf_if_update_params (ifp, addr);
! 5294: }
! 5295:
! 5296: return CMD_SUCCESS;
! 5297: }
! 5298:
! 5299: ALIAS (no_ip_ospf_hello_interval,
! 5300: no_ip_ospf_hello_interval_cmd,
! 5301: "no ip ospf hello-interval",
! 5302: NO_STR
! 5303: "IP Information\n"
! 5304: "OSPF interface commands\n"
! 5305: "Time between HELLO packets\n")
! 5306:
! 5307: ALIAS (no_ip_ospf_hello_interval,
! 5308: no_ospf_hello_interval_cmd,
! 5309: "no ospf hello-interval",
! 5310: NO_STR
! 5311: "OSPF interface commands\n"
! 5312: "Time between HELLO packets\n")
! 5313:
! 5314: DEFUN (ip_ospf_network,
! 5315: ip_ospf_network_cmd,
! 5316: "ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
! 5317: "IP Information\n"
! 5318: "OSPF interface commands\n"
! 5319: "Network type\n"
! 5320: "Specify OSPF broadcast multi-access network\n"
! 5321: "Specify OSPF NBMA network\n"
! 5322: "Specify OSPF point-to-multipoint network\n"
! 5323: "Specify OSPF point-to-point network\n")
! 5324: {
! 5325: struct interface *ifp = vty->index;
! 5326: int old_type = IF_DEF_PARAMS (ifp)->type;
! 5327: struct route_node *rn;
! 5328:
! 5329: if (strncmp (argv[0], "b", 1) == 0)
! 5330: IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_BROADCAST;
! 5331: else if (strncmp (argv[0], "n", 1) == 0)
! 5332: IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_NBMA;
! 5333: else if (strncmp (argv[0], "point-to-m", 10) == 0)
! 5334: IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_POINTOMULTIPOINT;
! 5335: else if (strncmp (argv[0], "point-to-p", 10) == 0)
! 5336: IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_POINTOPOINT;
! 5337:
! 5338: if (IF_DEF_PARAMS (ifp)->type == old_type)
! 5339: return CMD_SUCCESS;
! 5340:
! 5341: SET_IF_PARAM (IF_DEF_PARAMS (ifp), type);
! 5342:
! 5343: for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
! 5344: {
! 5345: struct ospf_interface *oi = rn->info;
! 5346:
! 5347: if (!oi)
! 5348: continue;
! 5349:
! 5350: oi->type = IF_DEF_PARAMS (ifp)->type;
! 5351:
! 5352: if (oi->state > ISM_Down)
! 5353: {
! 5354: OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceDown);
! 5355: OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceUp);
! 5356: }
! 5357: }
! 5358:
! 5359: return CMD_SUCCESS;
! 5360: }
! 5361:
! 5362: ALIAS (ip_ospf_network,
! 5363: ospf_network_cmd,
! 5364: "ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
! 5365: "OSPF interface commands\n"
! 5366: "Network type\n"
! 5367: "Specify OSPF broadcast multi-access network\n"
! 5368: "Specify OSPF NBMA network\n"
! 5369: "Specify OSPF point-to-multipoint network\n"
! 5370: "Specify OSPF point-to-point network\n")
! 5371:
! 5372: DEFUN (no_ip_ospf_network,
! 5373: no_ip_ospf_network_cmd,
! 5374: "no ip ospf network",
! 5375: NO_STR
! 5376: "IP Information\n"
! 5377: "OSPF interface commands\n"
! 5378: "Network type\n")
! 5379: {
! 5380: struct interface *ifp = vty->index;
! 5381: int old_type = IF_DEF_PARAMS (ifp)->type;
! 5382: struct route_node *rn;
! 5383:
! 5384: IF_DEF_PARAMS (ifp)->type = ospf_default_iftype(ifp);
! 5385:
! 5386: if (IF_DEF_PARAMS (ifp)->type == old_type)
! 5387: return CMD_SUCCESS;
! 5388:
! 5389: for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
! 5390: {
! 5391: struct ospf_interface *oi = rn->info;
! 5392:
! 5393: if (!oi)
! 5394: continue;
! 5395:
! 5396: oi->type = IF_DEF_PARAMS (ifp)->type;
! 5397:
! 5398: if (oi->state > ISM_Down)
! 5399: {
! 5400: OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceDown);
! 5401: OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceUp);
! 5402: }
! 5403: }
! 5404:
! 5405: return CMD_SUCCESS;
! 5406: }
! 5407:
! 5408: ALIAS (no_ip_ospf_network,
! 5409: no_ospf_network_cmd,
! 5410: "no ospf network",
! 5411: NO_STR
! 5412: "OSPF interface commands\n"
! 5413: "Network type\n")
! 5414:
! 5415: DEFUN (ip_ospf_priority,
! 5416: ip_ospf_priority_addr_cmd,
! 5417: "ip ospf priority <0-255> A.B.C.D",
! 5418: "IP Information\n"
! 5419: "OSPF interface commands\n"
! 5420: "Router priority\n"
! 5421: "Priority\n"
! 5422: "Address of interface")
! 5423: {
! 5424: struct interface *ifp = vty->index;
! 5425: u_int32_t priority;
! 5426: struct route_node *rn;
! 5427: struct in_addr addr;
! 5428: int ret;
! 5429: struct ospf_if_params *params;
! 5430:
! 5431: params = IF_DEF_PARAMS (ifp);
! 5432:
! 5433: priority = strtol (argv[0], NULL, 10);
! 5434:
! 5435: /* Router Priority range is <0-255>. */
! 5436: if (priority < 0 || priority > 255)
! 5437: {
! 5438: vty_out (vty, "Router Priority is invalid%s", VTY_NEWLINE);
! 5439: return CMD_WARNING;
! 5440: }
! 5441:
! 5442: if (argc == 2)
! 5443: {
! 5444: ret = inet_aton(argv[1], &addr);
! 5445: if (!ret)
! 5446: {
! 5447: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 5448: VTY_NEWLINE);
! 5449: return CMD_WARNING;
! 5450: }
! 5451:
! 5452: params = ospf_get_if_params (ifp, addr);
! 5453: ospf_if_update_params (ifp, addr);
! 5454: }
! 5455:
! 5456: SET_IF_PARAM (params, priority);
! 5457: params->priority = priority;
! 5458:
! 5459: for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
! 5460: {
! 5461: struct ospf_interface *oi = rn->info;
! 5462:
! 5463: if (!oi)
! 5464: continue;
! 5465:
! 5466:
! 5467: if (PRIORITY (oi) != OSPF_IF_PARAM (oi, priority))
! 5468: {
! 5469: PRIORITY (oi) = OSPF_IF_PARAM (oi, priority);
! 5470: OSPF_ISM_EVENT_SCHEDULE (oi, ISM_NeighborChange);
! 5471: }
! 5472: }
! 5473:
! 5474: return CMD_SUCCESS;
! 5475: }
! 5476:
! 5477: ALIAS (ip_ospf_priority,
! 5478: ip_ospf_priority_cmd,
! 5479: "ip ospf priority <0-255>",
! 5480: "IP Information\n"
! 5481: "OSPF interface commands\n"
! 5482: "Router priority\n"
! 5483: "Priority\n")
! 5484:
! 5485: ALIAS (ip_ospf_priority,
! 5486: ospf_priority_cmd,
! 5487: "ospf priority <0-255>",
! 5488: "OSPF interface commands\n"
! 5489: "Router priority\n"
! 5490: "Priority\n")
! 5491:
! 5492: DEFUN (no_ip_ospf_priority,
! 5493: no_ip_ospf_priority_addr_cmd,
! 5494: "no ip ospf priority A.B.C.D",
! 5495: NO_STR
! 5496: "IP Information\n"
! 5497: "OSPF interface commands\n"
! 5498: "Router priority\n"
! 5499: "Address of interface")
! 5500: {
! 5501: struct interface *ifp = vty->index;
! 5502: struct route_node *rn;
! 5503: struct in_addr addr;
! 5504: int ret;
! 5505: struct ospf_if_params *params;
! 5506:
! 5507: ifp = vty->index;
! 5508: params = IF_DEF_PARAMS (ifp);
! 5509:
! 5510: if (argc == 1)
! 5511: {
! 5512: ret = inet_aton(argv[0], &addr);
! 5513: if (!ret)
! 5514: {
! 5515: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 5516: VTY_NEWLINE);
! 5517: return CMD_WARNING;
! 5518: }
! 5519:
! 5520: params = ospf_lookup_if_params (ifp, addr);
! 5521: if (params == NULL)
! 5522: return CMD_SUCCESS;
! 5523: }
! 5524:
! 5525: UNSET_IF_PARAM (params, priority);
! 5526: params->priority = OSPF_ROUTER_PRIORITY_DEFAULT;
! 5527:
! 5528: if (params != IF_DEF_PARAMS (ifp))
! 5529: {
! 5530: ospf_free_if_params (ifp, addr);
! 5531: ospf_if_update_params (ifp, addr);
! 5532: }
! 5533:
! 5534: for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
! 5535: {
! 5536: struct ospf_interface *oi = rn->info;
! 5537:
! 5538: if (!oi)
! 5539: continue;
! 5540:
! 5541:
! 5542: if (PRIORITY (oi) != OSPF_IF_PARAM (oi, priority))
! 5543: {
! 5544: PRIORITY (oi) = OSPF_IF_PARAM (oi, priority);
! 5545: OSPF_ISM_EVENT_SCHEDULE (oi, ISM_NeighborChange);
! 5546: }
! 5547: }
! 5548:
! 5549: return CMD_SUCCESS;
! 5550: }
! 5551:
! 5552: ALIAS (no_ip_ospf_priority,
! 5553: no_ip_ospf_priority_cmd,
! 5554: "no ip ospf priority",
! 5555: NO_STR
! 5556: "IP Information\n"
! 5557: "OSPF interface commands\n"
! 5558: "Router priority\n")
! 5559:
! 5560: ALIAS (no_ip_ospf_priority,
! 5561: no_ospf_priority_cmd,
! 5562: "no ospf priority",
! 5563: NO_STR
! 5564: "OSPF interface commands\n"
! 5565: "Router priority\n")
! 5566:
! 5567: DEFUN (ip_ospf_retransmit_interval,
! 5568: ip_ospf_retransmit_interval_addr_cmd,
! 5569: "ip ospf retransmit-interval <3-65535> A.B.C.D",
! 5570: "IP Information\n"
! 5571: "OSPF interface commands\n"
! 5572: "Time between retransmitting lost link state advertisements\n"
! 5573: "Seconds\n"
! 5574: "Address of interface")
! 5575: {
! 5576: struct interface *ifp = vty->index;
! 5577: u_int32_t seconds;
! 5578: struct in_addr addr;
! 5579: int ret;
! 5580: struct ospf_if_params *params;
! 5581:
! 5582: params = IF_DEF_PARAMS (ifp);
! 5583: seconds = strtol (argv[0], NULL, 10);
! 5584:
! 5585: /* Retransmit Interval range is <3-65535>. */
! 5586: if (seconds < 3 || seconds > 65535)
! 5587: {
! 5588: vty_out (vty, "Retransmit Interval is invalid%s", VTY_NEWLINE);
! 5589: return CMD_WARNING;
! 5590: }
! 5591:
! 5592:
! 5593: if (argc == 2)
! 5594: {
! 5595: ret = inet_aton(argv[1], &addr);
! 5596: if (!ret)
! 5597: {
! 5598: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 5599: VTY_NEWLINE);
! 5600: return CMD_WARNING;
! 5601: }
! 5602:
! 5603: params = ospf_get_if_params (ifp, addr);
! 5604: ospf_if_update_params (ifp, addr);
! 5605: }
! 5606:
! 5607: SET_IF_PARAM (params, retransmit_interval);
! 5608: params->retransmit_interval = seconds;
! 5609:
! 5610: return CMD_SUCCESS;
! 5611: }
! 5612:
! 5613: ALIAS (ip_ospf_retransmit_interval,
! 5614: ip_ospf_retransmit_interval_cmd,
! 5615: "ip ospf retransmit-interval <3-65535>",
! 5616: "IP Information\n"
! 5617: "OSPF interface commands\n"
! 5618: "Time between retransmitting lost link state advertisements\n"
! 5619: "Seconds\n")
! 5620:
! 5621: ALIAS (ip_ospf_retransmit_interval,
! 5622: ospf_retransmit_interval_cmd,
! 5623: "ospf retransmit-interval <3-65535>",
! 5624: "OSPF interface commands\n"
! 5625: "Time between retransmitting lost link state advertisements\n"
! 5626: "Seconds\n")
! 5627:
! 5628: DEFUN (no_ip_ospf_retransmit_interval,
! 5629: no_ip_ospf_retransmit_interval_addr_cmd,
! 5630: "no ip ospf retransmit-interval A.B.C.D",
! 5631: NO_STR
! 5632: "IP Information\n"
! 5633: "OSPF interface commands\n"
! 5634: "Time between retransmitting lost link state advertisements\n"
! 5635: "Address of interface")
! 5636: {
! 5637: struct interface *ifp = vty->index;
! 5638: struct in_addr addr;
! 5639: int ret;
! 5640: struct ospf_if_params *params;
! 5641:
! 5642: ifp = vty->index;
! 5643: params = IF_DEF_PARAMS (ifp);
! 5644:
! 5645: if (argc == 1)
! 5646: {
! 5647: ret = inet_aton(argv[0], &addr);
! 5648: if (!ret)
! 5649: {
! 5650: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 5651: VTY_NEWLINE);
! 5652: return CMD_WARNING;
! 5653: }
! 5654:
! 5655: params = ospf_lookup_if_params (ifp, addr);
! 5656: if (params == NULL)
! 5657: return CMD_SUCCESS;
! 5658: }
! 5659:
! 5660: UNSET_IF_PARAM (params, retransmit_interval);
! 5661: params->retransmit_interval = OSPF_RETRANSMIT_INTERVAL_DEFAULT;
! 5662:
! 5663: if (params != IF_DEF_PARAMS (ifp))
! 5664: {
! 5665: ospf_free_if_params (ifp, addr);
! 5666: ospf_if_update_params (ifp, addr);
! 5667: }
! 5668:
! 5669: return CMD_SUCCESS;
! 5670: }
! 5671:
! 5672: ALIAS (no_ip_ospf_retransmit_interval,
! 5673: no_ip_ospf_retransmit_interval_cmd,
! 5674: "no ip ospf retransmit-interval",
! 5675: NO_STR
! 5676: "IP Information\n"
! 5677: "OSPF interface commands\n"
! 5678: "Time between retransmitting lost link state advertisements\n")
! 5679:
! 5680: ALIAS (no_ip_ospf_retransmit_interval,
! 5681: no_ospf_retransmit_interval_cmd,
! 5682: "no ospf retransmit-interval",
! 5683: NO_STR
! 5684: "OSPF interface commands\n"
! 5685: "Time between retransmitting lost link state advertisements\n")
! 5686:
! 5687: DEFUN (ip_ospf_transmit_delay,
! 5688: ip_ospf_transmit_delay_addr_cmd,
! 5689: "ip ospf transmit-delay <1-65535> A.B.C.D",
! 5690: "IP Information\n"
! 5691: "OSPF interface commands\n"
! 5692: "Link state transmit delay\n"
! 5693: "Seconds\n"
! 5694: "Address of interface")
! 5695: {
! 5696: struct interface *ifp = vty->index;
! 5697: u_int32_t seconds;
! 5698: struct in_addr addr;
! 5699: int ret;
! 5700: struct ospf_if_params *params;
! 5701:
! 5702: params = IF_DEF_PARAMS (ifp);
! 5703: seconds = strtol (argv[0], NULL, 10);
! 5704:
! 5705: /* Transmit Delay range is <1-65535>. */
! 5706: if (seconds < 1 || seconds > 65535)
! 5707: {
! 5708: vty_out (vty, "Transmit Delay is invalid%s", VTY_NEWLINE);
! 5709: return CMD_WARNING;
! 5710: }
! 5711:
! 5712: if (argc == 2)
! 5713: {
! 5714: ret = inet_aton(argv[1], &addr);
! 5715: if (!ret)
! 5716: {
! 5717: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 5718: VTY_NEWLINE);
! 5719: return CMD_WARNING;
! 5720: }
! 5721:
! 5722: params = ospf_get_if_params (ifp, addr);
! 5723: ospf_if_update_params (ifp, addr);
! 5724: }
! 5725:
! 5726: SET_IF_PARAM (params, transmit_delay);
! 5727: params->transmit_delay = seconds;
! 5728:
! 5729: return CMD_SUCCESS;
! 5730: }
! 5731:
! 5732: ALIAS (ip_ospf_transmit_delay,
! 5733: ip_ospf_transmit_delay_cmd,
! 5734: "ip ospf transmit-delay <1-65535>",
! 5735: "IP Information\n"
! 5736: "OSPF interface commands\n"
! 5737: "Link state transmit delay\n"
! 5738: "Seconds\n")
! 5739:
! 5740: ALIAS (ip_ospf_transmit_delay,
! 5741: ospf_transmit_delay_cmd,
! 5742: "ospf transmit-delay <1-65535>",
! 5743: "OSPF interface commands\n"
! 5744: "Link state transmit delay\n"
! 5745: "Seconds\n")
! 5746:
! 5747: DEFUN (no_ip_ospf_transmit_delay,
! 5748: no_ip_ospf_transmit_delay_addr_cmd,
! 5749: "no ip ospf transmit-delay A.B.C.D",
! 5750: NO_STR
! 5751: "IP Information\n"
! 5752: "OSPF interface commands\n"
! 5753: "Link state transmit delay\n"
! 5754: "Address of interface")
! 5755: {
! 5756: struct interface *ifp = vty->index;
! 5757: struct in_addr addr;
! 5758: int ret;
! 5759: struct ospf_if_params *params;
! 5760:
! 5761: ifp = vty->index;
! 5762: params = IF_DEF_PARAMS (ifp);
! 5763:
! 5764: if (argc == 1)
! 5765: {
! 5766: ret = inet_aton(argv[0], &addr);
! 5767: if (!ret)
! 5768: {
! 5769: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 5770: VTY_NEWLINE);
! 5771: return CMD_WARNING;
! 5772: }
! 5773:
! 5774: params = ospf_lookup_if_params (ifp, addr);
! 5775: if (params == NULL)
! 5776: return CMD_SUCCESS;
! 5777: }
! 5778:
! 5779: UNSET_IF_PARAM (params, transmit_delay);
! 5780: params->transmit_delay = OSPF_TRANSMIT_DELAY_DEFAULT;
! 5781:
! 5782: if (params != IF_DEF_PARAMS (ifp))
! 5783: {
! 5784: ospf_free_if_params (ifp, addr);
! 5785: ospf_if_update_params (ifp, addr);
! 5786: }
! 5787:
! 5788: return CMD_SUCCESS;
! 5789: }
! 5790:
! 5791: ALIAS (no_ip_ospf_transmit_delay,
! 5792: no_ip_ospf_transmit_delay_cmd,
! 5793: "no ip ospf transmit-delay",
! 5794: NO_STR
! 5795: "IP Information\n"
! 5796: "OSPF interface commands\n"
! 5797: "Link state transmit delay\n")
! 5798:
! 5799: ALIAS (no_ip_ospf_transmit_delay,
! 5800: no_ospf_transmit_delay_cmd,
! 5801: "no ospf transmit-delay",
! 5802: NO_STR
! 5803: "OSPF interface commands\n"
! 5804: "Link state transmit delay\n")
! 5805:
! 5806:
! 5807: DEFUN (ospf_redistribute_source_metric_type,
! 5808: ospf_redistribute_source_metric_type_routemap_cmd,
! 5809: "redistribute " QUAGGA_REDIST_STR_OSPFD
! 5810: " metric <0-16777214> metric-type (1|2) route-map WORD",
! 5811: REDIST_STR
! 5812: QUAGGA_REDIST_HELP_STR_OSPFD
! 5813: "Metric for redistributed routes\n"
! 5814: "OSPF default metric\n"
! 5815: "OSPF exterior metric type for redistributed routes\n"
! 5816: "Set OSPF External Type 1 metrics\n"
! 5817: "Set OSPF External Type 2 metrics\n"
! 5818: "Route map reference\n"
! 5819: "Pointer to route-map entries\n")
! 5820: {
! 5821: struct ospf *ospf = vty->index;
! 5822: int source;
! 5823: int type = -1;
! 5824: int metric = -1;
! 5825:
! 5826: /* Get distribute source. */
! 5827: if (!str2distribute_source (argv[0], &source))
! 5828: return CMD_WARNING;
! 5829:
! 5830: /* Get metric value. */
! 5831: if (argc >= 2)
! 5832: if (!str2metric (argv[1], &metric))
! 5833: return CMD_WARNING;
! 5834:
! 5835: /* Get metric type. */
! 5836: if (argc >= 3)
! 5837: if (!str2metric_type (argv[2], &type))
! 5838: return CMD_WARNING;
! 5839:
! 5840: if (argc == 4)
! 5841: ospf_routemap_set (ospf, source, argv[3]);
! 5842: else
! 5843: ospf_routemap_unset (ospf, source);
! 5844:
! 5845: return ospf_redistribute_set (ospf, source, type, metric);
! 5846: }
! 5847:
! 5848: ALIAS (ospf_redistribute_source_metric_type,
! 5849: ospf_redistribute_source_metric_type_cmd,
! 5850: "redistribute " QUAGGA_REDIST_STR_OSPFD
! 5851: " metric <0-16777214> metric-type (1|2)",
! 5852: REDIST_STR
! 5853: QUAGGA_REDIST_HELP_STR_OSPFD
! 5854: "Metric for redistributed routes\n"
! 5855: "OSPF default metric\n"
! 5856: "OSPF exterior metric type for redistributed routes\n"
! 5857: "Set OSPF External Type 1 metrics\n"
! 5858: "Set OSPF External Type 2 metrics\n")
! 5859:
! 5860: ALIAS (ospf_redistribute_source_metric_type,
! 5861: ospf_redistribute_source_metric_cmd,
! 5862: "redistribute " QUAGGA_REDIST_STR_OSPFD " metric <0-16777214>",
! 5863: REDIST_STR
! 5864: QUAGGA_REDIST_HELP_STR_OSPFD
! 5865: "Metric for redistributed routes\n"
! 5866: "OSPF default metric\n")
! 5867:
! 5868: DEFUN (ospf_redistribute_source_type_metric,
! 5869: ospf_redistribute_source_type_metric_routemap_cmd,
! 5870: "redistribute " QUAGGA_REDIST_STR_OSPFD
! 5871: " metric-type (1|2) metric <0-16777214> route-map WORD",
! 5872: REDIST_STR
! 5873: QUAGGA_REDIST_HELP_STR_OSPFD
! 5874: "OSPF exterior metric type for redistributed routes\n"
! 5875: "Set OSPF External Type 1 metrics\n"
! 5876: "Set OSPF External Type 2 metrics\n"
! 5877: "Metric for redistributed routes\n"
! 5878: "OSPF default metric\n"
! 5879: "Route map reference\n"
! 5880: "Pointer to route-map entries\n")
! 5881: {
! 5882: struct ospf *ospf = vty->index;
! 5883: int source;
! 5884: int type = -1;
! 5885: int metric = -1;
! 5886:
! 5887: /* Get distribute source. */
! 5888: if (!str2distribute_source (argv[0], &source))
! 5889: return CMD_WARNING;
! 5890:
! 5891: /* Get metric value. */
! 5892: if (argc >= 2)
! 5893: if (!str2metric_type (argv[1], &type))
! 5894: return CMD_WARNING;
! 5895:
! 5896: /* Get metric type. */
! 5897: if (argc >= 3)
! 5898: if (!str2metric (argv[2], &metric))
! 5899: return CMD_WARNING;
! 5900:
! 5901: if (argc == 4)
! 5902: ospf_routemap_set (ospf, source, argv[3]);
! 5903: else
! 5904: ospf_routemap_unset (ospf, source);
! 5905:
! 5906: return ospf_redistribute_set (ospf, source, type, metric);
! 5907: }
! 5908:
! 5909: ALIAS (ospf_redistribute_source_type_metric,
! 5910: ospf_redistribute_source_type_metric_cmd,
! 5911: "redistribute " QUAGGA_REDIST_STR_OSPFD
! 5912: " metric-type (1|2) metric <0-16777214>",
! 5913: REDIST_STR
! 5914: QUAGGA_REDIST_HELP_STR_OSPFD
! 5915: "OSPF exterior metric type for redistributed routes\n"
! 5916: "Set OSPF External Type 1 metrics\n"
! 5917: "Set OSPF External Type 2 metrics\n"
! 5918: "Metric for redistributed routes\n"
! 5919: "OSPF default metric\n")
! 5920:
! 5921: ALIAS (ospf_redistribute_source_type_metric,
! 5922: ospf_redistribute_source_type_cmd,
! 5923: "redistribute " QUAGGA_REDIST_STR_OSPFD " metric-type (1|2)",
! 5924: REDIST_STR
! 5925: QUAGGA_REDIST_HELP_STR_OSPFD
! 5926: "OSPF exterior metric type for redistributed routes\n"
! 5927: "Set OSPF External Type 1 metrics\n"
! 5928: "Set OSPF External Type 2 metrics\n")
! 5929:
! 5930: ALIAS (ospf_redistribute_source_type_metric,
! 5931: ospf_redistribute_source_cmd,
! 5932: "redistribute " QUAGGA_REDIST_STR_OSPFD,
! 5933: REDIST_STR
! 5934: QUAGGA_REDIST_HELP_STR_OSPFD)
! 5935:
! 5936: DEFUN (ospf_redistribute_source_metric_routemap,
! 5937: ospf_redistribute_source_metric_routemap_cmd,
! 5938: "redistribute " QUAGGA_REDIST_STR_OSPFD
! 5939: " metric <0-16777214> route-map WORD",
! 5940: REDIST_STR
! 5941: QUAGGA_REDIST_HELP_STR_OSPFD
! 5942: "Metric for redistributed routes\n"
! 5943: "OSPF default metric\n"
! 5944: "Route map reference\n"
! 5945: "Pointer to route-map entries\n")
! 5946: {
! 5947: struct ospf *ospf = vty->index;
! 5948: int source;
! 5949: int metric = -1;
! 5950:
! 5951: /* Get distribute source. */
! 5952: if (!str2distribute_source (argv[0], &source))
! 5953: return CMD_WARNING;
! 5954:
! 5955: /* Get metric value. */
! 5956: if (argc >= 2)
! 5957: if (!str2metric (argv[1], &metric))
! 5958: return CMD_WARNING;
! 5959:
! 5960: if (argc == 3)
! 5961: ospf_routemap_set (ospf, source, argv[2]);
! 5962: else
! 5963: ospf_routemap_unset (ospf, source);
! 5964:
! 5965: return ospf_redistribute_set (ospf, source, -1, metric);
! 5966: }
! 5967:
! 5968: DEFUN (ospf_redistribute_source_type_routemap,
! 5969: ospf_redistribute_source_type_routemap_cmd,
! 5970: "redistribute " QUAGGA_REDIST_STR_OSPFD
! 5971: " metric-type (1|2) route-map WORD",
! 5972: REDIST_STR
! 5973: QUAGGA_REDIST_HELP_STR_OSPFD
! 5974: "OSPF exterior metric type for redistributed routes\n"
! 5975: "Set OSPF External Type 1 metrics\n"
! 5976: "Set OSPF External Type 2 metrics\n"
! 5977: "Route map reference\n"
! 5978: "Pointer to route-map entries\n")
! 5979: {
! 5980: struct ospf *ospf = vty->index;
! 5981: int source;
! 5982: int type = -1;
! 5983:
! 5984: /* Get distribute source. */
! 5985: if (!str2distribute_source (argv[0], &source))
! 5986: return CMD_WARNING;
! 5987:
! 5988: /* Get metric value. */
! 5989: if (argc >= 2)
! 5990: if (!str2metric_type (argv[1], &type))
! 5991: return CMD_WARNING;
! 5992:
! 5993: if (argc == 3)
! 5994: ospf_routemap_set (ospf, source, argv[2]);
! 5995: else
! 5996: ospf_routemap_unset (ospf, source);
! 5997:
! 5998: return ospf_redistribute_set (ospf, source, type, -1);
! 5999: }
! 6000:
! 6001: DEFUN (ospf_redistribute_source_routemap,
! 6002: ospf_redistribute_source_routemap_cmd,
! 6003: "redistribute " QUAGGA_REDIST_STR_OSPFD " route-map WORD",
! 6004: REDIST_STR
! 6005: QUAGGA_REDIST_HELP_STR_OSPFD
! 6006: "Route map reference\n"
! 6007: "Pointer to route-map entries\n")
! 6008: {
! 6009: struct ospf *ospf = vty->index;
! 6010: int source;
! 6011:
! 6012: /* Get distribute source. */
! 6013: if (!str2distribute_source (argv[0], &source))
! 6014: return CMD_WARNING;
! 6015:
! 6016: if (argc == 2)
! 6017: ospf_routemap_set (ospf, source, argv[1]);
! 6018: else
! 6019: ospf_routemap_unset (ospf, source);
! 6020:
! 6021: return ospf_redistribute_set (ospf, source, -1, -1);
! 6022: }
! 6023:
! 6024: DEFUN (no_ospf_redistribute_source,
! 6025: no_ospf_redistribute_source_cmd,
! 6026: "no redistribute " QUAGGA_REDIST_STR_OSPFD,
! 6027: NO_STR
! 6028: REDIST_STR
! 6029: QUAGGA_REDIST_HELP_STR_OSPFD)
! 6030: {
! 6031: struct ospf *ospf = vty->index;
! 6032: int source;
! 6033:
! 6034: if (!str2distribute_source (argv[0], &source))
! 6035: return CMD_WARNING;
! 6036:
! 6037: ospf_routemap_unset (ospf, source);
! 6038: return ospf_redistribute_unset (ospf, source);
! 6039: }
! 6040:
! 6041: DEFUN (ospf_distribute_list_out,
! 6042: ospf_distribute_list_out_cmd,
! 6043: "distribute-list WORD out " QUAGGA_REDIST_STR_OSPFD,
! 6044: "Filter networks in routing updates\n"
! 6045: "Access-list name\n"
! 6046: OUT_STR
! 6047: QUAGGA_REDIST_HELP_STR_OSPFD)
! 6048: {
! 6049: struct ospf *ospf = vty->index;
! 6050: int source;
! 6051:
! 6052: /* Get distribute source. */
! 6053: if (!str2distribute_source (argv[1], &source))
! 6054: return CMD_WARNING;
! 6055:
! 6056: return ospf_distribute_list_out_set (ospf, source, argv[0]);
! 6057: }
! 6058:
! 6059: DEFUN (no_ospf_distribute_list_out,
! 6060: no_ospf_distribute_list_out_cmd,
! 6061: "no distribute-list WORD out " QUAGGA_REDIST_STR_OSPFD,
! 6062: NO_STR
! 6063: "Filter networks in routing updates\n"
! 6064: "Access-list name\n"
! 6065: OUT_STR
! 6066: QUAGGA_REDIST_HELP_STR_OSPFD)
! 6067: {
! 6068: struct ospf *ospf = vty->index;
! 6069: int source;
! 6070:
! 6071: if (!str2distribute_source (argv[1], &source))
! 6072: return CMD_WARNING;
! 6073:
! 6074: return ospf_distribute_list_out_unset (ospf, source, argv[0]);
! 6075: }
! 6076:
! 6077: /* Default information originate. */
! 6078: DEFUN (ospf_default_information_originate_metric_type_routemap,
! 6079: ospf_default_information_originate_metric_type_routemap_cmd,
! 6080: "default-information originate metric <0-16777214> metric-type (1|2) route-map WORD",
! 6081: "Control distribution of default information\n"
! 6082: "Distribute a default route\n"
! 6083: "OSPF default metric\n"
! 6084: "OSPF metric\n"
! 6085: "OSPF metric type for default routes\n"
! 6086: "Set OSPF External Type 1 metrics\n"
! 6087: "Set OSPF External Type 2 metrics\n"
! 6088: "Route map reference\n"
! 6089: "Pointer to route-map entries\n")
! 6090: {
! 6091: struct ospf *ospf = vty->index;
! 6092: int type = -1;
! 6093: int metric = -1;
! 6094:
! 6095: /* Get metric value. */
! 6096: if (argc >= 1)
! 6097: if (!str2metric (argv[0], &metric))
! 6098: return CMD_WARNING;
! 6099:
! 6100: /* Get metric type. */
! 6101: if (argc >= 2)
! 6102: if (!str2metric_type (argv[1], &type))
! 6103: return CMD_WARNING;
! 6104:
! 6105: if (argc == 3)
! 6106: ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[2]);
! 6107: else
! 6108: ospf_routemap_unset (ospf, DEFAULT_ROUTE);
! 6109:
! 6110: return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA,
! 6111: type, metric);
! 6112: }
! 6113:
! 6114: ALIAS (ospf_default_information_originate_metric_type_routemap,
! 6115: ospf_default_information_originate_metric_type_cmd,
! 6116: "default-information originate metric <0-16777214> metric-type (1|2)",
! 6117: "Control distribution of default information\n"
! 6118: "Distribute a default route\n"
! 6119: "OSPF default metric\n"
! 6120: "OSPF metric\n"
! 6121: "OSPF metric type for default routes\n"
! 6122: "Set OSPF External Type 1 metrics\n"
! 6123: "Set OSPF External Type 2 metrics\n")
! 6124:
! 6125: ALIAS (ospf_default_information_originate_metric_type_routemap,
! 6126: ospf_default_information_originate_metric_cmd,
! 6127: "default-information originate metric <0-16777214>",
! 6128: "Control distribution of default information\n"
! 6129: "Distribute a default route\n"
! 6130: "OSPF default metric\n"
! 6131: "OSPF metric\n")
! 6132:
! 6133: ALIAS (ospf_default_information_originate_metric_type_routemap,
! 6134: ospf_default_information_originate_cmd,
! 6135: "default-information originate",
! 6136: "Control distribution of default information\n"
! 6137: "Distribute a default route\n")
! 6138:
! 6139: /* Default information originate. */
! 6140: DEFUN (ospf_default_information_originate_metric_routemap,
! 6141: ospf_default_information_originate_metric_routemap_cmd,
! 6142: "default-information originate metric <0-16777214> route-map WORD",
! 6143: "Control distribution of default information\n"
! 6144: "Distribute a default route\n"
! 6145: "OSPF default metric\n"
! 6146: "OSPF metric\n"
! 6147: "Route map reference\n"
! 6148: "Pointer to route-map entries\n")
! 6149: {
! 6150: struct ospf *ospf = vty->index;
! 6151: int metric = -1;
! 6152:
! 6153: /* Get metric value. */
! 6154: if (argc >= 1)
! 6155: if (!str2metric (argv[0], &metric))
! 6156: return CMD_WARNING;
! 6157:
! 6158: if (argc == 2)
! 6159: ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[1]);
! 6160: else
! 6161: ospf_routemap_unset (ospf, DEFAULT_ROUTE);
! 6162:
! 6163: return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA,
! 6164: -1, metric);
! 6165: }
! 6166:
! 6167: /* Default information originate. */
! 6168: DEFUN (ospf_default_information_originate_routemap,
! 6169: ospf_default_information_originate_routemap_cmd,
! 6170: "default-information originate route-map WORD",
! 6171: "Control distribution of default information\n"
! 6172: "Distribute a default route\n"
! 6173: "Route map reference\n"
! 6174: "Pointer to route-map entries\n")
! 6175: {
! 6176: struct ospf *ospf = vty->index;
! 6177:
! 6178: if (argc == 1)
! 6179: ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[0]);
! 6180: else
! 6181: ospf_routemap_unset (ospf, DEFAULT_ROUTE);
! 6182:
! 6183: return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA, -1, -1);
! 6184: }
! 6185:
! 6186: DEFUN (ospf_default_information_originate_type_metric_routemap,
! 6187: ospf_default_information_originate_type_metric_routemap_cmd,
! 6188: "default-information originate metric-type (1|2) metric <0-16777214> route-map WORD",
! 6189: "Control distribution of default information\n"
! 6190: "Distribute a default route\n"
! 6191: "OSPF metric type for default routes\n"
! 6192: "Set OSPF External Type 1 metrics\n"
! 6193: "Set OSPF External Type 2 metrics\n"
! 6194: "OSPF default metric\n"
! 6195: "OSPF metric\n"
! 6196: "Route map reference\n"
! 6197: "Pointer to route-map entries\n")
! 6198: {
! 6199: struct ospf *ospf = vty->index;
! 6200: int type = -1;
! 6201: int metric = -1;
! 6202:
! 6203: /* Get metric type. */
! 6204: if (argc >= 1)
! 6205: if (!str2metric_type (argv[0], &type))
! 6206: return CMD_WARNING;
! 6207:
! 6208: /* Get metric value. */
! 6209: if (argc >= 2)
! 6210: if (!str2metric (argv[1], &metric))
! 6211: return CMD_WARNING;
! 6212:
! 6213: if (argc == 3)
! 6214: ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[2]);
! 6215: else
! 6216: ospf_routemap_unset (ospf, DEFAULT_ROUTE);
! 6217:
! 6218: return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA,
! 6219: type, metric);
! 6220: }
! 6221:
! 6222: ALIAS (ospf_default_information_originate_type_metric_routemap,
! 6223: ospf_default_information_originate_type_metric_cmd,
! 6224: "default-information originate metric-type (1|2) metric <0-16777214>",
! 6225: "Control distribution of default information\n"
! 6226: "Distribute a default route\n"
! 6227: "OSPF metric type for default routes\n"
! 6228: "Set OSPF External Type 1 metrics\n"
! 6229: "Set OSPF External Type 2 metrics\n"
! 6230: "OSPF default metric\n"
! 6231: "OSPF metric\n")
! 6232:
! 6233: ALIAS (ospf_default_information_originate_type_metric_routemap,
! 6234: ospf_default_information_originate_type_cmd,
! 6235: "default-information originate metric-type (1|2)",
! 6236: "Control distribution of default information\n"
! 6237: "Distribute a default route\n"
! 6238: "OSPF metric type for default routes\n"
! 6239: "Set OSPF External Type 1 metrics\n"
! 6240: "Set OSPF External Type 2 metrics\n")
! 6241:
! 6242: DEFUN (ospf_default_information_originate_type_routemap,
! 6243: ospf_default_information_originate_type_routemap_cmd,
! 6244: "default-information originate metric-type (1|2) route-map WORD",
! 6245: "Control distribution of default information\n"
! 6246: "Distribute a default route\n"
! 6247: "OSPF metric type for default routes\n"
! 6248: "Set OSPF External Type 1 metrics\n"
! 6249: "Set OSPF External Type 2 metrics\n"
! 6250: "Route map reference\n"
! 6251: "Pointer to route-map entries\n")
! 6252: {
! 6253: struct ospf *ospf = vty->index;
! 6254: int type = -1;
! 6255:
! 6256: /* Get metric type. */
! 6257: if (argc >= 1)
! 6258: if (!str2metric_type (argv[0], &type))
! 6259: return CMD_WARNING;
! 6260:
! 6261: if (argc == 2)
! 6262: ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[1]);
! 6263: else
! 6264: ospf_routemap_unset (ospf, DEFAULT_ROUTE);
! 6265:
! 6266: return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA,
! 6267: type, -1);
! 6268: }
! 6269:
! 6270: DEFUN (ospf_default_information_originate_always_metric_type_routemap,
! 6271: ospf_default_information_originate_always_metric_type_routemap_cmd,
! 6272: "default-information originate always metric <0-16777214> metric-type (1|2) route-map WORD",
! 6273: "Control distribution of default information\n"
! 6274: "Distribute a default route\n"
! 6275: "Always advertise default route\n"
! 6276: "OSPF default metric\n"
! 6277: "OSPF metric\n"
! 6278: "OSPF metric type for default routes\n"
! 6279: "Set OSPF External Type 1 metrics\n"
! 6280: "Set OSPF External Type 2 metrics\n"
! 6281: "Route map reference\n"
! 6282: "Pointer to route-map entries\n")
! 6283: {
! 6284: struct ospf *ospf = vty->index;
! 6285: int type = -1;
! 6286: int metric = -1;
! 6287:
! 6288: /* Get metric value. */
! 6289: if (argc >= 1)
! 6290: if (!str2metric (argv[0], &metric))
! 6291: return CMD_WARNING;
! 6292:
! 6293: /* Get metric type. */
! 6294: if (argc >= 2)
! 6295: if (!str2metric_type (argv[1], &type))
! 6296: return CMD_WARNING;
! 6297:
! 6298: if (argc == 3)
! 6299: ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[2]);
! 6300: else
! 6301: ospf_routemap_unset (ospf, DEFAULT_ROUTE);
! 6302:
! 6303: return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS,
! 6304: type, metric);
! 6305: }
! 6306:
! 6307: ALIAS (ospf_default_information_originate_always_metric_type_routemap,
! 6308: ospf_default_information_originate_always_metric_type_cmd,
! 6309: "default-information originate always metric <0-16777214> metric-type (1|2)",
! 6310: "Control distribution of default information\n"
! 6311: "Distribute a default route\n"
! 6312: "Always advertise default route\n"
! 6313: "OSPF default metric\n"
! 6314: "OSPF metric\n"
! 6315: "OSPF metric type for default routes\n"
! 6316: "Set OSPF External Type 1 metrics\n"
! 6317: "Set OSPF External Type 2 metrics\n")
! 6318:
! 6319: ALIAS (ospf_default_information_originate_always_metric_type_routemap,
! 6320: ospf_default_information_originate_always_metric_cmd,
! 6321: "default-information originate always metric <0-16777214>",
! 6322: "Control distribution of default information\n"
! 6323: "Distribute a default route\n"
! 6324: "Always advertise default route\n"
! 6325: "OSPF default metric\n"
! 6326: "OSPF metric\n"
! 6327: "OSPF metric type for default routes\n")
! 6328:
! 6329: ALIAS (ospf_default_information_originate_always_metric_type_routemap,
! 6330: ospf_default_information_originate_always_cmd,
! 6331: "default-information originate always",
! 6332: "Control distribution of default information\n"
! 6333: "Distribute a default route\n"
! 6334: "Always advertise default route\n")
! 6335:
! 6336: DEFUN (ospf_default_information_originate_always_metric_routemap,
! 6337: ospf_default_information_originate_always_metric_routemap_cmd,
! 6338: "default-information originate always metric <0-16777214> route-map WORD",
! 6339: "Control distribution of default information\n"
! 6340: "Distribute a default route\n"
! 6341: "Always advertise default route\n"
! 6342: "OSPF default metric\n"
! 6343: "OSPF metric\n"
! 6344: "Route map reference\n"
! 6345: "Pointer to route-map entries\n")
! 6346: {
! 6347: struct ospf *ospf = vty->index;
! 6348: int metric = -1;
! 6349:
! 6350: /* Get metric value. */
! 6351: if (argc >= 1)
! 6352: if (!str2metric (argv[0], &metric))
! 6353: return CMD_WARNING;
! 6354:
! 6355: if (argc == 2)
! 6356: ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[1]);
! 6357: else
! 6358: ospf_routemap_unset (ospf, DEFAULT_ROUTE);
! 6359:
! 6360: return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS,
! 6361: -1, metric);
! 6362: }
! 6363:
! 6364: DEFUN (ospf_default_information_originate_always_routemap,
! 6365: ospf_default_information_originate_always_routemap_cmd,
! 6366: "default-information originate always route-map WORD",
! 6367: "Control distribution of default information\n"
! 6368: "Distribute a default route\n"
! 6369: "Always advertise default route\n"
! 6370: "Route map reference\n"
! 6371: "Pointer to route-map entries\n")
! 6372: {
! 6373: struct ospf *ospf = vty->index;
! 6374:
! 6375: if (argc == 1)
! 6376: ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[0]);
! 6377: else
! 6378: ospf_routemap_unset (ospf, DEFAULT_ROUTE);
! 6379:
! 6380: return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS, -1, -1);
! 6381: }
! 6382:
! 6383: DEFUN (ospf_default_information_originate_always_type_metric_routemap,
! 6384: ospf_default_information_originate_always_type_metric_routemap_cmd,
! 6385: "default-information originate always metric-type (1|2) metric <0-16777214> route-map WORD",
! 6386: "Control distribution of default information\n"
! 6387: "Distribute a default route\n"
! 6388: "Always advertise default route\n"
! 6389: "OSPF metric type for default routes\n"
! 6390: "Set OSPF External Type 1 metrics\n"
! 6391: "Set OSPF External Type 2 metrics\n"
! 6392: "OSPF default metric\n"
! 6393: "OSPF metric\n"
! 6394: "Route map reference\n"
! 6395: "Pointer to route-map entries\n")
! 6396: {
! 6397: struct ospf *ospf = vty->index;
! 6398: int type = -1;
! 6399: int metric = -1;
! 6400:
! 6401: /* Get metric type. */
! 6402: if (argc >= 1)
! 6403: if (!str2metric_type (argv[0], &type))
! 6404: return CMD_WARNING;
! 6405:
! 6406: /* Get metric value. */
! 6407: if (argc >= 2)
! 6408: if (!str2metric (argv[1], &metric))
! 6409: return CMD_WARNING;
! 6410:
! 6411: if (argc == 3)
! 6412: ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[2]);
! 6413: else
! 6414: ospf_routemap_unset (ospf, DEFAULT_ROUTE);
! 6415:
! 6416: return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS,
! 6417: type, metric);
! 6418: }
! 6419:
! 6420: ALIAS (ospf_default_information_originate_always_type_metric_routemap,
! 6421: ospf_default_information_originate_always_type_metric_cmd,
! 6422: "default-information originate always metric-type (1|2) metric <0-16777214>",
! 6423: "Control distribution of default information\n"
! 6424: "Distribute a default route\n"
! 6425: "Always advertise default route\n"
! 6426: "OSPF metric type for default routes\n"
! 6427: "Set OSPF External Type 1 metrics\n"
! 6428: "Set OSPF External Type 2 metrics\n"
! 6429: "OSPF default metric\n"
! 6430: "OSPF metric\n")
! 6431:
! 6432: ALIAS (ospf_default_information_originate_always_type_metric_routemap,
! 6433: ospf_default_information_originate_always_type_cmd,
! 6434: "default-information originate always metric-type (1|2)",
! 6435: "Control distribution of default information\n"
! 6436: "Distribute a default route\n"
! 6437: "Always advertise default route\n"
! 6438: "OSPF metric type for default routes\n"
! 6439: "Set OSPF External Type 1 metrics\n"
! 6440: "Set OSPF External Type 2 metrics\n")
! 6441:
! 6442: DEFUN (ospf_default_information_originate_always_type_routemap,
! 6443: ospf_default_information_originate_always_type_routemap_cmd,
! 6444: "default-information originate always metric-type (1|2) route-map WORD",
! 6445: "Control distribution of default information\n"
! 6446: "Distribute a default route\n"
! 6447: "Always advertise default route\n"
! 6448: "OSPF metric type for default routes\n"
! 6449: "Set OSPF External Type 1 metrics\n"
! 6450: "Set OSPF External Type 2 metrics\n"
! 6451: "Route map reference\n"
! 6452: "Pointer to route-map entries\n")
! 6453: {
! 6454: struct ospf *ospf = vty->index;
! 6455: int type = -1;
! 6456:
! 6457: /* Get metric type. */
! 6458: if (argc >= 1)
! 6459: if (!str2metric_type (argv[0], &type))
! 6460: return CMD_WARNING;
! 6461:
! 6462: if (argc == 2)
! 6463: ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[1]);
! 6464: else
! 6465: ospf_routemap_unset (ospf, DEFAULT_ROUTE);
! 6466:
! 6467: return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS,
! 6468: type, -1);
! 6469: }
! 6470:
! 6471: DEFUN (no_ospf_default_information_originate,
! 6472: no_ospf_default_information_originate_cmd,
! 6473: "no default-information originate",
! 6474: NO_STR
! 6475: "Control distribution of default information\n"
! 6476: "Distribute a default route\n")
! 6477: {
! 6478: struct ospf *ospf = vty->index;
! 6479: struct prefix_ipv4 p;
! 6480:
! 6481: p.family = AF_INET;
! 6482: p.prefix.s_addr = 0;
! 6483: p.prefixlen = 0;
! 6484:
! 6485: ospf_external_lsa_flush (ospf, DEFAULT_ROUTE, &p, 0);
! 6486:
! 6487: if (EXTERNAL_INFO (DEFAULT_ROUTE)) {
! 6488: ospf_external_info_delete (DEFAULT_ROUTE, p);
! 6489: route_table_finish (EXTERNAL_INFO (DEFAULT_ROUTE));
! 6490: EXTERNAL_INFO (DEFAULT_ROUTE) = NULL;
! 6491: }
! 6492:
! 6493: ospf_routemap_unset (ospf, DEFAULT_ROUTE);
! 6494: return ospf_redistribute_default_unset (ospf);
! 6495: }
! 6496:
! 6497: DEFUN (ospf_default_metric,
! 6498: ospf_default_metric_cmd,
! 6499: "default-metric <0-16777214>",
! 6500: "Set metric of redistributed routes\n"
! 6501: "Default metric\n")
! 6502: {
! 6503: struct ospf *ospf = vty->index;
! 6504: int metric = -1;
! 6505:
! 6506: if (!str2metric (argv[0], &metric))
! 6507: return CMD_WARNING;
! 6508:
! 6509: ospf->default_metric = metric;
! 6510:
! 6511: return CMD_SUCCESS;
! 6512: }
! 6513:
! 6514: DEFUN (no_ospf_default_metric,
! 6515: no_ospf_default_metric_cmd,
! 6516: "no default-metric",
! 6517: NO_STR
! 6518: "Set metric of redistributed routes\n")
! 6519: {
! 6520: struct ospf *ospf = vty->index;
! 6521:
! 6522: ospf->default_metric = -1;
! 6523:
! 6524: return CMD_SUCCESS;
! 6525: }
! 6526:
! 6527: ALIAS (no_ospf_default_metric,
! 6528: no_ospf_default_metric_val_cmd,
! 6529: "no default-metric <0-16777214>",
! 6530: NO_STR
! 6531: "Set metric of redistributed routes\n"
! 6532: "Default metric\n")
! 6533:
! 6534: DEFUN (ospf_distance,
! 6535: ospf_distance_cmd,
! 6536: "distance <1-255>",
! 6537: "Define an administrative distance\n"
! 6538: "OSPF Administrative distance\n")
! 6539: {
! 6540: struct ospf *ospf = vty->index;
! 6541:
! 6542: ospf->distance_all = atoi (argv[0]);
! 6543:
! 6544: return CMD_SUCCESS;
! 6545: }
! 6546:
! 6547: DEFUN (no_ospf_distance,
! 6548: no_ospf_distance_cmd,
! 6549: "no distance <1-255>",
! 6550: NO_STR
! 6551: "Define an administrative distance\n"
! 6552: "OSPF Administrative distance\n")
! 6553: {
! 6554: struct ospf *ospf = vty->index;
! 6555:
! 6556: ospf->distance_all = 0;
! 6557:
! 6558: return CMD_SUCCESS;
! 6559: }
! 6560:
! 6561: DEFUN (no_ospf_distance_ospf,
! 6562: no_ospf_distance_ospf_cmd,
! 6563: "no distance ospf",
! 6564: NO_STR
! 6565: "Define an administrative distance\n"
! 6566: "OSPF Administrative distance\n"
! 6567: "OSPF Distance\n")
! 6568: {
! 6569: struct ospf *ospf = vty->index;
! 6570:
! 6571: ospf->distance_intra = 0;
! 6572: ospf->distance_inter = 0;
! 6573: ospf->distance_external = 0;
! 6574:
! 6575: return CMD_SUCCESS;
! 6576: }
! 6577:
! 6578: DEFUN (ospf_distance_ospf_intra,
! 6579: ospf_distance_ospf_intra_cmd,
! 6580: "distance ospf intra-area <1-255>",
! 6581: "Define an administrative distance\n"
! 6582: "OSPF Administrative distance\n"
! 6583: "Intra-area routes\n"
! 6584: "Distance for intra-area routes\n")
! 6585: {
! 6586: struct ospf *ospf = vty->index;
! 6587:
! 6588: ospf->distance_intra = atoi (argv[0]);
! 6589:
! 6590: return CMD_SUCCESS;
! 6591: }
! 6592:
! 6593: DEFUN (ospf_distance_ospf_intra_inter,
! 6594: ospf_distance_ospf_intra_inter_cmd,
! 6595: "distance ospf intra-area <1-255> inter-area <1-255>",
! 6596: "Define an administrative distance\n"
! 6597: "OSPF Administrative distance\n"
! 6598: "Intra-area routes\n"
! 6599: "Distance for intra-area routes\n"
! 6600: "Inter-area routes\n"
! 6601: "Distance for inter-area routes\n")
! 6602: {
! 6603: struct ospf *ospf = vty->index;
! 6604:
! 6605: ospf->distance_intra = atoi (argv[0]);
! 6606: ospf->distance_inter = atoi (argv[1]);
! 6607:
! 6608: return CMD_SUCCESS;
! 6609: }
! 6610:
! 6611: DEFUN (ospf_distance_ospf_intra_external,
! 6612: ospf_distance_ospf_intra_external_cmd,
! 6613: "distance ospf intra-area <1-255> external <1-255>",
! 6614: "Define an administrative distance\n"
! 6615: "OSPF Administrative distance\n"
! 6616: "Intra-area routes\n"
! 6617: "Distance for intra-area routes\n"
! 6618: "External routes\n"
! 6619: "Distance for external routes\n")
! 6620: {
! 6621: struct ospf *ospf = vty->index;
! 6622:
! 6623: ospf->distance_intra = atoi (argv[0]);
! 6624: ospf->distance_external = atoi (argv[1]);
! 6625:
! 6626: return CMD_SUCCESS;
! 6627: }
! 6628:
! 6629: DEFUN (ospf_distance_ospf_intra_inter_external,
! 6630: ospf_distance_ospf_intra_inter_external_cmd,
! 6631: "distance ospf intra-area <1-255> inter-area <1-255> external <1-255>",
! 6632: "Define an administrative distance\n"
! 6633: "OSPF Administrative distance\n"
! 6634: "Intra-area routes\n"
! 6635: "Distance for intra-area routes\n"
! 6636: "Inter-area routes\n"
! 6637: "Distance for inter-area routes\n"
! 6638: "External routes\n"
! 6639: "Distance for external routes\n")
! 6640: {
! 6641: struct ospf *ospf = vty->index;
! 6642:
! 6643: ospf->distance_intra = atoi (argv[0]);
! 6644: ospf->distance_inter = atoi (argv[1]);
! 6645: ospf->distance_external = atoi (argv[2]);
! 6646:
! 6647: return CMD_SUCCESS;
! 6648: }
! 6649:
! 6650: DEFUN (ospf_distance_ospf_intra_external_inter,
! 6651: ospf_distance_ospf_intra_external_inter_cmd,
! 6652: "distance ospf intra-area <1-255> external <1-255> inter-area <1-255>",
! 6653: "Define an administrative distance\n"
! 6654: "OSPF Administrative distance\n"
! 6655: "Intra-area routes\n"
! 6656: "Distance for intra-area routes\n"
! 6657: "External routes\n"
! 6658: "Distance for external routes\n"
! 6659: "Inter-area routes\n"
! 6660: "Distance for inter-area routes\n")
! 6661: {
! 6662: struct ospf *ospf = vty->index;
! 6663:
! 6664: ospf->distance_intra = atoi (argv[0]);
! 6665: ospf->distance_external = atoi (argv[1]);
! 6666: ospf->distance_inter = atoi (argv[2]);
! 6667:
! 6668: return CMD_SUCCESS;
! 6669: }
! 6670:
! 6671: DEFUN (ospf_distance_ospf_inter,
! 6672: ospf_distance_ospf_inter_cmd,
! 6673: "distance ospf inter-area <1-255>",
! 6674: "Define an administrative distance\n"
! 6675: "OSPF Administrative distance\n"
! 6676: "Inter-area routes\n"
! 6677: "Distance for inter-area routes\n")
! 6678: {
! 6679: struct ospf *ospf = vty->index;
! 6680:
! 6681: ospf->distance_inter = atoi (argv[0]);
! 6682:
! 6683: return CMD_SUCCESS;
! 6684: }
! 6685:
! 6686: DEFUN (ospf_distance_ospf_inter_intra,
! 6687: ospf_distance_ospf_inter_intra_cmd,
! 6688: "distance ospf inter-area <1-255> intra-area <1-255>",
! 6689: "Define an administrative distance\n"
! 6690: "OSPF Administrative distance\n"
! 6691: "Inter-area routes\n"
! 6692: "Distance for inter-area routes\n"
! 6693: "Intra-area routes\n"
! 6694: "Distance for intra-area routes\n")
! 6695: {
! 6696: struct ospf *ospf = vty->index;
! 6697:
! 6698: ospf->distance_inter = atoi (argv[0]);
! 6699: ospf->distance_intra = atoi (argv[1]);
! 6700:
! 6701: return CMD_SUCCESS;
! 6702: }
! 6703:
! 6704: DEFUN (ospf_distance_ospf_inter_external,
! 6705: ospf_distance_ospf_inter_external_cmd,
! 6706: "distance ospf inter-area <1-255> external <1-255>",
! 6707: "Define an administrative distance\n"
! 6708: "OSPF Administrative distance\n"
! 6709: "Inter-area routes\n"
! 6710: "Distance for inter-area routes\n"
! 6711: "External routes\n"
! 6712: "Distance for external routes\n")
! 6713: {
! 6714: struct ospf *ospf = vty->index;
! 6715:
! 6716: ospf->distance_inter = atoi (argv[0]);
! 6717: ospf->distance_external = atoi (argv[1]);
! 6718:
! 6719: return CMD_SUCCESS;
! 6720: }
! 6721:
! 6722: DEFUN (ospf_distance_ospf_inter_intra_external,
! 6723: ospf_distance_ospf_inter_intra_external_cmd,
! 6724: "distance ospf inter-area <1-255> intra-area <1-255> external <1-255>",
! 6725: "Define an administrative distance\n"
! 6726: "OSPF Administrative distance\n"
! 6727: "Inter-area routes\n"
! 6728: "Distance for inter-area routes\n"
! 6729: "Intra-area routes\n"
! 6730: "Distance for intra-area routes\n"
! 6731: "External routes\n"
! 6732: "Distance for external routes\n")
! 6733: {
! 6734: struct ospf *ospf = vty->index;
! 6735:
! 6736: ospf->distance_inter = atoi (argv[0]);
! 6737: ospf->distance_intra = atoi (argv[1]);
! 6738: ospf->distance_external = atoi (argv[2]);
! 6739:
! 6740: return CMD_SUCCESS;
! 6741: }
! 6742:
! 6743: DEFUN (ospf_distance_ospf_inter_external_intra,
! 6744: ospf_distance_ospf_inter_external_intra_cmd,
! 6745: "distance ospf inter-area <1-255> external <1-255> intra-area <1-255>",
! 6746: "Define an administrative distance\n"
! 6747: "OSPF Administrative distance\n"
! 6748: "Inter-area routes\n"
! 6749: "Distance for inter-area routes\n"
! 6750: "External routes\n"
! 6751: "Distance for external routes\n"
! 6752: "Intra-area routes\n"
! 6753: "Distance for intra-area routes\n")
! 6754: {
! 6755: struct ospf *ospf = vty->index;
! 6756:
! 6757: ospf->distance_inter = atoi (argv[0]);
! 6758: ospf->distance_external = atoi (argv[1]);
! 6759: ospf->distance_intra = atoi (argv[2]);
! 6760:
! 6761: return CMD_SUCCESS;
! 6762: }
! 6763:
! 6764: DEFUN (ospf_distance_ospf_external,
! 6765: ospf_distance_ospf_external_cmd,
! 6766: "distance ospf external <1-255>",
! 6767: "Define an administrative distance\n"
! 6768: "OSPF Administrative distance\n"
! 6769: "External routes\n"
! 6770: "Distance for external routes\n")
! 6771: {
! 6772: struct ospf *ospf = vty->index;
! 6773:
! 6774: ospf->distance_external = atoi (argv[0]);
! 6775:
! 6776: return CMD_SUCCESS;
! 6777: }
! 6778:
! 6779: DEFUN (ospf_distance_ospf_external_intra,
! 6780: ospf_distance_ospf_external_intra_cmd,
! 6781: "distance ospf external <1-255> intra-area <1-255>",
! 6782: "Define an administrative distance\n"
! 6783: "OSPF Administrative distance\n"
! 6784: "External routes\n"
! 6785: "Distance for external routes\n"
! 6786: "Intra-area routes\n"
! 6787: "Distance for intra-area routes\n")
! 6788: {
! 6789: struct ospf *ospf = vty->index;
! 6790:
! 6791: ospf->distance_external = atoi (argv[0]);
! 6792: ospf->distance_intra = atoi (argv[1]);
! 6793:
! 6794: return CMD_SUCCESS;
! 6795: }
! 6796:
! 6797: DEFUN (ospf_distance_ospf_external_inter,
! 6798: ospf_distance_ospf_external_inter_cmd,
! 6799: "distance ospf external <1-255> inter-area <1-255>",
! 6800: "Define an administrative distance\n"
! 6801: "OSPF Administrative distance\n"
! 6802: "External routes\n"
! 6803: "Distance for external routes\n"
! 6804: "Inter-area routes\n"
! 6805: "Distance for inter-area routes\n")
! 6806: {
! 6807: struct ospf *ospf = vty->index;
! 6808:
! 6809: ospf->distance_external = atoi (argv[0]);
! 6810: ospf->distance_inter = atoi (argv[1]);
! 6811:
! 6812: return CMD_SUCCESS;
! 6813: }
! 6814:
! 6815: DEFUN (ospf_distance_ospf_external_intra_inter,
! 6816: ospf_distance_ospf_external_intra_inter_cmd,
! 6817: "distance ospf external <1-255> intra-area <1-255> inter-area <1-255>",
! 6818: "Define an administrative distance\n"
! 6819: "OSPF Administrative distance\n"
! 6820: "External routes\n"
! 6821: "Distance for external routes\n"
! 6822: "Intra-area routes\n"
! 6823: "Distance for intra-area routes\n"
! 6824: "Inter-area routes\n"
! 6825: "Distance for inter-area routes\n")
! 6826: {
! 6827: struct ospf *ospf = vty->index;
! 6828:
! 6829: ospf->distance_external = atoi (argv[0]);
! 6830: ospf->distance_intra = atoi (argv[1]);
! 6831: ospf->distance_inter = atoi (argv[2]);
! 6832:
! 6833: return CMD_SUCCESS;
! 6834: }
! 6835:
! 6836: DEFUN (ospf_distance_ospf_external_inter_intra,
! 6837: ospf_distance_ospf_external_inter_intra_cmd,
! 6838: "distance ospf external <1-255> inter-area <1-255> intra-area <1-255>",
! 6839: "Define an administrative distance\n"
! 6840: "OSPF Administrative distance\n"
! 6841: "External routes\n"
! 6842: "Distance for external routes\n"
! 6843: "Inter-area routes\n"
! 6844: "Distance for inter-area routes\n"
! 6845: "Intra-area routes\n"
! 6846: "Distance for intra-area routes\n")
! 6847: {
! 6848: struct ospf *ospf = vty->index;
! 6849:
! 6850: ospf->distance_external = atoi (argv[0]);
! 6851: ospf->distance_inter = atoi (argv[1]);
! 6852: ospf->distance_intra = atoi (argv[2]);
! 6853:
! 6854: return CMD_SUCCESS;
! 6855: }
! 6856:
! 6857: DEFUN (ospf_distance_source,
! 6858: ospf_distance_source_cmd,
! 6859: "distance <1-255> A.B.C.D/M",
! 6860: "Administrative distance\n"
! 6861: "Distance value\n"
! 6862: "IP source prefix\n")
! 6863: {
! 6864: struct ospf *ospf = vty->index;
! 6865:
! 6866: ospf_distance_set (vty, ospf, argv[0], argv[1], NULL);
! 6867:
! 6868: return CMD_SUCCESS;
! 6869: }
! 6870:
! 6871: DEFUN (no_ospf_distance_source,
! 6872: no_ospf_distance_source_cmd,
! 6873: "no distance <1-255> A.B.C.D/M",
! 6874: NO_STR
! 6875: "Administrative distance\n"
! 6876: "Distance value\n"
! 6877: "IP source prefix\n")
! 6878: {
! 6879: struct ospf *ospf = vty->index;
! 6880:
! 6881: ospf_distance_unset (vty, ospf, argv[0], argv[1], NULL);
! 6882:
! 6883: return CMD_SUCCESS;
! 6884: }
! 6885:
! 6886: DEFUN (ospf_distance_source_access_list,
! 6887: ospf_distance_source_access_list_cmd,
! 6888: "distance <1-255> A.B.C.D/M WORD",
! 6889: "Administrative distance\n"
! 6890: "Distance value\n"
! 6891: "IP source prefix\n"
! 6892: "Access list name\n")
! 6893: {
! 6894: struct ospf *ospf = vty->index;
! 6895:
! 6896: ospf_distance_set (vty, ospf, argv[0], argv[1], argv[2]);
! 6897:
! 6898: return CMD_SUCCESS;
! 6899: }
! 6900:
! 6901: DEFUN (no_ospf_distance_source_access_list,
! 6902: no_ospf_distance_source_access_list_cmd,
! 6903: "no distance <1-255> A.B.C.D/M WORD",
! 6904: NO_STR
! 6905: "Administrative distance\n"
! 6906: "Distance value\n"
! 6907: "IP source prefix\n"
! 6908: "Access list name\n")
! 6909: {
! 6910: struct ospf *ospf = vty->index;
! 6911:
! 6912: ospf_distance_unset (vty, ospf, argv[0], argv[1], argv[2]);
! 6913:
! 6914: return CMD_SUCCESS;
! 6915: }
! 6916:
! 6917: DEFUN (ip_ospf_mtu_ignore,
! 6918: ip_ospf_mtu_ignore_addr_cmd,
! 6919: "ip ospf mtu-ignore A.B.C.D",
! 6920: "IP Information\n"
! 6921: "OSPF interface commands\n"
! 6922: "Disable mtu mismatch detection\n"
! 6923: "Address of interface")
! 6924: {
! 6925: struct interface *ifp = vty->index;
! 6926: struct in_addr addr;
! 6927: int ret;
! 6928:
! 6929: struct ospf_if_params *params;
! 6930: params = IF_DEF_PARAMS (ifp);
! 6931:
! 6932: if (argc == 1)
! 6933: {
! 6934: ret = inet_aton(argv[0], &addr);
! 6935: if (!ret)
! 6936: {
! 6937: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 6938: VTY_NEWLINE);
! 6939: return CMD_WARNING;
! 6940: }
! 6941: params = ospf_get_if_params (ifp, addr);
! 6942: ospf_if_update_params (ifp, addr);
! 6943: }
! 6944: params->mtu_ignore = 1;
! 6945: if (params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT)
! 6946: SET_IF_PARAM (params, mtu_ignore);
! 6947: else
! 6948: {
! 6949: UNSET_IF_PARAM (params, mtu_ignore);
! 6950: if (params != IF_DEF_PARAMS (ifp))
! 6951: {
! 6952: ospf_free_if_params (ifp, addr);
! 6953: ospf_if_update_params (ifp, addr);
! 6954: }
! 6955: }
! 6956: return CMD_SUCCESS;
! 6957: }
! 6958:
! 6959: ALIAS (ip_ospf_mtu_ignore,
! 6960: ip_ospf_mtu_ignore_cmd,
! 6961: "ip ospf mtu-ignore",
! 6962: "IP Information\n"
! 6963: "OSPF interface commands\n"
! 6964: "Disable mtu mismatch detection\n")
! 6965:
! 6966:
! 6967: DEFUN (no_ip_ospf_mtu_ignore,
! 6968: no_ip_ospf_mtu_ignore_addr_cmd,
! 6969: "no ip ospf mtu-ignore A.B.C.D",
! 6970: "IP Information\n"
! 6971: "OSPF interface commands\n"
! 6972: "Disable mtu mismatch detection\n"
! 6973: "Address of interface")
! 6974: {
! 6975: struct interface *ifp = vty->index;
! 6976: struct in_addr addr;
! 6977: int ret;
! 6978:
! 6979: struct ospf_if_params *params;
! 6980: params = IF_DEF_PARAMS (ifp);
! 6981:
! 6982: if (argc == 1)
! 6983: {
! 6984: ret = inet_aton(argv[0], &addr);
! 6985: if (!ret)
! 6986: {
! 6987: vty_out (vty, "Please specify interface address by A.B.C.D%s",
! 6988: VTY_NEWLINE);
! 6989: return CMD_WARNING;
! 6990: }
! 6991: params = ospf_get_if_params (ifp, addr);
! 6992: ospf_if_update_params (ifp, addr);
! 6993: }
! 6994: params->mtu_ignore = 0;
! 6995: if (params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT)
! 6996: SET_IF_PARAM (params, mtu_ignore);
! 6997: else
! 6998: {
! 6999: UNSET_IF_PARAM (params, mtu_ignore);
! 7000: if (params != IF_DEF_PARAMS (ifp))
! 7001: {
! 7002: ospf_free_if_params (ifp, addr);
! 7003: ospf_if_update_params (ifp, addr);
! 7004: }
! 7005: }
! 7006: return CMD_SUCCESS;
! 7007: }
! 7008:
! 7009: ALIAS (no_ip_ospf_mtu_ignore,
! 7010: no_ip_ospf_mtu_ignore_cmd,
! 7011: "no ip ospf mtu-ignore",
! 7012: "IP Information\n"
! 7013: "OSPF interface commands\n"
! 7014: "Disable mtu mismatch detection\n")
! 7015:
! 7016: DEFUN (ospf_max_metric_router_lsa_admin,
! 7017: ospf_max_metric_router_lsa_admin_cmd,
! 7018: "max-metric router-lsa administrative",
! 7019: "OSPF maximum / infinite-distance metric\n"
! 7020: "Advertise own Router-LSA with infinite distance (stub router)\n"
! 7021: "Administratively applied, for an indefinite period\n")
! 7022: {
! 7023: struct listnode *ln;
! 7024: struct ospf_area *area;
! 7025: struct ospf *ospf = vty->index;
! 7026:
! 7027: for (ALL_LIST_ELEMENTS_RO (ospf->areas, ln, area))
! 7028: {
! 7029: SET_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED);
! 7030:
! 7031: if (!CHECK_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED))
! 7032: ospf_router_lsa_update_area (area);
! 7033: }
! 7034: return CMD_SUCCESS;
! 7035: }
! 7036:
! 7037: DEFUN (no_ospf_max_metric_router_lsa_admin,
! 7038: no_ospf_max_metric_router_lsa_admin_cmd,
! 7039: "no max-metric router-lsa administrative",
! 7040: NO_STR
! 7041: "OSPF maximum / infinite-distance metric\n"
! 7042: "Advertise own Router-LSA with infinite distance (stub router)\n"
! 7043: "Administratively applied, for an indefinite period\n")
! 7044: {
! 7045: struct listnode *ln;
! 7046: struct ospf_area *area;
! 7047: struct ospf *ospf = vty->index;
! 7048:
! 7049: for (ALL_LIST_ELEMENTS_RO (ospf->areas, ln, area))
! 7050: {
! 7051: UNSET_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED);
! 7052:
! 7053: /* Don't trample on the start-up stub timer */
! 7054: if (CHECK_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED)
! 7055: && !area->t_stub_router)
! 7056: {
! 7057: UNSET_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED);
! 7058: ospf_router_lsa_update_area (area);
! 7059: }
! 7060: }
! 7061: return CMD_SUCCESS;
! 7062: }
! 7063:
! 7064: DEFUN (ospf_max_metric_router_lsa_startup,
! 7065: ospf_max_metric_router_lsa_startup_cmd,
! 7066: "max-metric router-lsa on-startup <5-86400>",
! 7067: "OSPF maximum / infinite-distance metric\n"
! 7068: "Advertise own Router-LSA with infinite distance (stub router)\n"
! 7069: "Automatically advertise stub Router-LSA on startup of OSPF\n"
! 7070: "Time (seconds) to advertise self as stub-router\n")
! 7071: {
! 7072: unsigned int seconds;
! 7073: struct ospf *ospf = vty->index;
! 7074:
! 7075: if (argc != 1)
! 7076: {
! 7077: vty_out (vty, "%% Must supply stub-router period");
! 7078: return CMD_WARNING;
! 7079: }
! 7080:
! 7081: VTY_GET_INTEGER ("stub-router startup period", seconds, argv[0]);
! 7082:
! 7083: ospf->stub_router_startup_time = seconds;
! 7084:
! 7085: return CMD_SUCCESS;
! 7086: }
! 7087:
! 7088: DEFUN (no_ospf_max_metric_router_lsa_startup,
! 7089: no_ospf_max_metric_router_lsa_startup_cmd,
! 7090: "no max-metric router-lsa on-startup",
! 7091: NO_STR
! 7092: "OSPF maximum / infinite-distance metric\n"
! 7093: "Advertise own Router-LSA with infinite distance (stub router)\n"
! 7094: "Automatically advertise stub Router-LSA on startup of OSPF\n")
! 7095: {
! 7096: struct listnode *ln;
! 7097: struct ospf_area *area;
! 7098: struct ospf *ospf = vty->index;
! 7099:
! 7100: ospf->stub_router_startup_time = OSPF_STUB_ROUTER_UNCONFIGURED;
! 7101:
! 7102: for (ALL_LIST_ELEMENTS_RO (ospf->areas, ln, area))
! 7103: {
! 7104: SET_FLAG (area->stub_router_state, OSPF_AREA_WAS_START_STUB_ROUTED);
! 7105: OSPF_TIMER_OFF (area->t_stub_router);
! 7106:
! 7107: /* Don't trample on admin stub routed */
! 7108: if (!CHECK_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED))
! 7109: {
! 7110: UNSET_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED);
! 7111: ospf_router_lsa_update_area (area);
! 7112: }
! 7113: }
! 7114: return CMD_SUCCESS;
! 7115: }
! 7116:
! 7117: DEFUN (ospf_max_metric_router_lsa_shutdown,
! 7118: ospf_max_metric_router_lsa_shutdown_cmd,
! 7119: "max-metric router-lsa on-shutdown <5-86400>",
! 7120: "OSPF maximum / infinite-distance metric\n"
! 7121: "Advertise own Router-LSA with infinite distance (stub router)\n"
! 7122: "Advertise stub-router prior to full shutdown of OSPF\n"
! 7123: "Time (seconds) to wait till full shutdown\n")
! 7124: {
! 7125: unsigned int seconds;
! 7126: struct ospf *ospf = vty->index;
! 7127:
! 7128: if (argc != 1)
! 7129: {
! 7130: vty_out (vty, "%% Must supply stub-router shutdown period");
! 7131: return CMD_WARNING;
! 7132: }
! 7133:
! 7134: VTY_GET_INTEGER ("stub-router shutdown wait period", seconds, argv[0]);
! 7135:
! 7136: ospf->stub_router_shutdown_time = seconds;
! 7137:
! 7138: return CMD_SUCCESS;
! 7139: }
! 7140:
! 7141: DEFUN (no_ospf_max_metric_router_lsa_shutdown,
! 7142: no_ospf_max_metric_router_lsa_shutdown_cmd,
! 7143: "no max-metric router-lsa on-shutdown",
! 7144: NO_STR
! 7145: "OSPF maximum / infinite-distance metric\n"
! 7146: "Advertise own Router-LSA with infinite distance (stub router)\n"
! 7147: "Advertise stub-router prior to full shutdown of OSPF\n")
! 7148: {
! 7149: struct ospf *ospf = vty->index;
! 7150:
! 7151: ospf->stub_router_shutdown_time = OSPF_STUB_ROUTER_UNCONFIGURED;
! 7152:
! 7153: return CMD_SUCCESS;
! 7154: }
! 7155:
! 7156: static void
! 7157: config_write_stub_router (struct vty *vty, struct ospf *ospf)
! 7158: {
! 7159: struct listnode *ln;
! 7160: struct ospf_area *area;
! 7161:
! 7162: if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED)
! 7163: vty_out (vty, " max-metric router-lsa on-startup %u%s",
! 7164: ospf->stub_router_startup_time, VTY_NEWLINE);
! 7165: if (ospf->stub_router_shutdown_time != OSPF_STUB_ROUTER_UNCONFIGURED)
! 7166: vty_out (vty, " max-metric router-lsa on-shutdown %u%s",
! 7167: ospf->stub_router_shutdown_time, VTY_NEWLINE);
! 7168: for (ALL_LIST_ELEMENTS_RO (ospf->areas, ln, area))
! 7169: {
! 7170: if (CHECK_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED))
! 7171: {
! 7172: vty_out (vty, " max-metric router-lsa administrative%s",
! 7173: VTY_NEWLINE);
! 7174: break;
! 7175: }
! 7176: }
! 7177: return;
! 7178: }
! 7179:
! 7180: static void
! 7181: show_ip_ospf_route_network (struct vty *vty, struct route_table *rt)
! 7182: {
! 7183: struct route_node *rn;
! 7184: struct ospf_route *or;
! 7185: struct listnode *pnode, *pnnode;
! 7186: struct ospf_path *path;
! 7187:
! 7188: vty_out (vty, "============ OSPF network routing table ============%s",
! 7189: VTY_NEWLINE);
! 7190:
! 7191: for (rn = route_top (rt); rn; rn = route_next (rn))
! 7192: if ((or = rn->info) != NULL)
! 7193: {
! 7194: char buf1[19];
! 7195: snprintf (buf1, 19, "%s/%d",
! 7196: inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen);
! 7197:
! 7198: switch (or->path_type)
! 7199: {
! 7200: case OSPF_PATH_INTER_AREA:
! 7201: if (or->type == OSPF_DESTINATION_NETWORK)
! 7202: vty_out (vty, "N IA %-18s [%d] area: %s%s", buf1, or->cost,
! 7203: inet_ntoa (or->u.std.area_id), VTY_NEWLINE);
! 7204: else if (or->type == OSPF_DESTINATION_DISCARD)
! 7205: vty_out (vty, "D IA %-18s Discard entry%s", buf1, VTY_NEWLINE);
! 7206: break;
! 7207: case OSPF_PATH_INTRA_AREA:
! 7208: vty_out (vty, "N %-18s [%d] area: %s%s", buf1, or->cost,
! 7209: inet_ntoa (or->u.std.area_id), VTY_NEWLINE);
! 7210: break;
! 7211: default:
! 7212: break;
! 7213: }
! 7214:
! 7215: if (or->type == OSPF_DESTINATION_NETWORK)
! 7216: for (ALL_LIST_ELEMENTS (or->paths, pnode, pnnode, path))
! 7217: {
! 7218: if (if_lookup_by_index(path->ifindex))
! 7219: {
! 7220: if (path->nexthop.s_addr == 0)
! 7221: vty_out (vty, "%24s directly attached to %s%s",
! 7222: "", ifindex2ifname (path->ifindex), VTY_NEWLINE);
! 7223: else
! 7224: vty_out (vty, "%24s via %s, %s%s", "",
! 7225: inet_ntoa (path->nexthop),
! 7226: ifindex2ifname (path->ifindex), VTY_NEWLINE);
! 7227: }
! 7228: }
! 7229: }
! 7230: vty_out (vty, "%s", VTY_NEWLINE);
! 7231: }
! 7232:
! 7233: static void
! 7234: show_ip_ospf_route_router (struct vty *vty, struct route_table *rtrs)
! 7235: {
! 7236: struct route_node *rn;
! 7237: struct ospf_route *or;
! 7238: struct listnode *pnode;
! 7239: struct listnode *node;
! 7240: struct ospf_path *path;
! 7241:
! 7242: vty_out (vty, "============ OSPF router routing table =============%s",
! 7243: VTY_NEWLINE);
! 7244: for (rn = route_top (rtrs); rn; rn = route_next (rn))
! 7245: if (rn->info)
! 7246: {
! 7247: int flag = 0;
! 7248:
! 7249: vty_out (vty, "R %-15s ", inet_ntoa (rn->p.u.prefix4));
! 7250:
! 7251: for (ALL_LIST_ELEMENTS_RO ((struct list *)rn->info, node, or))
! 7252: {
! 7253: if (flag++)
! 7254: vty_out (vty, "%24s", "");
! 7255:
! 7256: /* Show path. */
! 7257: vty_out (vty, "%s [%d] area: %s",
! 7258: (or->path_type == OSPF_PATH_INTER_AREA ? "IA" : " "),
! 7259: or->cost, inet_ntoa (or->u.std.area_id));
! 7260: /* Show flags. */
! 7261: vty_out (vty, "%s%s%s",
! 7262: (or->u.std.flags & ROUTER_LSA_BORDER ? ", ABR" : ""),
! 7263: (or->u.std.flags & ROUTER_LSA_EXTERNAL ? ", ASBR" : ""),
! 7264: VTY_NEWLINE);
! 7265:
! 7266: for (ALL_LIST_ELEMENTS_RO (or->paths, pnode, path))
! 7267: {
! 7268: if (if_lookup_by_index(path->ifindex))
! 7269: {
! 7270: if (path->nexthop.s_addr == 0)
! 7271: vty_out (vty, "%24s directly attached to %s%s",
! 7272: "", ifindex2ifname (path->ifindex),
! 7273: VTY_NEWLINE);
! 7274: else
! 7275: vty_out (vty, "%24s via %s, %s%s", "",
! 7276: inet_ntoa (path->nexthop),
! 7277: ifindex2ifname (path->ifindex),
! 7278: VTY_NEWLINE);
! 7279: }
! 7280: }
! 7281: }
! 7282: }
! 7283: vty_out (vty, "%s", VTY_NEWLINE);
! 7284: }
! 7285:
! 7286: static void
! 7287: show_ip_ospf_route_external (struct vty *vty, struct route_table *rt)
! 7288: {
! 7289: struct route_node *rn;
! 7290: struct ospf_route *er;
! 7291: struct listnode *pnode, *pnnode;
! 7292: struct ospf_path *path;
! 7293:
! 7294: vty_out (vty, "============ OSPF external routing table ===========%s",
! 7295: VTY_NEWLINE);
! 7296: for (rn = route_top (rt); rn; rn = route_next (rn))
! 7297: if ((er = rn->info) != NULL)
! 7298: {
! 7299: char buf1[19];
! 7300: snprintf (buf1, 19, "%s/%d",
! 7301: inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen);
! 7302:
! 7303: switch (er->path_type)
! 7304: {
! 7305: case OSPF_PATH_TYPE1_EXTERNAL:
! 7306: vty_out (vty, "N E1 %-18s [%d] tag: %u%s", buf1,
! 7307: er->cost, er->u.ext.tag, VTY_NEWLINE);
! 7308: break;
! 7309: case OSPF_PATH_TYPE2_EXTERNAL:
! 7310: vty_out (vty, "N E2 %-18s [%d/%d] tag: %u%s", buf1, er->cost,
! 7311: er->u.ext.type2_cost, er->u.ext.tag, VTY_NEWLINE);
! 7312: break;
! 7313: }
! 7314:
! 7315: for (ALL_LIST_ELEMENTS (er->paths, pnode, pnnode, path))
! 7316: {
! 7317: if (if_lookup_by_index(path->ifindex))
! 7318: {
! 7319: if (path->nexthop.s_addr == 0)
! 7320: vty_out (vty, "%24s directly attached to %s%s",
! 7321: "", ifindex2ifname (path->ifindex), VTY_NEWLINE);
! 7322: else
! 7323: vty_out (vty, "%24s via %s, %s%s", "",
! 7324: inet_ntoa (path->nexthop),
! 7325: ifindex2ifname (path->ifindex),
! 7326: VTY_NEWLINE);
! 7327: }
! 7328: }
! 7329: }
! 7330: vty_out (vty, "%s", VTY_NEWLINE);
! 7331: }
! 7332:
! 7333: DEFUN (show_ip_ospf_border_routers,
! 7334: show_ip_ospf_border_routers_cmd,
! 7335: "show ip ospf border-routers",
! 7336: SHOW_STR
! 7337: IP_STR
! 7338: "show all the ABR's and ASBR's\n"
! 7339: "for this area\n")
! 7340: {
! 7341: struct ospf *ospf;
! 7342:
! 7343: if ((ospf = ospf_lookup ()) == NULL)
! 7344: {
! 7345: vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 7346: return CMD_SUCCESS;
! 7347: }
! 7348:
! 7349: if (ospf->new_table == NULL)
! 7350: {
! 7351: vty_out (vty, "No OSPF routing information exist%s", VTY_NEWLINE);
! 7352: return CMD_SUCCESS;
! 7353: }
! 7354:
! 7355: /* Show Network routes.
! 7356: show_ip_ospf_route_network (vty, ospf->new_table); */
! 7357:
! 7358: /* Show Router routes. */
! 7359: show_ip_ospf_route_router (vty, ospf->new_rtrs);
! 7360:
! 7361: return CMD_SUCCESS;
! 7362: }
! 7363:
! 7364: DEFUN (show_ip_ospf_route,
! 7365: show_ip_ospf_route_cmd,
! 7366: "show ip ospf route",
! 7367: SHOW_STR
! 7368: IP_STR
! 7369: "OSPF information\n"
! 7370: "OSPF routing table\n")
! 7371: {
! 7372: struct ospf *ospf;
! 7373:
! 7374: if ((ospf = ospf_lookup ()) == NULL)
! 7375: {
! 7376: vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
! 7377: return CMD_SUCCESS;
! 7378: }
! 7379:
! 7380: if (ospf->new_table == NULL)
! 7381: {
! 7382: vty_out (vty, "No OSPF routing information exist%s", VTY_NEWLINE);
! 7383: return CMD_SUCCESS;
! 7384: }
! 7385:
! 7386: /* Show Network routes. */
! 7387: show_ip_ospf_route_network (vty, ospf->new_table);
! 7388:
! 7389: /* Show Router routes. */
! 7390: show_ip_ospf_route_router (vty, ospf->new_rtrs);
! 7391:
! 7392: /* Show AS External routes. */
! 7393: show_ip_ospf_route_external (vty, ospf->old_external_route);
! 7394:
! 7395: return CMD_SUCCESS;
! 7396: }
! 7397:
! 7398:
! 7399: const char *ospf_abr_type_str[] =
! 7400: {
! 7401: "unknown",
! 7402: "standard",
! 7403: "ibm",
! 7404: "cisco",
! 7405: "shortcut"
! 7406: };
! 7407:
! 7408: const char *ospf_shortcut_mode_str[] =
! 7409: {
! 7410: "default",
! 7411: "enable",
! 7412: "disable"
! 7413: };
! 7414:
! 7415:
! 7416: static void
! 7417: area_id2str (char *buf, int length, struct ospf_area *area)
! 7418: {
! 7419: memset (buf, 0, length);
! 7420:
! 7421: if (area->format == OSPF_AREA_ID_FORMAT_ADDRESS)
! 7422: strncpy (buf, inet_ntoa (area->area_id), length);
! 7423: else
! 7424: sprintf (buf, "%lu", (unsigned long) ntohl (area->area_id.s_addr));
! 7425: }
! 7426:
! 7427:
! 7428: const char *ospf_int_type_str[] =
! 7429: {
! 7430: "unknown", /* should never be used. */
! 7431: "point-to-point",
! 7432: "broadcast",
! 7433: "non-broadcast",
! 7434: "point-to-multipoint",
! 7435: "virtual-link", /* should never be used. */
! 7436: "loopback"
! 7437: };
! 7438:
! 7439: /* Configuration write function for ospfd. */
! 7440: static int
! 7441: config_write_interface (struct vty *vty)
! 7442: {
! 7443: struct listnode *n1, *n2;
! 7444: struct interface *ifp;
! 7445: struct crypt_key *ck;
! 7446: int write = 0;
! 7447: struct route_node *rn = NULL;
! 7448: struct ospf_if_params *params;
! 7449:
! 7450: for (ALL_LIST_ELEMENTS_RO (iflist, n1, ifp))
! 7451: {
! 7452: if (memcmp (ifp->name, "VLINK", 5) == 0)
! 7453: continue;
! 7454:
! 7455: vty_out (vty, "!%s", VTY_NEWLINE);
! 7456: vty_out (vty, "interface %s%s", ifp->name,
! 7457: VTY_NEWLINE);
! 7458: if (ifp->desc)
! 7459: vty_out (vty, " description %s%s", ifp->desc,
! 7460: VTY_NEWLINE);
! 7461:
! 7462: write++;
! 7463:
! 7464: params = IF_DEF_PARAMS (ifp);
! 7465:
! 7466: do {
! 7467: /* Interface Network print. */
! 7468: if (OSPF_IF_PARAM_CONFIGURED (params, type) &&
! 7469: params->type != OSPF_IFTYPE_LOOPBACK)
! 7470: {
! 7471: if (params->type != ospf_default_iftype(ifp))
! 7472: {
! 7473: vty_out (vty, " ip ospf network %s",
! 7474: ospf_int_type_str[params->type]);
! 7475: if (params != IF_DEF_PARAMS (ifp))
! 7476: vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
! 7477: vty_out (vty, "%s", VTY_NEWLINE);
! 7478: }
! 7479: }
! 7480:
! 7481: /* OSPF interface authentication print */
! 7482: if (OSPF_IF_PARAM_CONFIGURED (params, auth_type) &&
! 7483: params->auth_type != OSPF_AUTH_NOTSET)
! 7484: {
! 7485: const char *auth_str;
! 7486:
! 7487: /* Translation tables are not that much help here due to syntax
! 7488: of the simple option */
! 7489: switch (params->auth_type)
! 7490: {
! 7491:
! 7492: case OSPF_AUTH_NULL:
! 7493: auth_str = " null";
! 7494: break;
! 7495:
! 7496: case OSPF_AUTH_SIMPLE:
! 7497: auth_str = "";
! 7498: break;
! 7499:
! 7500: case OSPF_AUTH_CRYPTOGRAPHIC:
! 7501: auth_str = " message-digest";
! 7502: break;
! 7503:
! 7504: default:
! 7505: auth_str = "";
! 7506: break;
! 7507: }
! 7508:
! 7509: vty_out (vty, " ip ospf authentication%s", auth_str);
! 7510: if (params != IF_DEF_PARAMS (ifp))
! 7511: vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
! 7512: vty_out (vty, "%s", VTY_NEWLINE);
! 7513: }
! 7514:
! 7515: /* Simple Authentication Password print. */
! 7516: if (OSPF_IF_PARAM_CONFIGURED (params, auth_simple) &&
! 7517: params->auth_simple[0] != '\0')
! 7518: {
! 7519: vty_out (vty, " ip ospf authentication-key %s",
! 7520: params->auth_simple);
! 7521: if (params != IF_DEF_PARAMS (ifp))
! 7522: vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
! 7523: vty_out (vty, "%s", VTY_NEWLINE);
! 7524: }
! 7525:
! 7526: /* Cryptographic Authentication Key print. */
! 7527: for (ALL_LIST_ELEMENTS_RO (params->auth_crypt, n2, ck))
! 7528: {
! 7529: vty_out (vty, " ip ospf message-digest-key %d md5 %s",
! 7530: ck->key_id, ck->auth_key);
! 7531: if (params != IF_DEF_PARAMS (ifp))
! 7532: vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
! 7533: vty_out (vty, "%s", VTY_NEWLINE);
! 7534: }
! 7535:
! 7536: /* Interface Output Cost print. */
! 7537: if (OSPF_IF_PARAM_CONFIGURED (params, output_cost_cmd))
! 7538: {
! 7539: vty_out (vty, " ip ospf cost %u", params->output_cost_cmd);
! 7540: if (params != IF_DEF_PARAMS (ifp))
! 7541: vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
! 7542: vty_out (vty, "%s", VTY_NEWLINE);
! 7543: }
! 7544:
! 7545: /* Hello Interval print. */
! 7546: if (OSPF_IF_PARAM_CONFIGURED (params, v_hello) &&
! 7547: params->v_hello != OSPF_HELLO_INTERVAL_DEFAULT)
! 7548: {
! 7549: vty_out (vty, " ip ospf hello-interval %u", params->v_hello);
! 7550: if (params != IF_DEF_PARAMS (ifp))
! 7551: vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
! 7552: vty_out (vty, "%s", VTY_NEWLINE);
! 7553: }
! 7554:
! 7555:
! 7556: /* Router Dead Interval print. */
! 7557: if (OSPF_IF_PARAM_CONFIGURED (params, v_wait) &&
! 7558: params->v_wait != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT)
! 7559: {
! 7560: vty_out (vty, " ip ospf dead-interval ");
! 7561:
! 7562: /* fast hello ? */
! 7563: if (OSPF_IF_PARAM_CONFIGURED (params, fast_hello))
! 7564: vty_out (vty, "minimal hello-multiplier %d",
! 7565: params->fast_hello);
! 7566: else
! 7567: vty_out (vty, "%u", params->v_wait);
! 7568:
! 7569: if (params != IF_DEF_PARAMS (ifp))
! 7570: vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
! 7571: vty_out (vty, "%s", VTY_NEWLINE);
! 7572: }
! 7573:
! 7574: /* Router Priority print. */
! 7575: if (OSPF_IF_PARAM_CONFIGURED (params, priority) &&
! 7576: params->priority != OSPF_ROUTER_PRIORITY_DEFAULT)
! 7577: {
! 7578: vty_out (vty, " ip ospf priority %u", params->priority);
! 7579: if (params != IF_DEF_PARAMS (ifp))
! 7580: vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
! 7581: vty_out (vty, "%s", VTY_NEWLINE);
! 7582: }
! 7583:
! 7584: /* Retransmit Interval print. */
! 7585: if (OSPF_IF_PARAM_CONFIGURED (params, retransmit_interval) &&
! 7586: params->retransmit_interval != OSPF_RETRANSMIT_INTERVAL_DEFAULT)
! 7587: {
! 7588: vty_out (vty, " ip ospf retransmit-interval %u",
! 7589: params->retransmit_interval);
! 7590: if (params != IF_DEF_PARAMS (ifp))
! 7591: vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
! 7592: vty_out (vty, "%s", VTY_NEWLINE);
! 7593: }
! 7594:
! 7595: /* Transmit Delay print. */
! 7596: if (OSPF_IF_PARAM_CONFIGURED (params, transmit_delay) &&
! 7597: params->transmit_delay != OSPF_TRANSMIT_DELAY_DEFAULT)
! 7598: {
! 7599: vty_out (vty, " ip ospf transmit-delay %u", params->transmit_delay);
! 7600: if (params != IF_DEF_PARAMS (ifp))
! 7601: vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
! 7602: vty_out (vty, "%s", VTY_NEWLINE);
! 7603: }
! 7604:
! 7605: /* MTU ignore print. */
! 7606: if (OSPF_IF_PARAM_CONFIGURED (params, mtu_ignore) &&
! 7607: params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT)
! 7608: {
! 7609: if (params->mtu_ignore == 0)
! 7610: vty_out (vty, " no ip ospf mtu-ignore");
! 7611: else
! 7612: vty_out (vty, " ip ospf mtu-ignore");
! 7613: if (params != IF_DEF_PARAMS (ifp))
! 7614: vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
! 7615: vty_out (vty, "%s", VTY_NEWLINE);
! 7616: }
! 7617:
! 7618:
! 7619: while (1)
! 7620: {
! 7621: if (rn == NULL)
! 7622: rn = route_top (IF_OIFS_PARAMS (ifp));
! 7623: else
! 7624: rn = route_next (rn);
! 7625:
! 7626: if (rn == NULL)
! 7627: break;
! 7628: params = rn->info;
! 7629: if (params != NULL)
! 7630: break;
! 7631: }
! 7632: } while (rn);
! 7633:
! 7634: #ifdef HAVE_OPAQUE_LSA
! 7635: ospf_opaque_config_write_if (vty, ifp);
! 7636: #endif /* HAVE_OPAQUE_LSA */
! 7637: }
! 7638:
! 7639: return write;
! 7640: }
! 7641:
! 7642: static int
! 7643: config_write_network_area (struct vty *vty, struct ospf *ospf)
! 7644: {
! 7645: struct route_node *rn;
! 7646: u_char buf[INET_ADDRSTRLEN];
! 7647:
! 7648: /* `network area' print. */
! 7649: for (rn = route_top (ospf->networks); rn; rn = route_next (rn))
! 7650: if (rn->info)
! 7651: {
! 7652: struct ospf_network *n = rn->info;
! 7653:
! 7654: memset (buf, 0, INET_ADDRSTRLEN);
! 7655:
! 7656: /* Create Area ID string by specified Area ID format. */
! 7657: if (n->format == OSPF_AREA_ID_FORMAT_ADDRESS)
! 7658: strncpy ((char *) buf, inet_ntoa (n->area_id), INET_ADDRSTRLEN);
! 7659: else
! 7660: sprintf ((char *) buf, "%lu",
! 7661: (unsigned long int) ntohl (n->area_id.s_addr));
! 7662:
! 7663: /* Network print. */
! 7664: vty_out (vty, " network %s/%d area %s%s",
! 7665: inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen,
! 7666: buf, VTY_NEWLINE);
! 7667: }
! 7668:
! 7669: return 0;
! 7670: }
! 7671:
! 7672: static int
! 7673: config_write_ospf_area (struct vty *vty, struct ospf *ospf)
! 7674: {
! 7675: struct listnode *node;
! 7676: struct ospf_area *area;
! 7677: u_char buf[INET_ADDRSTRLEN];
! 7678:
! 7679: /* Area configuration print. */
! 7680: for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
! 7681: {
! 7682: struct route_node *rn1;
! 7683:
! 7684: area_id2str ((char *) buf, INET_ADDRSTRLEN, area);
! 7685:
! 7686: if (area->auth_type != OSPF_AUTH_NULL)
! 7687: {
! 7688: if (area->auth_type == OSPF_AUTH_SIMPLE)
! 7689: vty_out (vty, " area %s authentication%s", buf, VTY_NEWLINE);
! 7690: else
! 7691: vty_out (vty, " area %s authentication message-digest%s",
! 7692: buf, VTY_NEWLINE);
! 7693: }
! 7694:
! 7695: if (area->shortcut_configured != OSPF_SHORTCUT_DEFAULT)
! 7696: vty_out (vty, " area %s shortcut %s%s", buf,
! 7697: ospf_shortcut_mode_str[area->shortcut_configured],
! 7698: VTY_NEWLINE);
! 7699:
! 7700: if ((area->external_routing == OSPF_AREA_STUB)
! 7701: || (area->external_routing == OSPF_AREA_NSSA)
! 7702: )
! 7703: {
! 7704: if (area->external_routing == OSPF_AREA_STUB)
! 7705: vty_out (vty, " area %s stub", buf);
! 7706: else if (area->external_routing == OSPF_AREA_NSSA)
! 7707: {
! 7708: vty_out (vty, " area %s nssa", buf);
! 7709: switch (area->NSSATranslatorRole)
! 7710: {
! 7711: case OSPF_NSSA_ROLE_NEVER:
! 7712: vty_out (vty, " translate-never");
! 7713: break;
! 7714: case OSPF_NSSA_ROLE_ALWAYS:
! 7715: vty_out (vty, " translate-always");
! 7716: break;
! 7717: case OSPF_NSSA_ROLE_CANDIDATE:
! 7718: default:
! 7719: vty_out (vty, " translate-candidate");
! 7720: }
! 7721: }
! 7722:
! 7723: if (area->no_summary)
! 7724: vty_out (vty, " no-summary");
! 7725:
! 7726: vty_out (vty, "%s", VTY_NEWLINE);
! 7727:
! 7728: if (area->default_cost != 1)
! 7729: vty_out (vty, " area %s default-cost %d%s", buf,
! 7730: area->default_cost, VTY_NEWLINE);
! 7731: }
! 7732:
! 7733: for (rn1 = route_top (area->ranges); rn1; rn1 = route_next (rn1))
! 7734: if (rn1->info)
! 7735: {
! 7736: struct ospf_area_range *range = rn1->info;
! 7737:
! 7738: vty_out (vty, " area %s range %s/%d", buf,
! 7739: inet_ntoa (rn1->p.u.prefix4), rn1->p.prefixlen);
! 7740:
! 7741: if (range->cost_config != OSPF_AREA_RANGE_COST_UNSPEC)
! 7742: vty_out (vty, " cost %d", range->cost_config);
! 7743:
! 7744: if (!CHECK_FLAG (range->flags, OSPF_AREA_RANGE_ADVERTISE))
! 7745: vty_out (vty, " not-advertise");
! 7746:
! 7747: if (CHECK_FLAG (range->flags, OSPF_AREA_RANGE_SUBSTITUTE))
! 7748: vty_out (vty, " substitute %s/%d",
! 7749: inet_ntoa (range->subst_addr), range->subst_masklen);
! 7750:
! 7751: vty_out (vty, "%s", VTY_NEWLINE);
! 7752: }
! 7753:
! 7754: if (EXPORT_NAME (area))
! 7755: vty_out (vty, " area %s export-list %s%s", buf,
! 7756: EXPORT_NAME (area), VTY_NEWLINE);
! 7757:
! 7758: if (IMPORT_NAME (area))
! 7759: vty_out (vty, " area %s import-list %s%s", buf,
! 7760: IMPORT_NAME (area), VTY_NEWLINE);
! 7761:
! 7762: if (PREFIX_NAME_IN (area))
! 7763: vty_out (vty, " area %s filter-list prefix %s in%s", buf,
! 7764: PREFIX_NAME_IN (area), VTY_NEWLINE);
! 7765:
! 7766: if (PREFIX_NAME_OUT (area))
! 7767: vty_out (vty, " area %s filter-list prefix %s out%s", buf,
! 7768: PREFIX_NAME_OUT (area), VTY_NEWLINE);
! 7769: }
! 7770:
! 7771: return 0;
! 7772: }
! 7773:
! 7774: static int
! 7775: config_write_ospf_nbr_nbma (struct vty *vty, struct ospf *ospf)
! 7776: {
! 7777: struct ospf_nbr_nbma *nbr_nbma;
! 7778: struct route_node *rn;
! 7779:
! 7780: /* Static Neighbor configuration print. */
! 7781: for (rn = route_top (ospf->nbr_nbma); rn; rn = route_next (rn))
! 7782: if ((nbr_nbma = rn->info))
! 7783: {
! 7784: vty_out (vty, " neighbor %s", inet_ntoa (nbr_nbma->addr));
! 7785:
! 7786: if (nbr_nbma->priority != OSPF_NEIGHBOR_PRIORITY_DEFAULT)
! 7787: vty_out (vty, " priority %d", nbr_nbma->priority);
! 7788:
! 7789: if (nbr_nbma->v_poll != OSPF_POLL_INTERVAL_DEFAULT)
! 7790: vty_out (vty, " poll-interval %d", nbr_nbma->v_poll);
! 7791:
! 7792: vty_out (vty, "%s", VTY_NEWLINE);
! 7793: }
! 7794:
! 7795: return 0;
! 7796: }
! 7797:
! 7798: static int
! 7799: config_write_virtual_link (struct vty *vty, struct ospf *ospf)
! 7800: {
! 7801: struct listnode *node;
! 7802: struct ospf_vl_data *vl_data;
! 7803: u_char buf[INET_ADDRSTRLEN];
! 7804:
! 7805: /* Virtual-Link print */
! 7806: for (ALL_LIST_ELEMENTS_RO (ospf->vlinks, node, vl_data))
! 7807: {
! 7808: struct listnode *n2;
! 7809: struct crypt_key *ck;
! 7810: struct ospf_interface *oi;
! 7811:
! 7812: if (vl_data != NULL)
! 7813: {
! 7814: memset (buf, 0, INET_ADDRSTRLEN);
! 7815:
! 7816: if (vl_data->format == OSPF_AREA_ID_FORMAT_ADDRESS)
! 7817: strncpy ((char *) buf, inet_ntoa (vl_data->vl_area_id), INET_ADDRSTRLEN);
! 7818: else
! 7819: sprintf ((char *) buf, "%lu",
! 7820: (unsigned long int) ntohl (vl_data->vl_area_id.s_addr));
! 7821: oi = vl_data->vl_oi;
! 7822:
! 7823: /* timers */
! 7824: if (OSPF_IF_PARAM (oi, v_hello) != OSPF_HELLO_INTERVAL_DEFAULT ||
! 7825: OSPF_IF_PARAM (oi, v_wait) != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT ||
! 7826: OSPF_IF_PARAM (oi, retransmit_interval) != OSPF_RETRANSMIT_INTERVAL_DEFAULT ||
! 7827: OSPF_IF_PARAM (oi, transmit_delay) != OSPF_TRANSMIT_DELAY_DEFAULT)
! 7828: vty_out (vty, " area %s virtual-link %s hello-interval %d retransmit-interval %d transmit-delay %d dead-interval %d%s",
! 7829: buf,
! 7830: inet_ntoa (vl_data->vl_peer),
! 7831: OSPF_IF_PARAM (oi, v_hello),
! 7832: OSPF_IF_PARAM (oi, retransmit_interval),
! 7833: OSPF_IF_PARAM (oi, transmit_delay),
! 7834: OSPF_IF_PARAM (oi, v_wait),
! 7835: VTY_NEWLINE);
! 7836: else
! 7837: vty_out (vty, " area %s virtual-link %s%s", buf,
! 7838: inet_ntoa (vl_data->vl_peer), VTY_NEWLINE);
! 7839: /* Auth key */
! 7840: if (IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_simple[0] != '\0')
! 7841: vty_out (vty, " area %s virtual-link %s authentication-key %s%s",
! 7842: buf,
! 7843: inet_ntoa (vl_data->vl_peer),
! 7844: IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_simple,
! 7845: VTY_NEWLINE);
! 7846: /* md5 keys */
! 7847: for (ALL_LIST_ELEMENTS_RO (IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_crypt,
! 7848: n2, ck))
! 7849: vty_out (vty, " area %s virtual-link %s"
! 7850: " message-digest-key %d md5 %s%s",
! 7851: buf,
! 7852: inet_ntoa (vl_data->vl_peer),
! 7853: ck->key_id, ck->auth_key, VTY_NEWLINE);
! 7854:
! 7855: }
! 7856: }
! 7857:
! 7858: return 0;
! 7859: }
! 7860:
! 7861:
! 7862: static int
! 7863: config_write_ospf_redistribute (struct vty *vty, struct ospf *ospf)
! 7864: {
! 7865: int type;
! 7866:
! 7867: /* redistribute print. */
! 7868: for (type = 0; type < ZEBRA_ROUTE_MAX; type++)
! 7869: if (type != zclient->redist_default && zclient->redist[type])
! 7870: {
! 7871: vty_out (vty, " redistribute %s", zebra_route_string(type));
! 7872: if (ospf->dmetric[type].value >= 0)
! 7873: vty_out (vty, " metric %d", ospf->dmetric[type].value);
! 7874:
! 7875: if (ospf->dmetric[type].type == EXTERNAL_METRIC_TYPE_1)
! 7876: vty_out (vty, " metric-type 1");
! 7877:
! 7878: if (ROUTEMAP_NAME (ospf, type))
! 7879: vty_out (vty, " route-map %s", ROUTEMAP_NAME (ospf, type));
! 7880:
! 7881: vty_out (vty, "%s", VTY_NEWLINE);
! 7882: }
! 7883:
! 7884: return 0;
! 7885: }
! 7886:
! 7887: static int
! 7888: config_write_ospf_default_metric (struct vty *vty, struct ospf *ospf)
! 7889: {
! 7890: if (ospf->default_metric != -1)
! 7891: vty_out (vty, " default-metric %d%s", ospf->default_metric,
! 7892: VTY_NEWLINE);
! 7893: return 0;
! 7894: }
! 7895:
! 7896: static int
! 7897: config_write_ospf_distribute (struct vty *vty, struct ospf *ospf)
! 7898: {
! 7899: int type;
! 7900:
! 7901: if (ospf)
! 7902: {
! 7903: /* distribute-list print. */
! 7904: for (type = 0; type < ZEBRA_ROUTE_MAX; type++)
! 7905: if (DISTRIBUTE_NAME (ospf, type))
! 7906: vty_out (vty, " distribute-list %s out %s%s",
! 7907: DISTRIBUTE_NAME (ospf, type),
! 7908: zebra_route_string(type), VTY_NEWLINE);
! 7909:
! 7910: /* default-information print. */
! 7911: if (ospf->default_originate != DEFAULT_ORIGINATE_NONE)
! 7912: {
! 7913: vty_out (vty, " default-information originate");
! 7914: if (ospf->default_originate == DEFAULT_ORIGINATE_ALWAYS)
! 7915: vty_out (vty, " always");
! 7916:
! 7917: if (ospf->dmetric[DEFAULT_ROUTE].value >= 0)
! 7918: vty_out (vty, " metric %d",
! 7919: ospf->dmetric[DEFAULT_ROUTE].value);
! 7920: if (ospf->dmetric[DEFAULT_ROUTE].type == EXTERNAL_METRIC_TYPE_1)
! 7921: vty_out (vty, " metric-type 1");
! 7922:
! 7923: if (ROUTEMAP_NAME (ospf, DEFAULT_ROUTE))
! 7924: vty_out (vty, " route-map %s",
! 7925: ROUTEMAP_NAME (ospf, DEFAULT_ROUTE));
! 7926:
! 7927: vty_out (vty, "%s", VTY_NEWLINE);
! 7928: }
! 7929:
! 7930: }
! 7931:
! 7932: return 0;
! 7933: }
! 7934:
! 7935: static int
! 7936: config_write_ospf_distance (struct vty *vty, struct ospf *ospf)
! 7937: {
! 7938: struct route_node *rn;
! 7939: struct ospf_distance *odistance;
! 7940:
! 7941: if (ospf->distance_all)
! 7942: vty_out (vty, " distance %d%s", ospf->distance_all, VTY_NEWLINE);
! 7943:
! 7944: if (ospf->distance_intra
! 7945: || ospf->distance_inter
! 7946: || ospf->distance_external)
! 7947: {
! 7948: vty_out (vty, " distance ospf");
! 7949:
! 7950: if (ospf->distance_intra)
! 7951: vty_out (vty, " intra-area %d", ospf->distance_intra);
! 7952: if (ospf->distance_inter)
! 7953: vty_out (vty, " inter-area %d", ospf->distance_inter);
! 7954: if (ospf->distance_external)
! 7955: vty_out (vty, " external %d", ospf->distance_external);
! 7956:
! 7957: vty_out (vty, "%s", VTY_NEWLINE);
! 7958: }
! 7959:
! 7960: for (rn = route_top (ospf->distance_table); rn; rn = route_next (rn))
! 7961: if ((odistance = rn->info) != NULL)
! 7962: {
! 7963: vty_out (vty, " distance %d %s/%d %s%s", odistance->distance,
! 7964: inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen,
! 7965: odistance->access_list ? odistance->access_list : "",
! 7966: VTY_NEWLINE);
! 7967: }
! 7968: return 0;
! 7969: }
! 7970:
! 7971: /* OSPF configuration write function. */
! 7972: static int
! 7973: ospf_config_write (struct vty *vty)
! 7974: {
! 7975: struct ospf *ospf;
! 7976: struct interface *ifp;
! 7977: struct ospf_interface *oi;
! 7978: struct listnode *node;
! 7979: int write = 0;
! 7980:
! 7981: ospf = ospf_lookup ();
! 7982: if (ospf != NULL)
! 7983: {
! 7984: /* `router ospf' print. */
! 7985: vty_out (vty, "router ospf%s", VTY_NEWLINE);
! 7986:
! 7987: write++;
! 7988:
! 7989: if (!ospf->networks)
! 7990: return write;
! 7991:
! 7992: /* Router ID print. */
! 7993: if (ospf->router_id_static.s_addr != 0)
! 7994: vty_out (vty, " ospf router-id %s%s",
! 7995: inet_ntoa (ospf->router_id_static), VTY_NEWLINE);
! 7996:
! 7997: /* ABR type print. */
! 7998: if (ospf->abr_type != OSPF_ABR_DEFAULT)
! 7999: vty_out (vty, " ospf abr-type %s%s",
! 8000: ospf_abr_type_str[ospf->abr_type], VTY_NEWLINE);
! 8001:
! 8002: /* log-adjacency-changes flag print. */
! 8003: if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES))
! 8004: {
! 8005: vty_out(vty, " log-adjacency-changes");
! 8006: if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL))
! 8007: vty_out(vty, " detail");
! 8008: vty_out(vty, "%s", VTY_NEWLINE);
! 8009: }
! 8010:
! 8011: /* RFC1583 compatibility flag print -- Compatible with CISCO 12.1. */
! 8012: if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE))
! 8013: vty_out (vty, " compatible rfc1583%s", VTY_NEWLINE);
! 8014:
! 8015: /* auto-cost reference-bandwidth configuration. */
! 8016: if (ospf->ref_bandwidth != OSPF_DEFAULT_REF_BANDWIDTH)
! 8017: {
! 8018: vty_out (vty, "! Important: ensure reference bandwidth "
! 8019: "is consistent across all routers%s", VTY_NEWLINE);
! 8020: vty_out (vty, " auto-cost reference-bandwidth %d%s",
! 8021: ospf->ref_bandwidth / 1000, VTY_NEWLINE);
! 8022: }
! 8023:
! 8024: /* SPF timers print. */
! 8025: if (ospf->spf_delay != OSPF_SPF_DELAY_DEFAULT ||
! 8026: ospf->spf_holdtime != OSPF_SPF_HOLDTIME_DEFAULT ||
! 8027: ospf->spf_max_holdtime != OSPF_SPF_MAX_HOLDTIME_DEFAULT)
! 8028: vty_out (vty, " timers throttle spf %d %d %d%s",
! 8029: ospf->spf_delay, ospf->spf_holdtime,
! 8030: ospf->spf_max_holdtime, VTY_NEWLINE);
! 8031:
! 8032: /* Max-metric router-lsa print */
! 8033: config_write_stub_router (vty, ospf);
! 8034:
! 8035: /* SPF refresh parameters print. */
! 8036: if (ospf->lsa_refresh_interval != OSPF_LSA_REFRESH_INTERVAL_DEFAULT)
! 8037: vty_out (vty, " refresh timer %d%s",
! 8038: ospf->lsa_refresh_interval, VTY_NEWLINE);
! 8039:
! 8040: /* Redistribute information print. */
! 8041: config_write_ospf_redistribute (vty, ospf);
! 8042:
! 8043: /* passive-interface print. */
! 8044: if (ospf->passive_interface_default == OSPF_IF_PASSIVE)
! 8045: vty_out (vty, " passive-interface default%s", VTY_NEWLINE);
! 8046:
! 8047: for (ALL_LIST_ELEMENTS_RO (om->iflist, node, ifp))
! 8048: if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp), passive_interface)
! 8049: && IF_DEF_PARAMS (ifp)->passive_interface !=
! 8050: ospf->passive_interface_default)
! 8051: {
! 8052: vty_out (vty, " %spassive-interface %s%s",
! 8053: IF_DEF_PARAMS (ifp)->passive_interface ? "" : "no ",
! 8054: ifp->name, VTY_NEWLINE);
! 8055: }
! 8056: for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
! 8057: {
! 8058: if (!OSPF_IF_PARAM_CONFIGURED (oi->params, passive_interface))
! 8059: continue;
! 8060: if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (oi->ifp),
! 8061: passive_interface))
! 8062: {
! 8063: if (oi->params->passive_interface == IF_DEF_PARAMS (oi->ifp)->passive_interface)
! 8064: continue;
! 8065: }
! 8066: else if (oi->params->passive_interface == ospf->passive_interface_default)
! 8067: continue;
! 8068:
! 8069: vty_out (vty, " %spassive-interface %s %s%s",
! 8070: oi->params->passive_interface ? "" : "no ",
! 8071: oi->ifp->name,
! 8072: inet_ntoa (oi->address->u.prefix4), VTY_NEWLINE);
! 8073: }
! 8074:
! 8075: /* Network area print. */
! 8076: config_write_network_area (vty, ospf);
! 8077:
! 8078: /* Area config print. */
! 8079: config_write_ospf_area (vty, ospf);
! 8080:
! 8081: /* static neighbor print. */
! 8082: config_write_ospf_nbr_nbma (vty, ospf);
! 8083:
! 8084: /* Virtual-Link print. */
! 8085: config_write_virtual_link (vty, ospf);
! 8086:
! 8087: /* Default metric configuration. */
! 8088: config_write_ospf_default_metric (vty, ospf);
! 8089:
! 8090: /* Distribute-list and default-information print. */
! 8091: config_write_ospf_distribute (vty, ospf);
! 8092:
! 8093: /* Distance configuration. */
! 8094: config_write_ospf_distance (vty, ospf);
! 8095:
! 8096: #ifdef HAVE_OPAQUE_LSA
! 8097: ospf_opaque_config_write_router (vty, ospf);
! 8098: #endif /* HAVE_OPAQUE_LSA */
! 8099: }
! 8100:
! 8101: return write;
! 8102: }
! 8103:
! 8104: void
! 8105: ospf_vty_show_init (void)
! 8106: {
! 8107: /* "show ip ospf" commands. */
! 8108: install_element (VIEW_NODE, &show_ip_ospf_cmd);
! 8109: install_element (ENABLE_NODE, &show_ip_ospf_cmd);
! 8110:
! 8111: /* "show ip ospf database" commands. */
! 8112: install_element (VIEW_NODE, &show_ip_ospf_database_type_cmd);
! 8113: install_element (VIEW_NODE, &show_ip_ospf_database_type_id_cmd);
! 8114: install_element (VIEW_NODE, &show_ip_ospf_database_type_id_adv_router_cmd);
! 8115: install_element (VIEW_NODE, &show_ip_ospf_database_type_adv_router_cmd);
! 8116: install_element (VIEW_NODE, &show_ip_ospf_database_type_id_self_cmd);
! 8117: install_element (VIEW_NODE, &show_ip_ospf_database_type_self_cmd);
! 8118: install_element (VIEW_NODE, &show_ip_ospf_database_cmd);
! 8119: install_element (ENABLE_NODE, &show_ip_ospf_database_type_cmd);
! 8120: install_element (ENABLE_NODE, &show_ip_ospf_database_type_id_cmd);
! 8121: install_element (ENABLE_NODE, &show_ip_ospf_database_type_id_adv_router_cmd);
! 8122: install_element (ENABLE_NODE, &show_ip_ospf_database_type_adv_router_cmd);
! 8123: install_element (ENABLE_NODE, &show_ip_ospf_database_type_id_self_cmd);
! 8124: install_element (ENABLE_NODE, &show_ip_ospf_database_type_self_cmd);
! 8125: install_element (ENABLE_NODE, &show_ip_ospf_database_cmd);
! 8126:
! 8127: /* "show ip ospf interface" commands. */
! 8128: install_element (VIEW_NODE, &show_ip_ospf_interface_cmd);
! 8129: install_element (ENABLE_NODE, &show_ip_ospf_interface_cmd);
! 8130:
! 8131: /* "show ip ospf neighbor" commands. */
! 8132: install_element (VIEW_NODE, &show_ip_ospf_neighbor_int_detail_cmd);
! 8133: install_element (VIEW_NODE, &show_ip_ospf_neighbor_int_cmd);
! 8134: install_element (VIEW_NODE, &show_ip_ospf_neighbor_id_cmd);
! 8135: install_element (VIEW_NODE, &show_ip_ospf_neighbor_detail_all_cmd);
! 8136: install_element (VIEW_NODE, &show_ip_ospf_neighbor_detail_cmd);
! 8137: install_element (VIEW_NODE, &show_ip_ospf_neighbor_cmd);
! 8138: install_element (VIEW_NODE, &show_ip_ospf_neighbor_all_cmd);
! 8139: install_element (ENABLE_NODE, &show_ip_ospf_neighbor_int_detail_cmd);
! 8140: install_element (ENABLE_NODE, &show_ip_ospf_neighbor_int_cmd);
! 8141: install_element (ENABLE_NODE, &show_ip_ospf_neighbor_id_cmd);
! 8142: install_element (ENABLE_NODE, &show_ip_ospf_neighbor_detail_all_cmd);
! 8143: install_element (ENABLE_NODE, &show_ip_ospf_neighbor_detail_cmd);
! 8144: install_element (ENABLE_NODE, &show_ip_ospf_neighbor_cmd);
! 8145: install_element (ENABLE_NODE, &show_ip_ospf_neighbor_all_cmd);
! 8146:
! 8147: /* "show ip ospf route" commands. */
! 8148: install_element (VIEW_NODE, &show_ip_ospf_route_cmd);
! 8149: install_element (ENABLE_NODE, &show_ip_ospf_route_cmd);
! 8150: install_element (VIEW_NODE, &show_ip_ospf_border_routers_cmd);
! 8151: install_element (ENABLE_NODE, &show_ip_ospf_border_routers_cmd);
! 8152: }
! 8153:
! 8154:
! 8155: /* ospfd's interface node. */
! 8156: static struct cmd_node interface_node =
! 8157: {
! 8158: INTERFACE_NODE,
! 8159: "%s(config-if)# ",
! 8160: 1
! 8161: };
! 8162:
! 8163: /* Initialization of OSPF interface. */
! 8164: static void
! 8165: ospf_vty_if_init (void)
! 8166: {
! 8167: /* Install interface node. */
! 8168: install_node (&interface_node, config_write_interface);
! 8169:
! 8170: install_element (CONFIG_NODE, &interface_cmd);
! 8171: install_element (CONFIG_NODE, &no_interface_cmd);
! 8172: install_default (INTERFACE_NODE);
! 8173:
! 8174: /* "description" commands. */
! 8175: install_element (INTERFACE_NODE, &interface_desc_cmd);
! 8176: install_element (INTERFACE_NODE, &no_interface_desc_cmd);
! 8177:
! 8178: /* "ip ospf authentication" commands. */
! 8179: install_element (INTERFACE_NODE, &ip_ospf_authentication_args_addr_cmd);
! 8180: install_element (INTERFACE_NODE, &ip_ospf_authentication_args_cmd);
! 8181: install_element (INTERFACE_NODE, &ip_ospf_authentication_addr_cmd);
! 8182: install_element (INTERFACE_NODE, &ip_ospf_authentication_cmd);
! 8183: install_element (INTERFACE_NODE, &no_ip_ospf_authentication_addr_cmd);
! 8184: install_element (INTERFACE_NODE, &no_ip_ospf_authentication_cmd);
! 8185: install_element (INTERFACE_NODE, &ip_ospf_authentication_key_addr_cmd);
! 8186: install_element (INTERFACE_NODE, &ip_ospf_authentication_key_cmd);
! 8187: install_element (INTERFACE_NODE, &no_ip_ospf_authentication_key_addr_cmd);
! 8188: install_element (INTERFACE_NODE, &no_ip_ospf_authentication_key_cmd);
! 8189:
! 8190: /* "ip ospf message-digest-key" commands. */
! 8191: install_element (INTERFACE_NODE, &ip_ospf_message_digest_key_addr_cmd);
! 8192: install_element (INTERFACE_NODE, &ip_ospf_message_digest_key_cmd);
! 8193: install_element (INTERFACE_NODE, &no_ip_ospf_message_digest_key_addr_cmd);
! 8194: install_element (INTERFACE_NODE, &no_ip_ospf_message_digest_key_cmd);
! 8195:
! 8196: /* "ip ospf cost" commands. */
! 8197: install_element (INTERFACE_NODE, &ip_ospf_cost_u32_inet4_cmd);
! 8198: install_element (INTERFACE_NODE, &ip_ospf_cost_u32_cmd);
! 8199: install_element (INTERFACE_NODE, &no_ip_ospf_cost_u32_cmd);
! 8200: install_element (INTERFACE_NODE, &no_ip_ospf_cost_u32_inet4_cmd);
! 8201: install_element (INTERFACE_NODE, &no_ip_ospf_cost_inet4_cmd);
! 8202: install_element (INTERFACE_NODE, &no_ip_ospf_cost_cmd);
! 8203:
! 8204: /* "ip ospf mtu-ignore" commands. */
! 8205: install_element (INTERFACE_NODE, &ip_ospf_mtu_ignore_addr_cmd);
! 8206: install_element (INTERFACE_NODE, &ip_ospf_mtu_ignore_cmd);
! 8207: install_element (INTERFACE_NODE, &no_ip_ospf_mtu_ignore_addr_cmd);
! 8208: install_element (INTERFACE_NODE, &no_ip_ospf_mtu_ignore_cmd);
! 8209:
! 8210: /* "ip ospf dead-interval" commands. */
! 8211: install_element (INTERFACE_NODE, &ip_ospf_dead_interval_addr_cmd);
! 8212: install_element (INTERFACE_NODE, &ip_ospf_dead_interval_cmd);
! 8213: install_element (INTERFACE_NODE, &ip_ospf_dead_interval_minimal_addr_cmd);
! 8214: install_element (INTERFACE_NODE, &ip_ospf_dead_interval_minimal_cmd);
! 8215: install_element (INTERFACE_NODE, &no_ip_ospf_dead_interval_addr_cmd);
! 8216: install_element (INTERFACE_NODE, &no_ip_ospf_dead_interval_cmd);
! 8217:
! 8218: /* "ip ospf hello-interval" commands. */
! 8219: install_element (INTERFACE_NODE, &ip_ospf_hello_interval_addr_cmd);
! 8220: install_element (INTERFACE_NODE, &ip_ospf_hello_interval_cmd);
! 8221: install_element (INTERFACE_NODE, &no_ip_ospf_hello_interval_addr_cmd);
! 8222: install_element (INTERFACE_NODE, &no_ip_ospf_hello_interval_cmd);
! 8223:
! 8224: /* "ip ospf network" commands. */
! 8225: install_element (INTERFACE_NODE, &ip_ospf_network_cmd);
! 8226: install_element (INTERFACE_NODE, &no_ip_ospf_network_cmd);
! 8227:
! 8228: /* "ip ospf priority" commands. */
! 8229: install_element (INTERFACE_NODE, &ip_ospf_priority_addr_cmd);
! 8230: install_element (INTERFACE_NODE, &ip_ospf_priority_cmd);
! 8231: install_element (INTERFACE_NODE, &no_ip_ospf_priority_addr_cmd);
! 8232: install_element (INTERFACE_NODE, &no_ip_ospf_priority_cmd);
! 8233:
! 8234: /* "ip ospf retransmit-interval" commands. */
! 8235: install_element (INTERFACE_NODE, &ip_ospf_retransmit_interval_addr_cmd);
! 8236: install_element (INTERFACE_NODE, &ip_ospf_retransmit_interval_cmd);
! 8237: install_element (INTERFACE_NODE, &no_ip_ospf_retransmit_interval_addr_cmd);
! 8238: install_element (INTERFACE_NODE, &no_ip_ospf_retransmit_interval_cmd);
! 8239:
! 8240: /* "ip ospf transmit-delay" commands. */
! 8241: install_element (INTERFACE_NODE, &ip_ospf_transmit_delay_addr_cmd);
! 8242: install_element (INTERFACE_NODE, &ip_ospf_transmit_delay_cmd);
! 8243: install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_addr_cmd);
! 8244: install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_cmd);
! 8245:
! 8246: /* These commands are compatibitliy for previous version. */
! 8247: install_element (INTERFACE_NODE, &ospf_authentication_key_cmd);
! 8248: install_element (INTERFACE_NODE, &no_ospf_authentication_key_cmd);
! 8249: install_element (INTERFACE_NODE, &ospf_message_digest_key_cmd);
! 8250: install_element (INTERFACE_NODE, &no_ospf_message_digest_key_cmd);
! 8251: install_element (INTERFACE_NODE, &ospf_cost_u32_cmd);
! 8252: install_element (INTERFACE_NODE, &ospf_cost_u32_inet4_cmd);
! 8253: install_element (INTERFACE_NODE, &no_ospf_cost_cmd);
! 8254: install_element (INTERFACE_NODE, &no_ospf_cost_u32_cmd);
! 8255: install_element (INTERFACE_NODE, &no_ospf_cost_u32_inet4_cmd);
! 8256: install_element (INTERFACE_NODE, &no_ospf_cost_inet4_cmd);
! 8257: install_element (INTERFACE_NODE, &ospf_dead_interval_cmd);
! 8258: install_element (INTERFACE_NODE, &no_ospf_dead_interval_cmd);
! 8259: install_element (INTERFACE_NODE, &ospf_hello_interval_cmd);
! 8260: install_element (INTERFACE_NODE, &no_ospf_hello_interval_cmd);
! 8261: install_element (INTERFACE_NODE, &ospf_network_cmd);
! 8262: install_element (INTERFACE_NODE, &no_ospf_network_cmd);
! 8263: install_element (INTERFACE_NODE, &ospf_priority_cmd);
! 8264: install_element (INTERFACE_NODE, &no_ospf_priority_cmd);
! 8265: install_element (INTERFACE_NODE, &ospf_retransmit_interval_cmd);
! 8266: install_element (INTERFACE_NODE, &no_ospf_retransmit_interval_cmd);
! 8267: install_element (INTERFACE_NODE, &ospf_transmit_delay_cmd);
! 8268: install_element (INTERFACE_NODE, &no_ospf_transmit_delay_cmd);
! 8269: }
! 8270:
! 8271: static void
! 8272: ospf_vty_zebra_init (void)
! 8273: {
! 8274: install_element (OSPF_NODE, &ospf_redistribute_source_type_metric_cmd);
! 8275: install_element (OSPF_NODE, &ospf_redistribute_source_metric_type_cmd);
! 8276: install_element (OSPF_NODE, &ospf_redistribute_source_type_cmd);
! 8277: install_element (OSPF_NODE, &ospf_redistribute_source_metric_cmd);
! 8278: install_element (OSPF_NODE, &ospf_redistribute_source_cmd);
! 8279: install_element (OSPF_NODE,
! 8280: &ospf_redistribute_source_metric_type_routemap_cmd);
! 8281: install_element (OSPF_NODE,
! 8282: &ospf_redistribute_source_type_metric_routemap_cmd);
! 8283: install_element (OSPF_NODE, &ospf_redistribute_source_metric_routemap_cmd);
! 8284: install_element (OSPF_NODE, &ospf_redistribute_source_type_routemap_cmd);
! 8285: install_element (OSPF_NODE, &ospf_redistribute_source_routemap_cmd);
! 8286:
! 8287: install_element (OSPF_NODE, &no_ospf_redistribute_source_cmd);
! 8288:
! 8289: install_element (OSPF_NODE, &ospf_distribute_list_out_cmd);
! 8290: install_element (OSPF_NODE, &no_ospf_distribute_list_out_cmd);
! 8291:
! 8292: install_element (OSPF_NODE,
! 8293: &ospf_default_information_originate_metric_type_cmd);
! 8294: install_element (OSPF_NODE, &ospf_default_information_originate_metric_cmd);
! 8295: install_element (OSPF_NODE,
! 8296: &ospf_default_information_originate_type_metric_cmd);
! 8297: install_element (OSPF_NODE, &ospf_default_information_originate_type_cmd);
! 8298: install_element (OSPF_NODE, &ospf_default_information_originate_cmd);
! 8299: install_element (OSPF_NODE,
! 8300: &ospf_default_information_originate_always_metric_type_cmd);
! 8301: install_element (OSPF_NODE,
! 8302: &ospf_default_information_originate_always_metric_cmd);
! 8303: install_element (OSPF_NODE,
! 8304: &ospf_default_information_originate_always_cmd);
! 8305: install_element (OSPF_NODE,
! 8306: &ospf_default_information_originate_always_type_metric_cmd);
! 8307: install_element (OSPF_NODE,
! 8308: &ospf_default_information_originate_always_type_cmd);
! 8309:
! 8310: install_element (OSPF_NODE,
! 8311: &ospf_default_information_originate_metric_type_routemap_cmd);
! 8312: install_element (OSPF_NODE,
! 8313: &ospf_default_information_originate_metric_routemap_cmd);
! 8314: install_element (OSPF_NODE,
! 8315: &ospf_default_information_originate_routemap_cmd);
! 8316: install_element (OSPF_NODE,
! 8317: &ospf_default_information_originate_type_metric_routemap_cmd);
! 8318: install_element (OSPF_NODE,
! 8319: &ospf_default_information_originate_type_routemap_cmd);
! 8320: install_element (OSPF_NODE,
! 8321: &ospf_default_information_originate_always_metric_type_routemap_cmd);
! 8322: install_element (OSPF_NODE,
! 8323: &ospf_default_information_originate_always_metric_routemap_cmd);
! 8324: install_element (OSPF_NODE,
! 8325: &ospf_default_information_originate_always_routemap_cmd);
! 8326: install_element (OSPF_NODE,
! 8327: &ospf_default_information_originate_always_type_metric_routemap_cmd);
! 8328: install_element (OSPF_NODE,
! 8329: &ospf_default_information_originate_always_type_routemap_cmd);
! 8330:
! 8331: install_element (OSPF_NODE, &no_ospf_default_information_originate_cmd);
! 8332:
! 8333: install_element (OSPF_NODE, &ospf_default_metric_cmd);
! 8334: install_element (OSPF_NODE, &no_ospf_default_metric_cmd);
! 8335: install_element (OSPF_NODE, &no_ospf_default_metric_val_cmd);
! 8336:
! 8337: install_element (OSPF_NODE, &ospf_distance_cmd);
! 8338: install_element (OSPF_NODE, &no_ospf_distance_cmd);
! 8339: install_element (OSPF_NODE, &no_ospf_distance_ospf_cmd);
! 8340: install_element (OSPF_NODE, &ospf_distance_ospf_intra_cmd);
! 8341: install_element (OSPF_NODE, &ospf_distance_ospf_intra_inter_cmd);
! 8342: install_element (OSPF_NODE, &ospf_distance_ospf_intra_external_cmd);
! 8343: install_element (OSPF_NODE, &ospf_distance_ospf_intra_inter_external_cmd);
! 8344: install_element (OSPF_NODE, &ospf_distance_ospf_intra_external_inter_cmd);
! 8345: install_element (OSPF_NODE, &ospf_distance_ospf_inter_cmd);
! 8346: install_element (OSPF_NODE, &ospf_distance_ospf_inter_intra_cmd);
! 8347: install_element (OSPF_NODE, &ospf_distance_ospf_inter_external_cmd);
! 8348: install_element (OSPF_NODE, &ospf_distance_ospf_inter_intra_external_cmd);
! 8349: install_element (OSPF_NODE, &ospf_distance_ospf_inter_external_intra_cmd);
! 8350: install_element (OSPF_NODE, &ospf_distance_ospf_external_cmd);
! 8351: install_element (OSPF_NODE, &ospf_distance_ospf_external_intra_cmd);
! 8352: install_element (OSPF_NODE, &ospf_distance_ospf_external_inter_cmd);
! 8353: install_element (OSPF_NODE, &ospf_distance_ospf_external_intra_inter_cmd);
! 8354: install_element (OSPF_NODE, &ospf_distance_ospf_external_inter_intra_cmd);
! 8355: #if 0
! 8356: install_element (OSPF_NODE, &ospf_distance_source_cmd);
! 8357: install_element (OSPF_NODE, &no_ospf_distance_source_cmd);
! 8358: install_element (OSPF_NODE, &ospf_distance_source_access_list_cmd);
! 8359: install_element (OSPF_NODE, &no_ospf_distance_source_access_list_cmd);
! 8360: #endif /* 0 */
! 8361: }
! 8362:
! 8363: static struct cmd_node ospf_node =
! 8364: {
! 8365: OSPF_NODE,
! 8366: "%s(config-router)# ",
! 8367: 1
! 8368: };
! 8369:
! 8370:
! 8371: /* Install OSPF related vty commands. */
! 8372: void
! 8373: ospf_vty_init (void)
! 8374: {
! 8375: /* Install ospf top node. */
! 8376: install_node (&ospf_node, ospf_config_write);
! 8377:
! 8378: /* "router ospf" commands. */
! 8379: install_element (CONFIG_NODE, &router_ospf_cmd);
! 8380: install_element (CONFIG_NODE, &no_router_ospf_cmd);
! 8381:
! 8382: install_default (OSPF_NODE);
! 8383:
! 8384: /* "ospf router-id" commands. */
! 8385: install_element (OSPF_NODE, &ospf_router_id_cmd);
! 8386: install_element (OSPF_NODE, &no_ospf_router_id_cmd);
! 8387: install_element (OSPF_NODE, &router_ospf_id_cmd);
! 8388: install_element (OSPF_NODE, &no_router_ospf_id_cmd);
! 8389:
! 8390: /* "passive-interface" commands. */
! 8391: install_element (OSPF_NODE, &ospf_passive_interface_addr_cmd);
! 8392: install_element (OSPF_NODE, &ospf_passive_interface_cmd);
! 8393: install_element (OSPF_NODE, &ospf_passive_interface_default_cmd);
! 8394: install_element (OSPF_NODE, &no_ospf_passive_interface_addr_cmd);
! 8395: install_element (OSPF_NODE, &no_ospf_passive_interface_cmd);
! 8396: install_element (OSPF_NODE, &no_ospf_passive_interface_default_cmd);
! 8397:
! 8398: /* "ospf abr-type" commands. */
! 8399: install_element (OSPF_NODE, &ospf_abr_type_cmd);
! 8400: install_element (OSPF_NODE, &no_ospf_abr_type_cmd);
! 8401:
! 8402: /* "ospf log-adjacency-changes" commands. */
! 8403: install_element (OSPF_NODE, &ospf_log_adjacency_changes_cmd);
! 8404: install_element (OSPF_NODE, &ospf_log_adjacency_changes_detail_cmd);
! 8405: install_element (OSPF_NODE, &no_ospf_log_adjacency_changes_cmd);
! 8406: install_element (OSPF_NODE, &no_ospf_log_adjacency_changes_detail_cmd);
! 8407:
! 8408: /* "ospf rfc1583-compatible" commands. */
! 8409: install_element (OSPF_NODE, &ospf_rfc1583_flag_cmd);
! 8410: install_element (OSPF_NODE, &no_ospf_rfc1583_flag_cmd);
! 8411: install_element (OSPF_NODE, &ospf_compatible_rfc1583_cmd);
! 8412: install_element (OSPF_NODE, &no_ospf_compatible_rfc1583_cmd);
! 8413:
! 8414: /* "network area" commands. */
! 8415: install_element (OSPF_NODE, &ospf_network_area_cmd);
! 8416: install_element (OSPF_NODE, &no_ospf_network_area_cmd);
! 8417:
! 8418: /* "area authentication" commands. */
! 8419: install_element (OSPF_NODE, &ospf_area_authentication_message_digest_cmd);
! 8420: install_element (OSPF_NODE, &ospf_area_authentication_cmd);
! 8421: install_element (OSPF_NODE, &no_ospf_area_authentication_cmd);
! 8422:
! 8423: /* "area range" commands. */
! 8424: install_element (OSPF_NODE, &ospf_area_range_cmd);
! 8425: install_element (OSPF_NODE, &ospf_area_range_advertise_cmd);
! 8426: install_element (OSPF_NODE, &ospf_area_range_cost_cmd);
! 8427: install_element (OSPF_NODE, &ospf_area_range_advertise_cost_cmd);
! 8428: install_element (OSPF_NODE, &ospf_area_range_not_advertise_cmd);
! 8429: install_element (OSPF_NODE, &no_ospf_area_range_cmd);
! 8430: install_element (OSPF_NODE, &no_ospf_area_range_advertise_cmd);
! 8431: install_element (OSPF_NODE, &no_ospf_area_range_cost_cmd);
! 8432: install_element (OSPF_NODE, &no_ospf_area_range_advertise_cost_cmd);
! 8433: install_element (OSPF_NODE, &ospf_area_range_substitute_cmd);
! 8434: install_element (OSPF_NODE, &no_ospf_area_range_substitute_cmd);
! 8435:
! 8436: /* "area virtual-link" commands. */
! 8437: install_element (OSPF_NODE, &ospf_area_vlink_cmd);
! 8438: install_element (OSPF_NODE, &no_ospf_area_vlink_cmd);
! 8439:
! 8440: install_element (OSPF_NODE, &ospf_area_vlink_param1_cmd);
! 8441: install_element (OSPF_NODE, &no_ospf_area_vlink_param1_cmd);
! 8442:
! 8443: install_element (OSPF_NODE, &ospf_area_vlink_param2_cmd);
! 8444: install_element (OSPF_NODE, &no_ospf_area_vlink_param2_cmd);
! 8445:
! 8446: install_element (OSPF_NODE, &ospf_area_vlink_param3_cmd);
! 8447: install_element (OSPF_NODE, &no_ospf_area_vlink_param3_cmd);
! 8448:
! 8449: install_element (OSPF_NODE, &ospf_area_vlink_param4_cmd);
! 8450: install_element (OSPF_NODE, &no_ospf_area_vlink_param4_cmd);
! 8451:
! 8452: install_element (OSPF_NODE, &ospf_area_vlink_authtype_args_cmd);
! 8453: install_element (OSPF_NODE, &ospf_area_vlink_authtype_cmd);
! 8454: install_element (OSPF_NODE, &no_ospf_area_vlink_authtype_cmd);
! 8455:
! 8456: install_element (OSPF_NODE, &ospf_area_vlink_md5_cmd);
! 8457: install_element (OSPF_NODE, &no_ospf_area_vlink_md5_cmd);
! 8458:
! 8459: install_element (OSPF_NODE, &ospf_area_vlink_authkey_cmd);
! 8460: install_element (OSPF_NODE, &no_ospf_area_vlink_authkey_cmd);
! 8461:
! 8462: install_element (OSPF_NODE, &ospf_area_vlink_authtype_args_authkey_cmd);
! 8463: install_element (OSPF_NODE, &ospf_area_vlink_authtype_authkey_cmd);
! 8464: install_element (OSPF_NODE, &no_ospf_area_vlink_authtype_authkey_cmd);
! 8465:
! 8466: install_element (OSPF_NODE, &ospf_area_vlink_authtype_args_md5_cmd);
! 8467: install_element (OSPF_NODE, &ospf_area_vlink_authtype_md5_cmd);
! 8468: install_element (OSPF_NODE, &no_ospf_area_vlink_authtype_md5_cmd);
! 8469:
! 8470: /* "area stub" commands. */
! 8471: install_element (OSPF_NODE, &ospf_area_stub_no_summary_cmd);
! 8472: install_element (OSPF_NODE, &ospf_area_stub_cmd);
! 8473: install_element (OSPF_NODE, &no_ospf_area_stub_no_summary_cmd);
! 8474: install_element (OSPF_NODE, &no_ospf_area_stub_cmd);
! 8475:
! 8476: /* "area nssa" commands. */
! 8477: install_element (OSPF_NODE, &ospf_area_nssa_cmd);
! 8478: install_element (OSPF_NODE, &ospf_area_nssa_translate_no_summary_cmd);
! 8479: install_element (OSPF_NODE, &ospf_area_nssa_translate_cmd);
! 8480: install_element (OSPF_NODE, &ospf_area_nssa_no_summary_cmd);
! 8481: install_element (OSPF_NODE, &no_ospf_area_nssa_cmd);
! 8482: install_element (OSPF_NODE, &no_ospf_area_nssa_no_summary_cmd);
! 8483:
! 8484: install_element (OSPF_NODE, &ospf_area_default_cost_cmd);
! 8485: install_element (OSPF_NODE, &no_ospf_area_default_cost_cmd);
! 8486:
! 8487: install_element (OSPF_NODE, &ospf_area_shortcut_cmd);
! 8488: install_element (OSPF_NODE, &no_ospf_area_shortcut_cmd);
! 8489:
! 8490: install_element (OSPF_NODE, &ospf_area_export_list_cmd);
! 8491: install_element (OSPF_NODE, &no_ospf_area_export_list_cmd);
! 8492:
! 8493: install_element (OSPF_NODE, &ospf_area_filter_list_cmd);
! 8494: install_element (OSPF_NODE, &no_ospf_area_filter_list_cmd);
! 8495:
! 8496: install_element (OSPF_NODE, &ospf_area_import_list_cmd);
! 8497: install_element (OSPF_NODE, &no_ospf_area_import_list_cmd);
! 8498:
! 8499: /* SPF timer commands */
! 8500: install_element (OSPF_NODE, &ospf_timers_spf_cmd);
! 8501: install_element (OSPF_NODE, &no_ospf_timers_spf_cmd);
! 8502: install_element (OSPF_NODE, &ospf_timers_throttle_spf_cmd);
! 8503: install_element (OSPF_NODE, &no_ospf_timers_throttle_spf_cmd);
! 8504:
! 8505: /* refresh timer commands */
! 8506: install_element (OSPF_NODE, &ospf_refresh_timer_cmd);
! 8507: install_element (OSPF_NODE, &no_ospf_refresh_timer_val_cmd);
! 8508: install_element (OSPF_NODE, &no_ospf_refresh_timer_cmd);
! 8509:
! 8510: /* max-metric commands */
! 8511: install_element (OSPF_NODE, &ospf_max_metric_router_lsa_admin_cmd);
! 8512: install_element (OSPF_NODE, &no_ospf_max_metric_router_lsa_admin_cmd);
! 8513: install_element (OSPF_NODE, &ospf_max_metric_router_lsa_startup_cmd);
! 8514: install_element (OSPF_NODE, &no_ospf_max_metric_router_lsa_startup_cmd);
! 8515: install_element (OSPF_NODE, &ospf_max_metric_router_lsa_shutdown_cmd);
! 8516: install_element (OSPF_NODE, &no_ospf_max_metric_router_lsa_shutdown_cmd);
! 8517:
! 8518: /* reference bandwidth commands */
! 8519: install_element (OSPF_NODE, &ospf_auto_cost_reference_bandwidth_cmd);
! 8520: install_element (OSPF_NODE, &no_ospf_auto_cost_reference_bandwidth_cmd);
! 8521:
! 8522: /* "neighbor" commands. */
! 8523: install_element (OSPF_NODE, &ospf_neighbor_cmd);
! 8524: install_element (OSPF_NODE, &ospf_neighbor_priority_poll_interval_cmd);
! 8525: install_element (OSPF_NODE, &ospf_neighbor_priority_cmd);
! 8526: install_element (OSPF_NODE, &ospf_neighbor_poll_interval_cmd);
! 8527: install_element (OSPF_NODE, &ospf_neighbor_poll_interval_priority_cmd);
! 8528: install_element (OSPF_NODE, &no_ospf_neighbor_cmd);
! 8529: install_element (OSPF_NODE, &no_ospf_neighbor_priority_cmd);
! 8530: install_element (OSPF_NODE, &no_ospf_neighbor_poll_interval_cmd);
! 8531:
! 8532: /* Init interface related vty commands. */
! 8533: ospf_vty_if_init ();
! 8534:
! 8535: /* Init zebra related vty commands. */
! 8536: ospf_vty_zebra_init ();
! 8537: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>