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