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
* 1000) == ospf
->ref_bandwidth
)
2918 ospf
->ref_bandwidth
= refbw
* 1000;
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
);
3268 #ifdef HAVE_OPAQUE_LSA
3271 json_object_int_add(json_area
, "lsaOpaqueLinkNumber", ospf_lsdb_count (area
->lsdb
, OSPF_OPAQUE_LINK_LSA
));
3272 json_object_int_add(json_area
, "lsaOpaqueLinkChecksum", ospf_lsdb_checksum (area
->lsdb
, OSPF_OPAQUE_LINK_LSA
));
3273 json_object_int_add(json_area
, "lsaOpaqueAreaNumber", ospf_lsdb_count (area
->lsdb
, OSPF_OPAQUE_AREA_LSA
));
3274 json_object_int_add(json_area
, "lsaOpaqueAreaChecksum", ospf_lsdb_checksum (area
->lsdb
, OSPF_OPAQUE_AREA_LSA
));
3278 vty_out (vty
, " Number of opaque link LSA %ld. Checksum Sum 0x%08x%s",
3279 ospf_lsdb_count (area
->lsdb
, OSPF_OPAQUE_LINK_LSA
),
3280 ospf_lsdb_checksum (area
->lsdb
, OSPF_OPAQUE_LINK_LSA
), VTY_NEWLINE
);
3281 vty_out (vty
, " Number of opaque area LSA %ld. Checksum Sum 0x%08x%s",
3282 ospf_lsdb_count (area
->lsdb
, OSPF_OPAQUE_AREA_LSA
),
3283 ospf_lsdb_checksum (area
->lsdb
, OSPF_OPAQUE_AREA_LSA
), VTY_NEWLINE
);
3285 #endif /* HAVE_OPAQUE_LSA */
3288 json_object_object_add(json_areas
, inet_ntoa (area
->area_id
), json_area
);
3290 vty_out (vty
, "%s", VTY_NEWLINE
);
3294 show_ip_ospf_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
3296 struct listnode
*node
, *nnode
;
3297 struct ospf_area
* area
;
3298 struct timeval result
;
3299 char timebuf
[OSPF_TIME_DUMP_SIZE
];
3300 json_object
*json
= NULL
;
3301 json_object
*json_areas
= NULL
;
3304 json
= json_object_new_object();
3305 json_areas
= json_object_new_object();
3311 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
3315 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
3316 VTY_NEWLINE
, VTY_NEWLINE
);
3320 /* Show Router ID. */
3323 json_object_string_add(json
, "routerId", inet_ntoa (ospf
->router_id
));
3327 vty_out (vty
, " OSPF Routing Process, Router ID: %s%s",
3328 inet_ntoa (ospf
->router_id
),
3332 /* Graceful shutdown */
3333 if (ospf
->t_deferred_shutdown
)
3337 unsigned long time_store
= 0;
3338 result
= tv_sub (ospf
->t_deferred_shutdown
->u
.sands
, recent_relative_time());
3339 time_store
= (1000 * result
.tv_sec
) + (result
.tv_usec
/ 1000);
3340 json_object_int_add(json
, "deferredShutdownMsecs", time_store
);
3344 vty_out (vty
, " Deferred shutdown in progress, %s remaining%s",
3345 ospf_timer_dump (ospf
->t_deferred_shutdown
,
3346 timebuf
, sizeof (timebuf
)), VTY_NEWLINE
);
3350 /* Show capability. */
3353 json_object_boolean_true_add(json
, "tosRoutesOnly");
3354 json_object_boolean_true_add(json
, "rfc2328Conform");
3355 if (CHECK_FLAG (ospf
->config
, OSPF_RFC1583_COMPATIBLE
))
3357 json_object_boolean_true_add(json
, "rfc1583Compatibility");
3362 vty_out (vty
, " Supports only single TOS (TOS0) routes%s", VTY_NEWLINE
);
3363 vty_out (vty
, " This implementation conforms to RFC2328%s", VTY_NEWLINE
);
3364 vty_out (vty
, " RFC1583Compatibility flag is %s%s",
3365 CHECK_FLAG (ospf
->config
, OSPF_RFC1583_COMPATIBLE
) ?
3366 "enabled" : "disabled", VTY_NEWLINE
);
3369 #ifdef HAVE_OPAQUE_LSA
3372 if (CHECK_FLAG (ospf
->config
, OSPF_OPAQUE_CAPABLE
))
3374 json_object_boolean_true_add(json
, "opaqueCapable");
3376 if (IS_OPAQUE_LSA_ORIGINATION_BLOCKED (ospf
->opaque
))
3378 json_object_boolean_true_add(json
, "lsaOpaqueOriginationBlocked");
3383 vty_out (vty
, " OpaqueCapability flag is %s%s%s",
3384 CHECK_FLAG (ospf
->config
, OSPF_OPAQUE_CAPABLE
) ? "enabled" : "disabled",
3385 IS_OPAQUE_LSA_ORIGINATION_BLOCKED (ospf
->opaque
) ? " (origination blocked)" : "",
3388 #endif /* HAVE_OPAQUE_LSA */
3390 /* Show stub-router configuration */
3391 if (ospf
->stub_router_startup_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
3392 || ospf
->stub_router_shutdown_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3396 json_object_boolean_true_add(json
, "stubAdvertisement");
3397 if (ospf
->stub_router_startup_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3398 json_object_int_add(json
,"postStartEnabledMsecs", ospf
->stub_router_startup_time
/ 1000);
3399 if (ospf
->stub_router_shutdown_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3400 json_object_int_add(json
,"preShutdownEnabledMsecs", ospf
->stub_router_shutdown_time
/ 1000);
3404 vty_out (vty
, " Stub router advertisement is configured%s",
3406 if (ospf
->stub_router_startup_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3407 vty_out (vty
, " Enabled for %us after start-up%s",
3408 ospf
->stub_router_startup_time
, VTY_NEWLINE
);
3409 if (ospf
->stub_router_shutdown_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3410 vty_out (vty
, " Enabled for %us prior to full shutdown%s",
3411 ospf
->stub_router_shutdown_time
, VTY_NEWLINE
);
3415 /* Show SPF timers. */
3418 json_object_int_add(json
, "spfScheduleDelayMsecs", ospf
->spf_delay
);
3419 json_object_int_add(json
, "holdtimeMinMsecs", ospf
->spf_holdtime
);
3420 json_object_int_add(json
, "holdtimeMaxMsecs", ospf
->spf_max_holdtime
);
3421 json_object_int_add(json
, "holdtimeMultplier", ospf
->spf_hold_multiplier
);
3425 vty_out (vty
, " Initial SPF scheduling delay %d millisec(s)%s"
3426 " Minimum hold time between consecutive SPFs %d millisec(s)%s"
3427 " Maximum hold time between consecutive SPFs %d millisec(s)%s"
3428 " Hold time multiplier is currently %d%s",
3429 ospf
->spf_delay
, VTY_NEWLINE
,
3430 ospf
->spf_holdtime
, VTY_NEWLINE
,
3431 ospf
->spf_max_holdtime
, VTY_NEWLINE
,
3432 ospf
->spf_hold_multiplier
, VTY_NEWLINE
);
3437 if (ospf
->ts_spf
.tv_sec
|| ospf
->ts_spf
.tv_usec
)
3439 unsigned long time_store
= 0;
3441 result
= tv_sub (recent_relative_time(), ospf
->ts_spf
);
3442 result
= tv_sub (result
, recent_relative_time());
3443 time_store
= (1000 * result
.tv_sec
) + (result
.tv_usec
/ 1000);
3444 json_object_int_add(json
, "spfLastExecutedMsecs", time_store
);
3446 time_store
= (1000 * ospf
->ts_spf_duration
.tv_sec
) + (ospf
->ts_spf_duration
.tv_usec
/ 1000);
3447 json_object_int_add(json
, "spfLastDurationMsecs", time_store
);
3450 json_object_boolean_true_add(json
, "spfHasNotRun");
3454 vty_out (vty
, " SPF algorithm ");
3455 if (ospf
->ts_spf
.tv_sec
|| ospf
->ts_spf
.tv_usec
)
3457 result
= tv_sub (recent_relative_time(), ospf
->ts_spf
);
3458 vty_out (vty
, "last executed %s ago%s",
3459 ospf_timeval_dump (&result
, timebuf
, sizeof (timebuf
)),
3461 vty_out (vty
, " Last SPF duration %s%s",
3462 ospf_timeval_dump (&ospf
->ts_spf_duration
, timebuf
, sizeof (timebuf
)),
3466 vty_out (vty
, "has not been run%s", VTY_NEWLINE
);
3471 struct timeval temp_time
;
3472 unsigned long time_store
= 0;
3474 if (ospf
->t_spf_calc
)
3476 temp_time
= tv_sub (ospf
->t_spf_calc
->u
.sands
, recent_relative_time());
3477 time_store
= (1000 * temp_time
.tv_sec
) + (temp_time
.tv_usec
/ 1000);
3478 json_object_int_add(json
, "spfTimerDueInMsecs", time_store
);
3481 json_object_int_add(json
, "lsaMinIntervalMsecs", ospf
->min_ls_interval
);
3482 json_object_int_add(json
, "lsaMinArrivalMsecs", ospf
->min_ls_arrival
);
3483 /* Show write multiplier values */
3484 json_object_int_add(json
, "writeMultiplier", ospf
->write_oi_count
);
3485 /* Show refresh parameters. */
3486 json_object_int_add(json
, "refreshTimerMsecs", ospf
->lsa_refresh_interval
* 1000);
3490 vty_out (vty
, " SPF timer %s%s%s",
3491 (ospf
->t_spf_calc
? "due in " : "is "),
3492 ospf_timer_dump (ospf
->t_spf_calc
, timebuf
, sizeof (timebuf
)),
3495 vty_out (vty
, " LSA minimum interval %d msecs%s",
3496 ospf
->min_ls_interval
, VTY_NEWLINE
);
3497 vty_out (vty
, " LSA minimum arrival %d msecs%s",
3498 ospf
->min_ls_arrival
, VTY_NEWLINE
);
3500 /* Show write multiplier values */
3501 vty_out (vty
, " Write Multiplier set to %d %s",
3502 ospf
->write_oi_count
, VTY_NEWLINE
);
3504 /* Show refresh parameters. */
3505 vty_out (vty
, " Refresh timer %d secs%s",
3506 ospf
->lsa_refresh_interval
, VTY_NEWLINE
);
3509 /* Show ABR/ASBR flags. */
3510 if (CHECK_FLAG (ospf
->flags
, OSPF_FLAG_ABR
))
3513 json_object_string_add(json
, "abrType", ospf_abr_type_descr_str
[ospf
->abr_type
]);
3515 vty_out (vty
, " This router is an ABR, ABR type is: %s%s",
3516 ospf_abr_type_descr_str
[ospf
->abr_type
], VTY_NEWLINE
);
3518 if (CHECK_FLAG (ospf
->flags
, OSPF_FLAG_ASBR
))
3521 json_object_string_add(json
, "asbrRouter", "injectingExternalRoutingInformation");
3523 vty_out (vty
, " This router is an ASBR "
3524 "(injecting external routing information)%s", VTY_NEWLINE
);
3527 /* Show Number of AS-external-LSAs. */
3530 json_object_int_add(json
, "lsaExternalCounter",
3531 ospf_lsdb_count (ospf
->lsdb
, OSPF_AS_EXTERNAL_LSA
));
3532 json_object_int_add(json
, "lsaExternalChecksum",
3533 ospf_lsdb_checksum (ospf
->lsdb
, OSPF_AS_EXTERNAL_LSA
));
3537 vty_out (vty
, " Number of external LSA %ld. Checksum Sum 0x%08x%s",
3538 ospf_lsdb_count (ospf
->lsdb
, OSPF_AS_EXTERNAL_LSA
),
3539 ospf_lsdb_checksum (ospf
->lsdb
, OSPF_AS_EXTERNAL_LSA
), VTY_NEWLINE
);
3542 #ifdef HAVE_OPAQUE_LSA
3545 json_object_int_add(json
, "lsaAsopaqueCounter",
3546 ospf_lsdb_count (ospf
->lsdb
, OSPF_OPAQUE_AS_LSA
));
3547 json_object_int_add(json
, "lsaAsOpaqueChecksum",
3548 ospf_lsdb_checksum (ospf
->lsdb
, OSPF_OPAQUE_AS_LSA
));
3552 vty_out (vty
, " Number of opaque AS LSA %ld. Checksum Sum 0x%08x%s",
3553 ospf_lsdb_count (ospf
->lsdb
, OSPF_OPAQUE_AS_LSA
),
3554 ospf_lsdb_checksum (ospf
->lsdb
, OSPF_OPAQUE_AS_LSA
), VTY_NEWLINE
);
3556 #endif /* HAVE_OPAQUE_LSA */
3558 /* Show number of areas attached. */
3560 json_object_int_add(json
, "attachedAreaCounter", listcount (ospf
->areas
));
3562 vty_out (vty
, " Number of areas attached to this router: %d%s",
3563 listcount (ospf
->areas
), VTY_NEWLINE
);
3565 if (CHECK_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_CHANGES
))
3567 if (CHECK_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_DETAIL
))
3570 json_object_boolean_true_add(json
, "adjacencyChangesLoggedAll");
3572 vty_out(vty
, " All adjacency changes are logged%s",VTY_NEWLINE
);
3577 json_object_boolean_true_add(json
, "adjacencyChangesLogged");
3579 vty_out(vty
, " Adjacency changes are logged%s",VTY_NEWLINE
);
3582 /* Show each area status. */
3583 for (ALL_LIST_ELEMENTS (ospf
->areas
, node
, nnode
, area
))
3584 show_ip_ospf_area (vty
, area
, json_areas
, use_json
);
3588 json_object_object_add(json
, "areas", json_areas
);
3589 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
3590 json_object_free(json
);
3593 vty_out (vty
, "%s",VTY_NEWLINE
);
3598 DEFUN (show_ip_ospf
,
3600 "show ip ospf {json}",
3603 "OSPF information\n"
3604 "JavaScript Object Notation\n")
3607 u_char uj
= use_json(argc
, argv
);
3609 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
3612 return (show_ip_ospf_common(vty
, ospf
, uj
));
3615 DEFUN (show_ip_ospf_instance
,
3616 show_ip_ospf_instance_cmd
,
3617 "show ip ospf <1-65535> {json}",
3620 "OSPF information\n"
3622 "JavaScript Object Notation\n")
3625 u_short instance
= 0;
3626 u_char uj
= use_json(argc
, argv
);
3628 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
3629 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
3632 return (show_ip_ospf_common(vty
, ospf
, uj
));
3636 show_ip_ospf_interface_sub (struct vty
*vty
, struct ospf
*ospf
, struct interface
*ifp
,
3637 json_object
*json_interface_sub
, u_char use_json
)
3640 struct ospf_neighbor
*nbr
;
3641 struct route_node
*rn
;
3643 /* Is interface up? */
3646 is_up
= if_is_operative(ifp
);
3648 json_object_boolean_true_add(json_interface_sub
, "ifUp");
3650 json_object_boolean_false_add(json_interface_sub
, "ifDown");
3652 json_object_int_add(json_interface_sub
, "ifIndex", ifp
->ifindex
);
3653 json_object_int_add(json_interface_sub
, "mtuBytes", ifp
->mtu
);
3654 json_object_int_add(json_interface_sub
, "bandwidthKbit", ifp
->bandwidth
);
3655 json_object_string_add(json_interface_sub
, "ifFlags", if_flag_dump(ifp
->flags
));
3659 vty_out (vty
, "%s is %s%s", ifp
->name
,
3660 ((is_up
= if_is_operative(ifp
)) ? "up" : "down"), VTY_NEWLINE
);
3661 vty_out (vty
, " ifindex %u, MTU %u bytes, BW %u Kbit %s%s",
3662 ifp
->ifindex
, ifp
->mtu
, ifp
->bandwidth
, if_flag_dump(ifp
->flags
),
3666 /* Is interface OSPF enabled? */
3669 if (ospf_oi_count(ifp
) == 0)
3671 json_object_boolean_false_add(json_interface_sub
, "ospfEnabled");
3676 json_object_boolean_false_add(json_interface_sub
, "ospfRunning");
3680 json_object_boolean_true_add(json_interface_sub
, "ospfEnabled");
3684 if (ospf_oi_count(ifp
) == 0)
3686 vty_out (vty
, " OSPF not enabled on this interface%s", VTY_NEWLINE
);
3691 vty_out (vty
, " OSPF is enabled, but not running on this interface%s",
3697 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
3699 struct ospf_interface
*oi
= rn
->info
;
3704 if (CHECK_FLAG(oi
->connected
->flags
, ZEBRA_IFA_UNNUMBERED
))
3707 json_object_boolean_true_add(json_interface_sub
, "ifUnnumbered");
3709 vty_out (vty
, " This interface is UNNUMBERED,");
3713 /* Show OSPF interface information. */
3716 json_object_string_add(json_interface_sub
, "ipAddress", inet_ntoa (oi
->address
->u
.prefix4
));
3717 json_object_int_add(json_interface_sub
, "ipAddressPrefixlen", oi
->address
->prefixlen
);
3720 vty_out (vty
, " Internet Address %s/%d,",
3721 inet_ntoa (oi
->address
->u
.prefix4
), oi
->address
->prefixlen
);
3723 if (oi
->connected
->destination
|| oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
3725 struct in_addr
*dest
;
3728 if (CONNECTED_PEER(oi
->connected
)
3729 || oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
3734 /* For Vlinks, showing the peer address is probably more
3735 * * * * * informative than the local interface that is being used
3737 if (oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
3738 dest
= &oi
->vl_data
->peer_addr
;
3740 dest
= &oi
->connected
->destination
->u
.prefix4
;
3744 json_object_string_add(json_interface_sub
, "ospfIfType", dstr
);
3745 if (oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
3746 json_object_string_add(json_interface_sub
, "vlinkPeer", inet_ntoa (*dest
));
3748 json_object_string_add(json_interface_sub
, "localIfUsed", inet_ntoa (*dest
));
3751 vty_out (vty
, " %s %s,", dstr
, inet_ntoa (*dest
));
3756 json_object_string_add(json_interface_sub
, "area", ospf_area_desc_string (oi
->area
));
3757 if (OSPF_IF_PARAM(oi
, mtu_ignore
))
3758 json_object_boolean_true_add(json_interface_sub
, "mtuMismatchDetect");
3759 json_object_string_add(json_interface_sub
, "routerId", inet_ntoa (ospf
->router_id
));
3760 json_object_string_add(json_interface_sub
, "networkType", ospf_network_type_str
[oi
->type
]);
3761 json_object_int_add(json_interface_sub
, "cost", oi
->output_cost
);
3762 json_object_int_add(json_interface_sub
, "transmitDelayMsecs", 1000 / OSPF_IF_PARAM (oi
,transmit_delay
));
3763 json_object_string_add(json_interface_sub
, "state", LOOKUP (ospf_ism_state_msg
, oi
->state
));
3764 json_object_int_add(json_interface_sub
, "priority", PRIORITY (oi
));
3768 vty_out (vty
, " Area %s%s", ospf_area_desc_string (oi
->area
),
3771 vty_out (vty
, " MTU mismatch detection:%s%s",
3772 OSPF_IF_PARAM(oi
, mtu_ignore
) ? "disabled" : "enabled", VTY_NEWLINE
);
3774 vty_out (vty
, " Router ID %s, Network Type %s, Cost: %d%s",
3775 inet_ntoa (ospf
->router_id
), ospf_network_type_str
[oi
->type
],
3776 oi
->output_cost
, VTY_NEWLINE
);
3778 vty_out (vty
, " Transmit Delay is %d sec, State %s, Priority %d%s",
3779 OSPF_IF_PARAM (oi
,transmit_delay
), LOOKUP (ospf_ism_state_msg
, oi
->state
),
3780 PRIORITY (oi
), VTY_NEWLINE
);
3783 /* Show DR information. */
3784 if (DR (oi
).s_addr
== 0)
3787 vty_out (vty
, " No backup designated router on this network%s",
3792 nbr
= ospf_nbr_lookup_by_addr (oi
->nbrs
, &BDR (oi
));
3796 vty_out (vty
, " No backup designated router on this network%s",
3803 json_object_string_add(json_interface_sub
, "bdrId", inet_ntoa (nbr
->router_id
));
3804 json_object_string_add(json_interface_sub
, "bdrAddress", inet_ntoa (nbr
->address
.u
.prefix4
));
3808 vty_out (vty
, " Backup Designated Router (ID) %s,",
3809 inet_ntoa (nbr
->router_id
));
3810 vty_out (vty
, " Interface Address %s%s",
3811 inet_ntoa (nbr
->address
.u
.prefix4
), VTY_NEWLINE
);
3816 /* Next network-LSA sequence number we'll use, if we're elected DR */
3817 if (oi
->params
&& ntohl (oi
->params
->network_lsa_seqnum
) != OSPF_INITIAL_SEQUENCE_NUMBER
)
3820 json_object_int_add(json_interface_sub
, "networkLsaSequence", ntohl (oi
->params
->network_lsa_seqnum
));
3822 vty_out (vty
, " Saved Network-LSA sequence number 0x%x%s",
3823 ntohl (oi
->params
->network_lsa_seqnum
), VTY_NEWLINE
);
3828 if (OI_MEMBER_CHECK(oi
, MEMBER_ALLROUTERS
)
3829 || OI_MEMBER_CHECK(oi
, MEMBER_DROUTERS
))
3831 if (OI_MEMBER_CHECK(oi
, MEMBER_ALLROUTERS
))
3832 json_object_boolean_true_add(json_interface_sub
, "mcastMemberOspfAllRouters");
3833 if (OI_MEMBER_CHECK(oi
, MEMBER_DROUTERS
))
3834 json_object_boolean_true_add(json_interface_sub
, "mcastMemberOspfDesignatedRouters");
3839 vty_out (vty
, " Multicast group memberships:");
3840 if (OI_MEMBER_CHECK(oi
, MEMBER_ALLROUTERS
)
3841 || OI_MEMBER_CHECK(oi
, MEMBER_DROUTERS
))
3843 if (OI_MEMBER_CHECK(oi
, MEMBER_ALLROUTERS
))
3844 vty_out (vty
, " OSPFAllRouters");
3845 if (OI_MEMBER_CHECK(oi
, MEMBER_DROUTERS
))
3846 vty_out (vty
, " OSPFDesignatedRouters");
3849 vty_out (vty
, " <None>");
3850 vty_out (vty
, "%s", VTY_NEWLINE
);
3855 if (OSPF_IF_PARAM (oi
, fast_hello
) == 0)
3856 json_object_int_add(json_interface_sub
, "timerMsecs", 1000 /OSPF_IF_PARAM (oi
, v_hello
));
3858 json_object_int_add(json_interface_sub
, "timerMsecs", 1000 / OSPF_IF_PARAM (oi
, fast_hello
));
3859 json_object_int_add(json_interface_sub
, "timerDeadMsecs", 1000 / OSPF_IF_PARAM (oi
, v_wait
));
3860 json_object_int_add(json_interface_sub
, "timerWaitMsecs", 1000 / OSPF_IF_PARAM (oi
, v_wait
));
3861 json_object_int_add(json_interface_sub
, "timerRetransmit", 1000 / OSPF_IF_PARAM (oi
, retransmit_interval
));
3865 vty_out (vty
, " Timer intervals configured,");
3866 vty_out (vty
, " Hello ");
3867 if (OSPF_IF_PARAM (oi
, fast_hello
) == 0)
3868 vty_out (vty
, "%ds,", OSPF_IF_PARAM (oi
, v_hello
));
3870 vty_out (vty
, "%dms,", 1000 / OSPF_IF_PARAM (oi
, fast_hello
));
3871 vty_out (vty
, " Dead %ds, Wait %ds, Retransmit %d%s",
3872 OSPF_IF_PARAM (oi
, v_wait
),
3873 OSPF_IF_PARAM (oi
, v_wait
),
3874 OSPF_IF_PARAM (oi
, retransmit_interval
),
3878 if (OSPF_IF_PASSIVE_STATUS (oi
) == OSPF_IF_ACTIVE
)
3880 char timebuf
[OSPF_TIME_DUMP_SIZE
];
3883 struct timeval result
;
3884 unsigned long time_store
= 0;
3885 result
= tv_sub (oi
->t_hello
->u
.sands
, recent_relative_time());
3886 time_store
= (1000 * result
.tv_sec
) + (result
.tv_usec
/ 1000);
3887 json_object_int_add(json_interface_sub
, "timerHelloInMsecs", time_store
);
3890 vty_out (vty
, " Hello due in %s%s",
3891 ospf_timer_dump (oi
->t_hello
, timebuf
, sizeof(timebuf
)),
3894 else /* passive-interface is set */
3897 json_object_boolean_true_add(json_interface_sub
, "timerPassiveIface");
3899 vty_out (vty
, " No Hellos (Passive interface)%s", VTY_NEWLINE
);
3904 json_object_int_add(json_interface_sub
, "nbrCount", ospf_nbr_count (oi
, 0));
3905 json_object_int_add(json_interface_sub
, "nbrAdjacentCount", ospf_nbr_count (oi
, NSM_Full
));
3908 vty_out (vty
, " Neighbor Count is %d, Adjacent neighbor count is %d%s",
3909 ospf_nbr_count (oi
, 0), ospf_nbr_count (oi
, NSM_Full
),
3911 ospf_bfd_interface_show(vty
, ifp
, json_interface_sub
, use_json
);
3916 show_ip_ospf_interface_common (struct vty
*vty
, struct ospf
*ospf
, int argc
,
3917 const char **argv
, int iface_argv
, u_char use_json
)
3919 struct interface
*ifp
;
3920 struct listnode
*node
;
3921 json_object
*json
= NULL
;
3922 json_object
*json_interface_sub
= NULL
;
3926 json
= json_object_new_object();
3927 json_interface_sub
= json_object_new_object();
3933 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
3935 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
3936 VTY_NEWLINE
, VTY_NEWLINE
);
3939 if (argc
== (iface_argv
+ 1))
3941 /* Show All Interfaces.*/
3942 for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT
), node
, ifp
))
3944 if (ospf_oi_count(ifp
))
3946 show_ip_ospf_interface_sub (vty
, ospf
, ifp
, json_interface_sub
, use_json
);
3950 else if (argv
[iface_argv
] && strcmp(argv
[iface_argv
], "json") == 0)
3952 /* Show All Interfaces. */
3953 for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT
), node
, ifp
))
3955 if (ospf_oi_count(ifp
))
3957 show_ip_ospf_interface_sub (vty
, ospf
, ifp
, json_interface_sub
, use_json
);
3958 json_object_object_add(json
, ifp
->name
, json_interface_sub
);
3964 /* Interface name is specified. */
3965 if ((ifp
= if_lookup_by_name (argv
[iface_argv
])) == NULL
)
3968 json_object_boolean_true_add(json
, "noSuchIface");
3970 vty_out (vty
, "No such interface name%s", VTY_NEWLINE
);
3974 show_ip_ospf_interface_sub (vty
, ospf
, ifp
, json_interface_sub
, use_json
);
3976 json_object_object_add(json
, ifp
->name
, json_interface_sub
);
3982 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
3983 json_object_free(json
);
3986 vty_out (vty
, "%s", VTY_NEWLINE
);
3991 DEFUN (show_ip_ospf_interface
,
3992 show_ip_ospf_interface_cmd
,
3993 "show ip ospf interface [INTERFACE] {json}",
3996 "OSPF information\n"
3997 "Interface information\n"
3999 "JavaScript Object Notation\n")
4002 u_char uj
= use_json(argc
, argv
);
4004 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4007 return show_ip_ospf_interface_common(vty
, ospf
, argc
, argv
, 0, uj
);
4010 DEFUN (show_ip_ospf_instance_interface
,
4011 show_ip_ospf_instance_interface_cmd
,
4012 "show ip ospf <1-65535> interface [INTERFACE] {json}",
4015 "OSPF information\n"
4017 "Interface information\n"
4019 "JavaScript Object Notation\n")
4022 u_short instance
= 0;
4023 u_char uj
= use_json(argc
, argv
);
4025 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4026 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
4029 return show_ip_ospf_interface_common(vty
, ospf
, argc
, argv
, 1, uj
);
4033 show_ip_ospf_neighbour_header (struct vty
*vty
)
4035 vty_out (vty
, "%s%-15s %3s %-15s %9s %-15s %-20s %5s %5s %5s%s",
4037 "Neighbor ID", "Pri", "State", "Dead Time",
4038 "Address", "Interface", "RXmtL", "RqstL", "DBsmL",
4043 show_ip_ospf_neighbor_sub (struct vty
*vty
, struct ospf_interface
*oi
, json_object
*json
, u_char use_json
)
4045 struct route_node
*rn
;
4046 struct ospf_neighbor
*nbr
;
4048 char timebuf
[OSPF_TIME_DUMP_SIZE
];
4049 json_object
*json_neighbor
= NULL
;
4051 for (rn
= route_top (oi
->nbrs
); rn
; rn
= route_next (rn
))
4053 if ((nbr
= rn
->info
))
4055 /* Do not show myself. */
4056 if (nbr
!= oi
->nbr_self
)
4058 /* Down state is not shown. */
4059 if (nbr
->state
!= NSM_Down
)
4063 json_neighbor
= json_object_new_object();
4064 ospf_nbr_state_message (nbr
, msgbuf
, 16);
4066 struct timeval result
;
4067 unsigned long time_store
= 0;
4069 result
= tv_sub (nbr
->t_inactivity
->u
.sands
, recent_relative_time());
4070 time_store
= (1000 * result
.tv_sec
) + (result
.tv_usec
/ 1000);
4072 json_object_int_add (json_neighbor
, "priority", nbr
->priority
);
4073 json_object_string_add (json_neighbor
, "state", msgbuf
);
4074 json_object_int_add (json_neighbor
, "deadTimeMsecs", time_store
);
4075 json_object_string_add (json_neighbor
, "address", inet_ntoa (nbr
->src
));
4076 json_object_string_add (json_neighbor
, "ifaceName", IF_NAME (oi
));
4077 json_object_int_add (json_neighbor
, "retransmitCounter", ospf_ls_retransmit_count (nbr
));
4078 json_object_int_add (json_neighbor
, "requestCounter", ospf_ls_request_count (nbr
));
4079 json_object_int_add (json_neighbor
, "dbSummaryCounter", ospf_db_summary_count (nbr
));
4080 if (nbr
->state
== NSM_Attempt
&& nbr
->router_id
.s_addr
== 0)
4081 json_object_object_add(json
, "neighbor", json_neighbor
);
4083 json_object_object_add(json
, inet_ntoa (nbr
->router_id
), json_neighbor
);
4087 ospf_nbr_state_message (nbr
, msgbuf
, 16);
4089 if (nbr
->state
== NSM_Attempt
&& nbr
->router_id
.s_addr
== 0)
4090 vty_out (vty
, "%-15s %3d %-15s ",
4094 vty_out (vty
, "%-15s %3d %-15s ",
4095 inet_ntoa (nbr
->router_id
), nbr
->priority
,
4098 vty_out (vty
, "%9s ",
4099 ospf_timer_dump (nbr
->t_inactivity
, timebuf
,
4101 vty_out (vty
, "%-15s ", inet_ntoa (nbr
->src
));
4102 vty_out (vty
, "%-20s %5ld %5ld %5d%s",
4103 IF_NAME (oi
), ospf_ls_retransmit_count (nbr
),
4104 ospf_ls_request_count (nbr
), ospf_db_summary_count (nbr
),
4114 show_ip_ospf_neighbor_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
4116 struct ospf_interface
*oi
;
4117 struct listnode
*node
;
4118 json_object
*json
= NULL
;
4121 json
= json_object_new_object();
4123 show_ip_ospf_neighbour_header (vty
);
4128 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4130 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4131 VTY_NEWLINE
, VTY_NEWLINE
);
4134 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4135 show_ip_ospf_neighbor_sub (vty
, oi
, json
, use_json
);
4139 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4140 json_object_free(json
);
4143 vty_out (vty
, "%s", VTY_NEWLINE
);
4148 DEFUN (show_ip_ospf_neighbor
,
4149 show_ip_ospf_neighbor_cmd
,
4150 "show ip ospf neighbor {json}",
4153 "OSPF information\n"
4155 "JavaScript Object Notation\n")
4158 u_char uj
= use_json(argc
, argv
);
4160 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4163 return show_ip_ospf_neighbor_common(vty
, ospf
, uj
);
4167 DEFUN (show_ip_ospf_instance_neighbor
,
4168 show_ip_ospf_instance_neighbor_cmd
,
4169 "show ip ospf <1-65535> neighbor {json}",
4172 "OSPF information\n"
4175 "JavaScript Object Notation\n")
4178 u_short instance
= 0;
4179 u_char uj
= use_json(argc
, argv
);
4181 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4182 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4185 return show_ip_ospf_neighbor_common(vty
, ospf
, uj
);
4189 show_ip_ospf_neighbor_all_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
4191 struct listnode
*node
;
4192 struct ospf_interface
*oi
;
4193 json_object
*json
= NULL
;
4194 json_object
*json_neighbor_sub
= NULL
;
4198 json
= json_object_new_object();
4199 json_neighbor_sub
= json_object_new_object();
4202 show_ip_ospf_neighbour_header (vty
);
4207 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4209 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4210 VTY_NEWLINE
, VTY_NEWLINE
);
4213 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4215 struct listnode
*nbr_node
;
4216 struct ospf_nbr_nbma
*nbr_nbma
;
4218 show_ip_ospf_neighbor_sub (vty
, oi
, json
, use_json
);
4220 /* print Down neighbor status */
4221 for (ALL_LIST_ELEMENTS_RO (oi
->nbr_nbma
, nbr_node
, nbr_nbma
))
4223 if (nbr_nbma
->nbr
== NULL
4224 || nbr_nbma
->nbr
->state
== NSM_Down
)
4228 json_object_int_add (json_neighbor_sub
, "nbrNbmaPriority", nbr_nbma
->priority
);
4229 json_object_boolean_true_add (json_neighbor_sub
, "nbrNbmaDown");
4230 json_object_string_add (json_neighbor_sub
, "nbrNbmaIfaceName", IF_NAME (oi
));
4231 json_object_int_add (json_neighbor_sub
, "nbrNbmaRetransmitCounter", 0);
4232 json_object_int_add (json_neighbor_sub
, "nbrNbmaRequestCounter", 0);
4233 json_object_int_add (json_neighbor_sub
, "nbrNbmaDbSummaryCounter", 0);
4234 json_object_object_add(json
, inet_ntoa (nbr_nbma
->addr
), json_neighbor_sub
);
4238 vty_out (vty
, "%-15s %3d %-15s %9s ",
4239 "-", nbr_nbma
->priority
, "Down", "-");
4240 vty_out (vty
, "%-15s %-20s %5d %5d %5d%s",
4241 inet_ntoa (nbr_nbma
->addr
), IF_NAME (oi
),
4242 0, 0, 0, VTY_NEWLINE
);
4250 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4251 json_object_free(json
);
4254 vty_out (vty
, "%s", VTY_NEWLINE
);
4259 DEFUN (show_ip_ospf_neighbor_all
,
4260 show_ip_ospf_neighbor_all_cmd
,
4261 "show ip ospf neighbor all {json}",
4264 "OSPF information\n"
4266 "include down status neighbor\n"
4267 "JavaScript Object Notation\n")
4270 u_char uj
= use_json(argc
, argv
);
4272 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4275 return show_ip_ospf_neighbor_all_common(vty
, ospf
, uj
);
4278 DEFUN (show_ip_ospf_instance_neighbor_all
,
4279 show_ip_ospf_instance_neighbor_all_cmd
,
4280 "show ip ospf <1-65535> neighbor all {json}",
4283 "OSPF information\n"
4286 "include down status neighbor\n"
4287 "JavaScript Object Notation\n")
4290 u_short instance
= 0;
4291 u_char uj
= use_json(argc
, argv
);
4293 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4294 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4297 return show_ip_ospf_neighbor_all_common(vty
, ospf
, uj
);
4301 show_ip_ospf_neighbor_int_common (struct vty
*vty
, struct ospf
*ospf
, int arg_base
,
4302 const char **argv
, u_char use_json
)
4304 struct interface
*ifp
;
4305 struct route_node
*rn
;
4306 json_object
*json
= NULL
;
4309 json
= json_object_new_object();
4311 show_ip_ospf_neighbour_header (vty
);
4316 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4318 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4319 VTY_NEWLINE
, VTY_NEWLINE
);
4322 ifp
= if_lookup_by_name (argv
[arg_base
]);
4326 json_object_boolean_true_add(json
, "noSuchIface");
4328 vty_out (vty
, "No such interface.%s", VTY_NEWLINE
);
4332 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
4334 struct ospf_interface
*oi
= rn
->info
;
4339 show_ip_ospf_neighbor_sub (vty
, oi
, json
, use_json
);
4344 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4345 json_object_free(json
);
4348 vty_out (vty
, "%s", VTY_NEWLINE
);
4353 DEFUN (show_ip_ospf_neighbor_int
,
4354 show_ip_ospf_neighbor_int_cmd
,
4355 "show ip ospf neighbor IFNAME {json}",
4358 "OSPF information\n"
4361 "JavaScript Object Notation\n")
4364 u_char uj
= use_json(argc
, argv
);
4366 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4369 return show_ip_ospf_neighbor_int_common(vty
, ospf
, 0, argv
, uj
);
4372 DEFUN (show_ip_ospf_instance_neighbor_int
,
4373 show_ip_ospf_instance_neighbor_int_cmd
,
4374 "show ip ospf <1-65535> neighbor IFNAME {json}",
4377 "OSPF information\n"
4381 "JavaScript Object Notation\n")
4384 u_short instance
= 0;
4385 u_char uj
= use_json(argc
, argv
);
4387 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4388 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4391 return show_ip_ospf_neighbor_int_common(vty
, ospf
, 1, argv
, uj
);
4395 show_ip_ospf_nbr_nbma_detail_sub (struct vty
*vty
, struct ospf_interface
*oi
, struct ospf_nbr_nbma
*nbr_nbma
,
4396 u_char use_json
, json_object
*json
)
4398 char timebuf
[OSPF_TIME_DUMP_SIZE
];
4399 json_object
*json_sub
= NULL
;
4402 json_sub
= json_object_new_object();
4403 else /* Show neighbor ID. */
4404 vty_out (vty
, " Neighbor %s,", "-");
4406 /* Show interface address. */
4408 json_object_string_add(json_sub
, "ifaceAddress", inet_ntoa (nbr_nbma
->addr
));
4410 vty_out (vty
, " interface address %s%s",
4411 inet_ntoa (nbr_nbma
->addr
), VTY_NEWLINE
);
4416 json_object_string_add(json_sub
, "areaId", ospf_area_desc_string (oi
->area
));
4417 json_object_string_add(json_sub
, "iface", IF_NAME (oi
));
4420 vty_out (vty
, " In the area %s via interface %s%s",
4421 ospf_area_desc_string (oi
->area
), IF_NAME (oi
), VTY_NEWLINE
);
4423 /* Show neighbor priority and state. */
4426 json_object_int_add(json_sub
, "nbrPriority", nbr_nbma
->priority
);
4427 json_object_string_add(json_sub
, "nbrState", "down");
4430 vty_out (vty
, " Neighbor priority is %d, State is %s,",
4431 nbr_nbma
->priority
, "Down");
4433 /* Show state changes. */
4435 json_object_int_add(json_sub
, "stateChangeCounter", nbr_nbma
->state_change
);
4437 vty_out (vty
, " %d state changes%s", nbr_nbma
->state_change
, VTY_NEWLINE
);
4439 /* Show PollInterval */
4441 json_object_int_add(json_sub
, "pollInterval", nbr_nbma
->v_poll
);
4443 vty_out (vty
, " Poll interval %d%s", nbr_nbma
->v_poll
, VTY_NEWLINE
);
4445 /* Show poll-interval timer. */
4448 struct timeval res
= tv_sub (nbr_nbma
->t_poll
->u
.sands
, recent_relative_time ());
4449 unsigned long time_store
= 0;
4450 time_store
= (1000 * res
.tv_sec
) + (res
.tv_usec
/ 1000);
4451 json_object_int_add(json_sub
, "pollIntervalTimerDueMsec", time_store
);
4454 vty_out (vty
, " Poll timer due in %s%s",
4455 ospf_timer_dump (nbr_nbma
->t_poll
, timebuf
, sizeof(timebuf
)),
4458 /* Show poll-interval timer thread. */
4461 if (nbr_nbma
->t_poll
!= NULL
)
4462 json_object_string_add(json_sub
, "pollIntervalTimerThread", "on");
4465 vty_out (vty
, " Thread Poll Timer %s%s",
4466 nbr_nbma
->t_poll
!= NULL
? "on" : "off", VTY_NEWLINE
);
4469 json_object_object_add(json
, "noNbrId", json_sub
);
4473 show_ip_ospf_neighbor_detail_sub (struct vty
*vty
, struct ospf_interface
*oi
,
4474 struct ospf_neighbor
*nbr
, u_char use_json
, json_object
*json
)
4476 char timebuf
[OSPF_TIME_DUMP_SIZE
];
4477 json_object
*json_sub
= NULL
;
4480 json_sub
= json_object_new_object();
4483 /* Show neighbor ID. */
4484 if (nbr
->state
== NSM_Attempt
&& nbr
->router_id
.s_addr
== 0)
4485 vty_out (vty
, " Neighbor %s,", "-");
4487 vty_out (vty
, " Neighbor %s,", inet_ntoa (nbr
->router_id
));
4490 /* Show interface address. */
4492 json_object_string_add(json_sub
, "ifaceAddress", inet_ntoa (nbr
->address
.u
.prefix4
));
4494 vty_out (vty
, " interface address %s%s",
4495 inet_ntoa (nbr
->address
.u
.prefix4
), VTY_NEWLINE
);
4500 json_object_string_add(json_sub
, "areaId", ospf_area_desc_string (oi
->area
));
4501 json_object_string_add(json_sub
, "ifaceName", oi
->ifp
->name
);
4504 vty_out (vty
, " In the area %s via interface %s%s",
4505 ospf_area_desc_string (oi
->area
), oi
->ifp
->name
, VTY_NEWLINE
);
4507 /* Show neighbor priority and state. */
4510 json_object_int_add(json_sub
, "nbrPriority", nbr
->priority
);
4511 json_object_string_add(json_sub
, "nbrState", LOOKUP (ospf_nsm_state_msg
, nbr
->state
));
4514 vty_out (vty
, " Neighbor priority is %d, State is %s,",
4515 nbr
->priority
, LOOKUP (ospf_nsm_state_msg
, nbr
->state
));
4517 /* Show state changes. */
4519 json_object_int_add(json_sub
, "stateChangeCounter", nbr
->state_change
);
4521 vty_out (vty
, " %d state changes%s", nbr
->state_change
, VTY_NEWLINE
);
4523 if (nbr
->ts_last_progress
.tv_sec
|| nbr
->ts_last_progress
.tv_usec
)
4525 struct timeval res
= tv_sub (recent_relative_time (), nbr
->ts_last_progress
);
4528 unsigned long time_store
= 0;
4529 time_store
= (1000 * res
.tv_sec
) + (res
.tv_usec
/ 1000);
4530 json_object_int_add(json_sub
, "lastPrgrsvChangeMsec", time_store
);
4534 vty_out (vty
, " Most recent state change statistics:%s",
4536 vty_out (vty
, " Progressive change %s ago%s",
4537 ospf_timeval_dump (&res
, timebuf
, sizeof(timebuf
)),
4542 if (nbr
->ts_last_regress
.tv_sec
|| nbr
->ts_last_regress
.tv_usec
)
4544 struct timeval res
= tv_sub (recent_relative_time (), nbr
->ts_last_regress
);
4547 unsigned long time_store
= 0;
4548 time_store
= (1000 * res
.tv_sec
) + (res
.tv_usec
/ 1000);
4549 json_object_int_add(json_sub
, "lastRegressiveChangeMsec", time_store
);
4550 if (nbr
->last_regress_str
)
4551 json_object_string_add(json_sub
, "lastRegressiveChangeReason", nbr
->last_regress_str
);
4555 vty_out (vty
, " Regressive change %s ago, due to %s%s",
4556 ospf_timeval_dump (&res
, timebuf
, sizeof(timebuf
)),
4557 (nbr
->last_regress_str
? nbr
->last_regress_str
: "??"),
4562 /* Show Designated Rotuer ID. */
4564 json_object_string_add(json_sub
, "routerDesignatedId", inet_ntoa (nbr
->d_router
));
4566 vty_out (vty
, " DR is %s,", inet_ntoa (nbr
->d_router
));
4568 /* Show Backup Designated Rotuer ID. */
4570 json_object_string_add(json_sub
, "routerDesignatedBackupId", inet_ntoa (nbr
->bd_router
));
4572 vty_out (vty
, " BDR is %s%s", inet_ntoa (nbr
->bd_router
), VTY_NEWLINE
);
4577 json_object_int_add(json_sub
, "optionsCounter", nbr
->options
);
4578 json_object_string_add(json_sub
, "optionsList", ospf_options_dump (nbr
->options
));
4581 vty_out (vty
, " Options %d %s%s", nbr
->options
,
4582 ospf_options_dump (nbr
->options
), VTY_NEWLINE
);
4584 /* Show Router Dead interval timer. */
4587 struct timeval res
= tv_sub (nbr
->t_inactivity
->u
.sands
, recent_relative_time ());
4588 unsigned long time_store
= 0;
4589 time_store
= (1000 * res
.tv_sec
) + (res
.tv_usec
/ 1000);
4590 json_object_int_add(json_sub
, "routerDeadIntervalTimerDueMsec", time_store
);
4593 vty_out (vty
, " Dead timer due in %s%s",
4594 ospf_timer_dump (nbr
->t_inactivity
, timebuf
, sizeof (timebuf
)),
4597 /* Show Database Summary list. */
4599 json_object_int_add(json_sub
, "databaseSummaryListCounter", ospf_db_summary_count (nbr
));
4601 vty_out (vty
, " Database Summary List %d%s",
4602 ospf_db_summary_count (nbr
), VTY_NEWLINE
);
4604 /* Show Link State Request list. */
4606 json_object_int_add(json_sub
, "linkStateRequestListCounter", ospf_ls_request_count (nbr
));
4608 vty_out (vty
, " Link State Request List %ld%s",
4609 ospf_ls_request_count (nbr
), VTY_NEWLINE
);
4611 /* Show Link State Retransmission list. */
4613 json_object_int_add(json_sub
, "linkStateRetransmissionListCounter", ospf_ls_retransmit_count (nbr
));
4615 vty_out (vty
, " Link State Retransmission List %ld%s",
4616 ospf_ls_retransmit_count (nbr
), VTY_NEWLINE
);
4618 /* Show inactivity timer thread. */
4621 if (nbr
->t_inactivity
!= NULL
)
4622 json_object_string_add(json_sub
, "threadInactivityTimer", "on");
4625 vty_out (vty
, " Thread Inactivity Timer %s%s",
4626 nbr
->t_inactivity
!= NULL
? "on" : "off", VTY_NEWLINE
);
4628 /* Show Database Description retransmission thread. */
4631 if (nbr
->t_db_desc
!= NULL
)
4632 json_object_string_add(json_sub
, "threadDatabaseDescriptionRetransmission", "on");
4635 vty_out (vty
, " Thread Database Description Retransmision %s%s",
4636 nbr
->t_db_desc
!= NULL
? "on" : "off", VTY_NEWLINE
);
4638 /* Show Link State Request Retransmission thread. */
4641 if (nbr
->t_ls_req
!= NULL
)
4642 json_object_string_add(json_sub
, "threadLinkStateRequestRetransmission", "on");
4645 vty_out (vty
, " Thread Link State Request Retransmission %s%s",
4646 nbr
->t_ls_req
!= NULL
? "on" : "off", VTY_NEWLINE
);
4648 /* Show Link State Update Retransmission thread. */
4651 if (nbr
->t_ls_upd
!= NULL
)
4652 json_object_string_add(json_sub
, "threadLinkStateUpdateRetransmission", "on");
4655 vty_out (vty
, " Thread Link State Update Retransmission %s%s%s",
4656 nbr
->t_ls_upd
!= NULL
? "on" : "off", VTY_NEWLINE
, VTY_NEWLINE
);
4660 if (nbr
->state
== NSM_Attempt
&& nbr
->router_id
.s_addr
== 0)
4661 json_object_object_add(json
, "noNbrId", json_sub
);
4663 json_object_object_add(json
, inet_ntoa (nbr
->router_id
), json_sub
);
4666 ospf_bfd_show_info(vty
, nbr
->bfd_info
, json
, use_json
, 0);
4670 show_ip_ospf_neighbor_id_common (struct vty
*vty
, struct ospf
*ospf
,
4671 int arg_base
, const char **argv
, u_char use_json
)
4673 struct listnode
*node
;
4674 struct ospf_neighbor
*nbr
;
4675 struct ospf_interface
*oi
;
4676 struct in_addr router_id
;
4678 json_object
*json
= NULL
;
4681 json
= json_object_new_object();
4686 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4688 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4689 VTY_NEWLINE
, VTY_NEWLINE
);
4692 ret
= inet_aton (argv
[arg_base
], &router_id
);
4696 vty_out (vty
, "Please specify Neighbor ID by A.B.C.D%s", VTY_NEWLINE
);
4700 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4702 if ((nbr
= ospf_nbr_lookup_by_routerid (oi
->nbrs
, &router_id
)))
4704 show_ip_ospf_neighbor_detail_sub (vty
, oi
, nbr
, use_json
, json
);
4710 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4711 json_object_free(json
);
4714 vty_out (vty
, "%s", VTY_NEWLINE
);
4719 DEFUN (show_ip_ospf_neighbor_id
,
4720 show_ip_ospf_neighbor_id_cmd
,
4721 "show ip ospf neighbor A.B.C.D {json}",
4724 "OSPF information\n"
4727 "JavaScript Object Notation\n")
4730 u_char uj
= use_json(argc
, argv
);
4732 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4735 return show_ip_ospf_neighbor_id_common(vty
, ospf
, 0, argv
, uj
);
4738 DEFUN (show_ip_ospf_instance_neighbor_id
,
4739 show_ip_ospf_instance_neighbor_id_cmd
,
4740 "show ip ospf <1-65535> neighbor A.B.C.D {json}",
4743 "OSPF information\n"
4747 "JavaScript Object Notation\n")
4750 u_short instance
= 0;
4751 u_char uj
= use_json(argc
, argv
);
4753 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4754 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4757 return show_ip_ospf_neighbor_id_common(vty
, ospf
, 1, argv
, uj
);
4761 show_ip_ospf_neighbor_detail_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
4763 struct ospf_interface
*oi
;
4764 struct listnode
*node
;
4765 json_object
*json
= NULL
;
4768 json
= json_object_new_object();
4773 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4775 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4776 VTY_NEWLINE
, VTY_NEWLINE
);
4779 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4781 struct route_node
*rn
;
4782 struct ospf_neighbor
*nbr
;
4784 for (rn
= route_top (oi
->nbrs
); rn
; rn
= route_next (rn
))
4786 if ((nbr
= rn
->info
))
4788 if (nbr
!= oi
->nbr_self
)
4790 if (nbr
->state
!= NSM_Down
)
4792 show_ip_ospf_neighbor_detail_sub (vty
, oi
, nbr
, use_json
, json
);
4801 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4802 json_object_free(json
);
4805 vty_out (vty
, "%s", VTY_NEWLINE
);
4810 DEFUN (show_ip_ospf_neighbor_detail
,
4811 show_ip_ospf_neighbor_detail_cmd
,
4812 "show ip ospf neighbor detail {json}",
4815 "OSPF information\n"
4817 "detail of all neighbors\n"
4818 "JavaScript Object Notation\n")
4821 u_char uj
= use_json(argc
, argv
);
4823 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4826 return show_ip_ospf_neighbor_detail_common(vty
, ospf
, uj
);
4829 DEFUN (show_ip_ospf_instance_neighbor_detail
,
4830 show_ip_ospf_instance_neighbor_detail_cmd
,
4831 "show ip ospf <1-65535> neighbor detail {json}",
4834 "OSPF information\n"
4837 "detail of all neighbors\n"
4838 "JavaScript Object Notation\n")
4841 u_short instance
= 0;
4842 u_char uj
= use_json(argc
, argv
);
4844 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4845 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
4848 return show_ip_ospf_neighbor_detail_common(vty
, ospf
, uj
);
4852 show_ip_ospf_neighbor_detail_all_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
4854 struct listnode
*node
;
4855 struct ospf_interface
*oi
;
4856 json_object
*json
= NULL
;
4859 json
= json_object_new_object();
4864 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4866 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4867 VTY_NEWLINE
, VTY_NEWLINE
);
4870 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4872 struct route_node
*rn
;
4873 struct ospf_neighbor
*nbr
;
4874 struct ospf_nbr_nbma
*nbr_nbma
;
4876 for (rn
= route_top (oi
->nbrs
); rn
; rn
= route_next (rn
))
4877 if ((nbr
= rn
->info
))
4878 if (nbr
!= oi
->nbr_self
)
4879 if (oi
->type
== OSPF_IFTYPE_NBMA
&& nbr
->state
!= NSM_Down
)
4880 show_ip_ospf_neighbor_detail_sub (vty
, oi
, rn
->info
, use_json
, json
);
4882 if (oi
->type
== OSPF_IFTYPE_NBMA
)
4884 struct listnode
*nd
;
4886 for (ALL_LIST_ELEMENTS_RO (oi
->nbr_nbma
, nd
, nbr_nbma
))
4888 if (nbr_nbma
->nbr
== NULL
|| nbr_nbma
->nbr
->state
== NSM_Down
)
4889 show_ip_ospf_nbr_nbma_detail_sub (vty
, oi
, nbr_nbma
, use_json
, json
);
4896 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4897 json_object_free(json
);
4901 vty_out (vty
, "%s", VTY_NEWLINE
);
4907 DEFUN (show_ip_ospf_neighbor_detail_all
,
4908 show_ip_ospf_neighbor_detail_all_cmd
,
4909 "show ip ospf neighbor detail all {json}",
4912 "OSPF information\n"
4914 "detail of all neighbors\n"
4915 "include down status neighbor\n"
4916 "JavaScript Object Notation\n")
4919 u_char uj
= use_json(argc
, argv
);
4921 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4924 return show_ip_ospf_neighbor_detail_all_common(vty
, ospf
, uj
);
4927 DEFUN (show_ip_ospf_instance_neighbor_detail_all
,
4928 show_ip_ospf_instance_neighbor_detail_all_cmd
,
4929 "show ip ospf <1-65535> neighbor detail all {json}",
4932 "OSPF information\n"
4935 "detail of all neighbors\n"
4936 "include down status neighbor\n"
4937 "JavaScript Object Notation\n")
4940 u_short instance
= 0;
4941 u_char uj
= use_json(argc
, argv
);
4943 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4944 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4947 return show_ip_ospf_neighbor_detail_all_common(vty
, ospf
, uj
);
4951 show_ip_ospf_neighbor_int_detail_common (struct vty
*vty
, struct ospf
*ospf
,
4952 int arg_base
, const char **argv
, u_char use_json
)
4954 struct ospf_interface
*oi
;
4955 struct interface
*ifp
;
4956 struct route_node
*rn
, *nrn
;
4957 struct ospf_neighbor
*nbr
;
4958 json_object
*json
= NULL
;
4961 json
= json_object_new_object();
4966 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4968 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4969 VTY_NEWLINE
, VTY_NEWLINE
);
4972 ifp
= if_lookup_by_name (argv
[arg_base
]);
4976 vty_out (vty
, "No such interface.%s", VTY_NEWLINE
);
4980 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
4982 if ((oi
= rn
->info
))
4984 for (nrn
= route_top (oi
->nbrs
); nrn
; nrn
= route_next (nrn
))
4986 if ((nbr
= nrn
->info
))
4988 if (nbr
!= oi
->nbr_self
)
4990 if (nbr
->state
!= NSM_Down
)
4991 show_ip_ospf_neighbor_detail_sub (vty
, oi
, nbr
, use_json
, json
);
5000 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
5001 json_object_free(json
);
5004 vty_out (vty
, "%s", VTY_NEWLINE
);
5009 DEFUN (show_ip_ospf_neighbor_int_detail
,
5010 show_ip_ospf_neighbor_int_detail_cmd
,
5011 "show ip ospf neighbor IFNAME detail {json}",
5014 "OSPF information\n"
5017 "detail of all neighbors\n"
5018 "JavaScript Object Notation\n")
5021 u_char uj
= use_json(argc
, argv
);
5023 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
5026 return show_ip_ospf_neighbor_int_detail_common(vty
, ospf
, 0, argv
, uj
);
5029 DEFUN (show_ip_ospf_instance_neighbor_int_detail
,
5030 show_ip_ospf_instance_neighbor_int_detail_cmd
,
5031 "show ip ospf <1-65535> neighbor IFNAME detail {json}",
5034 "OSPF information\n"
5038 "detail of all neighbors\n"
5039 "JavaScript Object Notation\n")
5042 u_short instance
= 0;
5043 u_char uj
= use_json(argc
, argv
);
5045 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
5046 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
5049 return show_ip_ospf_neighbor_int_detail_common(vty
, ospf
, 1, argv
, uj
);
5052 /* Show functions */
5054 show_lsa_summary (struct vty
*vty
, struct ospf_lsa
*lsa
, int self
)
5056 struct router_lsa
*rl
;
5057 struct summary_lsa
*sl
;
5058 struct as_external_lsa
*asel
;
5059 struct prefix_ipv4 p
;
5062 /* If self option is set, check LSA self flag. */
5063 if (self
== 0 || IS_LSA_SELF (lsa
))
5065 /* LSA common part show. */
5066 vty_out (vty
, "%-15s ", inet_ntoa (lsa
->data
->id
));
5067 vty_out (vty
, "%-15s %4d 0x%08lx 0x%04x",
5068 inet_ntoa (lsa
->data
->adv_router
), LS_AGE (lsa
),
5069 (u_long
)ntohl (lsa
->data
->ls_seqnum
), ntohs (lsa
->data
->checksum
));
5070 /* LSA specific part show. */
5071 switch (lsa
->data
->type
)
5073 case OSPF_ROUTER_LSA
:
5074 rl
= (struct router_lsa
*) lsa
->data
;
5075 vty_out (vty
, " %-d", ntohs (rl
->links
));
5077 case OSPF_SUMMARY_LSA
:
5078 sl
= (struct summary_lsa
*) lsa
->data
;
5081 p
.prefix
= sl
->header
.id
;
5082 p
.prefixlen
= ip_masklen (sl
->mask
);
5083 apply_mask_ipv4 (&p
);
5085 vty_out (vty
, " %s/%d", inet_ntoa (p
.prefix
), p
.prefixlen
);
5087 case OSPF_AS_EXTERNAL_LSA
:
5088 case OSPF_AS_NSSA_LSA
:
5089 asel
= (struct as_external_lsa
*) lsa
->data
;
5092 p
.prefix
= asel
->header
.id
;
5093 p
.prefixlen
= ip_masklen (asel
->mask
);
5094 apply_mask_ipv4 (&p
);
5096 vty_out (vty
, " %s %s/%d [0x%lx]",
5097 IS_EXTERNAL_METRIC (asel
->e
[0].tos
) ? "E2" : "E1",
5098 inet_ntoa (p
.prefix
), p
.prefixlen
,
5099 (u_long
)ntohl (asel
->e
[0].route_tag
));
5101 case OSPF_NETWORK_LSA
:
5102 case OSPF_ASBR_SUMMARY_LSA
:
5103 #ifdef HAVE_OPAQUE_LSA
5104 case OSPF_OPAQUE_LINK_LSA
:
5105 case OSPF_OPAQUE_AREA_LSA
:
5106 case OSPF_OPAQUE_AS_LSA
:
5107 #endif /* HAVE_OPAQUE_LSA */
5111 vty_out (vty
, VTY_NEWLINE
);
5117 static const char *show_database_desc
[] =
5120 "Router Link States",
5122 "Summary Link States",
5123 "ASBR-Summary Link States",
5124 "AS External Link States",
5125 "Group Membership LSA",
5126 "NSSA-external Link States",
5127 #ifdef HAVE_OPAQUE_LSA
5129 "Link-Local Opaque-LSA",
5130 "Area-Local Opaque-LSA",
5131 "AS-external Opaque-LSA",
5132 #endif /* HAVE_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",
5145 #ifdef HAVE_OPAQUE_LSA
5147 "Opaque-Type/Id ADV Router Age Seq# CkSum",
5148 "Opaque-Type/Id ADV Router Age Seq# CkSum",
5149 "Opaque-Type/Id ADV Router Age Seq# CkSum",
5150 #endif /* HAVE_OPAQUE_LSA */
5154 show_ip_ospf_database_header (struct vty
*vty
, struct ospf_lsa
*lsa
)
5156 struct router_lsa
*rlsa
= (struct router_lsa
*) lsa
->data
;
5158 vty_out (vty
, " LS age: %d%s", LS_AGE (lsa
), VTY_NEWLINE
);
5159 vty_out (vty
, " Options: 0x%-2x : %s%s",
5161 ospf_options_dump(lsa
->data
->options
),
5163 vty_out (vty
, " LS Flags: 0x%-2x %s%s",
5165 ((lsa
->flags
& OSPF_LSA_LOCAL_XLT
) ? "(Translated from Type-7)" : ""),
5168 if (lsa
->data
->type
== OSPF_ROUTER_LSA
)
5170 vty_out (vty
, " Flags: 0x%x" , rlsa
->flags
);
5173 vty_out (vty
, " :%s%s%s%s",
5174 IS_ROUTER_LSA_BORDER (rlsa
) ? " ABR" : "",
5175 IS_ROUTER_LSA_EXTERNAL (rlsa
) ? " ASBR" : "",
5176 IS_ROUTER_LSA_VIRTUAL (rlsa
) ? " VL-endpoint" : "",
5177 IS_ROUTER_LSA_SHORTCUT (rlsa
) ? " Shortcut" : "");
5179 vty_out (vty
, "%s", VTY_NEWLINE
);
5181 vty_out (vty
, " LS Type: %s%s",
5182 LOOKUP (ospf_lsa_type_msg
, lsa
->data
->type
), VTY_NEWLINE
);
5183 vty_out (vty
, " Link State ID: %s %s%s", inet_ntoa (lsa
->data
->id
),
5184 LOOKUP (ospf_link_state_id_type_msg
, lsa
->data
->type
), VTY_NEWLINE
);
5185 vty_out (vty
, " Advertising Router: %s%s",
5186 inet_ntoa (lsa
->data
->adv_router
), VTY_NEWLINE
);
5187 vty_out (vty
, " LS Seq Number: %08lx%s", (u_long
)ntohl (lsa
->data
->ls_seqnum
),
5189 vty_out (vty
, " Checksum: 0x%04x%s", ntohs (lsa
->data
->checksum
),
5191 vty_out (vty
, " Length: %d%s", ntohs (lsa
->data
->length
), VTY_NEWLINE
);
5194 const char *link_type_desc
[] =
5197 "another Router (point-to-point)",
5198 "a Transit Network",
5203 const char *link_id_desc
[] =
5206 "Neighboring Router ID",
5207 "Designated Router address",
5209 "Neighboring Router ID",
5212 const char *link_data_desc
[] =
5215 "Router Interface address",
5216 "Router Interface address",
5218 "Router Interface address",
5221 /* Show router-LSA each Link information. */
5223 show_ip_ospf_database_router_links (struct vty
*vty
,
5224 struct router_lsa
*rl
)
5229 len
= ntohs (rl
->header
.length
) - 4;
5230 for (i
= 0; i
< ntohs (rl
->links
) && len
> 0; len
-= 12, i
++)
5232 type
= rl
->link
[i
].type
;
5234 vty_out (vty
, " Link connected to: %s%s",
5235 link_type_desc
[type
], VTY_NEWLINE
);
5236 vty_out (vty
, " (Link ID) %s: %s%s", link_id_desc
[type
],
5237 inet_ntoa (rl
->link
[i
].link_id
), VTY_NEWLINE
);
5238 vty_out (vty
, " (Link Data) %s: %s%s", link_data_desc
[type
],
5239 inet_ntoa (rl
->link
[i
].link_data
), VTY_NEWLINE
);
5240 vty_out (vty
, " Number of TOS metrics: 0%s", VTY_NEWLINE
);
5241 vty_out (vty
, " TOS 0 Metric: %d%s",
5242 ntohs (rl
->link
[i
].metric
), VTY_NEWLINE
);
5243 vty_out (vty
, "%s", VTY_NEWLINE
);
5247 /* Show router-LSA detail information. */
5249 show_router_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5253 struct router_lsa
*rl
= (struct router_lsa
*) lsa
->data
;
5255 show_ip_ospf_database_header (vty
, lsa
);
5257 vty_out (vty
, " Number of Links: %d%s%s", ntohs (rl
->links
),
5258 VTY_NEWLINE
, VTY_NEWLINE
);
5260 show_ip_ospf_database_router_links (vty
, rl
);
5261 vty_out (vty
, "%s", VTY_NEWLINE
);
5267 /* Show network-LSA detail information. */
5269 show_network_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5275 struct network_lsa
*nl
= (struct network_lsa
*) lsa
->data
;
5277 show_ip_ospf_database_header (vty
, lsa
);
5279 vty_out (vty
, " Network Mask: /%d%s",
5280 ip_masklen (nl
->mask
), VTY_NEWLINE
);
5282 length
= ntohs (lsa
->data
->length
) - OSPF_LSA_HEADER_SIZE
- 4;
5284 for (i
= 0; length
> 0; i
++, length
-= 4)
5285 vty_out (vty
, " Attached Router: %s%s",
5286 inet_ntoa (nl
->routers
[i
]), VTY_NEWLINE
);
5288 vty_out (vty
, "%s", VTY_NEWLINE
);
5294 /* Show summary-LSA detail information. */
5296 show_summary_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5300 struct summary_lsa
*sl
= (struct summary_lsa
*) lsa
->data
;
5302 show_ip_ospf_database_header (vty
, lsa
);
5304 vty_out (vty
, " Network Mask: /%d%s", ip_masklen (sl
->mask
),
5306 vty_out (vty
, " TOS: 0 Metric: %d%s", GET_METRIC (sl
->metric
),
5308 vty_out (vty
, "%s", VTY_NEWLINE
);
5314 /* Show summary-ASBR-LSA detail information. */
5316 show_summary_asbr_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5320 struct summary_lsa
*sl
= (struct summary_lsa
*) lsa
->data
;
5322 show_ip_ospf_database_header (vty
, lsa
);
5324 vty_out (vty
, " Network Mask: /%d%s",
5325 ip_masklen (sl
->mask
), VTY_NEWLINE
);
5326 vty_out (vty
, " TOS: 0 Metric: %d%s", GET_METRIC (sl
->metric
),
5328 vty_out (vty
, "%s", VTY_NEWLINE
);
5334 /* Show AS-external-LSA detail information. */
5336 show_as_external_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5340 struct as_external_lsa
*al
= (struct as_external_lsa
*) lsa
->data
;
5342 show_ip_ospf_database_header (vty
, lsa
);
5344 vty_out (vty
, " Network Mask: /%d%s",
5345 ip_masklen (al
->mask
), VTY_NEWLINE
);
5346 vty_out (vty
, " Metric Type: %s%s",
5347 IS_EXTERNAL_METRIC (al
->e
[0].tos
) ?
5348 "2 (Larger than any link state path)" : "1", VTY_NEWLINE
);
5349 vty_out (vty
, " TOS: 0%s", VTY_NEWLINE
);
5350 vty_out (vty
, " Metric: %d%s",
5351 GET_METRIC (al
->e
[0].metric
), VTY_NEWLINE
);
5352 vty_out (vty
, " Forward Address: %s%s",
5353 inet_ntoa (al
->e
[0].fwd_addr
), VTY_NEWLINE
);
5355 vty_out (vty
, " External Route Tag: %lu%s%s",
5356 (u_long
)ntohl (al
->e
[0].route_tag
), VTY_NEWLINE
, VTY_NEWLINE
);
5364 show_as_external_lsa_stdvty (struct ospf_lsa
*lsa
)
5366 struct as_external_lsa
*al
= (struct as_external_lsa
*) lsa
->data
;
5368 /* show_ip_ospf_database_header (vty, lsa); */
5370 zlog_debug( " Network Mask: /%d%s",
5371 ip_masklen (al
->mask
), "\n");
5372 zlog_debug( " Metric Type: %s%s",
5373 IS_EXTERNAL_METRIC (al
->e
[0].tos
) ?
5374 "2 (Larger than any link state path)" : "1", "\n");
5375 zlog_debug( " TOS: 0%s", "\n");
5376 zlog_debug( " Metric: %d%s",
5377 GET_METRIC (al
->e
[0].metric
), "\n");
5378 zlog_debug( " Forward Address: %s%s",
5379 inet_ntoa (al
->e
[0].fwd_addr
), "\n");
5381 zlog_debug( " External Route Tag: %u%s%s",
5382 ntohl (al
->e
[0].route_tag
), "\n", "\n");
5388 /* Show AS-NSSA-LSA detail information. */
5390 show_as_nssa_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5394 struct as_external_lsa
*al
= (struct as_external_lsa
*) lsa
->data
;
5396 show_ip_ospf_database_header (vty
, lsa
);
5398 vty_out (vty
, " Network Mask: /%d%s",
5399 ip_masklen (al
->mask
), VTY_NEWLINE
);
5400 vty_out (vty
, " Metric Type: %s%s",
5401 IS_EXTERNAL_METRIC (al
->e
[0].tos
) ?
5402 "2 (Larger than any link state path)" : "1", VTY_NEWLINE
);
5403 vty_out (vty
, " TOS: 0%s", VTY_NEWLINE
);
5404 vty_out (vty
, " Metric: %d%s",
5405 GET_METRIC (al
->e
[0].metric
), VTY_NEWLINE
);
5406 vty_out (vty
, " NSSA: Forward Address: %s%s",
5407 inet_ntoa (al
->e
[0].fwd_addr
), VTY_NEWLINE
);
5409 vty_out (vty
, " External Route Tag: %u%s%s",
5410 ntohl (al
->e
[0].route_tag
), VTY_NEWLINE
, VTY_NEWLINE
);
5417 show_func_dummy (struct vty
*vty
, struct ospf_lsa
*lsa
)
5422 #ifdef HAVE_OPAQUE_LSA
5424 show_opaque_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5428 show_ip_ospf_database_header (vty
, lsa
);
5429 show_opaque_info_detail (vty
, lsa
);
5431 vty_out (vty
, "%s", VTY_NEWLINE
);
5435 #endif /* HAVE_OPAQUE_LSA */
5437 int (*show_function
[])(struct vty
*, struct ospf_lsa
*) =
5440 show_router_lsa_detail
,
5441 show_network_lsa_detail
,
5442 show_summary_lsa_detail
,
5443 show_summary_asbr_lsa_detail
,
5444 show_as_external_lsa_detail
,
5446 show_as_nssa_lsa_detail
, /* almost same as external */
5447 #ifdef HAVE_OPAQUE_LSA
5449 show_opaque_lsa_detail
,
5450 show_opaque_lsa_detail
,
5451 show_opaque_lsa_detail
,
5452 #endif /* HAVE_OPAQUE_LSA */
5456 show_lsa_prefix_set (struct vty
*vty
, struct prefix_ls
*lp
, struct in_addr
*id
,
5457 struct in_addr
*adv_router
)
5459 memset (lp
, 0, sizeof (struct prefix_ls
));
5463 else if (adv_router
== NULL
)
5472 lp
->adv_router
= *adv_router
;
5477 show_lsa_detail_proc (struct vty
*vty
, struct route_table
*rt
,
5478 struct in_addr
*id
, struct in_addr
*adv_router
)
5480 struct prefix_ls lp
;
5481 struct route_node
*rn
, *start
;
5482 struct ospf_lsa
*lsa
;
5484 show_lsa_prefix_set (vty
, &lp
, id
, adv_router
);
5485 start
= route_node_get (rt
, (struct prefix
*) &lp
);
5488 route_lock_node (start
);
5489 for (rn
= start
; rn
; rn
= route_next_until (rn
, start
))
5490 if ((lsa
= rn
->info
))
5492 if (show_function
[lsa
->data
->type
] != NULL
)
5493 show_function
[lsa
->data
->type
] (vty
, lsa
);
5495 route_unlock_node (start
);
5499 /* Show detail LSA information
5500 -- if id is NULL then show all LSAs. */
5502 show_lsa_detail (struct vty
*vty
, struct ospf
*ospf
, int type
,
5503 struct in_addr
*id
, struct in_addr
*adv_router
)
5505 struct listnode
*node
;
5506 struct ospf_area
*area
;
5510 case OSPF_AS_EXTERNAL_LSA
:
5511 #ifdef HAVE_OPAQUE_LSA
5512 case OSPF_OPAQUE_AS_LSA
:
5513 #endif /* HAVE_OPAQUE_LSA */
5514 vty_out (vty
, " %s %s%s",
5515 show_database_desc
[type
],
5516 VTY_NEWLINE
, VTY_NEWLINE
);
5517 show_lsa_detail_proc (vty
, AS_LSDB (ospf
, type
), id
, adv_router
);
5520 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
5522 vty_out (vty
, "%s %s (Area %s)%s%s",
5523 VTY_NEWLINE
, show_database_desc
[type
],
5524 ospf_area_desc_string (area
), VTY_NEWLINE
, VTY_NEWLINE
);
5525 show_lsa_detail_proc (vty
, AREA_LSDB (area
, type
), id
, adv_router
);
5532 show_lsa_detail_adv_router_proc (struct vty
*vty
, struct route_table
*rt
,
5533 struct in_addr
*adv_router
)
5535 struct route_node
*rn
;
5536 struct ospf_lsa
*lsa
;
5538 for (rn
= route_top (rt
); rn
; rn
= route_next (rn
))
5539 if ((lsa
= rn
->info
))
5540 if (IPV4_ADDR_SAME (adv_router
, &lsa
->data
->adv_router
))
5542 if (CHECK_FLAG (lsa
->flags
, OSPF_LSA_LOCAL_XLT
))
5544 if (show_function
[lsa
->data
->type
] != NULL
)
5545 show_function
[lsa
->data
->type
] (vty
, lsa
);
5549 /* Show detail LSA information. */
5551 show_lsa_detail_adv_router (struct vty
*vty
, struct ospf
*ospf
, int type
,
5552 struct in_addr
*adv_router
)
5554 struct listnode
*node
;
5555 struct ospf_area
*area
;
5559 case OSPF_AS_EXTERNAL_LSA
:
5560 #ifdef HAVE_OPAQUE_LSA
5561 case OSPF_OPAQUE_AS_LSA
:
5562 #endif /* HAVE_OPAQUE_LSA */
5563 vty_out (vty
, " %s %s%s",
5564 show_database_desc
[type
],
5565 VTY_NEWLINE
, VTY_NEWLINE
);
5566 show_lsa_detail_adv_router_proc (vty
, AS_LSDB (ospf
, type
),
5570 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
5572 vty_out (vty
, "%s %s (Area %s)%s%s",
5573 VTY_NEWLINE
, show_database_desc
[type
],
5574 ospf_area_desc_string (area
), VTY_NEWLINE
, VTY_NEWLINE
);
5575 show_lsa_detail_adv_router_proc (vty
, AREA_LSDB (area
, type
),
5583 show_ip_ospf_database_summary (struct vty
*vty
, struct ospf
*ospf
, int self
)
5585 struct ospf_lsa
*lsa
;
5586 struct route_node
*rn
;
5587 struct ospf_area
*area
;
5588 struct listnode
*node
;
5591 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
5593 for (type
= OSPF_MIN_LSA
; type
< OSPF_MAX_LSA
; type
++)
5597 case OSPF_AS_EXTERNAL_LSA
:
5598 #ifdef HAVE_OPAQUE_LSA
5599 case OSPF_OPAQUE_AS_LSA
:
5600 #endif /* HAVE_OPAQUE_LSA */
5605 if (ospf_lsdb_count_self (area
->lsdb
, type
) > 0 ||
5606 (!self
&& ospf_lsdb_count (area
->lsdb
, type
) > 0))
5608 vty_out (vty
, " %s (Area %s)%s%s",
5609 show_database_desc
[type
],
5610 ospf_area_desc_string (area
),
5611 VTY_NEWLINE
, VTY_NEWLINE
);
5612 vty_out (vty
, "%s%s", show_database_header
[type
], VTY_NEWLINE
);
5614 LSDB_LOOP (AREA_LSDB (area
, type
), rn
, lsa
)
5615 show_lsa_summary (vty
, lsa
, self
);
5617 vty_out (vty
, "%s", VTY_NEWLINE
);
5622 for (type
= OSPF_MIN_LSA
; type
< OSPF_MAX_LSA
; type
++)
5626 case OSPF_AS_EXTERNAL_LSA
:
5627 #ifdef HAVE_OPAQUE_LSA
5628 case OSPF_OPAQUE_AS_LSA
:
5629 #endif /* HAVE_OPAQUE_LSA */
5634 if (ospf_lsdb_count_self (ospf
->lsdb
, type
) ||
5635 (!self
&& ospf_lsdb_count (ospf
->lsdb
, type
)))
5637 vty_out (vty
, " %s%s%s",
5638 show_database_desc
[type
],
5639 VTY_NEWLINE
, VTY_NEWLINE
);
5640 vty_out (vty
, "%s%s", show_database_header
[type
],
5643 LSDB_LOOP (AS_LSDB (ospf
, type
), rn
, lsa
)
5644 show_lsa_summary (vty
, lsa
, self
);
5646 vty_out (vty
, "%s", VTY_NEWLINE
);
5650 vty_out (vty
, "%s", VTY_NEWLINE
);
5654 show_ip_ospf_database_maxage (struct vty
*vty
, struct ospf
*ospf
)
5656 struct route_node
*rn
;
5658 vty_out (vty
, "%s MaxAge Link States:%s%s",
5659 VTY_NEWLINE
, VTY_NEWLINE
, VTY_NEWLINE
);
5661 for (rn
= route_top (ospf
->maxage_lsa
); rn
; rn
= route_next (rn
))
5663 struct ospf_lsa
*lsa
;
5665 if ((lsa
= rn
->info
) != NULL
)
5667 vty_out (vty
, "Link type: %d%s", lsa
->data
->type
, VTY_NEWLINE
);
5668 vty_out (vty
, "Link State ID: %s%s",
5669 inet_ntoa (lsa
->data
->id
), VTY_NEWLINE
);
5670 vty_out (vty
, "Advertising Router: %s%s",
5671 inet_ntoa (lsa
->data
->adv_router
), VTY_NEWLINE
);
5672 vty_out (vty
, "LSA lock count: %d%s", lsa
->lock
, VTY_NEWLINE
);
5673 vty_out (vty
, "%s", VTY_NEWLINE
);
5678 #define OSPF_LSA_TYPE_NSSA_DESC "NSSA external link state\n"
5679 #define OSPF_LSA_TYPE_NSSA_CMD_STR "|nssa-external"
5681 #ifdef HAVE_OPAQUE_LSA
5682 #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC "Link local Opaque-LSA\n"
5683 #define OSPF_LSA_TYPE_OPAQUE_AREA_DESC "Link area Opaque-LSA\n"
5684 #define OSPF_LSA_TYPE_OPAQUE_AS_DESC "Link AS Opaque-LSA\n"
5685 #define OSPF_LSA_TYPE_OPAQUE_CMD_STR "|opaque-link|opaque-area|opaque-as"
5686 #else /* HAVE_OPAQUE_LSA */
5687 #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC ""
5688 #define OSPF_LSA_TYPE_OPAQUE_AREA_DESC ""
5689 #define OSPF_LSA_TYPE_OPAQUE_AS_DESC ""
5690 #define OSPF_LSA_TYPE_OPAQUE_CMD_STR ""
5691 #endif /* HAVE_OPAQUE_LSA */
5693 #define OSPF_LSA_TYPES_CMD_STR \
5694 "asbr-summary|external|network|router|summary" \
5695 OSPF_LSA_TYPE_NSSA_CMD_STR \
5696 OSPF_LSA_TYPE_OPAQUE_CMD_STR
5698 #define OSPF_LSA_TYPES_DESC \
5699 "ASBR summary link states\n" \
5700 "External link states\n" \
5701 "Network link states\n" \
5702 "Router link states\n" \
5703 "Network summary link states\n" \
5704 OSPF_LSA_TYPE_NSSA_DESC \
5705 OSPF_LSA_TYPE_OPAQUE_LINK_DESC \
5706 OSPF_LSA_TYPE_OPAQUE_AREA_DESC \
5707 OSPF_LSA_TYPE_OPAQUE_AS_DESC
5710 show_ip_ospf_database_common (struct vty
*vty
, struct ospf
*ospf
,
5711 int arg_base
, int argc
, const char **argv
)
5714 struct in_addr id
, adv_router
;
5717 vty_out (vty
, "%sOSPF Instance: %d%s", VTY_NEWLINE
, ospf
->instance
,
5720 vty_out (vty
, "%s OSPF Router with ID (%s)%s%s", VTY_NEWLINE
,
5721 inet_ntoa (ospf
->router_id
), VTY_NEWLINE
, VTY_NEWLINE
);
5724 if (argc
== arg_base
+ 0)
5726 show_ip_ospf_database_summary (vty
, ospf
, 0);
5730 /* Set database type to show. */
5731 if (strncmp (argv
[arg_base
+ 0], "r", 1) == 0)
5732 type
= OSPF_ROUTER_LSA
;
5733 else if (strncmp (argv
[arg_base
+ 0], "ne", 2) == 0)
5734 type
= OSPF_NETWORK_LSA
;
5735 else if (strncmp (argv
[arg_base
+ 0], "ns", 2) == 0)
5736 type
= OSPF_AS_NSSA_LSA
;
5737 else if (strncmp (argv
[arg_base
+ 0], "su", 2) == 0)
5738 type
= OSPF_SUMMARY_LSA
;
5739 else if (strncmp (argv
[arg_base
+ 0], "a", 1) == 0)
5740 type
= OSPF_ASBR_SUMMARY_LSA
;
5741 else if (strncmp (argv
[arg_base
+ 0], "e", 1) == 0)
5742 type
= OSPF_AS_EXTERNAL_LSA
;
5743 else if (strncmp (argv
[arg_base
+ 0], "se", 2) == 0)
5745 show_ip_ospf_database_summary (vty
, ospf
, 1);
5748 else if (strncmp (argv
[arg_base
+ 0], "m", 1) == 0)
5750 show_ip_ospf_database_maxage (vty
, ospf
);
5753 #ifdef HAVE_OPAQUE_LSA
5754 else if (strncmp (argv
[arg_base
+ 0], "opaque-l", 8) == 0)
5755 type
= OSPF_OPAQUE_LINK_LSA
;
5756 else if (strncmp (argv
[arg_base
+ 0], "opaque-ar", 9) == 0)
5757 type
= OSPF_OPAQUE_AREA_LSA
;
5758 else if (strncmp (argv
[arg_base
+ 0], "opaque-as", 9) == 0)
5759 type
= OSPF_OPAQUE_AS_LSA
;
5760 #endif /* HAVE_OPAQUE_LSA */
5764 /* `show ip ospf database LSA'. */
5765 if (argc
== arg_base
+ 1)
5766 show_lsa_detail (vty
, ospf
, type
, NULL
, NULL
);
5767 else if (argc
>= arg_base
+ 2)
5769 ret
= inet_aton (argv
[arg_base
+ 1], &id
);
5773 /* `show ip ospf database LSA ID'. */
5774 if (argc
== arg_base
+ 2)
5775 show_lsa_detail (vty
, ospf
, type
, &id
, NULL
);
5776 /* `show ip ospf database LSA ID adv-router ADV_ROUTER'. */
5777 else if (argc
== arg_base
+ 3)
5779 if (strncmp (argv
[arg_base
+ 2], "s", 1) == 0)
5780 adv_router
= ospf
->router_id
;
5783 ret
= inet_aton (argv
[arg_base
+ 2], &adv_router
);
5787 show_lsa_detail (vty
, ospf
, type
, &id
, &adv_router
);
5794 DEFUN (show_ip_ospf_database
,
5795 show_ip_ospf_database_cmd
,
5796 "show ip ospf database",
5799 "OSPF information\n"
5800 "Database summary\n")
5804 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
5807 return (show_ip_ospf_database_common(vty
, ospf
, 0, argc
, argv
));
5810 ALIAS (show_ip_ospf_database
,
5811 show_ip_ospf_database_type_cmd
,
5812 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
"|max-age|self-originate)",
5815 "OSPF information\n"
5816 "Database summary\n"
5818 "LSAs in MaxAge list\n"
5819 "Self-originated link states\n")
5821 ALIAS (show_ip_ospf_database
,
5822 show_ip_ospf_database_type_id_cmd
,
5823 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D",
5826 "OSPF information\n"
5827 "Database summary\n"
5829 "Link State ID (as an IP address)\n")
5831 ALIAS (show_ip_ospf_database
,
5832 show_ip_ospf_database_type_id_adv_router_cmd
,
5833 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D adv-router A.B.C.D",
5836 "OSPF information\n"
5837 "Database summary\n"
5839 "Link State ID (as an IP address)\n"
5840 "Advertising Router link states\n"
5841 "Advertising Router (as an IP address)\n")
5843 ALIAS (show_ip_ospf_database
,
5844 show_ip_ospf_database_type_id_self_cmd
,
5845 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D (self-originate|)",
5848 "OSPF information\n"
5849 "Database summary\n"
5851 "Link State ID (as an IP address)\n"
5852 "Self-originated link states\n"
5855 DEFUN (show_ip_ospf_instance_database
,
5856 show_ip_ospf_instance_database_cmd
,
5857 "show ip ospf <1-65535> database",
5860 "OSPF information\n"
5862 "Database summary\n")
5865 u_short instance
= 0;
5867 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
5869 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
5872 return (show_ip_ospf_database_common(vty
, ospf
, 1, argc
, argv
));
5875 ALIAS (show_ip_ospf_instance_database
,
5876 show_ip_ospf_instance_database_type_cmd
,
5877 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
"|max-age|self-originate)",
5880 "OSPF information\n"
5882 "Database summary\n"
5884 "LSAs in MaxAge list\n"
5885 "Self-originated link states\n")
5887 ALIAS (show_ip_ospf_instance_database
,
5888 show_ip_ospf_instance_database_type_id_cmd
,
5889 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D",
5892 "OSPF information\n"
5894 "Database summary\n"
5896 "Link State ID (as an IP address)\n")
5898 ALIAS (show_ip_ospf_instance_database
,
5899 show_ip_ospf_instance_database_type_id_adv_router_cmd
,
5900 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D adv-router A.B.C.D",
5903 "OSPF information\n"
5905 "Database summary\n"
5907 "Link State ID (as an IP address)\n"
5908 "Advertising Router link states\n"
5909 "Advertising Router (as an IP address)\n")
5911 ALIAS (show_ip_ospf_instance_database
,
5912 show_ip_ospf_instance_database_type_id_self_cmd
,
5913 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D (self-originate|)",
5916 "OSPF information\n"
5918 "Database summary\n"
5920 "Link State ID (as an IP address)\n"
5921 "Self-originated link states\n"
5926 show_ip_ospf_database_type_adv_router_common (struct vty
*vty
, struct ospf
*ospf
,
5927 int arg_base
, int argc
, const char **argv
)
5930 struct in_addr adv_router
;
5933 vty_out (vty
, "%sOSPF Instance: %d%s", VTY_NEWLINE
, ospf
->instance
,
5936 vty_out (vty
, "%s OSPF Router with ID (%s)%s%s", VTY_NEWLINE
,
5937 inet_ntoa (ospf
->router_id
), VTY_NEWLINE
, VTY_NEWLINE
);
5939 if (argc
!= arg_base
+ 2)
5942 /* Set database type to show. */
5943 if (strncmp (argv
[arg_base
+ 0], "r", 1) == 0)
5944 type
= OSPF_ROUTER_LSA
;
5945 else if (strncmp (argv
[arg_base
+ 0], "ne", 2) == 0)
5946 type
= OSPF_NETWORK_LSA
;
5947 else if (strncmp (argv
[arg_base
+ 0], "ns", 2) == 0)
5948 type
= OSPF_AS_NSSA_LSA
;
5949 else if (strncmp (argv
[arg_base
+ 0], "s", 1) == 0)
5950 type
= OSPF_SUMMARY_LSA
;
5951 else if (strncmp (argv
[arg_base
+ 0], "a", 1) == 0)
5952 type
= OSPF_ASBR_SUMMARY_LSA
;
5953 else if (strncmp (argv
[arg_base
+ 0], "e", 1) == 0)
5954 type
= OSPF_AS_EXTERNAL_LSA
;
5955 #ifdef HAVE_OPAQUE_LSA
5956 else if (strncmp (argv
[arg_base
+ 0], "opaque-l", 8) == 0)
5957 type
= OSPF_OPAQUE_LINK_LSA
;
5958 else if (strncmp (argv
[arg_base
+ 0], "opaque-ar", 9) == 0)
5959 type
= OSPF_OPAQUE_AREA_LSA
;
5960 else if (strncmp (argv
[arg_base
+ 0], "opaque-as", 9) == 0)
5961 type
= OSPF_OPAQUE_AS_LSA
;
5962 #endif /* HAVE_OPAQUE_LSA */
5966 /* `show ip ospf database LSA adv-router ADV_ROUTER'. */
5967 if (strncmp (argv
[arg_base
+ 1], "s", 1) == 0)
5968 adv_router
= ospf
->router_id
;
5971 ret
= inet_aton (argv
[arg_base
+ 1], &adv_router
);
5976 show_lsa_detail_adv_router (vty
, ospf
, type
, &adv_router
);
5981 DEFUN (show_ip_ospf_database_type_adv_router
,
5982 show_ip_ospf_database_type_adv_router_cmd
,
5983 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") adv-router A.B.C.D",
5986 "OSPF information\n"
5987 "Database summary\n"
5989 "Advertising Router link states\n"
5990 "Advertising Router (as an IP address)\n")
5994 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
5997 return (show_ip_ospf_database_type_adv_router_common(vty
, ospf
, 0, argc
, argv
));
6000 ALIAS (show_ip_ospf_database_type_adv_router
,
6001 show_ip_ospf_database_type_self_cmd
,
6002 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") (self-originate|)",
6005 "OSPF information\n"
6006 "Database summary\n"
6008 "Self-originated link states\n")
6010 DEFUN (show_ip_ospf_instance_database_type_adv_router
,
6011 show_ip_ospf_instance_database_type_adv_router_cmd
,
6012 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") adv-router A.B.C.D",
6015 "OSPF information\n"
6017 "Database summary\n"
6019 "Advertising Router link states\n"
6020 "Advertising Router (as an IP address)\n")
6023 u_short instance
= 0;
6025 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
6027 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
6030 return (show_ip_ospf_database_type_adv_router_common(vty
, ospf
, 1, argc
, argv
));
6033 ALIAS (show_ip_ospf_instance_database_type_adv_router
,
6034 show_ip_ospf_instance_database_type_self_cmd
,
6035 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") (self-originate|)",
6038 "OSPF information\n"
6040 "Database summary\n"
6042 "Self-originated link states\n")
6044 DEFUN (ip_ospf_authentication_args
,
6045 ip_ospf_authentication_args_addr_cmd
,
6046 "ip ospf authentication (null|message-digest) A.B.C.D",
6048 "OSPF interface commands\n"
6049 "Enable authentication on this interface\n"
6050 "Use null authentication\n"
6051 "Use message-digest authentication\n"
6052 "Address of interface")
6054 struct interface
*ifp
;
6055 struct in_addr addr
;
6057 struct ospf_if_params
*params
;
6060 params
= IF_DEF_PARAMS (ifp
);
6064 ret
= inet_aton(argv
[1], &addr
);
6067 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6072 params
= ospf_get_if_params (ifp
, addr
);
6073 ospf_if_update_params (ifp
, addr
);
6076 /* Handle null authentication */
6077 if ( argv
[0][0] == 'n' )
6079 SET_IF_PARAM (params
, auth_type
);
6080 params
->auth_type
= OSPF_AUTH_NULL
;
6084 /* Handle message-digest authentication */
6085 if ( argv
[0][0] == 'm' )
6087 SET_IF_PARAM (params
, auth_type
);
6088 params
->auth_type
= OSPF_AUTH_CRYPTOGRAPHIC
;
6092 vty_out (vty
, "You shouldn't get here!%s", VTY_NEWLINE
);
6096 ALIAS (ip_ospf_authentication_args
,
6097 ip_ospf_authentication_args_cmd
,
6098 "ip ospf authentication (null|message-digest)",
6100 "OSPF interface commands\n"
6101 "Enable authentication on this interface\n"
6102 "Use null authentication\n"
6103 "Use message-digest authentication\n")
6105 DEFUN (ip_ospf_authentication
,
6106 ip_ospf_authentication_addr_cmd
,
6107 "ip ospf authentication A.B.C.D",
6109 "OSPF interface commands\n"
6110 "Enable authentication on this interface\n"
6111 "Address of interface")
6113 struct interface
*ifp
;
6114 struct in_addr addr
;
6116 struct ospf_if_params
*params
;
6119 params
= IF_DEF_PARAMS (ifp
);
6123 ret
= inet_aton(argv
[0], &addr
);
6126 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6131 params
= ospf_get_if_params (ifp
, addr
);
6132 ospf_if_update_params (ifp
, addr
);
6135 SET_IF_PARAM (params
, auth_type
);
6136 params
->auth_type
= OSPF_AUTH_SIMPLE
;
6141 ALIAS (ip_ospf_authentication
,
6142 ip_ospf_authentication_cmd
,
6143 "ip ospf authentication",
6145 "OSPF interface commands\n"
6146 "Enable authentication on this interface\n")
6148 DEFUN (no_ip_ospf_authentication_args
,
6149 no_ip_ospf_authentication_args_addr_cmd
,
6150 "no ip ospf authentication (null|message-digest) A.B.C.D",
6153 "OSPF interface commands\n"
6154 "Enable authentication on this interface\n"
6155 "Use null authentication\n"
6156 "Use message-digest authentication\n"
6157 "Address of interface")
6159 struct interface
*ifp
;
6160 struct in_addr addr
;
6162 struct ospf_if_params
*params
;
6163 struct route_node
*rn
;
6167 params
= IF_DEF_PARAMS (ifp
);
6171 ret
= inet_aton(argv
[1], &addr
);
6174 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6179 params
= ospf_lookup_if_params (ifp
, addr
);
6182 vty_out (vty
, "Ip Address specified is unknown%s", VTY_NEWLINE
);
6185 params
->auth_type
= OSPF_AUTH_NOTSET
;
6186 UNSET_IF_PARAM (params
, auth_type
);
6187 if (params
!= IF_DEF_PARAMS (ifp
))
6189 ospf_free_if_params (ifp
, addr
);
6190 ospf_if_update_params (ifp
, addr
);
6195 if ( argv
[0][0] == 'n' )
6197 auth_type
= OSPF_AUTH_NULL
;
6199 else if ( argv
[0][0] == 'm' )
6201 auth_type
= OSPF_AUTH_CRYPTOGRAPHIC
;
6205 vty_out (vty
, "Unexpected input encountered%s", VTY_NEWLINE
);
6209 * Here we have a case where the user has entered
6210 * 'no ip ospf authentication (null | message_digest )'
6211 * we need to find if we have any ip addresses underneath it that
6212 * correspond to the associated type.
6214 if (params
->auth_type
== auth_type
)
6216 params
->auth_type
= OSPF_AUTH_NOTSET
;
6217 UNSET_IF_PARAM (params
, auth_type
);
6220 for (rn
= route_top (IF_OIFS_PARAMS (ifp
)); rn
; rn
= route_next (rn
))
6222 if ((params
= rn
->info
))
6224 if (params
->auth_type
== auth_type
)
6226 params
->auth_type
= OSPF_AUTH_NOTSET
;
6227 UNSET_IF_PARAM (params
, auth_type
);
6228 if (params
!= IF_DEF_PARAMS (ifp
))
6230 ospf_free_if_params (ifp
, rn
->p
.u
.prefix4
);
6231 ospf_if_update_params(ifp
, rn
->p
.u
.prefix4
);
6241 ALIAS (no_ip_ospf_authentication_args
,
6242 no_ip_ospf_authentication_args_cmd
,
6243 "no ip ospf authentication (null|message-digest)",
6246 "OSPF interface commands\n"
6247 "Enable authentication on this interface\n"
6248 "Use null authentication\n"
6249 "Use message-digest authentication\n")
6251 DEFUN (no_ip_ospf_authentication
,
6252 no_ip_ospf_authentication_addr_cmd
,
6253 "no ip ospf authentication A.B.C.D",
6256 "OSPF interface commands\n"
6257 "Enable authentication on this interface\n"
6258 "Address of interface")
6260 struct interface
*ifp
;
6261 struct in_addr addr
;
6263 struct ospf_if_params
*params
;
6264 struct route_node
*rn
;
6267 params
= IF_DEF_PARAMS (ifp
);
6271 ret
= inet_aton(argv
[0], &addr
);
6274 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6279 params
= ospf_lookup_if_params (ifp
, addr
);
6282 vty_out (vty
, "Ip Address specified is unknown%s", VTY_NEWLINE
);
6286 params
->auth_type
= OSPF_AUTH_NOTSET
;
6287 UNSET_IF_PARAM (params
, auth_type
);
6288 if (params
!= IF_DEF_PARAMS (ifp
))
6290 ospf_free_if_params (ifp
, addr
);
6291 ospf_if_update_params (ifp
, addr
);
6297 * When a user enters 'no ip ospf authentication'
6298 * We should remove all authentication types from
6301 if ((params
->auth_type
== OSPF_AUTH_NULL
) ||
6302 (params
->auth_type
== OSPF_AUTH_CRYPTOGRAPHIC
) ||
6303 (params
->auth_type
== OSPF_AUTH_SIMPLE
))
6305 params
->auth_type
= OSPF_AUTH_NOTSET
;
6306 UNSET_IF_PARAM (params
, auth_type
);
6309 for (rn
= route_top (IF_OIFS_PARAMS (ifp
)); rn
; rn
= route_next (rn
))
6311 if ((params
= rn
->info
))
6314 if ((params
->auth_type
== OSPF_AUTH_NULL
) ||
6315 (params
->auth_type
== OSPF_AUTH_CRYPTOGRAPHIC
) ||
6316 (params
->auth_type
== OSPF_AUTH_SIMPLE
))
6318 params
->auth_type
= OSPF_AUTH_NOTSET
;
6319 UNSET_IF_PARAM (params
, auth_type
);
6320 if (params
!= IF_DEF_PARAMS (ifp
))
6322 ospf_free_if_params (ifp
, rn
->p
.u
.prefix4
);
6323 ospf_if_update_params(ifp
, rn
->p
.u
.prefix4
);
6333 ALIAS (no_ip_ospf_authentication
,
6334 no_ip_ospf_authentication_cmd
,
6335 "no ip ospf authentication",
6338 "OSPF interface commands\n"
6339 "Enable authentication on this interface\n")
6341 DEFUN (ip_ospf_authentication_key
,
6342 ip_ospf_authentication_key_addr_cmd
,
6343 "ip ospf authentication-key AUTH_KEY A.B.C.D",
6345 "OSPF interface commands\n"
6346 "Authentication password (key)\n"
6347 "The OSPF password (key)\n"
6348 "Address of interface")
6350 struct interface
*ifp
;
6351 struct in_addr addr
;
6353 struct ospf_if_params
*params
;
6356 params
= IF_DEF_PARAMS (ifp
);
6360 ret
= inet_aton(argv
[1], &addr
);
6363 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6368 params
= ospf_get_if_params (ifp
, addr
);
6369 ospf_if_update_params (ifp
, addr
);
6372 memset (params
->auth_simple
, 0, OSPF_AUTH_SIMPLE_SIZE
+ 1);
6373 strncpy ((char *) params
->auth_simple
, argv
[0], OSPF_AUTH_SIMPLE_SIZE
);
6374 SET_IF_PARAM (params
, auth_simple
);
6379 ALIAS (ip_ospf_authentication_key
,
6380 ip_ospf_authentication_key_cmd
,
6381 "ip ospf authentication-key AUTH_KEY",
6383 "OSPF interface commands\n"
6384 "Authentication password (key)\n"
6385 "The OSPF password (key)")
6387 ALIAS_HIDDEN (ip_ospf_authentication_key
,
6388 ospf_authentication_key_cmd
,
6389 "ospf authentication-key AUTH_KEY",
6390 "OSPF interface commands\n"
6391 "Authentication password (key)\n"
6392 "The OSPF password (key)")
6394 DEFUN (no_ip_ospf_authentication_key
,
6395 no_ip_ospf_authentication_key_authkey_addr_cmd
,
6396 "no ip ospf authentication-key AUTH_KEY A.B.C.D",
6399 "OSPF interface commands\n"
6400 "Authentication password (key)\n"
6401 "The OSPF password (key)")
6403 struct interface
*ifp
;
6404 struct in_addr addr
;
6405 struct ospf_if_params
*params
;
6409 params
= IF_DEF_PARAMS (ifp
);
6413 ret
= inet_aton(argv
[1], &addr
);
6416 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6421 params
= ospf_lookup_if_params (ifp
, addr
);
6426 memset (params
->auth_simple
, 0, OSPF_AUTH_SIMPLE_SIZE
);
6427 UNSET_IF_PARAM (params
, auth_simple
);
6429 if (params
!= IF_DEF_PARAMS (ifp
))
6431 ospf_free_if_params (ifp
, addr
);
6432 ospf_if_update_params (ifp
, addr
);
6438 ALIAS (no_ip_ospf_authentication_key
,
6439 no_ip_ospf_authentication_key_authkey_cmd
,
6440 "no ip ospf authentication-key AUTH_KEY",
6443 "OSPF interface commands\n"
6444 "Authentication password (key)\n")
6446 ALIAS (no_ip_ospf_authentication_key
,
6447 no_ip_ospf_authentication_key_cmd
,
6448 "no ip ospf authentication-key",
6451 "OSPF interface commands\n"
6452 "Authentication password (key)\n")
6454 ALIAS (no_ip_ospf_authentication_key
,
6455 no_ospf_authentication_key_cmd
,
6456 "no ospf authentication-key",
6458 "OSPF interface commands\n"
6459 "Authentication password (key)\n")
6461 ALIAS (no_ip_ospf_authentication_key
,
6462 no_ospf_authentication_key_authkey_cmd
,
6463 "no ospf authentication-key AUTH_KEY",
6465 "OSPF interface commands\n"
6466 "Authentication password (key)\n"
6467 "The OSPF password (key)\n")
6469 ALIAS (no_ip_ospf_authentication_key
,
6470 no_ospf_authentication_key_authkey_ip_cmd
,
6471 "no ospf authentication-key AUTH_KEY A.B.C.D",
6473 "OSPF interface commands\n"
6474 "Authentication password (key)\n"
6475 "The OSPF password (key)\n"
6476 "Address of interface")
6478 DEFUN (ip_ospf_message_digest_key
,
6479 ip_ospf_message_digest_key_addr_cmd
,
6480 "ip ospf message-digest-key <1-255> md5 KEY A.B.C.D",
6482 "OSPF interface commands\n"
6483 "Message digest authentication password (key)\n"
6485 "Use MD5 algorithm\n"
6486 "The OSPF password (key)"
6487 "Address of interface")
6489 struct interface
*ifp
;
6490 struct crypt_key
*ck
;
6492 struct in_addr addr
;
6494 struct ospf_if_params
*params
;
6497 params
= IF_DEF_PARAMS (ifp
);
6501 ret
= inet_aton(argv
[2], &addr
);
6504 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6509 params
= ospf_get_if_params (ifp
, addr
);
6510 ospf_if_update_params (ifp
, addr
);
6513 key_id
= strtol (argv
[0], NULL
, 10);
6514 if (ospf_crypt_key_lookup (params
->auth_crypt
, key_id
) != NULL
)
6516 vty_out (vty
, "OSPF: Key %d already exists%s", key_id
, VTY_NEWLINE
);
6520 ck
= ospf_crypt_key_new ();
6521 ck
->key_id
= (u_char
) key_id
;
6522 memset (ck
->auth_key
, 0, OSPF_AUTH_MD5_SIZE
+1);
6523 strncpy ((char *) ck
->auth_key
, argv
[1], OSPF_AUTH_MD5_SIZE
);
6525 ospf_crypt_key_add (params
->auth_crypt
, ck
);
6526 SET_IF_PARAM (params
, auth_crypt
);
6531 ALIAS (ip_ospf_message_digest_key
,
6532 ip_ospf_message_digest_key_cmd
,
6533 "ip ospf message-digest-key <1-255> md5 KEY",
6535 "OSPF interface commands\n"
6536 "Message digest authentication password (key)\n"
6538 "Use MD5 algorithm\n"
6539 "The OSPF password (key)")
6541 ALIAS_HIDDEN (ip_ospf_message_digest_key
,
6542 ospf_message_digest_key_cmd
,
6543 "ospf message-digest-key <1-255> md5 KEY",
6544 "OSPF interface commands\n"
6545 "Message digest authentication password (key)\n"
6547 "Use MD5 algorithm\n"
6548 "The OSPF password (key)")
6550 DEFUN (no_ip_ospf_message_digest_key_md5
,
6551 no_ip_ospf_message_digest_key_md5_addr_cmd
,
6552 "no ip ospf message-digest-key <1-255> md5 KEY A.B.C.D",
6555 "OSPF interface commands\n"
6556 "Message digest authentication password (key)\n"
6558 "Use MD5 algorithm\n"
6559 "The OSPF password (key)"
6560 "Address of interface")
6562 struct interface
*ifp
;
6563 struct crypt_key
*ck
;
6565 struct in_addr addr
;
6567 struct ospf_if_params
*params
;
6570 params
= IF_DEF_PARAMS (ifp
);
6574 ret
= inet_aton(argv
[2], &addr
);
6577 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6582 params
= ospf_lookup_if_params (ifp
, addr
);
6587 key_id
= strtol (argv
[0], NULL
, 10);
6588 ck
= ospf_crypt_key_lookup (params
->auth_crypt
, key_id
);
6591 vty_out (vty
, "OSPF: Key %d does not exist%s", key_id
, VTY_NEWLINE
);
6595 ospf_crypt_key_delete (params
->auth_crypt
, key_id
);
6597 if (params
!= IF_DEF_PARAMS (ifp
))
6599 ospf_free_if_params (ifp
, addr
);
6600 ospf_if_update_params (ifp
, addr
);
6606 ALIAS (no_ip_ospf_message_digest_key_md5
,
6607 no_ip_ospf_message_digest_key_md5_cmd
,
6608 "no ip ospf message-digest-key <1-255> md5 KEY",
6611 "OSPF interface commands\n"
6612 "Message digest authentication password (key)\n"
6614 "Use MD5 algorithm\n"
6615 "The OSPF password (key)")
6617 DEFUN (no_ip_ospf_message_digest_key
,
6618 no_ip_ospf_message_digest_key_addr_cmd
,
6619 "no ip ospf message-digest-key <1-255> A.B.C.D",
6622 "OSPF interface commands\n"
6623 "Message digest authentication password (key)\n"
6625 "Address of interface")
6627 struct interface
*ifp
;
6628 struct crypt_key
*ck
;
6630 struct in_addr addr
;
6632 struct ospf_if_params
*params
;
6635 params
= IF_DEF_PARAMS (ifp
);
6639 ret
= inet_aton(argv
[1], &addr
);
6642 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6647 params
= ospf_lookup_if_params (ifp
, addr
);
6652 key_id
= strtol (argv
[0], NULL
, 10);
6653 ck
= ospf_crypt_key_lookup (params
->auth_crypt
, key_id
);
6656 vty_out (vty
, "OSPF: Key %d does not exist%s", key_id
, VTY_NEWLINE
);
6660 ospf_crypt_key_delete (params
->auth_crypt
, key_id
);
6662 if (params
!= IF_DEF_PARAMS (ifp
))
6664 ospf_free_if_params (ifp
, addr
);
6665 ospf_if_update_params (ifp
, addr
);
6671 ALIAS (no_ip_ospf_message_digest_key
,
6672 no_ip_ospf_message_digest_key_cmd
,
6673 "no ip ospf message-digest-key <1-255>",
6676 "OSPF interface commands\n"
6677 "Message digest authentication password (key)\n"
6680 ALIAS (no_ip_ospf_message_digest_key
,
6681 no_ospf_message_digest_key_cmd
,
6682 "no ospf message-digest-key <1-255>",
6684 "OSPF interface commands\n"
6685 "Message digest authentication password (key)\n"
6688 DEFUN (ip_ospf_cost
,
6689 ip_ospf_cost_u32_inet4_cmd
,
6690 "ip ospf cost <1-65535> A.B.C.D",
6692 "OSPF interface commands\n"
6695 "Address of interface")
6697 struct interface
*ifp
= vty
->index
;
6699 struct in_addr addr
;
6701 struct ospf_if_params
*params
;
6703 params
= IF_DEF_PARAMS (ifp
);
6705 cost
= strtol (argv
[0], NULL
, 10);
6707 /* cost range is <1-65535>. */
6708 if (cost
< 1 || cost
> 65535)
6710 vty_out (vty
, "Interface output cost is invalid%s", VTY_NEWLINE
);
6716 ret
= inet_aton(argv
[1], &addr
);
6719 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6724 params
= ospf_get_if_params (ifp
, addr
);
6725 ospf_if_update_params (ifp
, addr
);
6728 SET_IF_PARAM (params
, output_cost_cmd
);
6729 params
->output_cost_cmd
= cost
;
6731 ospf_if_recalculate_output_cost (ifp
);
6736 ALIAS (ip_ospf_cost
,
6737 ip_ospf_cost_u32_cmd
,
6738 "ip ospf cost <1-65535>",
6740 "OSPF interface commands\n"
6744 ALIAS_HIDDEN (ip_ospf_cost
,
6746 "ospf cost <1-65535>",
6747 "OSPF interface commands\n"
6751 ALIAS_HIDDEN (ip_ospf_cost
,
6752 ospf_cost_u32_inet4_cmd
,
6753 "ospf cost <1-65535> A.B.C.D",
6754 "OSPF interface commands\n"
6757 "Address of interface")
6759 DEFUN (no_ip_ospf_cost
,
6760 no_ip_ospf_cost_inet4_cmd
,
6761 "no ip ospf cost A.B.C.D",
6764 "OSPF interface commands\n"
6766 "Address of interface")
6768 struct interface
*ifp
= vty
->index
;
6769 struct in_addr addr
;
6771 struct ospf_if_params
*params
;
6774 params
= IF_DEF_PARAMS (ifp
);
6778 ret
= inet_aton(argv
[0], &addr
);
6781 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6786 params
= ospf_lookup_if_params (ifp
, addr
);
6791 UNSET_IF_PARAM (params
, output_cost_cmd
);
6793 if (params
!= IF_DEF_PARAMS (ifp
))
6795 ospf_free_if_params (ifp
, addr
);
6796 ospf_if_update_params (ifp
, addr
);
6799 ospf_if_recalculate_output_cost (ifp
);
6804 ALIAS (no_ip_ospf_cost
,
6805 no_ip_ospf_cost_cmd
,
6809 "OSPF interface commands\n"
6812 ALIAS (no_ip_ospf_cost
,
6816 "OSPF interface commands\n"
6819 ALIAS (no_ip_ospf_cost
,
6820 no_ospf_cost_inet4_cmd
,
6821 "no ospf cost A.B.C.D",
6823 "OSPF interface commands\n"
6825 "Address of interface")
6827 DEFUN (no_ip_ospf_cost2
,
6828 no_ip_ospf_cost_u32_cmd
,
6829 "no ip ospf cost <1-65535>",
6832 "OSPF interface commands\n"
6836 struct interface
*ifp
= vty
->index
;
6837 struct in_addr addr
;
6840 struct ospf_if_params
*params
;
6843 params
= IF_DEF_PARAMS (ifp
);
6845 /* According to the semantics we are mimicking "no ip ospf cost N" is
6846 * always treated as "no ip ospf cost" regardless of the actual value
6847 * of N already configured for the interface. Thus the first argument
6848 * is always checked to be a number, but is ignored after that.
6850 cost
= strtol (argv
[0], NULL
, 10);
6851 if (cost
< 1 || cost
> 65535)
6853 vty_out (vty
, "Interface output cost is invalid%s", VTY_NEWLINE
);
6859 ret
= inet_aton(argv
[1], &addr
);
6862 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6867 params
= ospf_lookup_if_params (ifp
, addr
);
6872 UNSET_IF_PARAM (params
, output_cost_cmd
);
6874 if (params
!= IF_DEF_PARAMS (ifp
))
6876 ospf_free_if_params (ifp
, addr
);
6877 ospf_if_update_params (ifp
, addr
);
6880 ospf_if_recalculate_output_cost (ifp
);
6885 ALIAS (no_ip_ospf_cost2
,
6886 no_ospf_cost_u32_cmd
,
6887 "no ospf cost <1-65535>",
6889 "OSPF interface commands\n"
6893 ALIAS (no_ip_ospf_cost2
,
6894 no_ip_ospf_cost_u32_inet4_cmd
,
6895 "no ip ospf cost <1-65535> A.B.C.D",
6898 "OSPF interface commands\n"
6901 "Address of interface")
6903 ALIAS (no_ip_ospf_cost2
,
6904 no_ospf_cost_u32_inet4_cmd
,
6905 "no ospf cost <1-65535> A.B.C.D",
6907 "OSPF interface commands\n"
6910 "Address of interface")
6913 ospf_nbr_timer_update (struct ospf_interface
*oi
)
6915 struct route_node
*rn
;
6916 struct ospf_neighbor
*nbr
;
6918 for (rn
= route_top (oi
->nbrs
); rn
; rn
= route_next (rn
))
6919 if ((nbr
= rn
->info
))
6921 nbr
->v_inactivity
= OSPF_IF_PARAM (oi
, v_wait
);
6922 nbr
->v_db_desc
= OSPF_IF_PARAM (oi
, retransmit_interval
);
6923 nbr
->v_ls_req
= OSPF_IF_PARAM (oi
, retransmit_interval
);
6924 nbr
->v_ls_upd
= OSPF_IF_PARAM (oi
, retransmit_interval
);
6929 ospf_vty_dead_interval_set (struct vty
*vty
, const char *interval_str
,
6930 const char *nbr_str
,
6931 const char *fast_hello_str
)
6933 struct interface
*ifp
= vty
->index
;
6936 struct in_addr addr
;
6938 struct ospf_if_params
*params
;
6939 struct ospf_interface
*oi
;
6940 struct route_node
*rn
;
6942 params
= IF_DEF_PARAMS (ifp
);
6946 ret
= inet_aton(nbr_str
, &addr
);
6949 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6954 params
= ospf_get_if_params (ifp
, addr
);
6955 ospf_if_update_params (ifp
, addr
);
6960 VTY_GET_INTEGER_RANGE ("Router Dead Interval", seconds
, interval_str
,
6963 /* reset fast_hello too, just to be sure */
6964 UNSET_IF_PARAM (params
, fast_hello
);
6965 params
->fast_hello
= OSPF_FAST_HELLO_DEFAULT
;
6967 else if (fast_hello_str
)
6969 VTY_GET_INTEGER_RANGE ("Hello Multiplier", hellomult
, fast_hello_str
,
6971 /* 1s dead-interval with sub-second hellos desired */
6972 seconds
= OSPF_ROUTER_DEAD_INTERVAL_MINIMAL
;
6973 SET_IF_PARAM (params
, fast_hello
);
6974 params
->fast_hello
= hellomult
;
6978 vty_out (vty
, "Please specify dead-interval or hello-multiplier%s",
6983 SET_IF_PARAM (params
, v_wait
);
6984 params
->v_wait
= seconds
;
6986 /* Update timer values in neighbor structure. */
6990 if ((ospf
= ospf_lookup()))
6992 oi
= ospf_if_lookup_by_local_addr (ospf
, ifp
, addr
);
6994 ospf_nbr_timer_update (oi
);
6999 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7000 if ((oi
= rn
->info
))
7001 ospf_nbr_timer_update (oi
);
7008 DEFUN (ip_ospf_dead_interval
,
7009 ip_ospf_dead_interval_addr_cmd
,
7010 "ip ospf dead-interval <1-65535> A.B.C.D",
7012 "OSPF interface commands\n"
7013 "Interval after which a neighbor is declared dead\n"
7015 "Address of interface\n")
7018 return ospf_vty_dead_interval_set (vty
, argv
[0], argv
[1], NULL
);
7020 return ospf_vty_dead_interval_set (vty
, argv
[0], NULL
, NULL
);
7023 ALIAS (ip_ospf_dead_interval
,
7024 ip_ospf_dead_interval_cmd
,
7025 "ip ospf dead-interval <1-65535>",
7027 "OSPF interface commands\n"
7028 "Interval after which a neighbor is declared dead\n"
7031 ALIAS_HIDDEN (ip_ospf_dead_interval
,
7032 ospf_dead_interval_cmd
,
7033 "ospf dead-interval <1-65535>",
7034 "OSPF interface commands\n"
7035 "Interval after which a neighbor is declared dead\n"
7038 DEFUN (ip_ospf_dead_interval_minimal
,
7039 ip_ospf_dead_interval_minimal_addr_cmd
,
7040 "ip ospf dead-interval minimal hello-multiplier <1-10> A.B.C.D",
7042 "OSPF interface commands\n"
7043 "Interval after which a neighbor is declared dead\n"
7044 "Minimal 1s dead-interval with fast sub-second hellos\n"
7045 "Hello multiplier factor\n"
7046 "Number of Hellos to send each second\n"
7047 "Address of interface\n")
7050 return ospf_vty_dead_interval_set (vty
, NULL
, argv
[1], argv
[0]);
7052 return ospf_vty_dead_interval_set (vty
, NULL
, NULL
, argv
[0]);
7055 ALIAS (ip_ospf_dead_interval_minimal
,
7056 ip_ospf_dead_interval_minimal_cmd
,
7057 "ip ospf dead-interval minimal hello-multiplier <1-10>",
7059 "OSPF interface commands\n"
7060 "Interval after which a neighbor is declared dead\n"
7061 "Minimal 1s dead-interval with fast sub-second hellos\n"
7062 "Hello multiplier factor\n"
7063 "Number of Hellos to send each second\n")
7065 DEFUN (no_ip_ospf_dead_interval
,
7066 no_ip_ospf_dead_interval_addr_cmd
,
7067 "no ip ospf dead-interval <1-65535> A.B.C.D",
7070 "OSPF interface commands\n"
7071 "Interval after which a neighbor is declared dead\n"
7073 "Address of interface")
7075 struct interface
*ifp
= vty
->index
;
7076 struct in_addr addr
;
7078 struct ospf_if_params
*params
;
7079 struct ospf_interface
*oi
;
7080 struct route_node
*rn
;
7083 params
= IF_DEF_PARAMS (ifp
);
7087 ret
= inet_aton(argv
[1], &addr
);
7090 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7095 params
= ospf_lookup_if_params (ifp
, addr
);
7100 UNSET_IF_PARAM (params
, v_wait
);
7101 params
->v_wait
= OSPF_ROUTER_DEAD_INTERVAL_DEFAULT
;
7103 UNSET_IF_PARAM (params
, fast_hello
);
7104 params
->fast_hello
= OSPF_FAST_HELLO_DEFAULT
;
7106 if (params
!= IF_DEF_PARAMS (ifp
))
7108 ospf_free_if_params (ifp
, addr
);
7109 ospf_if_update_params (ifp
, addr
);
7112 /* Update timer values in neighbor structure. */
7117 if ((ospf
= ospf_lookup()))
7119 oi
= ospf_if_lookup_by_local_addr (ospf
, ifp
, addr
);
7121 ospf_nbr_timer_update (oi
);
7126 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7127 if ((oi
= rn
->info
))
7128 ospf_nbr_timer_update (oi
);
7134 ALIAS (no_ip_ospf_dead_interval
,
7135 no_ip_ospf_dead_interval_seconds_cmd
,
7136 "no ip ospf dead-interval <1-65535>",
7139 "OSPF interface commands\n"
7140 "Interval after which a neighbor is declared dead\n"
7143 ALIAS (no_ip_ospf_dead_interval
,
7144 no_ip_ospf_dead_interval_cmd
,
7145 "no ip ospf dead-interval",
7148 "OSPF interface commands\n"
7149 "Interval after which a neighbor is declared dead\n")
7151 ALIAS (no_ip_ospf_dead_interval
,
7152 no_ospf_dead_interval_cmd
,
7153 "no ospf dead-interval",
7155 "OSPF interface commands\n"
7156 "Interval after which a neighbor is declared dead\n")
7158 ALIAS (no_ip_ospf_dead_interval
,
7159 no_ip_ospf_dead_interval_minimal_addr_cmd
,
7160 "no ip ospf dead-interval minimal hello-multiplier <1-10> A.B.C.D",
7163 "OSPF interface commands\n"
7164 "Interval after which a neighbor is declared dead\n"
7165 "Minimal 1s dead-interval with fast sub-second hellos\n"
7166 "Hello multiplier factor\n"
7167 "Number of Hellos to send each second\n"
7168 "Address of interface\n")
7170 ALIAS (no_ip_ospf_dead_interval
,
7171 no_ip_ospf_dead_interval_minimal_cmd
,
7172 "no ip ospf dead-interval minimal hello-multiplier <1-10>",
7175 "OSPF interface commands\n"
7176 "Interval after which a neighbor is declared dead\n"
7177 "Minimal 1s dead-interval with fast sub-second hellos\n"
7178 "Hello multiplier factor\n"
7179 "Number of Hellos to send each second\n")
7181 DEFUN (ip_ospf_hello_interval
,
7182 ip_ospf_hello_interval_addr_cmd
,
7183 "ip ospf hello-interval <1-65535> A.B.C.D",
7185 "OSPF interface commands\n"
7186 "Time between HELLO packets\n"
7188 "Address of interface")
7190 struct interface
*ifp
= vty
->index
;
7192 struct in_addr addr
;
7194 struct ospf_if_params
*params
;
7196 params
= IF_DEF_PARAMS (ifp
);
7198 seconds
= strtol (argv
[0], NULL
, 10);
7200 /* HelloInterval range is <1-65535>. */
7201 if (seconds
< 1 || seconds
> 65535)
7203 vty_out (vty
, "Hello Interval is invalid%s", VTY_NEWLINE
);
7209 ret
= inet_aton(argv
[1], &addr
);
7212 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7217 params
= ospf_get_if_params (ifp
, addr
);
7218 ospf_if_update_params (ifp
, addr
);
7221 SET_IF_PARAM (params
, v_hello
);
7222 params
->v_hello
= seconds
;
7227 ALIAS (ip_ospf_hello_interval
,
7228 ip_ospf_hello_interval_cmd
,
7229 "ip ospf hello-interval <1-65535>",
7231 "OSPF interface commands\n"
7232 "Time between HELLO packets\n"
7235 ALIAS_HIDDEN (ip_ospf_hello_interval
,
7236 ospf_hello_interval_cmd
,
7237 "ospf hello-interval <1-65535>",
7238 "OSPF interface commands\n"
7239 "Time between HELLO packets\n"
7242 DEFUN (no_ip_ospf_hello_interval
,
7243 no_ip_ospf_hello_interval_addr_cmd
,
7244 "no ip ospf hello-interval <1-65535> A.B.C.D",
7247 "OSPF interface commands\n"
7248 "Time between HELLO packets\n"
7250 "Address of interface")
7252 struct interface
*ifp
= vty
->index
;
7253 struct in_addr addr
;
7255 struct ospf_if_params
*params
;
7258 params
= IF_DEF_PARAMS (ifp
);
7262 ret
= inet_aton(argv
[1], &addr
);
7265 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7270 params
= ospf_lookup_if_params (ifp
, addr
);
7275 UNSET_IF_PARAM (params
, v_hello
);
7276 params
->v_hello
= OSPF_HELLO_INTERVAL_DEFAULT
;
7278 if (params
!= IF_DEF_PARAMS (ifp
))
7280 ospf_free_if_params (ifp
, addr
);
7281 ospf_if_update_params (ifp
, addr
);
7287 ALIAS (no_ip_ospf_hello_interval
,
7288 no_ip_ospf_hello_interval_seconds_cmd
,
7289 "no ip ospf hello-interval <1-65535>",
7292 "OSPF interface commands\n"
7293 "Time between HELLO packets\n"
7296 ALIAS (no_ip_ospf_hello_interval
,
7297 no_ip_ospf_hello_interval_cmd
,
7298 "no ip ospf hello-interval",
7301 "OSPF interface commands\n"
7302 "Time between HELLO packets\n")
7304 ALIAS (no_ip_ospf_hello_interval
,
7305 no_ospf_hello_interval_cmd
,
7306 "no ospf hello-interval <1-65535>",
7308 "OSPF interface commands\n"
7309 "Time between HELLO packets\n"
7312 DEFUN (ip_ospf_network
,
7313 ip_ospf_network_cmd
,
7314 "ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
7316 "OSPF interface commands\n"
7318 "Specify OSPF broadcast multi-access network\n"
7319 "Specify OSPF NBMA network\n"
7320 "Specify OSPF point-to-multipoint network\n"
7321 "Specify OSPF point-to-point network\n")
7323 struct interface
*ifp
= vty
->index
;
7324 int old_type
= IF_DEF_PARAMS (ifp
)->type
;
7325 struct route_node
*rn
;
7327 if (old_type
== OSPF_IFTYPE_LOOPBACK
)
7329 vty_out (vty
, "This is a loopback interface. Can't set network type.%s", VTY_NEWLINE
);
7333 if (strncmp (argv
[0], "b", 1) == 0)
7334 IF_DEF_PARAMS (ifp
)->type
= OSPF_IFTYPE_BROADCAST
;
7335 else if (strncmp (argv
[0], "n", 1) == 0)
7336 IF_DEF_PARAMS (ifp
)->type
= OSPF_IFTYPE_NBMA
;
7337 else if (strncmp (argv
[0], "point-to-m", 10) == 0)
7338 IF_DEF_PARAMS (ifp
)->type
= OSPF_IFTYPE_POINTOMULTIPOINT
;
7339 else if (strncmp (argv
[0], "point-to-p", 10) == 0)
7340 IF_DEF_PARAMS (ifp
)->type
= OSPF_IFTYPE_POINTOPOINT
;
7342 if (IF_DEF_PARAMS (ifp
)->type
== old_type
)
7345 SET_IF_PARAM (IF_DEF_PARAMS (ifp
), type
);
7347 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7349 struct ospf_interface
*oi
= rn
->info
;
7354 oi
->type
= IF_DEF_PARAMS (ifp
)->type
;
7356 if (oi
->state
> ISM_Down
)
7358 OSPF_ISM_EVENT_EXECUTE (oi
, ISM_InterfaceDown
);
7359 OSPF_ISM_EVENT_EXECUTE (oi
, ISM_InterfaceUp
);
7366 ALIAS_HIDDEN (ip_ospf_network
,
7368 "ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
7369 "OSPF interface commands\n"
7371 "Specify OSPF broadcast multi-access network\n"
7372 "Specify OSPF NBMA network\n"
7373 "Specify OSPF point-to-multipoint network\n"
7374 "Specify OSPF point-to-point network\n")
7376 DEFUN (no_ip_ospf_network
,
7377 no_ip_ospf_network_cmd
,
7378 "no ip ospf network",
7381 "OSPF interface commands\n"
7384 struct interface
*ifp
= vty
->index
;
7385 int old_type
= IF_DEF_PARAMS (ifp
)->type
;
7386 struct route_node
*rn
;
7388 IF_DEF_PARAMS (ifp
)->type
= ospf_default_iftype(ifp
);
7390 if (IF_DEF_PARAMS (ifp
)->type
== old_type
)
7393 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7395 struct ospf_interface
*oi
= rn
->info
;
7400 oi
->type
= IF_DEF_PARAMS (ifp
)->type
;
7402 if (oi
->state
> ISM_Down
)
7404 OSPF_ISM_EVENT_EXECUTE (oi
, ISM_InterfaceDown
);
7405 OSPF_ISM_EVENT_EXECUTE (oi
, ISM_InterfaceUp
);
7412 ALIAS (no_ip_ospf_network
,
7413 no_ip_ospf_network_val_cmd
,
7414 "no ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
7417 "OSPF interface commands\n"
7419 "Specify OSPF broadcast multi-access network\n"
7420 "Specify OSPF NBMA network\n"
7421 "Specify OSPF point-to-multipoint network\n"
7422 "Specify OSPF point-to-point network\n")
7424 ALIAS (no_ip_ospf_network
,
7425 no_ospf_network_cmd
,
7428 "OSPF interface commands\n"
7431 ALIAS (no_ip_ospf_network
,
7432 no_ospf_network_val_cmd
,
7433 "no ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
7435 "OSPF interface commands\n"
7437 "Specify OSPF broadcast multi-access network\n"
7438 "Specify OSPF NBMA network\n"
7439 "Specify OSPF point-to-multipoint network\n"
7440 "Specify OSPF point-to-point network\n")
7442 DEFUN (ip_ospf_priority
,
7443 ip_ospf_priority_addr_cmd
,
7444 "ip ospf priority <0-255> A.B.C.D",
7446 "OSPF interface commands\n"
7449 "Address of interface")
7451 struct interface
*ifp
= vty
->index
;
7453 struct route_node
*rn
;
7454 struct in_addr addr
;
7456 struct ospf_if_params
*params
;
7458 params
= IF_DEF_PARAMS (ifp
);
7460 priority
= strtol (argv
[0], NULL
, 10);
7462 /* Router Priority range is <0-255>. */
7463 if (priority
< 0 || priority
> 255)
7465 vty_out (vty
, "Router Priority is invalid%s", VTY_NEWLINE
);
7471 ret
= inet_aton(argv
[1], &addr
);
7474 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7479 params
= ospf_get_if_params (ifp
, addr
);
7480 ospf_if_update_params (ifp
, addr
);
7483 SET_IF_PARAM (params
, priority
);
7484 params
->priority
= priority
;
7486 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7488 struct ospf_interface
*oi
= rn
->info
;
7494 if (PRIORITY (oi
) != OSPF_IF_PARAM (oi
, priority
))
7496 PRIORITY (oi
) = OSPF_IF_PARAM (oi
, priority
);
7497 OSPF_ISM_EVENT_SCHEDULE (oi
, ISM_NeighborChange
);
7504 ALIAS (ip_ospf_priority
,
7505 ip_ospf_priority_cmd
,
7506 "ip ospf priority <0-255>",
7508 "OSPF interface commands\n"
7512 ALIAS_HIDDEN (ip_ospf_priority
,
7514 "ospf priority <0-255>",
7515 "OSPF interface commands\n"
7519 DEFUN (no_ip_ospf_priority
,
7520 no_ip_ospf_priority_addr_cmd
,
7521 "no ip ospf priority <0-255> A.B.C.D",
7524 "OSPF interface commands\n"
7527 "Address of interface")
7529 struct interface
*ifp
= vty
->index
;
7530 struct route_node
*rn
;
7531 struct in_addr addr
;
7533 struct ospf_if_params
*params
;
7536 params
= IF_DEF_PARAMS (ifp
);
7540 ret
= inet_aton(argv
[1], &addr
);
7543 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7548 params
= ospf_lookup_if_params (ifp
, addr
);
7553 UNSET_IF_PARAM (params
, priority
);
7554 params
->priority
= OSPF_ROUTER_PRIORITY_DEFAULT
;
7556 if (params
!= IF_DEF_PARAMS (ifp
))
7558 ospf_free_if_params (ifp
, addr
);
7559 ospf_if_update_params (ifp
, addr
);
7562 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7564 struct ospf_interface
*oi
= rn
->info
;
7570 if (PRIORITY (oi
) != OSPF_IF_PARAM (oi
, priority
))
7572 PRIORITY (oi
) = OSPF_IF_PARAM (oi
, priority
);
7573 OSPF_ISM_EVENT_SCHEDULE (oi
, ISM_NeighborChange
);
7580 ALIAS (no_ip_ospf_priority
,
7581 no_ip_ospf_priority_no_param_cmd
,
7582 "no ip ospf priority",
7585 "OSPF interface commands\n"
7586 "Router priority\n");
7588 ALIAS (no_ip_ospf_priority
,
7589 no_ip_ospf_priority_cmd
,
7590 "no ip ospf priority <0-255>",
7593 "OSPF interface commands\n"
7597 ALIAS (no_ip_ospf_priority
,
7598 no_ospf_priority_cmd
,
7599 "no ospf priority <0-255>",
7601 "OSPF interface commands\n"
7606 DEFUN (ip_ospf_retransmit_interval
,
7607 ip_ospf_retransmit_interval_addr_cmd
,
7608 "ip ospf retransmit-interval <3-65535> A.B.C.D",
7610 "OSPF interface commands\n"
7611 "Time between retransmitting lost link state advertisements\n"
7613 "Address of interface")
7615 struct interface
*ifp
= vty
->index
;
7617 struct in_addr addr
;
7619 struct ospf_if_params
*params
;
7621 params
= IF_DEF_PARAMS (ifp
);
7622 seconds
= strtol (argv
[0], NULL
, 10);
7624 /* Retransmit Interval range is <3-65535>. */
7625 if (seconds
< 3 || seconds
> 65535)
7627 vty_out (vty
, "Retransmit Interval is invalid%s", VTY_NEWLINE
);
7634 ret
= inet_aton(argv
[1], &addr
);
7637 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7642 params
= ospf_get_if_params (ifp
, addr
);
7643 ospf_if_update_params (ifp
, addr
);
7646 SET_IF_PARAM (params
, retransmit_interval
);
7647 params
->retransmit_interval
= seconds
;
7652 ALIAS (ip_ospf_retransmit_interval
,
7653 ip_ospf_retransmit_interval_cmd
,
7654 "ip ospf retransmit-interval <3-65535>",
7656 "OSPF interface commands\n"
7657 "Time between retransmitting lost link state advertisements\n"
7660 ALIAS_HIDDEN (ip_ospf_retransmit_interval
,
7661 ospf_retransmit_interval_cmd
,
7662 "ospf retransmit-interval <3-65535>",
7663 "OSPF interface commands\n"
7664 "Time between retransmitting lost link state advertisements\n"
7667 DEFUN (no_ip_ospf_retransmit_interval
,
7668 no_ip_ospf_retransmit_interval_addr_cmd
,
7669 "no ip ospf retransmit-interval A.B.C.D",
7672 "OSPF interface commands\n"
7673 "Time between retransmitting lost link state advertisements\n"
7674 "Address of interface")
7676 struct interface
*ifp
= vty
->index
;
7677 struct in_addr addr
;
7679 struct ospf_if_params
*params
;
7683 params
= IF_DEF_PARAMS (ifp
);
7692 ret
= inet_aton(argv
[addr_index
], &addr
);
7695 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7700 params
= ospf_lookup_if_params (ifp
, addr
);
7705 UNSET_IF_PARAM (params
, retransmit_interval
);
7706 params
->retransmit_interval
= OSPF_RETRANSMIT_INTERVAL_DEFAULT
;
7708 if (params
!= IF_DEF_PARAMS (ifp
))
7710 ospf_free_if_params (ifp
, addr
);
7711 ospf_if_update_params (ifp
, addr
);
7717 ALIAS (no_ip_ospf_retransmit_interval
,
7718 no_ip_ospf_retransmit_interval_sec_addr_cmd
,
7719 "no ip ospf retransmit-interval <3-65535> A.B.C.D",
7722 "OSPF interface commands\n"
7723 "Time between retransmitting lost link state advertisements\n"
7725 "Address of interface")
7727 ALIAS (no_ip_ospf_retransmit_interval
,
7728 no_ip_ospf_retransmit_interval_cmd
,
7729 "no ip ospf retransmit-interval",
7732 "OSPF interface commands\n"
7733 "Time between retransmitting lost link state advertisements\n")
7735 ALIAS (no_ip_ospf_retransmit_interval
,
7736 no_ospf_retransmit_interval_cmd
,
7737 "no ospf retransmit-interval",
7739 "OSPF interface commands\n"
7740 "Time between retransmitting lost link state advertisements\n")
7742 DEFUN (no_ip_ospf_retransmit_interval_sec
,
7743 no_ip_ospf_retransmit_interval_sec_cmd
,
7744 "no ip ospf retransmit-interval <3-65535>",
7747 "OSPF interface commands\n"
7748 "Time between retransmitting lost link state advertisements\n"
7751 struct interface
*ifp
= vty
->index
;
7752 struct ospf_if_params
*params
;
7755 params
= IF_DEF_PARAMS (ifp
);
7757 UNSET_IF_PARAM (params
, retransmit_interval
);
7758 params
->retransmit_interval
= OSPF_RETRANSMIT_INTERVAL_DEFAULT
;
7764 DEFUN (ip_ospf_transmit_delay
,
7765 ip_ospf_transmit_delay_addr_cmd
,
7766 "ip ospf transmit-delay <1-65535> A.B.C.D",
7768 "OSPF interface commands\n"
7769 "Link state transmit delay\n"
7771 "Address of interface")
7773 struct interface
*ifp
= vty
->index
;
7775 struct in_addr addr
;
7777 struct ospf_if_params
*params
;
7779 params
= IF_DEF_PARAMS (ifp
);
7780 seconds
= strtol (argv
[0], NULL
, 10);
7782 /* Transmit Delay range is <1-65535>. */
7783 if (seconds
< 1 || seconds
> 65535)
7785 vty_out (vty
, "Transmit Delay is invalid%s", VTY_NEWLINE
);
7791 ret
= inet_aton(argv
[1], &addr
);
7794 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7799 params
= ospf_get_if_params (ifp
, addr
);
7800 ospf_if_update_params (ifp
, addr
);
7803 SET_IF_PARAM (params
, transmit_delay
);
7804 params
->transmit_delay
= seconds
;
7809 ALIAS (ip_ospf_transmit_delay
,
7810 ip_ospf_transmit_delay_cmd
,
7811 "ip ospf transmit-delay <1-65535>",
7813 "OSPF interface commands\n"
7814 "Link state transmit delay\n"
7817 ALIAS_HIDDEN (ip_ospf_transmit_delay
,
7818 ospf_transmit_delay_cmd
,
7819 "ospf transmit-delay <1-65535>",
7820 "OSPF interface commands\n"
7821 "Link state transmit delay\n"
7824 DEFUN (no_ip_ospf_transmit_delay
,
7825 no_ip_ospf_transmit_delay_addr_cmd
,
7826 "no ip ospf transmit-delay A.B.C.D",
7829 "OSPF interface commands\n"
7830 "Link state transmit delay\n"
7831 "Address of interface")
7833 struct interface
*ifp
= vty
->index
;
7834 struct in_addr addr
;
7836 struct ospf_if_params
*params
;
7840 params
= IF_DEF_PARAMS (ifp
);
7849 ret
= inet_aton(argv
[addr_index
], &addr
);
7852 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7857 params
= ospf_lookup_if_params (ifp
, addr
);
7862 UNSET_IF_PARAM (params
, transmit_delay
);
7863 params
->transmit_delay
= OSPF_TRANSMIT_DELAY_DEFAULT
;
7865 if (params
!= IF_DEF_PARAMS (ifp
))
7867 ospf_free_if_params (ifp
, addr
);
7868 ospf_if_update_params (ifp
, addr
);
7874 ALIAS (no_ip_ospf_transmit_delay
,
7875 no_ip_ospf_transmit_delay_sec_addr_cmd
,
7876 "no ip ospf transmit-delay <1-65535> A.B.C.D",
7879 "OSPF interface commands\n"
7880 "Link state transmit delay\n"
7882 "Address of interface")
7884 ALIAS (no_ip_ospf_transmit_delay
,
7885 no_ip_ospf_transmit_delay_cmd
,
7886 "no ip ospf transmit-delay",
7889 "OSPF interface commands\n"
7890 "Link state transmit delay\n")
7892 ALIAS (no_ip_ospf_transmit_delay
,
7893 no_ospf_transmit_delay_cmd
,
7894 "no ospf transmit-delay",
7896 "OSPF interface commands\n"
7897 "Link state transmit delay\n")
7899 DEFUN (no_ip_ospf_transmit_delay_sec
,
7900 no_ip_ospf_transmit_delay_sec_cmd
,
7901 "no ip ospf transmit-delay <1-65535>",
7904 "OSPF interface commands\n"
7905 "Link state transmit delay\n"
7907 "Address of interface")
7909 struct interface
*ifp
= vty
->index
;
7910 struct ospf_if_params
*params
;
7913 params
= IF_DEF_PARAMS (ifp
);
7915 UNSET_IF_PARAM (params
, transmit_delay
);
7916 params
->transmit_delay
= OSPF_TRANSMIT_DELAY_DEFAULT
;
7921 DEFUN (ip_ospf_area
,
7923 "ip ospf area (A.B.C.D|<0-4294967295>)",
7925 "OSPF interface commands\n"
7926 "Enable OSPF on this interface\n"
7927 "OSPF area ID in IP address format\n"
7928 "OSPF area ID as a decimal value\n")
7930 struct interface
*ifp
= vty
->index
;
7932 struct in_addr area_id
;
7934 struct ospf_if_params
*params
;
7935 struct route_node
*rn
;
7936 u_short instance
= 0;
7939 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
7941 ospf
= ospf_lookup_instance (instance
);
7944 params
= IF_DEF_PARAMS (ifp
);
7945 if (OSPF_IF_PARAM_CONFIGURED(params
, if_area
))
7947 ospf_interface_unset (ifp
);
7948 ospf
= ospf_lookup();
7949 ospf
->if_ospf_cli_count
--;
7954 ret
= ospf_str2area_id (argv
[instance
? 1 : 0], &area_id
, &format
);
7957 vty_out (vty
, "Please specify area by A.B.C.D|<0-4294967295>%s",
7961 if (memcmp (ifp
->name
, "VLINK", 5) == 0)
7963 vty_out (vty
, "Cannot enable OSPF on a virtual link.%s", VTY_NEWLINE
);
7967 params
= IF_DEF_PARAMS (ifp
);
7968 if (OSPF_IF_PARAM_CONFIGURED(params
, if_area
))
7971 "Must remove previous area config before changing ospf area %s",
7976 for (rn
= route_top (ospf
->networks
); rn
; rn
= route_next (rn
))
7978 if (rn
->info
!= NULL
)
7980 vty_out (vty
, "Please remove all network commands first.%s", VTY_NEWLINE
);
7985 /* enable ospf on this interface with area_id */
7986 ospf_interface_set (ifp
, area_id
);
7987 ospf
->if_ospf_cli_count
++;
7992 ALIAS (ip_ospf_area
,
7993 ip_ospf_instance_area_cmd
,
7994 "ip ospf <1-65535> area (A.B.C.D|<0-4294967295>)",
7996 "OSPF interface commands\n"
7998 "Enable OSPF on this interface\n"
7999 "OSPF area ID in IP address format\n"
8000 "OSPF area ID as a decimal value\n")
8002 DEFUN (no_ip_ospf_area
,
8003 no_ip_ospf_area_cmd
,
8007 "OSPF interface commands\n"
8008 "Disable OSPF on this interface\n")
8010 struct interface
*ifp
= vty
->index
;
8012 struct ospf_if_params
*params
;
8013 u_short instance
= 0;
8015 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
)
8018 params
= IF_DEF_PARAMS (ifp
);
8019 if (!OSPF_IF_PARAM_CONFIGURED(params
, if_area
))
8021 vty_out (vty
, "Can't find specified inteface area configuration.%s", VTY_NEWLINE
);
8025 ospf_interface_unset (ifp
);
8026 ospf
->if_ospf_cli_count
--;
8030 ALIAS (no_ip_ospf_area
,
8031 no_ip_ospf_area_val_cmd
,
8032 "no ip ospf area (A.B.C.D|<0-4294967295>)",
8035 "OSPF interface commands\n"
8036 "Disable OSPF on this interface\n"
8037 "OSPF area ID in IP address format\n"
8038 "OSPF area ID as a decimal value\n")
8040 DEFUN (no_ip_ospf_instance_area
,
8041 no_ip_ospf_instance_area_cmd
,
8042 "no ip ospf <1-65535> area",
8045 "OSPF interface commands\n"
8047 "Disable OSPF on this interface\n")
8049 struct interface
*ifp
= vty
->index
;
8051 struct ospf_if_params
*params
;
8052 u_short instance
= 0;
8054 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
8056 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
)
8059 params
= IF_DEF_PARAMS (ifp
);
8060 if (!OSPF_IF_PARAM_CONFIGURED(params
, if_area
))
8062 vty_out (vty
, "Can't find specified inteface area configuration.%s", VTY_NEWLINE
);
8066 ospf_interface_unset (ifp
);
8067 ospf
->if_ospf_cli_count
--;
8071 ALIAS (no_ip_ospf_instance_area
,
8072 no_ip_ospf_instance_area_val_cmd
,
8073 "no ip ospf <1-65535> area (A.B.C.D|<0-4294967295>)",
8076 "OSPF interface commands\n"
8078 "Disable OSPF on this interface\n"
8079 "OSPF area ID in IP address format\n"
8080 "OSPF area ID as a decimal value\n")
8082 DEFUN (ospf_redistribute_source
,
8083 ospf_redistribute_source_cmd
,
8084 "redistribute " QUAGGA_REDIST_STR_OSPFD
8085 " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8087 QUAGGA_REDIST_HELP_STR_OSPFD
8088 "Metric for redistributed routes\n"
8089 "OSPF default metric\n"
8090 "OSPF exterior metric type for redistributed routes\n"
8091 "Set OSPF External Type 1 metrics\n"
8092 "Set OSPF External Type 2 metrics\n"
8093 "Route map reference\n"
8094 "Pointer to route-map entries\n")
8096 struct ospf
*ospf
= vty
->index
;
8100 struct ospf_redist
*red
;
8106 return CMD_WARNING
; /* should not happen */
8111 /* Get distribute source. */
8112 source
= proto_redistnum(AFI_IP
, argv
[0]);
8113 if (source
< 0 || source
== ZEBRA_ROUTE_OSPF
)
8116 /* Get metric value. */
8117 if (argv
[1] != NULL
)
8118 if (!str2metric (argv
[1], &metric
))
8121 /* Get metric type. */
8122 if (argv
[2] != NULL
)
8123 if (!str2metric_type (argv
[2], &type
))
8126 red
= ospf_redist_add(ospf
, source
, 0);
8128 if (argv
[3] != NULL
)
8129 ospf_routemap_set (red
, argv
[3]);
8131 ospf_routemap_unset (red
);
8133 return ospf_redistribute_set (ospf
, source
, 0, type
, metric
);
8136 DEFUN (no_ospf_redistribute_source
,
8137 no_ospf_redistribute_source_cmd
,
8138 "no redistribute " QUAGGA_REDIST_STR_OSPFD
8139 " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8142 QUAGGA_REDIST_HELP_STR_OSPFD
8143 "Metric for redistributed routes\n"
8144 "OSPF default metric\n"
8145 "OSPF exterior metric type for redistributed routes\n"
8146 "Set OSPF External Type 1 metrics\n"
8147 "Set OSPF External Type 2 metrics\n"
8148 "Route map reference\n"
8149 "Pointer to route-map entries\n")
8151 struct ospf
*ospf
= vty
->index
;
8153 struct ospf_redist
*red
;
8157 source
= proto_redistnum(AFI_IP
, argv
[0]);
8158 if (source
< 0 || source
== ZEBRA_ROUTE_OSPF
)
8161 red
= ospf_redist_lookup(ospf
, source
, 0);
8165 ospf_routemap_unset (red
);
8166 return ospf_redistribute_unset (ospf
, source
, 0);
8169 DEFUN (ospf_redistribute_instance_source
,
8170 ospf_redistribute_instance_source_cmd
,
8171 "redistribute (ospf|table) <1-65535>"
8172 " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8174 "Open Shortest Path First\n"
8175 "Non-main Kernel Routing Table\n"
8176 "Instance ID/Table ID\n"
8177 "Metric for redistributed routes\n"
8178 "OSPF default metric\n"
8179 "OSPF exterior metric type for redistributed routes\n"
8180 "Set OSPF External Type 1 metrics\n"
8181 "Set OSPF External Type 2 metrics\n"
8182 "Route map reference\n"
8183 "Pointer to route-map entries\n")
8185 struct ospf
*ospf
= vty
->index
;
8190 struct ospf_redist
*red
;
8195 if (strncmp(argv
[0], "o", 1) == 0)
8196 source
= ZEBRA_ROUTE_OSPF
;
8198 source
= ZEBRA_ROUTE_TABLE
;
8200 VTY_GET_INTEGER ("Instance ID", instance
, argv
[1]);
8205 if ((source
== ZEBRA_ROUTE_OSPF
) && !ospf
->instance
)
8207 vty_out (vty
, "Instance redistribution in non-instanced OSPF not allowed%s",
8212 if ((source
== ZEBRA_ROUTE_OSPF
) && (ospf
->instance
== instance
))
8214 vty_out (vty
, "Same instance OSPF redistribution not allowed%s",
8219 /* Get metric value. */
8220 if (argv
[2] != NULL
)
8221 if (!str2metric (argv
[2], &metric
))
8224 /* Get metric type. */
8225 if (argv
[3] != NULL
)
8226 if (!str2metric_type (argv
[3], &type
))
8229 red
= ospf_redist_add(ospf
, source
, instance
);
8230 if (argv
[4] != NULL
)
8231 ospf_routemap_set (red
, argv
[4]);
8233 ospf_routemap_unset (red
);
8235 return ospf_redistribute_set (ospf
, source
, instance
, type
, metric
);
8238 DEFUN (no_ospf_redistribute_instance_source
,
8239 no_ospf_redistribute_instance_source_cmd
,
8240 "no redistribute (ospf|table) <1-65535>"
8241 " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8244 "Open Shortest Path First\n"
8245 "Non-main Kernel Routing Table\n"
8246 "Instance ID/Table Id\n"
8247 "Metric for redistributed routes\n"
8248 "OSPF default metric\n"
8249 "OSPF exterior metric type for redistributed routes\n"
8250 "Set OSPF External Type 1 metrics\n"
8251 "Set OSPF External Type 2 metrics\n"
8252 "Route map reference\n"
8253 "Pointer to route-map entries\n")
8255 struct ospf
*ospf
= vty
->index
;
8257 struct ospf_redist
*red
;
8263 if (strncmp(argv
[0], "o", 1) == 0)
8264 source
= ZEBRA_ROUTE_OSPF
;
8266 source
= ZEBRA_ROUTE_TABLE
;
8268 VTY_GET_INTEGER ("Instance ID", instance
, argv
[1]);
8270 if ((source
== ZEBRA_ROUTE_OSPF
) && !ospf
->instance
)
8272 vty_out (vty
, "Instance redistribution in non-instanced OSPF not allowed%s",
8277 if ((source
== ZEBRA_ROUTE_OSPF
) && (ospf
->instance
== instance
))
8279 vty_out (vty
, "Same instance OSPF redistribution not allowed%s",
8284 red
= ospf_redist_lookup(ospf
, source
, instance
);
8288 ospf_routemap_unset (red
);
8289 return ospf_redistribute_unset (ospf
, source
, instance
);
8292 DEFUN (ospf_distribute_list_out
,
8293 ospf_distribute_list_out_cmd
,
8294 "distribute-list WORD out " QUAGGA_REDIST_STR_OSPFD
,
8295 "Filter networks in routing updates\n"
8296 "Access-list name\n"
8298 QUAGGA_REDIST_HELP_STR_OSPFD
)
8300 struct ospf
*ospf
= vty
->index
;
8306 /* Get distribute source. */
8307 source
= proto_redistnum(AFI_IP
, argv
[1]);
8308 if (source
< 0 || source
== ZEBRA_ROUTE_OSPF
)
8311 return ospf_distribute_list_out_set (ospf
, source
, argv
[0]);
8314 DEFUN (no_ospf_distribute_list_out
,
8315 no_ospf_distribute_list_out_cmd
,
8316 "no distribute-list WORD out " QUAGGA_REDIST_STR_OSPFD
,
8318 "Filter networks in routing updates\n"
8319 "Access-list name\n"
8321 QUAGGA_REDIST_HELP_STR_OSPFD
)
8323 struct ospf
*ospf
= vty
->index
;
8329 source
= proto_redistnum(AFI_IP
, argv
[1]);
8330 if (source
< 0 || source
== ZEBRA_ROUTE_OSPF
)
8333 return ospf_distribute_list_out_unset (ospf
, source
, argv
[0]);
8336 /* Default information originate. */
8337 DEFUN (ospf_default_information_originate
,
8338 ospf_default_information_originate_cmd
,
8339 "default-information originate "
8340 "{always|metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8341 "Control distribution of default information\n"
8342 "Distribute a default route\n"
8343 "Always advertise default route\n"
8344 "OSPF default metric\n"
8346 "OSPF metric type for default routes\n"
8347 "Set OSPF External Type 1 metrics\n"
8348 "Set OSPF External Type 2 metrics\n"
8349 "Route map reference\n"
8350 "Pointer to route-map entries\n")
8352 struct ospf
*ospf
= vty
->index
;
8353 int default_originate
= DEFAULT_ORIGINATE_ZEBRA
;
8356 struct ospf_redist
*red
;
8362 return CMD_WARNING
; /* this should not happen */
8364 /* Check whether "always" was specified */
8365 if (argv
[0] != NULL
)
8366 default_originate
= DEFAULT_ORIGINATE_ALWAYS
;
8368 red
= ospf_redist_add(ospf
, DEFAULT_ROUTE
, 0);
8370 /* Get metric value. */
8371 if (argv
[1] != NULL
)
8372 if (!str2metric (argv
[1], &metric
))
8375 /* Get metric type. */
8376 if (argv
[2] != NULL
)
8377 if (!str2metric_type (argv
[2], &type
))
8380 if (argv
[3] != NULL
)
8381 ospf_routemap_set (red
, argv
[3]);
8383 ospf_routemap_unset (red
);
8385 return ospf_redistribute_default_set (ospf
, default_originate
,
8389 DEFUN (no_ospf_default_information_originate
,
8390 no_ospf_default_information_originate_cmd
,
8391 "no default-information originate"
8392 "{always|metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8394 "Control distribution of default information\n"
8395 "Distribute a default route\n"
8396 "Always advertise default route\n"
8397 "OSPF default metric\n"
8399 "OSPF metric type for default routes\n"
8400 "Set OSPF External Type 1 metrics\n"
8401 "Set OSPF External Type 2 metrics\n"
8402 "Route map reference\n"
8403 "Pointer to route-map entries\n")
8405 struct ospf
*ospf
= vty
->index
;
8406 struct prefix_ipv4 p
;
8407 struct ospf_external
*ext
;
8408 struct ospf_redist
*red
;
8414 p
.prefix
.s_addr
= 0;
8417 ospf_external_lsa_flush (ospf
, DEFAULT_ROUTE
, &p
, 0);
8419 if ((ext
= ospf_external_lookup(DEFAULT_ROUTE
, 0)) &&
8420 EXTERNAL_INFO (ext
)) {
8421 ospf_external_info_delete (DEFAULT_ROUTE
, 0, p
);
8422 ospf_external_del (DEFAULT_ROUTE
, 0);
8425 red
= ospf_redist_lookup(ospf
, DEFAULT_ROUTE
, 0);
8429 ospf_routemap_unset (red
);
8430 return ospf_redistribute_default_unset (ospf
);
8433 DEFUN (ospf_default_metric
,
8434 ospf_default_metric_cmd
,
8435 "default-metric <0-16777214>",
8436 "Set metric of redistributed routes\n"
8439 struct ospf
*ospf
= vty
->index
;
8445 if (!str2metric (argv
[0], &metric
))
8448 ospf
->default_metric
= metric
;
8453 DEFUN (no_ospf_default_metric
,
8454 no_ospf_default_metric_cmd
,
8455 "no default-metric",
8457 "Set metric of redistributed routes\n")
8459 struct ospf
*ospf
= vty
->index
;
8464 ospf
->default_metric
= -1;
8469 ALIAS (no_ospf_default_metric
,
8470 no_ospf_default_metric_val_cmd
,
8471 "no default-metric <0-16777214>",
8473 "Set metric of redistributed routes\n"
8476 DEFUN (ospf_distance
,
8479 "Define an administrative distance\n"
8480 "OSPF Administrative distance\n")
8482 struct ospf
*ospf
= vty
->index
;
8487 ospf
->distance_all
= atoi (argv
[0]);
8492 DEFUN (no_ospf_distance
,
8493 no_ospf_distance_cmd
,
8494 "no distance <1-255>",
8496 "Define an administrative distance\n"
8497 "OSPF Administrative distance\n")
8499 struct ospf
*ospf
= vty
->index
;
8504 ospf
->distance_all
= 0;
8509 DEFUN (no_ospf_distance_ospf
,
8510 no_ospf_distance_ospf_cmd
,
8511 "no distance ospf {intra-area <1-255>|inter-area <1-255>|external <1-255>}",
8513 "Define an administrative distance\n"
8514 "OSPF Administrative distance\n"
8515 "Intra-area routes\n"
8516 "Distance for intra-area routes\n"
8517 "Inter-area routes\n"
8518 "Distance for inter-area routes\n"
8520 "Distance for external routes\n")
8522 struct ospf
*ospf
= vty
->index
;
8533 if (argv
[0] != NULL
)
8534 ospf
->distance_intra
= 0;
8536 if (argv
[1] != NULL
)
8537 ospf
->distance_inter
= 0;
8539 if (argv
[2] != NULL
)
8540 ospf
->distance_external
= 0;
8542 if (argv
[0] || argv
[1] || argv
[2])
8545 /* If no arguments are given, clear all distance information */
8546 ospf
->distance_intra
= 0;
8547 ospf
->distance_inter
= 0;
8548 ospf
->distance_external
= 0;
8553 DEFUN (ospf_distance_ospf
,
8554 ospf_distance_ospf_cmd
,
8556 "{intra-area <1-255>|inter-area <1-255>|external <1-255>}",
8557 "Define an administrative distance\n"
8558 "OSPF Administrative distance\n"
8559 "Intra-area routes\n"
8560 "Distance for intra-area routes\n"
8561 "Inter-area routes\n"
8562 "Distance for inter-area routes\n"
8564 "Distance for external routes\n")
8566 struct ospf
*ospf
= vty
->index
;
8571 if (argc
< 3) /* should not happen */
8574 if (!argv
[0] && !argv
[1] && !argv
[2])
8576 vty_out(vty
, "%% Command incomplete. (Arguments required)%s",
8581 if (argv
[0] != NULL
)
8582 ospf
->distance_intra
= atoi(argv
[0]);
8584 if (argv
[1] != NULL
)
8585 ospf
->distance_inter
= atoi(argv
[1]);
8587 if (argv
[2] != NULL
)
8588 ospf
->distance_external
= atoi(argv
[2]);
8593 DEFUN (ospf_distance_source
,
8594 ospf_distance_source_cmd
,
8595 "distance <1-255> A.B.C.D/M",
8596 "Administrative distance\n"
8598 "IP source prefix\n")
8600 struct ospf
*ospf
= vty
->index
;
8605 ospf_distance_set (vty
, ospf
, argv
[0], argv
[1], NULL
);
8610 DEFUN (no_ospf_distance_source
,
8611 no_ospf_distance_source_cmd
,
8612 "no distance <1-255> A.B.C.D/M",
8614 "Administrative distance\n"
8616 "IP source prefix\n")
8618 struct ospf
*ospf
= vty
->index
;
8623 ospf_distance_unset (vty
, ospf
, argv
[0], argv
[1], NULL
);
8628 DEFUN (ospf_distance_source_access_list
,
8629 ospf_distance_source_access_list_cmd
,
8630 "distance <1-255> A.B.C.D/M WORD",
8631 "Administrative distance\n"
8633 "IP source prefix\n"
8634 "Access list name\n")
8636 struct ospf
*ospf
= vty
->index
;
8641 ospf_distance_set (vty
, ospf
, argv
[0], argv
[1], argv
[2]);
8646 DEFUN (no_ospf_distance_source_access_list
,
8647 no_ospf_distance_source_access_list_cmd
,
8648 "no distance <1-255> A.B.C.D/M WORD",
8650 "Administrative distance\n"
8652 "IP source prefix\n"
8653 "Access list name\n")
8655 struct ospf
*ospf
= vty
->index
;
8660 ospf_distance_unset (vty
, ospf
, argv
[0], argv
[1], argv
[2]);
8665 DEFUN (ip_ospf_mtu_ignore
,
8666 ip_ospf_mtu_ignore_addr_cmd
,
8667 "ip ospf mtu-ignore A.B.C.D",
8669 "OSPF interface commands\n"
8670 "Disable mtu mismatch detection\n"
8671 "Address of interface")
8673 struct interface
*ifp
= vty
->index
;
8674 struct in_addr addr
;
8677 struct ospf_if_params
*params
;
8678 params
= IF_DEF_PARAMS (ifp
);
8682 ret
= inet_aton(argv
[0], &addr
);
8685 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
8689 params
= ospf_get_if_params (ifp
, addr
);
8690 ospf_if_update_params (ifp
, addr
);
8692 params
->mtu_ignore
= 1;
8693 if (params
->mtu_ignore
!= OSPF_MTU_IGNORE_DEFAULT
)
8694 SET_IF_PARAM (params
, mtu_ignore
);
8697 UNSET_IF_PARAM (params
, mtu_ignore
);
8698 if (params
!= IF_DEF_PARAMS (ifp
))
8700 ospf_free_if_params (ifp
, addr
);
8701 ospf_if_update_params (ifp
, addr
);
8707 ALIAS (ip_ospf_mtu_ignore
,
8708 ip_ospf_mtu_ignore_cmd
,
8709 "ip ospf mtu-ignore",
8711 "OSPF interface commands\n"
8712 "Disable mtu mismatch detection\n")
8715 DEFUN (no_ip_ospf_mtu_ignore
,
8716 no_ip_ospf_mtu_ignore_addr_cmd
,
8717 "no ip ospf mtu-ignore A.B.C.D",
8719 "OSPF interface commands\n"
8720 "Disable mtu mismatch detection\n"
8721 "Address of interface")
8723 struct interface
*ifp
= vty
->index
;
8724 struct in_addr addr
;
8727 struct ospf_if_params
*params
;
8728 params
= IF_DEF_PARAMS (ifp
);
8732 ret
= inet_aton(argv
[0], &addr
);
8735 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
8739 params
= ospf_get_if_params (ifp
, addr
);
8740 ospf_if_update_params (ifp
, addr
);
8742 params
->mtu_ignore
= 0;
8743 if (params
->mtu_ignore
!= OSPF_MTU_IGNORE_DEFAULT
)
8744 SET_IF_PARAM (params
, mtu_ignore
);
8747 UNSET_IF_PARAM (params
, mtu_ignore
);
8748 if (params
!= IF_DEF_PARAMS (ifp
))
8750 ospf_free_if_params (ifp
, addr
);
8751 ospf_if_update_params (ifp
, addr
);
8757 ALIAS (no_ip_ospf_mtu_ignore
,
8758 no_ip_ospf_mtu_ignore_cmd
,
8759 "no ip ospf mtu-ignore",
8761 "OSPF interface commands\n"
8762 "Disable mtu mismatch detection\n")
8764 DEFUN (ospf_max_metric_router_lsa_admin
,
8765 ospf_max_metric_router_lsa_admin_cmd
,
8766 "max-metric router-lsa administrative",
8767 "OSPF maximum / infinite-distance metric\n"
8768 "Advertise own Router-LSA with infinite distance (stub router)\n"
8769 "Administratively applied, for an indefinite period\n")
8771 struct listnode
*ln
;
8772 struct ospf_area
*area
;
8773 struct ospf
*ospf
= vty
->index
;
8778 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, ln
, area
))
8780 SET_FLAG (area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
);
8782 if (!CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
))
8783 ospf_router_lsa_update_area (area
);
8786 /* Allows for areas configured later to get the property */
8787 ospf
->stub_router_admin_set
= OSPF_STUB_ROUTER_ADMINISTRATIVE_SET
;
8792 DEFUN (no_ospf_max_metric_router_lsa_admin
,
8793 no_ospf_max_metric_router_lsa_admin_cmd
,
8794 "no max-metric router-lsa administrative",
8796 "OSPF maximum / infinite-distance metric\n"
8797 "Advertise own Router-LSA with infinite distance (stub router)\n"
8798 "Administratively applied, for an indefinite period\n")
8800 struct listnode
*ln
;
8801 struct ospf_area
*area
;
8802 struct ospf
*ospf
= vty
->index
;
8807 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, ln
, area
))
8809 UNSET_FLAG (area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
);
8811 /* Don't trample on the start-up stub timer */
8812 if (CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
)
8813 && !area
->t_stub_router
)
8815 UNSET_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
);
8816 ospf_router_lsa_update_area (area
);
8819 ospf
->stub_router_admin_set
= OSPF_STUB_ROUTER_ADMINISTRATIVE_UNSET
;
8823 DEFUN (ospf_max_metric_router_lsa_startup
,
8824 ospf_max_metric_router_lsa_startup_cmd
,
8825 "max-metric router-lsa on-startup <5-86400>",
8826 "OSPF maximum / infinite-distance metric\n"
8827 "Advertise own Router-LSA with infinite distance (stub router)\n"
8828 "Automatically advertise stub Router-LSA on startup of OSPF\n"
8829 "Time (seconds) to advertise self as stub-router\n")
8831 unsigned int seconds
;
8832 struct ospf
*ospf
= vty
->index
;
8839 vty_out (vty
, "%% Must supply stub-router period");
8843 VTY_GET_INTEGER ("stub-router startup period", seconds
, argv
[0]);
8845 ospf
->stub_router_startup_time
= seconds
;
8850 DEFUN (no_ospf_max_metric_router_lsa_startup
,
8851 no_ospf_max_metric_router_lsa_startup_cmd
,
8852 "no max-metric router-lsa on-startup <5-86400>",
8854 "OSPF maximum / infinite-distance metric\n"
8855 "Advertise own Router-LSA with infinite distance (stub router)\n"
8856 "Automatically advertise stub Router-LSA on startup of OSPF\n"
8857 "Time (seconds) to advertise self as stub-router\n")
8859 struct listnode
*ln
;
8860 struct ospf_area
*area
;
8861 struct ospf
*ospf
= vty
->index
;
8866 ospf
->stub_router_startup_time
= OSPF_STUB_ROUTER_UNCONFIGURED
;
8868 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, ln
, area
))
8870 SET_FLAG (area
->stub_router_state
, OSPF_AREA_WAS_START_STUB_ROUTED
);
8871 OSPF_TIMER_OFF (area
->t_stub_router
);
8873 /* Don't trample on admin stub routed */
8874 if (!CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
))
8876 UNSET_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
);
8877 ospf_router_lsa_update_area (area
);
8883 ALIAS (no_ospf_max_metric_router_lsa_startup
,
8884 no_ospf_max_metric_router_lsa_startup_no_param_cmd
,
8885 "no max-metric router-lsa on-startup",
8887 "OSPF maximum / infinite-distance metric\n"
8888 "Advertise own Router-LSA with infinite distance (stub router)\n"
8889 "Automatically advertise stub Router-LSA on startup of OSPF\n");
8891 DEFUN (ospf_max_metric_router_lsa_shutdown
,
8892 ospf_max_metric_router_lsa_shutdown_cmd
,
8893 "max-metric router-lsa on-shutdown <5-100>",
8894 "OSPF maximum / infinite-distance metric\n"
8895 "Advertise own Router-LSA with infinite distance (stub router)\n"
8896 "Advertise stub-router prior to full shutdown of OSPF\n"
8897 "Time (seconds) to wait till full shutdown\n")
8899 unsigned int seconds
;
8900 struct ospf
*ospf
= vty
->index
;
8907 vty_out (vty
, "%% Must supply stub-router shutdown period");
8911 VTY_GET_INTEGER ("stub-router shutdown wait period", seconds
, argv
[0]);
8913 ospf
->stub_router_shutdown_time
= seconds
;
8918 DEFUN (no_ospf_max_metric_router_lsa_shutdown
,
8919 no_ospf_max_metric_router_lsa_shutdown_cmd
,
8920 "no max-metric router-lsa on-shutdown <5-100>",
8922 "OSPF maximum / infinite-distance metric\n"
8923 "Advertise own Router-LSA with infinite distance (stub router)\n"
8924 "Advertise stub-router prior to full shutdown of OSPF\n"
8925 "Time (seconds) to wait till full shutdown\n")
8927 struct ospf
*ospf
= vty
->index
;
8932 ospf
->stub_router_shutdown_time
= OSPF_STUB_ROUTER_UNCONFIGURED
;
8937 ALIAS (no_ospf_max_metric_router_lsa_shutdown
,
8938 no_ospf_max_metric_router_lsa_shutdown_no_param_cmd
,
8939 "no max-metric router-lsa on-shutdown",
8941 "OSPF maximum / infinite-distance metric\n"
8942 "Advertise own Router-LSA with infinite distance (stub router)\n"
8943 "Advertise stub-router prior to full shutdown of OSPF\n");
8946 config_write_stub_router (struct vty
*vty
, struct ospf
*ospf
)
8948 struct listnode
*ln
;
8949 struct ospf_area
*area
;
8951 if (ospf
->stub_router_startup_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
8952 vty_out (vty
, " max-metric router-lsa on-startup %u%s",
8953 ospf
->stub_router_startup_time
, VTY_NEWLINE
);
8954 if (ospf
->stub_router_shutdown_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
8955 vty_out (vty
, " max-metric router-lsa on-shutdown %u%s",
8956 ospf
->stub_router_shutdown_time
, VTY_NEWLINE
);
8957 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, ln
, area
))
8959 if (CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
))
8961 vty_out (vty
, " max-metric router-lsa administrative%s",
8970 show_ip_ospf_route_network (struct vty
*vty
, struct route_table
*rt
)
8972 struct route_node
*rn
;
8973 struct ospf_route
*or;
8974 struct listnode
*pnode
, *pnnode
;
8975 struct ospf_path
*path
;
8977 vty_out (vty
, "============ OSPF network routing table ============%s",
8980 for (rn
= route_top (rt
); rn
; rn
= route_next (rn
))
8981 if ((or = rn
->info
) != NULL
)
8984 snprintf (buf1
, 19, "%s/%d",
8985 inet_ntoa (rn
->p
.u
.prefix4
), rn
->p
.prefixlen
);
8987 switch (or->path_type
)
8989 case OSPF_PATH_INTER_AREA
:
8990 if (or->type
== OSPF_DESTINATION_NETWORK
)
8991 vty_out (vty
, "N IA %-18s [%d] area: %s%s", buf1
, or->cost
,
8992 inet_ntoa (or->u
.std
.area_id
), VTY_NEWLINE
);
8993 else if (or->type
== OSPF_DESTINATION_DISCARD
)
8994 vty_out (vty
, "D IA %-18s Discard entry%s", buf1
, VTY_NEWLINE
);
8996 case OSPF_PATH_INTRA_AREA
:
8997 vty_out (vty
, "N %-18s [%d] area: %s%s", buf1
, or->cost
,
8998 inet_ntoa (or->u
.std
.area_id
), VTY_NEWLINE
);
9004 if (or->type
== OSPF_DESTINATION_NETWORK
)
9005 for (ALL_LIST_ELEMENTS (or->paths
, pnode
, pnnode
, path
))
9007 if (if_lookup_by_index(path
->ifindex
))
9009 if (path
->nexthop
.s_addr
== 0)
9010 vty_out (vty
, "%24s directly attached to %s%s",
9011 "", ifindex2ifname (path
->ifindex
), VTY_NEWLINE
);
9013 vty_out (vty
, "%24s via %s, %s%s", "",
9014 inet_ntoa (path
->nexthop
),
9015 ifindex2ifname (path
->ifindex
), VTY_NEWLINE
);
9019 vty_out (vty
, "%s", VTY_NEWLINE
);
9023 show_ip_ospf_route_router (struct vty
*vty
, struct route_table
*rtrs
)
9025 struct route_node
*rn
;
9026 struct ospf_route
*or;
9027 struct listnode
*pnode
;
9028 struct listnode
*node
;
9029 struct ospf_path
*path
;
9031 vty_out (vty
, "============ OSPF router routing table =============%s",
9033 for (rn
= route_top (rtrs
); rn
; rn
= route_next (rn
))
9038 vty_out (vty
, "R %-15s ", inet_ntoa (rn
->p
.u
.prefix4
));
9040 for (ALL_LIST_ELEMENTS_RO ((struct list
*)rn
->info
, node
, or))
9043 vty_out (vty
, "%24s", "");
9046 vty_out (vty
, "%s [%d] area: %s",
9047 (or->path_type
== OSPF_PATH_INTER_AREA
? "IA" : " "),
9048 or->cost
, inet_ntoa (or->u
.std
.area_id
));
9050 vty_out (vty
, "%s%s%s",
9051 (or->u
.std
.flags
& ROUTER_LSA_BORDER
? ", ABR" : ""),
9052 (or->u
.std
.flags
& ROUTER_LSA_EXTERNAL
? ", ASBR" : ""),
9055 for (ALL_LIST_ELEMENTS_RO (or->paths
, pnode
, path
))
9057 if (if_lookup_by_index(path
->ifindex
))
9059 if (path
->nexthop
.s_addr
== 0)
9060 vty_out (vty
, "%24s directly attached to %s%s",
9061 "", ifindex2ifname (path
->ifindex
),
9064 vty_out (vty
, "%24s via %s, %s%s", "",
9065 inet_ntoa (path
->nexthop
),
9066 ifindex2ifname (path
->ifindex
),
9072 vty_out (vty
, "%s", VTY_NEWLINE
);
9076 show_ip_ospf_route_external (struct vty
*vty
, struct route_table
*rt
)
9078 struct route_node
*rn
;
9079 struct ospf_route
*er
;
9080 struct listnode
*pnode
, *pnnode
;
9081 struct ospf_path
*path
;
9083 vty_out (vty
, "============ OSPF external routing table ===========%s",
9085 for (rn
= route_top (rt
); rn
; rn
= route_next (rn
))
9086 if ((er
= rn
->info
) != NULL
)
9089 snprintf (buf1
, 19, "%s/%d",
9090 inet_ntoa (rn
->p
.u
.prefix4
), rn
->p
.prefixlen
);
9092 switch (er
->path_type
)
9094 case OSPF_PATH_TYPE1_EXTERNAL
:
9095 vty_out (vty
, "N E1 %-18s [%d] tag: %u%s", buf1
,
9096 er
->cost
, er
->u
.ext
.tag
, VTY_NEWLINE
);
9098 case OSPF_PATH_TYPE2_EXTERNAL
:
9099 vty_out (vty
, "N E2 %-18s [%d/%d] tag: %u%s", buf1
, er
->cost
,
9100 er
->u
.ext
.type2_cost
, er
->u
.ext
.tag
, VTY_NEWLINE
);
9104 for (ALL_LIST_ELEMENTS (er
->paths
, pnode
, pnnode
, path
))
9106 if (if_lookup_by_index(path
->ifindex
))
9108 if (path
->nexthop
.s_addr
== 0)
9109 vty_out (vty
, "%24s directly attached to %s%s",
9110 "", ifindex2ifname (path
->ifindex
), VTY_NEWLINE
);
9112 vty_out (vty
, "%24s via %s, %s%s", "",
9113 inet_ntoa (path
->nexthop
),
9114 ifindex2ifname (path
->ifindex
),
9119 vty_out (vty
, "%s", VTY_NEWLINE
);
9123 show_ip_ospf_border_routers_common (struct vty
*vty
, struct ospf
*ospf
)
9126 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
9127 VTY_NEWLINE
, VTY_NEWLINE
);
9129 if (ospf
->new_table
== NULL
)
9131 vty_out (vty
, "No OSPF routing information exist%s", VTY_NEWLINE
);
9135 /* Show Network routes.
9136 show_ip_ospf_route_network (vty, ospf->new_table); */
9138 /* Show Router routes. */
9139 show_ip_ospf_route_router (vty
, ospf
->new_rtrs
);
9141 vty_out (vty
, "%s", VTY_NEWLINE
);
9146 DEFUN (show_ip_ospf_border_routers
,
9147 show_ip_ospf_border_routers_cmd
,
9148 "show ip ospf border-routers",
9151 "OSPF information\n"
9152 "Show all the ABR's and ASBR's\n")
9156 if ((ospf
= ospf_lookup ()) == NULL
|| !ospf
->oi_running
)
9159 return show_ip_ospf_border_routers_common(vty
, ospf
);
9162 DEFUN (show_ip_ospf_instance_border_routers
,
9163 show_ip_ospf_instance_border_routers_cmd
,
9164 "show ip ospf <1-65535> border-routers",
9167 "OSPF information\n"
9169 "Show all the ABR's and ASBR's\n")
9172 u_short instance
= 0;
9174 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
9175 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
9178 return show_ip_ospf_border_routers_common(vty
, ospf
);
9182 show_ip_ospf_route_common (struct vty
*vty
, struct ospf
*ospf
)
9185 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
9186 VTY_NEWLINE
, VTY_NEWLINE
);
9188 if (ospf
->new_table
== NULL
)
9190 vty_out (vty
, "No OSPF routing information exist%s", VTY_NEWLINE
);
9194 /* Show Network routes. */
9195 show_ip_ospf_route_network (vty
, ospf
->new_table
);
9197 /* Show Router routes. */
9198 show_ip_ospf_route_router (vty
, ospf
->new_rtrs
);
9200 /* Show AS External routes. */
9201 show_ip_ospf_route_external (vty
, ospf
->old_external_route
);
9203 vty_out (vty
, "%s", VTY_NEWLINE
);
9208 DEFUN (show_ip_ospf_route
,
9209 show_ip_ospf_route_cmd
,
9210 "show ip ospf route",
9213 "OSPF information\n"
9214 "OSPF routing table\n")
9218 if ((ospf
= ospf_lookup ()) == NULL
|| !ospf
->oi_running
)
9221 return show_ip_ospf_route_common(vty
, ospf
);
9224 DEFUN (show_ip_ospf_instance_route
,
9225 show_ip_ospf_instance_route_cmd
,
9226 "show ip ospf <1-65535> route",
9229 "OSPF information\n"
9231 "OSPF routing table\n")
9234 u_short instance
= 0;
9236 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
9237 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
9240 return show_ip_ospf_route_common(vty
, ospf
);
9243 const char *ospf_abr_type_str
[] =
9252 const char *ospf_shortcut_mode_str
[] =
9261 area_id2str (char *buf
, int length
, struct ospf_area
*area
)
9263 memset (buf
, 0, length
);
9265 if (area
->format
== OSPF_AREA_ID_FORMAT_ADDRESS
)
9266 strncpy (buf
, inet_ntoa (area
->area_id
), length
);
9268 sprintf (buf
, "%lu", (unsigned long) ntohl (area
->area_id
.s_addr
));
9272 const char *ospf_int_type_str
[] =
9274 "unknown", /* should never be used. */
9278 "point-to-multipoint",
9279 "virtual-link", /* should never be used. */
9283 /* Configuration write function for ospfd. */
9285 config_write_interface (struct vty
*vty
)
9287 struct listnode
*n1
, *n2
;
9288 struct interface
*ifp
;
9289 struct crypt_key
*ck
;
9291 struct route_node
*rn
= NULL
;
9292 struct ospf_if_params
*params
;
9293 struct ospf
*ospf
= ospf_lookup();
9295 for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT
), n1
, ifp
))
9297 if (memcmp (ifp
->name
, "VLINK", 5) == 0)
9300 if (ifp
->ifindex
== IFINDEX_DELETED
)
9303 vty_out (vty
, "!%s", VTY_NEWLINE
);
9304 vty_out (vty
, "interface %s%s", ifp
->name
,
9307 vty_out (vty
, " description %s%s", ifp
->desc
,
9312 params
= IF_DEF_PARAMS (ifp
);
9315 /* Interface Network print. */
9316 if (OSPF_IF_PARAM_CONFIGURED (params
, type
) &&
9317 params
->type
!= OSPF_IFTYPE_LOOPBACK
)
9319 if (params
->type
!= ospf_default_iftype(ifp
))
9321 vty_out (vty
, " ip ospf network %s",
9322 ospf_int_type_str
[params
->type
]);
9323 if (params
!= IF_DEF_PARAMS (ifp
))
9324 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9325 vty_out (vty
, "%s", VTY_NEWLINE
);
9329 /* OSPF interface authentication print */
9330 if (OSPF_IF_PARAM_CONFIGURED (params
, auth_type
) &&
9331 params
->auth_type
!= OSPF_AUTH_NOTSET
)
9333 const char *auth_str
;
9335 /* Translation tables are not that much help here due to syntax
9336 of the simple option */
9337 switch (params
->auth_type
)
9340 case OSPF_AUTH_NULL
:
9344 case OSPF_AUTH_SIMPLE
:
9348 case OSPF_AUTH_CRYPTOGRAPHIC
:
9349 auth_str
= " message-digest";
9357 vty_out (vty
, " ip ospf authentication%s", auth_str
);
9358 if (params
!= IF_DEF_PARAMS (ifp
))
9359 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9360 vty_out (vty
, "%s", VTY_NEWLINE
);
9363 /* Simple Authentication Password print. */
9364 if (OSPF_IF_PARAM_CONFIGURED (params
, auth_simple
) &&
9365 params
->auth_simple
[0] != '\0')
9367 vty_out (vty
, " ip ospf authentication-key %s",
9368 params
->auth_simple
);
9369 if (params
!= IF_DEF_PARAMS (ifp
))
9370 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9371 vty_out (vty
, "%s", VTY_NEWLINE
);
9374 /* Cryptographic Authentication Key print. */
9375 for (ALL_LIST_ELEMENTS_RO (params
->auth_crypt
, n2
, ck
))
9377 vty_out (vty
, " ip ospf message-digest-key %d md5 %s",
9378 ck
->key_id
, ck
->auth_key
);
9379 if (params
!= IF_DEF_PARAMS (ifp
))
9380 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9381 vty_out (vty
, "%s", VTY_NEWLINE
);
9384 /* Interface Output Cost print. */
9385 if (OSPF_IF_PARAM_CONFIGURED (params
, output_cost_cmd
))
9387 vty_out (vty
, " ip ospf cost %u", params
->output_cost_cmd
);
9388 if (params
!= IF_DEF_PARAMS (ifp
))
9389 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9390 vty_out (vty
, "%s", VTY_NEWLINE
);
9393 /* Hello Interval print. */
9394 if (OSPF_IF_PARAM_CONFIGURED (params
, v_hello
) &&
9395 params
->v_hello
!= OSPF_HELLO_INTERVAL_DEFAULT
)
9397 vty_out (vty
, " ip ospf hello-interval %u", params
->v_hello
);
9398 if (params
!= IF_DEF_PARAMS (ifp
))
9399 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9400 vty_out (vty
, "%s", VTY_NEWLINE
);
9404 /* Router Dead Interval print. */
9405 if (OSPF_IF_PARAM_CONFIGURED (params
, v_wait
) &&
9406 params
->v_wait
!= OSPF_ROUTER_DEAD_INTERVAL_DEFAULT
)
9408 vty_out (vty
, " ip ospf dead-interval ");
9411 if (OSPF_IF_PARAM_CONFIGURED (params
, fast_hello
))
9412 vty_out (vty
, "minimal hello-multiplier %d",
9413 params
->fast_hello
);
9415 vty_out (vty
, "%u", params
->v_wait
);
9417 if (params
!= IF_DEF_PARAMS (ifp
))
9418 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9419 vty_out (vty
, "%s", VTY_NEWLINE
);
9422 /* Router Priority print. */
9423 if (OSPF_IF_PARAM_CONFIGURED (params
, priority
) &&
9424 params
->priority
!= OSPF_ROUTER_PRIORITY_DEFAULT
)
9426 vty_out (vty
, " ip ospf priority %u", params
->priority
);
9427 if (params
!= IF_DEF_PARAMS (ifp
))
9428 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9429 vty_out (vty
, "%s", VTY_NEWLINE
);
9432 /* Retransmit Interval print. */
9433 if (OSPF_IF_PARAM_CONFIGURED (params
, retransmit_interval
) &&
9434 params
->retransmit_interval
!= OSPF_RETRANSMIT_INTERVAL_DEFAULT
)
9436 vty_out (vty
, " ip ospf retransmit-interval %u",
9437 params
->retransmit_interval
);
9438 if (params
!= IF_DEF_PARAMS (ifp
))
9439 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9440 vty_out (vty
, "%s", VTY_NEWLINE
);
9443 /* Transmit Delay print. */
9444 if (OSPF_IF_PARAM_CONFIGURED (params
, transmit_delay
) &&
9445 params
->transmit_delay
!= OSPF_TRANSMIT_DELAY_DEFAULT
)
9447 vty_out (vty
, " ip ospf transmit-delay %u", params
->transmit_delay
);
9448 if (params
!= IF_DEF_PARAMS (ifp
))
9449 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9450 vty_out (vty
, "%s", VTY_NEWLINE
);
9454 if (OSPF_IF_PARAM_CONFIGURED (params
, if_area
))
9457 vty_out (vty
, " ip ospf %d area %s%s", ospf
->instance
,
9458 inet_ntoa (params
->if_area
), VTY_NEWLINE
);
9460 vty_out (vty
, " ip ospf area %s%s",
9461 inet_ntoa (params
->if_area
), VTY_NEWLINE
);
9466 ospf_bfd_write_config(vty
, params
);
9468 /* MTU ignore print. */
9469 if (OSPF_IF_PARAM_CONFIGURED (params
, mtu_ignore
) &&
9470 params
->mtu_ignore
!= OSPF_MTU_IGNORE_DEFAULT
)
9472 if (params
->mtu_ignore
== 0)
9473 vty_out (vty
, " no ip ospf mtu-ignore");
9475 vty_out (vty
, " ip ospf mtu-ignore");
9476 if (params
!= IF_DEF_PARAMS (ifp
))
9477 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9478 vty_out (vty
, "%s", VTY_NEWLINE
);
9485 rn
= route_top (IF_OIFS_PARAMS (ifp
));
9487 rn
= route_next (rn
);
9497 #ifdef HAVE_OPAQUE_LSA
9498 ospf_opaque_config_write_if (vty
, ifp
);
9499 #endif /* HAVE_OPAQUE_LSA */
9506 config_write_network_area (struct vty
*vty
, struct ospf
*ospf
)
9508 struct route_node
*rn
;
9509 u_char buf
[INET_ADDRSTRLEN
];
9511 /* `network area' print. */
9512 for (rn
= route_top (ospf
->networks
); rn
; rn
= route_next (rn
))
9515 struct ospf_network
*n
= rn
->info
;
9517 memset (buf
, 0, INET_ADDRSTRLEN
);
9519 /* Create Area ID string by specified Area ID format. */
9520 if (n
->format
== OSPF_AREA_ID_FORMAT_ADDRESS
)
9521 strncpy ((char *) buf
, inet_ntoa (n
->area_id
), INET_ADDRSTRLEN
);
9523 sprintf ((char *) buf
, "%lu",
9524 (unsigned long int) ntohl (n
->area_id
.s_addr
));
9526 /* Network print. */
9527 vty_out (vty
, " network %s/%d area %s%s",
9528 inet_ntoa (rn
->p
.u
.prefix4
), rn
->p
.prefixlen
,
9536 config_write_ospf_area (struct vty
*vty
, struct ospf
*ospf
)
9538 struct listnode
*node
;
9539 struct ospf_area
*area
;
9540 u_char buf
[INET_ADDRSTRLEN
];
9542 /* Area configuration print. */
9543 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
9545 struct route_node
*rn1
;
9547 area_id2str ((char *) buf
, INET_ADDRSTRLEN
, area
);
9549 if (area
->auth_type
!= OSPF_AUTH_NULL
)
9551 if (area
->auth_type
== OSPF_AUTH_SIMPLE
)
9552 vty_out (vty
, " area %s authentication%s", buf
, VTY_NEWLINE
);
9554 vty_out (vty
, " area %s authentication message-digest%s",
9558 if (area
->shortcut_configured
!= OSPF_SHORTCUT_DEFAULT
)
9559 vty_out (vty
, " area %s shortcut %s%s", buf
,
9560 ospf_shortcut_mode_str
[area
->shortcut_configured
],
9563 if ((area
->external_routing
== OSPF_AREA_STUB
)
9564 || (area
->external_routing
== OSPF_AREA_NSSA
)
9567 if (area
->external_routing
== OSPF_AREA_STUB
)
9568 vty_out (vty
, " area %s stub", buf
);
9569 else if (area
->external_routing
== OSPF_AREA_NSSA
)
9571 vty_out (vty
, " area %s nssa", buf
);
9572 switch (area
->NSSATranslatorRole
)
9574 case OSPF_NSSA_ROLE_NEVER
:
9575 vty_out (vty
, " translate-never");
9577 case OSPF_NSSA_ROLE_ALWAYS
:
9578 vty_out (vty
, " translate-always");
9580 case OSPF_NSSA_ROLE_CANDIDATE
:
9582 vty_out (vty
, " translate-candidate");
9586 if (area
->no_summary
)
9587 vty_out (vty
, " no-summary");
9589 vty_out (vty
, "%s", VTY_NEWLINE
);
9591 if (area
->default_cost
!= 1)
9592 vty_out (vty
, " area %s default-cost %d%s", buf
,
9593 area
->default_cost
, VTY_NEWLINE
);
9596 for (rn1
= route_top (area
->ranges
); rn1
; rn1
= route_next (rn1
))
9599 struct ospf_area_range
*range
= rn1
->info
;
9601 vty_out (vty
, " area %s range %s/%d", buf
,
9602 inet_ntoa (rn1
->p
.u
.prefix4
), rn1
->p
.prefixlen
);
9604 if (range
->cost_config
!= OSPF_AREA_RANGE_COST_UNSPEC
)
9605 vty_out (vty
, " cost %d", range
->cost_config
);
9607 if (!CHECK_FLAG (range
->flags
, OSPF_AREA_RANGE_ADVERTISE
))
9608 vty_out (vty
, " not-advertise");
9610 if (CHECK_FLAG (range
->flags
, OSPF_AREA_RANGE_SUBSTITUTE
))
9611 vty_out (vty
, " substitute %s/%d",
9612 inet_ntoa (range
->subst_addr
), range
->subst_masklen
);
9614 vty_out (vty
, "%s", VTY_NEWLINE
);
9617 if (EXPORT_NAME (area
))
9618 vty_out (vty
, " area %s export-list %s%s", buf
,
9619 EXPORT_NAME (area
), VTY_NEWLINE
);
9621 if (IMPORT_NAME (area
))
9622 vty_out (vty
, " area %s import-list %s%s", buf
,
9623 IMPORT_NAME (area
), VTY_NEWLINE
);
9625 if (PREFIX_NAME_IN (area
))
9626 vty_out (vty
, " area %s filter-list prefix %s in%s", buf
,
9627 PREFIX_NAME_IN (area
), VTY_NEWLINE
);
9629 if (PREFIX_NAME_OUT (area
))
9630 vty_out (vty
, " area %s filter-list prefix %s out%s", buf
,
9631 PREFIX_NAME_OUT (area
), VTY_NEWLINE
);
9638 config_write_ospf_nbr_nbma (struct vty
*vty
, struct ospf
*ospf
)
9640 struct ospf_nbr_nbma
*nbr_nbma
;
9641 struct route_node
*rn
;
9643 /* Static Neighbor configuration print. */
9644 for (rn
= route_top (ospf
->nbr_nbma
); rn
; rn
= route_next (rn
))
9645 if ((nbr_nbma
= rn
->info
))
9647 vty_out (vty
, " neighbor %s", inet_ntoa (nbr_nbma
->addr
));
9649 if (nbr_nbma
->priority
!= OSPF_NEIGHBOR_PRIORITY_DEFAULT
)
9650 vty_out (vty
, " priority %d", nbr_nbma
->priority
);
9652 if (nbr_nbma
->v_poll
!= OSPF_POLL_INTERVAL_DEFAULT
)
9653 vty_out (vty
, " poll-interval %d", nbr_nbma
->v_poll
);
9655 vty_out (vty
, "%s", VTY_NEWLINE
);
9662 config_write_virtual_link (struct vty
*vty
, struct ospf
*ospf
)
9664 struct listnode
*node
;
9665 struct ospf_vl_data
*vl_data
;
9666 u_char buf
[INET_ADDRSTRLEN
];
9668 /* Virtual-Link print */
9669 for (ALL_LIST_ELEMENTS_RO (ospf
->vlinks
, node
, vl_data
))
9671 struct listnode
*n2
;
9672 struct crypt_key
*ck
;
9673 struct ospf_interface
*oi
;
9675 if (vl_data
!= NULL
)
9677 memset (buf
, 0, INET_ADDRSTRLEN
);
9679 if (vl_data
->format
== OSPF_AREA_ID_FORMAT_ADDRESS
)
9680 strncpy ((char *) buf
, inet_ntoa (vl_data
->vl_area_id
), INET_ADDRSTRLEN
);
9682 sprintf ((char *) buf
, "%lu",
9683 (unsigned long int) ntohl (vl_data
->vl_area_id
.s_addr
));
9684 oi
= vl_data
->vl_oi
;
9687 if (OSPF_IF_PARAM (oi
, v_hello
) != OSPF_HELLO_INTERVAL_DEFAULT
||
9688 OSPF_IF_PARAM (oi
, v_wait
) != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT
||
9689 OSPF_IF_PARAM (oi
, retransmit_interval
) != OSPF_RETRANSMIT_INTERVAL_DEFAULT
||
9690 OSPF_IF_PARAM (oi
, transmit_delay
) != OSPF_TRANSMIT_DELAY_DEFAULT
)
9691 vty_out (vty
, " area %s virtual-link %s hello-interval %d retransmit-interval %d transmit-delay %d dead-interval %d%s",
9693 inet_ntoa (vl_data
->vl_peer
),
9694 OSPF_IF_PARAM (oi
, v_hello
),
9695 OSPF_IF_PARAM (oi
, retransmit_interval
),
9696 OSPF_IF_PARAM (oi
, transmit_delay
),
9697 OSPF_IF_PARAM (oi
, v_wait
),
9700 vty_out (vty
, " area %s virtual-link %s%s", buf
,
9701 inet_ntoa (vl_data
->vl_peer
), VTY_NEWLINE
);
9703 if (IF_DEF_PARAMS (vl_data
->vl_oi
->ifp
)->auth_simple
[0] != '\0')
9704 vty_out (vty
, " area %s virtual-link %s authentication-key %s%s",
9706 inet_ntoa (vl_data
->vl_peer
),
9707 IF_DEF_PARAMS (vl_data
->vl_oi
->ifp
)->auth_simple
,
9710 for (ALL_LIST_ELEMENTS_RO (IF_DEF_PARAMS (vl_data
->vl_oi
->ifp
)->auth_crypt
,
9712 vty_out (vty
, " area %s virtual-link %s"
9713 " message-digest-key %d md5 %s%s",
9715 inet_ntoa (vl_data
->vl_peer
),
9716 ck
->key_id
, ck
->auth_key
, VTY_NEWLINE
);
9726 config_write_ospf_redistribute (struct vty
*vty
, struct ospf
*ospf
)
9730 /* redistribute print. */
9731 for (type
= 0; type
< ZEBRA_ROUTE_MAX
; type
++)
9733 struct list
*red_list
;
9734 struct listnode
*node
;
9735 struct ospf_redist
*red
;
9737 red_list
= ospf
->redist
[type
];
9741 for (ALL_LIST_ELEMENTS_RO(red_list
, node
, red
))
9743 vty_out (vty
, " redistribute %s", zebra_route_string(type
));
9745 vty_out (vty
, " %d", red
->instance
);
9747 if (red
->dmetric
.value
>= 0)
9748 vty_out (vty
, " metric %d", red
->dmetric
.value
);
9750 if (red
->dmetric
.type
== EXTERNAL_METRIC_TYPE_1
)
9751 vty_out (vty
, " metric-type 1");
9753 if (ROUTEMAP_NAME (red
))
9754 vty_out (vty
, " route-map %s", ROUTEMAP_NAME (red
));
9756 vty_out (vty
, "%s", VTY_NEWLINE
);
9764 config_write_ospf_default_metric (struct vty
*vty
, struct ospf
*ospf
)
9766 if (ospf
->default_metric
!= -1)
9767 vty_out (vty
, " default-metric %d%s", ospf
->default_metric
,
9773 config_write_ospf_distribute (struct vty
*vty
, struct ospf
*ospf
)
9776 struct ospf_redist
*red
;
9780 /* distribute-list print. */
9781 for (type
= 0; type
< ZEBRA_ROUTE_MAX
; type
++)
9782 if (DISTRIBUTE_NAME (ospf
, type
))
9783 vty_out (vty
, " distribute-list %s out %s%s",
9784 DISTRIBUTE_NAME (ospf
, type
),
9785 zebra_route_string(type
), VTY_NEWLINE
);
9787 /* default-information print. */
9788 if (ospf
->default_originate
!= DEFAULT_ORIGINATE_NONE
)
9790 vty_out (vty
, " default-information originate");
9791 if (ospf
->default_originate
== DEFAULT_ORIGINATE_ALWAYS
)
9792 vty_out (vty
, " always");
9794 red
= ospf_redist_lookup(ospf
, DEFAULT_ROUTE
, 0);
9797 if (red
->dmetric
.value
>= 0)
9798 vty_out (vty
, " metric %d",
9799 red
->dmetric
.value
);
9800 if (red
->dmetric
.type
== EXTERNAL_METRIC_TYPE_1
)
9801 vty_out (vty
, " metric-type 1");
9803 if (ROUTEMAP_NAME (red
))
9804 vty_out (vty
, " route-map %s",
9805 ROUTEMAP_NAME (red
));
9808 vty_out (vty
, "%s", VTY_NEWLINE
);
9817 config_write_ospf_distance (struct vty
*vty
, struct ospf
*ospf
)
9819 struct route_node
*rn
;
9820 struct ospf_distance
*odistance
;
9822 if (ospf
->distance_all
)
9823 vty_out (vty
, " distance %d%s", ospf
->distance_all
, VTY_NEWLINE
);
9825 if (ospf
->distance_intra
9826 || ospf
->distance_inter
9827 || ospf
->distance_external
)
9829 vty_out (vty
, " distance ospf");
9831 if (ospf
->distance_intra
)
9832 vty_out (vty
, " intra-area %d", ospf
->distance_intra
);
9833 if (ospf
->distance_inter
)
9834 vty_out (vty
, " inter-area %d", ospf
->distance_inter
);
9835 if (ospf
->distance_external
)
9836 vty_out (vty
, " external %d", ospf
->distance_external
);
9838 vty_out (vty
, "%s", VTY_NEWLINE
);
9841 for (rn
= route_top (ospf
->distance_table
); rn
; rn
= route_next (rn
))
9842 if ((odistance
= rn
->info
) != NULL
)
9844 vty_out (vty
, " distance %d %s/%d %s%s", odistance
->distance
,
9845 inet_ntoa (rn
->p
.u
.prefix4
), rn
->p
.prefixlen
,
9846 odistance
->access_list
? odistance
->access_list
: "",
9852 /* OSPF configuration write function. */
9854 ospf_config_write (struct vty
*vty
)
9857 struct interface
*ifp
;
9858 struct ospf_interface
*oi
;
9859 struct listnode
*node
;
9862 ospf
= ospf_lookup ();
9863 if (ospf
!= NULL
&& ospf
->oi_running
)
9865 /* `router ospf' print. */
9867 vty_out (vty
, "router ospf %d%s", ospf
->instance
, VTY_NEWLINE
);
9869 vty_out (vty
, "router ospf%s", VTY_NEWLINE
);
9873 if (!ospf
->networks
)
9876 /* Router ID print. */
9877 if (ospf
->router_id_static
.s_addr
!= 0)
9878 vty_out (vty
, " ospf router-id %s%s",
9879 inet_ntoa (ospf
->router_id_static
), VTY_NEWLINE
);
9881 /* ABR type print. */
9882 if (ospf
->abr_type
!= OSPF_ABR_DEFAULT
)
9883 vty_out (vty
, " ospf abr-type %s%s",
9884 ospf_abr_type_str
[ospf
->abr_type
], VTY_NEWLINE
);
9886 /* log-adjacency-changes flag print. */
9887 if (CHECK_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_CHANGES
))
9889 if (CHECK_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_DETAIL
))
9890 vty_out(vty
, " log-adjacency-changes detail%s", VTY_NEWLINE
);
9894 vty_out(vty
, " no log-adjacency-changes%s", VTY_NEWLINE
);
9897 /* RFC1583 compatibility flag print -- Compatible with CISCO 12.1. */
9898 if (CHECK_FLAG (ospf
->config
, OSPF_RFC1583_COMPATIBLE
))
9899 vty_out (vty
, " compatible rfc1583%s", VTY_NEWLINE
);
9901 /* auto-cost reference-bandwidth configuration. */
9902 if (ospf
->ref_bandwidth
!= OSPF_DEFAULT_REF_BANDWIDTH
)
9904 vty_out (vty
, "! Important: ensure reference bandwidth "
9905 "is consistent across all routers%s", VTY_NEWLINE
);
9906 vty_out (vty
, " auto-cost reference-bandwidth %d%s",
9907 ospf
->ref_bandwidth
/ 1000, VTY_NEWLINE
);
9910 /* SPF timers print. */
9911 if (ospf
->spf_delay
!= OSPF_SPF_DELAY_DEFAULT
||
9912 ospf
->spf_holdtime
!= OSPF_SPF_HOLDTIME_DEFAULT
||
9913 ospf
->spf_max_holdtime
!= OSPF_SPF_MAX_HOLDTIME_DEFAULT
)
9914 vty_out (vty
, " timers throttle spf %d %d %d%s",
9915 ospf
->spf_delay
, ospf
->spf_holdtime
,
9916 ospf
->spf_max_holdtime
, VTY_NEWLINE
);
9918 /* LSA timers print. */
9919 if (ospf
->min_ls_interval
!= OSPF_MIN_LS_INTERVAL
)
9920 vty_out (vty
, " timers throttle lsa all %d%s",
9921 ospf
->min_ls_interval
, VTY_NEWLINE
);
9922 if (ospf
->min_ls_arrival
!= OSPF_MIN_LS_ARRIVAL
)
9923 vty_out (vty
, " timers lsa min-arrival %d%s",
9924 ospf
->min_ls_arrival
, VTY_NEWLINE
);
9926 /* Write multiplier print. */
9927 if (ospf
->write_oi_count
!= OSPF_WRITE_INTERFACE_COUNT_DEFAULT
)
9928 vty_out (vty
, " ospf write-multiplier %d%s",
9929 ospf
->write_oi_count
, VTY_NEWLINE
);
9931 /* Max-metric router-lsa print */
9932 config_write_stub_router (vty
, ospf
);
9934 /* SPF refresh parameters print. */
9935 if (ospf
->lsa_refresh_interval
!= OSPF_LSA_REFRESH_INTERVAL_DEFAULT
)
9936 vty_out (vty
, " refresh timer %d%s",
9937 ospf
->lsa_refresh_interval
, VTY_NEWLINE
);
9939 /* Redistribute information print. */
9940 config_write_ospf_redistribute (vty
, ospf
);
9942 /* passive-interface print. */
9943 if (ospf
->passive_interface_default
== OSPF_IF_PASSIVE
)
9944 vty_out (vty
, " passive-interface default%s", VTY_NEWLINE
);
9946 for (ALL_LIST_ELEMENTS_RO (om
->iflist
, node
, ifp
))
9947 if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp
), passive_interface
)
9948 && IF_DEF_PARAMS (ifp
)->passive_interface
!=
9949 ospf
->passive_interface_default
)
9951 vty_out (vty
, " %spassive-interface %s%s",
9952 IF_DEF_PARAMS (ifp
)->passive_interface
? "" : "no ",
9953 ifp
->name
, VTY_NEWLINE
);
9955 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
9957 if (!OSPF_IF_PARAM_CONFIGURED (oi
->params
, passive_interface
))
9959 if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (oi
->ifp
),
9962 if (oi
->params
->passive_interface
== IF_DEF_PARAMS (oi
->ifp
)->passive_interface
)
9965 else if (oi
->params
->passive_interface
== ospf
->passive_interface_default
)
9968 vty_out (vty
, " %spassive-interface %s %s%s",
9969 oi
->params
->passive_interface
? "" : "no ",
9971 inet_ntoa (oi
->address
->u
.prefix4
), VTY_NEWLINE
);
9974 /* Network area print. */
9975 config_write_network_area (vty
, ospf
);
9977 /* Area config print. */
9978 config_write_ospf_area (vty
, ospf
);
9980 /* static neighbor print. */
9981 config_write_ospf_nbr_nbma (vty
, ospf
);
9983 /* Virtual-Link print. */
9984 config_write_virtual_link (vty
, ospf
);
9986 /* Default metric configuration. */
9987 config_write_ospf_default_metric (vty
, ospf
);
9989 /* Distribute-list and default-information print. */
9990 config_write_ospf_distribute (vty
, ospf
);
9992 /* Distance configuration. */
9993 config_write_ospf_distance (vty
, ospf
);
9995 #ifdef HAVE_OPAQUE_LSA
9996 ospf_opaque_config_write_router (vty
, ospf
);
9997 #endif /* HAVE_OPAQUE_LSA */
10004 ospf_vty_show_init (void)
10006 /* "show ip ospf" commands. */
10007 install_element (VIEW_NODE
, &show_ip_ospf_cmd
);
10008 install_element (ENABLE_NODE
, &show_ip_ospf_cmd
);
10010 install_element (VIEW_NODE
, &show_ip_ospf_instance_cmd
);
10011 install_element (ENABLE_NODE
, &show_ip_ospf_instance_cmd
);
10013 /* "show ip ospf database" commands. */
10014 install_element (VIEW_NODE
, &show_ip_ospf_database_type_cmd
);
10015 install_element (VIEW_NODE
, &show_ip_ospf_database_type_id_cmd
);
10016 install_element (VIEW_NODE
, &show_ip_ospf_database_type_id_adv_router_cmd
);
10017 install_element (VIEW_NODE
, &show_ip_ospf_database_type_adv_router_cmd
);
10018 install_element (VIEW_NODE
, &show_ip_ospf_database_type_id_self_cmd
);
10019 install_element (VIEW_NODE
, &show_ip_ospf_database_type_self_cmd
);
10020 install_element (VIEW_NODE
, &show_ip_ospf_database_cmd
);
10021 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_cmd
);
10022 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_id_cmd
);
10023 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_id_adv_router_cmd
);
10024 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_adv_router_cmd
);
10025 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_id_self_cmd
);
10026 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_self_cmd
);
10027 install_element (ENABLE_NODE
, &show_ip_ospf_database_cmd
);
10029 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_cmd
);
10030 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_id_cmd
);
10031 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_id_adv_router_cmd
);
10032 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_adv_router_cmd
);
10033 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_id_self_cmd
);
10034 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_self_cmd
);
10035 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_cmd
);
10036 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_cmd
);
10037 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_id_cmd
);
10038 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_id_adv_router_cmd
);
10039 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_adv_router_cmd
);
10040 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_id_self_cmd
);
10041 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_self_cmd
);
10042 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_cmd
);
10044 /* "show ip ospf interface" commands. */
10045 install_element (VIEW_NODE
, &show_ip_ospf_interface_cmd
);
10046 install_element (ENABLE_NODE
, &show_ip_ospf_interface_cmd
);
10048 install_element (VIEW_NODE
, &show_ip_ospf_instance_interface_cmd
);
10049 install_element (ENABLE_NODE
, &show_ip_ospf_instance_interface_cmd
);
10051 /* "show ip ospf neighbor" commands. */
10052 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_int_detail_cmd
);
10053 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_int_cmd
);
10054 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_id_cmd
);
10055 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_detail_all_cmd
);
10056 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_detail_cmd
);
10057 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_cmd
);
10058 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_all_cmd
);
10059 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_int_detail_cmd
);
10060 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_int_cmd
);
10061 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_id_cmd
);
10062 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_detail_all_cmd
);
10063 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_detail_cmd
);
10064 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_cmd
);
10065 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_all_cmd
);
10067 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_int_detail_cmd
);
10068 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_int_cmd
);
10069 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_id_cmd
);
10070 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_detail_all_cmd
);
10071 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_detail_cmd
);
10072 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_cmd
);
10073 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_all_cmd
);
10074 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_int_detail_cmd
);
10075 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_int_cmd
);
10076 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_id_cmd
);
10077 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_detail_all_cmd
);
10078 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_detail_cmd
);
10079 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_cmd
);
10080 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_all_cmd
);
10082 /* "show ip ospf route" commands. */
10083 install_element (VIEW_NODE
, &show_ip_ospf_route_cmd
);
10084 install_element (ENABLE_NODE
, &show_ip_ospf_route_cmd
);
10085 install_element (VIEW_NODE
, &show_ip_ospf_border_routers_cmd
);
10086 install_element (ENABLE_NODE
, &show_ip_ospf_border_routers_cmd
);
10088 install_element (VIEW_NODE
, &show_ip_ospf_instance_route_cmd
);
10089 install_element (ENABLE_NODE
, &show_ip_ospf_instance_route_cmd
);
10090 install_element (VIEW_NODE
, &show_ip_ospf_instance_border_routers_cmd
);
10091 install_element (ENABLE_NODE
, &show_ip_ospf_instance_border_routers_cmd
);
10095 /* ospfd's interface node. */
10096 static struct cmd_node interface_node
=
10103 /* Initialization of OSPF interface. */
10105 ospf_vty_if_init (void)
10107 /* Install interface node. */
10108 install_node (&interface_node
, config_write_interface
);
10110 install_element (CONFIG_NODE
, &interface_cmd
);
10111 install_element (CONFIG_NODE
, &no_interface_cmd
);
10112 install_default (INTERFACE_NODE
);
10114 /* "description" commands. */
10115 install_element (INTERFACE_NODE
, &interface_desc_cmd
);
10116 install_element (INTERFACE_NODE
, &no_interface_desc_cmd
);
10118 /* "ip ospf authentication" commands. */
10119 install_element (INTERFACE_NODE
, &ip_ospf_authentication_args_addr_cmd
);
10120 install_element (INTERFACE_NODE
, &ip_ospf_authentication_args_cmd
);
10121 install_element (INTERFACE_NODE
, &ip_ospf_authentication_addr_cmd
);
10122 install_element (INTERFACE_NODE
, &ip_ospf_authentication_cmd
);
10123 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_args_addr_cmd
);
10124 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_args_cmd
);
10125 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_addr_cmd
);
10126 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_cmd
);
10127 install_element (INTERFACE_NODE
, &ip_ospf_authentication_key_addr_cmd
);
10128 install_element (INTERFACE_NODE
, &ip_ospf_authentication_key_cmd
);
10129 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_key_authkey_addr_cmd
);
10130 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_key_authkey_cmd
);
10131 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_key_cmd
);
10133 /* "ip ospf message-digest-key" commands. */
10134 install_element (INTERFACE_NODE
, &ip_ospf_message_digest_key_addr_cmd
);
10135 install_element (INTERFACE_NODE
, &ip_ospf_message_digest_key_cmd
);
10136 install_element (INTERFACE_NODE
, &no_ip_ospf_message_digest_key_addr_cmd
);
10137 install_element (INTERFACE_NODE
, &no_ip_ospf_message_digest_key_cmd
);
10138 install_element (INTERFACE_NODE
, &no_ip_ospf_message_digest_key_md5_addr_cmd
);
10139 install_element (INTERFACE_NODE
, &no_ip_ospf_message_digest_key_md5_cmd
);
10141 /* "ip ospf cost" commands. */
10142 install_element (INTERFACE_NODE
, &ip_ospf_cost_u32_inet4_cmd
);
10143 install_element (INTERFACE_NODE
, &ip_ospf_cost_u32_cmd
);
10144 install_element (INTERFACE_NODE
, &no_ip_ospf_cost_u32_cmd
);
10145 install_element (INTERFACE_NODE
, &no_ip_ospf_cost_u32_inet4_cmd
);
10146 install_element (INTERFACE_NODE
, &no_ip_ospf_cost_inet4_cmd
);
10147 install_element (INTERFACE_NODE
, &no_ip_ospf_cost_cmd
);
10149 /* "ip ospf mtu-ignore" commands. */
10150 install_element (INTERFACE_NODE
, &ip_ospf_mtu_ignore_addr_cmd
);
10151 install_element (INTERFACE_NODE
, &ip_ospf_mtu_ignore_cmd
);
10152 install_element (INTERFACE_NODE
, &no_ip_ospf_mtu_ignore_addr_cmd
);
10153 install_element (INTERFACE_NODE
, &no_ip_ospf_mtu_ignore_cmd
);
10155 /* "ip ospf dead-interval" commands. */
10156 install_element (INTERFACE_NODE
, &ip_ospf_dead_interval_addr_cmd
);
10157 install_element (INTERFACE_NODE
, &ip_ospf_dead_interval_cmd
);
10158 install_element (INTERFACE_NODE
, &ip_ospf_dead_interval_minimal_addr_cmd
);
10159 install_element (INTERFACE_NODE
, &ip_ospf_dead_interval_minimal_cmd
);
10160 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_addr_cmd
);
10161 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_cmd
);
10162 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_seconds_cmd
);
10164 /* "ip ospf hello-interval" commands. */
10165 install_element (INTERFACE_NODE
, &ip_ospf_hello_interval_addr_cmd
);
10166 install_element (INTERFACE_NODE
, &ip_ospf_hello_interval_cmd
);
10167 install_element (INTERFACE_NODE
, &no_ip_ospf_hello_interval_addr_cmd
);
10168 install_element (INTERFACE_NODE
, &no_ip_ospf_hello_interval_cmd
);
10169 install_element (INTERFACE_NODE
, &no_ip_ospf_hello_interval_seconds_cmd
);
10171 /* "ip ospf network" commands. */
10172 install_element (INTERFACE_NODE
, &ip_ospf_network_cmd
);
10173 install_element (INTERFACE_NODE
, &no_ip_ospf_network_cmd
);
10174 install_element (INTERFACE_NODE
, &no_ip_ospf_network_val_cmd
);
10176 /* "ip ospf priority" commands. */
10177 install_element (INTERFACE_NODE
, &ip_ospf_priority_addr_cmd
);
10178 install_element (INTERFACE_NODE
, &ip_ospf_priority_cmd
);
10179 install_element (INTERFACE_NODE
, &no_ip_ospf_priority_cmd
);
10180 install_element (INTERFACE_NODE
, &no_ip_ospf_priority_no_param_cmd
);
10181 install_element (INTERFACE_NODE
, &no_ip_ospf_priority_addr_cmd
);
10183 /* "ip ospf retransmit-interval" commands. */
10184 install_element (INTERFACE_NODE
, &ip_ospf_retransmit_interval_addr_cmd
);
10185 install_element (INTERFACE_NODE
, &ip_ospf_retransmit_interval_cmd
);
10186 install_element (INTERFACE_NODE
, &no_ip_ospf_retransmit_interval_addr_cmd
);
10187 install_element (INTERFACE_NODE
, &no_ip_ospf_retransmit_interval_cmd
);
10188 install_element (INTERFACE_NODE
, &no_ip_ospf_retransmit_interval_sec_addr_cmd
);
10189 install_element (INTERFACE_NODE
, &no_ip_ospf_retransmit_interval_sec_cmd
);
10191 /* "ip ospf transmit-delay" commands. */
10192 install_element (INTERFACE_NODE
, &ip_ospf_transmit_delay_addr_cmd
);
10193 install_element (INTERFACE_NODE
, &ip_ospf_transmit_delay_cmd
);
10194 install_element (INTERFACE_NODE
, &no_ip_ospf_transmit_delay_addr_cmd
);
10195 install_element (INTERFACE_NODE
, &no_ip_ospf_transmit_delay_cmd
);
10196 install_element (INTERFACE_NODE
, &no_ip_ospf_transmit_delay_sec_addr_cmd
);
10197 install_element (INTERFACE_NODE
, &no_ip_ospf_transmit_delay_sec_cmd
);
10199 /* "ip ospf area" commands. */
10200 install_element (INTERFACE_NODE
, &ip_ospf_area_cmd
);
10201 install_element (INTERFACE_NODE
, &no_ip_ospf_area_cmd
);
10202 install_element (INTERFACE_NODE
, &no_ip_ospf_area_val_cmd
);
10203 install_element (INTERFACE_NODE
, &ip_ospf_instance_area_cmd
);
10204 install_element (INTERFACE_NODE
, &no_ip_ospf_instance_area_cmd
);
10205 install_element (INTERFACE_NODE
, &no_ip_ospf_instance_area_val_cmd
);
10207 /* These commands are compatibitliy for previous version. */
10208 install_element (INTERFACE_NODE
, &ospf_authentication_key_cmd
);
10209 install_element (INTERFACE_NODE
, &no_ospf_authentication_key_cmd
);
10210 install_element (INTERFACE_NODE
, &no_ospf_authentication_key_authkey_cmd
);
10211 install_element (INTERFACE_NODE
, &no_ospf_authentication_key_authkey_ip_cmd
);
10212 install_element (INTERFACE_NODE
, &ospf_message_digest_key_cmd
);
10213 install_element (INTERFACE_NODE
, &no_ospf_message_digest_key_cmd
);
10214 install_element (INTERFACE_NODE
, &ospf_cost_u32_cmd
);
10215 install_element (INTERFACE_NODE
, &ospf_cost_u32_inet4_cmd
);
10216 install_element (INTERFACE_NODE
, &no_ospf_cost_cmd
);
10217 install_element (INTERFACE_NODE
, &no_ospf_cost_u32_cmd
);
10218 install_element (INTERFACE_NODE
, &no_ospf_cost_u32_inet4_cmd
);
10219 install_element (INTERFACE_NODE
, &no_ospf_cost_inet4_cmd
);
10220 install_element (INTERFACE_NODE
, &ospf_dead_interval_cmd
);
10221 install_element (INTERFACE_NODE
, &no_ospf_dead_interval_cmd
);
10222 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_minimal_addr_cmd
);
10223 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_minimal_cmd
);
10224 install_element (INTERFACE_NODE
, &ospf_hello_interval_cmd
);
10225 install_element (INTERFACE_NODE
, &no_ospf_hello_interval_cmd
);
10226 install_element (INTERFACE_NODE
, &ospf_network_cmd
);
10227 install_element (INTERFACE_NODE
, &no_ospf_network_cmd
);
10228 install_element (INTERFACE_NODE
, &no_ospf_network_val_cmd
);
10229 install_element (INTERFACE_NODE
, &ospf_priority_cmd
);
10230 install_element (INTERFACE_NODE
, &no_ospf_priority_cmd
);
10231 install_element (INTERFACE_NODE
, &ospf_retransmit_interval_cmd
);
10232 install_element (INTERFACE_NODE
, &no_ospf_retransmit_interval_cmd
);
10233 install_element (INTERFACE_NODE
, &ospf_transmit_delay_cmd
);
10234 install_element (INTERFACE_NODE
, &no_ospf_transmit_delay_cmd
);
10238 ospf_vty_zebra_init (void)
10240 install_element (OSPF_NODE
, &ospf_redistribute_source_cmd
);
10241 install_element (OSPF_NODE
, &no_ospf_redistribute_source_cmd
);
10242 install_element (OSPF_NODE
, &ospf_redistribute_instance_source_cmd
);
10243 install_element (OSPF_NODE
, &no_ospf_redistribute_instance_source_cmd
);
10245 install_element (OSPF_NODE
, &ospf_distribute_list_out_cmd
);
10246 install_element (OSPF_NODE
, &no_ospf_distribute_list_out_cmd
);
10248 install_element (OSPF_NODE
, &ospf_default_information_originate_cmd
);
10249 install_element (OSPF_NODE
, &no_ospf_default_information_originate_cmd
);
10251 install_element (OSPF_NODE
, &ospf_default_metric_cmd
);
10252 install_element (OSPF_NODE
, &no_ospf_default_metric_cmd
);
10253 install_element (OSPF_NODE
, &no_ospf_default_metric_val_cmd
);
10255 install_element (OSPF_NODE
, &ospf_distance_cmd
);
10256 install_element (OSPF_NODE
, &no_ospf_distance_cmd
);
10257 install_element (OSPF_NODE
, &no_ospf_distance_ospf_cmd
);
10258 install_element (OSPF_NODE
, &ospf_distance_ospf_cmd
);
10260 install_element (OSPF_NODE
, &ospf_distance_source_cmd
);
10261 install_element (OSPF_NODE
, &no_ospf_distance_source_cmd
);
10262 install_element (OSPF_NODE
, &ospf_distance_source_access_list_cmd
);
10263 install_element (OSPF_NODE
, &no_ospf_distance_source_access_list_cmd
);
10267 static struct cmd_node ospf_node
=
10270 "%s(config-router)# ",
10275 ospf_interface_clear (struct interface
*ifp
)
10277 if (!if_is_operative (ifp
)) return;
10279 if (IS_DEBUG_OSPF (ism
, ISM_EVENTS
))
10280 zlog (NULL
, LOG_DEBUG
, "ISM[%s]: clear by reset", ifp
->name
);
10282 ospf_if_reset(ifp
);
10285 DEFUN (clear_ip_ospf_interface
,
10286 clear_ip_ospf_interface_cmd
,
10287 "clear ip ospf interface [IFNAME]",
10290 "OSPF information\n"
10291 "Interface information\n"
10292 "Interface name\n")
10294 struct interface
*ifp
;
10295 struct listnode
*node
;
10297 if (argc
== 0) /* Clear all the ospfv2 interfaces. */
10299 for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT
), node
, ifp
))
10300 ospf_interface_clear(ifp
);
10302 else /* Interface name is specified. */
10304 if ((ifp
= if_lookup_by_name (argv
[0])) == NULL
)
10305 vty_out (vty
, "No such interface name%s", VTY_NEWLINE
);
10307 ospf_interface_clear(ifp
);
10310 return CMD_SUCCESS
;
10314 ospf_vty_clear_init (void)
10316 install_element (ENABLE_NODE
, &clear_ip_ospf_interface_cmd
);
10320 /* Install OSPF related vty commands. */
10322 ospf_vty_init (void)
10324 /* Install ospf top node. */
10325 install_node (&ospf_node
, ospf_config_write
);
10327 /* "router ospf" commands. */
10328 install_element (CONFIG_NODE
, &router_ospf_cmd
);
10329 install_element (CONFIG_NODE
, &no_router_ospf_cmd
);
10331 install_element (CONFIG_NODE
, &router_ospf_instance_cmd
);
10332 install_element (CONFIG_NODE
, &no_router_ospf_instance_cmd
);
10334 install_default (OSPF_NODE
);
10336 /* "ospf router-id" commands. */
10337 install_element (OSPF_NODE
, &ospf_router_id_cmd
);
10338 install_element (OSPF_NODE
, &ospf_router_id_old_cmd
);
10339 install_element (OSPF_NODE
, &no_ospf_router_id_cmd
);
10340 install_element (OSPF_NODE
, &no_ospf_router_id_val_cmd
);
10342 /* "passive-interface" commands. */
10343 install_element (OSPF_NODE
, &ospf_passive_interface_addr_cmd
);
10344 install_element (OSPF_NODE
, &ospf_passive_interface_cmd
);
10345 install_element (OSPF_NODE
, &ospf_passive_interface_default_cmd
);
10346 install_element (OSPF_NODE
, &no_ospf_passive_interface_addr_cmd
);
10347 install_element (OSPF_NODE
, &no_ospf_passive_interface_cmd
);
10348 install_element (OSPF_NODE
, &no_ospf_passive_interface_default_cmd
);
10350 /* "ospf abr-type" commands. */
10351 install_element (OSPF_NODE
, &ospf_abr_type_cmd
);
10352 install_element (OSPF_NODE
, &no_ospf_abr_type_cmd
);
10354 /* "ospf log-adjacency-changes" commands. */
10355 install_element (OSPF_NODE
, &ospf_log_adjacency_changes_cmd
);
10356 install_element (OSPF_NODE
, &ospf_log_adjacency_changes_detail_cmd
);
10357 install_element (OSPF_NODE
, &no_ospf_log_adjacency_changes_cmd
);
10358 install_element (OSPF_NODE
, &no_ospf_log_adjacency_changes_detail_cmd
);
10360 /* "ospf rfc1583-compatible" commands. */
10361 install_element (OSPF_NODE
, &ospf_rfc1583_flag_cmd
);
10362 install_element (OSPF_NODE
, &no_ospf_rfc1583_flag_cmd
);
10363 install_element (OSPF_NODE
, &ospf_compatible_rfc1583_cmd
);
10364 install_element (OSPF_NODE
, &no_ospf_compatible_rfc1583_cmd
);
10366 /* "network area" commands. */
10367 install_element (OSPF_NODE
, &ospf_network_area_cmd
);
10368 install_element (OSPF_NODE
, &no_ospf_network_area_cmd
);
10370 /* "area authentication" commands. */
10371 install_element (OSPF_NODE
, &ospf_area_authentication_message_digest_cmd
);
10372 install_element (OSPF_NODE
, &ospf_area_authentication_cmd
);
10373 install_element (OSPF_NODE
, &no_ospf_area_authentication_cmd
);
10375 /* "area range" commands. */
10376 install_element (OSPF_NODE
, &ospf_area_range_cmd
);
10377 install_element (OSPF_NODE
, &ospf_area_range_advertise_cmd
);
10378 install_element (OSPF_NODE
, &ospf_area_range_cost_cmd
);
10379 install_element (OSPF_NODE
, &ospf_area_range_advertise_cost_cmd
);
10380 install_element (OSPF_NODE
, &ospf_area_range_not_advertise_cmd
);
10381 install_element (OSPF_NODE
, &no_ospf_area_range_cmd
);
10382 install_element (OSPF_NODE
, &no_ospf_area_range_advertise_cmd
);
10383 install_element (OSPF_NODE
, &no_ospf_area_range_cost_cmd
);
10384 install_element (OSPF_NODE
, &no_ospf_area_range_advertise_cost_cmd
);
10385 install_element (OSPF_NODE
, &ospf_area_range_substitute_cmd
);
10386 install_element (OSPF_NODE
, &no_ospf_area_range_substitute_cmd
);
10388 /* "area virtual-link" commands. */
10389 install_element (OSPF_NODE
, &ospf_area_vlink_cmd
);
10390 install_element (OSPF_NODE
, &no_ospf_area_vlink_cmd
);
10392 install_element (OSPF_NODE
, &ospf_area_vlink_param1_cmd
);
10393 install_element (OSPF_NODE
, &no_ospf_area_vlink_param1_cmd
);
10395 install_element (OSPF_NODE
, &ospf_area_vlink_param2_cmd
);
10396 install_element (OSPF_NODE
, &no_ospf_area_vlink_param2_cmd
);
10398 install_element (OSPF_NODE
, &ospf_area_vlink_param3_cmd
);
10399 install_element (OSPF_NODE
, &no_ospf_area_vlink_param3_cmd
);
10401 install_element (OSPF_NODE
, &ospf_area_vlink_param4_cmd
);
10402 install_element (OSPF_NODE
, &no_ospf_area_vlink_param4_cmd
);
10404 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_args_cmd
);
10405 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_args_cmd
);
10406 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_cmd
);
10407 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_cmd
);
10409 install_element (OSPF_NODE
, &ospf_area_vlink_md5_cmd
);
10410 install_element (OSPF_NODE
, &no_ospf_area_vlink_md5_cmd
);
10412 install_element (OSPF_NODE
, &ospf_area_vlink_authkey_cmd
);
10413 install_element (OSPF_NODE
, &no_ospf_area_vlink_authkey_cmd
);
10415 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_args_authkey_cmd
);
10416 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_args_authkey_cmd
);
10417 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_authkey_cmd
);
10418 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_authkey_cmd
);
10420 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_args_md5_cmd
);
10421 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_args_md5_cmd
);
10422 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_md5_cmd
);
10423 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_md5_cmd
);
10425 /* "area stub" commands. */
10426 install_element (OSPF_NODE
, &ospf_area_stub_no_summary_cmd
);
10427 install_element (OSPF_NODE
, &ospf_area_stub_cmd
);
10428 install_element (OSPF_NODE
, &no_ospf_area_stub_no_summary_cmd
);
10429 install_element (OSPF_NODE
, &no_ospf_area_stub_cmd
);
10431 /* "area nssa" commands. */
10432 install_element (OSPF_NODE
, &ospf_area_nssa_cmd
);
10433 install_element (OSPF_NODE
, &ospf_area_nssa_translate_no_summary_cmd
);
10434 install_element (OSPF_NODE
, &ospf_area_nssa_translate_cmd
);
10435 install_element (OSPF_NODE
, &ospf_area_nssa_no_summary_cmd
);
10436 install_element (OSPF_NODE
, &no_ospf_area_nssa_cmd
);
10437 install_element (OSPF_NODE
, &no_ospf_area_nssa_no_summary_cmd
);
10439 install_element (OSPF_NODE
, &ospf_area_default_cost_cmd
);
10440 install_element (OSPF_NODE
, &no_ospf_area_default_cost_cmd
);
10442 install_element (OSPF_NODE
, &ospf_area_shortcut_cmd
);
10443 install_element (OSPF_NODE
, &no_ospf_area_shortcut_cmd
);
10445 install_element (OSPF_NODE
, &ospf_area_export_list_cmd
);
10446 install_element (OSPF_NODE
, &no_ospf_area_export_list_cmd
);
10448 install_element (OSPF_NODE
, &ospf_area_filter_list_cmd
);
10449 install_element (OSPF_NODE
, &no_ospf_area_filter_list_cmd
);
10451 install_element (OSPF_NODE
, &ospf_area_import_list_cmd
);
10452 install_element (OSPF_NODE
, &no_ospf_area_import_list_cmd
);
10454 /* SPF timer commands */
10455 install_element (OSPF_NODE
, &ospf_timers_throttle_spf_cmd
);
10456 install_element (OSPF_NODE
, &no_ospf_timers_throttle_spf_cmd
);
10457 install_element (OSPF_NODE
, &no_ospf_timers_throttle_spf_val_cmd
);
10459 /* LSA timers commands */
10460 install_element (OSPF_NODE
, &ospf_timers_min_ls_interval_cmd
);
10461 install_element (OSPF_NODE
, &no_ospf_timers_min_ls_interval_cmd
);
10462 install_element (OSPF_NODE
, &no_ospf_timers_min_ls_interval_val_cmd
);
10463 install_element (OSPF_NODE
, &ospf_timers_min_ls_arrival_cmd
);
10464 install_element (OSPF_NODE
, &no_ospf_timers_min_ls_arrival_cmd
);
10465 install_element (OSPF_NODE
, &no_ospf_timers_min_ls_arrival_val_cmd
);
10466 install_element (OSPF_NODE
, &ospf_timers_lsa_cmd
);
10467 install_element (OSPF_NODE
, &no_ospf_timers_lsa_cmd
);
10468 install_element (OSPF_NODE
, &no_ospf_timers_lsa_val_cmd
);
10470 /* refresh timer commands */
10471 install_element (OSPF_NODE
, &ospf_refresh_timer_cmd
);
10472 install_element (OSPF_NODE
, &no_ospf_refresh_timer_val_cmd
);
10473 install_element (OSPF_NODE
, &no_ospf_refresh_timer_cmd
);
10475 /* max-metric commands */
10476 install_element (OSPF_NODE
, &ospf_max_metric_router_lsa_admin_cmd
);
10477 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_admin_cmd
);
10478 install_element (OSPF_NODE
, &ospf_max_metric_router_lsa_startup_cmd
);
10479 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_startup_cmd
);
10480 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_startup_no_param_cmd
);
10481 install_element (OSPF_NODE
, &ospf_max_metric_router_lsa_shutdown_cmd
);
10482 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_shutdown_cmd
);
10483 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_shutdown_no_param_cmd
);
10485 /* reference bandwidth commands */
10486 install_element (OSPF_NODE
, &ospf_auto_cost_reference_bandwidth_cmd
);
10487 install_element (OSPF_NODE
, &no_ospf_auto_cost_reference_bandwidth_cmd
);
10488 install_element (OSPF_NODE
, &no_ospf_auto_cost_reference_bandwidth_val_cmd
);
10490 /* "neighbor" commands. */
10491 install_element (OSPF_NODE
, &ospf_neighbor_cmd
);
10492 install_element (OSPF_NODE
, &ospf_neighbor_priority_poll_interval_cmd
);
10493 install_element (OSPF_NODE
, &ospf_neighbor_priority_cmd
);
10494 install_element (OSPF_NODE
, &ospf_neighbor_poll_interval_cmd
);
10495 install_element (OSPF_NODE
, &ospf_neighbor_poll_interval_priority_cmd
);
10496 install_element (OSPF_NODE
, &no_ospf_neighbor_cmd
);
10497 install_element (OSPF_NODE
, &no_ospf_neighbor_priority_cmd
);
10498 install_element (OSPF_NODE
, &no_ospf_neighbor_poll_interval_cmd
);
10499 install_element (OSPF_NODE
, &no_ospf_neighbor_poll_interval_priority_cmd
);
10500 install_element (OSPF_NODE
, &no_ospf_neighbor_priority_pollinterval_cmd
);
10502 /* write multiplier commands */
10503 install_element (OSPF_NODE
, &ospf_write_multiplier_cmd
);
10504 install_element (OSPF_NODE
, &no_ospf_write_multiplier_cmd
);
10505 install_element (OSPF_NODE
, &write_multiplier_cmd
);
10506 install_element (OSPF_NODE
, &no_write_multiplier_cmd
);
10507 install_element (OSPF_NODE
, &no_write_multiplier_val_cmd
);
10509 /* Init interface related vty commands. */
10510 ospf_vty_if_init ();
10512 /* Init zebra related vty commands. */
10513 ospf_vty_zebra_init ();