2 * Copyright (C) 2005 6WIND <alain.ritoux@6wind.com>
3 * Copyright (C) 2000 Toshiaki Takada
5 * This file is part of GNU Zebra.
7 * GNU Zebra is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2, or (at your option) any
12 * GNU Zebra is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with GNU Zebra; see the file COPYING. If not, write to the Free
19 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
37 #include "ospfd/ospfd.h"
38 #include "ospfd/ospf_asbr.h"
39 #include "ospfd/ospf_lsa.h"
40 #include "ospfd/ospf_lsdb.h"
41 #include "ospfd/ospf_ism.h"
42 #include "ospfd/ospf_interface.h"
43 #include "ospfd/ospf_nsm.h"
44 #include "ospfd/ospf_neighbor.h"
45 #include "ospfd/ospf_flood.h"
46 #include "ospfd/ospf_abr.h"
47 #include "ospfd/ospf_spf.h"
48 #include "ospfd/ospf_route.h"
49 #include "ospfd/ospf_zebra.h"
50 /*#include "ospfd/ospf_routemap.h" */
51 #include "ospfd/ospf_vty.h"
52 #include "ospfd/ospf_dump.h"
53 #include "ospfd/ospf_bfd.h"
55 static const char *ospf_network_type_str
[] =
66 /* Utility functions. */
68 ospf_str2area_id (const char *str
, struct in_addr
*area_id
, int *format
)
73 /* match "A.B.C.D". */
74 if (strchr (str
, '.') != NULL
)
76 ret
= inet_aton (str
, area_id
);
79 *format
= OSPF_AREA_ID_FORMAT_ADDRESS
;
81 /* match "<0-4294967295>". */
87 ret
= strtoul (str
, &endptr
, 10);
88 if (*endptr
!= '\0' || errno
|| ret
> UINT32_MAX
)
91 area_id
->s_addr
= htonl (ret
);
92 *format
= OSPF_AREA_ID_FORMAT_DECIMAL
;
100 str2metric (const char *str
, int *metric
)
106 *metric
= strtol (str
, NULL
, 10);
107 if (*metric
< 0 && *metric
> 16777214)
109 /* vty_out (vty, "OSPF metric value is invalid%s", VTY_NEWLINE); */
117 str2metric_type (const char *str
, int *metric_type
)
123 if (strncmp (str
, "1", 1) == 0)
124 *metric_type
= EXTERNAL_METRIC_TYPE_1
;
125 else if (strncmp (str
, "2", 1) == 0)
126 *metric_type
= EXTERNAL_METRIC_TYPE_2
;
134 ospf_oi_count (struct interface
*ifp
)
136 struct route_node
*rn
;
139 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
150 "Enable a routing process\n"
151 "Start OSPF configuration\n")
154 u_short instance
= 0;
156 ospf
= ospf_lookup();
159 vty_out (vty
, "There isn't active ospf instance %s", VTY_NEWLINE
);
163 vty
->node
= OSPF_NODE
;
166 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
168 /* The following logic to set the vty->index is in place to be able
169 to ignore the commands which dont belong to this instance. */
170 if (ospf
->instance
!= instance
)
174 if (IS_DEBUG_OSPF_EVENT
)
175 zlog_debug ("Config command 'router ospf %d' received", instance
);
176 ospf
->oi_running
= 1;
178 ospf_router_id_update (ospf
);
185 router_ospf_instance_cmd
,
186 "router ospf <1-65535>",
187 "Enable a routing process\n"
188 "Start OSPF configuration\n"
191 DEFUN (no_router_ospf
,
195 "Enable a routing process\n"
196 "Start OSPF configuration\n")
199 u_short instance
= 0;
202 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
204 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
)
212 ALIAS (no_router_ospf
,
213 no_router_ospf_instance_cmd
,
214 "no router ospf <1-65535>",
216 "Enable a routing process\n"
217 "Start OSPF configuration\n"
220 DEFUN (ospf_router_id
,
222 "ospf router-id A.B.C.D",
223 "OSPF specific commands\n"
224 "router-id for the OSPF process\n"
225 "OSPF router-id in IP address format\n")
227 struct ospf
*ospf
= vty
->index
;
228 struct listnode
*node
;
229 struct ospf_area
*area
;
230 struct in_addr router_id
;
236 ret
= inet_aton (argv
[0], &router_id
);
239 vty_out (vty
, "Please specify Router ID by A.B.C.D%s", VTY_NEWLINE
);
243 ospf
->router_id_static
= router_id
;
245 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
248 vty_out (vty
, "For this router-id change to take effect,"
249 " save config and restart ospfd%s", VTY_NEWLINE
);
253 ospf_router_id_update (ospf
);
258 ALIAS_HIDDEN (ospf_router_id
,
259 ospf_router_id_old_cmd
,
261 "router-id for the OSPF process\n"
262 "OSPF router-id in IP address format\n")
264 DEFUN (no_ospf_router_id
,
265 no_ospf_router_id_cmd
,
268 "OSPF specific commands\n"
269 "router-id for the OSPF process\n")
271 struct ospf
*ospf
= vty
->index
;
272 struct listnode
*node
;
273 struct ospf_area
*area
;
278 ospf
->router_id_static
.s_addr
= 0;
280 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
283 vty_out (vty
, "For this router-id change to take effect,"
284 " save config and restart ospfd%s", VTY_NEWLINE
);
288 ospf_router_id_update (ospf
);
293 ALIAS (no_ospf_router_id
,
294 no_ospf_router_id_val_cmd
,
295 "no ospf router-id A.B.C.D",
297 "OSPF specific commands\n"
298 "router-id for the OSPF process\n"
299 "OSPF router-id in IP address format\n")
302 ospf_passive_interface_default (struct ospf
*ospf
, u_char newval
)
305 struct interface
*ifp
;
306 struct ospf_interface
*oi
;
308 ospf
->passive_interface_default
= newval
;
310 for (ALL_LIST_ELEMENTS_RO (om
->iflist
, ln
, ifp
))
313 OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp
), passive_interface
))
314 UNSET_IF_PARAM (IF_DEF_PARAMS (ifp
), passive_interface
);
316 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, ln
, oi
))
318 if (OSPF_IF_PARAM_CONFIGURED (oi
->params
, passive_interface
))
319 UNSET_IF_PARAM (oi
->params
, passive_interface
);
320 /* update multicast memberships */
321 ospf_if_set_multicast(oi
);
326 ospf_passive_interface_update_addr (struct ospf
*ospf
, struct interface
*ifp
,
327 struct ospf_if_params
*params
, u_char value
,
332 params
->passive_interface
= value
;
333 if (params
!= IF_DEF_PARAMS (ifp
))
335 if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp
), passive_interface
))
336 dflt
= IF_DEF_PARAMS (ifp
)->passive_interface
;
338 dflt
= ospf
->passive_interface_default
;
341 SET_IF_PARAM (params
, passive_interface
);
343 UNSET_IF_PARAM (params
, passive_interface
);
345 ospf_free_if_params (ifp
, addr
);
346 ospf_if_update_params (ifp
, addr
);
351 ospf_passive_interface_update (struct ospf
*ospf
, struct interface
*ifp
,
352 struct ospf_if_params
*params
, u_char value
)
354 params
->passive_interface
= value
;
355 if (params
== IF_DEF_PARAMS (ifp
))
357 if (value
!= ospf
->passive_interface_default
)
358 SET_IF_PARAM (params
, passive_interface
);
360 UNSET_IF_PARAM (params
, passive_interface
);
364 DEFUN (ospf_passive_interface
,
365 ospf_passive_interface_addr_cmd
,
366 "passive-interface IFNAME A.B.C.D",
367 "Suppress routing updates on an interface\n"
368 "Interface's name\n")
370 struct interface
*ifp
;
371 struct in_addr addr
= { .s_addr
= INADDR_ANY
};
373 struct ospf_if_params
*params
;
374 struct route_node
*rn
;
375 struct ospf
*ospf
= vty
->index
;
382 ospf_passive_interface_default (ospf
, OSPF_IF_PASSIVE
);
386 ifp
= if_get_by_name (argv
[0]);
388 params
= IF_DEF_PARAMS (ifp
);
392 ret
= inet_aton(argv
[1], &addr
);
395 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
400 params
= ospf_get_if_params (ifp
, addr
);
401 ospf_if_update_params (ifp
, addr
);
402 ospf_passive_interface_update_addr (ospf
, ifp
, params
,
403 OSPF_IF_PASSIVE
, addr
);
406 ospf_passive_interface_update (ospf
, ifp
, params
, OSPF_IF_PASSIVE
);
408 /* XXX We should call ospf_if_set_multicast on exactly those
409 * interfaces for which the passive property changed. It is too much
410 * work to determine this set, so we do this for every interface.
411 * This is safe and reasonable because ospf_if_set_multicast uses a
412 * record of joined groups to avoid systems calls if the desired
413 * memberships match the current memership.
416 for (rn
= route_top(IF_OIFS(ifp
)); rn
; rn
= route_next (rn
))
418 struct ospf_interface
*oi
= rn
->info
;
420 if (oi
&& (OSPF_IF_PARAM(oi
, passive_interface
) == OSPF_IF_PASSIVE
))
421 ospf_if_set_multicast(oi
);
424 * XXX It is not clear what state transitions the interface needs to
425 * undergo when going from active to passive. Fixing this will
426 * require precise identification of interfaces having such a
433 ALIAS (ospf_passive_interface
,
434 ospf_passive_interface_cmd
,
435 "passive-interface IFNAME",
436 "Suppress routing updates on an interface\n"
437 "Interface's name\n")
439 ALIAS (ospf_passive_interface
,
440 ospf_passive_interface_default_cmd
,
441 "passive-interface default",
442 "Suppress routing updates on an interface\n"
443 "Suppress routing updates on interfaces by default\n")
445 DEFUN (no_ospf_passive_interface
,
446 no_ospf_passive_interface_addr_cmd
,
447 "no passive-interface IFNAME A.B.C.D",
449 "Allow routing updates on an interface\n"
450 "Interface's name\n")
452 struct interface
*ifp
;
453 struct in_addr addr
= { .s_addr
= INADDR_ANY
};
454 struct ospf_if_params
*params
;
456 struct route_node
*rn
;
457 struct ospf
*ospf
= vty
->index
;
464 ospf_passive_interface_default (ospf
, OSPF_IF_ACTIVE
);
468 ifp
= if_get_by_name (argv
[0]);
470 params
= IF_DEF_PARAMS (ifp
);
474 ret
= inet_aton(argv
[1], &addr
);
477 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
482 params
= ospf_lookup_if_params (ifp
, addr
);
485 ospf_passive_interface_update_addr (ospf
, ifp
, params
, OSPF_IF_ACTIVE
,
488 ospf_passive_interface_update (ospf
, ifp
, params
, OSPF_IF_ACTIVE
);
490 /* XXX We should call ospf_if_set_multicast on exactly those
491 * interfaces for which the passive property changed. It is too much
492 * work to determine this set, so we do this for every interface.
493 * This is safe and reasonable because ospf_if_set_multicast uses a
494 * record of joined groups to avoid systems calls if the desired
495 * memberships match the current memership.
497 for (rn
= route_top(IF_OIFS(ifp
)); rn
; rn
= route_next (rn
))
499 struct ospf_interface
*oi
= rn
->info
;
501 if (oi
&& (OSPF_IF_PARAM(oi
, passive_interface
) == OSPF_IF_ACTIVE
))
502 ospf_if_set_multicast(oi
);
508 ALIAS (no_ospf_passive_interface
,
509 no_ospf_passive_interface_cmd
,
510 "no passive-interface IFNAME",
512 "Allow routing updates on an interface\n"
513 "Interface's name\n")
515 ALIAS (no_ospf_passive_interface
,
516 no_ospf_passive_interface_default_cmd
,
517 "no passive-interface default",
519 "Allow routing updates on an interface\n"
520 "Allow routing updates on interfaces by default\n")
522 DEFUN (ospf_network_area
,
523 ospf_network_area_cmd
,
524 "network A.B.C.D/M area (A.B.C.D|<0-4294967295>)",
525 "Enable routing on an IP network\n"
526 "OSPF network prefix\n"
527 "Set the OSPF area ID\n"
528 "OSPF area ID in IP address format\n"
529 "OSPF area ID as a decimal value\n")
531 struct ospf
*ospf
= vty
->index
;
532 struct prefix_ipv4 p
;
533 struct in_addr area_id
;
541 vty_out (vty
, "The network command is not supported in multi-instance ospf%s",
546 if (ospf
->if_ospf_cli_count
> 0)
548 vty_out (vty
, "Please remove all ip ospf area x.x.x.x commands first.%s",
553 /* Get network prefix and Area ID. */
554 VTY_GET_IPV4_PREFIX ("network prefix", p
, argv
[0]);
555 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[1]);
557 ret
= ospf_network_set (ospf
, &p
, area_id
);
560 vty_out (vty
, "There is already same network statement.%s", VTY_NEWLINE
);
567 DEFUN (no_ospf_network_area
,
568 no_ospf_network_area_cmd
,
569 "no network A.B.C.D/M area (A.B.C.D|<0-4294967295>)",
571 "Enable routing on an IP network\n"
572 "OSPF network prefix\n"
573 "Set the OSPF area ID\n"
574 "OSPF area ID in IP address format\n"
575 "OSPF area ID as a decimal value\n")
577 struct ospf
*ospf
= (struct ospf
*) vty
->index
;
578 struct prefix_ipv4 p
;
579 struct in_addr area_id
;
587 vty_out (vty
, "The network command is not supported in multi-instance ospf%s",
592 /* Get network prefix and Area ID. */
593 VTY_GET_IPV4_PREFIX ("network prefix", p
, argv
[0]);
594 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[1]);
596 ret
= ospf_network_unset (ospf
, &p
, area_id
);
599 vty_out (vty
, "Can't find specified network area configuration.%s",
608 DEFUN (ospf_area_range
,
610 "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M",
611 "OSPF area parameters\n"
612 "OSPF area ID in IP address format\n"
613 "OSPF area ID as a decimal value\n"
614 "Summarize routes matching address/mask (border routers only)\n"
615 "Area range prefix\n")
617 struct ospf
*ospf
= vty
->index
;
618 struct prefix_ipv4 p
;
619 struct in_addr area_id
;
626 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
627 VTY_GET_IPV4_PREFIX ("area range", p
, argv
[1]);
629 ospf_area_range_set (ospf
, area_id
, &p
, OSPF_AREA_RANGE_ADVERTISE
);
632 VTY_GET_INTEGER ("range cost", cost
, argv
[2]);
633 ospf_area_range_cost_set (ospf
, area_id
, &p
, cost
);
639 ALIAS (ospf_area_range
,
640 ospf_area_range_advertise_cmd
,
641 "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M advertise",
642 "OSPF area parameters\n"
643 "OSPF area ID in IP address format\n"
644 "OSPF area ID as a decimal value\n"
645 "OSPF area range for route advertise (default)\n"
646 "Area range prefix\n"
647 "Advertise this range (default)\n")
649 ALIAS (ospf_area_range
,
650 ospf_area_range_cost_cmd
,
651 "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M cost <0-16777215>",
652 "OSPF area parameters\n"
653 "OSPF area ID in IP address format\n"
654 "OSPF area ID as a decimal value\n"
655 "Summarize routes matching address/mask (border routers only)\n"
656 "Area range prefix\n"
657 "User specified metric for this range\n"
658 "Advertised metric for this range\n")
660 ALIAS (ospf_area_range
,
661 ospf_area_range_advertise_cost_cmd
,
662 "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M advertise cost <0-16777215>",
663 "OSPF area parameters\n"
664 "OSPF area ID in IP address format\n"
665 "OSPF area ID as a decimal value\n"
666 "Summarize routes matching address/mask (border routers only)\n"
667 "Area range prefix\n"
668 "Advertise this range (default)\n"
669 "User specified metric for this range\n"
670 "Advertised metric for this range\n")
672 DEFUN (ospf_area_range_not_advertise
,
673 ospf_area_range_not_advertise_cmd
,
674 "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M not-advertise",
675 "OSPF area parameters\n"
676 "OSPF area ID in IP address format\n"
677 "OSPF area ID as a decimal value\n"
678 "Summarize routes matching address/mask (border routers only)\n"
679 "Area range prefix\n"
680 "DoNotAdvertise this range\n")
682 struct ospf
*ospf
= vty
->index
;
683 struct prefix_ipv4 p
;
684 struct in_addr area_id
;
690 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
691 VTY_GET_IPV4_PREFIX ("area range", p
, argv
[1]);
693 ospf_area_range_set (ospf
, area_id
, &p
, 0);
698 DEFUN (no_ospf_area_range
,
699 no_ospf_area_range_cmd
,
700 "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M",
702 "OSPF area parameters\n"
703 "OSPF area ID in IP address format\n"
704 "OSPF area ID as a decimal value\n"
705 "Summarize routes matching address/mask (border routers only)\n"
706 "Area range prefix\n")
708 struct ospf
*ospf
= vty
->index
;
709 struct prefix_ipv4 p
;
710 struct in_addr area_id
;
716 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
717 VTY_GET_IPV4_PREFIX ("area range", p
, argv
[1]);
719 ospf_area_range_unset (ospf
, area_id
, &p
);
724 ALIAS (no_ospf_area_range
,
725 no_ospf_area_range_advertise_cmd
,
726 "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M (advertise|not-advertise)",
728 "OSPF area parameters\n"
729 "OSPF area ID in IP address format\n"
730 "OSPF area ID as a decimal value\n"
731 "Summarize routes matching address/mask (border routers only)\n"
732 "Area range prefix\n"
733 "Advertise this range (default)\n"
734 "DoNotAdvertise this range\n")
736 ALIAS (no_ospf_area_range
,
737 no_ospf_area_range_cost_cmd
,
738 "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M cost <0-16777215>",
740 "OSPF area parameters\n"
741 "OSPF area ID in IP address format\n"
742 "OSPF area ID as a decimal value\n"
743 "Summarize routes matching address/mask (border routers only)\n"
744 "Area range prefix\n"
745 "User specified metric for this range\n"
746 "Advertised metric for this range\n")
748 ALIAS (no_ospf_area_range
,
749 no_ospf_area_range_advertise_cost_cmd
,
750 "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M advertise cost <0-16777215>",
752 "OSPF area parameters\n"
753 "OSPF area ID in IP address format\n"
754 "OSPF area ID as a decimal value\n"
755 "Summarize routes matching address/mask (border routers only)\n"
756 "Area range prefix\n"
757 "Advertise this range (default)\n"
758 "User specified metric for this range\n"
759 "Advertised metric for this range\n")
761 DEFUN (ospf_area_range_substitute
,
762 ospf_area_range_substitute_cmd
,
763 "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M substitute A.B.C.D/M",
764 "OSPF area parameters\n"
765 "OSPF area ID in IP address format\n"
766 "OSPF area ID as a decimal value\n"
767 "Summarize routes matching address/mask (border routers only)\n"
768 "Area range prefix\n"
769 "Announce area range as another prefix\n"
770 "Network prefix to be announced instead of range\n")
772 struct ospf
*ospf
= vty
->index
;
773 struct prefix_ipv4 p
, s
;
774 struct in_addr area_id
;
780 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
781 VTY_GET_IPV4_PREFIX ("area range", p
, argv
[1]);
782 VTY_GET_IPV4_PREFIX ("substituted network prefix", s
, argv
[2]);
784 ospf_area_range_substitute_set (ospf
, area_id
, &p
, &s
);
789 DEFUN (no_ospf_area_range_substitute
,
790 no_ospf_area_range_substitute_cmd
,
791 "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M substitute A.B.C.D/M",
793 "OSPF area parameters\n"
794 "OSPF area ID in IP address format\n"
795 "OSPF area ID as a decimal value\n"
796 "Summarize routes matching address/mask (border routers only)\n"
797 "Area range prefix\n"
798 "Announce area range as another prefix\n"
799 "Network prefix to be announced instead of range\n")
801 struct ospf
*ospf
= vty
->index
;
802 struct prefix_ipv4 p
, s
;
803 struct in_addr area_id
;
809 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
810 VTY_GET_IPV4_PREFIX ("area range", p
, argv
[1]);
811 VTY_GET_IPV4_PREFIX ("substituted network prefix", s
, argv
[2]);
813 ospf_area_range_substitute_unset (ospf
, area_id
, &p
);
819 /* Command Handler Logic in VLink stuff is delicate!!
821 ALTER AT YOUR OWN RISK!!!!
823 Various dummy values are used to represent 'NoChange' state for
824 VLink configuration NOT being changed by a VLink command, and
825 special syntax is used within the command strings so that the
826 typed in command verbs can be seen in the configuration command
827 bacckend handler. This is to drastically reduce the verbeage
828 required to coe up with a reasonably compatible Cisco VLink command
830 - Matthew Grant <grantma@anathoth.gen.nz>
831 Wed, 21 Feb 2001 15:13:52 +1300
835 /* Configuration data for virtual links
837 struct ospf_vl_config_data
{
838 struct vty
*vty
; /* vty stuff */
839 struct in_addr area_id
; /* area ID from command line */
840 int format
; /* command line area ID format */
841 struct in_addr vl_peer
; /* command line vl_peer */
842 int auth_type
; /* Authehntication type, if given */
843 char *auth_key
; /* simple password if present */
844 int crypto_key_id
; /* Cryptographic key ID */
845 char *md5_key
; /* MD5 authentication key */
846 int hello_interval
; /* Obvious what these are... */
847 int retransmit_interval
;
853 ospf_vl_config_data_init (struct ospf_vl_config_data
*vl_config
,
856 memset (vl_config
, 0, sizeof (struct ospf_vl_config_data
));
857 vl_config
->auth_type
= OSPF_AUTH_CMD_NOTSEEN
;
858 vl_config
->vty
= vty
;
861 static struct ospf_vl_data
*
862 ospf_find_vl_data (struct ospf
*ospf
, struct ospf_vl_config_data
*vl_config
)
864 struct ospf_area
*area
;
865 struct ospf_vl_data
*vl_data
;
867 struct in_addr area_id
;
869 vty
= vl_config
->vty
;
870 area_id
= vl_config
->area_id
;
872 if (area_id
.s_addr
== OSPF_AREA_BACKBONE
)
875 "Configuring VLs over the backbone is not allowed%s",
879 area
= ospf_area_get (ospf
, area_id
, vl_config
->format
);
881 if (area
->external_routing
!= OSPF_AREA_DEFAULT
)
883 if (vl_config
->format
== OSPF_AREA_ID_FORMAT_ADDRESS
)
884 vty_out (vty
, "Area %s is %s%s",
886 area
->external_routing
== OSPF_AREA_NSSA
?"nssa":"stub",
889 vty_out (vty
, "Area %ld is %s%s",
890 (u_long
)ntohl (area_id
.s_addr
),
891 area
->external_routing
== OSPF_AREA_NSSA
?"nssa":"stub",
896 if ((vl_data
= ospf_vl_lookup (ospf
, area
, vl_config
->vl_peer
)) == NULL
)
898 vl_data
= ospf_vl_data_new (area
, vl_config
->vl_peer
);
899 if (vl_data
->vl_oi
== NULL
)
901 vl_data
->vl_oi
= ospf_vl_new (ospf
, vl_data
);
902 ospf_vl_add (ospf
, vl_data
);
903 ospf_spf_calculate_schedule (ospf
, SPF_FLAG_CONFIG_CHANGE
);
911 ospf_vl_set_security (struct ospf_vl_data
*vl_data
,
912 struct ospf_vl_config_data
*vl_config
)
914 struct crypt_key
*ck
;
916 struct interface
*ifp
= vl_data
->vl_oi
->ifp
;
918 vty
= vl_config
->vty
;
920 if (vl_config
->auth_type
!= OSPF_AUTH_CMD_NOTSEEN
)
922 SET_IF_PARAM (IF_DEF_PARAMS (ifp
), auth_type
);
923 IF_DEF_PARAMS (ifp
)->auth_type
= vl_config
->auth_type
;
926 if (vl_config
->auth_key
)
928 memset(IF_DEF_PARAMS (ifp
)->auth_simple
, 0, OSPF_AUTH_SIMPLE_SIZE
+1);
929 strncpy ((char *) IF_DEF_PARAMS (ifp
)->auth_simple
, vl_config
->auth_key
,
930 OSPF_AUTH_SIMPLE_SIZE
);
932 else if (vl_config
->md5_key
)
934 if (ospf_crypt_key_lookup (IF_DEF_PARAMS (ifp
)->auth_crypt
, vl_config
->crypto_key_id
)
937 vty_out (vty
, "OSPF: Key %d already exists%s",
938 vl_config
->crypto_key_id
, VTY_NEWLINE
);
941 ck
= ospf_crypt_key_new ();
942 ck
->key_id
= vl_config
->crypto_key_id
;
943 memset(ck
->auth_key
, 0, OSPF_AUTH_MD5_SIZE
+1);
944 strncpy ((char *) ck
->auth_key
, vl_config
->md5_key
, OSPF_AUTH_MD5_SIZE
);
946 ospf_crypt_key_add (IF_DEF_PARAMS (ifp
)->auth_crypt
, ck
);
948 else if (vl_config
->crypto_key_id
!= 0)
952 if (ospf_crypt_key_lookup (IF_DEF_PARAMS (ifp
)->auth_crypt
,
953 vl_config
->crypto_key_id
) == NULL
)
955 vty_out (vty
, "OSPF: Key %d does not exist%s",
956 vl_config
->crypto_key_id
, VTY_NEWLINE
);
960 ospf_crypt_key_delete (IF_DEF_PARAMS (ifp
)->auth_crypt
, vl_config
->crypto_key_id
);
968 ospf_vl_set_timers (struct ospf_vl_data
*vl_data
,
969 struct ospf_vl_config_data
*vl_config
)
971 struct interface
*ifp
= ifp
= vl_data
->vl_oi
->ifp
;
972 /* Virtual Link data initialised to defaults, so only set
974 if (vl_config
->hello_interval
)
976 SET_IF_PARAM (IF_DEF_PARAMS (ifp
), v_hello
);
977 IF_DEF_PARAMS (ifp
)->v_hello
= vl_config
->hello_interval
;
980 if (vl_config
->dead_interval
)
982 SET_IF_PARAM (IF_DEF_PARAMS (ifp
), v_wait
);
983 IF_DEF_PARAMS (ifp
)->v_wait
= vl_config
->dead_interval
;
986 if (vl_config
->retransmit_interval
)
988 SET_IF_PARAM (IF_DEF_PARAMS (ifp
), retransmit_interval
);
989 IF_DEF_PARAMS (ifp
)->retransmit_interval
= vl_config
->retransmit_interval
;
992 if (vl_config
->transmit_delay
)
994 SET_IF_PARAM (IF_DEF_PARAMS (ifp
), transmit_delay
);
995 IF_DEF_PARAMS (ifp
)->transmit_delay
= vl_config
->transmit_delay
;
1003 /* The business end of all of the above */
1005 ospf_vl_set (struct ospf
*ospf
, struct ospf_vl_config_data
*vl_config
)
1007 struct ospf_vl_data
*vl_data
;
1010 vl_data
= ospf_find_vl_data (ospf
, vl_config
);
1014 /* Process this one first as it can have a fatal result, which can
1015 only logically occur if the virtual link exists already
1016 Thus a command error does not result in a change to the
1017 running configuration such as unexpectedly altered timer
1019 ret
= ospf_vl_set_security (vl_data
, vl_config
);
1020 if (ret
!= CMD_SUCCESS
)
1023 /* Set any time based parameters, these area already range checked */
1025 ret
= ospf_vl_set_timers (vl_data
, vl_config
);
1026 if (ret
!= CMD_SUCCESS
)
1033 /* This stuff exists to make specifying all the alias commands A LOT simpler
1035 #define VLINK_HELPSTR_IPADDR \
1036 "OSPF area parameters\n" \
1037 "OSPF area ID in IP address format\n" \
1038 "OSPF area ID as a decimal value\n" \
1039 "Configure a virtual link\n" \
1040 "Router ID of the remote ABR\n"
1042 #define VLINK_HELPSTR_AUTHTYPE_SIMPLE \
1043 "Enable authentication on this virtual link\n" \
1046 #define VLINK_HELPSTR_AUTHTYPE_ALL \
1047 VLINK_HELPSTR_AUTHTYPE_SIMPLE \
1048 "Use null authentication\n" \
1049 "Use message-digest authentication\n"
1051 #define VLINK_HELPSTR_TIME_PARAM_NOSECS \
1052 "Time between HELLO packets\n" \
1053 "Time between retransmitting lost link state advertisements\n" \
1054 "Link state transmit delay\n" \
1055 "Interval after which a neighbor is declared dead\n"
1057 #define VLINK_HELPSTR_TIME_PARAM \
1058 VLINK_HELPSTR_TIME_PARAM_NOSECS \
1061 #define VLINK_HELPSTR_AUTH_SIMPLE \
1062 "Authentication password (key)\n" \
1063 "The OSPF password (key)"
1065 #define VLINK_HELPSTR_AUTH_MD5 \
1066 "Message digest authentication password (key)\n" \
1069 "Use MD5 algorithm\n" \
1070 "The OSPF password (key)"
1072 DEFUN (ospf_area_vlink
,
1073 ospf_area_vlink_cmd
,
1074 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D",
1075 VLINK_HELPSTR_IPADDR
)
1077 struct ospf
*ospf
= vty
->index
;
1078 struct ospf_vl_config_data vl_config
;
1079 char auth_key
[OSPF_AUTH_SIMPLE_SIZE
+1];
1080 char md5_key
[OSPF_AUTH_MD5_SIZE
+1];
1087 ospf_vl_config_data_init(&vl_config
, vty
);
1089 /* Read off first 2 parameters and check them */
1090 ret
= ospf_str2area_id (argv
[0], &vl_config
.area_id
, &vl_config
.format
);
1093 vty_out (vty
, "OSPF area ID is invalid%s", VTY_NEWLINE
);
1097 ret
= inet_aton (argv
[1], &vl_config
.vl_peer
);
1100 vty_out (vty
, "Please specify valid Router ID as a.b.c.d%s",
1107 /* Thats all folks! - BUGS B. strikes again!!!*/
1109 return ospf_vl_set (ospf
, &vl_config
);
1112 /* Deal with other parameters */
1113 for (i
=2; i
< argc
; i
++)
1116 /* vty_out (vty, "argv[%d] - %s%s", i, argv[i], VTY_NEWLINE); */
1122 if (i
> 2 || strncmp (argv
[i
], "authentication-", 15) == 0)
1124 /* authentication-key - this option can occur anywhere on
1125 command line. At start of command line
1126 must check for authentication option. */
1127 memset (auth_key
, 0, OSPF_AUTH_SIMPLE_SIZE
+ 1);
1128 strncpy (auth_key
, argv
[i
+1], OSPF_AUTH_SIMPLE_SIZE
);
1129 vl_config
.auth_key
= auth_key
;
1132 else if (strncmp (argv
[i
], "authentication", 14) == 0)
1134 /* authentication - this option can only occur at start
1136 vl_config
.auth_type
= OSPF_AUTH_SIMPLE
;
1139 if (strncmp (argv
[i
+1], "n", 1) == 0)
1141 /* "authentication null" */
1142 vl_config
.auth_type
= OSPF_AUTH_NULL
;
1145 else if (strncmp (argv
[i
+1], "m", 1) == 0
1146 && strcmp (argv
[i
+1], "message-digest-") != 0)
1148 /* "authentication message-digest" */
1149 vl_config
.auth_type
= OSPF_AUTH_CRYPTOGRAPHIC
;
1157 /* message-digest-key */
1159 vl_config
.crypto_key_id
= strtol (argv
[i
], NULL
, 10);
1160 if (vl_config
.crypto_key_id
< 0)
1163 memset(md5_key
, 0, OSPF_AUTH_MD5_SIZE
+1);
1164 strncpy (md5_key
, argv
[i
], OSPF_AUTH_MD5_SIZE
);
1165 vl_config
.md5_key
= md5_key
;
1169 /* Hello interval */
1171 vl_config
.hello_interval
= strtol (argv
[i
], NULL
, 10);
1172 if (vl_config
.hello_interval
< 0)
1177 /* Retransmit Interval */
1179 vl_config
.retransmit_interval
= strtol (argv
[i
], NULL
, 10);
1180 if (vl_config
.retransmit_interval
< 0)
1185 /* Transmit Delay */
1187 vl_config
.transmit_delay
= strtol (argv
[i
], NULL
, 10);
1188 if (vl_config
.transmit_delay
< 0)
1195 vl_config
.dead_interval
= strtol (argv
[i
], NULL
, 10);
1196 if (vl_config
.dead_interval
< 0)
1203 /* Action configuration */
1205 return ospf_vl_set (ospf
, &vl_config
);
1209 DEFUN (no_ospf_area_vlink
,
1210 no_ospf_area_vlink_cmd
,
1211 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D",
1213 VLINK_HELPSTR_IPADDR
)
1215 struct ospf
*ospf
= vty
->index
;
1216 struct ospf_area
*area
;
1217 struct ospf_vl_config_data vl_config
;
1218 struct ospf_vl_data
*vl_data
= NULL
;
1219 char auth_key
[OSPF_AUTH_SIMPLE_SIZE
+1];
1226 ospf_vl_config_data_init(&vl_config
, vty
);
1228 ret
= ospf_str2area_id (argv
[0], &vl_config
.area_id
, &format
);
1231 vty_out (vty
, "OSPF area ID is invalid%s", VTY_NEWLINE
);
1235 area
= ospf_area_lookup_by_area_id (ospf
, vl_config
.area_id
);
1238 vty_out (vty
, "Area does not exist%s", VTY_NEWLINE
);
1242 ret
= inet_aton (argv
[1], &vl_config
.vl_peer
);
1245 vty_out (vty
, "Please specify valid Router ID as a.b.c.d%s",
1252 /* Basic VLink no command */
1253 /* Thats all folks! - BUGS B. strikes again!!!*/
1254 if ((vl_data
= ospf_vl_lookup (ospf
, area
, vl_config
.vl_peer
)))
1255 ospf_vl_delete (ospf
, vl_data
);
1257 ospf_area_check_free (ospf
, vl_config
.area_id
);
1262 /* If we are down here, we are reseting parameters */
1264 /* Deal with other parameters */
1265 for (i
=2; i
< argc
; i
++)
1267 /* vty_out (vty, "argv[%d] - %s%s", i, argv[i], VTY_NEWLINE); */
1273 if (i
> 2 || strncmp (argv
[i
], "authentication-", 15) == 0)
1275 /* authentication-key - this option can occur anywhere on
1276 command line. At start of command line
1277 must check for authentication option. */
1278 memset (auth_key
, 0, OSPF_AUTH_SIMPLE_SIZE
+ 1);
1279 vl_config
.auth_key
= auth_key
;
1281 else if (strncmp (argv
[i
], "authentication", 14) == 0)
1283 /* authentication - this option can only occur at start
1285 vl_config
.auth_type
= OSPF_AUTH_NOTSET
;
1290 /* message-digest-key */
1291 /* Delete one key */
1293 vl_config
.crypto_key_id
= strtol (argv
[i
], NULL
, 10);
1294 if (vl_config
.crypto_key_id
< 0)
1296 vl_config
.md5_key
= NULL
;
1300 /* Hello interval */
1301 vl_config
.hello_interval
= OSPF_HELLO_INTERVAL_DEFAULT
;
1305 /* Retransmit Interval */
1306 vl_config
.retransmit_interval
= OSPF_RETRANSMIT_INTERVAL_DEFAULT
;
1310 /* Transmit Delay */
1311 vl_config
.transmit_delay
= OSPF_TRANSMIT_DELAY_DEFAULT
;
1317 vl_config
.dead_interval
= OSPF_ROUTER_DEAD_INTERVAL_DEFAULT
;
1323 /* Action configuration */
1325 return ospf_vl_set (ospf
, &vl_config
);
1328 ALIAS (ospf_area_vlink
,
1329 ospf_area_vlink_param1_cmd
,
1330 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1331 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
1332 VLINK_HELPSTR_IPADDR
1333 VLINK_HELPSTR_TIME_PARAM
)
1335 ALIAS (no_ospf_area_vlink
,
1336 no_ospf_area_vlink_param1_cmd
,
1337 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1338 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
1340 VLINK_HELPSTR_IPADDR
1341 VLINK_HELPSTR_TIME_PARAM
)
1343 ALIAS (ospf_area_vlink
,
1344 ospf_area_vlink_param2_cmd
,
1345 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1346 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
1347 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
1348 VLINK_HELPSTR_IPADDR
1349 VLINK_HELPSTR_TIME_PARAM
1350 VLINK_HELPSTR_TIME_PARAM
)
1352 ALIAS (no_ospf_area_vlink
,
1353 no_ospf_area_vlink_param2_cmd
,
1354 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1355 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
1356 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
1358 VLINK_HELPSTR_IPADDR
1359 VLINK_HELPSTR_TIME_PARAM
1360 VLINK_HELPSTR_TIME_PARAM
)
1362 ALIAS (ospf_area_vlink
,
1363 ospf_area_vlink_param3_cmd
,
1364 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1365 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
1366 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
1367 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
1368 VLINK_HELPSTR_IPADDR
1369 VLINK_HELPSTR_TIME_PARAM
1370 VLINK_HELPSTR_TIME_PARAM
1371 VLINK_HELPSTR_TIME_PARAM
)
1373 ALIAS (no_ospf_area_vlink
,
1374 no_ospf_area_vlink_param3_cmd
,
1375 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1376 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
1377 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
1378 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
1380 VLINK_HELPSTR_IPADDR
1381 VLINK_HELPSTR_TIME_PARAM
1382 VLINK_HELPSTR_TIME_PARAM
1383 VLINK_HELPSTR_TIME_PARAM
)
1385 ALIAS (ospf_area_vlink
,
1386 ospf_area_vlink_param4_cmd
,
1387 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1388 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
1389 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
1390 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
1391 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
1392 VLINK_HELPSTR_IPADDR
1393 VLINK_HELPSTR_TIME_PARAM
1394 VLINK_HELPSTR_TIME_PARAM
1395 VLINK_HELPSTR_TIME_PARAM
1396 VLINK_HELPSTR_TIME_PARAM
)
1398 ALIAS (no_ospf_area_vlink
,
1399 no_ospf_area_vlink_param4_cmd
,
1400 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1401 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
1402 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
1403 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
1404 "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
1406 VLINK_HELPSTR_IPADDR
1407 VLINK_HELPSTR_TIME_PARAM
1408 VLINK_HELPSTR_TIME_PARAM
1409 VLINK_HELPSTR_TIME_PARAM
1410 VLINK_HELPSTR_TIME_PARAM
)
1412 ALIAS (ospf_area_vlink
,
1413 ospf_area_vlink_authtype_args_cmd
,
1414 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1415 "(authentication|) (message-digest|null)",
1416 VLINK_HELPSTR_IPADDR
1417 VLINK_HELPSTR_AUTHTYPE_ALL
)
1419 ALIAS (no_ospf_area_vlink
,
1420 no_ospf_area_vlink_authtype_args_cmd
,
1421 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1422 "(authentication|) (message-digest|null)",
1424 VLINK_HELPSTR_IPADDR
1425 VLINK_HELPSTR_AUTHTYPE_ALL
)
1427 ALIAS (ospf_area_vlink
,
1428 ospf_area_vlink_authtype_cmd
,
1429 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1430 "(authentication|)",
1431 VLINK_HELPSTR_IPADDR
1432 VLINK_HELPSTR_AUTHTYPE_SIMPLE
)
1434 ALIAS (no_ospf_area_vlink
,
1435 no_ospf_area_vlink_authtype_cmd
,
1436 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1437 "(authentication|)",
1439 VLINK_HELPSTR_IPADDR
1440 VLINK_HELPSTR_AUTHTYPE_SIMPLE
)
1442 ALIAS (ospf_area_vlink
,
1443 ospf_area_vlink_md5_cmd
,
1444 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1445 "(message-digest-key|) <1-255> md5 KEY",
1446 VLINK_HELPSTR_IPADDR
1447 VLINK_HELPSTR_AUTH_MD5
)
1449 ALIAS (no_ospf_area_vlink
,
1450 no_ospf_area_vlink_md5_cmd
,
1451 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1452 "(message-digest-key|) <1-255> md5 KEY",
1454 VLINK_HELPSTR_IPADDR
1455 VLINK_HELPSTR_AUTH_MD5
)
1457 ALIAS (ospf_area_vlink
,
1458 ospf_area_vlink_authkey_cmd
,
1459 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1460 "(authentication-key|) AUTH_KEY",
1461 VLINK_HELPSTR_IPADDR
1462 VLINK_HELPSTR_AUTH_SIMPLE
)
1464 ALIAS (no_ospf_area_vlink
,
1465 no_ospf_area_vlink_authkey_cmd
,
1466 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1467 "(authentication-key|) AUTH_KEY",
1469 VLINK_HELPSTR_IPADDR
1470 VLINK_HELPSTR_AUTH_SIMPLE
)
1472 ALIAS (ospf_area_vlink
,
1473 ospf_area_vlink_authtype_args_authkey_cmd
,
1474 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1475 "(authentication|) (message-digest|null) "
1476 "(authentication-key|) AUTH_KEY",
1477 VLINK_HELPSTR_IPADDR
1478 VLINK_HELPSTR_AUTHTYPE_ALL
1479 VLINK_HELPSTR_AUTH_SIMPLE
)
1481 ALIAS (no_ospf_area_vlink
,
1482 no_ospf_area_vlink_authtype_args_authkey_cmd
,
1483 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1484 "(authentication|) (message-digest|null) "
1485 "(authentication-key|) AUTH_KEY",
1487 VLINK_HELPSTR_IPADDR
1488 VLINK_HELPSTR_AUTHTYPE_ALL
1489 VLINK_HELPSTR_AUTH_SIMPLE
)
1491 ALIAS (ospf_area_vlink
,
1492 ospf_area_vlink_authtype_authkey_cmd
,
1493 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1494 "(authentication|) "
1495 "(authentication-key|) AUTH_KEY",
1496 VLINK_HELPSTR_IPADDR
1497 VLINK_HELPSTR_AUTHTYPE_SIMPLE
1498 VLINK_HELPSTR_AUTH_SIMPLE
)
1500 ALIAS (no_ospf_area_vlink
,
1501 no_ospf_area_vlink_authtype_authkey_cmd
,
1502 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1503 "(authentication|) "
1504 "(authentication-key|) AUTH_KEY",
1506 VLINK_HELPSTR_IPADDR
1507 VLINK_HELPSTR_AUTHTYPE_SIMPLE
1508 VLINK_HELPSTR_AUTH_SIMPLE
)
1510 ALIAS (ospf_area_vlink
,
1511 ospf_area_vlink_authtype_args_md5_cmd
,
1512 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1513 "(authentication|) (message-digest|null) "
1514 "(message-digest-key|) <1-255> md5 KEY",
1515 VLINK_HELPSTR_IPADDR
1516 VLINK_HELPSTR_AUTHTYPE_ALL
1517 VLINK_HELPSTR_AUTH_MD5
)
1519 ALIAS (no_ospf_area_vlink
,
1520 no_ospf_area_vlink_authtype_args_md5_cmd
,
1521 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1522 "(authentication|) (message-digest|null) "
1523 "(message-digest-key|) <1-255> md5 KEY",
1525 VLINK_HELPSTR_IPADDR
1526 VLINK_HELPSTR_AUTHTYPE_ALL
1527 VLINK_HELPSTR_AUTH_MD5
)
1529 ALIAS (ospf_area_vlink
,
1530 ospf_area_vlink_authtype_md5_cmd
,
1531 "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1532 "(authentication|) "
1533 "(message-digest-key|) <1-255> md5 KEY",
1534 VLINK_HELPSTR_IPADDR
1535 VLINK_HELPSTR_AUTHTYPE_SIMPLE
1536 VLINK_HELPSTR_AUTH_MD5
)
1538 ALIAS (no_ospf_area_vlink
,
1539 no_ospf_area_vlink_authtype_md5_cmd
,
1540 "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
1541 "(authentication|) "
1542 "(message-digest-key|) <1-255> md5 KEY",
1544 VLINK_HELPSTR_IPADDR
1545 VLINK_HELPSTR_AUTHTYPE_SIMPLE
1546 VLINK_HELPSTR_AUTH_MD5
)
1549 DEFUN (ospf_area_shortcut
,
1550 ospf_area_shortcut_cmd
,
1551 "area (A.B.C.D|<0-4294967295>) shortcut (default|enable|disable)",
1552 "OSPF area parameters\n"
1553 "OSPF area ID in IP address format\n"
1554 "OSPF area ID as a decimal value\n"
1555 "Configure the area's shortcutting mode\n"
1556 "Set default shortcutting behavior\n"
1557 "Enable shortcutting through the area\n"
1558 "Disable shortcutting through the area\n")
1560 struct ospf
*ospf
= vty
->index
;
1561 struct ospf_area
*area
;
1562 struct in_addr area_id
;
1569 VTY_GET_OSPF_AREA_ID_NO_BB ("shortcut", area_id
, format
, argv
[0]);
1571 area
= ospf_area_get (ospf
, area_id
, format
);
1573 if (strncmp (argv
[1], "de", 2) == 0)
1574 mode
= OSPF_SHORTCUT_DEFAULT
;
1575 else if (strncmp (argv
[1], "di", 2) == 0)
1576 mode
= OSPF_SHORTCUT_DISABLE
;
1577 else if (strncmp (argv
[1], "e", 1) == 0)
1578 mode
= OSPF_SHORTCUT_ENABLE
;
1582 ospf_area_shortcut_set (ospf
, area
, mode
);
1584 if (ospf
->abr_type
!= OSPF_ABR_SHORTCUT
)
1585 vty_out (vty
, "Shortcut area setting will take effect "
1586 "only when the router is configured as Shortcut ABR%s",
1592 DEFUN (no_ospf_area_shortcut
,
1593 no_ospf_area_shortcut_cmd
,
1594 "no area (A.B.C.D|<0-4294967295>) shortcut (enable|disable)",
1596 "OSPF area parameters\n"
1597 "OSPF area ID in IP address format\n"
1598 "OSPF area ID as a decimal value\n"
1599 "Deconfigure the area's shortcutting mode\n"
1600 "Deconfigure enabled shortcutting through the area\n"
1601 "Deconfigure disabled shortcutting through the area\n")
1603 struct ospf
*ospf
= vty
->index
;
1604 struct ospf_area
*area
;
1605 struct in_addr area_id
;
1611 VTY_GET_OSPF_AREA_ID_NO_BB ("shortcut", area_id
, format
, argv
[0]);
1613 area
= ospf_area_lookup_by_area_id (ospf
, area_id
);
1617 ospf_area_shortcut_unset (ospf
, area
);
1623 DEFUN (ospf_area_stub
,
1625 "area (A.B.C.D|<0-4294967295>) stub",
1626 "OSPF area parameters\n"
1627 "OSPF area ID in IP address format\n"
1628 "OSPF area ID as a decimal value\n"
1629 "Configure OSPF area as stub\n")
1631 struct ospf
*ospf
= vty
->index
;
1632 struct in_addr area_id
;
1638 VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id
, format
, argv
[0]);
1640 ret
= ospf_area_stub_set (ospf
, area_id
);
1643 vty_out (vty
, "First deconfigure all virtual link through this area%s",
1648 ospf_area_no_summary_unset (ospf
, area_id
);
1653 DEFUN (ospf_area_stub_no_summary
,
1654 ospf_area_stub_no_summary_cmd
,
1655 "area (A.B.C.D|<0-4294967295>) stub no-summary",
1656 "OSPF stub parameters\n"
1657 "OSPF area ID in IP address format\n"
1658 "OSPF area ID as a decimal value\n"
1659 "Configure OSPF area as stub\n"
1660 "Do not inject inter-area routes into stub\n")
1662 struct ospf
*ospf
= vty
->index
;
1663 struct in_addr area_id
;
1669 VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id
, format
, argv
[0]);
1671 ret
= ospf_area_stub_set (ospf
, area_id
);
1674 vty_out (vty
, "%% Area cannot be stub as it contains a virtual link%s",
1679 ospf_area_no_summary_set (ospf
, area_id
);
1684 DEFUN (no_ospf_area_stub
,
1685 no_ospf_area_stub_cmd
,
1686 "no area (A.B.C.D|<0-4294967295>) stub",
1688 "OSPF area parameters\n"
1689 "OSPF area ID in IP address format\n"
1690 "OSPF area ID as a decimal value\n"
1691 "Configure OSPF area as stub\n")
1693 struct ospf
*ospf
= vty
->index
;
1694 struct in_addr area_id
;
1700 VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id
, format
, argv
[0]);
1702 ospf_area_stub_unset (ospf
, area_id
);
1703 ospf_area_no_summary_unset (ospf
, area_id
);
1708 DEFUN (no_ospf_area_stub_no_summary
,
1709 no_ospf_area_stub_no_summary_cmd
,
1710 "no area (A.B.C.D|<0-4294967295>) stub no-summary",
1712 "OSPF area parameters\n"
1713 "OSPF area ID in IP address format\n"
1714 "OSPF area ID as a decimal value\n"
1715 "Configure OSPF area as stub\n"
1716 "Do not inject inter-area routes into area\n")
1718 struct ospf
*ospf
= vty
->index
;
1719 struct in_addr area_id
;
1725 VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id
, format
, argv
[0]);
1726 ospf_area_no_summary_unset (ospf
, area_id
);
1732 ospf_area_nssa_cmd_handler (struct vty
*vty
, int argc
, const char *argv
[],
1735 struct ospf
*ospf
= vty
->index
;
1736 struct in_addr area_id
;
1742 VTY_GET_OSPF_AREA_ID_NO_BB ("NSSA", area_id
, format
, argv
[0]);
1744 ret
= ospf_area_nssa_set (ospf
, area_id
);
1747 vty_out (vty
, "%% Area cannot be nssa as it contains a virtual link%s",
1754 if (strncmp (argv
[1], "translate-c", 11) == 0)
1755 ospf_area_nssa_translator_role_set (ospf
, area_id
,
1756 OSPF_NSSA_ROLE_CANDIDATE
);
1757 else if (strncmp (argv
[1], "translate-n", 11) == 0)
1758 ospf_area_nssa_translator_role_set (ospf
, area_id
,
1759 OSPF_NSSA_ROLE_NEVER
);
1760 else if (strncmp (argv
[1], "translate-a", 11) == 0)
1761 ospf_area_nssa_translator_role_set (ospf
, area_id
,
1762 OSPF_NSSA_ROLE_ALWAYS
);
1766 ospf_area_nssa_translator_role_set (ospf
, area_id
,
1767 OSPF_NSSA_ROLE_CANDIDATE
);
1771 ospf_area_no_summary_set (ospf
, area_id
);
1773 ospf_area_no_summary_unset (ospf
, area_id
);
1775 ospf_schedule_abr_task (ospf
);
1780 DEFUN (ospf_area_nssa_translate_no_summary
,
1781 ospf_area_nssa_translate_no_summary_cmd
,
1782 "area (A.B.C.D|<0-4294967295>) nssa (translate-candidate|translate-never|translate-always) no-summary",
1783 "OSPF area parameters\n"
1784 "OSPF area ID in IP address format\n"
1785 "OSPF area ID as a decimal value\n"
1786 "Configure OSPF area as nssa\n"
1787 "Configure NSSA-ABR for translate election (default)\n"
1788 "Configure NSSA-ABR to never translate\n"
1789 "Configure NSSA-ABR to always translate\n"
1790 "Do not inject inter-area routes into nssa\n")
1792 return ospf_area_nssa_cmd_handler (vty
, argc
, argv
, 1);
1795 DEFUN (ospf_area_nssa_translate
,
1796 ospf_area_nssa_translate_cmd
,
1797 "area (A.B.C.D|<0-4294967295>) nssa (translate-candidate|translate-never|translate-always)",
1798 "OSPF area parameters\n"
1799 "OSPF area ID in IP address format\n"
1800 "OSPF area ID as a decimal value\n"
1801 "Configure OSPF area as nssa\n"
1802 "Configure NSSA-ABR for translate election (default)\n"
1803 "Configure NSSA-ABR to never translate\n"
1804 "Configure NSSA-ABR to always translate\n")
1806 return ospf_area_nssa_cmd_handler (vty
, argc
, argv
, 0);
1809 DEFUN (ospf_area_nssa
,
1811 "area (A.B.C.D|<0-4294967295>) nssa",
1812 "OSPF area parameters\n"
1813 "OSPF area ID in IP address format\n"
1814 "OSPF area ID as a decimal value\n"
1815 "Configure OSPF area as nssa\n")
1817 return ospf_area_nssa_cmd_handler (vty
, argc
, argv
, 0);
1820 DEFUN (ospf_area_nssa_no_summary
,
1821 ospf_area_nssa_no_summary_cmd
,
1822 "area (A.B.C.D|<0-4294967295>) nssa no-summary",
1823 "OSPF area parameters\n"
1824 "OSPF area ID in IP address format\n"
1825 "OSPF area ID as a decimal value\n"
1826 "Configure OSPF area as nssa\n"
1827 "Do not inject inter-area routes into nssa\n")
1829 return ospf_area_nssa_cmd_handler (vty
, argc
, argv
, 1);
1832 DEFUN (no_ospf_area_nssa
,
1833 no_ospf_area_nssa_cmd
,
1834 "no area (A.B.C.D|<0-4294967295>) nssa",
1836 "OSPF area parameters\n"
1837 "OSPF area ID in IP address format\n"
1838 "OSPF area ID as a decimal value\n"
1839 "Configure OSPF area as nssa\n")
1841 struct ospf
*ospf
= vty
->index
;
1842 struct in_addr area_id
;
1848 VTY_GET_OSPF_AREA_ID_NO_BB ("NSSA", area_id
, format
, argv
[0]);
1850 ospf_area_nssa_unset (ospf
, area_id
);
1851 ospf_area_no_summary_unset (ospf
, area_id
);
1853 ospf_schedule_abr_task (ospf
);
1858 ALIAS (no_ospf_area_nssa
,
1859 no_ospf_area_nssa_no_summary_cmd
,
1860 "no area (A.B.C.D|<0-4294967295>) nssa (translate-candidate|translate-never|translate-always|) {no-summary}",
1862 "OSPF area parameters\n"
1863 "OSPF area ID in IP address format\n"
1864 "OSPF area ID as a decimal value\n"
1865 "Configure OSPF area as nssa\n"
1866 "Configure NSSA-ABR for translate election (default)\n"
1867 "Configure NSSA-ABR to never translate\n"
1868 "Configure NSSA-ABR to always translate\n"
1869 "Do not inject inter-area routes into nssa\n")
1871 DEFUN (ospf_area_default_cost
,
1872 ospf_area_default_cost_cmd
,
1873 "area (A.B.C.D|<0-4294967295>) default-cost <0-16777215>",
1874 "OSPF area parameters\n"
1875 "OSPF area ID in IP address format\n"
1876 "OSPF area ID as a decimal value\n"
1877 "Set the summary-default cost of a NSSA or stub area\n"
1878 "Stub's advertised default summary cost\n")
1880 struct ospf
*ospf
= vty
->index
;
1881 struct ospf_area
*area
;
1882 struct in_addr area_id
;
1885 struct prefix_ipv4 p
;
1890 VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id
, format
, argv
[0]);
1891 VTY_GET_INTEGER_RANGE ("stub default cost", cost
, argv
[1], 0, 16777215);
1893 area
= ospf_area_get (ospf
, area_id
, format
);
1895 if (area
->external_routing
== OSPF_AREA_DEFAULT
)
1897 vty_out (vty
, "The area is neither stub, nor NSSA%s", VTY_NEWLINE
);
1901 area
->default_cost
= cost
;
1904 p
.prefix
.s_addr
= OSPF_DEFAULT_DESTINATION
;
1906 if (IS_DEBUG_OSPF_EVENT
)
1907 zlog_debug ("ospf_abr_announce_stub_defaults(): "
1908 "announcing 0.0.0.0/0 to area %s",
1909 inet_ntoa (area
->area_id
));
1910 ospf_abr_announce_network_to_area (&p
, area
->default_cost
, area
);
1915 DEFUN (no_ospf_area_default_cost
,
1916 no_ospf_area_default_cost_cmd
,
1917 "no area (A.B.C.D|<0-4294967295>) default-cost <0-16777215>",
1919 "OSPF area parameters\n"
1920 "OSPF area ID in IP address format\n"
1921 "OSPF area ID as a decimal value\n"
1922 "Set the summary-default cost of a NSSA or stub area\n"
1923 "Stub's advertised default summary cost\n")
1925 struct ospf
*ospf
= vty
->index
;
1926 struct ospf_area
*area
;
1927 struct in_addr area_id
;
1929 struct prefix_ipv4 p
;
1934 VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id
, format
, argv
[0]);
1935 VTY_CHECK_INTEGER_RANGE ("stub default cost", argv
[1], 0, OSPF_LS_INFINITY
);
1937 area
= ospf_area_lookup_by_area_id (ospf
, area_id
);
1941 if (area
->external_routing
== OSPF_AREA_DEFAULT
)
1943 vty_out (vty
, "The area is neither stub, nor NSSA%s", VTY_NEWLINE
);
1947 area
->default_cost
= 1;
1950 p
.prefix
.s_addr
= OSPF_DEFAULT_DESTINATION
;
1952 if (IS_DEBUG_OSPF_EVENT
)
1953 zlog_debug ("ospf_abr_announce_stub_defaults(): "
1954 "announcing 0.0.0.0/0 to area %s",
1955 inet_ntoa (area
->area_id
));
1956 ospf_abr_announce_network_to_area (&p
, area
->default_cost
, area
);
1959 ospf_area_check_free (ospf
, area_id
);
1964 DEFUN (ospf_area_export_list
,
1965 ospf_area_export_list_cmd
,
1966 "area (A.B.C.D|<0-4294967295>) export-list NAME",
1967 "OSPF area parameters\n"
1968 "OSPF area ID in IP address format\n"
1969 "OSPF area ID as a decimal value\n"
1970 "Set the filter for networks announced to other areas\n"
1971 "Name of the access-list\n")
1973 struct ospf
*ospf
= vty
->index
;
1974 struct ospf_area
*area
;
1975 struct in_addr area_id
;
1981 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
1983 area
= ospf_area_get (ospf
, area_id
, format
);
1984 ospf_area_export_list_set (ospf
, area
, argv
[1]);
1989 DEFUN (no_ospf_area_export_list
,
1990 no_ospf_area_export_list_cmd
,
1991 "no area (A.B.C.D|<0-4294967295>) export-list NAME",
1993 "OSPF area parameters\n"
1994 "OSPF area ID in IP address format\n"
1995 "OSPF area ID as a decimal value\n"
1996 "Unset the filter for networks announced to other areas\n"
1997 "Name of the access-list\n")
1999 struct ospf
*ospf
= vty
->index
;
2000 struct ospf_area
*area
;
2001 struct in_addr area_id
;
2007 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
2009 area
= ospf_area_lookup_by_area_id (ospf
, area_id
);
2013 ospf_area_export_list_unset (ospf
, area
);
2019 DEFUN (ospf_area_import_list
,
2020 ospf_area_import_list_cmd
,
2021 "area (A.B.C.D|<0-4294967295>) import-list NAME",
2022 "OSPF area parameters\n"
2023 "OSPF area ID in IP address format\n"
2024 "OSPF area ID as a decimal value\n"
2025 "Set the filter for networks from other areas announced to the specified one\n"
2026 "Name of the access-list\n")
2028 struct ospf
*ospf
= vty
->index
;
2029 struct ospf_area
*area
;
2030 struct in_addr area_id
;
2036 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
2038 area
= ospf_area_get (ospf
, area_id
, format
);
2039 ospf_area_import_list_set (ospf
, area
, argv
[1]);
2044 DEFUN (no_ospf_area_import_list
,
2045 no_ospf_area_import_list_cmd
,
2046 "no area (A.B.C.D|<0-4294967295>) import-list NAME",
2048 "OSPF area parameters\n"
2049 "OSPF area ID in IP address format\n"
2050 "OSPF area ID as a decimal value\n"
2051 "Unset the filter for networks announced to other areas\n"
2052 "Name of the access-list\n")
2054 struct ospf
*ospf
= vty
->index
;
2055 struct ospf_area
*area
;
2056 struct in_addr area_id
;
2062 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
2064 area
= ospf_area_lookup_by_area_id (ospf
, area_id
);
2068 ospf_area_import_list_unset (ospf
, area
);
2073 DEFUN (ospf_area_filter_list
,
2074 ospf_area_filter_list_cmd
,
2075 "area (A.B.C.D|<0-4294967295>) filter-list prefix WORD (in|out)",
2076 "OSPF area parameters\n"
2077 "OSPF area ID in IP address format\n"
2078 "OSPF area ID as a decimal value\n"
2079 "Filter networks between OSPF areas\n"
2080 "Filter prefixes between OSPF areas\n"
2081 "Name of an IP prefix-list\n"
2082 "Filter networks sent to this area\n"
2083 "Filter networks sent from this area\n")
2085 struct ospf
*ospf
= vty
->index
;
2086 struct ospf_area
*area
;
2087 struct in_addr area_id
;
2088 struct prefix_list
*plist
;
2094 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
2096 area
= ospf_area_get (ospf
, area_id
, format
);
2097 plist
= prefix_list_lookup (AFI_IP
, argv
[1]);
2098 if (strncmp (argv
[2], "in", 2) == 0)
2100 PREFIX_LIST_IN (area
) = plist
;
2101 if (PREFIX_NAME_IN (area
))
2102 free (PREFIX_NAME_IN (area
));
2104 PREFIX_NAME_IN (area
) = strdup (argv
[1]);
2105 ospf_schedule_abr_task (ospf
);
2109 PREFIX_LIST_OUT (area
) = plist
;
2110 if (PREFIX_NAME_OUT (area
))
2111 free (PREFIX_NAME_OUT (area
));
2113 PREFIX_NAME_OUT (area
) = strdup (argv
[1]);
2114 ospf_schedule_abr_task (ospf
);
2120 DEFUN (no_ospf_area_filter_list
,
2121 no_ospf_area_filter_list_cmd
,
2122 "no area (A.B.C.D|<0-4294967295>) filter-list prefix WORD (in|out)",
2124 "OSPF area parameters\n"
2125 "OSPF area ID in IP address format\n"
2126 "OSPF area ID as a decimal value\n"
2127 "Filter networks between OSPF areas\n"
2128 "Filter prefixes between OSPF areas\n"
2129 "Name of an IP prefix-list\n"
2130 "Filter networks sent to this area\n"
2131 "Filter networks sent from this area\n")
2133 struct ospf
*ospf
= vty
->index
;
2134 struct ospf_area
*area
;
2135 struct in_addr area_id
;
2141 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
2143 if ((area
= ospf_area_lookup_by_area_id (ospf
, area_id
)) == NULL
)
2146 if (strncmp (argv
[2], "in", 2) == 0)
2148 if (PREFIX_NAME_IN (area
))
2149 if (strcmp (PREFIX_NAME_IN (area
), argv
[1]) != 0)
2152 PREFIX_LIST_IN (area
) = NULL
;
2153 if (PREFIX_NAME_IN (area
))
2154 free (PREFIX_NAME_IN (area
));
2156 PREFIX_NAME_IN (area
) = NULL
;
2158 ospf_schedule_abr_task (ospf
);
2162 if (PREFIX_NAME_OUT (area
))
2163 if (strcmp (PREFIX_NAME_OUT (area
), argv
[1]) != 0)
2166 PREFIX_LIST_OUT (area
) = NULL
;
2167 if (PREFIX_NAME_OUT (area
))
2168 free (PREFIX_NAME_OUT (area
));
2170 PREFIX_NAME_OUT (area
) = NULL
;
2172 ospf_schedule_abr_task (ospf
);
2179 DEFUN (ospf_area_authentication_message_digest
,
2180 ospf_area_authentication_message_digest_cmd
,
2181 "area (A.B.C.D|<0-4294967295>) authentication message-digest",
2182 "OSPF area parameters\n"
2183 "OSPF area ID in IP address format\n"
2184 "OSPF area ID as a decimal value\n"
2185 "Enable authentication\n"
2186 "Use message-digest authentication\n")
2188 struct ospf
*ospf
= vty
->index
;
2189 struct ospf_area
*area
;
2190 struct in_addr area_id
;
2196 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
2198 area
= ospf_area_get (ospf
, area_id
, format
);
2199 area
->auth_type
= OSPF_AUTH_CRYPTOGRAPHIC
;
2204 DEFUN (ospf_area_authentication
,
2205 ospf_area_authentication_cmd
,
2206 "area (A.B.C.D|<0-4294967295>) authentication",
2207 "OSPF area parameters\n"
2208 "OSPF area ID in IP address format\n"
2209 "OSPF area ID as a decimal value\n"
2210 "Enable authentication\n")
2212 struct ospf
*ospf
= vty
->index
;
2213 struct ospf_area
*area
;
2214 struct in_addr area_id
;
2220 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
2222 area
= ospf_area_get (ospf
, area_id
, format
);
2223 area
->auth_type
= OSPF_AUTH_SIMPLE
;
2228 DEFUN (no_ospf_area_authentication
,
2229 no_ospf_area_authentication_cmd
,
2230 "no area (A.B.C.D|<0-4294967295>) authentication",
2232 "OSPF area parameters\n"
2233 "OSPF area ID in IP address format\n"
2234 "OSPF area ID as a decimal value\n"
2235 "Enable authentication\n")
2237 struct ospf
*ospf
= vty
->index
;
2238 struct ospf_area
*area
;
2239 struct in_addr area_id
;
2245 VTY_GET_OSPF_AREA_ID (area_id
, format
, argv
[0]);
2247 area
= ospf_area_lookup_by_area_id (ospf
, area_id
);
2251 area
->auth_type
= OSPF_AUTH_NULL
;
2253 ospf_area_check_free (ospf
, area_id
);
2259 DEFUN (ospf_abr_type
,
2261 "ospf abr-type (cisco|ibm|shortcut|standard)",
2262 "OSPF specific commands\n"
2263 "Set OSPF ABR type\n"
2264 "Alternative ABR, cisco implementation\n"
2265 "Alternative ABR, IBM implementation\n"
2267 "Standard behavior (RFC2328)\n")
2269 struct ospf
*ospf
= vty
->index
;
2270 u_char abr_type
= OSPF_ABR_UNKNOWN
;
2275 if (strncmp (argv
[0], "c", 1) == 0)
2276 abr_type
= OSPF_ABR_CISCO
;
2277 else if (strncmp (argv
[0], "i", 1) == 0)
2278 abr_type
= OSPF_ABR_IBM
;
2279 else if (strncmp (argv
[0], "sh", 2) == 0)
2280 abr_type
= OSPF_ABR_SHORTCUT
;
2281 else if (strncmp (argv
[0], "st", 2) == 0)
2282 abr_type
= OSPF_ABR_STAND
;
2286 /* If ABR type value is changed, schedule ABR task. */
2287 if (ospf
->abr_type
!= abr_type
)
2289 ospf
->abr_type
= abr_type
;
2290 ospf_schedule_abr_task (ospf
);
2296 DEFUN (no_ospf_abr_type
,
2297 no_ospf_abr_type_cmd
,
2298 "no ospf abr-type (cisco|ibm|shortcut|standard)",
2300 "OSPF specific commands\n"
2301 "Set OSPF ABR type\n"
2302 "Alternative ABR, cisco implementation\n"
2303 "Alternative ABR, IBM implementation\n"
2306 struct ospf
*ospf
= vty
->index
;
2307 u_char abr_type
= OSPF_ABR_UNKNOWN
;
2312 if (strncmp (argv
[0], "c", 1) == 0)
2313 abr_type
= OSPF_ABR_CISCO
;
2314 else if (strncmp (argv
[0], "i", 1) == 0)
2315 abr_type
= OSPF_ABR_IBM
;
2316 else if (strncmp (argv
[0], "sh", 2) == 0)
2317 abr_type
= OSPF_ABR_SHORTCUT
;
2318 else if (strncmp (argv
[0], "st", 2) == 0)
2319 abr_type
= OSPF_ABR_STAND
;
2323 /* If ABR type value is changed, schedule ABR task. */
2324 if (ospf
->abr_type
== abr_type
)
2326 ospf
->abr_type
= OSPF_ABR_DEFAULT
;
2327 ospf_schedule_abr_task (ospf
);
2333 DEFUN (ospf_log_adjacency_changes
,
2334 ospf_log_adjacency_changes_cmd
,
2335 "log-adjacency-changes",
2336 "Log changes in adjacency state\n")
2338 struct ospf
*ospf
= vty
->index
;
2343 SET_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_CHANGES
);
2344 UNSET_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_DETAIL
);
2348 DEFUN (ospf_log_adjacency_changes_detail
,
2349 ospf_log_adjacency_changes_detail_cmd
,
2350 "log-adjacency-changes detail",
2351 "Log changes in adjacency state\n"
2352 "Log all state changes\n")
2354 struct ospf
*ospf
= vty
->index
;
2359 SET_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_CHANGES
);
2360 SET_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_DETAIL
);
2364 DEFUN (no_ospf_log_adjacency_changes
,
2365 no_ospf_log_adjacency_changes_cmd
,
2366 "no log-adjacency-changes",
2368 "Log changes in adjacency state\n")
2370 struct ospf
*ospf
= vty
->index
;
2375 UNSET_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_DETAIL
);
2376 UNSET_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_CHANGES
);
2380 DEFUN (no_ospf_log_adjacency_changes_detail
,
2381 no_ospf_log_adjacency_changes_detail_cmd
,
2382 "no log-adjacency-changes detail",
2384 "Log changes in adjacency state\n"
2385 "Log all state changes\n")
2387 struct ospf
*ospf
= vty
->index
;
2392 UNSET_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_CHANGES
);
2393 UNSET_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_DETAIL
);
2397 DEFUN (ospf_compatible_rfc1583
,
2398 ospf_compatible_rfc1583_cmd
,
2399 "compatible rfc1583",
2400 "OSPF compatibility list\n"
2401 "compatible with RFC 1583\n")
2403 struct ospf
*ospf
= vty
->index
;
2408 if (!CHECK_FLAG (ospf
->config
, OSPF_RFC1583_COMPATIBLE
))
2410 SET_FLAG (ospf
->config
, OSPF_RFC1583_COMPATIBLE
);
2411 ospf_spf_calculate_schedule (ospf
, SPF_FLAG_CONFIG_CHANGE
);
2416 DEFUN (no_ospf_compatible_rfc1583
,
2417 no_ospf_compatible_rfc1583_cmd
,
2418 "no compatible rfc1583",
2420 "OSPF compatibility list\n"
2421 "compatible with RFC 1583\n")
2423 struct ospf
*ospf
= vty
->index
;
2428 if (CHECK_FLAG (ospf
->config
, OSPF_RFC1583_COMPATIBLE
))
2430 UNSET_FLAG (ospf
->config
, OSPF_RFC1583_COMPATIBLE
);
2431 ospf_spf_calculate_schedule (ospf
, SPF_FLAG_CONFIG_CHANGE
);
2436 ALIAS (ospf_compatible_rfc1583
,
2437 ospf_rfc1583_flag_cmd
,
2438 "ospf rfc1583compatibility",
2439 "OSPF specific commands\n"
2440 "Enable the RFC1583Compatibility flag\n")
2442 ALIAS (no_ospf_compatible_rfc1583
,
2443 no_ospf_rfc1583_flag_cmd
,
2444 "no ospf rfc1583compatibility",
2446 "OSPF specific commands\n"
2447 "Disable the RFC1583Compatibility flag\n")
2450 ospf_timers_spf_set (struct vty
*vty
, unsigned int delay
,
2454 struct ospf
*ospf
= vty
->index
;
2459 ospf
->spf_delay
= delay
;
2460 ospf
->spf_holdtime
= hold
;
2461 ospf
->spf_max_holdtime
= max
;
2466 DEFUN (ospf_timers_min_ls_interval
,
2467 ospf_timers_min_ls_interval_cmd
,
2468 "timers throttle lsa all <0-5000>",
2469 "Adjust routing timers\n"
2470 "Throttling adaptive timer\n"
2471 "LSA delay between transmissions\n"
2473 "Delay (msec) between sending LSAs\n")
2475 struct ospf
*ospf
= vty
->index
;
2476 unsigned int interval
;
2483 vty_out (vty
, "Insufficient arguments%s", VTY_NEWLINE
);
2487 VTY_GET_INTEGER ("LSA interval", interval
, argv
[0]);
2489 ospf
->min_ls_interval
= interval
;
2494 DEFUN (no_ospf_timers_min_ls_interval
,
2495 no_ospf_timers_min_ls_interval_cmd
,
2496 "no timers throttle lsa all",
2498 "Adjust routing timers\n"
2499 "Throttling adaptive timer\n"
2500 "LSA delay between transmissions\n"
2503 struct ospf
*ospf
= vty
->index
;
2504 ospf
->min_ls_interval
= OSPF_MIN_LS_INTERVAL
;
2509 ALIAS (no_ospf_timers_min_ls_interval
,
2510 no_ospf_timers_min_ls_interval_val_cmd
,
2511 "no timers throttle lsa all <0-5000>",
2513 "Adjust routing timers\n"
2514 "Throttling adaptive timer\n"
2515 "LSA delay between transmissions\n"
2517 "Delay (msec) between sending LSAs\n")
2519 DEFUN (ospf_timers_min_ls_arrival
,
2520 ospf_timers_min_ls_arrival_cmd
,
2521 "timers lsa arrival <0-1000>",
2522 "Adjust routing timers\n"
2523 "Throttling link state advertisement delays\n"
2524 "OSPF minimum arrival interval delay\n"
2525 "Delay (msec) between accepted LSAs\n")
2527 struct ospf
*ospf
= vty
->index
;
2528 unsigned int arrival
;
2535 vty_out (vty
, "Insufficient arguments%s", VTY_NEWLINE
);
2539 VTY_GET_INTEGER_RANGE ("minimum LSA inter-arrival time", arrival
, argv
[0], 0, 1000);
2541 ospf
->min_ls_arrival
= arrival
;
2546 DEFUN (no_ospf_timers_min_ls_arrival
,
2547 no_ospf_timers_min_ls_arrival_cmd
,
2548 "no timers lsa arrival",
2550 "Adjust routing timers\n"
2551 "Throttling link state advertisement delays\n"
2552 "OSPF minimum arrival interval delay\n")
2554 struct ospf
*ospf
= vty
->index
;
2559 ospf
->min_ls_arrival
= OSPF_MIN_LS_ARRIVAL
;
2564 ALIAS (no_ospf_timers_min_ls_arrival
,
2565 no_ospf_timers_min_ls_arrival_val_cmd
,
2566 "no timers lsa arrival <0-1000>",
2568 "Adjust routing timers\n"
2569 "Throttling link state advertisement delays\n"
2570 "OSPF minimum arrival interval delay\n"
2571 "Delay (msec) between accepted LSAs\n")
2573 DEFUN (ospf_timers_throttle_spf
,
2574 ospf_timers_throttle_spf_cmd
,
2575 "timers throttle spf <0-600000> <0-600000> <0-600000>",
2576 "Adjust routing timers\n"
2577 "Throttling adaptive timer\n"
2579 "Delay (msec) from first change received till SPF calculation\n"
2580 "Initial hold time (msec) between consecutive SPF calculations\n"
2581 "Maximum hold time (msec)\n")
2583 unsigned int delay
, hold
, max
;
2587 vty_out (vty
, "Insufficient arguments%s", VTY_NEWLINE
);
2591 VTY_GET_INTEGER_RANGE ("SPF delay timer", delay
, argv
[0], 0, 600000);
2592 VTY_GET_INTEGER_RANGE ("SPF hold timer", hold
, argv
[1], 0, 600000);
2593 VTY_GET_INTEGER_RANGE ("SPF max-hold timer", max
, argv
[2], 0, 600000);
2595 return ospf_timers_spf_set (vty
, delay
, hold
, max
);
2598 DEFUN (no_ospf_timers_throttle_spf
,
2599 no_ospf_timers_throttle_spf_cmd
,
2600 "no timers throttle spf",
2602 "Adjust routing timers\n"
2603 "Throttling adaptive timer\n"
2604 "OSPF SPF timers\n")
2606 return ospf_timers_spf_set (vty
,
2607 OSPF_SPF_DELAY_DEFAULT
,
2608 OSPF_SPF_HOLDTIME_DEFAULT
,
2609 OSPF_SPF_MAX_HOLDTIME_DEFAULT
);
2612 ALIAS (no_ospf_timers_throttle_spf
,
2613 no_ospf_timers_throttle_spf_val_cmd
,
2614 "no timers throttle spf <0-600000> <0-600000> <0-600000>",
2616 "Adjust routing timers\n"
2617 "Throttling adaptive timer\n"
2619 "Delay (msec) from first change received till SPF calculation\n"
2620 "Initial hold time (msec) between consecutive SPF calculations\n"
2621 "Maximum hold time (msec)\n")
2623 DEFUN (ospf_timers_lsa
,
2624 ospf_timers_lsa_cmd
,
2625 "timers lsa min-arrival <0-600000>",
2626 "Adjust routing timers\n"
2628 "Minimum delay in receiving new version of a LSA\n"
2629 "Delay in milliseconds\n")
2631 unsigned int minarrival
;
2632 struct ospf
*ospf
= vty
->index
;
2639 vty_out (vty
, "Insufficient number of arguments%s", VTY_NEWLINE
);
2643 VTY_GET_INTEGER ("LSA min-arrival", minarrival
, argv
[0]);
2645 ospf
->min_ls_arrival
= minarrival
;
2650 DEFUN (no_ospf_timers_lsa
,
2651 no_ospf_timers_lsa_cmd
,
2652 "no timers lsa min-arrival",
2654 "Adjust routing timers\n"
2656 "Minimum delay in receiving new version of a LSA\n")
2658 unsigned int minarrival
;
2659 struct ospf
*ospf
= vty
->index
;
2666 VTY_GET_INTEGER ("LSA min-arrival", minarrival
, argv
[0]);
2668 if (ospf
->min_ls_arrival
!= minarrival
||
2669 minarrival
== OSPF_MIN_LS_ARRIVAL
)
2673 ospf
->min_ls_arrival
= OSPF_MIN_LS_ARRIVAL
;
2678 ALIAS (no_ospf_timers_lsa
,
2679 no_ospf_timers_lsa_val_cmd
,
2680 "no timers lsa min-arrival <0-600000>",
2682 "Adjust routing timers\n"
2684 "Minimum delay in receiving new version of a LSA\n"
2685 "Delay in milliseconds\n")
2688 DEFUN (ospf_neighbor
,
2692 "Neighbor IP address\n")
2694 struct ospf
*ospf
= vty
->index
;
2695 struct in_addr nbr_addr
;
2696 unsigned int priority
= OSPF_NEIGHBOR_PRIORITY_DEFAULT
;
2697 unsigned int interval
= OSPF_POLL_INTERVAL_DEFAULT
;
2702 VTY_GET_IPV4_ADDRESS ("neighbor address", nbr_addr
, argv
[0]);
2705 VTY_GET_INTEGER_RANGE ("neighbor priority", priority
, argv
[1], 0, 255);
2708 VTY_GET_INTEGER_RANGE ("poll interval", interval
, argv
[2], 1, 65535);
2710 ospf_nbr_nbma_set (ospf
, nbr_addr
);
2712 ospf_nbr_nbma_priority_set (ospf
, nbr_addr
, priority
);
2714 ospf_nbr_nbma_poll_interval_set (ospf
, nbr_addr
, interval
);
2719 ALIAS (ospf_neighbor
,
2720 ospf_neighbor_priority_poll_interval_cmd
,
2721 "neighbor A.B.C.D priority <0-255> poll-interval <1-65535>",
2723 "Neighbor IP address\n"
2724 "Neighbor Priority\n"
2726 "Dead Neighbor Polling interval\n"
2729 ALIAS (ospf_neighbor
,
2730 ospf_neighbor_priority_cmd
,
2731 "neighbor A.B.C.D priority <0-255>",
2733 "Neighbor IP address\n"
2734 "Neighbor Priority\n"
2737 DEFUN (ospf_neighbor_poll_interval
,
2738 ospf_neighbor_poll_interval_cmd
,
2739 "neighbor A.B.C.D poll-interval <1-65535>",
2741 "Neighbor IP address\n"
2742 "Dead Neighbor Polling interval\n"
2745 struct ospf
*ospf
= vty
->index
;
2746 struct in_addr nbr_addr
;
2747 unsigned int priority
= OSPF_NEIGHBOR_PRIORITY_DEFAULT
;
2748 unsigned int interval
= OSPF_POLL_INTERVAL_DEFAULT
;
2753 VTY_GET_IPV4_ADDRESS ("neighbor address", nbr_addr
, argv
[0]);
2756 VTY_GET_INTEGER_RANGE ("poll interval", interval
, argv
[1], 1, 65535);
2759 VTY_GET_INTEGER_RANGE ("neighbor priority", priority
, argv
[2], 0, 255);
2761 ospf_nbr_nbma_set (ospf
, nbr_addr
);
2763 ospf_nbr_nbma_poll_interval_set (ospf
, nbr_addr
, interval
);
2765 ospf_nbr_nbma_priority_set (ospf
, nbr_addr
, priority
);
2770 ALIAS (ospf_neighbor_poll_interval
,
2771 ospf_neighbor_poll_interval_priority_cmd
,
2772 "neighbor A.B.C.D poll-interval <1-65535> priority <0-255>",
2774 "Neighbor address\n"
2775 "OSPF dead-router polling interval\n"
2777 "OSPF priority of non-broadcast neighbor\n"
2780 DEFUN (no_ospf_neighbor
,
2781 no_ospf_neighbor_cmd
,
2782 "no neighbor A.B.C.D",
2785 "Neighbor IP address\n")
2787 struct ospf
*ospf
= vty
->index
;
2788 struct in_addr nbr_addr
;
2793 VTY_GET_IPV4_ADDRESS ("neighbor address", nbr_addr
, argv
[0]);
2795 (void)ospf_nbr_nbma_unset (ospf
, nbr_addr
);
2800 ALIAS (no_ospf_neighbor
,
2801 no_ospf_neighbor_priority_cmd
,
2802 "no neighbor A.B.C.D priority <0-255>",
2805 "Neighbor IP address\n"
2806 "Neighbor Priority\n"
2809 ALIAS (no_ospf_neighbor
,
2810 no_ospf_neighbor_poll_interval_cmd
,
2811 "no neighbor A.B.C.D poll-interval <1-65535>",
2814 "Neighbor IP address\n"
2815 "Dead Neighbor Polling interval\n"
2818 ALIAS (no_ospf_neighbor
,
2819 no_ospf_neighbor_poll_interval_priority_cmd
,
2820 "no neighbor A.B.C.D poll-interval <1-65535> priority <0-255>",
2823 "Neighbor IP address\n"
2824 "Dead Neighbor Polling interval\n"
2826 "OSPF priority of non-broadcast neighbor\n"
2829 ALIAS (no_ospf_neighbor
,
2830 no_ospf_neighbor_priority_pollinterval_cmd
,
2831 "no neighbor A.B.C.D priority <0-255> poll-interval <1-65535>",
2834 "Neighbor IP address\n"
2835 "Neighbor Priority\n"
2837 "Dead Neighbor Polling interval\n"
2840 DEFUN (ospf_refresh_timer
, ospf_refresh_timer_cmd
,
2841 "refresh timer <10-1800>",
2842 "Adjust refresh parameters\n"
2843 "Set refresh timer\n"
2844 "Timer value in seconds\n")
2846 struct ospf
*ospf
= vty
->index
;
2847 unsigned int interval
;
2852 VTY_GET_INTEGER_RANGE ("refresh timer", interval
, argv
[0], 10, 1800);
2853 interval
= (interval
/ OSPF_LSA_REFRESHER_GRANULARITY
) * OSPF_LSA_REFRESHER_GRANULARITY
;
2855 ospf_timers_refresh_set (ospf
, interval
);
2860 DEFUN (no_ospf_refresh_timer
, no_ospf_refresh_timer_val_cmd
,
2861 "no refresh timer <10-1800>",
2862 "Adjust refresh parameters\n"
2863 "Unset refresh timer\n"
2864 "Timer value in seconds\n")
2866 struct ospf
*ospf
= vty
->index
;
2867 unsigned int interval
;
2874 VTY_GET_INTEGER_RANGE ("refresh timer", interval
, argv
[0], 10, 1800);
2876 if (ospf
->lsa_refresh_interval
!= interval
||
2877 interval
== OSPF_LSA_REFRESH_INTERVAL_DEFAULT
)
2881 ospf_timers_refresh_unset (ospf
);
2886 ALIAS (no_ospf_refresh_timer
,
2887 no_ospf_refresh_timer_cmd
,
2889 "Adjust refresh parameters\n"
2890 "Unset refresh timer\n")
2892 DEFUN (ospf_auto_cost_reference_bandwidth
,
2893 ospf_auto_cost_reference_bandwidth_cmd
,
2894 "auto-cost reference-bandwidth <1-4294967>",
2895 "Calculate OSPF interface cost according to bandwidth\n"
2896 "Use reference bandwidth method to assign OSPF cost\n"
2897 "The reference bandwidth in terms of Mbits per second\n")
2899 struct ospf
*ospf
= vty
->index
;
2901 struct listnode
*node
;
2902 struct interface
*ifp
;
2907 refbw
= strtol (argv
[0], NULL
, 10);
2908 if (refbw
< 1 || refbw
> 4294967)
2910 vty_out (vty
, "reference-bandwidth value is invalid%s", VTY_NEWLINE
);
2914 /* If reference bandwidth is changed. */
2915 if ((refbw
) == ospf
->ref_bandwidth
)
2918 ospf
->ref_bandwidth
= refbw
;
2919 for (ALL_LIST_ELEMENTS_RO (om
->iflist
, node
, ifp
))
2920 ospf_if_recalculate_output_cost (ifp
);
2925 DEFUN (no_ospf_auto_cost_reference_bandwidth
,
2926 no_ospf_auto_cost_reference_bandwidth_cmd
,
2927 "no auto-cost reference-bandwidth",
2929 "Calculate OSPF interface cost according to bandwidth\n"
2930 "Use reference bandwidth method to assign OSPF cost\n")
2932 struct ospf
*ospf
= vty
->index
;
2933 struct listnode
*node
, *nnode
;
2934 struct interface
*ifp
;
2939 if (ospf
->ref_bandwidth
== OSPF_DEFAULT_REF_BANDWIDTH
)
2942 ospf
->ref_bandwidth
= OSPF_DEFAULT_REF_BANDWIDTH
;
2943 vty_out (vty
, "%% OSPF: Reference bandwidth is changed.%s", VTY_NEWLINE
);
2944 vty_out (vty
, " Please ensure reference bandwidth is consistent across all routers%s", VTY_NEWLINE
);
2946 for (ALL_LIST_ELEMENTS (om
->iflist
, node
, nnode
, ifp
))
2947 ospf_if_recalculate_output_cost (ifp
);
2952 ALIAS (no_ospf_auto_cost_reference_bandwidth
,
2953 no_ospf_auto_cost_reference_bandwidth_val_cmd
,
2954 "no auto-cost reference-bandwidth <1-4294967>",
2956 "Calculate OSPF interface cost according to bandwidth\n"
2957 "Use reference bandwidth method to assign OSPF cost\n"
2958 "The reference bandwidth in terms of Mbits per second\n")
2960 DEFUN (ospf_write_multiplier
,
2961 ospf_write_multiplier_cmd
,
2962 "ospf write-multiplier <1-100>",
2963 "OSPF specific commands\n"
2964 "Write multiplier\n"
2965 "Maximum number of interface serviced per write\n")
2967 struct ospf
*ospf
= vty
->index
;
2968 u_int32_t write_oi_count
;
2973 write_oi_count
= strtol (argv
[0], NULL
, 10);
2974 if (write_oi_count
< 1 || write_oi_count
> 100)
2976 vty_out (vty
, "write-multiplier value is invalid%s", VTY_NEWLINE
);
2980 ospf
->write_oi_count
= write_oi_count
;
2984 ALIAS (ospf_write_multiplier
,
2985 write_multiplier_cmd
,
2986 "write-multiplier <1-100>",
2987 "Write multiplier\n"
2988 "Maximum number of interface serviced per write\n")
2990 DEFUN (no_ospf_write_multiplier
,
2991 no_ospf_write_multiplier_cmd
,
2992 "no ospf write-multiplier <1-100>",
2994 "OSPF specific commands\n"
2995 "Write multiplier\n"
2996 "Maximum number of interface serviced per write\n")
2998 struct ospf
*ospf
= vty
->index
;
3003 ospf
->write_oi_count
= OSPF_WRITE_INTERFACE_COUNT_DEFAULT
;
3007 ALIAS (no_ospf_write_multiplier
,
3008 no_write_multiplier_cmd
,
3009 "no write-multiplier",
3011 "Write multiplier\n")
3013 ALIAS (no_ospf_write_multiplier
,
3014 no_write_multiplier_val_cmd
,
3015 "no write-multiplier <1-100>",
3017 "Write multiplier\n"
3018 "Maximum number of interface serviced per write\n")
3020 const char *ospf_abr_type_descr_str
[] =
3023 "Standard (RFC2328)",
3025 "Alternative Cisco",
3026 "Alternative Shortcut"
3029 const char *ospf_shortcut_mode_descr_str
[] =
3037 show_ip_ospf_area (struct vty
*vty
, struct ospf_area
*area
, json_object
*json_areas
, u_char use_json
)
3039 json_object
*json_area
= NULL
;
3042 json_area
= json_object_new_object();
3046 vty_out (vty
, " Area ID: %s", inet_ntoa (area
->area_id
));
3048 /* Show Area type/mode. */
3049 if (OSPF_IS_AREA_BACKBONE (area
))
3052 json_object_boolean_true_add(json_area
, "backbone");
3054 vty_out (vty
, " (Backbone)%s", VTY_NEWLINE
);
3060 if (area
->external_routing
== OSPF_AREA_STUB
)
3062 if (area
->no_summary
)
3063 json_object_boolean_true_add(json_area
, "stubNoSummary");
3064 if (area
->shortcut_configured
)
3065 json_object_boolean_true_add(json_area
, "stubShortcut");
3067 else if (area
->external_routing
== OSPF_AREA_NSSA
)
3069 if (area
->no_summary
)
3070 json_object_boolean_true_add(json_area
, "nssaNoSummary");
3071 if (area
->shortcut_configured
)
3072 json_object_boolean_true_add(json_area
, "nssaShortcut");
3075 json_object_string_add(json_area
,"shortcuttingMode",
3076 ospf_shortcut_mode_descr_str
[area
->shortcut_configured
]);
3077 if (area
->shortcut_capability
)
3078 json_object_boolean_true_add(json_area
,"sBitConcensus");
3082 if (area
->external_routing
== OSPF_AREA_STUB
)
3083 vty_out (vty
, " (Stub%s%s)",
3084 area
->no_summary
? ", no summary" : "",
3085 area
->shortcut_configured
? "; " : "");
3086 else if (area
->external_routing
== OSPF_AREA_NSSA
)
3087 vty_out (vty
, " (NSSA%s%s)",
3088 area
->no_summary
? ", no summary" : "",
3089 area
->shortcut_configured
? "; " : "");
3091 vty_out (vty
, "%s", VTY_NEWLINE
);
3092 vty_out (vty
, " Shortcutting mode: %s",
3093 ospf_shortcut_mode_descr_str
[area
->shortcut_configured
]);
3094 vty_out (vty
, ", S-bit consensus: %s%s",
3095 area
->shortcut_capability
? "ok" : "no", VTY_NEWLINE
);
3099 /* Show number of interfaces */
3102 json_object_int_add(json_area
, "areaIfTotalCounter", listcount (area
->oiflist
));
3103 json_object_int_add(json_area
, "areaIfActiveCounter", area
->act_ints
);
3106 vty_out (vty
, " Number of interfaces in this area: Total: %d, "
3107 "Active: %d%s", listcount (area
->oiflist
),
3108 area
->act_ints
, VTY_NEWLINE
);
3110 if (area
->external_routing
== OSPF_AREA_NSSA
)
3114 json_object_boolean_true_add(json_area
, "nssa");
3115 if (! IS_OSPF_ABR (area
->ospf
))
3116 json_object_boolean_false_add(json_area
, "abr");
3117 else if (area
->NSSATranslatorState
)
3119 json_object_boolean_true_add(json_area
, "abr");
3120 if (area
->NSSATranslatorRole
== OSPF_NSSA_ROLE_CANDIDATE
)
3121 json_object_boolean_true_add(json_area
, "nssaTranslatorElected");
3122 else if (area
->NSSATranslatorRole
== OSPF_NSSA_ROLE_ALWAYS
)
3123 json_object_boolean_true_add(json_area
, "nssaTranslatorAlways");
3127 json_object_boolean_true_add(json_area
, "abr");
3128 if (area
->NSSATranslatorRole
== OSPF_NSSA_ROLE_CANDIDATE
)
3129 json_object_boolean_false_add(json_area
, "nssaTranslatorElected");
3131 json_object_boolean_true_add(json_area
, "nssaTranslatorNever");
3136 vty_out (vty
, " It is an NSSA configuration. %s Elected NSSA/ABR performs type-7/type-5 LSA translation. %s", VTY_NEWLINE
, VTY_NEWLINE
);
3137 if (! IS_OSPF_ABR (area
->ospf
))
3138 vty_out (vty
, " It is not ABR, therefore not Translator. %s",
3140 else if (area
->NSSATranslatorState
)
3142 vty_out (vty
, " We are an ABR and ");
3143 if (area
->NSSATranslatorRole
== OSPF_NSSA_ROLE_CANDIDATE
)
3144 vty_out (vty
, "the NSSA Elected Translator. %s",
3146 else if (area
->NSSATranslatorRole
== OSPF_NSSA_ROLE_ALWAYS
)
3147 vty_out (vty
, "always an NSSA Translator. %s",
3152 vty_out (vty
, " We are an ABR, but ");
3153 if (area
->NSSATranslatorRole
== OSPF_NSSA_ROLE_CANDIDATE
)
3154 vty_out (vty
, "not the NSSA Elected Translator. %s",
3157 vty_out (vty
, "never an NSSA Translator. %s",
3163 /* Stub-router state for this area */
3164 if (CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
))
3166 char timebuf
[OSPF_TIME_DUMP_SIZE
];
3170 json_object_boolean_true_add(json_area
, "originStubMaxDistRouterLsa");
3171 if (CHECK_FLAG(area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
))
3172 json_object_boolean_true_add(json_area
, "indefiniteActiveAdmin");
3173 if (area
->t_stub_router
)
3175 struct timeval result
;
3176 unsigned long time_store
= 0;
3177 result
= tv_sub (area
->t_stub_router
->u
.sands
, recent_relative_time());
3178 time_store
= (1000 * result
.tv_sec
) + (result
.tv_usec
/ 1000);
3179 json_object_int_add(json_area
, "activeStartupRemainderMsecs", time_store
);
3184 vty_out (vty
, " Originating stub / maximum-distance Router-LSA%s",
3186 if (CHECK_FLAG(area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
))
3187 vty_out (vty
, " Administratively activated (indefinitely)%s",
3189 if (area
->t_stub_router
)
3190 vty_out (vty
, " Active from startup, %s remaining%s",
3191 ospf_timer_dump (area
->t_stub_router
, timebuf
,
3192 sizeof(timebuf
)), VTY_NEWLINE
);
3198 /* Show number of fully adjacent neighbors. */
3199 json_object_int_add(json_area
, "nbrFullAdjacentCounter", area
->full_nbrs
);
3201 /* Show authentication type. */
3202 if (area
->auth_type
== OSPF_AUTH_NULL
)
3203 json_object_string_add(json_area
, "authentication", "authenticationNone");
3204 else if (area
->auth_type
== OSPF_AUTH_SIMPLE
)
3205 json_object_string_add(json_area
, "authentication", "authenticationSimplePassword");
3206 else if (area
->auth_type
== OSPF_AUTH_CRYPTOGRAPHIC
)
3207 json_object_string_add(json_area
, "authentication", "authenticationMessageDigest");
3209 if (!OSPF_IS_AREA_BACKBONE (area
))
3210 json_object_int_add(json_area
, "virtualAdjacenciesPassingCounter", area
->full_vls
);
3212 /* Show SPF calculation times. */
3213 json_object_int_add(json_area
, "spfExecutedCounter", area
->spf_calculation
);
3214 json_object_int_add(json_area
, "lsaNumber", area
->lsdb
->total
);
3215 json_object_int_add(json_area
, "lsaRouterNumber", ospf_lsdb_count (area
->lsdb
, OSPF_ROUTER_LSA
));
3216 json_object_int_add(json_area
, "lsaRouterChecksum", ospf_lsdb_checksum (area
->lsdb
, OSPF_ROUTER_LSA
));
3217 json_object_int_add(json_area
, "lsaNetworkNumber", ospf_lsdb_count (area
->lsdb
, OSPF_NETWORK_LSA
));
3218 json_object_int_add(json_area
, "lsaNetworkChecksum", ospf_lsdb_checksum (area
->lsdb
, OSPF_NETWORK_LSA
));
3219 json_object_int_add(json_area
, "lsaSummaryNumber", ospf_lsdb_count (area
->lsdb
, OSPF_SUMMARY_LSA
));
3220 json_object_int_add(json_area
, "lsaSummaryChecksum", ospf_lsdb_checksum (area
->lsdb
, OSPF_SUMMARY_LSA
));
3221 json_object_int_add(json_area
, "lsaAsbrNumber", ospf_lsdb_count (area
->lsdb
, OSPF_ASBR_SUMMARY_LSA
));
3222 json_object_int_add(json_area
, "lsaAsbrChecksum", ospf_lsdb_checksum (area
->lsdb
, OSPF_ASBR_SUMMARY_LSA
));
3223 json_object_int_add(json_area
, "lsaNssaNumber", ospf_lsdb_count (area
->lsdb
, OSPF_AS_NSSA_LSA
));
3224 json_object_int_add(json_area
, "lsaNssaChecksum", ospf_lsdb_checksum (area
->lsdb
, OSPF_AS_NSSA_LSA
));
3228 /* Show number of fully adjacent neighbors. */
3229 vty_out (vty
, " Number of fully adjacent neighbors in this area:"
3230 " %d%s", area
->full_nbrs
, VTY_NEWLINE
);
3232 /* Show authentication type. */
3233 vty_out (vty
, " Area has ");
3234 if (area
->auth_type
== OSPF_AUTH_NULL
)
3235 vty_out (vty
, "no authentication%s", VTY_NEWLINE
);
3236 else if (area
->auth_type
== OSPF_AUTH_SIMPLE
)
3237 vty_out (vty
, "simple password authentication%s", VTY_NEWLINE
);
3238 else if (area
->auth_type
== OSPF_AUTH_CRYPTOGRAPHIC
)
3239 vty_out (vty
, "message digest authentication%s", VTY_NEWLINE
);
3241 if (!OSPF_IS_AREA_BACKBONE (area
))
3242 vty_out (vty
, " Number of full virtual adjacencies going through"
3243 " this area: %d%s", area
->full_vls
, VTY_NEWLINE
);
3245 /* Show SPF calculation times. */
3246 vty_out (vty
, " SPF algorithm executed %d times%s",
3247 area
->spf_calculation
, VTY_NEWLINE
);
3249 /* Show number of LSA. */
3250 vty_out (vty
, " Number of LSA %ld%s", area
->lsdb
->total
, VTY_NEWLINE
);
3251 vty_out (vty
, " Number of router LSA %ld. Checksum Sum 0x%08x%s",
3252 ospf_lsdb_count (area
->lsdb
, OSPF_ROUTER_LSA
),
3253 ospf_lsdb_checksum (area
->lsdb
, OSPF_ROUTER_LSA
), VTY_NEWLINE
);
3254 vty_out (vty
, " Number of network LSA %ld. Checksum Sum 0x%08x%s",
3255 ospf_lsdb_count (area
->lsdb
, OSPF_NETWORK_LSA
),
3256 ospf_lsdb_checksum (area
->lsdb
, OSPF_NETWORK_LSA
), VTY_NEWLINE
);
3257 vty_out (vty
, " Number of summary LSA %ld. Checksum Sum 0x%08x%s",
3258 ospf_lsdb_count (area
->lsdb
, OSPF_SUMMARY_LSA
),
3259 ospf_lsdb_checksum (area
->lsdb
, OSPF_SUMMARY_LSA
), VTY_NEWLINE
);
3260 vty_out (vty
, " Number of ASBR summary LSA %ld. Checksum Sum 0x%08x%s",
3261 ospf_lsdb_count (area
->lsdb
, OSPF_ASBR_SUMMARY_LSA
),
3262 ospf_lsdb_checksum (area
->lsdb
, OSPF_ASBR_SUMMARY_LSA
), VTY_NEWLINE
);
3263 vty_out (vty
, " Number of NSSA LSA %ld. Checksum Sum 0x%08x%s",
3264 ospf_lsdb_count (area
->lsdb
, OSPF_AS_NSSA_LSA
),
3265 ospf_lsdb_checksum (area
->lsdb
, OSPF_AS_NSSA_LSA
), VTY_NEWLINE
);
3270 json_object_int_add(json_area
, "lsaOpaqueLinkNumber", ospf_lsdb_count (area
->lsdb
, OSPF_OPAQUE_LINK_LSA
));
3271 json_object_int_add(json_area
, "lsaOpaqueLinkChecksum", ospf_lsdb_checksum (area
->lsdb
, OSPF_OPAQUE_LINK_LSA
));
3272 json_object_int_add(json_area
, "lsaOpaqueAreaNumber", ospf_lsdb_count (area
->lsdb
, OSPF_OPAQUE_AREA_LSA
));
3273 json_object_int_add(json_area
, "lsaOpaqueAreaChecksum", ospf_lsdb_checksum (area
->lsdb
, OSPF_OPAQUE_AREA_LSA
));
3277 vty_out (vty
, " Number of opaque link LSA %ld. Checksum Sum 0x%08x%s",
3278 ospf_lsdb_count (area
->lsdb
, OSPF_OPAQUE_LINK_LSA
),
3279 ospf_lsdb_checksum (area
->lsdb
, OSPF_OPAQUE_LINK_LSA
), VTY_NEWLINE
);
3280 vty_out (vty
, " Number of opaque area LSA %ld. Checksum Sum 0x%08x%s",
3281 ospf_lsdb_count (area
->lsdb
, OSPF_OPAQUE_AREA_LSA
),
3282 ospf_lsdb_checksum (area
->lsdb
, OSPF_OPAQUE_AREA_LSA
), VTY_NEWLINE
);
3286 json_object_object_add(json_areas
, inet_ntoa (area
->area_id
), json_area
);
3288 vty_out (vty
, "%s", VTY_NEWLINE
);
3292 show_ip_ospf_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
3294 struct listnode
*node
, *nnode
;
3295 struct ospf_area
* area
;
3296 struct timeval result
;
3297 char timebuf
[OSPF_TIME_DUMP_SIZE
];
3298 json_object
*json
= NULL
;
3299 json_object
*json_areas
= NULL
;
3302 json
= json_object_new_object();
3303 json_areas
= json_object_new_object();
3309 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
3313 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
3314 VTY_NEWLINE
, VTY_NEWLINE
);
3318 /* Show Router ID. */
3321 json_object_string_add(json
, "routerId", inet_ntoa (ospf
->router_id
));
3325 vty_out (vty
, " OSPF Routing Process, Router ID: %s%s",
3326 inet_ntoa (ospf
->router_id
),
3330 /* Graceful shutdown */
3331 if (ospf
->t_deferred_shutdown
)
3335 unsigned long time_store
= 0;
3336 result
= tv_sub (ospf
->t_deferred_shutdown
->u
.sands
, recent_relative_time());
3337 time_store
= (1000 * result
.tv_sec
) + (result
.tv_usec
/ 1000);
3338 json_object_int_add(json
, "deferredShutdownMsecs", time_store
);
3342 vty_out (vty
, " Deferred shutdown in progress, %s remaining%s",
3343 ospf_timer_dump (ospf
->t_deferred_shutdown
,
3344 timebuf
, sizeof (timebuf
)), VTY_NEWLINE
);
3348 /* Show capability. */
3351 json_object_boolean_true_add(json
, "tosRoutesOnly");
3352 json_object_boolean_true_add(json
, "rfc2328Conform");
3353 if (CHECK_FLAG (ospf
->config
, OSPF_RFC1583_COMPATIBLE
))
3355 json_object_boolean_true_add(json
, "rfc1583Compatibility");
3360 vty_out (vty
, " Supports only single TOS (TOS0) routes%s", VTY_NEWLINE
);
3361 vty_out (vty
, " This implementation conforms to RFC2328%s", VTY_NEWLINE
);
3362 vty_out (vty
, " RFC1583Compatibility flag is %s%s",
3363 CHECK_FLAG (ospf
->config
, OSPF_RFC1583_COMPATIBLE
) ?
3364 "enabled" : "disabled", VTY_NEWLINE
);
3369 if (CHECK_FLAG (ospf
->config
, OSPF_OPAQUE_CAPABLE
))
3371 json_object_boolean_true_add(json
, "opaqueCapable");
3376 vty_out (vty
, " OpaqueCapability flag is %s%s",
3377 CHECK_FLAG (ospf
->config
, OSPF_OPAQUE_CAPABLE
) ? "enabled" : "disabled",
3381 /* Show stub-router configuration */
3382 if (ospf
->stub_router_startup_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
3383 || ospf
->stub_router_shutdown_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3387 json_object_boolean_true_add(json
, "stubAdvertisement");
3388 if (ospf
->stub_router_startup_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3389 json_object_int_add(json
,"postStartEnabledMsecs", ospf
->stub_router_startup_time
/ 1000);
3390 if (ospf
->stub_router_shutdown_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3391 json_object_int_add(json
,"preShutdownEnabledMsecs", ospf
->stub_router_shutdown_time
/ 1000);
3395 vty_out (vty
, " Stub router advertisement is configured%s",
3397 if (ospf
->stub_router_startup_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3398 vty_out (vty
, " Enabled for %us after start-up%s",
3399 ospf
->stub_router_startup_time
, VTY_NEWLINE
);
3400 if (ospf
->stub_router_shutdown_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3401 vty_out (vty
, " Enabled for %us prior to full shutdown%s",
3402 ospf
->stub_router_shutdown_time
, VTY_NEWLINE
);
3406 /* Show SPF timers. */
3409 json_object_int_add(json
, "spfScheduleDelayMsecs", ospf
->spf_delay
);
3410 json_object_int_add(json
, "holdtimeMinMsecs", ospf
->spf_holdtime
);
3411 json_object_int_add(json
, "holdtimeMaxMsecs", ospf
->spf_max_holdtime
);
3412 json_object_int_add(json
, "holdtimeMultplier", ospf
->spf_hold_multiplier
);
3416 vty_out (vty
, " Initial SPF scheduling delay %d millisec(s)%s"
3417 " Minimum hold time between consecutive SPFs %d millisec(s)%s"
3418 " Maximum hold time between consecutive SPFs %d millisec(s)%s"
3419 " Hold time multiplier is currently %d%s",
3420 ospf
->spf_delay
, VTY_NEWLINE
,
3421 ospf
->spf_holdtime
, VTY_NEWLINE
,
3422 ospf
->spf_max_holdtime
, VTY_NEWLINE
,
3423 ospf
->spf_hold_multiplier
, VTY_NEWLINE
);
3428 if (ospf
->ts_spf
.tv_sec
|| ospf
->ts_spf
.tv_usec
)
3430 unsigned long time_store
= 0;
3432 result
= tv_sub (recent_relative_time(), ospf
->ts_spf
);
3433 result
= tv_sub (result
, recent_relative_time());
3434 time_store
= (1000 * result
.tv_sec
) + (result
.tv_usec
/ 1000);
3435 json_object_int_add(json
, "spfLastExecutedMsecs", time_store
);
3437 time_store
= (1000 * ospf
->ts_spf_duration
.tv_sec
) + (ospf
->ts_spf_duration
.tv_usec
/ 1000);
3438 json_object_int_add(json
, "spfLastDurationMsecs", time_store
);
3441 json_object_boolean_true_add(json
, "spfHasNotRun");
3445 vty_out (vty
, " SPF algorithm ");
3446 if (ospf
->ts_spf
.tv_sec
|| ospf
->ts_spf
.tv_usec
)
3448 result
= tv_sub (recent_relative_time(), ospf
->ts_spf
);
3449 vty_out (vty
, "last executed %s ago%s",
3450 ospf_timeval_dump (&result
, timebuf
, sizeof (timebuf
)),
3452 vty_out (vty
, " Last SPF duration %s%s",
3453 ospf_timeval_dump (&ospf
->ts_spf_duration
, timebuf
, sizeof (timebuf
)),
3457 vty_out (vty
, "has not been run%s", VTY_NEWLINE
);
3462 struct timeval temp_time
;
3463 unsigned long time_store
= 0;
3465 if (ospf
->t_spf_calc
)
3467 temp_time
= tv_sub (ospf
->t_spf_calc
->u
.sands
, recent_relative_time());
3468 time_store
= (1000 * temp_time
.tv_sec
) + (temp_time
.tv_usec
/ 1000);
3469 json_object_int_add(json
, "spfTimerDueInMsecs", time_store
);
3472 json_object_int_add(json
, "lsaMinIntervalMsecs", ospf
->min_ls_interval
);
3473 json_object_int_add(json
, "lsaMinArrivalMsecs", ospf
->min_ls_arrival
);
3474 /* Show write multiplier values */
3475 json_object_int_add(json
, "writeMultiplier", ospf
->write_oi_count
);
3476 /* Show refresh parameters. */
3477 json_object_int_add(json
, "refreshTimerMsecs", ospf
->lsa_refresh_interval
* 1000);
3481 vty_out (vty
, " SPF timer %s%s%s",
3482 (ospf
->t_spf_calc
? "due in " : "is "),
3483 ospf_timer_dump (ospf
->t_spf_calc
, timebuf
, sizeof (timebuf
)),
3486 vty_out (vty
, " LSA minimum interval %d msecs%s",
3487 ospf
->min_ls_interval
, VTY_NEWLINE
);
3488 vty_out (vty
, " LSA minimum arrival %d msecs%s",
3489 ospf
->min_ls_arrival
, VTY_NEWLINE
);
3491 /* Show write multiplier values */
3492 vty_out (vty
, " Write Multiplier set to %d %s",
3493 ospf
->write_oi_count
, VTY_NEWLINE
);
3495 /* Show refresh parameters. */
3496 vty_out (vty
, " Refresh timer %d secs%s",
3497 ospf
->lsa_refresh_interval
, VTY_NEWLINE
);
3500 /* Show ABR/ASBR flags. */
3501 if (CHECK_FLAG (ospf
->flags
, OSPF_FLAG_ABR
))
3504 json_object_string_add(json
, "abrType", ospf_abr_type_descr_str
[ospf
->abr_type
]);
3506 vty_out (vty
, " This router is an ABR, ABR type is: %s%s",
3507 ospf_abr_type_descr_str
[ospf
->abr_type
], VTY_NEWLINE
);
3509 if (CHECK_FLAG (ospf
->flags
, OSPF_FLAG_ASBR
))
3512 json_object_string_add(json
, "asbrRouter", "injectingExternalRoutingInformation");
3514 vty_out (vty
, " This router is an ASBR "
3515 "(injecting external routing information)%s", VTY_NEWLINE
);
3518 /* Show Number of AS-external-LSAs. */
3521 json_object_int_add(json
, "lsaExternalCounter",
3522 ospf_lsdb_count (ospf
->lsdb
, OSPF_AS_EXTERNAL_LSA
));
3523 json_object_int_add(json
, "lsaExternalChecksum",
3524 ospf_lsdb_checksum (ospf
->lsdb
, OSPF_AS_EXTERNAL_LSA
));
3528 vty_out (vty
, " Number of external LSA %ld. Checksum Sum 0x%08x%s",
3529 ospf_lsdb_count (ospf
->lsdb
, OSPF_AS_EXTERNAL_LSA
),
3530 ospf_lsdb_checksum (ospf
->lsdb
, OSPF_AS_EXTERNAL_LSA
), VTY_NEWLINE
);
3535 json_object_int_add(json
, "lsaAsopaqueCounter",
3536 ospf_lsdb_count (ospf
->lsdb
, OSPF_OPAQUE_AS_LSA
));
3537 json_object_int_add(json
, "lsaAsOpaqueChecksum",
3538 ospf_lsdb_checksum (ospf
->lsdb
, OSPF_OPAQUE_AS_LSA
));
3542 vty_out (vty
, " Number of opaque AS LSA %ld. Checksum Sum 0x%08x%s",
3543 ospf_lsdb_count (ospf
->lsdb
, OSPF_OPAQUE_AS_LSA
),
3544 ospf_lsdb_checksum (ospf
->lsdb
, OSPF_OPAQUE_AS_LSA
), VTY_NEWLINE
);
3547 /* Show number of areas attached. */
3549 json_object_int_add(json
, "attachedAreaCounter", listcount (ospf
->areas
));
3551 vty_out (vty
, " Number of areas attached to this router: %d%s",
3552 listcount (ospf
->areas
), VTY_NEWLINE
);
3554 if (CHECK_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_CHANGES
))
3556 if (CHECK_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_DETAIL
))
3559 json_object_boolean_true_add(json
, "adjacencyChangesLoggedAll");
3561 vty_out(vty
, " All adjacency changes are logged%s",VTY_NEWLINE
);
3566 json_object_boolean_true_add(json
, "adjacencyChangesLogged");
3568 vty_out(vty
, " Adjacency changes are logged%s",VTY_NEWLINE
);
3571 /* Show each area status. */
3572 for (ALL_LIST_ELEMENTS (ospf
->areas
, node
, nnode
, area
))
3573 show_ip_ospf_area (vty
, area
, json_areas
, use_json
);
3577 json_object_object_add(json
, "areas", json_areas
);
3578 vty_out (vty
, "%s%s", json_object_to_json_string_ext(json
, JSON_C_TO_STRING_PRETTY
), VTY_NEWLINE
);
3579 json_object_free(json
);
3582 vty_out (vty
, "%s",VTY_NEWLINE
);
3587 DEFUN (show_ip_ospf
,
3589 "show ip ospf {json}",
3592 "OSPF information\n"
3593 "JavaScript Object Notation\n")
3596 u_char uj
= use_json(argc
, argv
);
3598 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
3601 return (show_ip_ospf_common(vty
, ospf
, uj
));
3604 DEFUN (show_ip_ospf_instance
,
3605 show_ip_ospf_instance_cmd
,
3606 "show ip ospf <1-65535> {json}",
3609 "OSPF information\n"
3611 "JavaScript Object Notation\n")
3614 u_short instance
= 0;
3615 u_char uj
= use_json(argc
, argv
);
3617 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
3618 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
3621 return (show_ip_ospf_common(vty
, ospf
, uj
));
3625 show_ip_ospf_interface_sub (struct vty
*vty
, struct ospf
*ospf
, struct interface
*ifp
,
3626 json_object
*json_interface_sub
, u_char use_json
)
3629 struct ospf_neighbor
*nbr
;
3630 struct route_node
*rn
;
3632 /* Is interface up? */
3635 is_up
= if_is_operative(ifp
);
3637 json_object_boolean_true_add(json_interface_sub
, "ifUp");
3639 json_object_boolean_false_add(json_interface_sub
, "ifDown");
3641 json_object_int_add(json_interface_sub
, "ifIndex", ifp
->ifindex
);
3642 json_object_int_add(json_interface_sub
, "mtuBytes", ifp
->mtu
);
3643 json_object_int_add(json_interface_sub
, "bandwidthMbit", ifp
->bandwidth
);
3644 json_object_string_add(json_interface_sub
, "ifFlags", if_flag_dump(ifp
->flags
));
3648 vty_out (vty
, "%s is %s%s", ifp
->name
,
3649 ((is_up
= if_is_operative(ifp
)) ? "up" : "down"), VTY_NEWLINE
);
3650 vty_out (vty
, " ifindex %u, MTU %u bytes, BW %u Mbit %s%s",
3651 ifp
->ifindex
, ifp
->mtu
, ifp
->bandwidth
, if_flag_dump(ifp
->flags
),
3655 /* Is interface OSPF enabled? */
3658 if (ospf_oi_count(ifp
) == 0)
3660 json_object_boolean_false_add(json_interface_sub
, "ospfEnabled");
3665 json_object_boolean_false_add(json_interface_sub
, "ospfRunning");
3669 json_object_boolean_true_add(json_interface_sub
, "ospfEnabled");
3673 if (ospf_oi_count(ifp
) == 0)
3675 vty_out (vty
, " OSPF not enabled on this interface%s", VTY_NEWLINE
);
3680 vty_out (vty
, " OSPF is enabled, but not running on this interface%s",
3686 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
3688 struct ospf_interface
*oi
= rn
->info
;
3693 if (CHECK_FLAG(oi
->connected
->flags
, ZEBRA_IFA_UNNUMBERED
))
3696 json_object_boolean_true_add(json_interface_sub
, "ifUnnumbered");
3698 vty_out (vty
, " This interface is UNNUMBERED,");
3702 /* Show OSPF interface information. */
3705 json_object_string_add(json_interface_sub
, "ipAddress", inet_ntoa (oi
->address
->u
.prefix4
));
3706 json_object_int_add(json_interface_sub
, "ipAddressPrefixlen", oi
->address
->prefixlen
);
3709 vty_out (vty
, " Internet Address %s/%d,",
3710 inet_ntoa (oi
->address
->u
.prefix4
), oi
->address
->prefixlen
);
3712 if (oi
->connected
->destination
|| oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
3714 struct in_addr
*dest
;
3717 if (CONNECTED_PEER(oi
->connected
)
3718 || oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
3723 /* For Vlinks, showing the peer address is probably more
3724 * * * * * informative than the local interface that is being used
3726 if (oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
3727 dest
= &oi
->vl_data
->peer_addr
;
3729 dest
= &oi
->connected
->destination
->u
.prefix4
;
3733 json_object_string_add(json_interface_sub
, "ospfIfType", dstr
);
3734 if (oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
3735 json_object_string_add(json_interface_sub
, "vlinkPeer", inet_ntoa (*dest
));
3737 json_object_string_add(json_interface_sub
, "localIfUsed", inet_ntoa (*dest
));
3740 vty_out (vty
, " %s %s,", dstr
, inet_ntoa (*dest
));
3745 json_object_string_add(json_interface_sub
, "area", ospf_area_desc_string (oi
->area
));
3746 if (OSPF_IF_PARAM(oi
, mtu_ignore
))
3747 json_object_boolean_true_add(json_interface_sub
, "mtuMismatchDetect");
3748 json_object_string_add(json_interface_sub
, "routerId", inet_ntoa (ospf
->router_id
));
3749 json_object_string_add(json_interface_sub
, "networkType", ospf_network_type_str
[oi
->type
]);
3750 json_object_int_add(json_interface_sub
, "cost", oi
->output_cost
);
3751 json_object_int_add(json_interface_sub
, "transmitDelayMsecs", 1000 / OSPF_IF_PARAM (oi
,transmit_delay
));
3752 json_object_string_add(json_interface_sub
, "state", LOOKUP (ospf_ism_state_msg
, oi
->state
));
3753 json_object_int_add(json_interface_sub
, "priority", PRIORITY (oi
));
3757 vty_out (vty
, " Area %s%s", ospf_area_desc_string (oi
->area
),
3760 vty_out (vty
, " MTU mismatch detection:%s%s",
3761 OSPF_IF_PARAM(oi
, mtu_ignore
) ? "disabled" : "enabled", VTY_NEWLINE
);
3763 vty_out (vty
, " Router ID %s, Network Type %s, Cost: %d%s",
3764 inet_ntoa (ospf
->router_id
), ospf_network_type_str
[oi
->type
],
3765 oi
->output_cost
, VTY_NEWLINE
);
3767 vty_out (vty
, " Transmit Delay is %d sec, State %s, Priority %d%s",
3768 OSPF_IF_PARAM (oi
,transmit_delay
), LOOKUP (ospf_ism_state_msg
, oi
->state
),
3769 PRIORITY (oi
), VTY_NEWLINE
);
3772 /* Show DR information. */
3773 if (DR (oi
).s_addr
== 0)
3776 vty_out (vty
, " No backup designated router on this network%s",
3781 nbr
= ospf_nbr_lookup_by_addr (oi
->nbrs
, &BDR (oi
));
3785 vty_out (vty
, " No backup designated router on this network%s",
3792 json_object_string_add(json_interface_sub
, "bdrId", inet_ntoa (nbr
->router_id
));
3793 json_object_string_add(json_interface_sub
, "bdrAddress", inet_ntoa (nbr
->address
.u
.prefix4
));
3797 vty_out (vty
, " Backup Designated Router (ID) %s,",
3798 inet_ntoa (nbr
->router_id
));
3799 vty_out (vty
, " Interface Address %s%s",
3800 inet_ntoa (nbr
->address
.u
.prefix4
), VTY_NEWLINE
);
3805 /* Next network-LSA sequence number we'll use, if we're elected DR */
3806 if (oi
->params
&& ntohl (oi
->params
->network_lsa_seqnum
) != OSPF_INITIAL_SEQUENCE_NUMBER
)
3809 json_object_int_add(json_interface_sub
, "networkLsaSequence", ntohl (oi
->params
->network_lsa_seqnum
));
3811 vty_out (vty
, " Saved Network-LSA sequence number 0x%x%s",
3812 ntohl (oi
->params
->network_lsa_seqnum
), VTY_NEWLINE
);
3817 if (OI_MEMBER_CHECK(oi
, MEMBER_ALLROUTERS
)
3818 || OI_MEMBER_CHECK(oi
, MEMBER_DROUTERS
))
3820 if (OI_MEMBER_CHECK(oi
, MEMBER_ALLROUTERS
))
3821 json_object_boolean_true_add(json_interface_sub
, "mcastMemberOspfAllRouters");
3822 if (OI_MEMBER_CHECK(oi
, MEMBER_DROUTERS
))
3823 json_object_boolean_true_add(json_interface_sub
, "mcastMemberOspfDesignatedRouters");
3828 vty_out (vty
, " Multicast group memberships:");
3829 if (OI_MEMBER_CHECK(oi
, MEMBER_ALLROUTERS
)
3830 || OI_MEMBER_CHECK(oi
, MEMBER_DROUTERS
))
3832 if (OI_MEMBER_CHECK(oi
, MEMBER_ALLROUTERS
))
3833 vty_out (vty
, " OSPFAllRouters");
3834 if (OI_MEMBER_CHECK(oi
, MEMBER_DROUTERS
))
3835 vty_out (vty
, " OSPFDesignatedRouters");
3838 vty_out (vty
, " <None>");
3839 vty_out (vty
, "%s", VTY_NEWLINE
);
3844 if (OSPF_IF_PARAM (oi
, fast_hello
) == 0)
3845 json_object_int_add(json_interface_sub
, "timerMsecs", 1000 /OSPF_IF_PARAM (oi
, v_hello
));
3847 json_object_int_add(json_interface_sub
, "timerMsecs", 1000 / OSPF_IF_PARAM (oi
, fast_hello
));
3848 json_object_int_add(json_interface_sub
, "timerDeadMsecs", 1000 / OSPF_IF_PARAM (oi
, v_wait
));
3849 json_object_int_add(json_interface_sub
, "timerWaitMsecs", 1000 / OSPF_IF_PARAM (oi
, v_wait
));
3850 json_object_int_add(json_interface_sub
, "timerRetransmit", 1000 / OSPF_IF_PARAM (oi
, retransmit_interval
));
3854 vty_out (vty
, " Timer intervals configured,");
3855 vty_out (vty
, " Hello ");
3856 if (OSPF_IF_PARAM (oi
, fast_hello
) == 0)
3857 vty_out (vty
, "%ds,", OSPF_IF_PARAM (oi
, v_hello
));
3859 vty_out (vty
, "%dms,", 1000 / OSPF_IF_PARAM (oi
, fast_hello
));
3860 vty_out (vty
, " Dead %ds, Wait %ds, Retransmit %d%s",
3861 OSPF_IF_PARAM (oi
, v_wait
),
3862 OSPF_IF_PARAM (oi
, v_wait
),
3863 OSPF_IF_PARAM (oi
, retransmit_interval
),
3867 if (OSPF_IF_PASSIVE_STATUS (oi
) == OSPF_IF_ACTIVE
)
3869 char timebuf
[OSPF_TIME_DUMP_SIZE
];
3872 struct timeval result
;
3873 unsigned long time_store
= 0;
3875 result
= tv_sub (oi
->t_hello
->u
.sands
, recent_relative_time());
3881 time_store
= (1000 * result
.tv_sec
) + (result
.tv_usec
/ 1000);
3882 json_object_int_add(json_interface_sub
, "timerHelloInMsecs", time_store
);
3885 vty_out (vty
, " Hello due in %s%s",
3886 ospf_timer_dump (oi
->t_hello
, timebuf
, sizeof(timebuf
)),
3889 else /* passive-interface is set */
3892 json_object_boolean_true_add(json_interface_sub
, "timerPassiveIface");
3894 vty_out (vty
, " No Hellos (Passive interface)%s", VTY_NEWLINE
);
3899 json_object_int_add(json_interface_sub
, "nbrCount", ospf_nbr_count (oi
, 0));
3900 json_object_int_add(json_interface_sub
, "nbrAdjacentCount", ospf_nbr_count (oi
, NSM_Full
));
3903 vty_out (vty
, " Neighbor Count is %d, Adjacent neighbor count is %d%s",
3904 ospf_nbr_count (oi
, 0), ospf_nbr_count (oi
, NSM_Full
),
3906 ospf_bfd_interface_show(vty
, ifp
, json_interface_sub
, use_json
);
3911 show_ip_ospf_interface_common (struct vty
*vty
, struct ospf
*ospf
, int argc
,
3912 const char **argv
, int iface_argv
, u_char use_json
)
3914 struct interface
*ifp
;
3915 struct listnode
*node
;
3916 json_object
*json
= NULL
;
3917 json_object
*json_interface_sub
= NULL
;
3921 json
= json_object_new_object();
3922 json_interface_sub
= json_object_new_object();
3928 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
3930 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
3931 VTY_NEWLINE
, VTY_NEWLINE
);
3934 if (argc
== (iface_argv
+ 1))
3936 /* Show All Interfaces.*/
3937 for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT
), node
, ifp
))
3939 if (ospf_oi_count(ifp
))
3941 show_ip_ospf_interface_sub (vty
, ospf
, ifp
, json_interface_sub
, use_json
);
3943 json_object_object_add (json
, ifp
->name
, json_interface_sub
);
3947 else if (argv
[iface_argv
] && strcmp(argv
[iface_argv
], "json") == 0)
3951 json
= json_object_new_object();
3952 json_interface_sub
= json_object_new_object ();
3955 /* Show All Interfaces. */
3956 for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT
), node
, ifp
))
3958 if (ospf_oi_count(ifp
))
3960 show_ip_ospf_interface_sub (vty
, ospf
, ifp
, json_interface_sub
, use_json
);
3962 json_object_object_add(json
, ifp
->name
, json_interface_sub
);
3968 /* Interface name is specified. */
3969 if ((ifp
= if_lookup_by_name (argv
[iface_argv
])) == NULL
)
3972 json_object_boolean_true_add(json
, "noSuchIface");
3974 vty_out (vty
, "No such interface name%s", VTY_NEWLINE
);
3978 show_ip_ospf_interface_sub (vty
, ospf
, ifp
, json_interface_sub
, use_json
);
3980 json_object_object_add(json
, ifp
->name
, json_interface_sub
);
3986 vty_out (vty
, "%s%s", json_object_to_json_string_ext(json
, JSON_C_TO_STRING_PRETTY
), VTY_NEWLINE
);
3987 json_object_free(json
);
3990 vty_out (vty
, "%s", VTY_NEWLINE
);
3995 DEFUN (show_ip_ospf_interface
,
3996 show_ip_ospf_interface_cmd
,
3997 "show ip ospf interface [INTERFACE] {json}",
4000 "OSPF information\n"
4001 "Interface information\n"
4003 "JavaScript Object Notation\n")
4006 u_char uj
= use_json(argc
, argv
);
4008 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4011 return show_ip_ospf_interface_common(vty
, ospf
, argc
, argv
, 0, uj
);
4014 DEFUN (show_ip_ospf_instance_interface
,
4015 show_ip_ospf_instance_interface_cmd
,
4016 "show ip ospf <1-65535> interface [INTERFACE] {json}",
4019 "OSPF information\n"
4021 "Interface information\n"
4023 "JavaScript Object Notation\n")
4026 u_short instance
= 0;
4027 u_char uj
= use_json(argc
, argv
);
4029 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4030 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
4033 return show_ip_ospf_interface_common(vty
, ospf
, argc
, argv
, 1, uj
);
4037 show_ip_ospf_neighbour_header (struct vty
*vty
)
4039 vty_out (vty
, "%s%-15s %3s %-15s %9s %-15s %-20s %5s %5s %5s%s",
4041 "Neighbor ID", "Pri", "State", "Dead Time",
4042 "Address", "Interface", "RXmtL", "RqstL", "DBsmL",
4047 show_ip_ospf_neighbor_sub (struct vty
*vty
, struct ospf_interface
*oi
, json_object
*json
, u_char use_json
)
4049 struct route_node
*rn
;
4050 struct ospf_neighbor
*nbr
;
4052 char timebuf
[OSPF_TIME_DUMP_SIZE
];
4053 json_object
*json_neighbor
= NULL
;
4055 for (rn
= route_top (oi
->nbrs
); rn
; rn
= route_next (rn
))
4057 if ((nbr
= rn
->info
))
4059 /* Do not show myself. */
4060 if (nbr
!= oi
->nbr_self
)
4062 /* Down state is not shown. */
4063 if (nbr
->state
!= NSM_Down
)
4067 json_neighbor
= json_object_new_object();
4068 ospf_nbr_state_message (nbr
, msgbuf
, 16);
4070 struct timeval result
;
4071 unsigned long time_store
= 0;
4073 result
= tv_sub (nbr
->t_inactivity
->u
.sands
, recent_relative_time());
4074 time_store
= (1000 * result
.tv_sec
) + (result
.tv_usec
/ 1000);
4076 json_object_int_add (json_neighbor
, "priority", nbr
->priority
);
4077 json_object_string_add (json_neighbor
, "state", msgbuf
);
4078 json_object_int_add (json_neighbor
, "deadTimeMsecs", time_store
);
4079 json_object_string_add (json_neighbor
, "address", inet_ntoa (nbr
->src
));
4080 json_object_string_add (json_neighbor
, "ifaceName", IF_NAME (oi
));
4081 json_object_int_add (json_neighbor
, "retransmitCounter", ospf_ls_retransmit_count (nbr
));
4082 json_object_int_add (json_neighbor
, "requestCounter", ospf_ls_request_count (nbr
));
4083 json_object_int_add (json_neighbor
, "dbSummaryCounter", ospf_db_summary_count (nbr
));
4084 if (nbr
->state
== NSM_Attempt
&& nbr
->router_id
.s_addr
== 0)
4085 json_object_object_add(json
, "neighbor", json_neighbor
);
4087 json_object_object_add(json
, inet_ntoa (nbr
->router_id
), json_neighbor
);
4091 ospf_nbr_state_message (nbr
, msgbuf
, 16);
4093 if (nbr
->state
== NSM_Attempt
&& nbr
->router_id
.s_addr
== 0)
4094 vty_out (vty
, "%-15s %3d %-15s ",
4098 vty_out (vty
, "%-15s %3d %-15s ",
4099 inet_ntoa (nbr
->router_id
), nbr
->priority
,
4102 vty_out (vty
, "%9s ",
4103 ospf_timer_dump (nbr
->t_inactivity
, timebuf
,
4105 vty_out (vty
, "%-15s ", inet_ntoa (nbr
->src
));
4106 vty_out (vty
, "%-20s %5ld %5ld %5d%s",
4107 IF_NAME (oi
), ospf_ls_retransmit_count (nbr
),
4108 ospf_ls_request_count (nbr
), ospf_db_summary_count (nbr
),
4118 show_ip_ospf_neighbor_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
4120 struct ospf_interface
*oi
;
4121 struct listnode
*node
;
4122 json_object
*json
= NULL
;
4125 json
= json_object_new_object();
4127 show_ip_ospf_neighbour_header (vty
);
4132 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4134 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4135 VTY_NEWLINE
, VTY_NEWLINE
);
4138 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4139 show_ip_ospf_neighbor_sub (vty
, oi
, json
, use_json
);
4143 vty_out (vty
, "%s%s", json_object_to_json_string_ext(json
, JSON_C_TO_STRING_PRETTY
), VTY_NEWLINE
);
4144 json_object_free(json
);
4147 vty_out (vty
, "%s", VTY_NEWLINE
);
4152 DEFUN (show_ip_ospf_neighbor
,
4153 show_ip_ospf_neighbor_cmd
,
4154 "show ip ospf neighbor {json}",
4157 "OSPF information\n"
4159 "JavaScript Object Notation\n")
4162 u_char uj
= use_json(argc
, argv
);
4164 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4167 return show_ip_ospf_neighbor_common(vty
, ospf
, uj
);
4171 DEFUN (show_ip_ospf_instance_neighbor
,
4172 show_ip_ospf_instance_neighbor_cmd
,
4173 "show ip ospf <1-65535> neighbor {json}",
4176 "OSPF information\n"
4179 "JavaScript Object Notation\n")
4182 u_short instance
= 0;
4183 u_char uj
= use_json(argc
, argv
);
4185 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4186 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4189 return show_ip_ospf_neighbor_common(vty
, ospf
, uj
);
4193 show_ip_ospf_neighbor_all_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
4195 struct listnode
*node
;
4196 struct ospf_interface
*oi
;
4197 json_object
*json
= NULL
;
4198 json_object
*json_neighbor_sub
= NULL
;
4202 json
= json_object_new_object();
4203 json_neighbor_sub
= json_object_new_object();
4206 show_ip_ospf_neighbour_header (vty
);
4211 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4213 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4214 VTY_NEWLINE
, VTY_NEWLINE
);
4217 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4219 struct listnode
*nbr_node
;
4220 struct ospf_nbr_nbma
*nbr_nbma
;
4222 show_ip_ospf_neighbor_sub (vty
, oi
, json
, use_json
);
4224 /* print Down neighbor status */
4225 for (ALL_LIST_ELEMENTS_RO (oi
->nbr_nbma
, nbr_node
, nbr_nbma
))
4227 if (nbr_nbma
->nbr
== NULL
4228 || nbr_nbma
->nbr
->state
== NSM_Down
)
4232 json_object_int_add (json_neighbor_sub
, "nbrNbmaPriority", nbr_nbma
->priority
);
4233 json_object_boolean_true_add (json_neighbor_sub
, "nbrNbmaDown");
4234 json_object_string_add (json_neighbor_sub
, "nbrNbmaIfaceName", IF_NAME (oi
));
4235 json_object_int_add (json_neighbor_sub
, "nbrNbmaRetransmitCounter", 0);
4236 json_object_int_add (json_neighbor_sub
, "nbrNbmaRequestCounter", 0);
4237 json_object_int_add (json_neighbor_sub
, "nbrNbmaDbSummaryCounter", 0);
4238 json_object_object_add(json
, inet_ntoa (nbr_nbma
->addr
), json_neighbor_sub
);
4242 vty_out (vty
, "%-15s %3d %-15s %9s ",
4243 "-", nbr_nbma
->priority
, "Down", "-");
4244 vty_out (vty
, "%-15s %-20s %5d %5d %5d%s",
4245 inet_ntoa (nbr_nbma
->addr
), IF_NAME (oi
),
4246 0, 0, 0, VTY_NEWLINE
);
4254 vty_out (vty
, "%s%s", json_object_to_json_string_ext(json
, JSON_C_TO_STRING_PRETTY
), VTY_NEWLINE
);
4255 json_object_free(json
);
4258 vty_out (vty
, "%s", VTY_NEWLINE
);
4263 DEFUN (show_ip_ospf_neighbor_all
,
4264 show_ip_ospf_neighbor_all_cmd
,
4265 "show ip ospf neighbor all {json}",
4268 "OSPF information\n"
4270 "include down status neighbor\n"
4271 "JavaScript Object Notation\n")
4274 u_char uj
= use_json(argc
, argv
);
4276 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4279 return show_ip_ospf_neighbor_all_common(vty
, ospf
, uj
);
4282 DEFUN (show_ip_ospf_instance_neighbor_all
,
4283 show_ip_ospf_instance_neighbor_all_cmd
,
4284 "show ip ospf <1-65535> neighbor all {json}",
4287 "OSPF information\n"
4290 "include down status neighbor\n"
4291 "JavaScript Object Notation\n")
4294 u_short instance
= 0;
4295 u_char uj
= use_json(argc
, argv
);
4297 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4298 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4301 return show_ip_ospf_neighbor_all_common(vty
, ospf
, uj
);
4305 show_ip_ospf_neighbor_int_common (struct vty
*vty
, struct ospf
*ospf
, int arg_base
,
4306 const char **argv
, u_char use_json
)
4308 struct interface
*ifp
;
4309 struct route_node
*rn
;
4310 json_object
*json
= NULL
;
4313 json
= json_object_new_object();
4315 show_ip_ospf_neighbour_header (vty
);
4320 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4322 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4323 VTY_NEWLINE
, VTY_NEWLINE
);
4326 ifp
= if_lookup_by_name (argv
[arg_base
]);
4330 json_object_boolean_true_add(json
, "noSuchIface");
4332 vty_out (vty
, "No such interface.%s", VTY_NEWLINE
);
4336 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
4338 struct ospf_interface
*oi
= rn
->info
;
4343 show_ip_ospf_neighbor_sub (vty
, oi
, json
, use_json
);
4348 vty_out (vty
, "%s%s", json_object_to_json_string_ext(json
, JSON_C_TO_STRING_PRETTY
), VTY_NEWLINE
);
4349 json_object_free(json
);
4352 vty_out (vty
, "%s", VTY_NEWLINE
);
4357 DEFUN (show_ip_ospf_neighbor_int
,
4358 show_ip_ospf_neighbor_int_cmd
,
4359 "show ip ospf neighbor IFNAME {json}",
4362 "OSPF information\n"
4365 "JavaScript Object Notation\n")
4368 u_char uj
= use_json(argc
, argv
);
4370 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4373 return show_ip_ospf_neighbor_int_common(vty
, ospf
, 0, argv
, uj
);
4376 DEFUN (show_ip_ospf_instance_neighbor_int
,
4377 show_ip_ospf_instance_neighbor_int_cmd
,
4378 "show ip ospf <1-65535> neighbor IFNAME {json}",
4381 "OSPF information\n"
4385 "JavaScript Object Notation\n")
4388 u_short instance
= 0;
4389 u_char uj
= use_json(argc
, argv
);
4391 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4392 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4395 return show_ip_ospf_neighbor_int_common(vty
, ospf
, 1, argv
, uj
);
4399 show_ip_ospf_nbr_nbma_detail_sub (struct vty
*vty
, struct ospf_interface
*oi
, struct ospf_nbr_nbma
*nbr_nbma
,
4400 u_char use_json
, json_object
*json
)
4402 char timebuf
[OSPF_TIME_DUMP_SIZE
];
4403 json_object
*json_sub
= NULL
;
4406 json_sub
= json_object_new_object();
4407 else /* Show neighbor ID. */
4408 vty_out (vty
, " Neighbor %s,", "-");
4410 /* Show interface address. */
4412 json_object_string_add(json_sub
, "ifaceAddress", inet_ntoa (nbr_nbma
->addr
));
4414 vty_out (vty
, " interface address %s%s",
4415 inet_ntoa (nbr_nbma
->addr
), VTY_NEWLINE
);
4420 json_object_string_add(json_sub
, "areaId", ospf_area_desc_string (oi
->area
));
4421 json_object_string_add(json_sub
, "iface", IF_NAME (oi
));
4424 vty_out (vty
, " In the area %s via interface %s%s",
4425 ospf_area_desc_string (oi
->area
), IF_NAME (oi
), VTY_NEWLINE
);
4427 /* Show neighbor priority and state. */
4430 json_object_int_add(json_sub
, "nbrPriority", nbr_nbma
->priority
);
4431 json_object_string_add(json_sub
, "nbrState", "down");
4434 vty_out (vty
, " Neighbor priority is %d, State is %s,",
4435 nbr_nbma
->priority
, "Down");
4437 /* Show state changes. */
4439 json_object_int_add(json_sub
, "stateChangeCounter", nbr_nbma
->state_change
);
4441 vty_out (vty
, " %d state changes%s", nbr_nbma
->state_change
, VTY_NEWLINE
);
4443 /* Show PollInterval */
4445 json_object_int_add(json_sub
, "pollInterval", nbr_nbma
->v_poll
);
4447 vty_out (vty
, " Poll interval %d%s", nbr_nbma
->v_poll
, VTY_NEWLINE
);
4449 /* Show poll-interval timer. */
4452 struct timeval res
= tv_sub (nbr_nbma
->t_poll
->u
.sands
, recent_relative_time ());
4453 unsigned long time_store
= 0;
4454 time_store
= (1000 * res
.tv_sec
) + (res
.tv_usec
/ 1000);
4455 json_object_int_add(json_sub
, "pollIntervalTimerDueMsec", time_store
);
4458 vty_out (vty
, " Poll timer due in %s%s",
4459 ospf_timer_dump (nbr_nbma
->t_poll
, timebuf
, sizeof(timebuf
)),
4462 /* Show poll-interval timer thread. */
4465 if (nbr_nbma
->t_poll
!= NULL
)
4466 json_object_string_add(json_sub
, "pollIntervalTimerThread", "on");
4469 vty_out (vty
, " Thread Poll Timer %s%s",
4470 nbr_nbma
->t_poll
!= NULL
? "on" : "off", VTY_NEWLINE
);
4473 json_object_object_add(json
, "noNbrId", json_sub
);
4477 show_ip_ospf_neighbor_detail_sub (struct vty
*vty
, struct ospf_interface
*oi
,
4478 struct ospf_neighbor
*nbr
, u_char use_json
, json_object
*json
)
4480 char timebuf
[OSPF_TIME_DUMP_SIZE
];
4481 json_object
*json_sub
= NULL
;
4484 json_sub
= json_object_new_object();
4487 /* Show neighbor ID. */
4488 if (nbr
->state
== NSM_Attempt
&& nbr
->router_id
.s_addr
== 0)
4489 vty_out (vty
, " Neighbor %s,", "-");
4491 vty_out (vty
, " Neighbor %s,", inet_ntoa (nbr
->router_id
));
4494 /* Show interface address. */
4496 json_object_string_add(json_sub
, "ifaceAddress", inet_ntoa (nbr
->address
.u
.prefix4
));
4498 vty_out (vty
, " interface address %s%s",
4499 inet_ntoa (nbr
->address
.u
.prefix4
), VTY_NEWLINE
);
4504 json_object_string_add(json_sub
, "areaId", ospf_area_desc_string (oi
->area
));
4505 json_object_string_add(json_sub
, "ifaceName", oi
->ifp
->name
);
4508 vty_out (vty
, " In the area %s via interface %s%s",
4509 ospf_area_desc_string (oi
->area
), oi
->ifp
->name
, VTY_NEWLINE
);
4511 /* Show neighbor priority and state. */
4514 json_object_int_add(json_sub
, "nbrPriority", nbr
->priority
);
4515 json_object_string_add(json_sub
, "nbrState", LOOKUP (ospf_nsm_state_msg
, nbr
->state
));
4518 vty_out (vty
, " Neighbor priority is %d, State is %s,",
4519 nbr
->priority
, LOOKUP (ospf_nsm_state_msg
, nbr
->state
));
4521 /* Show state changes. */
4523 json_object_int_add(json_sub
, "stateChangeCounter", nbr
->state_change
);
4525 vty_out (vty
, " %d state changes%s", nbr
->state_change
, VTY_NEWLINE
);
4527 if (nbr
->ts_last_progress
.tv_sec
|| nbr
->ts_last_progress
.tv_usec
)
4529 struct timeval res
= tv_sub (recent_relative_time (), nbr
->ts_last_progress
);
4532 unsigned long time_store
= 0;
4533 time_store
= (1000 * res
.tv_sec
) + (res
.tv_usec
/ 1000);
4534 json_object_int_add(json_sub
, "lastPrgrsvChangeMsec", time_store
);
4538 vty_out (vty
, " Most recent state change statistics:%s",
4540 vty_out (vty
, " Progressive change %s ago%s",
4541 ospf_timeval_dump (&res
, timebuf
, sizeof(timebuf
)),
4546 if (nbr
->ts_last_regress
.tv_sec
|| nbr
->ts_last_regress
.tv_usec
)
4548 struct timeval res
= tv_sub (recent_relative_time (), nbr
->ts_last_regress
);
4551 unsigned long time_store
= 0;
4552 time_store
= (1000 * res
.tv_sec
) + (res
.tv_usec
/ 1000);
4553 json_object_int_add(json_sub
, "lastRegressiveChangeMsec", time_store
);
4554 if (nbr
->last_regress_str
)
4555 json_object_string_add(json_sub
, "lastRegressiveChangeReason", nbr
->last_regress_str
);
4559 vty_out (vty
, " Regressive change %s ago, due to %s%s",
4560 ospf_timeval_dump (&res
, timebuf
, sizeof(timebuf
)),
4561 (nbr
->last_regress_str
? nbr
->last_regress_str
: "??"),
4566 /* Show Designated Rotuer ID. */
4568 json_object_string_add(json_sub
, "routerDesignatedId", inet_ntoa (nbr
->d_router
));
4570 vty_out (vty
, " DR is %s,", inet_ntoa (nbr
->d_router
));
4572 /* Show Backup Designated Rotuer ID. */
4574 json_object_string_add(json_sub
, "routerDesignatedBackupId", inet_ntoa (nbr
->bd_router
));
4576 vty_out (vty
, " BDR is %s%s", inet_ntoa (nbr
->bd_router
), VTY_NEWLINE
);
4581 json_object_int_add(json_sub
, "optionsCounter", nbr
->options
);
4582 json_object_string_add(json_sub
, "optionsList", ospf_options_dump (nbr
->options
));
4585 vty_out (vty
, " Options %d %s%s", nbr
->options
,
4586 ospf_options_dump (nbr
->options
), VTY_NEWLINE
);
4588 /* Show Router Dead interval timer. */
4591 struct timeval res
= tv_sub (nbr
->t_inactivity
->u
.sands
, recent_relative_time ());
4592 unsigned long time_store
= 0;
4593 time_store
= (1000 * res
.tv_sec
) + (res
.tv_usec
/ 1000);
4594 json_object_int_add(json_sub
, "routerDeadIntervalTimerDueMsec", time_store
);
4597 vty_out (vty
, " Dead timer due in %s%s",
4598 ospf_timer_dump (nbr
->t_inactivity
, timebuf
, sizeof (timebuf
)),
4601 /* Show Database Summary list. */
4603 json_object_int_add(json_sub
, "databaseSummaryListCounter", ospf_db_summary_count (nbr
));
4605 vty_out (vty
, " Database Summary List %d%s",
4606 ospf_db_summary_count (nbr
), VTY_NEWLINE
);
4608 /* Show Link State Request list. */
4610 json_object_int_add(json_sub
, "linkStateRequestListCounter", ospf_ls_request_count (nbr
));
4612 vty_out (vty
, " Link State Request List %ld%s",
4613 ospf_ls_request_count (nbr
), VTY_NEWLINE
);
4615 /* Show Link State Retransmission list. */
4617 json_object_int_add(json_sub
, "linkStateRetransmissionListCounter", ospf_ls_retransmit_count (nbr
));
4619 vty_out (vty
, " Link State Retransmission List %ld%s",
4620 ospf_ls_retransmit_count (nbr
), VTY_NEWLINE
);
4622 /* Show inactivity timer thread. */
4625 if (nbr
->t_inactivity
!= NULL
)
4626 json_object_string_add(json_sub
, "threadInactivityTimer", "on");
4629 vty_out (vty
, " Thread Inactivity Timer %s%s",
4630 nbr
->t_inactivity
!= NULL
? "on" : "off", VTY_NEWLINE
);
4632 /* Show Database Description retransmission thread. */
4635 if (nbr
->t_db_desc
!= NULL
)
4636 json_object_string_add(json_sub
, "threadDatabaseDescriptionRetransmission", "on");
4639 vty_out (vty
, " Thread Database Description Retransmision %s%s",
4640 nbr
->t_db_desc
!= NULL
? "on" : "off", VTY_NEWLINE
);
4642 /* Show Link State Request Retransmission thread. */
4645 if (nbr
->t_ls_req
!= NULL
)
4646 json_object_string_add(json_sub
, "threadLinkStateRequestRetransmission", "on");
4649 vty_out (vty
, " Thread Link State Request Retransmission %s%s",
4650 nbr
->t_ls_req
!= NULL
? "on" : "off", VTY_NEWLINE
);
4652 /* Show Link State Update Retransmission thread. */
4655 if (nbr
->t_ls_upd
!= NULL
)
4656 json_object_string_add(json_sub
, "threadLinkStateUpdateRetransmission", "on");
4659 vty_out (vty
, " Thread Link State Update Retransmission %s%s%s",
4660 nbr
->t_ls_upd
!= NULL
? "on" : "off", VTY_NEWLINE
, VTY_NEWLINE
);
4664 if (nbr
->state
== NSM_Attempt
&& nbr
->router_id
.s_addr
== 0)
4665 json_object_object_add(json
, "noNbrId", json_sub
);
4667 json_object_object_add(json
, inet_ntoa (nbr
->router_id
), json_sub
);
4670 ospf_bfd_show_info(vty
, nbr
->bfd_info
, json
, use_json
, 0);
4674 show_ip_ospf_neighbor_id_common (struct vty
*vty
, struct ospf
*ospf
,
4675 int arg_base
, const char **argv
, u_char use_json
)
4677 struct listnode
*node
;
4678 struct ospf_neighbor
*nbr
;
4679 struct ospf_interface
*oi
;
4680 struct in_addr router_id
;
4682 json_object
*json
= NULL
;
4685 json
= json_object_new_object();
4690 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4692 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4693 VTY_NEWLINE
, VTY_NEWLINE
);
4696 ret
= inet_aton (argv
[arg_base
], &router_id
);
4700 vty_out (vty
, "Please specify Neighbor ID by A.B.C.D%s", VTY_NEWLINE
);
4704 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4706 if ((nbr
= ospf_nbr_lookup_by_routerid (oi
->nbrs
, &router_id
)))
4708 show_ip_ospf_neighbor_detail_sub (vty
, oi
, nbr
, use_json
, json
);
4714 vty_out (vty
, "%s%s", json_object_to_json_string_ext(json
, JSON_C_TO_STRING_PRETTY
), VTY_NEWLINE
);
4715 json_object_free(json
);
4718 vty_out (vty
, "%s", VTY_NEWLINE
);
4723 DEFUN (show_ip_ospf_neighbor_id
,
4724 show_ip_ospf_neighbor_id_cmd
,
4725 "show ip ospf neighbor A.B.C.D {json}",
4728 "OSPF information\n"
4731 "JavaScript Object Notation\n")
4734 u_char uj
= use_json(argc
, argv
);
4736 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4739 return show_ip_ospf_neighbor_id_common(vty
, ospf
, 0, argv
, uj
);
4742 DEFUN (show_ip_ospf_instance_neighbor_id
,
4743 show_ip_ospf_instance_neighbor_id_cmd
,
4744 "show ip ospf <1-65535> neighbor A.B.C.D {json}",
4747 "OSPF information\n"
4751 "JavaScript Object Notation\n")
4754 u_short instance
= 0;
4755 u_char uj
= use_json(argc
, argv
);
4757 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4758 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4761 return show_ip_ospf_neighbor_id_common(vty
, ospf
, 1, argv
, uj
);
4765 show_ip_ospf_neighbor_detail_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
4767 struct ospf_interface
*oi
;
4768 struct listnode
*node
;
4769 json_object
*json
= NULL
;
4772 json
= json_object_new_object();
4777 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4779 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4780 VTY_NEWLINE
, VTY_NEWLINE
);
4783 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4785 struct route_node
*rn
;
4786 struct ospf_neighbor
*nbr
;
4788 for (rn
= route_top (oi
->nbrs
); rn
; rn
= route_next (rn
))
4790 if ((nbr
= rn
->info
))
4792 if (nbr
!= oi
->nbr_self
)
4794 if (nbr
->state
!= NSM_Down
)
4796 show_ip_ospf_neighbor_detail_sub (vty
, oi
, nbr
, use_json
, json
);
4805 vty_out (vty
, "%s%s", json_object_to_json_string_ext(json
, JSON_C_TO_STRING_PRETTY
), VTY_NEWLINE
);
4806 json_object_free(json
);
4809 vty_out (vty
, "%s", VTY_NEWLINE
);
4814 DEFUN (show_ip_ospf_neighbor_detail
,
4815 show_ip_ospf_neighbor_detail_cmd
,
4816 "show ip ospf neighbor detail {json}",
4819 "OSPF information\n"
4821 "detail of all neighbors\n"
4822 "JavaScript Object Notation\n")
4825 u_char uj
= use_json(argc
, argv
);
4827 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4830 return show_ip_ospf_neighbor_detail_common(vty
, ospf
, uj
);
4833 DEFUN (show_ip_ospf_instance_neighbor_detail
,
4834 show_ip_ospf_instance_neighbor_detail_cmd
,
4835 "show ip ospf <1-65535> neighbor detail {json}",
4838 "OSPF information\n"
4841 "detail of all neighbors\n"
4842 "JavaScript Object Notation\n")
4845 u_short instance
= 0;
4846 u_char uj
= use_json(argc
, argv
);
4848 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4849 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
4852 return show_ip_ospf_neighbor_detail_common(vty
, ospf
, uj
);
4856 show_ip_ospf_neighbor_detail_all_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
4858 struct listnode
*node
;
4859 struct ospf_interface
*oi
;
4860 json_object
*json
= NULL
;
4863 json
= json_object_new_object();
4868 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4870 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4871 VTY_NEWLINE
, VTY_NEWLINE
);
4874 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4876 struct route_node
*rn
;
4877 struct ospf_neighbor
*nbr
;
4878 struct ospf_nbr_nbma
*nbr_nbma
;
4880 for (rn
= route_top (oi
->nbrs
); rn
; rn
= route_next (rn
))
4881 if ((nbr
= rn
->info
))
4882 if (nbr
!= oi
->nbr_self
)
4883 if (oi
->type
== OSPF_IFTYPE_NBMA
&& nbr
->state
!= NSM_Down
)
4884 show_ip_ospf_neighbor_detail_sub (vty
, oi
, rn
->info
, use_json
, json
);
4886 if (oi
->type
== OSPF_IFTYPE_NBMA
)
4888 struct listnode
*nd
;
4890 for (ALL_LIST_ELEMENTS_RO (oi
->nbr_nbma
, nd
, nbr_nbma
))
4892 if (nbr_nbma
->nbr
== NULL
|| nbr_nbma
->nbr
->state
== NSM_Down
)
4893 show_ip_ospf_nbr_nbma_detail_sub (vty
, oi
, nbr_nbma
, use_json
, json
);
4900 vty_out (vty
, "%s%s", json_object_to_json_string_ext(json
, JSON_C_TO_STRING_PRETTY
), VTY_NEWLINE
);
4901 json_object_free(json
);
4905 vty_out (vty
, "%s", VTY_NEWLINE
);
4911 DEFUN (show_ip_ospf_neighbor_detail_all
,
4912 show_ip_ospf_neighbor_detail_all_cmd
,
4913 "show ip ospf neighbor detail all {json}",
4916 "OSPF information\n"
4918 "detail of all neighbors\n"
4919 "include down status neighbor\n"
4920 "JavaScript Object Notation\n")
4923 u_char uj
= use_json(argc
, argv
);
4925 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4928 return show_ip_ospf_neighbor_detail_all_common(vty
, ospf
, uj
);
4931 DEFUN (show_ip_ospf_instance_neighbor_detail_all
,
4932 show_ip_ospf_instance_neighbor_detail_all_cmd
,
4933 "show ip ospf <1-65535> neighbor detail all {json}",
4936 "OSPF information\n"
4939 "detail of all neighbors\n"
4940 "include down status neighbor\n"
4941 "JavaScript Object Notation\n")
4944 u_short instance
= 0;
4945 u_char uj
= use_json(argc
, argv
);
4947 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4948 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4951 return show_ip_ospf_neighbor_detail_all_common(vty
, ospf
, uj
);
4955 show_ip_ospf_neighbor_int_detail_common (struct vty
*vty
, struct ospf
*ospf
,
4956 int arg_base
, const char **argv
, u_char use_json
)
4958 struct ospf_interface
*oi
;
4959 struct interface
*ifp
;
4960 struct route_node
*rn
, *nrn
;
4961 struct ospf_neighbor
*nbr
;
4962 json_object
*json
= NULL
;
4965 json
= json_object_new_object();
4970 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4972 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4973 VTY_NEWLINE
, VTY_NEWLINE
);
4976 ifp
= if_lookup_by_name (argv
[arg_base
]);
4980 vty_out (vty
, "No such interface.%s", VTY_NEWLINE
);
4984 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
4986 if ((oi
= rn
->info
))
4988 for (nrn
= route_top (oi
->nbrs
); nrn
; nrn
= route_next (nrn
))
4990 if ((nbr
= nrn
->info
))
4992 if (nbr
!= oi
->nbr_self
)
4994 if (nbr
->state
!= NSM_Down
)
4995 show_ip_ospf_neighbor_detail_sub (vty
, oi
, nbr
, use_json
, json
);
5004 vty_out (vty
, "%s%s", json_object_to_json_string_ext(json
, JSON_C_TO_STRING_PRETTY
), VTY_NEWLINE
);
5005 json_object_free(json
);
5008 vty_out (vty
, "%s", VTY_NEWLINE
);
5013 DEFUN (show_ip_ospf_neighbor_int_detail
,
5014 show_ip_ospf_neighbor_int_detail_cmd
,
5015 "show ip ospf neighbor IFNAME detail {json}",
5018 "OSPF information\n"
5021 "detail of all neighbors\n"
5022 "JavaScript Object Notation\n")
5025 u_char uj
= use_json(argc
, argv
);
5027 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
5030 return show_ip_ospf_neighbor_int_detail_common(vty
, ospf
, 0, argv
, uj
);
5033 DEFUN (show_ip_ospf_instance_neighbor_int_detail
,
5034 show_ip_ospf_instance_neighbor_int_detail_cmd
,
5035 "show ip ospf <1-65535> neighbor IFNAME detail {json}",
5038 "OSPF information\n"
5042 "detail of all neighbors\n"
5043 "JavaScript Object Notation\n")
5046 u_short instance
= 0;
5047 u_char uj
= use_json(argc
, argv
);
5049 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
5050 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
5053 return show_ip_ospf_neighbor_int_detail_common(vty
, ospf
, 1, argv
, uj
);
5056 /* Show functions */
5058 show_lsa_summary (struct vty
*vty
, struct ospf_lsa
*lsa
, int self
)
5060 struct router_lsa
*rl
;
5061 struct summary_lsa
*sl
;
5062 struct as_external_lsa
*asel
;
5063 struct prefix_ipv4 p
;
5066 /* If self option is set, check LSA self flag. */
5067 if (self
== 0 || IS_LSA_SELF (lsa
))
5069 /* LSA common part show. */
5070 vty_out (vty
, "%-15s ", inet_ntoa (lsa
->data
->id
));
5071 vty_out (vty
, "%-15s %4d 0x%08lx 0x%04x",
5072 inet_ntoa (lsa
->data
->adv_router
), LS_AGE (lsa
),
5073 (u_long
)ntohl (lsa
->data
->ls_seqnum
), ntohs (lsa
->data
->checksum
));
5074 /* LSA specific part show. */
5075 switch (lsa
->data
->type
)
5077 case OSPF_ROUTER_LSA
:
5078 rl
= (struct router_lsa
*) lsa
->data
;
5079 vty_out (vty
, " %-d", ntohs (rl
->links
));
5081 case OSPF_SUMMARY_LSA
:
5082 sl
= (struct summary_lsa
*) lsa
->data
;
5085 p
.prefix
= sl
->header
.id
;
5086 p
.prefixlen
= ip_masklen (sl
->mask
);
5087 apply_mask_ipv4 (&p
);
5089 vty_out (vty
, " %s/%d", inet_ntoa (p
.prefix
), p
.prefixlen
);
5091 case OSPF_AS_EXTERNAL_LSA
:
5092 case OSPF_AS_NSSA_LSA
:
5093 asel
= (struct as_external_lsa
*) lsa
->data
;
5096 p
.prefix
= asel
->header
.id
;
5097 p
.prefixlen
= ip_masklen (asel
->mask
);
5098 apply_mask_ipv4 (&p
);
5100 vty_out (vty
, " %s %s/%d [0x%lx]",
5101 IS_EXTERNAL_METRIC (asel
->e
[0].tos
) ? "E2" : "E1",
5102 inet_ntoa (p
.prefix
), p
.prefixlen
,
5103 (u_long
)ntohl (asel
->e
[0].route_tag
));
5105 case OSPF_NETWORK_LSA
:
5106 case OSPF_ASBR_SUMMARY_LSA
:
5107 case OSPF_OPAQUE_LINK_LSA
:
5108 case OSPF_OPAQUE_AREA_LSA
:
5109 case OSPF_OPAQUE_AS_LSA
:
5113 vty_out (vty
, VTY_NEWLINE
);
5119 static const char *show_database_desc
[] =
5122 "Router Link States",
5124 "Summary Link States",
5125 "ASBR-Summary Link States",
5126 "AS External Link States",
5127 "Group Membership LSA",
5128 "NSSA-external Link States",
5130 "Link-Local Opaque-LSA",
5131 "Area-Local Opaque-LSA",
5132 "AS-external Opaque-LSA",
5135 static const char *show_database_header
[] =
5138 "Link ID ADV Router Age Seq# CkSum Link count",
5139 "Link ID ADV Router Age Seq# CkSum",
5140 "Link ID ADV Router Age Seq# CkSum Route",
5141 "Link ID ADV Router Age Seq# CkSum",
5142 "Link ID ADV Router Age Seq# CkSum Route",
5143 " --- header for Group Member ----",
5144 "Link ID ADV Router Age Seq# CkSum Route",
5146 "Opaque-Type/Id ADV Router Age Seq# CkSum",
5147 "Opaque-Type/Id ADV Router Age Seq# CkSum",
5148 "Opaque-Type/Id ADV Router Age Seq# CkSum",
5152 show_ip_ospf_database_header (struct vty
*vty
, struct ospf_lsa
*lsa
)
5154 struct router_lsa
*rlsa
= (struct router_lsa
*) lsa
->data
;
5156 vty_out (vty
, " LS age: %d%s", LS_AGE (lsa
), VTY_NEWLINE
);
5157 vty_out (vty
, " Options: 0x%-2x : %s%s",
5159 ospf_options_dump(lsa
->data
->options
),
5161 vty_out (vty
, " LS Flags: 0x%-2x %s%s",
5163 ((lsa
->flags
& OSPF_LSA_LOCAL_XLT
) ? "(Translated from Type-7)" : ""),
5166 if (lsa
->data
->type
== OSPF_ROUTER_LSA
)
5168 vty_out (vty
, " Flags: 0x%x" , rlsa
->flags
);
5171 vty_out (vty
, " :%s%s%s%s",
5172 IS_ROUTER_LSA_BORDER (rlsa
) ? " ABR" : "",
5173 IS_ROUTER_LSA_EXTERNAL (rlsa
) ? " ASBR" : "",
5174 IS_ROUTER_LSA_VIRTUAL (rlsa
) ? " VL-endpoint" : "",
5175 IS_ROUTER_LSA_SHORTCUT (rlsa
) ? " Shortcut" : "");
5177 vty_out (vty
, "%s", VTY_NEWLINE
);
5179 vty_out (vty
, " LS Type: %s%s",
5180 LOOKUP (ospf_lsa_type_msg
, lsa
->data
->type
), VTY_NEWLINE
);
5181 vty_out (vty
, " Link State ID: %s %s%s", inet_ntoa (lsa
->data
->id
),
5182 LOOKUP (ospf_link_state_id_type_msg
, lsa
->data
->type
), VTY_NEWLINE
);
5183 vty_out (vty
, " Advertising Router: %s%s",
5184 inet_ntoa (lsa
->data
->adv_router
), VTY_NEWLINE
);
5185 vty_out (vty
, " LS Seq Number: %08lx%s", (u_long
)ntohl (lsa
->data
->ls_seqnum
),
5187 vty_out (vty
, " Checksum: 0x%04x%s", ntohs (lsa
->data
->checksum
),
5189 vty_out (vty
, " Length: %d%s", ntohs (lsa
->data
->length
), VTY_NEWLINE
);
5192 const char *link_type_desc
[] =
5195 "another Router (point-to-point)",
5196 "a Transit Network",
5201 const char *link_id_desc
[] =
5204 "Neighboring Router ID",
5205 "Designated Router address",
5207 "Neighboring Router ID",
5210 const char *link_data_desc
[] =
5213 "Router Interface address",
5214 "Router Interface address",
5216 "Router Interface address",
5219 /* Show router-LSA each Link information. */
5221 show_ip_ospf_database_router_links (struct vty
*vty
,
5222 struct router_lsa
*rl
)
5227 len
= ntohs (rl
->header
.length
) - 4;
5228 for (i
= 0; i
< ntohs (rl
->links
) && len
> 0; len
-= 12, i
++)
5230 type
= rl
->link
[i
].type
;
5232 vty_out (vty
, " Link connected to: %s%s",
5233 link_type_desc
[type
], VTY_NEWLINE
);
5234 vty_out (vty
, " (Link ID) %s: %s%s", link_id_desc
[type
],
5235 inet_ntoa (rl
->link
[i
].link_id
), VTY_NEWLINE
);
5236 vty_out (vty
, " (Link Data) %s: %s%s", link_data_desc
[type
],
5237 inet_ntoa (rl
->link
[i
].link_data
), VTY_NEWLINE
);
5238 vty_out (vty
, " Number of TOS metrics: 0%s", VTY_NEWLINE
);
5239 vty_out (vty
, " TOS 0 Metric: %d%s",
5240 ntohs (rl
->link
[i
].metric
), VTY_NEWLINE
);
5241 vty_out (vty
, "%s", VTY_NEWLINE
);
5245 /* Show router-LSA detail information. */
5247 show_router_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5251 struct router_lsa
*rl
= (struct router_lsa
*) lsa
->data
;
5253 show_ip_ospf_database_header (vty
, lsa
);
5255 vty_out (vty
, " Number of Links: %d%s%s", ntohs (rl
->links
),
5256 VTY_NEWLINE
, VTY_NEWLINE
);
5258 show_ip_ospf_database_router_links (vty
, rl
);
5259 vty_out (vty
, "%s", VTY_NEWLINE
);
5265 /* Show network-LSA detail information. */
5267 show_network_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5273 struct network_lsa
*nl
= (struct network_lsa
*) lsa
->data
;
5275 show_ip_ospf_database_header (vty
, lsa
);
5277 vty_out (vty
, " Network Mask: /%d%s",
5278 ip_masklen (nl
->mask
), VTY_NEWLINE
);
5280 length
= ntohs (lsa
->data
->length
) - OSPF_LSA_HEADER_SIZE
- 4;
5282 for (i
= 0; length
> 0; i
++, length
-= 4)
5283 vty_out (vty
, " Attached Router: %s%s",
5284 inet_ntoa (nl
->routers
[i
]), VTY_NEWLINE
);
5286 vty_out (vty
, "%s", VTY_NEWLINE
);
5292 /* Show summary-LSA detail information. */
5294 show_summary_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5298 struct summary_lsa
*sl
= (struct summary_lsa
*) lsa
->data
;
5300 show_ip_ospf_database_header (vty
, lsa
);
5302 vty_out (vty
, " Network Mask: /%d%s", ip_masklen (sl
->mask
),
5304 vty_out (vty
, " TOS: 0 Metric: %d%s", GET_METRIC (sl
->metric
),
5306 vty_out (vty
, "%s", VTY_NEWLINE
);
5312 /* Show summary-ASBR-LSA detail information. */
5314 show_summary_asbr_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5318 struct summary_lsa
*sl
= (struct summary_lsa
*) lsa
->data
;
5320 show_ip_ospf_database_header (vty
, lsa
);
5322 vty_out (vty
, " Network Mask: /%d%s",
5323 ip_masklen (sl
->mask
), VTY_NEWLINE
);
5324 vty_out (vty
, " TOS: 0 Metric: %d%s", GET_METRIC (sl
->metric
),
5326 vty_out (vty
, "%s", VTY_NEWLINE
);
5332 /* Show AS-external-LSA detail information. */
5334 show_as_external_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5338 struct as_external_lsa
*al
= (struct as_external_lsa
*) lsa
->data
;
5340 show_ip_ospf_database_header (vty
, lsa
);
5342 vty_out (vty
, " Network Mask: /%d%s",
5343 ip_masklen (al
->mask
), VTY_NEWLINE
);
5344 vty_out (vty
, " Metric Type: %s%s",
5345 IS_EXTERNAL_METRIC (al
->e
[0].tos
) ?
5346 "2 (Larger than any link state path)" : "1", VTY_NEWLINE
);
5347 vty_out (vty
, " TOS: 0%s", VTY_NEWLINE
);
5348 vty_out (vty
, " Metric: %d%s",
5349 GET_METRIC (al
->e
[0].metric
), VTY_NEWLINE
);
5350 vty_out (vty
, " Forward Address: %s%s",
5351 inet_ntoa (al
->e
[0].fwd_addr
), VTY_NEWLINE
);
5353 vty_out (vty
, " External Route Tag: %lu%s%s",
5354 (u_long
)ntohl (al
->e
[0].route_tag
), VTY_NEWLINE
, VTY_NEWLINE
);
5362 show_as_external_lsa_stdvty (struct ospf_lsa
*lsa
)
5364 struct as_external_lsa
*al
= (struct as_external_lsa
*) lsa
->data
;
5366 /* show_ip_ospf_database_header (vty, lsa); */
5368 zlog_debug( " Network Mask: /%d%s",
5369 ip_masklen (al
->mask
), "\n");
5370 zlog_debug( " Metric Type: %s%s",
5371 IS_EXTERNAL_METRIC (al
->e
[0].tos
) ?
5372 "2 (Larger than any link state path)" : "1", "\n");
5373 zlog_debug( " TOS: 0%s", "\n");
5374 zlog_debug( " Metric: %d%s",
5375 GET_METRIC (al
->e
[0].metric
), "\n");
5376 zlog_debug( " Forward Address: %s%s",
5377 inet_ntoa (al
->e
[0].fwd_addr
), "\n");
5379 zlog_debug( " External Route Tag: %u%s%s",
5380 ntohl (al
->e
[0].route_tag
), "\n", "\n");
5386 /* Show AS-NSSA-LSA detail information. */
5388 show_as_nssa_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5392 struct as_external_lsa
*al
= (struct as_external_lsa
*) lsa
->data
;
5394 show_ip_ospf_database_header (vty
, lsa
);
5396 vty_out (vty
, " Network Mask: /%d%s",
5397 ip_masklen (al
->mask
), VTY_NEWLINE
);
5398 vty_out (vty
, " Metric Type: %s%s",
5399 IS_EXTERNAL_METRIC (al
->e
[0].tos
) ?
5400 "2 (Larger than any link state path)" : "1", VTY_NEWLINE
);
5401 vty_out (vty
, " TOS: 0%s", VTY_NEWLINE
);
5402 vty_out (vty
, " Metric: %d%s",
5403 GET_METRIC (al
->e
[0].metric
), VTY_NEWLINE
);
5404 vty_out (vty
, " NSSA: Forward Address: %s%s",
5405 inet_ntoa (al
->e
[0].fwd_addr
), VTY_NEWLINE
);
5407 vty_out (vty
, " External Route Tag: %u%s%s",
5408 ntohl (al
->e
[0].route_tag
), VTY_NEWLINE
, VTY_NEWLINE
);
5415 show_func_dummy (struct vty
*vty
, struct ospf_lsa
*lsa
)
5421 show_opaque_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5425 show_ip_ospf_database_header (vty
, lsa
);
5426 show_opaque_info_detail (vty
, lsa
);
5428 vty_out (vty
, "%s", VTY_NEWLINE
);
5433 int (*show_function
[])(struct vty
*, struct ospf_lsa
*) =
5436 show_router_lsa_detail
,
5437 show_network_lsa_detail
,
5438 show_summary_lsa_detail
,
5439 show_summary_asbr_lsa_detail
,
5440 show_as_external_lsa_detail
,
5442 show_as_nssa_lsa_detail
, /* almost same as external */
5444 show_opaque_lsa_detail
,
5445 show_opaque_lsa_detail
,
5446 show_opaque_lsa_detail
,
5450 show_lsa_prefix_set (struct vty
*vty
, struct prefix_ls
*lp
, struct in_addr
*id
,
5451 struct in_addr
*adv_router
)
5453 memset (lp
, 0, sizeof (struct prefix_ls
));
5457 else if (adv_router
== NULL
)
5466 lp
->adv_router
= *adv_router
;
5471 show_lsa_detail_proc (struct vty
*vty
, struct route_table
*rt
,
5472 struct in_addr
*id
, struct in_addr
*adv_router
)
5474 struct prefix_ls lp
;
5475 struct route_node
*rn
, *start
;
5476 struct ospf_lsa
*lsa
;
5478 show_lsa_prefix_set (vty
, &lp
, id
, adv_router
);
5479 start
= route_node_get (rt
, (struct prefix
*) &lp
);
5482 route_lock_node (start
);
5483 for (rn
= start
; rn
; rn
= route_next_until (rn
, start
))
5484 if ((lsa
= rn
->info
))
5486 if (show_function
[lsa
->data
->type
] != NULL
)
5487 show_function
[lsa
->data
->type
] (vty
, lsa
);
5489 route_unlock_node (start
);
5493 /* Show detail LSA information
5494 -- if id is NULL then show all LSAs. */
5496 show_lsa_detail (struct vty
*vty
, struct ospf
*ospf
, int type
,
5497 struct in_addr
*id
, struct in_addr
*adv_router
)
5499 struct listnode
*node
;
5500 struct ospf_area
*area
;
5504 case OSPF_AS_EXTERNAL_LSA
:
5505 case OSPF_OPAQUE_AS_LSA
:
5506 vty_out (vty
, " %s %s%s",
5507 show_database_desc
[type
],
5508 VTY_NEWLINE
, VTY_NEWLINE
);
5509 show_lsa_detail_proc (vty
, AS_LSDB (ospf
, type
), id
, adv_router
);
5512 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
5514 vty_out (vty
, "%s %s (Area %s)%s%s",
5515 VTY_NEWLINE
, show_database_desc
[type
],
5516 ospf_area_desc_string (area
), VTY_NEWLINE
, VTY_NEWLINE
);
5517 show_lsa_detail_proc (vty
, AREA_LSDB (area
, type
), id
, adv_router
);
5524 show_lsa_detail_adv_router_proc (struct vty
*vty
, struct route_table
*rt
,
5525 struct in_addr
*adv_router
)
5527 struct route_node
*rn
;
5528 struct ospf_lsa
*lsa
;
5530 for (rn
= route_top (rt
); rn
; rn
= route_next (rn
))
5531 if ((lsa
= rn
->info
))
5532 if (IPV4_ADDR_SAME (adv_router
, &lsa
->data
->adv_router
))
5534 if (CHECK_FLAG (lsa
->flags
, OSPF_LSA_LOCAL_XLT
))
5536 if (show_function
[lsa
->data
->type
] != NULL
)
5537 show_function
[lsa
->data
->type
] (vty
, lsa
);
5541 /* Show detail LSA information. */
5543 show_lsa_detail_adv_router (struct vty
*vty
, struct ospf
*ospf
, int type
,
5544 struct in_addr
*adv_router
)
5546 struct listnode
*node
;
5547 struct ospf_area
*area
;
5551 case OSPF_AS_EXTERNAL_LSA
:
5552 case OSPF_OPAQUE_AS_LSA
:
5553 vty_out (vty
, " %s %s%s",
5554 show_database_desc
[type
],
5555 VTY_NEWLINE
, VTY_NEWLINE
);
5556 show_lsa_detail_adv_router_proc (vty
, AS_LSDB (ospf
, type
),
5560 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
5562 vty_out (vty
, "%s %s (Area %s)%s%s",
5563 VTY_NEWLINE
, show_database_desc
[type
],
5564 ospf_area_desc_string (area
), VTY_NEWLINE
, VTY_NEWLINE
);
5565 show_lsa_detail_adv_router_proc (vty
, AREA_LSDB (area
, type
),
5573 show_ip_ospf_database_summary (struct vty
*vty
, struct ospf
*ospf
, int self
)
5575 struct ospf_lsa
*lsa
;
5576 struct route_node
*rn
;
5577 struct ospf_area
*area
;
5578 struct listnode
*node
;
5581 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
5583 for (type
= OSPF_MIN_LSA
; type
< OSPF_MAX_LSA
; type
++)
5587 case OSPF_AS_EXTERNAL_LSA
:
5588 case OSPF_OPAQUE_AS_LSA
:
5593 if (ospf_lsdb_count_self (area
->lsdb
, type
) > 0 ||
5594 (!self
&& ospf_lsdb_count (area
->lsdb
, type
) > 0))
5596 vty_out (vty
, " %s (Area %s)%s%s",
5597 show_database_desc
[type
],
5598 ospf_area_desc_string (area
),
5599 VTY_NEWLINE
, VTY_NEWLINE
);
5600 vty_out (vty
, "%s%s", show_database_header
[type
], VTY_NEWLINE
);
5602 LSDB_LOOP (AREA_LSDB (area
, type
), rn
, lsa
)
5603 show_lsa_summary (vty
, lsa
, self
);
5605 vty_out (vty
, "%s", VTY_NEWLINE
);
5610 for (type
= OSPF_MIN_LSA
; type
< OSPF_MAX_LSA
; type
++)
5614 case OSPF_AS_EXTERNAL_LSA
:
5615 case OSPF_OPAQUE_AS_LSA
:
5620 if (ospf_lsdb_count_self (ospf
->lsdb
, type
) ||
5621 (!self
&& ospf_lsdb_count (ospf
->lsdb
, type
)))
5623 vty_out (vty
, " %s%s%s",
5624 show_database_desc
[type
],
5625 VTY_NEWLINE
, VTY_NEWLINE
);
5626 vty_out (vty
, "%s%s", show_database_header
[type
],
5629 LSDB_LOOP (AS_LSDB (ospf
, type
), rn
, lsa
)
5630 show_lsa_summary (vty
, lsa
, self
);
5632 vty_out (vty
, "%s", VTY_NEWLINE
);
5636 vty_out (vty
, "%s", VTY_NEWLINE
);
5640 show_ip_ospf_database_maxage (struct vty
*vty
, struct ospf
*ospf
)
5642 struct route_node
*rn
;
5644 vty_out (vty
, "%s MaxAge Link States:%s%s",
5645 VTY_NEWLINE
, VTY_NEWLINE
, VTY_NEWLINE
);
5647 for (rn
= route_top (ospf
->maxage_lsa
); rn
; rn
= route_next (rn
))
5649 struct ospf_lsa
*lsa
;
5651 if ((lsa
= rn
->info
) != NULL
)
5653 vty_out (vty
, "Link type: %d%s", lsa
->data
->type
, VTY_NEWLINE
);
5654 vty_out (vty
, "Link State ID: %s%s",
5655 inet_ntoa (lsa
->data
->id
), VTY_NEWLINE
);
5656 vty_out (vty
, "Advertising Router: %s%s",
5657 inet_ntoa (lsa
->data
->adv_router
), VTY_NEWLINE
);
5658 vty_out (vty
, "LSA lock count: %d%s", lsa
->lock
, VTY_NEWLINE
);
5659 vty_out (vty
, "%s", VTY_NEWLINE
);
5664 #define OSPF_LSA_TYPE_NSSA_DESC "NSSA external link state\n"
5665 #define OSPF_LSA_TYPE_NSSA_CMD_STR "|nssa-external"
5667 #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC "Link local Opaque-LSA\n"
5668 #define OSPF_LSA_TYPE_OPAQUE_AREA_DESC "Link area Opaque-LSA\n"
5669 #define OSPF_LSA_TYPE_OPAQUE_AS_DESC "Link AS Opaque-LSA\n"
5670 #define OSPF_LSA_TYPE_OPAQUE_CMD_STR "|opaque-link|opaque-area|opaque-as"
5672 #define OSPF_LSA_TYPES_CMD_STR \
5673 "asbr-summary|external|network|router|summary" \
5674 OSPF_LSA_TYPE_NSSA_CMD_STR \
5675 OSPF_LSA_TYPE_OPAQUE_CMD_STR
5677 #define OSPF_LSA_TYPES_DESC \
5678 "ASBR summary link states\n" \
5679 "External link states\n" \
5680 "Network link states\n" \
5681 "Router link states\n" \
5682 "Network summary link states\n" \
5683 OSPF_LSA_TYPE_NSSA_DESC \
5684 OSPF_LSA_TYPE_OPAQUE_LINK_DESC \
5685 OSPF_LSA_TYPE_OPAQUE_AREA_DESC \
5686 OSPF_LSA_TYPE_OPAQUE_AS_DESC
5689 show_ip_ospf_database_common (struct vty
*vty
, struct ospf
*ospf
,
5690 int arg_base
, int argc
, const char **argv
)
5693 struct in_addr id
, adv_router
;
5696 vty_out (vty
, "%sOSPF Instance: %d%s", VTY_NEWLINE
, ospf
->instance
,
5699 vty_out (vty
, "%s OSPF Router with ID (%s)%s%s", VTY_NEWLINE
,
5700 inet_ntoa (ospf
->router_id
), VTY_NEWLINE
, VTY_NEWLINE
);
5703 if (argc
== arg_base
+ 0)
5705 show_ip_ospf_database_summary (vty
, ospf
, 0);
5709 /* Set database type to show. */
5710 if (strncmp (argv
[arg_base
+ 0], "r", 1) == 0)
5711 type
= OSPF_ROUTER_LSA
;
5712 else if (strncmp (argv
[arg_base
+ 0], "ne", 2) == 0)
5713 type
= OSPF_NETWORK_LSA
;
5714 else if (strncmp (argv
[arg_base
+ 0], "ns", 2) == 0)
5715 type
= OSPF_AS_NSSA_LSA
;
5716 else if (strncmp (argv
[arg_base
+ 0], "su", 2) == 0)
5717 type
= OSPF_SUMMARY_LSA
;
5718 else if (strncmp (argv
[arg_base
+ 0], "a", 1) == 0)
5719 type
= OSPF_ASBR_SUMMARY_LSA
;
5720 else if (strncmp (argv
[arg_base
+ 0], "e", 1) == 0)
5721 type
= OSPF_AS_EXTERNAL_LSA
;
5722 else if (strncmp (argv
[arg_base
+ 0], "se", 2) == 0)
5724 show_ip_ospf_database_summary (vty
, ospf
, 1);
5727 else if (strncmp (argv
[arg_base
+ 0], "m", 1) == 0)
5729 show_ip_ospf_database_maxage (vty
, ospf
);
5732 else if (strncmp (argv
[arg_base
+ 0], "opaque-l", 8) == 0)
5733 type
= OSPF_OPAQUE_LINK_LSA
;
5734 else if (strncmp (argv
[arg_base
+ 0], "opaque-ar", 9) == 0)
5735 type
= OSPF_OPAQUE_AREA_LSA
;
5736 else if (strncmp (argv
[arg_base
+ 0], "opaque-as", 9) == 0)
5737 type
= OSPF_OPAQUE_AS_LSA
;
5741 /* `show ip ospf database LSA'. */
5742 if (argc
== arg_base
+ 1)
5743 show_lsa_detail (vty
, ospf
, type
, NULL
, NULL
);
5744 else if (argc
>= arg_base
+ 2)
5746 ret
= inet_aton (argv
[arg_base
+ 1], &id
);
5750 /* `show ip ospf database LSA ID'. */
5751 if (argc
== arg_base
+ 2)
5752 show_lsa_detail (vty
, ospf
, type
, &id
, NULL
);
5753 /* `show ip ospf database LSA ID adv-router ADV_ROUTER'. */
5754 else if (argc
== arg_base
+ 3)
5756 if (strncmp (argv
[arg_base
+ 2], "s", 1) == 0)
5757 adv_router
= ospf
->router_id
;
5760 ret
= inet_aton (argv
[arg_base
+ 2], &adv_router
);
5764 show_lsa_detail (vty
, ospf
, type
, &id
, &adv_router
);
5771 DEFUN (show_ip_ospf_database
,
5772 show_ip_ospf_database_cmd
,
5773 "show ip ospf database",
5776 "OSPF information\n"
5777 "Database summary\n")
5781 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
5784 return (show_ip_ospf_database_common(vty
, ospf
, 0, argc
, argv
));
5787 ALIAS (show_ip_ospf_database
,
5788 show_ip_ospf_database_type_cmd
,
5789 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
"|max-age|self-originate)",
5792 "OSPF information\n"
5793 "Database summary\n"
5795 "LSAs in MaxAge list\n"
5796 "Self-originated link states\n")
5798 ALIAS (show_ip_ospf_database
,
5799 show_ip_ospf_database_type_id_cmd
,
5800 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D",
5803 "OSPF information\n"
5804 "Database summary\n"
5806 "Link State ID (as an IP address)\n")
5808 ALIAS (show_ip_ospf_database
,
5809 show_ip_ospf_database_type_id_adv_router_cmd
,
5810 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D adv-router A.B.C.D",
5813 "OSPF information\n"
5814 "Database summary\n"
5816 "Link State ID (as an IP address)\n"
5817 "Advertising Router link states\n"
5818 "Advertising Router (as an IP address)\n")
5820 ALIAS (show_ip_ospf_database
,
5821 show_ip_ospf_database_type_id_self_cmd
,
5822 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D (self-originate|)",
5825 "OSPF information\n"
5826 "Database summary\n"
5828 "Link State ID (as an IP address)\n"
5829 "Self-originated link states\n"
5832 DEFUN (show_ip_ospf_instance_database
,
5833 show_ip_ospf_instance_database_cmd
,
5834 "show ip ospf <1-65535> database",
5837 "OSPF information\n"
5839 "Database summary\n")
5842 u_short instance
= 0;
5844 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
5846 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
5849 return (show_ip_ospf_database_common(vty
, ospf
, 1, argc
, argv
));
5852 ALIAS (show_ip_ospf_instance_database
,
5853 show_ip_ospf_instance_database_type_cmd
,
5854 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
"|max-age|self-originate)",
5857 "OSPF information\n"
5859 "Database summary\n"
5861 "LSAs in MaxAge list\n"
5862 "Self-originated link states\n")
5864 ALIAS (show_ip_ospf_instance_database
,
5865 show_ip_ospf_instance_database_type_id_cmd
,
5866 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D",
5869 "OSPF information\n"
5871 "Database summary\n"
5873 "Link State ID (as an IP address)\n")
5875 ALIAS (show_ip_ospf_instance_database
,
5876 show_ip_ospf_instance_database_type_id_adv_router_cmd
,
5877 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D adv-router A.B.C.D",
5880 "OSPF information\n"
5882 "Database summary\n"
5884 "Link State ID (as an IP address)\n"
5885 "Advertising Router link states\n"
5886 "Advertising Router (as an IP address)\n")
5888 ALIAS (show_ip_ospf_instance_database
,
5889 show_ip_ospf_instance_database_type_id_self_cmd
,
5890 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D (self-originate|)",
5893 "OSPF information\n"
5895 "Database summary\n"
5897 "Link State ID (as an IP address)\n"
5898 "Self-originated link states\n"
5903 show_ip_ospf_database_type_adv_router_common (struct vty
*vty
, struct ospf
*ospf
,
5904 int arg_base
, int argc
, const char **argv
)
5907 struct in_addr adv_router
;
5910 vty_out (vty
, "%sOSPF Instance: %d%s", VTY_NEWLINE
, ospf
->instance
,
5913 vty_out (vty
, "%s OSPF Router with ID (%s)%s%s", VTY_NEWLINE
,
5914 inet_ntoa (ospf
->router_id
), VTY_NEWLINE
, VTY_NEWLINE
);
5916 if (argc
!= arg_base
+ 2)
5919 /* Set database type to show. */
5920 if (strncmp (argv
[arg_base
+ 0], "r", 1) == 0)
5921 type
= OSPF_ROUTER_LSA
;
5922 else if (strncmp (argv
[arg_base
+ 0], "ne", 2) == 0)
5923 type
= OSPF_NETWORK_LSA
;
5924 else if (strncmp (argv
[arg_base
+ 0], "ns", 2) == 0)
5925 type
= OSPF_AS_NSSA_LSA
;
5926 else if (strncmp (argv
[arg_base
+ 0], "s", 1) == 0)
5927 type
= OSPF_SUMMARY_LSA
;
5928 else if (strncmp (argv
[arg_base
+ 0], "a", 1) == 0)
5929 type
= OSPF_ASBR_SUMMARY_LSA
;
5930 else if (strncmp (argv
[arg_base
+ 0], "e", 1) == 0)
5931 type
= OSPF_AS_EXTERNAL_LSA
;
5932 else if (strncmp (argv
[arg_base
+ 0], "opaque-l", 8) == 0)
5933 type
= OSPF_OPAQUE_LINK_LSA
;
5934 else if (strncmp (argv
[arg_base
+ 0], "opaque-ar", 9) == 0)
5935 type
= OSPF_OPAQUE_AREA_LSA
;
5936 else if (strncmp (argv
[arg_base
+ 0], "opaque-as", 9) == 0)
5937 type
= OSPF_OPAQUE_AS_LSA
;
5941 /* `show ip ospf database LSA adv-router ADV_ROUTER'. */
5942 if (strncmp (argv
[arg_base
+ 1], "s", 1) == 0)
5943 adv_router
= ospf
->router_id
;
5946 ret
= inet_aton (argv
[arg_base
+ 1], &adv_router
);
5951 show_lsa_detail_adv_router (vty
, ospf
, type
, &adv_router
);
5956 DEFUN (show_ip_ospf_database_type_adv_router
,
5957 show_ip_ospf_database_type_adv_router_cmd
,
5958 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") adv-router A.B.C.D",
5961 "OSPF information\n"
5962 "Database summary\n"
5964 "Advertising Router link states\n"
5965 "Advertising Router (as an IP address)\n")
5969 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
5972 return (show_ip_ospf_database_type_adv_router_common(vty
, ospf
, 0, argc
, argv
));
5975 ALIAS (show_ip_ospf_database_type_adv_router
,
5976 show_ip_ospf_database_type_self_cmd
,
5977 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") (self-originate|)",
5980 "OSPF information\n"
5981 "Database summary\n"
5983 "Self-originated link states\n")
5985 DEFUN (show_ip_ospf_instance_database_type_adv_router
,
5986 show_ip_ospf_instance_database_type_adv_router_cmd
,
5987 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") adv-router A.B.C.D",
5990 "OSPF information\n"
5992 "Database summary\n"
5994 "Advertising Router link states\n"
5995 "Advertising Router (as an IP address)\n")
5998 u_short instance
= 0;
6000 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
6002 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
6005 return (show_ip_ospf_database_type_adv_router_common(vty
, ospf
, 1, argc
, argv
));
6008 ALIAS (show_ip_ospf_instance_database_type_adv_router
,
6009 show_ip_ospf_instance_database_type_self_cmd
,
6010 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") (self-originate|)",
6013 "OSPF information\n"
6015 "Database summary\n"
6017 "Self-originated link states\n")
6019 DEFUN (ip_ospf_authentication_args
,
6020 ip_ospf_authentication_args_addr_cmd
,
6021 "ip ospf authentication (null|message-digest) A.B.C.D",
6023 "OSPF interface commands\n"
6024 "Enable authentication on this interface\n"
6025 "Use null authentication\n"
6026 "Use message-digest authentication\n"
6027 "Address of interface")
6029 struct interface
*ifp
;
6030 struct in_addr addr
;
6032 struct ospf_if_params
*params
;
6035 params
= IF_DEF_PARAMS (ifp
);
6039 ret
= inet_aton(argv
[1], &addr
);
6042 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6047 params
= ospf_get_if_params (ifp
, addr
);
6048 ospf_if_update_params (ifp
, addr
);
6051 /* Handle null authentication */
6052 if ( argv
[0][0] == 'n' )
6054 SET_IF_PARAM (params
, auth_type
);
6055 params
->auth_type
= OSPF_AUTH_NULL
;
6059 /* Handle message-digest authentication */
6060 if ( argv
[0][0] == 'm' )
6062 SET_IF_PARAM (params
, auth_type
);
6063 params
->auth_type
= OSPF_AUTH_CRYPTOGRAPHIC
;
6067 vty_out (vty
, "You shouldn't get here!%s", VTY_NEWLINE
);
6071 ALIAS (ip_ospf_authentication_args
,
6072 ip_ospf_authentication_args_cmd
,
6073 "ip ospf authentication (null|message-digest)",
6075 "OSPF interface commands\n"
6076 "Enable authentication on this interface\n"
6077 "Use null authentication\n"
6078 "Use message-digest authentication\n")
6080 DEFUN (ip_ospf_authentication
,
6081 ip_ospf_authentication_addr_cmd
,
6082 "ip ospf authentication A.B.C.D",
6084 "OSPF interface commands\n"
6085 "Enable authentication on this interface\n"
6086 "Address of interface")
6088 struct interface
*ifp
;
6089 struct in_addr addr
;
6091 struct ospf_if_params
*params
;
6094 params
= IF_DEF_PARAMS (ifp
);
6098 ret
= inet_aton(argv
[0], &addr
);
6101 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6106 params
= ospf_get_if_params (ifp
, addr
);
6107 ospf_if_update_params (ifp
, addr
);
6110 SET_IF_PARAM (params
, auth_type
);
6111 params
->auth_type
= OSPF_AUTH_SIMPLE
;
6116 ALIAS (ip_ospf_authentication
,
6117 ip_ospf_authentication_cmd
,
6118 "ip ospf authentication",
6120 "OSPF interface commands\n"
6121 "Enable authentication on this interface\n")
6123 DEFUN (no_ip_ospf_authentication_args
,
6124 no_ip_ospf_authentication_args_addr_cmd
,
6125 "no ip ospf authentication (null|message-digest) A.B.C.D",
6128 "OSPF interface commands\n"
6129 "Enable authentication on this interface\n"
6130 "Use null authentication\n"
6131 "Use message-digest authentication\n"
6132 "Address of interface")
6134 struct interface
*ifp
;
6135 struct in_addr addr
;
6137 struct ospf_if_params
*params
;
6138 struct route_node
*rn
;
6142 params
= IF_DEF_PARAMS (ifp
);
6146 ret
= inet_aton(argv
[1], &addr
);
6149 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6154 params
= ospf_lookup_if_params (ifp
, addr
);
6157 vty_out (vty
, "Ip Address specified is unknown%s", VTY_NEWLINE
);
6160 params
->auth_type
= OSPF_AUTH_NOTSET
;
6161 UNSET_IF_PARAM (params
, auth_type
);
6162 if (params
!= IF_DEF_PARAMS (ifp
))
6164 ospf_free_if_params (ifp
, addr
);
6165 ospf_if_update_params (ifp
, addr
);
6170 if ( argv
[0][0] == 'n' )
6172 auth_type
= OSPF_AUTH_NULL
;
6174 else if ( argv
[0][0] == 'm' )
6176 auth_type
= OSPF_AUTH_CRYPTOGRAPHIC
;
6180 vty_out (vty
, "Unexpected input encountered%s", VTY_NEWLINE
);
6184 * Here we have a case where the user has entered
6185 * 'no ip ospf authentication (null | message_digest )'
6186 * we need to find if we have any ip addresses underneath it that
6187 * correspond to the associated type.
6189 if (params
->auth_type
== auth_type
)
6191 params
->auth_type
= OSPF_AUTH_NOTSET
;
6192 UNSET_IF_PARAM (params
, auth_type
);
6195 for (rn
= route_top (IF_OIFS_PARAMS (ifp
)); rn
; rn
= route_next (rn
))
6197 if ((params
= rn
->info
))
6199 if (params
->auth_type
== auth_type
)
6201 params
->auth_type
= OSPF_AUTH_NOTSET
;
6202 UNSET_IF_PARAM (params
, auth_type
);
6203 if (params
!= IF_DEF_PARAMS (ifp
))
6205 ospf_free_if_params (ifp
, rn
->p
.u
.prefix4
);
6206 ospf_if_update_params(ifp
, rn
->p
.u
.prefix4
);
6216 ALIAS (no_ip_ospf_authentication_args
,
6217 no_ip_ospf_authentication_args_cmd
,
6218 "no ip ospf authentication (null|message-digest)",
6221 "OSPF interface commands\n"
6222 "Enable authentication on this interface\n"
6223 "Use null authentication\n"
6224 "Use message-digest authentication\n")
6226 DEFUN (no_ip_ospf_authentication
,
6227 no_ip_ospf_authentication_addr_cmd
,
6228 "no ip ospf authentication A.B.C.D",
6231 "OSPF interface commands\n"
6232 "Enable authentication on this interface\n"
6233 "Address of interface")
6235 struct interface
*ifp
;
6236 struct in_addr addr
;
6238 struct ospf_if_params
*params
;
6239 struct route_node
*rn
;
6242 params
= IF_DEF_PARAMS (ifp
);
6246 ret
= inet_aton(argv
[0], &addr
);
6249 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6254 params
= ospf_lookup_if_params (ifp
, addr
);
6257 vty_out (vty
, "Ip Address specified is unknown%s", VTY_NEWLINE
);
6261 params
->auth_type
= OSPF_AUTH_NOTSET
;
6262 UNSET_IF_PARAM (params
, auth_type
);
6263 if (params
!= IF_DEF_PARAMS (ifp
))
6265 ospf_free_if_params (ifp
, addr
);
6266 ospf_if_update_params (ifp
, addr
);
6272 * When a user enters 'no ip ospf authentication'
6273 * We should remove all authentication types from
6276 if ((params
->auth_type
== OSPF_AUTH_NULL
) ||
6277 (params
->auth_type
== OSPF_AUTH_CRYPTOGRAPHIC
) ||
6278 (params
->auth_type
== OSPF_AUTH_SIMPLE
))
6280 params
->auth_type
= OSPF_AUTH_NOTSET
;
6281 UNSET_IF_PARAM (params
, auth_type
);
6284 for (rn
= route_top (IF_OIFS_PARAMS (ifp
)); rn
; rn
= route_next (rn
))
6286 if ((params
= rn
->info
))
6289 if ((params
->auth_type
== OSPF_AUTH_NULL
) ||
6290 (params
->auth_type
== OSPF_AUTH_CRYPTOGRAPHIC
) ||
6291 (params
->auth_type
== OSPF_AUTH_SIMPLE
))
6293 params
->auth_type
= OSPF_AUTH_NOTSET
;
6294 UNSET_IF_PARAM (params
, auth_type
);
6295 if (params
!= IF_DEF_PARAMS (ifp
))
6297 ospf_free_if_params (ifp
, rn
->p
.u
.prefix4
);
6298 ospf_if_update_params(ifp
, rn
->p
.u
.prefix4
);
6308 ALIAS (no_ip_ospf_authentication
,
6309 no_ip_ospf_authentication_cmd
,
6310 "no ip ospf authentication",
6313 "OSPF interface commands\n"
6314 "Enable authentication on this interface\n")
6316 DEFUN (ip_ospf_authentication_key
,
6317 ip_ospf_authentication_key_addr_cmd
,
6318 "ip ospf authentication-key AUTH_KEY A.B.C.D",
6320 "OSPF interface commands\n"
6321 "Authentication password (key)\n"
6322 "The OSPF password (key)\n"
6323 "Address of interface")
6325 struct interface
*ifp
;
6326 struct in_addr addr
;
6328 struct ospf_if_params
*params
;
6331 params
= IF_DEF_PARAMS (ifp
);
6335 ret
= inet_aton(argv
[1], &addr
);
6338 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6343 params
= ospf_get_if_params (ifp
, addr
);
6344 ospf_if_update_params (ifp
, addr
);
6347 memset (params
->auth_simple
, 0, OSPF_AUTH_SIMPLE_SIZE
+ 1);
6348 strncpy ((char *) params
->auth_simple
, argv
[0], OSPF_AUTH_SIMPLE_SIZE
);
6349 SET_IF_PARAM (params
, auth_simple
);
6354 ALIAS (ip_ospf_authentication_key
,
6355 ip_ospf_authentication_key_cmd
,
6356 "ip ospf authentication-key AUTH_KEY",
6358 "OSPF interface commands\n"
6359 "Authentication password (key)\n"
6360 "The OSPF password (key)")
6362 ALIAS_HIDDEN (ip_ospf_authentication_key
,
6363 ospf_authentication_key_cmd
,
6364 "ospf authentication-key AUTH_KEY",
6365 "OSPF interface commands\n"
6366 "Authentication password (key)\n"
6367 "The OSPF password (key)")
6369 DEFUN (no_ip_ospf_authentication_key
,
6370 no_ip_ospf_authentication_key_authkey_addr_cmd
,
6371 "no ip ospf authentication-key AUTH_KEY A.B.C.D",
6374 "OSPF interface commands\n"
6375 "Authentication password (key)\n"
6376 "The OSPF password (key)")
6378 struct interface
*ifp
;
6379 struct in_addr addr
;
6380 struct ospf_if_params
*params
;
6384 params
= IF_DEF_PARAMS (ifp
);
6388 ret
= inet_aton(argv
[1], &addr
);
6391 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6396 params
= ospf_lookup_if_params (ifp
, addr
);
6401 memset (params
->auth_simple
, 0, OSPF_AUTH_SIMPLE_SIZE
);
6402 UNSET_IF_PARAM (params
, auth_simple
);
6404 if (params
!= IF_DEF_PARAMS (ifp
))
6406 ospf_free_if_params (ifp
, addr
);
6407 ospf_if_update_params (ifp
, addr
);
6413 ALIAS (no_ip_ospf_authentication_key
,
6414 no_ip_ospf_authentication_key_authkey_cmd
,
6415 "no ip ospf authentication-key AUTH_KEY",
6418 "OSPF interface commands\n"
6419 "Authentication password (key)\n")
6421 ALIAS (no_ip_ospf_authentication_key
,
6422 no_ip_ospf_authentication_key_cmd
,
6423 "no ip ospf authentication-key",
6426 "OSPF interface commands\n"
6427 "Authentication password (key)\n")
6429 ALIAS (no_ip_ospf_authentication_key
,
6430 no_ospf_authentication_key_cmd
,
6431 "no ospf authentication-key",
6433 "OSPF interface commands\n"
6434 "Authentication password (key)\n")
6436 ALIAS (no_ip_ospf_authentication_key
,
6437 no_ospf_authentication_key_authkey_cmd
,
6438 "no ospf authentication-key AUTH_KEY",
6440 "OSPF interface commands\n"
6441 "Authentication password (key)\n"
6442 "The OSPF password (key)\n")
6444 ALIAS (no_ip_ospf_authentication_key
,
6445 no_ospf_authentication_key_authkey_ip_cmd
,
6446 "no ospf authentication-key AUTH_KEY A.B.C.D",
6448 "OSPF interface commands\n"
6449 "Authentication password (key)\n"
6450 "The OSPF password (key)\n"
6451 "Address of interface")
6453 DEFUN (ip_ospf_message_digest_key
,
6454 ip_ospf_message_digest_key_addr_cmd
,
6455 "ip ospf message-digest-key <1-255> md5 KEY A.B.C.D",
6457 "OSPF interface commands\n"
6458 "Message digest authentication password (key)\n"
6460 "Use MD5 algorithm\n"
6461 "The OSPF password (key)"
6462 "Address of interface")
6464 struct interface
*ifp
;
6465 struct crypt_key
*ck
;
6467 struct in_addr addr
;
6469 struct ospf_if_params
*params
;
6472 params
= IF_DEF_PARAMS (ifp
);
6476 ret
= inet_aton(argv
[2], &addr
);
6479 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6484 params
= ospf_get_if_params (ifp
, addr
);
6485 ospf_if_update_params (ifp
, addr
);
6488 key_id
= strtol (argv
[0], NULL
, 10);
6489 if (ospf_crypt_key_lookup (params
->auth_crypt
, key_id
) != NULL
)
6491 vty_out (vty
, "OSPF: Key %d already exists%s", key_id
, VTY_NEWLINE
);
6495 ck
= ospf_crypt_key_new ();
6496 ck
->key_id
= (u_char
) key_id
;
6497 memset (ck
->auth_key
, 0, OSPF_AUTH_MD5_SIZE
+1);
6498 strncpy ((char *) ck
->auth_key
, argv
[1], OSPF_AUTH_MD5_SIZE
);
6500 ospf_crypt_key_add (params
->auth_crypt
, ck
);
6501 SET_IF_PARAM (params
, auth_crypt
);
6506 ALIAS (ip_ospf_message_digest_key
,
6507 ip_ospf_message_digest_key_cmd
,
6508 "ip ospf message-digest-key <1-255> md5 KEY",
6510 "OSPF interface commands\n"
6511 "Message digest authentication password (key)\n"
6513 "Use MD5 algorithm\n"
6514 "The OSPF password (key)")
6516 ALIAS_HIDDEN (ip_ospf_message_digest_key
,
6517 ospf_message_digest_key_cmd
,
6518 "ospf message-digest-key <1-255> md5 KEY",
6519 "OSPF interface commands\n"
6520 "Message digest authentication password (key)\n"
6522 "Use MD5 algorithm\n"
6523 "The OSPF password (key)")
6525 DEFUN (no_ip_ospf_message_digest_key_md5
,
6526 no_ip_ospf_message_digest_key_md5_addr_cmd
,
6527 "no ip ospf message-digest-key <1-255> md5 KEY A.B.C.D",
6530 "OSPF interface commands\n"
6531 "Message digest authentication password (key)\n"
6533 "Use MD5 algorithm\n"
6534 "The OSPF password (key)"
6535 "Address of interface")
6537 struct interface
*ifp
;
6538 struct crypt_key
*ck
;
6540 struct in_addr addr
;
6542 struct ospf_if_params
*params
;
6545 params
= IF_DEF_PARAMS (ifp
);
6549 ret
= inet_aton(argv
[2], &addr
);
6552 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6557 params
= ospf_lookup_if_params (ifp
, addr
);
6562 key_id
= strtol (argv
[0], NULL
, 10);
6563 ck
= ospf_crypt_key_lookup (params
->auth_crypt
, key_id
);
6566 vty_out (vty
, "OSPF: Key %d does not exist%s", key_id
, VTY_NEWLINE
);
6570 ospf_crypt_key_delete (params
->auth_crypt
, key_id
);
6572 if (params
!= IF_DEF_PARAMS (ifp
))
6574 ospf_free_if_params (ifp
, addr
);
6575 ospf_if_update_params (ifp
, addr
);
6581 ALIAS (no_ip_ospf_message_digest_key_md5
,
6582 no_ip_ospf_message_digest_key_md5_cmd
,
6583 "no ip ospf message-digest-key <1-255> md5 KEY",
6586 "OSPF interface commands\n"
6587 "Message digest authentication password (key)\n"
6589 "Use MD5 algorithm\n"
6590 "The OSPF password (key)")
6592 DEFUN (no_ip_ospf_message_digest_key
,
6593 no_ip_ospf_message_digest_key_addr_cmd
,
6594 "no ip ospf message-digest-key <1-255> A.B.C.D",
6597 "OSPF interface commands\n"
6598 "Message digest authentication password (key)\n"
6600 "Address of interface")
6602 struct interface
*ifp
;
6603 struct crypt_key
*ck
;
6605 struct in_addr addr
;
6607 struct ospf_if_params
*params
;
6610 params
= IF_DEF_PARAMS (ifp
);
6614 ret
= inet_aton(argv
[1], &addr
);
6617 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6622 params
= ospf_lookup_if_params (ifp
, addr
);
6627 key_id
= strtol (argv
[0], NULL
, 10);
6628 ck
= ospf_crypt_key_lookup (params
->auth_crypt
, key_id
);
6631 vty_out (vty
, "OSPF: Key %d does not exist%s", key_id
, VTY_NEWLINE
);
6635 ospf_crypt_key_delete (params
->auth_crypt
, key_id
);
6637 if (params
!= IF_DEF_PARAMS (ifp
))
6639 ospf_free_if_params (ifp
, addr
);
6640 ospf_if_update_params (ifp
, addr
);
6646 ALIAS (no_ip_ospf_message_digest_key
,
6647 no_ip_ospf_message_digest_key_cmd
,
6648 "no ip ospf message-digest-key <1-255>",
6651 "OSPF interface commands\n"
6652 "Message digest authentication password (key)\n"
6655 ALIAS (no_ip_ospf_message_digest_key
,
6656 no_ospf_message_digest_key_cmd
,
6657 "no ospf message-digest-key <1-255>",
6659 "OSPF interface commands\n"
6660 "Message digest authentication password (key)\n"
6663 DEFUN (ip_ospf_cost
,
6664 ip_ospf_cost_u32_inet4_cmd
,
6665 "ip ospf cost <1-65535> A.B.C.D",
6667 "OSPF interface commands\n"
6670 "Address of interface")
6672 struct interface
*ifp
= vty
->index
;
6674 struct in_addr addr
;
6676 struct ospf_if_params
*params
;
6678 params
= IF_DEF_PARAMS (ifp
);
6680 cost
= strtol (argv
[0], NULL
, 10);
6682 /* cost range is <1-65535>. */
6683 if (cost
< 1 || cost
> 65535)
6685 vty_out (vty
, "Interface output cost is invalid%s", VTY_NEWLINE
);
6691 ret
= inet_aton(argv
[1], &addr
);
6694 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6699 params
= ospf_get_if_params (ifp
, addr
);
6700 ospf_if_update_params (ifp
, addr
);
6703 SET_IF_PARAM (params
, output_cost_cmd
);
6704 params
->output_cost_cmd
= cost
;
6706 ospf_if_recalculate_output_cost (ifp
);
6711 ALIAS (ip_ospf_cost
,
6712 ip_ospf_cost_u32_cmd
,
6713 "ip ospf cost <1-65535>",
6715 "OSPF interface commands\n"
6719 ALIAS_HIDDEN (ip_ospf_cost
,
6721 "ospf cost <1-65535>",
6722 "OSPF interface commands\n"
6726 ALIAS_HIDDEN (ip_ospf_cost
,
6727 ospf_cost_u32_inet4_cmd
,
6728 "ospf cost <1-65535> A.B.C.D",
6729 "OSPF interface commands\n"
6732 "Address of interface")
6734 DEFUN (no_ip_ospf_cost
,
6735 no_ip_ospf_cost_inet4_cmd
,
6736 "no ip ospf cost A.B.C.D",
6739 "OSPF interface commands\n"
6741 "Address of interface")
6743 struct interface
*ifp
= vty
->index
;
6744 struct in_addr addr
;
6746 struct ospf_if_params
*params
;
6749 params
= IF_DEF_PARAMS (ifp
);
6753 ret
= inet_aton(argv
[0], &addr
);
6756 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6761 params
= ospf_lookup_if_params (ifp
, addr
);
6766 UNSET_IF_PARAM (params
, output_cost_cmd
);
6768 if (params
!= IF_DEF_PARAMS (ifp
))
6770 ospf_free_if_params (ifp
, addr
);
6771 ospf_if_update_params (ifp
, addr
);
6774 ospf_if_recalculate_output_cost (ifp
);
6779 ALIAS (no_ip_ospf_cost
,
6780 no_ip_ospf_cost_cmd
,
6784 "OSPF interface commands\n"
6787 ALIAS (no_ip_ospf_cost
,
6791 "OSPF interface commands\n"
6794 ALIAS (no_ip_ospf_cost
,
6795 no_ospf_cost_inet4_cmd
,
6796 "no ospf cost A.B.C.D",
6798 "OSPF interface commands\n"
6800 "Address of interface")
6802 DEFUN (no_ip_ospf_cost2
,
6803 no_ip_ospf_cost_u32_cmd
,
6804 "no ip ospf cost <1-65535>",
6807 "OSPF interface commands\n"
6811 struct interface
*ifp
= vty
->index
;
6812 struct in_addr addr
;
6815 struct ospf_if_params
*params
;
6818 params
= IF_DEF_PARAMS (ifp
);
6820 /* According to the semantics we are mimicking "no ip ospf cost N" is
6821 * always treated as "no ip ospf cost" regardless of the actual value
6822 * of N already configured for the interface. Thus the first argument
6823 * is always checked to be a number, but is ignored after that.
6825 cost
= strtol (argv
[0], NULL
, 10);
6826 if (cost
< 1 || cost
> 65535)
6828 vty_out (vty
, "Interface output cost is invalid%s", VTY_NEWLINE
);
6834 ret
= inet_aton(argv
[1], &addr
);
6837 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6842 params
= ospf_lookup_if_params (ifp
, addr
);
6847 UNSET_IF_PARAM (params
, output_cost_cmd
);
6849 if (params
!= IF_DEF_PARAMS (ifp
))
6851 ospf_free_if_params (ifp
, addr
);
6852 ospf_if_update_params (ifp
, addr
);
6855 ospf_if_recalculate_output_cost (ifp
);
6860 ALIAS (no_ip_ospf_cost2
,
6861 no_ospf_cost_u32_cmd
,
6862 "no ospf cost <1-65535>",
6864 "OSPF interface commands\n"
6868 ALIAS (no_ip_ospf_cost2
,
6869 no_ip_ospf_cost_u32_inet4_cmd
,
6870 "no ip ospf cost <1-65535> A.B.C.D",
6873 "OSPF interface commands\n"
6876 "Address of interface")
6878 ALIAS (no_ip_ospf_cost2
,
6879 no_ospf_cost_u32_inet4_cmd
,
6880 "no ospf cost <1-65535> A.B.C.D",
6882 "OSPF interface commands\n"
6885 "Address of interface")
6888 ospf_nbr_timer_update (struct ospf_interface
*oi
)
6890 struct route_node
*rn
;
6891 struct ospf_neighbor
*nbr
;
6893 for (rn
= route_top (oi
->nbrs
); rn
; rn
= route_next (rn
))
6894 if ((nbr
= rn
->info
))
6896 nbr
->v_inactivity
= OSPF_IF_PARAM (oi
, v_wait
);
6897 nbr
->v_db_desc
= OSPF_IF_PARAM (oi
, retransmit_interval
);
6898 nbr
->v_ls_req
= OSPF_IF_PARAM (oi
, retransmit_interval
);
6899 nbr
->v_ls_upd
= OSPF_IF_PARAM (oi
, retransmit_interval
);
6904 ospf_vty_dead_interval_set (struct vty
*vty
, const char *interval_str
,
6905 const char *nbr_str
,
6906 const char *fast_hello_str
)
6908 struct interface
*ifp
= vty
->index
;
6911 struct in_addr addr
;
6913 struct ospf_if_params
*params
;
6914 struct ospf_interface
*oi
;
6915 struct route_node
*rn
;
6917 params
= IF_DEF_PARAMS (ifp
);
6921 ret
= inet_aton(nbr_str
, &addr
);
6924 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6929 params
= ospf_get_if_params (ifp
, addr
);
6930 ospf_if_update_params (ifp
, addr
);
6935 VTY_GET_INTEGER_RANGE ("Router Dead Interval", seconds
, interval_str
,
6938 /* reset fast_hello too, just to be sure */
6939 UNSET_IF_PARAM (params
, fast_hello
);
6940 params
->fast_hello
= OSPF_FAST_HELLO_DEFAULT
;
6942 else if (fast_hello_str
)
6944 VTY_GET_INTEGER_RANGE ("Hello Multiplier", hellomult
, fast_hello_str
,
6946 /* 1s dead-interval with sub-second hellos desired */
6947 seconds
= OSPF_ROUTER_DEAD_INTERVAL_MINIMAL
;
6948 SET_IF_PARAM (params
, fast_hello
);
6949 params
->fast_hello
= hellomult
;
6953 vty_out (vty
, "Please specify dead-interval or hello-multiplier%s",
6958 SET_IF_PARAM (params
, v_wait
);
6959 params
->v_wait
= seconds
;
6961 /* Update timer values in neighbor structure. */
6965 if ((ospf
= ospf_lookup()))
6967 oi
= ospf_if_lookup_by_local_addr (ospf
, ifp
, addr
);
6969 ospf_nbr_timer_update (oi
);
6974 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
6975 if ((oi
= rn
->info
))
6976 ospf_nbr_timer_update (oi
);
6983 DEFUN (ip_ospf_dead_interval
,
6984 ip_ospf_dead_interval_addr_cmd
,
6985 "ip ospf dead-interval <1-65535> A.B.C.D",
6987 "OSPF interface commands\n"
6988 "Interval after which a neighbor is declared dead\n"
6990 "Address of interface\n")
6993 return ospf_vty_dead_interval_set (vty
, argv
[0], argv
[1], NULL
);
6995 return ospf_vty_dead_interval_set (vty
, argv
[0], NULL
, NULL
);
6998 ALIAS (ip_ospf_dead_interval
,
6999 ip_ospf_dead_interval_cmd
,
7000 "ip ospf dead-interval <1-65535>",
7002 "OSPF interface commands\n"
7003 "Interval after which a neighbor is declared dead\n"
7006 ALIAS_HIDDEN (ip_ospf_dead_interval
,
7007 ospf_dead_interval_cmd
,
7008 "ospf dead-interval <1-65535>",
7009 "OSPF interface commands\n"
7010 "Interval after which a neighbor is declared dead\n"
7013 DEFUN (ip_ospf_dead_interval_minimal
,
7014 ip_ospf_dead_interval_minimal_addr_cmd
,
7015 "ip ospf dead-interval minimal hello-multiplier <1-10> A.B.C.D",
7017 "OSPF interface commands\n"
7018 "Interval after which a neighbor is declared dead\n"
7019 "Minimal 1s dead-interval with fast sub-second hellos\n"
7020 "Hello multiplier factor\n"
7021 "Number of Hellos to send each second\n"
7022 "Address of interface\n")
7025 return ospf_vty_dead_interval_set (vty
, NULL
, argv
[1], argv
[0]);
7027 return ospf_vty_dead_interval_set (vty
, NULL
, NULL
, argv
[0]);
7030 ALIAS (ip_ospf_dead_interval_minimal
,
7031 ip_ospf_dead_interval_minimal_cmd
,
7032 "ip ospf dead-interval minimal hello-multiplier <1-10>",
7034 "OSPF interface commands\n"
7035 "Interval after which a neighbor is declared dead\n"
7036 "Minimal 1s dead-interval with fast sub-second hellos\n"
7037 "Hello multiplier factor\n"
7038 "Number of Hellos to send each second\n")
7040 DEFUN (no_ip_ospf_dead_interval
,
7041 no_ip_ospf_dead_interval_addr_cmd
,
7042 "no ip ospf dead-interval <1-65535> A.B.C.D",
7045 "OSPF interface commands\n"
7046 "Interval after which a neighbor is declared dead\n"
7048 "Address of interface")
7050 struct interface
*ifp
= vty
->index
;
7051 struct in_addr addr
;
7053 struct ospf_if_params
*params
;
7054 struct ospf_interface
*oi
;
7055 struct route_node
*rn
;
7058 params
= IF_DEF_PARAMS (ifp
);
7062 ret
= inet_aton(argv
[1], &addr
);
7065 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7070 params
= ospf_lookup_if_params (ifp
, addr
);
7075 UNSET_IF_PARAM (params
, v_wait
);
7076 params
->v_wait
= OSPF_ROUTER_DEAD_INTERVAL_DEFAULT
;
7078 UNSET_IF_PARAM (params
, fast_hello
);
7079 params
->fast_hello
= OSPF_FAST_HELLO_DEFAULT
;
7081 if (params
!= IF_DEF_PARAMS (ifp
))
7083 ospf_free_if_params (ifp
, addr
);
7084 ospf_if_update_params (ifp
, addr
);
7087 /* Update timer values in neighbor structure. */
7092 if ((ospf
= ospf_lookup()))
7094 oi
= ospf_if_lookup_by_local_addr (ospf
, ifp
, addr
);
7096 ospf_nbr_timer_update (oi
);
7101 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7102 if ((oi
= rn
->info
))
7103 ospf_nbr_timer_update (oi
);
7109 ALIAS (no_ip_ospf_dead_interval
,
7110 no_ip_ospf_dead_interval_seconds_cmd
,
7111 "no ip ospf dead-interval <1-65535>",
7114 "OSPF interface commands\n"
7115 "Interval after which a neighbor is declared dead\n"
7118 ALIAS (no_ip_ospf_dead_interval
,
7119 no_ip_ospf_dead_interval_cmd
,
7120 "no ip ospf dead-interval",
7123 "OSPF interface commands\n"
7124 "Interval after which a neighbor is declared dead\n")
7126 ALIAS (no_ip_ospf_dead_interval
,
7127 no_ospf_dead_interval_cmd
,
7128 "no ospf dead-interval",
7130 "OSPF interface commands\n"
7131 "Interval after which a neighbor is declared dead\n")
7133 ALIAS (no_ip_ospf_dead_interval
,
7134 no_ip_ospf_dead_interval_minimal_addr_cmd
,
7135 "no ip ospf dead-interval minimal hello-multiplier <1-10> A.B.C.D",
7138 "OSPF interface commands\n"
7139 "Interval after which a neighbor is declared dead\n"
7140 "Minimal 1s dead-interval with fast sub-second hellos\n"
7141 "Hello multiplier factor\n"
7142 "Number of Hellos to send each second\n"
7143 "Address of interface\n")
7145 ALIAS (no_ip_ospf_dead_interval
,
7146 no_ip_ospf_dead_interval_minimal_cmd
,
7147 "no ip ospf dead-interval minimal hello-multiplier <1-10>",
7150 "OSPF interface commands\n"
7151 "Interval after which a neighbor is declared dead\n"
7152 "Minimal 1s dead-interval with fast sub-second hellos\n"
7153 "Hello multiplier factor\n"
7154 "Number of Hellos to send each second\n")
7156 DEFUN (ip_ospf_hello_interval
,
7157 ip_ospf_hello_interval_addr_cmd
,
7158 "ip ospf hello-interval <1-65535> A.B.C.D",
7160 "OSPF interface commands\n"
7161 "Time between HELLO packets\n"
7163 "Address of interface")
7165 struct interface
*ifp
= vty
->index
;
7167 struct in_addr addr
;
7169 struct ospf_if_params
*params
;
7171 params
= IF_DEF_PARAMS (ifp
);
7173 seconds
= strtol (argv
[0], NULL
, 10);
7175 /* HelloInterval range is <1-65535>. */
7176 if (seconds
< 1 || seconds
> 65535)
7178 vty_out (vty
, "Hello Interval is invalid%s", VTY_NEWLINE
);
7184 ret
= inet_aton(argv
[1], &addr
);
7187 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7192 params
= ospf_get_if_params (ifp
, addr
);
7193 ospf_if_update_params (ifp
, addr
);
7196 SET_IF_PARAM (params
, v_hello
);
7197 params
->v_hello
= seconds
;
7202 ALIAS (ip_ospf_hello_interval
,
7203 ip_ospf_hello_interval_cmd
,
7204 "ip ospf hello-interval <1-65535>",
7206 "OSPF interface commands\n"
7207 "Time between HELLO packets\n"
7210 ALIAS_HIDDEN (ip_ospf_hello_interval
,
7211 ospf_hello_interval_cmd
,
7212 "ospf hello-interval <1-65535>",
7213 "OSPF interface commands\n"
7214 "Time between HELLO packets\n"
7217 DEFUN (no_ip_ospf_hello_interval
,
7218 no_ip_ospf_hello_interval_addr_cmd
,
7219 "no ip ospf hello-interval <1-65535> A.B.C.D",
7222 "OSPF interface commands\n"
7223 "Time between HELLO packets\n"
7225 "Address of interface")
7227 struct interface
*ifp
= vty
->index
;
7228 struct in_addr addr
;
7230 struct ospf_if_params
*params
;
7233 params
= IF_DEF_PARAMS (ifp
);
7237 ret
= inet_aton(argv
[1], &addr
);
7240 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7245 params
= ospf_lookup_if_params (ifp
, addr
);
7250 UNSET_IF_PARAM (params
, v_hello
);
7251 params
->v_hello
= OSPF_HELLO_INTERVAL_DEFAULT
;
7253 if (params
!= IF_DEF_PARAMS (ifp
))
7255 ospf_free_if_params (ifp
, addr
);
7256 ospf_if_update_params (ifp
, addr
);
7262 ALIAS (no_ip_ospf_hello_interval
,
7263 no_ip_ospf_hello_interval_seconds_cmd
,
7264 "no ip ospf hello-interval <1-65535>",
7267 "OSPF interface commands\n"
7268 "Time between HELLO packets\n"
7271 ALIAS (no_ip_ospf_hello_interval
,
7272 no_ip_ospf_hello_interval_cmd
,
7273 "no ip ospf hello-interval",
7276 "OSPF interface commands\n"
7277 "Time between HELLO packets\n")
7279 ALIAS (no_ip_ospf_hello_interval
,
7280 no_ospf_hello_interval_cmd
,
7281 "no ospf hello-interval <1-65535>",
7283 "OSPF interface commands\n"
7284 "Time between HELLO packets\n"
7287 DEFUN (ip_ospf_network
,
7288 ip_ospf_network_cmd
,
7289 "ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
7291 "OSPF interface commands\n"
7293 "Specify OSPF broadcast multi-access network\n"
7294 "Specify OSPF NBMA network\n"
7295 "Specify OSPF point-to-multipoint network\n"
7296 "Specify OSPF point-to-point network\n")
7298 struct interface
*ifp
= vty
->index
;
7299 int old_type
= IF_DEF_PARAMS (ifp
)->type
;
7300 struct route_node
*rn
;
7302 if (old_type
== OSPF_IFTYPE_LOOPBACK
)
7304 vty_out (vty
, "This is a loopback interface. Can't set network type.%s", VTY_NEWLINE
);
7308 if (strncmp (argv
[0], "b", 1) == 0)
7309 IF_DEF_PARAMS (ifp
)->type
= OSPF_IFTYPE_BROADCAST
;
7310 else if (strncmp (argv
[0], "n", 1) == 0)
7311 IF_DEF_PARAMS (ifp
)->type
= OSPF_IFTYPE_NBMA
;
7312 else if (strncmp (argv
[0], "point-to-m", 10) == 0)
7313 IF_DEF_PARAMS (ifp
)->type
= OSPF_IFTYPE_POINTOMULTIPOINT
;
7314 else if (strncmp (argv
[0], "point-to-p", 10) == 0)
7315 IF_DEF_PARAMS (ifp
)->type
= OSPF_IFTYPE_POINTOPOINT
;
7317 if (IF_DEF_PARAMS (ifp
)->type
== old_type
)
7320 SET_IF_PARAM (IF_DEF_PARAMS (ifp
), type
);
7322 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7324 struct ospf_interface
*oi
= rn
->info
;
7329 oi
->type
= IF_DEF_PARAMS (ifp
)->type
;
7331 if (oi
->state
> ISM_Down
)
7333 OSPF_ISM_EVENT_EXECUTE (oi
, ISM_InterfaceDown
);
7334 OSPF_ISM_EVENT_EXECUTE (oi
, ISM_InterfaceUp
);
7341 ALIAS_HIDDEN (ip_ospf_network
,
7343 "ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
7344 "OSPF interface commands\n"
7346 "Specify OSPF broadcast multi-access network\n"
7347 "Specify OSPF NBMA network\n"
7348 "Specify OSPF point-to-multipoint network\n"
7349 "Specify OSPF point-to-point network\n")
7351 DEFUN (no_ip_ospf_network
,
7352 no_ip_ospf_network_cmd
,
7353 "no ip ospf network",
7356 "OSPF interface commands\n"
7359 struct interface
*ifp
= vty
->index
;
7360 int old_type
= IF_DEF_PARAMS (ifp
)->type
;
7361 struct route_node
*rn
;
7363 IF_DEF_PARAMS (ifp
)->type
= ospf_default_iftype(ifp
);
7365 if (IF_DEF_PARAMS (ifp
)->type
== old_type
)
7368 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7370 struct ospf_interface
*oi
= rn
->info
;
7375 oi
->type
= IF_DEF_PARAMS (ifp
)->type
;
7377 if (oi
->state
> ISM_Down
)
7379 OSPF_ISM_EVENT_EXECUTE (oi
, ISM_InterfaceDown
);
7380 OSPF_ISM_EVENT_EXECUTE (oi
, ISM_InterfaceUp
);
7387 ALIAS (no_ip_ospf_network
,
7388 no_ip_ospf_network_val_cmd
,
7389 "no ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
7392 "OSPF interface commands\n"
7394 "Specify OSPF broadcast multi-access network\n"
7395 "Specify OSPF NBMA network\n"
7396 "Specify OSPF point-to-multipoint network\n"
7397 "Specify OSPF point-to-point network\n")
7399 ALIAS (no_ip_ospf_network
,
7400 no_ospf_network_cmd
,
7403 "OSPF interface commands\n"
7406 ALIAS (no_ip_ospf_network
,
7407 no_ospf_network_val_cmd
,
7408 "no ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
7410 "OSPF interface commands\n"
7412 "Specify OSPF broadcast multi-access network\n"
7413 "Specify OSPF NBMA network\n"
7414 "Specify OSPF point-to-multipoint network\n"
7415 "Specify OSPF point-to-point network\n")
7417 DEFUN (ip_ospf_priority
,
7418 ip_ospf_priority_addr_cmd
,
7419 "ip ospf priority <0-255> A.B.C.D",
7421 "OSPF interface commands\n"
7424 "Address of interface")
7426 struct interface
*ifp
= vty
->index
;
7428 struct route_node
*rn
;
7429 struct in_addr addr
;
7431 struct ospf_if_params
*params
;
7433 params
= IF_DEF_PARAMS (ifp
);
7435 priority
= strtol (argv
[0], NULL
, 10);
7437 /* Router Priority range is <0-255>. */
7438 if (priority
< 0 || priority
> 255)
7440 vty_out (vty
, "Router Priority is invalid%s", VTY_NEWLINE
);
7446 ret
= inet_aton(argv
[1], &addr
);
7449 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7454 params
= ospf_get_if_params (ifp
, addr
);
7455 ospf_if_update_params (ifp
, addr
);
7458 SET_IF_PARAM (params
, priority
);
7459 params
->priority
= priority
;
7461 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7463 struct ospf_interface
*oi
= rn
->info
;
7469 if (PRIORITY (oi
) != OSPF_IF_PARAM (oi
, priority
))
7471 PRIORITY (oi
) = OSPF_IF_PARAM (oi
, priority
);
7472 OSPF_ISM_EVENT_SCHEDULE (oi
, ISM_NeighborChange
);
7479 ALIAS (ip_ospf_priority
,
7480 ip_ospf_priority_cmd
,
7481 "ip ospf priority <0-255>",
7483 "OSPF interface commands\n"
7487 ALIAS_HIDDEN (ip_ospf_priority
,
7489 "ospf priority <0-255>",
7490 "OSPF interface commands\n"
7494 DEFUN (no_ip_ospf_priority
,
7495 no_ip_ospf_priority_addr_cmd
,
7496 "no ip ospf priority <0-255> A.B.C.D",
7499 "OSPF interface commands\n"
7502 "Address of interface")
7504 struct interface
*ifp
= vty
->index
;
7505 struct route_node
*rn
;
7506 struct in_addr addr
;
7508 struct ospf_if_params
*params
;
7511 params
= IF_DEF_PARAMS (ifp
);
7515 ret
= inet_aton(argv
[1], &addr
);
7518 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7523 params
= ospf_lookup_if_params (ifp
, addr
);
7528 UNSET_IF_PARAM (params
, priority
);
7529 params
->priority
= OSPF_ROUTER_PRIORITY_DEFAULT
;
7531 if (params
!= IF_DEF_PARAMS (ifp
))
7533 ospf_free_if_params (ifp
, addr
);
7534 ospf_if_update_params (ifp
, addr
);
7537 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7539 struct ospf_interface
*oi
= rn
->info
;
7545 if (PRIORITY (oi
) != OSPF_IF_PARAM (oi
, priority
))
7547 PRIORITY (oi
) = OSPF_IF_PARAM (oi
, priority
);
7548 OSPF_ISM_EVENT_SCHEDULE (oi
, ISM_NeighborChange
);
7555 ALIAS (no_ip_ospf_priority
,
7556 no_ip_ospf_priority_no_param_cmd
,
7557 "no ip ospf priority",
7560 "OSPF interface commands\n"
7561 "Router priority\n");
7563 ALIAS (no_ip_ospf_priority
,
7564 no_ip_ospf_priority_cmd
,
7565 "no ip ospf priority <0-255>",
7568 "OSPF interface commands\n"
7572 ALIAS (no_ip_ospf_priority
,
7573 no_ospf_priority_cmd
,
7574 "no ospf priority <0-255>",
7576 "OSPF interface commands\n"
7581 DEFUN (ip_ospf_retransmit_interval
,
7582 ip_ospf_retransmit_interval_addr_cmd
,
7583 "ip ospf retransmit-interval <3-65535> A.B.C.D",
7585 "OSPF interface commands\n"
7586 "Time between retransmitting lost link state advertisements\n"
7588 "Address of interface")
7590 struct interface
*ifp
= vty
->index
;
7592 struct in_addr addr
;
7594 struct ospf_if_params
*params
;
7596 params
= IF_DEF_PARAMS (ifp
);
7597 seconds
= strtol (argv
[0], NULL
, 10);
7599 /* Retransmit Interval range is <3-65535>. */
7600 if (seconds
< 3 || seconds
> 65535)
7602 vty_out (vty
, "Retransmit Interval is invalid%s", VTY_NEWLINE
);
7609 ret
= inet_aton(argv
[1], &addr
);
7612 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7617 params
= ospf_get_if_params (ifp
, addr
);
7618 ospf_if_update_params (ifp
, addr
);
7621 SET_IF_PARAM (params
, retransmit_interval
);
7622 params
->retransmit_interval
= seconds
;
7627 ALIAS (ip_ospf_retransmit_interval
,
7628 ip_ospf_retransmit_interval_cmd
,
7629 "ip ospf retransmit-interval <3-65535>",
7631 "OSPF interface commands\n"
7632 "Time between retransmitting lost link state advertisements\n"
7635 ALIAS_HIDDEN (ip_ospf_retransmit_interval
,
7636 ospf_retransmit_interval_cmd
,
7637 "ospf retransmit-interval <3-65535>",
7638 "OSPF interface commands\n"
7639 "Time between retransmitting lost link state advertisements\n"
7642 DEFUN (no_ip_ospf_retransmit_interval
,
7643 no_ip_ospf_retransmit_interval_addr_cmd
,
7644 "no ip ospf retransmit-interval A.B.C.D",
7647 "OSPF interface commands\n"
7648 "Time between retransmitting lost link state advertisements\n"
7649 "Address of interface")
7651 struct interface
*ifp
= vty
->index
;
7652 struct in_addr addr
;
7654 struct ospf_if_params
*params
;
7658 params
= IF_DEF_PARAMS (ifp
);
7667 ret
= inet_aton(argv
[addr_index
], &addr
);
7670 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7675 params
= ospf_lookup_if_params (ifp
, addr
);
7680 UNSET_IF_PARAM (params
, retransmit_interval
);
7681 params
->retransmit_interval
= OSPF_RETRANSMIT_INTERVAL_DEFAULT
;
7683 if (params
!= IF_DEF_PARAMS (ifp
))
7685 ospf_free_if_params (ifp
, addr
);
7686 ospf_if_update_params (ifp
, addr
);
7692 ALIAS (no_ip_ospf_retransmit_interval
,
7693 no_ip_ospf_retransmit_interval_sec_addr_cmd
,
7694 "no ip ospf retransmit-interval <3-65535> A.B.C.D",
7697 "OSPF interface commands\n"
7698 "Time between retransmitting lost link state advertisements\n"
7700 "Address of interface")
7702 ALIAS (no_ip_ospf_retransmit_interval
,
7703 no_ip_ospf_retransmit_interval_cmd
,
7704 "no ip ospf retransmit-interval",
7707 "OSPF interface commands\n"
7708 "Time between retransmitting lost link state advertisements\n")
7710 ALIAS (no_ip_ospf_retransmit_interval
,
7711 no_ospf_retransmit_interval_cmd
,
7712 "no ospf retransmit-interval",
7714 "OSPF interface commands\n"
7715 "Time between retransmitting lost link state advertisements\n")
7717 DEFUN (no_ip_ospf_retransmit_interval_sec
,
7718 no_ip_ospf_retransmit_interval_sec_cmd
,
7719 "no ip ospf retransmit-interval <3-65535>",
7722 "OSPF interface commands\n"
7723 "Time between retransmitting lost link state advertisements\n"
7726 struct interface
*ifp
= vty
->index
;
7727 struct ospf_if_params
*params
;
7730 params
= IF_DEF_PARAMS (ifp
);
7732 UNSET_IF_PARAM (params
, retransmit_interval
);
7733 params
->retransmit_interval
= OSPF_RETRANSMIT_INTERVAL_DEFAULT
;
7739 DEFUN (ip_ospf_transmit_delay
,
7740 ip_ospf_transmit_delay_addr_cmd
,
7741 "ip ospf transmit-delay <1-65535> A.B.C.D",
7743 "OSPF interface commands\n"
7744 "Link state transmit delay\n"
7746 "Address of interface")
7748 struct interface
*ifp
= vty
->index
;
7750 struct in_addr addr
;
7752 struct ospf_if_params
*params
;
7754 params
= IF_DEF_PARAMS (ifp
);
7755 seconds
= strtol (argv
[0], NULL
, 10);
7757 /* Transmit Delay range is <1-65535>. */
7758 if (seconds
< 1 || seconds
> 65535)
7760 vty_out (vty
, "Transmit Delay is invalid%s", VTY_NEWLINE
);
7766 ret
= inet_aton(argv
[1], &addr
);
7769 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7774 params
= ospf_get_if_params (ifp
, addr
);
7775 ospf_if_update_params (ifp
, addr
);
7778 SET_IF_PARAM (params
, transmit_delay
);
7779 params
->transmit_delay
= seconds
;
7784 ALIAS (ip_ospf_transmit_delay
,
7785 ip_ospf_transmit_delay_cmd
,
7786 "ip ospf transmit-delay <1-65535>",
7788 "OSPF interface commands\n"
7789 "Link state transmit delay\n"
7792 ALIAS_HIDDEN (ip_ospf_transmit_delay
,
7793 ospf_transmit_delay_cmd
,
7794 "ospf transmit-delay <1-65535>",
7795 "OSPF interface commands\n"
7796 "Link state transmit delay\n"
7799 DEFUN (no_ip_ospf_transmit_delay
,
7800 no_ip_ospf_transmit_delay_addr_cmd
,
7801 "no ip ospf transmit-delay A.B.C.D",
7804 "OSPF interface commands\n"
7805 "Link state transmit delay\n"
7806 "Address of interface")
7808 struct interface
*ifp
= vty
->index
;
7809 struct in_addr addr
;
7811 struct ospf_if_params
*params
;
7815 params
= IF_DEF_PARAMS (ifp
);
7824 ret
= inet_aton(argv
[addr_index
], &addr
);
7827 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7832 params
= ospf_lookup_if_params (ifp
, addr
);
7837 UNSET_IF_PARAM (params
, transmit_delay
);
7838 params
->transmit_delay
= OSPF_TRANSMIT_DELAY_DEFAULT
;
7840 if (params
!= IF_DEF_PARAMS (ifp
))
7842 ospf_free_if_params (ifp
, addr
);
7843 ospf_if_update_params (ifp
, addr
);
7849 ALIAS (no_ip_ospf_transmit_delay
,
7850 no_ip_ospf_transmit_delay_sec_addr_cmd
,
7851 "no ip ospf transmit-delay <1-65535> A.B.C.D",
7854 "OSPF interface commands\n"
7855 "Link state transmit delay\n"
7857 "Address of interface")
7859 ALIAS (no_ip_ospf_transmit_delay
,
7860 no_ip_ospf_transmit_delay_cmd
,
7861 "no ip ospf transmit-delay",
7864 "OSPF interface commands\n"
7865 "Link state transmit delay\n")
7867 ALIAS (no_ip_ospf_transmit_delay
,
7868 no_ospf_transmit_delay_cmd
,
7869 "no ospf transmit-delay",
7871 "OSPF interface commands\n"
7872 "Link state transmit delay\n")
7874 DEFUN (no_ip_ospf_transmit_delay_sec
,
7875 no_ip_ospf_transmit_delay_sec_cmd
,
7876 "no ip ospf transmit-delay <1-65535>",
7879 "OSPF interface commands\n"
7880 "Link state transmit delay\n"
7882 "Address of interface")
7884 struct interface
*ifp
= vty
->index
;
7885 struct ospf_if_params
*params
;
7888 params
= IF_DEF_PARAMS (ifp
);
7890 UNSET_IF_PARAM (params
, transmit_delay
);
7891 params
->transmit_delay
= OSPF_TRANSMIT_DELAY_DEFAULT
;
7896 DEFUN (ip_ospf_area
,
7898 "ip ospf area (A.B.C.D|<0-4294967295>)",
7900 "OSPF interface commands\n"
7901 "Enable OSPF on this interface\n"
7902 "OSPF area ID in IP address format\n"
7903 "OSPF area ID as a decimal value\n")
7905 struct interface
*ifp
= vty
->index
;
7907 struct in_addr area_id
;
7909 struct ospf_if_params
*params
;
7910 struct route_node
*rn
;
7911 u_short instance
= 0;
7914 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
7916 ospf
= ospf_lookup_instance (instance
);
7919 params
= IF_DEF_PARAMS (ifp
);
7920 if (OSPF_IF_PARAM_CONFIGURED(params
, if_area
))
7922 ospf_interface_unset (ifp
);
7923 ospf
= ospf_lookup();
7924 ospf
->if_ospf_cli_count
--;
7929 ret
= ospf_str2area_id (argv
[instance
? 1 : 0], &area_id
, &format
);
7932 vty_out (vty
, "Please specify area by A.B.C.D|<0-4294967295>%s",
7936 if (memcmp (ifp
->name
, "VLINK", 5) == 0)
7938 vty_out (vty
, "Cannot enable OSPF on a virtual link.%s", VTY_NEWLINE
);
7942 params
= IF_DEF_PARAMS (ifp
);
7943 if (OSPF_IF_PARAM_CONFIGURED(params
, if_area
))
7946 "Must remove previous area config before changing ospf area %s",
7951 for (rn
= route_top (ospf
->networks
); rn
; rn
= route_next (rn
))
7953 if (rn
->info
!= NULL
)
7955 vty_out (vty
, "Please remove all network commands first.%s", VTY_NEWLINE
);
7960 /* enable ospf on this interface with area_id */
7961 ospf_interface_set (ifp
, area_id
);
7962 ospf
->if_ospf_cli_count
++;
7967 ALIAS (ip_ospf_area
,
7968 ip_ospf_instance_area_cmd
,
7969 "ip ospf <1-65535> area (A.B.C.D|<0-4294967295>)",
7971 "OSPF interface commands\n"
7973 "Enable OSPF on this interface\n"
7974 "OSPF area ID in IP address format\n"
7975 "OSPF area ID as a decimal value\n")
7977 DEFUN (no_ip_ospf_area
,
7978 no_ip_ospf_area_cmd
,
7982 "OSPF interface commands\n"
7983 "Disable OSPF on this interface\n")
7985 struct interface
*ifp
= vty
->index
;
7987 struct ospf_if_params
*params
;
7988 u_short instance
= 0;
7990 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
)
7993 params
= IF_DEF_PARAMS (ifp
);
7994 if (!OSPF_IF_PARAM_CONFIGURED(params
, if_area
))
7996 vty_out (vty
, "Can't find specified inteface area configuration.%s", VTY_NEWLINE
);
8000 ospf_interface_unset (ifp
);
8001 ospf
->if_ospf_cli_count
--;
8005 ALIAS (no_ip_ospf_area
,
8006 no_ip_ospf_area_val_cmd
,
8007 "no ip ospf area (A.B.C.D|<0-4294967295>)",
8010 "OSPF interface commands\n"
8011 "Disable OSPF on this interface\n"
8012 "OSPF area ID in IP address format\n"
8013 "OSPF area ID as a decimal value\n")
8015 DEFUN (no_ip_ospf_instance_area
,
8016 no_ip_ospf_instance_area_cmd
,
8017 "no ip ospf <1-65535> area",
8020 "OSPF interface commands\n"
8022 "Disable OSPF on this interface\n")
8024 struct interface
*ifp
= vty
->index
;
8026 struct ospf_if_params
*params
;
8027 u_short instance
= 0;
8029 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
8031 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
)
8034 params
= IF_DEF_PARAMS (ifp
);
8035 if (!OSPF_IF_PARAM_CONFIGURED(params
, if_area
))
8037 vty_out (vty
, "Can't find specified inteface area configuration.%s", VTY_NEWLINE
);
8041 ospf_interface_unset (ifp
);
8042 ospf
->if_ospf_cli_count
--;
8046 ALIAS (no_ip_ospf_instance_area
,
8047 no_ip_ospf_instance_area_val_cmd
,
8048 "no ip ospf <1-65535> area (A.B.C.D|<0-4294967295>)",
8051 "OSPF interface commands\n"
8053 "Disable OSPF on this interface\n"
8054 "OSPF area ID in IP address format\n"
8055 "OSPF area ID as a decimal value\n")
8057 DEFUN (ospf_redistribute_source
,
8058 ospf_redistribute_source_cmd
,
8059 "redistribute " QUAGGA_REDIST_STR_OSPFD
8060 " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8062 QUAGGA_REDIST_HELP_STR_OSPFD
8063 "Metric for redistributed routes\n"
8064 "OSPF default metric\n"
8065 "OSPF exterior metric type for redistributed routes\n"
8066 "Set OSPF External Type 1 metrics\n"
8067 "Set OSPF External Type 2 metrics\n"
8068 "Route map reference\n"
8069 "Pointer to route-map entries\n")
8071 struct ospf
*ospf
= vty
->index
;
8075 struct ospf_redist
*red
;
8081 return CMD_WARNING
; /* should not happen */
8086 /* Get distribute source. */
8087 source
= proto_redistnum(AFI_IP
, argv
[0]);
8088 if (source
< 0 || source
== ZEBRA_ROUTE_OSPF
)
8091 /* Get metric value. */
8092 if (argv
[1] != NULL
)
8093 if (!str2metric (argv
[1], &metric
))
8096 /* Get metric type. */
8097 if (argv
[2] != NULL
)
8098 if (!str2metric_type (argv
[2], &type
))
8101 red
= ospf_redist_add(ospf
, source
, 0);
8103 if (argv
[3] != NULL
)
8104 ospf_routemap_set (red
, argv
[3]);
8106 ospf_routemap_unset (red
);
8108 return ospf_redistribute_set (ospf
, source
, 0, type
, metric
);
8111 DEFUN (no_ospf_redistribute_source
,
8112 no_ospf_redistribute_source_cmd
,
8113 "no redistribute " QUAGGA_REDIST_STR_OSPFD
8114 " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8117 QUAGGA_REDIST_HELP_STR_OSPFD
8118 "Metric for redistributed routes\n"
8119 "OSPF default metric\n"
8120 "OSPF exterior metric type for redistributed routes\n"
8121 "Set OSPF External Type 1 metrics\n"
8122 "Set OSPF External Type 2 metrics\n"
8123 "Route map reference\n"
8124 "Pointer to route-map entries\n")
8126 struct ospf
*ospf
= vty
->index
;
8128 struct ospf_redist
*red
;
8132 source
= proto_redistnum(AFI_IP
, argv
[0]);
8133 if (source
< 0 || source
== ZEBRA_ROUTE_OSPF
)
8136 red
= ospf_redist_lookup(ospf
, source
, 0);
8140 ospf_routemap_unset (red
);
8141 return ospf_redistribute_unset (ospf
, source
, 0);
8144 DEFUN (ospf_redistribute_instance_source
,
8145 ospf_redistribute_instance_source_cmd
,
8146 "redistribute (ospf|table) <1-65535>"
8147 " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8149 "Open Shortest Path First\n"
8150 "Non-main Kernel Routing Table\n"
8151 "Instance ID/Table ID\n"
8152 "Metric for redistributed routes\n"
8153 "OSPF default metric\n"
8154 "OSPF exterior metric type for redistributed routes\n"
8155 "Set OSPF External Type 1 metrics\n"
8156 "Set OSPF External Type 2 metrics\n"
8157 "Route map reference\n"
8158 "Pointer to route-map entries\n")
8160 struct ospf
*ospf
= vty
->index
;
8165 struct ospf_redist
*red
;
8170 if (strncmp(argv
[0], "o", 1) == 0)
8171 source
= ZEBRA_ROUTE_OSPF
;
8173 source
= ZEBRA_ROUTE_TABLE
;
8175 VTY_GET_INTEGER ("Instance ID", instance
, argv
[1]);
8180 if ((source
== ZEBRA_ROUTE_OSPF
) && !ospf
->instance
)
8182 vty_out (vty
, "Instance redistribution in non-instanced OSPF not allowed%s",
8187 if ((source
== ZEBRA_ROUTE_OSPF
) && (ospf
->instance
== instance
))
8189 vty_out (vty
, "Same instance OSPF redistribution not allowed%s",
8194 /* Get metric value. */
8195 if (argv
[2] != NULL
)
8196 if (!str2metric (argv
[2], &metric
))
8199 /* Get metric type. */
8200 if (argv
[3] != NULL
)
8201 if (!str2metric_type (argv
[3], &type
))
8204 red
= ospf_redist_add(ospf
, source
, instance
);
8205 if (argv
[4] != NULL
)
8206 ospf_routemap_set (red
, argv
[4]);
8208 ospf_routemap_unset (red
);
8210 return ospf_redistribute_set (ospf
, source
, instance
, type
, metric
);
8213 DEFUN (no_ospf_redistribute_instance_source
,
8214 no_ospf_redistribute_instance_source_cmd
,
8215 "no redistribute (ospf|table) <1-65535>"
8216 " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8219 "Open Shortest Path First\n"
8220 "Non-main Kernel Routing Table\n"
8221 "Instance ID/Table Id\n"
8222 "Metric for redistributed routes\n"
8223 "OSPF default metric\n"
8224 "OSPF exterior metric type for redistributed routes\n"
8225 "Set OSPF External Type 1 metrics\n"
8226 "Set OSPF External Type 2 metrics\n"
8227 "Route map reference\n"
8228 "Pointer to route-map entries\n")
8230 struct ospf
*ospf
= vty
->index
;
8232 struct ospf_redist
*red
;
8238 if (strncmp(argv
[0], "o", 1) == 0)
8239 source
= ZEBRA_ROUTE_OSPF
;
8241 source
= ZEBRA_ROUTE_TABLE
;
8243 VTY_GET_INTEGER ("Instance ID", instance
, argv
[1]);
8245 if ((source
== ZEBRA_ROUTE_OSPF
) && !ospf
->instance
)
8247 vty_out (vty
, "Instance redistribution in non-instanced OSPF not allowed%s",
8252 if ((source
== ZEBRA_ROUTE_OSPF
) && (ospf
->instance
== instance
))
8254 vty_out (vty
, "Same instance OSPF redistribution not allowed%s",
8259 red
= ospf_redist_lookup(ospf
, source
, instance
);
8263 ospf_routemap_unset (red
);
8264 return ospf_redistribute_unset (ospf
, source
, instance
);
8267 DEFUN (ospf_distribute_list_out
,
8268 ospf_distribute_list_out_cmd
,
8269 "distribute-list WORD out " QUAGGA_REDIST_STR_OSPFD
,
8270 "Filter networks in routing updates\n"
8271 "Access-list name\n"
8273 QUAGGA_REDIST_HELP_STR_OSPFD
)
8275 struct ospf
*ospf
= vty
->index
;
8281 /* Get distribute source. */
8282 source
= proto_redistnum(AFI_IP
, argv
[1]);
8283 if (source
< 0 || source
== ZEBRA_ROUTE_OSPF
)
8286 return ospf_distribute_list_out_set (ospf
, source
, argv
[0]);
8289 DEFUN (no_ospf_distribute_list_out
,
8290 no_ospf_distribute_list_out_cmd
,
8291 "no distribute-list WORD out " QUAGGA_REDIST_STR_OSPFD
,
8293 "Filter networks in routing updates\n"
8294 "Access-list name\n"
8296 QUAGGA_REDIST_HELP_STR_OSPFD
)
8298 struct ospf
*ospf
= vty
->index
;
8304 source
= proto_redistnum(AFI_IP
, argv
[1]);
8305 if (source
< 0 || source
== ZEBRA_ROUTE_OSPF
)
8308 return ospf_distribute_list_out_unset (ospf
, source
, argv
[0]);
8311 /* Default information originate. */
8312 DEFUN (ospf_default_information_originate
,
8313 ospf_default_information_originate_cmd
,
8314 "default-information originate "
8315 "{always|metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8316 "Control distribution of default information\n"
8317 "Distribute a default route\n"
8318 "Always advertise default route\n"
8319 "OSPF default metric\n"
8321 "OSPF metric type for default routes\n"
8322 "Set OSPF External Type 1 metrics\n"
8323 "Set OSPF External Type 2 metrics\n"
8324 "Route map reference\n"
8325 "Pointer to route-map entries\n")
8327 struct ospf
*ospf
= vty
->index
;
8328 int default_originate
= DEFAULT_ORIGINATE_ZEBRA
;
8331 struct ospf_redist
*red
;
8337 return CMD_WARNING
; /* this should not happen */
8339 /* Check whether "always" was specified */
8340 if (argv
[0] != NULL
)
8341 default_originate
= DEFAULT_ORIGINATE_ALWAYS
;
8343 red
= ospf_redist_add(ospf
, DEFAULT_ROUTE
, 0);
8345 /* Get metric value. */
8346 if (argv
[1] != NULL
)
8347 if (!str2metric (argv
[1], &metric
))
8350 /* Get metric type. */
8351 if (argv
[2] != NULL
)
8352 if (!str2metric_type (argv
[2], &type
))
8355 if (argv
[3] != NULL
)
8356 ospf_routemap_set (red
, argv
[3]);
8358 ospf_routemap_unset (red
);
8360 return ospf_redistribute_default_set (ospf
, default_originate
,
8364 DEFUN (no_ospf_default_information_originate
,
8365 no_ospf_default_information_originate_cmd
,
8366 "no default-information originate"
8367 "{always|metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8369 "Control distribution of default information\n"
8370 "Distribute a default route\n"
8371 "Always advertise default route\n"
8372 "OSPF default metric\n"
8374 "OSPF metric type for default routes\n"
8375 "Set OSPF External Type 1 metrics\n"
8376 "Set OSPF External Type 2 metrics\n"
8377 "Route map reference\n"
8378 "Pointer to route-map entries\n")
8380 struct ospf
*ospf
= vty
->index
;
8381 struct prefix_ipv4 p
;
8382 struct ospf_external
*ext
;
8383 struct ospf_redist
*red
;
8389 p
.prefix
.s_addr
= 0;
8392 ospf_external_lsa_flush (ospf
, DEFAULT_ROUTE
, &p
, 0);
8394 if ((ext
= ospf_external_lookup(DEFAULT_ROUTE
, 0)) &&
8395 EXTERNAL_INFO (ext
)) {
8396 ospf_external_info_delete (DEFAULT_ROUTE
, 0, p
);
8397 ospf_external_del (DEFAULT_ROUTE
, 0);
8400 red
= ospf_redist_lookup(ospf
, DEFAULT_ROUTE
, 0);
8404 ospf_routemap_unset (red
);
8405 return ospf_redistribute_default_unset (ospf
);
8408 DEFUN (ospf_default_metric
,
8409 ospf_default_metric_cmd
,
8410 "default-metric <0-16777214>",
8411 "Set metric of redistributed routes\n"
8414 struct ospf
*ospf
= vty
->index
;
8420 if (!str2metric (argv
[0], &metric
))
8423 ospf
->default_metric
= metric
;
8428 DEFUN (no_ospf_default_metric
,
8429 no_ospf_default_metric_cmd
,
8430 "no default-metric",
8432 "Set metric of redistributed routes\n")
8434 struct ospf
*ospf
= vty
->index
;
8439 ospf
->default_metric
= -1;
8444 ALIAS (no_ospf_default_metric
,
8445 no_ospf_default_metric_val_cmd
,
8446 "no default-metric <0-16777214>",
8448 "Set metric of redistributed routes\n"
8451 DEFUN (ospf_distance
,
8454 "Define an administrative distance\n"
8455 "OSPF Administrative distance\n")
8457 struct ospf
*ospf
= vty
->index
;
8462 ospf
->distance_all
= atoi (argv
[0]);
8467 DEFUN (no_ospf_distance
,
8468 no_ospf_distance_cmd
,
8469 "no distance <1-255>",
8471 "Define an administrative distance\n"
8472 "OSPF Administrative distance\n")
8474 struct ospf
*ospf
= vty
->index
;
8479 ospf
->distance_all
= 0;
8484 DEFUN (no_ospf_distance_ospf
,
8485 no_ospf_distance_ospf_cmd
,
8486 "no distance ospf {intra-area <1-255>|inter-area <1-255>|external <1-255>}",
8488 "Define an administrative distance\n"
8489 "OSPF Administrative distance\n"
8490 "Intra-area routes\n"
8491 "Distance for intra-area routes\n"
8492 "Inter-area routes\n"
8493 "Distance for inter-area routes\n"
8495 "Distance for external routes\n")
8497 struct ospf
*ospf
= vty
->index
;
8508 if (argv
[0] != NULL
)
8509 ospf
->distance_intra
= 0;
8511 if (argv
[1] != NULL
)
8512 ospf
->distance_inter
= 0;
8514 if (argv
[2] != NULL
)
8515 ospf
->distance_external
= 0;
8517 if (argv
[0] || argv
[1] || argv
[2])
8520 /* If no arguments are given, clear all distance information */
8521 ospf
->distance_intra
= 0;
8522 ospf
->distance_inter
= 0;
8523 ospf
->distance_external
= 0;
8528 DEFUN (ospf_distance_ospf
,
8529 ospf_distance_ospf_cmd
,
8531 "{intra-area <1-255>|inter-area <1-255>|external <1-255>}",
8532 "Define an administrative distance\n"
8533 "OSPF Administrative distance\n"
8534 "Intra-area routes\n"
8535 "Distance for intra-area routes\n"
8536 "Inter-area routes\n"
8537 "Distance for inter-area routes\n"
8539 "Distance for external routes\n")
8541 struct ospf
*ospf
= vty
->index
;
8546 if (argc
< 3) /* should not happen */
8549 if (!argv
[0] && !argv
[1] && !argv
[2])
8551 vty_out(vty
, "%% Command incomplete. (Arguments required)%s",
8556 if (argv
[0] != NULL
)
8557 ospf
->distance_intra
= atoi(argv
[0]);
8559 if (argv
[1] != NULL
)
8560 ospf
->distance_inter
= atoi(argv
[1]);
8562 if (argv
[2] != NULL
)
8563 ospf
->distance_external
= atoi(argv
[2]);
8568 DEFUN (ospf_distance_source
,
8569 ospf_distance_source_cmd
,
8570 "distance <1-255> A.B.C.D/M",
8571 "Administrative distance\n"
8573 "IP source prefix\n")
8575 struct ospf
*ospf
= vty
->index
;
8580 ospf_distance_set (vty
, ospf
, argv
[0], argv
[1], NULL
);
8585 DEFUN (no_ospf_distance_source
,
8586 no_ospf_distance_source_cmd
,
8587 "no distance <1-255> A.B.C.D/M",
8589 "Administrative distance\n"
8591 "IP source prefix\n")
8593 struct ospf
*ospf
= vty
->index
;
8598 ospf_distance_unset (vty
, ospf
, argv
[0], argv
[1], NULL
);
8603 DEFUN (ospf_distance_source_access_list
,
8604 ospf_distance_source_access_list_cmd
,
8605 "distance <1-255> A.B.C.D/M WORD",
8606 "Administrative distance\n"
8608 "IP source prefix\n"
8609 "Access list name\n")
8611 struct ospf
*ospf
= vty
->index
;
8616 ospf_distance_set (vty
, ospf
, argv
[0], argv
[1], argv
[2]);
8621 DEFUN (no_ospf_distance_source_access_list
,
8622 no_ospf_distance_source_access_list_cmd
,
8623 "no distance <1-255> A.B.C.D/M WORD",
8625 "Administrative distance\n"
8627 "IP source prefix\n"
8628 "Access list name\n")
8630 struct ospf
*ospf
= vty
->index
;
8635 ospf_distance_unset (vty
, ospf
, argv
[0], argv
[1], argv
[2]);
8640 DEFUN (ip_ospf_mtu_ignore
,
8641 ip_ospf_mtu_ignore_addr_cmd
,
8642 "ip ospf mtu-ignore A.B.C.D",
8644 "OSPF interface commands\n"
8645 "Disable mtu mismatch detection\n"
8646 "Address of interface")
8648 struct interface
*ifp
= vty
->index
;
8649 struct in_addr addr
;
8652 struct ospf_if_params
*params
;
8653 params
= IF_DEF_PARAMS (ifp
);
8657 ret
= inet_aton(argv
[0], &addr
);
8660 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
8664 params
= ospf_get_if_params (ifp
, addr
);
8665 ospf_if_update_params (ifp
, addr
);
8667 params
->mtu_ignore
= 1;
8668 if (params
->mtu_ignore
!= OSPF_MTU_IGNORE_DEFAULT
)
8669 SET_IF_PARAM (params
, mtu_ignore
);
8672 UNSET_IF_PARAM (params
, mtu_ignore
);
8673 if (params
!= IF_DEF_PARAMS (ifp
))
8675 ospf_free_if_params (ifp
, addr
);
8676 ospf_if_update_params (ifp
, addr
);
8682 ALIAS (ip_ospf_mtu_ignore
,
8683 ip_ospf_mtu_ignore_cmd
,
8684 "ip ospf mtu-ignore",
8686 "OSPF interface commands\n"
8687 "Disable mtu mismatch detection\n")
8690 DEFUN (no_ip_ospf_mtu_ignore
,
8691 no_ip_ospf_mtu_ignore_addr_cmd
,
8692 "no ip ospf mtu-ignore A.B.C.D",
8694 "OSPF interface commands\n"
8695 "Disable mtu mismatch detection\n"
8696 "Address of interface")
8698 struct interface
*ifp
= vty
->index
;
8699 struct in_addr addr
;
8702 struct ospf_if_params
*params
;
8703 params
= IF_DEF_PARAMS (ifp
);
8707 ret
= inet_aton(argv
[0], &addr
);
8710 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
8714 params
= ospf_get_if_params (ifp
, addr
);
8715 ospf_if_update_params (ifp
, addr
);
8717 params
->mtu_ignore
= 0;
8718 if (params
->mtu_ignore
!= OSPF_MTU_IGNORE_DEFAULT
)
8719 SET_IF_PARAM (params
, mtu_ignore
);
8722 UNSET_IF_PARAM (params
, mtu_ignore
);
8723 if (params
!= IF_DEF_PARAMS (ifp
))
8725 ospf_free_if_params (ifp
, addr
);
8726 ospf_if_update_params (ifp
, addr
);
8732 ALIAS (no_ip_ospf_mtu_ignore
,
8733 no_ip_ospf_mtu_ignore_cmd
,
8734 "no ip ospf mtu-ignore",
8736 "OSPF interface commands\n"
8737 "Disable mtu mismatch detection\n")
8739 DEFUN (ospf_max_metric_router_lsa_admin
,
8740 ospf_max_metric_router_lsa_admin_cmd
,
8741 "max-metric router-lsa administrative",
8742 "OSPF maximum / infinite-distance metric\n"
8743 "Advertise own Router-LSA with infinite distance (stub router)\n"
8744 "Administratively applied, for an indefinite period\n")
8746 struct listnode
*ln
;
8747 struct ospf_area
*area
;
8748 struct ospf
*ospf
= vty
->index
;
8753 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, ln
, area
))
8755 SET_FLAG (area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
);
8757 if (!CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
))
8758 ospf_router_lsa_update_area (area
);
8761 /* Allows for areas configured later to get the property */
8762 ospf
->stub_router_admin_set
= OSPF_STUB_ROUTER_ADMINISTRATIVE_SET
;
8767 DEFUN (no_ospf_max_metric_router_lsa_admin
,
8768 no_ospf_max_metric_router_lsa_admin_cmd
,
8769 "no max-metric router-lsa administrative",
8771 "OSPF maximum / infinite-distance metric\n"
8772 "Advertise own Router-LSA with infinite distance (stub router)\n"
8773 "Administratively applied, for an indefinite period\n")
8775 struct listnode
*ln
;
8776 struct ospf_area
*area
;
8777 struct ospf
*ospf
= vty
->index
;
8782 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, ln
, area
))
8784 UNSET_FLAG (area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
);
8786 /* Don't trample on the start-up stub timer */
8787 if (CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
)
8788 && !area
->t_stub_router
)
8790 UNSET_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
);
8791 ospf_router_lsa_update_area (area
);
8794 ospf
->stub_router_admin_set
= OSPF_STUB_ROUTER_ADMINISTRATIVE_UNSET
;
8798 DEFUN (ospf_max_metric_router_lsa_startup
,
8799 ospf_max_metric_router_lsa_startup_cmd
,
8800 "max-metric router-lsa on-startup <5-86400>",
8801 "OSPF maximum / infinite-distance metric\n"
8802 "Advertise own Router-LSA with infinite distance (stub router)\n"
8803 "Automatically advertise stub Router-LSA on startup of OSPF\n"
8804 "Time (seconds) to advertise self as stub-router\n")
8806 unsigned int seconds
;
8807 struct ospf
*ospf
= vty
->index
;
8814 vty_out (vty
, "%% Must supply stub-router period");
8818 VTY_GET_INTEGER ("stub-router startup period", seconds
, argv
[0]);
8820 ospf
->stub_router_startup_time
= seconds
;
8825 DEFUN (no_ospf_max_metric_router_lsa_startup
,
8826 no_ospf_max_metric_router_lsa_startup_cmd
,
8827 "no max-metric router-lsa on-startup <5-86400>",
8829 "OSPF maximum / infinite-distance metric\n"
8830 "Advertise own Router-LSA with infinite distance (stub router)\n"
8831 "Automatically advertise stub Router-LSA on startup of OSPF\n"
8832 "Time (seconds) to advertise self as stub-router\n")
8834 struct listnode
*ln
;
8835 struct ospf_area
*area
;
8836 struct ospf
*ospf
= vty
->index
;
8841 ospf
->stub_router_startup_time
= OSPF_STUB_ROUTER_UNCONFIGURED
;
8843 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, ln
, area
))
8845 SET_FLAG (area
->stub_router_state
, OSPF_AREA_WAS_START_STUB_ROUTED
);
8846 OSPF_TIMER_OFF (area
->t_stub_router
);
8848 /* Don't trample on admin stub routed */
8849 if (!CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
))
8851 UNSET_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
);
8852 ospf_router_lsa_update_area (area
);
8858 ALIAS (no_ospf_max_metric_router_lsa_startup
,
8859 no_ospf_max_metric_router_lsa_startup_no_param_cmd
,
8860 "no max-metric router-lsa on-startup",
8862 "OSPF maximum / infinite-distance metric\n"
8863 "Advertise own Router-LSA with infinite distance (stub router)\n"
8864 "Automatically advertise stub Router-LSA on startup of OSPF\n");
8866 DEFUN (ospf_max_metric_router_lsa_shutdown
,
8867 ospf_max_metric_router_lsa_shutdown_cmd
,
8868 "max-metric router-lsa on-shutdown <5-100>",
8869 "OSPF maximum / infinite-distance metric\n"
8870 "Advertise own Router-LSA with infinite distance (stub router)\n"
8871 "Advertise stub-router prior to full shutdown of OSPF\n"
8872 "Time (seconds) to wait till full shutdown\n")
8874 unsigned int seconds
;
8875 struct ospf
*ospf
= vty
->index
;
8882 vty_out (vty
, "%% Must supply stub-router shutdown period");
8886 VTY_GET_INTEGER ("stub-router shutdown wait period", seconds
, argv
[0]);
8888 ospf
->stub_router_shutdown_time
= seconds
;
8893 DEFUN (no_ospf_max_metric_router_lsa_shutdown
,
8894 no_ospf_max_metric_router_lsa_shutdown_cmd
,
8895 "no max-metric router-lsa on-shutdown <5-100>",
8897 "OSPF maximum / infinite-distance metric\n"
8898 "Advertise own Router-LSA with infinite distance (stub router)\n"
8899 "Advertise stub-router prior to full shutdown of OSPF\n"
8900 "Time (seconds) to wait till full shutdown\n")
8902 struct ospf
*ospf
= vty
->index
;
8907 ospf
->stub_router_shutdown_time
= OSPF_STUB_ROUTER_UNCONFIGURED
;
8912 ALIAS (no_ospf_max_metric_router_lsa_shutdown
,
8913 no_ospf_max_metric_router_lsa_shutdown_no_param_cmd
,
8914 "no max-metric router-lsa on-shutdown",
8916 "OSPF maximum / infinite-distance metric\n"
8917 "Advertise own Router-LSA with infinite distance (stub router)\n"
8918 "Advertise stub-router prior to full shutdown of OSPF\n");
8921 config_write_stub_router (struct vty
*vty
, struct ospf
*ospf
)
8923 struct listnode
*ln
;
8924 struct ospf_area
*area
;
8926 if (ospf
->stub_router_startup_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
8927 vty_out (vty
, " max-metric router-lsa on-startup %u%s",
8928 ospf
->stub_router_startup_time
, VTY_NEWLINE
);
8929 if (ospf
->stub_router_shutdown_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
8930 vty_out (vty
, " max-metric router-lsa on-shutdown %u%s",
8931 ospf
->stub_router_shutdown_time
, VTY_NEWLINE
);
8932 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, ln
, area
))
8934 if (CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
))
8936 vty_out (vty
, " max-metric router-lsa administrative%s",
8945 show_ip_ospf_route_network (struct vty
*vty
, struct route_table
*rt
)
8947 struct route_node
*rn
;
8948 struct ospf_route
*or;
8949 struct listnode
*pnode
, *pnnode
;
8950 struct ospf_path
*path
;
8952 vty_out (vty
, "============ OSPF network routing table ============%s",
8955 for (rn
= route_top (rt
); rn
; rn
= route_next (rn
))
8956 if ((or = rn
->info
) != NULL
)
8959 snprintf (buf1
, 19, "%s/%d",
8960 inet_ntoa (rn
->p
.u
.prefix4
), rn
->p
.prefixlen
);
8962 switch (or->path_type
)
8964 case OSPF_PATH_INTER_AREA
:
8965 if (or->type
== OSPF_DESTINATION_NETWORK
)
8966 vty_out (vty
, "N IA %-18s [%d] area: %s%s", buf1
, or->cost
,
8967 inet_ntoa (or->u
.std
.area_id
), VTY_NEWLINE
);
8968 else if (or->type
== OSPF_DESTINATION_DISCARD
)
8969 vty_out (vty
, "D IA %-18s Discard entry%s", buf1
, VTY_NEWLINE
);
8971 case OSPF_PATH_INTRA_AREA
:
8972 vty_out (vty
, "N %-18s [%d] area: %s%s", buf1
, or->cost
,
8973 inet_ntoa (or->u
.std
.area_id
), VTY_NEWLINE
);
8979 if (or->type
== OSPF_DESTINATION_NETWORK
)
8980 for (ALL_LIST_ELEMENTS (or->paths
, pnode
, pnnode
, path
))
8982 if (if_lookup_by_index(path
->ifindex
))
8984 if (path
->nexthop
.s_addr
== 0)
8985 vty_out (vty
, "%24s directly attached to %s%s",
8986 "", ifindex2ifname (path
->ifindex
), VTY_NEWLINE
);
8988 vty_out (vty
, "%24s via %s, %s%s", "",
8989 inet_ntoa (path
->nexthop
),
8990 ifindex2ifname (path
->ifindex
), VTY_NEWLINE
);
8994 vty_out (vty
, "%s", VTY_NEWLINE
);
8998 show_ip_ospf_route_router (struct vty
*vty
, struct route_table
*rtrs
)
9000 struct route_node
*rn
;
9001 struct ospf_route
*or;
9002 struct listnode
*pnode
;
9003 struct listnode
*node
;
9004 struct ospf_path
*path
;
9006 vty_out (vty
, "============ OSPF router routing table =============%s",
9008 for (rn
= route_top (rtrs
); rn
; rn
= route_next (rn
))
9013 vty_out (vty
, "R %-15s ", inet_ntoa (rn
->p
.u
.prefix4
));
9015 for (ALL_LIST_ELEMENTS_RO ((struct list
*)rn
->info
, node
, or))
9018 vty_out (vty
, "%24s", "");
9021 vty_out (vty
, "%s [%d] area: %s",
9022 (or->path_type
== OSPF_PATH_INTER_AREA
? "IA" : " "),
9023 or->cost
, inet_ntoa (or->u
.std
.area_id
));
9025 vty_out (vty
, "%s%s%s",
9026 (or->u
.std
.flags
& ROUTER_LSA_BORDER
? ", ABR" : ""),
9027 (or->u
.std
.flags
& ROUTER_LSA_EXTERNAL
? ", ASBR" : ""),
9030 for (ALL_LIST_ELEMENTS_RO (or->paths
, pnode
, path
))
9032 if (if_lookup_by_index(path
->ifindex
))
9034 if (path
->nexthop
.s_addr
== 0)
9035 vty_out (vty
, "%24s directly attached to %s%s",
9036 "", ifindex2ifname (path
->ifindex
),
9039 vty_out (vty
, "%24s via %s, %s%s", "",
9040 inet_ntoa (path
->nexthop
),
9041 ifindex2ifname (path
->ifindex
),
9047 vty_out (vty
, "%s", VTY_NEWLINE
);
9051 show_ip_ospf_route_external (struct vty
*vty
, struct route_table
*rt
)
9053 struct route_node
*rn
;
9054 struct ospf_route
*er
;
9055 struct listnode
*pnode
, *pnnode
;
9056 struct ospf_path
*path
;
9058 vty_out (vty
, "============ OSPF external routing table ===========%s",
9060 for (rn
= route_top (rt
); rn
; rn
= route_next (rn
))
9061 if ((er
= rn
->info
) != NULL
)
9064 snprintf (buf1
, 19, "%s/%d",
9065 inet_ntoa (rn
->p
.u
.prefix4
), rn
->p
.prefixlen
);
9067 switch (er
->path_type
)
9069 case OSPF_PATH_TYPE1_EXTERNAL
:
9070 vty_out (vty
, "N E1 %-18s [%d] tag: %u%s", buf1
,
9071 er
->cost
, er
->u
.ext
.tag
, VTY_NEWLINE
);
9073 case OSPF_PATH_TYPE2_EXTERNAL
:
9074 vty_out (vty
, "N E2 %-18s [%d/%d] tag: %u%s", buf1
, er
->cost
,
9075 er
->u
.ext
.type2_cost
, er
->u
.ext
.tag
, VTY_NEWLINE
);
9079 for (ALL_LIST_ELEMENTS (er
->paths
, pnode
, pnnode
, path
))
9081 if (if_lookup_by_index(path
->ifindex
))
9083 if (path
->nexthop
.s_addr
== 0)
9084 vty_out (vty
, "%24s directly attached to %s%s",
9085 "", ifindex2ifname (path
->ifindex
), VTY_NEWLINE
);
9087 vty_out (vty
, "%24s via %s, %s%s", "",
9088 inet_ntoa (path
->nexthop
),
9089 ifindex2ifname (path
->ifindex
),
9094 vty_out (vty
, "%s", VTY_NEWLINE
);
9098 show_ip_ospf_border_routers_common (struct vty
*vty
, struct ospf
*ospf
)
9101 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
9102 VTY_NEWLINE
, VTY_NEWLINE
);
9104 if (ospf
->new_table
== NULL
)
9106 vty_out (vty
, "No OSPF routing information exist%s", VTY_NEWLINE
);
9110 /* Show Network routes.
9111 show_ip_ospf_route_network (vty, ospf->new_table); */
9113 /* Show Router routes. */
9114 show_ip_ospf_route_router (vty
, ospf
->new_rtrs
);
9116 vty_out (vty
, "%s", VTY_NEWLINE
);
9121 DEFUN (show_ip_ospf_border_routers
,
9122 show_ip_ospf_border_routers_cmd
,
9123 "show ip ospf border-routers",
9126 "OSPF information\n"
9127 "Show all the ABR's and ASBR's\n")
9131 if ((ospf
= ospf_lookup ()) == NULL
|| !ospf
->oi_running
)
9134 return show_ip_ospf_border_routers_common(vty
, ospf
);
9137 DEFUN (show_ip_ospf_instance_border_routers
,
9138 show_ip_ospf_instance_border_routers_cmd
,
9139 "show ip ospf <1-65535> border-routers",
9142 "OSPF information\n"
9144 "Show all the ABR's and ASBR's\n")
9147 u_short instance
= 0;
9149 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
9150 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
9153 return show_ip_ospf_border_routers_common(vty
, ospf
);
9157 show_ip_ospf_route_common (struct vty
*vty
, struct ospf
*ospf
)
9160 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
9161 VTY_NEWLINE
, VTY_NEWLINE
);
9163 if (ospf
->new_table
== NULL
)
9165 vty_out (vty
, "No OSPF routing information exist%s", VTY_NEWLINE
);
9169 /* Show Network routes. */
9170 show_ip_ospf_route_network (vty
, ospf
->new_table
);
9172 /* Show Router routes. */
9173 show_ip_ospf_route_router (vty
, ospf
->new_rtrs
);
9175 /* Show AS External routes. */
9176 show_ip_ospf_route_external (vty
, ospf
->old_external_route
);
9178 vty_out (vty
, "%s", VTY_NEWLINE
);
9183 DEFUN (show_ip_ospf_route
,
9184 show_ip_ospf_route_cmd
,
9185 "show ip ospf route",
9188 "OSPF information\n"
9189 "OSPF routing table\n")
9193 if ((ospf
= ospf_lookup ()) == NULL
|| !ospf
->oi_running
)
9196 return show_ip_ospf_route_common(vty
, ospf
);
9199 DEFUN (show_ip_ospf_instance_route
,
9200 show_ip_ospf_instance_route_cmd
,
9201 "show ip ospf <1-65535> route",
9204 "OSPF information\n"
9206 "OSPF routing table\n")
9209 u_short instance
= 0;
9211 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
9212 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
9215 return show_ip_ospf_route_common(vty
, ospf
);
9218 const char *ospf_abr_type_str
[] =
9227 const char *ospf_shortcut_mode_str
[] =
9236 area_id2str (char *buf
, int length
, struct ospf_area
*area
)
9238 memset (buf
, 0, length
);
9240 if (area
->format
== OSPF_AREA_ID_FORMAT_ADDRESS
)
9241 strncpy (buf
, inet_ntoa (area
->area_id
), length
);
9243 sprintf (buf
, "%lu", (unsigned long) ntohl (area
->area_id
.s_addr
));
9247 const char *ospf_int_type_str
[] =
9249 "unknown", /* should never be used. */
9253 "point-to-multipoint",
9254 "virtual-link", /* should never be used. */
9258 /* Configuration write function for ospfd. */
9260 config_write_interface (struct vty
*vty
)
9262 struct listnode
*n1
, *n2
;
9263 struct interface
*ifp
;
9264 struct crypt_key
*ck
;
9266 struct route_node
*rn
= NULL
;
9267 struct ospf_if_params
*params
;
9268 struct ospf
*ospf
= ospf_lookup();
9270 for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT
), n1
, ifp
))
9272 if (memcmp (ifp
->name
, "VLINK", 5) == 0)
9275 if (ifp
->ifindex
== IFINDEX_DELETED
)
9278 vty_out (vty
, "!%s", VTY_NEWLINE
);
9279 vty_out (vty
, "interface %s%s", ifp
->name
,
9282 vty_out (vty
, " description %s%s", ifp
->desc
,
9287 params
= IF_DEF_PARAMS (ifp
);
9290 /* Interface Network print. */
9291 if (OSPF_IF_PARAM_CONFIGURED (params
, type
) &&
9292 params
->type
!= OSPF_IFTYPE_LOOPBACK
)
9294 if (params
->type
!= ospf_default_iftype(ifp
))
9296 vty_out (vty
, " ip ospf network %s",
9297 ospf_int_type_str
[params
->type
]);
9298 if (params
!= IF_DEF_PARAMS (ifp
))
9299 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9300 vty_out (vty
, "%s", VTY_NEWLINE
);
9304 /* OSPF interface authentication print */
9305 if (OSPF_IF_PARAM_CONFIGURED (params
, auth_type
) &&
9306 params
->auth_type
!= OSPF_AUTH_NOTSET
)
9308 const char *auth_str
;
9310 /* Translation tables are not that much help here due to syntax
9311 of the simple option */
9312 switch (params
->auth_type
)
9315 case OSPF_AUTH_NULL
:
9319 case OSPF_AUTH_SIMPLE
:
9323 case OSPF_AUTH_CRYPTOGRAPHIC
:
9324 auth_str
= " message-digest";
9332 vty_out (vty
, " ip ospf authentication%s", auth_str
);
9333 if (params
!= IF_DEF_PARAMS (ifp
))
9334 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9335 vty_out (vty
, "%s", VTY_NEWLINE
);
9338 /* Simple Authentication Password print. */
9339 if (OSPF_IF_PARAM_CONFIGURED (params
, auth_simple
) &&
9340 params
->auth_simple
[0] != '\0')
9342 vty_out (vty
, " ip ospf authentication-key %s",
9343 params
->auth_simple
);
9344 if (params
!= IF_DEF_PARAMS (ifp
))
9345 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9346 vty_out (vty
, "%s", VTY_NEWLINE
);
9349 /* Cryptographic Authentication Key print. */
9350 for (ALL_LIST_ELEMENTS_RO (params
->auth_crypt
, n2
, ck
))
9352 vty_out (vty
, " ip ospf message-digest-key %d md5 %s",
9353 ck
->key_id
, ck
->auth_key
);
9354 if (params
!= IF_DEF_PARAMS (ifp
))
9355 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9356 vty_out (vty
, "%s", VTY_NEWLINE
);
9359 /* Interface Output Cost print. */
9360 if (OSPF_IF_PARAM_CONFIGURED (params
, output_cost_cmd
))
9362 vty_out (vty
, " ip ospf cost %u", params
->output_cost_cmd
);
9363 if (params
!= IF_DEF_PARAMS (ifp
))
9364 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9365 vty_out (vty
, "%s", VTY_NEWLINE
);
9368 /* Hello Interval print. */
9369 if (OSPF_IF_PARAM_CONFIGURED (params
, v_hello
) &&
9370 params
->v_hello
!= OSPF_HELLO_INTERVAL_DEFAULT
)
9372 vty_out (vty
, " ip ospf hello-interval %u", params
->v_hello
);
9373 if (params
!= IF_DEF_PARAMS (ifp
))
9374 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9375 vty_out (vty
, "%s", VTY_NEWLINE
);
9379 /* Router Dead Interval print. */
9380 if (OSPF_IF_PARAM_CONFIGURED (params
, v_wait
) &&
9381 params
->v_wait
!= OSPF_ROUTER_DEAD_INTERVAL_DEFAULT
)
9383 vty_out (vty
, " ip ospf dead-interval ");
9386 if (OSPF_IF_PARAM_CONFIGURED (params
, fast_hello
))
9387 vty_out (vty
, "minimal hello-multiplier %d",
9388 params
->fast_hello
);
9390 vty_out (vty
, "%u", params
->v_wait
);
9392 if (params
!= IF_DEF_PARAMS (ifp
))
9393 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9394 vty_out (vty
, "%s", VTY_NEWLINE
);
9397 /* Router Priority print. */
9398 if (OSPF_IF_PARAM_CONFIGURED (params
, priority
) &&
9399 params
->priority
!= OSPF_ROUTER_PRIORITY_DEFAULT
)
9401 vty_out (vty
, " ip ospf priority %u", params
->priority
);
9402 if (params
!= IF_DEF_PARAMS (ifp
))
9403 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9404 vty_out (vty
, "%s", VTY_NEWLINE
);
9407 /* Retransmit Interval print. */
9408 if (OSPF_IF_PARAM_CONFIGURED (params
, retransmit_interval
) &&
9409 params
->retransmit_interval
!= OSPF_RETRANSMIT_INTERVAL_DEFAULT
)
9411 vty_out (vty
, " ip ospf retransmit-interval %u",
9412 params
->retransmit_interval
);
9413 if (params
!= IF_DEF_PARAMS (ifp
))
9414 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9415 vty_out (vty
, "%s", VTY_NEWLINE
);
9418 /* Transmit Delay print. */
9419 if (OSPF_IF_PARAM_CONFIGURED (params
, transmit_delay
) &&
9420 params
->transmit_delay
!= OSPF_TRANSMIT_DELAY_DEFAULT
)
9422 vty_out (vty
, " ip ospf transmit-delay %u", params
->transmit_delay
);
9423 if (params
!= IF_DEF_PARAMS (ifp
))
9424 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9425 vty_out (vty
, "%s", VTY_NEWLINE
);
9429 if (OSPF_IF_PARAM_CONFIGURED (params
, if_area
))
9432 vty_out (vty
, " ip ospf %d area %s%s", ospf
->instance
,
9433 inet_ntoa (params
->if_area
), VTY_NEWLINE
);
9435 vty_out (vty
, " ip ospf area %s%s",
9436 inet_ntoa (params
->if_area
), VTY_NEWLINE
);
9441 ospf_bfd_write_config(vty
, params
);
9443 /* MTU ignore print. */
9444 if (OSPF_IF_PARAM_CONFIGURED (params
, mtu_ignore
) &&
9445 params
->mtu_ignore
!= OSPF_MTU_IGNORE_DEFAULT
)
9447 if (params
->mtu_ignore
== 0)
9448 vty_out (vty
, " no ip ospf mtu-ignore");
9450 vty_out (vty
, " ip ospf mtu-ignore");
9451 if (params
!= IF_DEF_PARAMS (ifp
))
9452 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9453 vty_out (vty
, "%s", VTY_NEWLINE
);
9460 rn
= route_top (IF_OIFS_PARAMS (ifp
));
9462 rn
= route_next (rn
);
9472 ospf_opaque_config_write_if (vty
, ifp
);
9479 config_write_network_area (struct vty
*vty
, struct ospf
*ospf
)
9481 struct route_node
*rn
;
9482 u_char buf
[INET_ADDRSTRLEN
];
9484 /* `network area' print. */
9485 for (rn
= route_top (ospf
->networks
); rn
; rn
= route_next (rn
))
9488 struct ospf_network
*n
= rn
->info
;
9490 memset (buf
, 0, INET_ADDRSTRLEN
);
9492 /* Create Area ID string by specified Area ID format. */
9493 if (n
->format
== OSPF_AREA_ID_FORMAT_ADDRESS
)
9494 strncpy ((char *) buf
, inet_ntoa (n
->area_id
), INET_ADDRSTRLEN
);
9496 sprintf ((char *) buf
, "%lu",
9497 (unsigned long int) ntohl (n
->area_id
.s_addr
));
9499 /* Network print. */
9500 vty_out (vty
, " network %s/%d area %s%s",
9501 inet_ntoa (rn
->p
.u
.prefix4
), rn
->p
.prefixlen
,
9509 config_write_ospf_area (struct vty
*vty
, struct ospf
*ospf
)
9511 struct listnode
*node
;
9512 struct ospf_area
*area
;
9513 u_char buf
[INET_ADDRSTRLEN
];
9515 /* Area configuration print. */
9516 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
9518 struct route_node
*rn1
;
9520 area_id2str ((char *) buf
, INET_ADDRSTRLEN
, area
);
9522 if (area
->auth_type
!= OSPF_AUTH_NULL
)
9524 if (area
->auth_type
== OSPF_AUTH_SIMPLE
)
9525 vty_out (vty
, " area %s authentication%s", buf
, VTY_NEWLINE
);
9527 vty_out (vty
, " area %s authentication message-digest%s",
9531 if (area
->shortcut_configured
!= OSPF_SHORTCUT_DEFAULT
)
9532 vty_out (vty
, " area %s shortcut %s%s", buf
,
9533 ospf_shortcut_mode_str
[area
->shortcut_configured
],
9536 if ((area
->external_routing
== OSPF_AREA_STUB
)
9537 || (area
->external_routing
== OSPF_AREA_NSSA
)
9540 if (area
->external_routing
== OSPF_AREA_STUB
)
9541 vty_out (vty
, " area %s stub", buf
);
9542 else if (area
->external_routing
== OSPF_AREA_NSSA
)
9544 vty_out (vty
, " area %s nssa", buf
);
9545 switch (area
->NSSATranslatorRole
)
9547 case OSPF_NSSA_ROLE_NEVER
:
9548 vty_out (vty
, " translate-never");
9550 case OSPF_NSSA_ROLE_ALWAYS
:
9551 vty_out (vty
, " translate-always");
9553 case OSPF_NSSA_ROLE_CANDIDATE
:
9555 vty_out (vty
, " translate-candidate");
9559 if (area
->no_summary
)
9560 vty_out (vty
, " no-summary");
9562 vty_out (vty
, "%s", VTY_NEWLINE
);
9564 if (area
->default_cost
!= 1)
9565 vty_out (vty
, " area %s default-cost %d%s", buf
,
9566 area
->default_cost
, VTY_NEWLINE
);
9569 for (rn1
= route_top (area
->ranges
); rn1
; rn1
= route_next (rn1
))
9572 struct ospf_area_range
*range
= rn1
->info
;
9574 vty_out (vty
, " area %s range %s/%d", buf
,
9575 inet_ntoa (rn1
->p
.u
.prefix4
), rn1
->p
.prefixlen
);
9577 if (range
->cost_config
!= OSPF_AREA_RANGE_COST_UNSPEC
)
9578 vty_out (vty
, " cost %d", range
->cost_config
);
9580 if (!CHECK_FLAG (range
->flags
, OSPF_AREA_RANGE_ADVERTISE
))
9581 vty_out (vty
, " not-advertise");
9583 if (CHECK_FLAG (range
->flags
, OSPF_AREA_RANGE_SUBSTITUTE
))
9584 vty_out (vty
, " substitute %s/%d",
9585 inet_ntoa (range
->subst_addr
), range
->subst_masklen
);
9587 vty_out (vty
, "%s", VTY_NEWLINE
);
9590 if (EXPORT_NAME (area
))
9591 vty_out (vty
, " area %s export-list %s%s", buf
,
9592 EXPORT_NAME (area
), VTY_NEWLINE
);
9594 if (IMPORT_NAME (area
))
9595 vty_out (vty
, " area %s import-list %s%s", buf
,
9596 IMPORT_NAME (area
), VTY_NEWLINE
);
9598 if (PREFIX_NAME_IN (area
))
9599 vty_out (vty
, " area %s filter-list prefix %s in%s", buf
,
9600 PREFIX_NAME_IN (area
), VTY_NEWLINE
);
9602 if (PREFIX_NAME_OUT (area
))
9603 vty_out (vty
, " area %s filter-list prefix %s out%s", buf
,
9604 PREFIX_NAME_OUT (area
), VTY_NEWLINE
);
9611 config_write_ospf_nbr_nbma (struct vty
*vty
, struct ospf
*ospf
)
9613 struct ospf_nbr_nbma
*nbr_nbma
;
9614 struct route_node
*rn
;
9616 /* Static Neighbor configuration print. */
9617 for (rn
= route_top (ospf
->nbr_nbma
); rn
; rn
= route_next (rn
))
9618 if ((nbr_nbma
= rn
->info
))
9620 vty_out (vty
, " neighbor %s", inet_ntoa (nbr_nbma
->addr
));
9622 if (nbr_nbma
->priority
!= OSPF_NEIGHBOR_PRIORITY_DEFAULT
)
9623 vty_out (vty
, " priority %d", nbr_nbma
->priority
);
9625 if (nbr_nbma
->v_poll
!= OSPF_POLL_INTERVAL_DEFAULT
)
9626 vty_out (vty
, " poll-interval %d", nbr_nbma
->v_poll
);
9628 vty_out (vty
, "%s", VTY_NEWLINE
);
9635 config_write_virtual_link (struct vty
*vty
, struct ospf
*ospf
)
9637 struct listnode
*node
;
9638 struct ospf_vl_data
*vl_data
;
9639 u_char buf
[INET_ADDRSTRLEN
];
9641 /* Virtual-Link print */
9642 for (ALL_LIST_ELEMENTS_RO (ospf
->vlinks
, node
, vl_data
))
9644 struct listnode
*n2
;
9645 struct crypt_key
*ck
;
9646 struct ospf_interface
*oi
;
9648 if (vl_data
!= NULL
)
9650 memset (buf
, 0, INET_ADDRSTRLEN
);
9652 if (vl_data
->format
== OSPF_AREA_ID_FORMAT_ADDRESS
)
9653 strncpy ((char *) buf
, inet_ntoa (vl_data
->vl_area_id
), INET_ADDRSTRLEN
);
9655 sprintf ((char *) buf
, "%lu",
9656 (unsigned long int) ntohl (vl_data
->vl_area_id
.s_addr
));
9657 oi
= vl_data
->vl_oi
;
9660 if (OSPF_IF_PARAM (oi
, v_hello
) != OSPF_HELLO_INTERVAL_DEFAULT
||
9661 OSPF_IF_PARAM (oi
, v_wait
) != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT
||
9662 OSPF_IF_PARAM (oi
, retransmit_interval
) != OSPF_RETRANSMIT_INTERVAL_DEFAULT
||
9663 OSPF_IF_PARAM (oi
, transmit_delay
) != OSPF_TRANSMIT_DELAY_DEFAULT
)
9664 vty_out (vty
, " area %s virtual-link %s hello-interval %d retransmit-interval %d transmit-delay %d dead-interval %d%s",
9666 inet_ntoa (vl_data
->vl_peer
),
9667 OSPF_IF_PARAM (oi
, v_hello
),
9668 OSPF_IF_PARAM (oi
, retransmit_interval
),
9669 OSPF_IF_PARAM (oi
, transmit_delay
),
9670 OSPF_IF_PARAM (oi
, v_wait
),
9673 vty_out (vty
, " area %s virtual-link %s%s", buf
,
9674 inet_ntoa (vl_data
->vl_peer
), VTY_NEWLINE
);
9676 if (IF_DEF_PARAMS (vl_data
->vl_oi
->ifp
)->auth_simple
[0] != '\0')
9677 vty_out (vty
, " area %s virtual-link %s authentication-key %s%s",
9679 inet_ntoa (vl_data
->vl_peer
),
9680 IF_DEF_PARAMS (vl_data
->vl_oi
->ifp
)->auth_simple
,
9683 for (ALL_LIST_ELEMENTS_RO (IF_DEF_PARAMS (vl_data
->vl_oi
->ifp
)->auth_crypt
,
9685 vty_out (vty
, " area %s virtual-link %s"
9686 " message-digest-key %d md5 %s%s",
9688 inet_ntoa (vl_data
->vl_peer
),
9689 ck
->key_id
, ck
->auth_key
, VTY_NEWLINE
);
9699 config_write_ospf_redistribute (struct vty
*vty
, struct ospf
*ospf
)
9703 /* redistribute print. */
9704 for (type
= 0; type
< ZEBRA_ROUTE_MAX
; type
++)
9706 struct list
*red_list
;
9707 struct listnode
*node
;
9708 struct ospf_redist
*red
;
9710 red_list
= ospf
->redist
[type
];
9714 for (ALL_LIST_ELEMENTS_RO(red_list
, node
, red
))
9716 vty_out (vty
, " redistribute %s", zebra_route_string(type
));
9718 vty_out (vty
, " %d", red
->instance
);
9720 if (red
->dmetric
.value
>= 0)
9721 vty_out (vty
, " metric %d", red
->dmetric
.value
);
9723 if (red
->dmetric
.type
== EXTERNAL_METRIC_TYPE_1
)
9724 vty_out (vty
, " metric-type 1");
9726 if (ROUTEMAP_NAME (red
))
9727 vty_out (vty
, " route-map %s", ROUTEMAP_NAME (red
));
9729 vty_out (vty
, "%s", VTY_NEWLINE
);
9737 config_write_ospf_default_metric (struct vty
*vty
, struct ospf
*ospf
)
9739 if (ospf
->default_metric
!= -1)
9740 vty_out (vty
, " default-metric %d%s", ospf
->default_metric
,
9746 config_write_ospf_distribute (struct vty
*vty
, struct ospf
*ospf
)
9749 struct ospf_redist
*red
;
9753 /* distribute-list print. */
9754 for (type
= 0; type
< ZEBRA_ROUTE_MAX
; type
++)
9755 if (DISTRIBUTE_NAME (ospf
, type
))
9756 vty_out (vty
, " distribute-list %s out %s%s",
9757 DISTRIBUTE_NAME (ospf
, type
),
9758 zebra_route_string(type
), VTY_NEWLINE
);
9760 /* default-information print. */
9761 if (ospf
->default_originate
!= DEFAULT_ORIGINATE_NONE
)
9763 vty_out (vty
, " default-information originate");
9764 if (ospf
->default_originate
== DEFAULT_ORIGINATE_ALWAYS
)
9765 vty_out (vty
, " always");
9767 red
= ospf_redist_lookup(ospf
, DEFAULT_ROUTE
, 0);
9770 if (red
->dmetric
.value
>= 0)
9771 vty_out (vty
, " metric %d",
9772 red
->dmetric
.value
);
9773 if (red
->dmetric
.type
== EXTERNAL_METRIC_TYPE_1
)
9774 vty_out (vty
, " metric-type 1");
9776 if (ROUTEMAP_NAME (red
))
9777 vty_out (vty
, " route-map %s",
9778 ROUTEMAP_NAME (red
));
9781 vty_out (vty
, "%s", VTY_NEWLINE
);
9790 config_write_ospf_distance (struct vty
*vty
, struct ospf
*ospf
)
9792 struct route_node
*rn
;
9793 struct ospf_distance
*odistance
;
9795 if (ospf
->distance_all
)
9796 vty_out (vty
, " distance %d%s", ospf
->distance_all
, VTY_NEWLINE
);
9798 if (ospf
->distance_intra
9799 || ospf
->distance_inter
9800 || ospf
->distance_external
)
9802 vty_out (vty
, " distance ospf");
9804 if (ospf
->distance_intra
)
9805 vty_out (vty
, " intra-area %d", ospf
->distance_intra
);
9806 if (ospf
->distance_inter
)
9807 vty_out (vty
, " inter-area %d", ospf
->distance_inter
);
9808 if (ospf
->distance_external
)
9809 vty_out (vty
, " external %d", ospf
->distance_external
);
9811 vty_out (vty
, "%s", VTY_NEWLINE
);
9814 for (rn
= route_top (ospf
->distance_table
); rn
; rn
= route_next (rn
))
9815 if ((odistance
= rn
->info
) != NULL
)
9817 vty_out (vty
, " distance %d %s/%d %s%s", odistance
->distance
,
9818 inet_ntoa (rn
->p
.u
.prefix4
), rn
->p
.prefixlen
,
9819 odistance
->access_list
? odistance
->access_list
: "",
9825 /* OSPF configuration write function. */
9827 ospf_config_write (struct vty
*vty
)
9830 struct interface
*ifp
;
9831 struct ospf_interface
*oi
;
9832 struct listnode
*node
;
9835 ospf
= ospf_lookup ();
9836 if (ospf
!= NULL
&& ospf
->oi_running
)
9838 /* `router ospf' print. */
9840 vty_out (vty
, "router ospf %d%s", ospf
->instance
, VTY_NEWLINE
);
9842 vty_out (vty
, "router ospf%s", VTY_NEWLINE
);
9846 if (!ospf
->networks
)
9849 /* Router ID print. */
9850 if (ospf
->router_id_static
.s_addr
!= 0)
9851 vty_out (vty
, " ospf router-id %s%s",
9852 inet_ntoa (ospf
->router_id_static
), VTY_NEWLINE
);
9854 /* ABR type print. */
9855 if (ospf
->abr_type
!= OSPF_ABR_DEFAULT
)
9856 vty_out (vty
, " ospf abr-type %s%s",
9857 ospf_abr_type_str
[ospf
->abr_type
], VTY_NEWLINE
);
9859 /* log-adjacency-changes flag print. */
9860 if (CHECK_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_CHANGES
))
9862 if (CHECK_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_DETAIL
))
9863 vty_out(vty
, " log-adjacency-changes detail%s", VTY_NEWLINE
);
9867 vty_out(vty
, " no log-adjacency-changes%s", VTY_NEWLINE
);
9870 /* RFC1583 compatibility flag print -- Compatible with CISCO 12.1. */
9871 if (CHECK_FLAG (ospf
->config
, OSPF_RFC1583_COMPATIBLE
))
9872 vty_out (vty
, " compatible rfc1583%s", VTY_NEWLINE
);
9874 /* auto-cost reference-bandwidth configuration. */
9875 if (ospf
->ref_bandwidth
!= OSPF_DEFAULT_REF_BANDWIDTH
)
9877 vty_out (vty
, "! Important: ensure reference bandwidth "
9878 "is consistent across all routers%s", VTY_NEWLINE
);
9879 vty_out (vty
, " auto-cost reference-bandwidth %d%s",
9880 ospf
->ref_bandwidth
, VTY_NEWLINE
);
9883 /* SPF timers print. */
9884 if (ospf
->spf_delay
!= OSPF_SPF_DELAY_DEFAULT
||
9885 ospf
->spf_holdtime
!= OSPF_SPF_HOLDTIME_DEFAULT
||
9886 ospf
->spf_max_holdtime
!= OSPF_SPF_MAX_HOLDTIME_DEFAULT
)
9887 vty_out (vty
, " timers throttle spf %d %d %d%s",
9888 ospf
->spf_delay
, ospf
->spf_holdtime
,
9889 ospf
->spf_max_holdtime
, VTY_NEWLINE
);
9891 /* LSA timers print. */
9892 if (ospf
->min_ls_interval
!= OSPF_MIN_LS_INTERVAL
)
9893 vty_out (vty
, " timers throttle lsa all %d%s",
9894 ospf
->min_ls_interval
, VTY_NEWLINE
);
9895 if (ospf
->min_ls_arrival
!= OSPF_MIN_LS_ARRIVAL
)
9896 vty_out (vty
, " timers lsa min-arrival %d%s",
9897 ospf
->min_ls_arrival
, VTY_NEWLINE
);
9899 /* Write multiplier print. */
9900 if (ospf
->write_oi_count
!= OSPF_WRITE_INTERFACE_COUNT_DEFAULT
)
9901 vty_out (vty
, " ospf write-multiplier %d%s",
9902 ospf
->write_oi_count
, VTY_NEWLINE
);
9904 /* Max-metric router-lsa print */
9905 config_write_stub_router (vty
, ospf
);
9907 /* SPF refresh parameters print. */
9908 if (ospf
->lsa_refresh_interval
!= OSPF_LSA_REFRESH_INTERVAL_DEFAULT
)
9909 vty_out (vty
, " refresh timer %d%s",
9910 ospf
->lsa_refresh_interval
, VTY_NEWLINE
);
9912 /* Redistribute information print. */
9913 config_write_ospf_redistribute (vty
, ospf
);
9915 /* passive-interface print. */
9916 if (ospf
->passive_interface_default
== OSPF_IF_PASSIVE
)
9917 vty_out (vty
, " passive-interface default%s", VTY_NEWLINE
);
9919 for (ALL_LIST_ELEMENTS_RO (om
->iflist
, node
, ifp
))
9920 if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp
), passive_interface
)
9921 && IF_DEF_PARAMS (ifp
)->passive_interface
!=
9922 ospf
->passive_interface_default
)
9924 vty_out (vty
, " %spassive-interface %s%s",
9925 IF_DEF_PARAMS (ifp
)->passive_interface
? "" : "no ",
9926 ifp
->name
, VTY_NEWLINE
);
9928 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
9930 if (!OSPF_IF_PARAM_CONFIGURED (oi
->params
, passive_interface
))
9932 if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (oi
->ifp
),
9935 if (oi
->params
->passive_interface
== IF_DEF_PARAMS (oi
->ifp
)->passive_interface
)
9938 else if (oi
->params
->passive_interface
== ospf
->passive_interface_default
)
9941 vty_out (vty
, " %spassive-interface %s %s%s",
9942 oi
->params
->passive_interface
? "" : "no ",
9944 inet_ntoa (oi
->address
->u
.prefix4
), VTY_NEWLINE
);
9947 /* Network area print. */
9948 config_write_network_area (vty
, ospf
);
9950 /* Area config print. */
9951 config_write_ospf_area (vty
, ospf
);
9953 /* static neighbor print. */
9954 config_write_ospf_nbr_nbma (vty
, ospf
);
9956 /* Virtual-Link print. */
9957 config_write_virtual_link (vty
, ospf
);
9959 /* Default metric configuration. */
9960 config_write_ospf_default_metric (vty
, ospf
);
9962 /* Distribute-list and default-information print. */
9963 config_write_ospf_distribute (vty
, ospf
);
9965 /* Distance configuration. */
9966 config_write_ospf_distance (vty
, ospf
);
9968 ospf_opaque_config_write_router (vty
, ospf
);
9975 ospf_vty_show_init (void)
9977 /* "show ip ospf" commands. */
9978 install_element (VIEW_NODE
, &show_ip_ospf_cmd
);
9979 install_element (ENABLE_NODE
, &show_ip_ospf_cmd
);
9981 install_element (VIEW_NODE
, &show_ip_ospf_instance_cmd
);
9982 install_element (ENABLE_NODE
, &show_ip_ospf_instance_cmd
);
9984 /* "show ip ospf database" commands. */
9985 install_element (VIEW_NODE
, &show_ip_ospf_database_type_cmd
);
9986 install_element (VIEW_NODE
, &show_ip_ospf_database_type_id_cmd
);
9987 install_element (VIEW_NODE
, &show_ip_ospf_database_type_id_adv_router_cmd
);
9988 install_element (VIEW_NODE
, &show_ip_ospf_database_type_adv_router_cmd
);
9989 install_element (VIEW_NODE
, &show_ip_ospf_database_type_id_self_cmd
);
9990 install_element (VIEW_NODE
, &show_ip_ospf_database_type_self_cmd
);
9991 install_element (VIEW_NODE
, &show_ip_ospf_database_cmd
);
9992 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_cmd
);
9993 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_id_cmd
);
9994 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_id_adv_router_cmd
);
9995 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_adv_router_cmd
);
9996 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_id_self_cmd
);
9997 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_self_cmd
);
9998 install_element (ENABLE_NODE
, &show_ip_ospf_database_cmd
);
10000 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_cmd
);
10001 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_id_cmd
);
10002 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_id_adv_router_cmd
);
10003 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_adv_router_cmd
);
10004 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_id_self_cmd
);
10005 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_self_cmd
);
10006 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_cmd
);
10007 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_cmd
);
10008 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_id_cmd
);
10009 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_id_adv_router_cmd
);
10010 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_adv_router_cmd
);
10011 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_id_self_cmd
);
10012 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_self_cmd
);
10013 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_cmd
);
10015 /* "show ip ospf interface" commands. */
10016 install_element (VIEW_NODE
, &show_ip_ospf_interface_cmd
);
10017 install_element (ENABLE_NODE
, &show_ip_ospf_interface_cmd
);
10019 install_element (VIEW_NODE
, &show_ip_ospf_instance_interface_cmd
);
10020 install_element (ENABLE_NODE
, &show_ip_ospf_instance_interface_cmd
);
10022 /* "show ip ospf neighbor" commands. */
10023 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_int_detail_cmd
);
10024 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_int_cmd
);
10025 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_id_cmd
);
10026 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_detail_all_cmd
);
10027 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_detail_cmd
);
10028 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_cmd
);
10029 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_all_cmd
);
10030 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_int_detail_cmd
);
10031 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_int_cmd
);
10032 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_id_cmd
);
10033 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_detail_all_cmd
);
10034 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_detail_cmd
);
10035 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_cmd
);
10036 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_all_cmd
);
10038 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_int_detail_cmd
);
10039 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_int_cmd
);
10040 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_id_cmd
);
10041 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_detail_all_cmd
);
10042 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_detail_cmd
);
10043 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_cmd
);
10044 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_all_cmd
);
10045 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_int_detail_cmd
);
10046 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_int_cmd
);
10047 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_id_cmd
);
10048 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_detail_all_cmd
);
10049 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_detail_cmd
);
10050 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_cmd
);
10051 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_all_cmd
);
10053 /* "show ip ospf route" commands. */
10054 install_element (VIEW_NODE
, &show_ip_ospf_route_cmd
);
10055 install_element (ENABLE_NODE
, &show_ip_ospf_route_cmd
);
10056 install_element (VIEW_NODE
, &show_ip_ospf_border_routers_cmd
);
10057 install_element (ENABLE_NODE
, &show_ip_ospf_border_routers_cmd
);
10059 install_element (VIEW_NODE
, &show_ip_ospf_instance_route_cmd
);
10060 install_element (ENABLE_NODE
, &show_ip_ospf_instance_route_cmd
);
10061 install_element (VIEW_NODE
, &show_ip_ospf_instance_border_routers_cmd
);
10062 install_element (ENABLE_NODE
, &show_ip_ospf_instance_border_routers_cmd
);
10066 /* ospfd's interface node. */
10067 static struct cmd_node interface_node
=
10074 /* Initialization of OSPF interface. */
10076 ospf_vty_if_init (void)
10078 /* Install interface node. */
10079 install_node (&interface_node
, config_write_interface
);
10081 install_element (CONFIG_NODE
, &interface_cmd
);
10082 install_element (CONFIG_NODE
, &no_interface_cmd
);
10083 install_default (INTERFACE_NODE
);
10085 /* "description" commands. */
10086 install_element (INTERFACE_NODE
, &interface_desc_cmd
);
10087 install_element (INTERFACE_NODE
, &no_interface_desc_cmd
);
10089 /* "ip ospf authentication" commands. */
10090 install_element (INTERFACE_NODE
, &ip_ospf_authentication_args_addr_cmd
);
10091 install_element (INTERFACE_NODE
, &ip_ospf_authentication_args_cmd
);
10092 install_element (INTERFACE_NODE
, &ip_ospf_authentication_addr_cmd
);
10093 install_element (INTERFACE_NODE
, &ip_ospf_authentication_cmd
);
10094 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_args_addr_cmd
);
10095 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_args_cmd
);
10096 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_addr_cmd
);
10097 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_cmd
);
10098 install_element (INTERFACE_NODE
, &ip_ospf_authentication_key_addr_cmd
);
10099 install_element (INTERFACE_NODE
, &ip_ospf_authentication_key_cmd
);
10100 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_key_authkey_addr_cmd
);
10101 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_key_authkey_cmd
);
10102 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_key_cmd
);
10104 /* "ip ospf message-digest-key" commands. */
10105 install_element (INTERFACE_NODE
, &ip_ospf_message_digest_key_addr_cmd
);
10106 install_element (INTERFACE_NODE
, &ip_ospf_message_digest_key_cmd
);
10107 install_element (INTERFACE_NODE
, &no_ip_ospf_message_digest_key_addr_cmd
);
10108 install_element (INTERFACE_NODE
, &no_ip_ospf_message_digest_key_cmd
);
10109 install_element (INTERFACE_NODE
, &no_ip_ospf_message_digest_key_md5_addr_cmd
);
10110 install_element (INTERFACE_NODE
, &no_ip_ospf_message_digest_key_md5_cmd
);
10112 /* "ip ospf cost" commands. */
10113 install_element (INTERFACE_NODE
, &ip_ospf_cost_u32_inet4_cmd
);
10114 install_element (INTERFACE_NODE
, &ip_ospf_cost_u32_cmd
);
10115 install_element (INTERFACE_NODE
, &no_ip_ospf_cost_u32_cmd
);
10116 install_element (INTERFACE_NODE
, &no_ip_ospf_cost_u32_inet4_cmd
);
10117 install_element (INTERFACE_NODE
, &no_ip_ospf_cost_inet4_cmd
);
10118 install_element (INTERFACE_NODE
, &no_ip_ospf_cost_cmd
);
10120 /* "ip ospf mtu-ignore" commands. */
10121 install_element (INTERFACE_NODE
, &ip_ospf_mtu_ignore_addr_cmd
);
10122 install_element (INTERFACE_NODE
, &ip_ospf_mtu_ignore_cmd
);
10123 install_element (INTERFACE_NODE
, &no_ip_ospf_mtu_ignore_addr_cmd
);
10124 install_element (INTERFACE_NODE
, &no_ip_ospf_mtu_ignore_cmd
);
10126 /* "ip ospf dead-interval" commands. */
10127 install_element (INTERFACE_NODE
, &ip_ospf_dead_interval_addr_cmd
);
10128 install_element (INTERFACE_NODE
, &ip_ospf_dead_interval_cmd
);
10129 install_element (INTERFACE_NODE
, &ip_ospf_dead_interval_minimal_addr_cmd
);
10130 install_element (INTERFACE_NODE
, &ip_ospf_dead_interval_minimal_cmd
);
10131 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_addr_cmd
);
10132 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_cmd
);
10133 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_seconds_cmd
);
10135 /* "ip ospf hello-interval" commands. */
10136 install_element (INTERFACE_NODE
, &ip_ospf_hello_interval_addr_cmd
);
10137 install_element (INTERFACE_NODE
, &ip_ospf_hello_interval_cmd
);
10138 install_element (INTERFACE_NODE
, &no_ip_ospf_hello_interval_addr_cmd
);
10139 install_element (INTERFACE_NODE
, &no_ip_ospf_hello_interval_cmd
);
10140 install_element (INTERFACE_NODE
, &no_ip_ospf_hello_interval_seconds_cmd
);
10142 /* "ip ospf network" commands. */
10143 install_element (INTERFACE_NODE
, &ip_ospf_network_cmd
);
10144 install_element (INTERFACE_NODE
, &no_ip_ospf_network_cmd
);
10145 install_element (INTERFACE_NODE
, &no_ip_ospf_network_val_cmd
);
10147 /* "ip ospf priority" commands. */
10148 install_element (INTERFACE_NODE
, &ip_ospf_priority_addr_cmd
);
10149 install_element (INTERFACE_NODE
, &ip_ospf_priority_cmd
);
10150 install_element (INTERFACE_NODE
, &no_ip_ospf_priority_cmd
);
10151 install_element (INTERFACE_NODE
, &no_ip_ospf_priority_no_param_cmd
);
10152 install_element (INTERFACE_NODE
, &no_ip_ospf_priority_addr_cmd
);
10154 /* "ip ospf retransmit-interval" commands. */
10155 install_element (INTERFACE_NODE
, &ip_ospf_retransmit_interval_addr_cmd
);
10156 install_element (INTERFACE_NODE
, &ip_ospf_retransmit_interval_cmd
);
10157 install_element (INTERFACE_NODE
, &no_ip_ospf_retransmit_interval_addr_cmd
);
10158 install_element (INTERFACE_NODE
, &no_ip_ospf_retransmit_interval_cmd
);
10159 install_element (INTERFACE_NODE
, &no_ip_ospf_retransmit_interval_sec_addr_cmd
);
10160 install_element (INTERFACE_NODE
, &no_ip_ospf_retransmit_interval_sec_cmd
);
10162 /* "ip ospf transmit-delay" commands. */
10163 install_element (INTERFACE_NODE
, &ip_ospf_transmit_delay_addr_cmd
);
10164 install_element (INTERFACE_NODE
, &ip_ospf_transmit_delay_cmd
);
10165 install_element (INTERFACE_NODE
, &no_ip_ospf_transmit_delay_addr_cmd
);
10166 install_element (INTERFACE_NODE
, &no_ip_ospf_transmit_delay_cmd
);
10167 install_element (INTERFACE_NODE
, &no_ip_ospf_transmit_delay_sec_addr_cmd
);
10168 install_element (INTERFACE_NODE
, &no_ip_ospf_transmit_delay_sec_cmd
);
10170 /* "ip ospf area" commands. */
10171 install_element (INTERFACE_NODE
, &ip_ospf_area_cmd
);
10172 install_element (INTERFACE_NODE
, &no_ip_ospf_area_cmd
);
10173 install_element (INTERFACE_NODE
, &no_ip_ospf_area_val_cmd
);
10174 install_element (INTERFACE_NODE
, &ip_ospf_instance_area_cmd
);
10175 install_element (INTERFACE_NODE
, &no_ip_ospf_instance_area_cmd
);
10176 install_element (INTERFACE_NODE
, &no_ip_ospf_instance_area_val_cmd
);
10178 /* These commands are compatibitliy for previous version. */
10179 install_element (INTERFACE_NODE
, &ospf_authentication_key_cmd
);
10180 install_element (INTERFACE_NODE
, &no_ospf_authentication_key_cmd
);
10181 install_element (INTERFACE_NODE
, &no_ospf_authentication_key_authkey_cmd
);
10182 install_element (INTERFACE_NODE
, &no_ospf_authentication_key_authkey_ip_cmd
);
10183 install_element (INTERFACE_NODE
, &ospf_message_digest_key_cmd
);
10184 install_element (INTERFACE_NODE
, &no_ospf_message_digest_key_cmd
);
10185 install_element (INTERFACE_NODE
, &ospf_cost_u32_cmd
);
10186 install_element (INTERFACE_NODE
, &ospf_cost_u32_inet4_cmd
);
10187 install_element (INTERFACE_NODE
, &no_ospf_cost_cmd
);
10188 install_element (INTERFACE_NODE
, &no_ospf_cost_u32_cmd
);
10189 install_element (INTERFACE_NODE
, &no_ospf_cost_u32_inet4_cmd
);
10190 install_element (INTERFACE_NODE
, &no_ospf_cost_inet4_cmd
);
10191 install_element (INTERFACE_NODE
, &ospf_dead_interval_cmd
);
10192 install_element (INTERFACE_NODE
, &no_ospf_dead_interval_cmd
);
10193 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_minimal_addr_cmd
);
10194 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_minimal_cmd
);
10195 install_element (INTERFACE_NODE
, &ospf_hello_interval_cmd
);
10196 install_element (INTERFACE_NODE
, &no_ospf_hello_interval_cmd
);
10197 install_element (INTERFACE_NODE
, &ospf_network_cmd
);
10198 install_element (INTERFACE_NODE
, &no_ospf_network_cmd
);
10199 install_element (INTERFACE_NODE
, &no_ospf_network_val_cmd
);
10200 install_element (INTERFACE_NODE
, &ospf_priority_cmd
);
10201 install_element (INTERFACE_NODE
, &no_ospf_priority_cmd
);
10202 install_element (INTERFACE_NODE
, &ospf_retransmit_interval_cmd
);
10203 install_element (INTERFACE_NODE
, &no_ospf_retransmit_interval_cmd
);
10204 install_element (INTERFACE_NODE
, &ospf_transmit_delay_cmd
);
10205 install_element (INTERFACE_NODE
, &no_ospf_transmit_delay_cmd
);
10209 ospf_vty_zebra_init (void)
10211 install_element (OSPF_NODE
, &ospf_redistribute_source_cmd
);
10212 install_element (OSPF_NODE
, &no_ospf_redistribute_source_cmd
);
10213 install_element (OSPF_NODE
, &ospf_redistribute_instance_source_cmd
);
10214 install_element (OSPF_NODE
, &no_ospf_redistribute_instance_source_cmd
);
10216 install_element (OSPF_NODE
, &ospf_distribute_list_out_cmd
);
10217 install_element (OSPF_NODE
, &no_ospf_distribute_list_out_cmd
);
10219 install_element (OSPF_NODE
, &ospf_default_information_originate_cmd
);
10220 install_element (OSPF_NODE
, &no_ospf_default_information_originate_cmd
);
10222 install_element (OSPF_NODE
, &ospf_default_metric_cmd
);
10223 install_element (OSPF_NODE
, &no_ospf_default_metric_cmd
);
10224 install_element (OSPF_NODE
, &no_ospf_default_metric_val_cmd
);
10226 install_element (OSPF_NODE
, &ospf_distance_cmd
);
10227 install_element (OSPF_NODE
, &no_ospf_distance_cmd
);
10228 install_element (OSPF_NODE
, &no_ospf_distance_ospf_cmd
);
10229 install_element (OSPF_NODE
, &ospf_distance_ospf_cmd
);
10231 install_element (OSPF_NODE
, &ospf_distance_source_cmd
);
10232 install_element (OSPF_NODE
, &no_ospf_distance_source_cmd
);
10233 install_element (OSPF_NODE
, &ospf_distance_source_access_list_cmd
);
10234 install_element (OSPF_NODE
, &no_ospf_distance_source_access_list_cmd
);
10238 static struct cmd_node ospf_node
=
10241 "%s(config-router)# ",
10246 ospf_interface_clear (struct interface
*ifp
)
10248 if (!if_is_operative (ifp
)) return;
10250 if (IS_DEBUG_OSPF (ism
, ISM_EVENTS
))
10251 zlog (NULL
, LOG_DEBUG
, "ISM[%s]: clear by reset", ifp
->name
);
10253 ospf_if_reset(ifp
);
10256 DEFUN (clear_ip_ospf_interface
,
10257 clear_ip_ospf_interface_cmd
,
10258 "clear ip ospf interface [IFNAME]",
10261 "OSPF information\n"
10262 "Interface information\n"
10263 "Interface name\n")
10265 struct interface
*ifp
;
10266 struct listnode
*node
;
10268 if (argc
== 0) /* Clear all the ospfv2 interfaces. */
10270 for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT
), node
, ifp
))
10271 ospf_interface_clear(ifp
);
10273 else /* Interface name is specified. */
10275 if ((ifp
= if_lookup_by_name (argv
[0])) == NULL
)
10276 vty_out (vty
, "No such interface name%s", VTY_NEWLINE
);
10278 ospf_interface_clear(ifp
);
10281 return CMD_SUCCESS
;
10285 ospf_vty_clear_init (void)
10287 install_element (ENABLE_NODE
, &clear_ip_ospf_interface_cmd
);
10291 /* Install OSPF related vty commands. */
10293 ospf_vty_init (void)
10295 /* Install ospf top node. */
10296 install_node (&ospf_node
, ospf_config_write
);
10298 /* "router ospf" commands. */
10299 install_element (CONFIG_NODE
, &router_ospf_cmd
);
10300 install_element (CONFIG_NODE
, &no_router_ospf_cmd
);
10302 install_element (CONFIG_NODE
, &router_ospf_instance_cmd
);
10303 install_element (CONFIG_NODE
, &no_router_ospf_instance_cmd
);
10305 install_default (OSPF_NODE
);
10307 /* "ospf router-id" commands. */
10308 install_element (OSPF_NODE
, &ospf_router_id_cmd
);
10309 install_element (OSPF_NODE
, &ospf_router_id_old_cmd
);
10310 install_element (OSPF_NODE
, &no_ospf_router_id_cmd
);
10311 install_element (OSPF_NODE
, &no_ospf_router_id_val_cmd
);
10313 /* "passive-interface" commands. */
10314 install_element (OSPF_NODE
, &ospf_passive_interface_addr_cmd
);
10315 install_element (OSPF_NODE
, &ospf_passive_interface_cmd
);
10316 install_element (OSPF_NODE
, &ospf_passive_interface_default_cmd
);
10317 install_element (OSPF_NODE
, &no_ospf_passive_interface_addr_cmd
);
10318 install_element (OSPF_NODE
, &no_ospf_passive_interface_cmd
);
10319 install_element (OSPF_NODE
, &no_ospf_passive_interface_default_cmd
);
10321 /* "ospf abr-type" commands. */
10322 install_element (OSPF_NODE
, &ospf_abr_type_cmd
);
10323 install_element (OSPF_NODE
, &no_ospf_abr_type_cmd
);
10325 /* "ospf log-adjacency-changes" commands. */
10326 install_element (OSPF_NODE
, &ospf_log_adjacency_changes_cmd
);
10327 install_element (OSPF_NODE
, &ospf_log_adjacency_changes_detail_cmd
);
10328 install_element (OSPF_NODE
, &no_ospf_log_adjacency_changes_cmd
);
10329 install_element (OSPF_NODE
, &no_ospf_log_adjacency_changes_detail_cmd
);
10331 /* "ospf rfc1583-compatible" commands. */
10332 install_element (OSPF_NODE
, &ospf_rfc1583_flag_cmd
);
10333 install_element (OSPF_NODE
, &no_ospf_rfc1583_flag_cmd
);
10334 install_element (OSPF_NODE
, &ospf_compatible_rfc1583_cmd
);
10335 install_element (OSPF_NODE
, &no_ospf_compatible_rfc1583_cmd
);
10337 /* "network area" commands. */
10338 install_element (OSPF_NODE
, &ospf_network_area_cmd
);
10339 install_element (OSPF_NODE
, &no_ospf_network_area_cmd
);
10341 /* "area authentication" commands. */
10342 install_element (OSPF_NODE
, &ospf_area_authentication_message_digest_cmd
);
10343 install_element (OSPF_NODE
, &ospf_area_authentication_cmd
);
10344 install_element (OSPF_NODE
, &no_ospf_area_authentication_cmd
);
10346 /* "area range" commands. */
10347 install_element (OSPF_NODE
, &ospf_area_range_cmd
);
10348 install_element (OSPF_NODE
, &ospf_area_range_advertise_cmd
);
10349 install_element (OSPF_NODE
, &ospf_area_range_cost_cmd
);
10350 install_element (OSPF_NODE
, &ospf_area_range_advertise_cost_cmd
);
10351 install_element (OSPF_NODE
, &ospf_area_range_not_advertise_cmd
);
10352 install_element (OSPF_NODE
, &no_ospf_area_range_cmd
);
10353 install_element (OSPF_NODE
, &no_ospf_area_range_advertise_cmd
);
10354 install_element (OSPF_NODE
, &no_ospf_area_range_cost_cmd
);
10355 install_element (OSPF_NODE
, &no_ospf_area_range_advertise_cost_cmd
);
10356 install_element (OSPF_NODE
, &ospf_area_range_substitute_cmd
);
10357 install_element (OSPF_NODE
, &no_ospf_area_range_substitute_cmd
);
10359 /* "area virtual-link" commands. */
10360 install_element (OSPF_NODE
, &ospf_area_vlink_cmd
);
10361 install_element (OSPF_NODE
, &no_ospf_area_vlink_cmd
);
10363 install_element (OSPF_NODE
, &ospf_area_vlink_param1_cmd
);
10364 install_element (OSPF_NODE
, &no_ospf_area_vlink_param1_cmd
);
10366 install_element (OSPF_NODE
, &ospf_area_vlink_param2_cmd
);
10367 install_element (OSPF_NODE
, &no_ospf_area_vlink_param2_cmd
);
10369 install_element (OSPF_NODE
, &ospf_area_vlink_param3_cmd
);
10370 install_element (OSPF_NODE
, &no_ospf_area_vlink_param3_cmd
);
10372 install_element (OSPF_NODE
, &ospf_area_vlink_param4_cmd
);
10373 install_element (OSPF_NODE
, &no_ospf_area_vlink_param4_cmd
);
10375 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_args_cmd
);
10376 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_args_cmd
);
10377 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_cmd
);
10378 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_cmd
);
10380 install_element (OSPF_NODE
, &ospf_area_vlink_md5_cmd
);
10381 install_element (OSPF_NODE
, &no_ospf_area_vlink_md5_cmd
);
10383 install_element (OSPF_NODE
, &ospf_area_vlink_authkey_cmd
);
10384 install_element (OSPF_NODE
, &no_ospf_area_vlink_authkey_cmd
);
10386 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_args_authkey_cmd
);
10387 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_args_authkey_cmd
);
10388 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_authkey_cmd
);
10389 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_authkey_cmd
);
10391 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_args_md5_cmd
);
10392 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_args_md5_cmd
);
10393 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_md5_cmd
);
10394 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_md5_cmd
);
10396 /* "area stub" commands. */
10397 install_element (OSPF_NODE
, &ospf_area_stub_no_summary_cmd
);
10398 install_element (OSPF_NODE
, &ospf_area_stub_cmd
);
10399 install_element (OSPF_NODE
, &no_ospf_area_stub_no_summary_cmd
);
10400 install_element (OSPF_NODE
, &no_ospf_area_stub_cmd
);
10402 /* "area nssa" commands. */
10403 install_element (OSPF_NODE
, &ospf_area_nssa_cmd
);
10404 install_element (OSPF_NODE
, &ospf_area_nssa_translate_no_summary_cmd
);
10405 install_element (OSPF_NODE
, &ospf_area_nssa_translate_cmd
);
10406 install_element (OSPF_NODE
, &ospf_area_nssa_no_summary_cmd
);
10407 install_element (OSPF_NODE
, &no_ospf_area_nssa_cmd
);
10408 install_element (OSPF_NODE
, &no_ospf_area_nssa_no_summary_cmd
);
10410 install_element (OSPF_NODE
, &ospf_area_default_cost_cmd
);
10411 install_element (OSPF_NODE
, &no_ospf_area_default_cost_cmd
);
10413 install_element (OSPF_NODE
, &ospf_area_shortcut_cmd
);
10414 install_element (OSPF_NODE
, &no_ospf_area_shortcut_cmd
);
10416 install_element (OSPF_NODE
, &ospf_area_export_list_cmd
);
10417 install_element (OSPF_NODE
, &no_ospf_area_export_list_cmd
);
10419 install_element (OSPF_NODE
, &ospf_area_filter_list_cmd
);
10420 install_element (OSPF_NODE
, &no_ospf_area_filter_list_cmd
);
10422 install_element (OSPF_NODE
, &ospf_area_import_list_cmd
);
10423 install_element (OSPF_NODE
, &no_ospf_area_import_list_cmd
);
10425 /* SPF timer commands */
10426 install_element (OSPF_NODE
, &ospf_timers_throttle_spf_cmd
);
10427 install_element (OSPF_NODE
, &no_ospf_timers_throttle_spf_cmd
);
10428 install_element (OSPF_NODE
, &no_ospf_timers_throttle_spf_val_cmd
);
10430 /* LSA timers commands */
10431 install_element (OSPF_NODE
, &ospf_timers_min_ls_interval_cmd
);
10432 install_element (OSPF_NODE
, &no_ospf_timers_min_ls_interval_cmd
);
10433 install_element (OSPF_NODE
, &no_ospf_timers_min_ls_interval_val_cmd
);
10434 install_element (OSPF_NODE
, &ospf_timers_min_ls_arrival_cmd
);
10435 install_element (OSPF_NODE
, &no_ospf_timers_min_ls_arrival_cmd
);
10436 install_element (OSPF_NODE
, &no_ospf_timers_min_ls_arrival_val_cmd
);
10437 install_element (OSPF_NODE
, &ospf_timers_lsa_cmd
);
10438 install_element (OSPF_NODE
, &no_ospf_timers_lsa_cmd
);
10439 install_element (OSPF_NODE
, &no_ospf_timers_lsa_val_cmd
);
10441 /* refresh timer commands */
10442 install_element (OSPF_NODE
, &ospf_refresh_timer_cmd
);
10443 install_element (OSPF_NODE
, &no_ospf_refresh_timer_val_cmd
);
10444 install_element (OSPF_NODE
, &no_ospf_refresh_timer_cmd
);
10446 /* max-metric commands */
10447 install_element (OSPF_NODE
, &ospf_max_metric_router_lsa_admin_cmd
);
10448 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_admin_cmd
);
10449 install_element (OSPF_NODE
, &ospf_max_metric_router_lsa_startup_cmd
);
10450 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_startup_cmd
);
10451 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_startup_no_param_cmd
);
10452 install_element (OSPF_NODE
, &ospf_max_metric_router_lsa_shutdown_cmd
);
10453 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_shutdown_cmd
);
10454 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_shutdown_no_param_cmd
);
10456 /* reference bandwidth commands */
10457 install_element (OSPF_NODE
, &ospf_auto_cost_reference_bandwidth_cmd
);
10458 install_element (OSPF_NODE
, &no_ospf_auto_cost_reference_bandwidth_cmd
);
10459 install_element (OSPF_NODE
, &no_ospf_auto_cost_reference_bandwidth_val_cmd
);
10461 /* "neighbor" commands. */
10462 install_element (OSPF_NODE
, &ospf_neighbor_cmd
);
10463 install_element (OSPF_NODE
, &ospf_neighbor_priority_poll_interval_cmd
);
10464 install_element (OSPF_NODE
, &ospf_neighbor_priority_cmd
);
10465 install_element (OSPF_NODE
, &ospf_neighbor_poll_interval_cmd
);
10466 install_element (OSPF_NODE
, &ospf_neighbor_poll_interval_priority_cmd
);
10467 install_element (OSPF_NODE
, &no_ospf_neighbor_cmd
);
10468 install_element (OSPF_NODE
, &no_ospf_neighbor_priority_cmd
);
10469 install_element (OSPF_NODE
, &no_ospf_neighbor_poll_interval_cmd
);
10470 install_element (OSPF_NODE
, &no_ospf_neighbor_poll_interval_priority_cmd
);
10471 install_element (OSPF_NODE
, &no_ospf_neighbor_priority_pollinterval_cmd
);
10473 /* write multiplier commands */
10474 install_element (OSPF_NODE
, &ospf_write_multiplier_cmd
);
10475 install_element (OSPF_NODE
, &no_ospf_write_multiplier_cmd
);
10476 install_element (OSPF_NODE
, &write_multiplier_cmd
);
10477 install_element (OSPF_NODE
, &no_write_multiplier_cmd
);
10478 install_element (OSPF_NODE
, &no_write_multiplier_val_cmd
);
10480 /* Init interface related vty commands. */
10481 ospf_vty_if_init ();
10483 /* Init zebra related vty commands. */
10484 ospf_vty_zebra_init ();