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");
3379 vty_out (vty
, " OpaqueCapability flag is %s%s",
3380 CHECK_FLAG (ospf
->config
, OSPF_OPAQUE_CAPABLE
) ? "enabled" : "disabled",
3383 #endif /* HAVE_OPAQUE_LSA */
3385 /* Show stub-router configuration */
3386 if (ospf
->stub_router_startup_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
3387 || ospf
->stub_router_shutdown_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3391 json_object_boolean_true_add(json
, "stubAdvertisement");
3392 if (ospf
->stub_router_startup_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3393 json_object_int_add(json
,"postStartEnabledMsecs", ospf
->stub_router_startup_time
/ 1000);
3394 if (ospf
->stub_router_shutdown_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3395 json_object_int_add(json
,"preShutdownEnabledMsecs", ospf
->stub_router_shutdown_time
/ 1000);
3399 vty_out (vty
, " Stub router advertisement is configured%s",
3401 if (ospf
->stub_router_startup_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3402 vty_out (vty
, " Enabled for %us after start-up%s",
3403 ospf
->stub_router_startup_time
, VTY_NEWLINE
);
3404 if (ospf
->stub_router_shutdown_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
3405 vty_out (vty
, " Enabled for %us prior to full shutdown%s",
3406 ospf
->stub_router_shutdown_time
, VTY_NEWLINE
);
3410 /* Show SPF timers. */
3413 json_object_int_add(json
, "spfScheduleDelayMsecs", ospf
->spf_delay
);
3414 json_object_int_add(json
, "holdtimeMinMsecs", ospf
->spf_holdtime
);
3415 json_object_int_add(json
, "holdtimeMaxMsecs", ospf
->spf_max_holdtime
);
3416 json_object_int_add(json
, "holdtimeMultplier", ospf
->spf_hold_multiplier
);
3420 vty_out (vty
, " Initial SPF scheduling delay %d millisec(s)%s"
3421 " Minimum hold time between consecutive SPFs %d millisec(s)%s"
3422 " Maximum hold time between consecutive SPFs %d millisec(s)%s"
3423 " Hold time multiplier is currently %d%s",
3424 ospf
->spf_delay
, VTY_NEWLINE
,
3425 ospf
->spf_holdtime
, VTY_NEWLINE
,
3426 ospf
->spf_max_holdtime
, VTY_NEWLINE
,
3427 ospf
->spf_hold_multiplier
, VTY_NEWLINE
);
3432 if (ospf
->ts_spf
.tv_sec
|| ospf
->ts_spf
.tv_usec
)
3434 unsigned long time_store
= 0;
3436 result
= tv_sub (recent_relative_time(), ospf
->ts_spf
);
3437 result
= tv_sub (result
, recent_relative_time());
3438 time_store
= (1000 * result
.tv_sec
) + (result
.tv_usec
/ 1000);
3439 json_object_int_add(json
, "spfLastExecutedMsecs", time_store
);
3441 time_store
= (1000 * ospf
->ts_spf_duration
.tv_sec
) + (ospf
->ts_spf_duration
.tv_usec
/ 1000);
3442 json_object_int_add(json
, "spfLastDurationMsecs", time_store
);
3445 json_object_boolean_true_add(json
, "spfHasNotRun");
3449 vty_out (vty
, " SPF algorithm ");
3450 if (ospf
->ts_spf
.tv_sec
|| ospf
->ts_spf
.tv_usec
)
3452 result
= tv_sub (recent_relative_time(), ospf
->ts_spf
);
3453 vty_out (vty
, "last executed %s ago%s",
3454 ospf_timeval_dump (&result
, timebuf
, sizeof (timebuf
)),
3456 vty_out (vty
, " Last SPF duration %s%s",
3457 ospf_timeval_dump (&ospf
->ts_spf_duration
, timebuf
, sizeof (timebuf
)),
3461 vty_out (vty
, "has not been run%s", VTY_NEWLINE
);
3466 struct timeval temp_time
;
3467 unsigned long time_store
= 0;
3469 if (ospf
->t_spf_calc
)
3471 temp_time
= tv_sub (ospf
->t_spf_calc
->u
.sands
, recent_relative_time());
3472 time_store
= (1000 * temp_time
.tv_sec
) + (temp_time
.tv_usec
/ 1000);
3473 json_object_int_add(json
, "spfTimerDueInMsecs", time_store
);
3476 json_object_int_add(json
, "lsaMinIntervalMsecs", ospf
->min_ls_interval
);
3477 json_object_int_add(json
, "lsaMinArrivalMsecs", ospf
->min_ls_arrival
);
3478 /* Show write multiplier values */
3479 json_object_int_add(json
, "writeMultiplier", ospf
->write_oi_count
);
3480 /* Show refresh parameters. */
3481 json_object_int_add(json
, "refreshTimerMsecs", ospf
->lsa_refresh_interval
* 1000);
3485 vty_out (vty
, " SPF timer %s%s%s",
3486 (ospf
->t_spf_calc
? "due in " : "is "),
3487 ospf_timer_dump (ospf
->t_spf_calc
, timebuf
, sizeof (timebuf
)),
3490 vty_out (vty
, " LSA minimum interval %d msecs%s",
3491 ospf
->min_ls_interval
, VTY_NEWLINE
);
3492 vty_out (vty
, " LSA minimum arrival %d msecs%s",
3493 ospf
->min_ls_arrival
, VTY_NEWLINE
);
3495 /* Show write multiplier values */
3496 vty_out (vty
, " Write Multiplier set to %d %s",
3497 ospf
->write_oi_count
, VTY_NEWLINE
);
3499 /* Show refresh parameters. */
3500 vty_out (vty
, " Refresh timer %d secs%s",
3501 ospf
->lsa_refresh_interval
, VTY_NEWLINE
);
3504 /* Show ABR/ASBR flags. */
3505 if (CHECK_FLAG (ospf
->flags
, OSPF_FLAG_ABR
))
3508 json_object_string_add(json
, "abrType", ospf_abr_type_descr_str
[ospf
->abr_type
]);
3510 vty_out (vty
, " This router is an ABR, ABR type is: %s%s",
3511 ospf_abr_type_descr_str
[ospf
->abr_type
], VTY_NEWLINE
);
3513 if (CHECK_FLAG (ospf
->flags
, OSPF_FLAG_ASBR
))
3516 json_object_string_add(json
, "asbrRouter", "injectingExternalRoutingInformation");
3518 vty_out (vty
, " This router is an ASBR "
3519 "(injecting external routing information)%s", VTY_NEWLINE
);
3522 /* Show Number of AS-external-LSAs. */
3525 json_object_int_add(json
, "lsaExternalCounter",
3526 ospf_lsdb_count (ospf
->lsdb
, OSPF_AS_EXTERNAL_LSA
));
3527 json_object_int_add(json
, "lsaExternalChecksum",
3528 ospf_lsdb_checksum (ospf
->lsdb
, OSPF_AS_EXTERNAL_LSA
));
3532 vty_out (vty
, " Number of external LSA %ld. Checksum Sum 0x%08x%s",
3533 ospf_lsdb_count (ospf
->lsdb
, OSPF_AS_EXTERNAL_LSA
),
3534 ospf_lsdb_checksum (ospf
->lsdb
, OSPF_AS_EXTERNAL_LSA
), VTY_NEWLINE
);
3537 #ifdef HAVE_OPAQUE_LSA
3540 json_object_int_add(json
, "lsaAsopaqueCounter",
3541 ospf_lsdb_count (ospf
->lsdb
, OSPF_OPAQUE_AS_LSA
));
3542 json_object_int_add(json
, "lsaAsOpaqueChecksum",
3543 ospf_lsdb_checksum (ospf
->lsdb
, OSPF_OPAQUE_AS_LSA
));
3547 vty_out (vty
, " Number of opaque AS LSA %ld. Checksum Sum 0x%08x%s",
3548 ospf_lsdb_count (ospf
->lsdb
, OSPF_OPAQUE_AS_LSA
),
3549 ospf_lsdb_checksum (ospf
->lsdb
, OSPF_OPAQUE_AS_LSA
), VTY_NEWLINE
);
3551 #endif /* HAVE_OPAQUE_LSA */
3553 /* Show number of areas attached. */
3555 json_object_int_add(json
, "attachedAreaCounter", listcount (ospf
->areas
));
3557 vty_out (vty
, " Number of areas attached to this router: %d%s",
3558 listcount (ospf
->areas
), VTY_NEWLINE
);
3560 if (CHECK_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_CHANGES
))
3562 if (CHECK_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_DETAIL
))
3565 json_object_boolean_true_add(json
, "adjacencyChangesLoggedAll");
3567 vty_out(vty
, " All adjacency changes are logged%s",VTY_NEWLINE
);
3572 json_object_boolean_true_add(json
, "adjacencyChangesLogged");
3574 vty_out(vty
, " Adjacency changes are logged%s",VTY_NEWLINE
);
3577 /* Show each area status. */
3578 for (ALL_LIST_ELEMENTS (ospf
->areas
, node
, nnode
, area
))
3579 show_ip_ospf_area (vty
, area
, json_areas
, use_json
);
3583 json_object_object_add(json
, "areas", json_areas
);
3584 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
3585 json_object_free(json
);
3588 vty_out (vty
, "%s",VTY_NEWLINE
);
3593 DEFUN (show_ip_ospf
,
3595 "show ip ospf {json}",
3598 "OSPF information\n"
3599 "JavaScript Object Notation\n")
3602 u_char uj
= use_json(argc
, argv
);
3604 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
3607 return (show_ip_ospf_common(vty
, ospf
, uj
));
3610 DEFUN (show_ip_ospf_instance
,
3611 show_ip_ospf_instance_cmd
,
3612 "show ip ospf <1-65535> {json}",
3615 "OSPF information\n"
3617 "JavaScript Object Notation\n")
3620 u_short instance
= 0;
3621 u_char uj
= use_json(argc
, argv
);
3623 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
3624 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
3627 return (show_ip_ospf_common(vty
, ospf
, uj
));
3631 show_ip_ospf_interface_sub (struct vty
*vty
, struct ospf
*ospf
, struct interface
*ifp
,
3632 json_object
*json_interface_sub
, u_char use_json
)
3635 struct ospf_neighbor
*nbr
;
3636 struct route_node
*rn
;
3638 /* Is interface up? */
3641 is_up
= if_is_operative(ifp
);
3643 json_object_boolean_true_add(json_interface_sub
, "ifUp");
3645 json_object_boolean_false_add(json_interface_sub
, "ifDown");
3647 json_object_int_add(json_interface_sub
, "ifIndex", ifp
->ifindex
);
3648 json_object_int_add(json_interface_sub
, "mtuBytes", ifp
->mtu
);
3649 json_object_int_add(json_interface_sub
, "bandwidthKbit", ifp
->bandwidth
);
3650 json_object_string_add(json_interface_sub
, "ifFlags", if_flag_dump(ifp
->flags
));
3654 vty_out (vty
, "%s is %s%s", ifp
->name
,
3655 ((is_up
= if_is_operative(ifp
)) ? "up" : "down"), VTY_NEWLINE
);
3656 vty_out (vty
, " ifindex %u, MTU %u bytes, BW %u Kbit %s%s",
3657 ifp
->ifindex
, ifp
->mtu
, ifp
->bandwidth
, if_flag_dump(ifp
->flags
),
3661 /* Is interface OSPF enabled? */
3664 if (ospf_oi_count(ifp
) == 0)
3666 json_object_boolean_false_add(json_interface_sub
, "ospfEnabled");
3671 json_object_boolean_false_add(json_interface_sub
, "ospfRunning");
3675 json_object_boolean_true_add(json_interface_sub
, "ospfEnabled");
3679 if (ospf_oi_count(ifp
) == 0)
3681 vty_out (vty
, " OSPF not enabled on this interface%s", VTY_NEWLINE
);
3686 vty_out (vty
, " OSPF is enabled, but not running on this interface%s",
3692 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
3694 struct ospf_interface
*oi
= rn
->info
;
3699 if (CHECK_FLAG(oi
->connected
->flags
, ZEBRA_IFA_UNNUMBERED
))
3702 json_object_boolean_true_add(json_interface_sub
, "ifUnnumbered");
3704 vty_out (vty
, " This interface is UNNUMBERED,");
3708 /* Show OSPF interface information. */
3711 json_object_string_add(json_interface_sub
, "ipAddress", inet_ntoa (oi
->address
->u
.prefix4
));
3712 json_object_int_add(json_interface_sub
, "ipAddressPrefixlen", oi
->address
->prefixlen
);
3715 vty_out (vty
, " Internet Address %s/%d,",
3716 inet_ntoa (oi
->address
->u
.prefix4
), oi
->address
->prefixlen
);
3718 if (oi
->connected
->destination
|| oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
3720 struct in_addr
*dest
;
3723 if (CONNECTED_PEER(oi
->connected
)
3724 || oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
3729 /* For Vlinks, showing the peer address is probably more
3730 * * * * * informative than the local interface that is being used
3732 if (oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
3733 dest
= &oi
->vl_data
->peer_addr
;
3735 dest
= &oi
->connected
->destination
->u
.prefix4
;
3739 json_object_string_add(json_interface_sub
, "ospfIfType", dstr
);
3740 if (oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
3741 json_object_string_add(json_interface_sub
, "vlinkPeer", inet_ntoa (*dest
));
3743 json_object_string_add(json_interface_sub
, "localIfUsed", inet_ntoa (*dest
));
3746 vty_out (vty
, " %s %s,", dstr
, inet_ntoa (*dest
));
3751 json_object_string_add(json_interface_sub
, "area", ospf_area_desc_string (oi
->area
));
3752 if (OSPF_IF_PARAM(oi
, mtu_ignore
))
3753 json_object_boolean_true_add(json_interface_sub
, "mtuMismatchDetect");
3754 json_object_string_add(json_interface_sub
, "routerId", inet_ntoa (ospf
->router_id
));
3755 json_object_string_add(json_interface_sub
, "networkType", ospf_network_type_str
[oi
->type
]);
3756 json_object_int_add(json_interface_sub
, "cost", oi
->output_cost
);
3757 json_object_int_add(json_interface_sub
, "transmitDelayMsecs", 1000 / OSPF_IF_PARAM (oi
,transmit_delay
));
3758 json_object_string_add(json_interface_sub
, "state", LOOKUP (ospf_ism_state_msg
, oi
->state
));
3759 json_object_int_add(json_interface_sub
, "priority", PRIORITY (oi
));
3763 vty_out (vty
, " Area %s%s", ospf_area_desc_string (oi
->area
),
3766 vty_out (vty
, " MTU mismatch detection:%s%s",
3767 OSPF_IF_PARAM(oi
, mtu_ignore
) ? "disabled" : "enabled", VTY_NEWLINE
);
3769 vty_out (vty
, " Router ID %s, Network Type %s, Cost: %d%s",
3770 inet_ntoa (ospf
->router_id
), ospf_network_type_str
[oi
->type
],
3771 oi
->output_cost
, VTY_NEWLINE
);
3773 vty_out (vty
, " Transmit Delay is %d sec, State %s, Priority %d%s",
3774 OSPF_IF_PARAM (oi
,transmit_delay
), LOOKUP (ospf_ism_state_msg
, oi
->state
),
3775 PRIORITY (oi
), VTY_NEWLINE
);
3778 /* Show DR information. */
3779 if (DR (oi
).s_addr
== 0)
3782 vty_out (vty
, " No backup designated router on this network%s",
3787 nbr
= ospf_nbr_lookup_by_addr (oi
->nbrs
, &BDR (oi
));
3791 vty_out (vty
, " No backup designated router on this network%s",
3798 json_object_string_add(json_interface_sub
, "bdrId", inet_ntoa (nbr
->router_id
));
3799 json_object_string_add(json_interface_sub
, "bdrAddress", inet_ntoa (nbr
->address
.u
.prefix4
));
3803 vty_out (vty
, " Backup Designated Router (ID) %s,",
3804 inet_ntoa (nbr
->router_id
));
3805 vty_out (vty
, " Interface Address %s%s",
3806 inet_ntoa (nbr
->address
.u
.prefix4
), VTY_NEWLINE
);
3811 /* Next network-LSA sequence number we'll use, if we're elected DR */
3812 if (oi
->params
&& ntohl (oi
->params
->network_lsa_seqnum
) != OSPF_INITIAL_SEQUENCE_NUMBER
)
3815 json_object_int_add(json_interface_sub
, "networkLsaSequence", ntohl (oi
->params
->network_lsa_seqnum
));
3817 vty_out (vty
, " Saved Network-LSA sequence number 0x%x%s",
3818 ntohl (oi
->params
->network_lsa_seqnum
), VTY_NEWLINE
);
3823 if (OI_MEMBER_CHECK(oi
, MEMBER_ALLROUTERS
)
3824 || OI_MEMBER_CHECK(oi
, MEMBER_DROUTERS
))
3826 if (OI_MEMBER_CHECK(oi
, MEMBER_ALLROUTERS
))
3827 json_object_boolean_true_add(json_interface_sub
, "mcastMemberOspfAllRouters");
3828 if (OI_MEMBER_CHECK(oi
, MEMBER_DROUTERS
))
3829 json_object_boolean_true_add(json_interface_sub
, "mcastMemberOspfDesignatedRouters");
3834 vty_out (vty
, " Multicast group memberships:");
3835 if (OI_MEMBER_CHECK(oi
, MEMBER_ALLROUTERS
)
3836 || OI_MEMBER_CHECK(oi
, MEMBER_DROUTERS
))
3838 if (OI_MEMBER_CHECK(oi
, MEMBER_ALLROUTERS
))
3839 vty_out (vty
, " OSPFAllRouters");
3840 if (OI_MEMBER_CHECK(oi
, MEMBER_DROUTERS
))
3841 vty_out (vty
, " OSPFDesignatedRouters");
3844 vty_out (vty
, " <None>");
3845 vty_out (vty
, "%s", VTY_NEWLINE
);
3850 if (OSPF_IF_PARAM (oi
, fast_hello
) == 0)
3851 json_object_int_add(json_interface_sub
, "timerMsecs", 1000 /OSPF_IF_PARAM (oi
, v_hello
));
3853 json_object_int_add(json_interface_sub
, "timerMsecs", 1000 / OSPF_IF_PARAM (oi
, fast_hello
));
3854 json_object_int_add(json_interface_sub
, "timerDeadMsecs", 1000 / OSPF_IF_PARAM (oi
, v_wait
));
3855 json_object_int_add(json_interface_sub
, "timerWaitMsecs", 1000 / OSPF_IF_PARAM (oi
, v_wait
));
3856 json_object_int_add(json_interface_sub
, "timerRetransmit", 1000 / OSPF_IF_PARAM (oi
, retransmit_interval
));
3860 vty_out (vty
, " Timer intervals configured,");
3861 vty_out (vty
, " Hello ");
3862 if (OSPF_IF_PARAM (oi
, fast_hello
) == 0)
3863 vty_out (vty
, "%ds,", OSPF_IF_PARAM (oi
, v_hello
));
3865 vty_out (vty
, "%dms,", 1000 / OSPF_IF_PARAM (oi
, fast_hello
));
3866 vty_out (vty
, " Dead %ds, Wait %ds, Retransmit %d%s",
3867 OSPF_IF_PARAM (oi
, v_wait
),
3868 OSPF_IF_PARAM (oi
, v_wait
),
3869 OSPF_IF_PARAM (oi
, retransmit_interval
),
3873 if (OSPF_IF_PASSIVE_STATUS (oi
) == OSPF_IF_ACTIVE
)
3875 char timebuf
[OSPF_TIME_DUMP_SIZE
];
3878 struct timeval result
;
3879 unsigned long time_store
= 0;
3880 result
= tv_sub (oi
->t_hello
->u
.sands
, recent_relative_time());
3881 time_store
= (1000 * result
.tv_sec
) + (result
.tv_usec
/ 1000);
3882 json_object_int_add(json_interface_sub
, "timerHelloInMsecs", time_store
);
3885 vty_out (vty
, " Hello due in %s%s",
3886 ospf_timer_dump (oi
->t_hello
, timebuf
, sizeof(timebuf
)),
3889 else /* passive-interface is set */
3892 json_object_boolean_true_add(json_interface_sub
, "timerPassiveIface");
3894 vty_out (vty
, " No Hellos (Passive interface)%s", VTY_NEWLINE
);
3899 json_object_int_add(json_interface_sub
, "nbrCount", ospf_nbr_count (oi
, 0));
3900 json_object_int_add(json_interface_sub
, "nbrAdjacentCount", ospf_nbr_count (oi
, NSM_Full
));
3903 vty_out (vty
, " Neighbor Count is %d, Adjacent neighbor count is %d%s",
3904 ospf_nbr_count (oi
, 0), ospf_nbr_count (oi
, NSM_Full
),
3906 ospf_bfd_interface_show(vty
, ifp
, json_interface_sub
, use_json
);
3911 show_ip_ospf_interface_common (struct vty
*vty
, struct ospf
*ospf
, int argc
,
3912 const char **argv
, int iface_argv
, u_char use_json
)
3914 struct interface
*ifp
;
3915 struct listnode
*node
;
3916 json_object
*json
= NULL
;
3917 json_object
*json_interface_sub
= NULL
;
3921 json
= json_object_new_object();
3922 json_interface_sub
= json_object_new_object();
3928 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
3930 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
3931 VTY_NEWLINE
, VTY_NEWLINE
);
3934 if (argc
== (iface_argv
+ 1))
3936 /* Show All Interfaces.*/
3937 for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT
), node
, ifp
))
3939 if (ospf_oi_count(ifp
))
3941 show_ip_ospf_interface_sub (vty
, ospf
, ifp
, json_interface_sub
, use_json
);
3945 else if (argv
[iface_argv
] && strcmp(argv
[iface_argv
], "json") == 0)
3947 /* Show All Interfaces. */
3948 for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT
), node
, ifp
))
3950 if (ospf_oi_count(ifp
))
3952 show_ip_ospf_interface_sub (vty
, ospf
, ifp
, json_interface_sub
, use_json
);
3953 json_object_object_add(json
, ifp
->name
, json_interface_sub
);
3959 /* Interface name is specified. */
3960 if ((ifp
= if_lookup_by_name (argv
[iface_argv
])) == NULL
)
3963 json_object_boolean_true_add(json
, "noSuchIface");
3965 vty_out (vty
, "No such interface name%s", VTY_NEWLINE
);
3969 show_ip_ospf_interface_sub (vty
, ospf
, ifp
, json_interface_sub
, use_json
);
3971 json_object_object_add(json
, ifp
->name
, json_interface_sub
);
3977 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
3978 json_object_free(json
);
3981 vty_out (vty
, "%s", VTY_NEWLINE
);
3986 DEFUN (show_ip_ospf_interface
,
3987 show_ip_ospf_interface_cmd
,
3988 "show ip ospf interface [INTERFACE] {json}",
3991 "OSPF information\n"
3992 "Interface information\n"
3994 "JavaScript Object Notation\n")
3997 u_char uj
= use_json(argc
, argv
);
3999 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4002 return show_ip_ospf_interface_common(vty
, ospf
, argc
, argv
, 0, uj
);
4005 DEFUN (show_ip_ospf_instance_interface
,
4006 show_ip_ospf_instance_interface_cmd
,
4007 "show ip ospf <1-65535> interface [INTERFACE] {json}",
4010 "OSPF information\n"
4012 "Interface information\n"
4014 "JavaScript Object Notation\n")
4017 u_short instance
= 0;
4018 u_char uj
= use_json(argc
, argv
);
4020 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4021 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
4024 return show_ip_ospf_interface_common(vty
, ospf
, argc
, argv
, 1, uj
);
4028 show_ip_ospf_neighbour_header (struct vty
*vty
)
4030 vty_out (vty
, "%s%-15s %3s %-15s %9s %-15s %-20s %5s %5s %5s%s",
4032 "Neighbor ID", "Pri", "State", "Dead Time",
4033 "Address", "Interface", "RXmtL", "RqstL", "DBsmL",
4038 show_ip_ospf_neighbor_sub (struct vty
*vty
, struct ospf_interface
*oi
, json_object
*json
, u_char use_json
)
4040 struct route_node
*rn
;
4041 struct ospf_neighbor
*nbr
;
4043 char timebuf
[OSPF_TIME_DUMP_SIZE
];
4044 json_object
*json_neighbor
= NULL
;
4046 for (rn
= route_top (oi
->nbrs
); rn
; rn
= route_next (rn
))
4048 if ((nbr
= rn
->info
))
4050 /* Do not show myself. */
4051 if (nbr
!= oi
->nbr_self
)
4053 /* Down state is not shown. */
4054 if (nbr
->state
!= NSM_Down
)
4058 json_neighbor
= json_object_new_object();
4059 ospf_nbr_state_message (nbr
, msgbuf
, 16);
4061 struct timeval result
;
4062 unsigned long time_store
= 0;
4064 result
= tv_sub (nbr
->t_inactivity
->u
.sands
, recent_relative_time());
4065 time_store
= (1000 * result
.tv_sec
) + (result
.tv_usec
/ 1000);
4067 json_object_int_add (json_neighbor
, "priority", nbr
->priority
);
4068 json_object_string_add (json_neighbor
, "state", msgbuf
);
4069 json_object_int_add (json_neighbor
, "deadTimeMsecs", time_store
);
4070 json_object_string_add (json_neighbor
, "address", inet_ntoa (nbr
->src
));
4071 json_object_string_add (json_neighbor
, "ifaceName", IF_NAME (oi
));
4072 json_object_int_add (json_neighbor
, "retransmitCounter", ospf_ls_retransmit_count (nbr
));
4073 json_object_int_add (json_neighbor
, "requestCounter", ospf_ls_request_count (nbr
));
4074 json_object_int_add (json_neighbor
, "dbSummaryCounter", ospf_db_summary_count (nbr
));
4075 if (nbr
->state
== NSM_Attempt
&& nbr
->router_id
.s_addr
== 0)
4076 json_object_object_add(json
, "neighbor", json_neighbor
);
4078 json_object_object_add(json
, inet_ntoa (nbr
->router_id
), json_neighbor
);
4082 ospf_nbr_state_message (nbr
, msgbuf
, 16);
4084 if (nbr
->state
== NSM_Attempt
&& nbr
->router_id
.s_addr
== 0)
4085 vty_out (vty
, "%-15s %3d %-15s ",
4089 vty_out (vty
, "%-15s %3d %-15s ",
4090 inet_ntoa (nbr
->router_id
), nbr
->priority
,
4093 vty_out (vty
, "%9s ",
4094 ospf_timer_dump (nbr
->t_inactivity
, timebuf
,
4096 vty_out (vty
, "%-15s ", inet_ntoa (nbr
->src
));
4097 vty_out (vty
, "%-20s %5ld %5ld %5d%s",
4098 IF_NAME (oi
), ospf_ls_retransmit_count (nbr
),
4099 ospf_ls_request_count (nbr
), ospf_db_summary_count (nbr
),
4109 show_ip_ospf_neighbor_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
4111 struct ospf_interface
*oi
;
4112 struct listnode
*node
;
4113 json_object
*json
= NULL
;
4116 json
= json_object_new_object();
4118 show_ip_ospf_neighbour_header (vty
);
4123 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4125 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4126 VTY_NEWLINE
, VTY_NEWLINE
);
4129 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4130 show_ip_ospf_neighbor_sub (vty
, oi
, json
, use_json
);
4134 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4135 json_object_free(json
);
4138 vty_out (vty
, "%s", VTY_NEWLINE
);
4143 DEFUN (show_ip_ospf_neighbor
,
4144 show_ip_ospf_neighbor_cmd
,
4145 "show ip ospf neighbor {json}",
4148 "OSPF information\n"
4150 "JavaScript Object Notation\n")
4153 u_char uj
= use_json(argc
, argv
);
4155 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4158 return show_ip_ospf_neighbor_common(vty
, ospf
, uj
);
4162 DEFUN (show_ip_ospf_instance_neighbor
,
4163 show_ip_ospf_instance_neighbor_cmd
,
4164 "show ip ospf <1-65535> neighbor {json}",
4167 "OSPF information\n"
4170 "JavaScript Object Notation\n")
4173 u_short instance
= 0;
4174 u_char uj
= use_json(argc
, argv
);
4176 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4177 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4180 return show_ip_ospf_neighbor_common(vty
, ospf
, uj
);
4184 show_ip_ospf_neighbor_all_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
4186 struct listnode
*node
;
4187 struct ospf_interface
*oi
;
4188 json_object
*json
= NULL
;
4189 json_object
*json_neighbor_sub
= NULL
;
4193 json
= json_object_new_object();
4194 json_neighbor_sub
= json_object_new_object();
4197 show_ip_ospf_neighbour_header (vty
);
4202 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4204 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4205 VTY_NEWLINE
, VTY_NEWLINE
);
4208 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4210 struct listnode
*nbr_node
;
4211 struct ospf_nbr_nbma
*nbr_nbma
;
4213 show_ip_ospf_neighbor_sub (vty
, oi
, json
, use_json
);
4215 /* print Down neighbor status */
4216 for (ALL_LIST_ELEMENTS_RO (oi
->nbr_nbma
, nbr_node
, nbr_nbma
))
4218 if (nbr_nbma
->nbr
== NULL
4219 || nbr_nbma
->nbr
->state
== NSM_Down
)
4223 json_object_int_add (json_neighbor_sub
, "nbrNbmaPriority", nbr_nbma
->priority
);
4224 json_object_boolean_true_add (json_neighbor_sub
, "nbrNbmaDown");
4225 json_object_string_add (json_neighbor_sub
, "nbrNbmaIfaceName", IF_NAME (oi
));
4226 json_object_int_add (json_neighbor_sub
, "nbrNbmaRetransmitCounter", 0);
4227 json_object_int_add (json_neighbor_sub
, "nbrNbmaRequestCounter", 0);
4228 json_object_int_add (json_neighbor_sub
, "nbrNbmaDbSummaryCounter", 0);
4229 json_object_object_add(json
, inet_ntoa (nbr_nbma
->addr
), json_neighbor_sub
);
4233 vty_out (vty
, "%-15s %3d %-15s %9s ",
4234 "-", nbr_nbma
->priority
, "Down", "-");
4235 vty_out (vty
, "%-15s %-20s %5d %5d %5d%s",
4236 inet_ntoa (nbr_nbma
->addr
), IF_NAME (oi
),
4237 0, 0, 0, VTY_NEWLINE
);
4245 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4246 json_object_free(json
);
4249 vty_out (vty
, "%s", VTY_NEWLINE
);
4254 DEFUN (show_ip_ospf_neighbor_all
,
4255 show_ip_ospf_neighbor_all_cmd
,
4256 "show ip ospf neighbor all {json}",
4259 "OSPF information\n"
4261 "include down status neighbor\n"
4262 "JavaScript Object Notation\n")
4265 u_char uj
= use_json(argc
, argv
);
4267 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4270 return show_ip_ospf_neighbor_all_common(vty
, ospf
, uj
);
4273 DEFUN (show_ip_ospf_instance_neighbor_all
,
4274 show_ip_ospf_instance_neighbor_all_cmd
,
4275 "show ip ospf <1-65535> neighbor all {json}",
4278 "OSPF information\n"
4281 "include down status neighbor\n"
4282 "JavaScript Object Notation\n")
4285 u_short instance
= 0;
4286 u_char uj
= use_json(argc
, argv
);
4288 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4289 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4292 return show_ip_ospf_neighbor_all_common(vty
, ospf
, uj
);
4296 show_ip_ospf_neighbor_int_common (struct vty
*vty
, struct ospf
*ospf
, int arg_base
,
4297 const char **argv
, u_char use_json
)
4299 struct interface
*ifp
;
4300 struct route_node
*rn
;
4301 json_object
*json
= NULL
;
4304 json
= json_object_new_object();
4306 show_ip_ospf_neighbour_header (vty
);
4311 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4313 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4314 VTY_NEWLINE
, VTY_NEWLINE
);
4317 ifp
= if_lookup_by_name (argv
[arg_base
]);
4321 json_object_boolean_true_add(json
, "noSuchIface");
4323 vty_out (vty
, "No such interface.%s", VTY_NEWLINE
);
4327 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
4329 struct ospf_interface
*oi
= rn
->info
;
4334 show_ip_ospf_neighbor_sub (vty
, oi
, json
, use_json
);
4339 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4340 json_object_free(json
);
4343 vty_out (vty
, "%s", VTY_NEWLINE
);
4348 DEFUN (show_ip_ospf_neighbor_int
,
4349 show_ip_ospf_neighbor_int_cmd
,
4350 "show ip ospf neighbor IFNAME {json}",
4353 "OSPF information\n"
4356 "JavaScript Object Notation\n")
4359 u_char uj
= use_json(argc
, argv
);
4361 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4364 return show_ip_ospf_neighbor_int_common(vty
, ospf
, 0, argv
, uj
);
4367 DEFUN (show_ip_ospf_instance_neighbor_int
,
4368 show_ip_ospf_instance_neighbor_int_cmd
,
4369 "show ip ospf <1-65535> neighbor IFNAME {json}",
4372 "OSPF information\n"
4376 "JavaScript Object Notation\n")
4379 u_short instance
= 0;
4380 u_char uj
= use_json(argc
, argv
);
4382 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4383 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4386 return show_ip_ospf_neighbor_int_common(vty
, ospf
, 1, argv
, uj
);
4390 show_ip_ospf_nbr_nbma_detail_sub (struct vty
*vty
, struct ospf_interface
*oi
, struct ospf_nbr_nbma
*nbr_nbma
,
4391 u_char use_json
, json_object
*json
)
4393 char timebuf
[OSPF_TIME_DUMP_SIZE
];
4394 json_object
*json_sub
= NULL
;
4397 json_sub
= json_object_new_object();
4398 else /* Show neighbor ID. */
4399 vty_out (vty
, " Neighbor %s,", "-");
4401 /* Show interface address. */
4403 json_object_string_add(json_sub
, "ifaceAddress", inet_ntoa (nbr_nbma
->addr
));
4405 vty_out (vty
, " interface address %s%s",
4406 inet_ntoa (nbr_nbma
->addr
), VTY_NEWLINE
);
4411 json_object_string_add(json_sub
, "areaId", ospf_area_desc_string (oi
->area
));
4412 json_object_string_add(json_sub
, "iface", IF_NAME (oi
));
4415 vty_out (vty
, " In the area %s via interface %s%s",
4416 ospf_area_desc_string (oi
->area
), IF_NAME (oi
), VTY_NEWLINE
);
4418 /* Show neighbor priority and state. */
4421 json_object_int_add(json_sub
, "nbrPriority", nbr_nbma
->priority
);
4422 json_object_string_add(json_sub
, "nbrState", "down");
4425 vty_out (vty
, " Neighbor priority is %d, State is %s,",
4426 nbr_nbma
->priority
, "Down");
4428 /* Show state changes. */
4430 json_object_int_add(json_sub
, "stateChangeCounter", nbr_nbma
->state_change
);
4432 vty_out (vty
, " %d state changes%s", nbr_nbma
->state_change
, VTY_NEWLINE
);
4434 /* Show PollInterval */
4436 json_object_int_add(json_sub
, "pollInterval", nbr_nbma
->v_poll
);
4438 vty_out (vty
, " Poll interval %d%s", nbr_nbma
->v_poll
, VTY_NEWLINE
);
4440 /* Show poll-interval timer. */
4443 struct timeval res
= tv_sub (nbr_nbma
->t_poll
->u
.sands
, recent_relative_time ());
4444 unsigned long time_store
= 0;
4445 time_store
= (1000 * res
.tv_sec
) + (res
.tv_usec
/ 1000);
4446 json_object_int_add(json_sub
, "pollIntervalTimerDueMsec", time_store
);
4449 vty_out (vty
, " Poll timer due in %s%s",
4450 ospf_timer_dump (nbr_nbma
->t_poll
, timebuf
, sizeof(timebuf
)),
4453 /* Show poll-interval timer thread. */
4456 if (nbr_nbma
->t_poll
!= NULL
)
4457 json_object_string_add(json_sub
, "pollIntervalTimerThread", "on");
4460 vty_out (vty
, " Thread Poll Timer %s%s",
4461 nbr_nbma
->t_poll
!= NULL
? "on" : "off", VTY_NEWLINE
);
4464 json_object_object_add(json
, "noNbrId", json_sub
);
4468 show_ip_ospf_neighbor_detail_sub (struct vty
*vty
, struct ospf_interface
*oi
,
4469 struct ospf_neighbor
*nbr
, u_char use_json
, json_object
*json
)
4471 char timebuf
[OSPF_TIME_DUMP_SIZE
];
4472 json_object
*json_sub
= NULL
;
4475 json_sub
= json_object_new_object();
4478 /* Show neighbor ID. */
4479 if (nbr
->state
== NSM_Attempt
&& nbr
->router_id
.s_addr
== 0)
4480 vty_out (vty
, " Neighbor %s,", "-");
4482 vty_out (vty
, " Neighbor %s,", inet_ntoa (nbr
->router_id
));
4485 /* Show interface address. */
4487 json_object_string_add(json_sub
, "ifaceAddress", inet_ntoa (nbr
->address
.u
.prefix4
));
4489 vty_out (vty
, " interface address %s%s",
4490 inet_ntoa (nbr
->address
.u
.prefix4
), VTY_NEWLINE
);
4495 json_object_string_add(json_sub
, "areaId", ospf_area_desc_string (oi
->area
));
4496 json_object_string_add(json_sub
, "ifaceName", oi
->ifp
->name
);
4499 vty_out (vty
, " In the area %s via interface %s%s",
4500 ospf_area_desc_string (oi
->area
), oi
->ifp
->name
, VTY_NEWLINE
);
4502 /* Show neighbor priority and state. */
4505 json_object_int_add(json_sub
, "nbrPriority", nbr
->priority
);
4506 json_object_string_add(json_sub
, "nbrState", LOOKUP (ospf_nsm_state_msg
, nbr
->state
));
4509 vty_out (vty
, " Neighbor priority is %d, State is %s,",
4510 nbr
->priority
, LOOKUP (ospf_nsm_state_msg
, nbr
->state
));
4512 /* Show state changes. */
4514 json_object_int_add(json_sub
, "stateChangeCounter", nbr
->state_change
);
4516 vty_out (vty
, " %d state changes%s", nbr
->state_change
, VTY_NEWLINE
);
4518 if (nbr
->ts_last_progress
.tv_sec
|| nbr
->ts_last_progress
.tv_usec
)
4520 struct timeval res
= tv_sub (recent_relative_time (), nbr
->ts_last_progress
);
4523 unsigned long time_store
= 0;
4524 time_store
= (1000 * res
.tv_sec
) + (res
.tv_usec
/ 1000);
4525 json_object_int_add(json_sub
, "lastPrgrsvChangeMsec", time_store
);
4529 vty_out (vty
, " Most recent state change statistics:%s",
4531 vty_out (vty
, " Progressive change %s ago%s",
4532 ospf_timeval_dump (&res
, timebuf
, sizeof(timebuf
)),
4537 if (nbr
->ts_last_regress
.tv_sec
|| nbr
->ts_last_regress
.tv_usec
)
4539 struct timeval res
= tv_sub (recent_relative_time (), nbr
->ts_last_regress
);
4542 unsigned long time_store
= 0;
4543 time_store
= (1000 * res
.tv_sec
) + (res
.tv_usec
/ 1000);
4544 json_object_int_add(json_sub
, "lastRegressiveChangeMsec", time_store
);
4545 if (nbr
->last_regress_str
)
4546 json_object_string_add(json_sub
, "lastRegressiveChangeReason", nbr
->last_regress_str
);
4550 vty_out (vty
, " Regressive change %s ago, due to %s%s",
4551 ospf_timeval_dump (&res
, timebuf
, sizeof(timebuf
)),
4552 (nbr
->last_regress_str
? nbr
->last_regress_str
: "??"),
4557 /* Show Designated Rotuer ID. */
4559 json_object_string_add(json_sub
, "routerDesignatedId", inet_ntoa (nbr
->d_router
));
4561 vty_out (vty
, " DR is %s,", inet_ntoa (nbr
->d_router
));
4563 /* Show Backup Designated Rotuer ID. */
4565 json_object_string_add(json_sub
, "routerDesignatedBackupId", inet_ntoa (nbr
->bd_router
));
4567 vty_out (vty
, " BDR is %s%s", inet_ntoa (nbr
->bd_router
), VTY_NEWLINE
);
4572 json_object_int_add(json_sub
, "optionsCounter", nbr
->options
);
4573 json_object_string_add(json_sub
, "optionsList", ospf_options_dump (nbr
->options
));
4576 vty_out (vty
, " Options %d %s%s", nbr
->options
,
4577 ospf_options_dump (nbr
->options
), VTY_NEWLINE
);
4579 /* Show Router Dead interval timer. */
4582 struct timeval res
= tv_sub (nbr
->t_inactivity
->u
.sands
, recent_relative_time ());
4583 unsigned long time_store
= 0;
4584 time_store
= (1000 * res
.tv_sec
) + (res
.tv_usec
/ 1000);
4585 json_object_int_add(json_sub
, "routerDeadIntervalTimerDueMsec", time_store
);
4588 vty_out (vty
, " Dead timer due in %s%s",
4589 ospf_timer_dump (nbr
->t_inactivity
, timebuf
, sizeof (timebuf
)),
4592 /* Show Database Summary list. */
4594 json_object_int_add(json_sub
, "databaseSummaryListCounter", ospf_db_summary_count (nbr
));
4596 vty_out (vty
, " Database Summary List %d%s",
4597 ospf_db_summary_count (nbr
), VTY_NEWLINE
);
4599 /* Show Link State Request list. */
4601 json_object_int_add(json_sub
, "linkStateRequestListCounter", ospf_ls_request_count (nbr
));
4603 vty_out (vty
, " Link State Request List %ld%s",
4604 ospf_ls_request_count (nbr
), VTY_NEWLINE
);
4606 /* Show Link State Retransmission list. */
4608 json_object_int_add(json_sub
, "linkStateRetransmissionListCounter", ospf_ls_retransmit_count (nbr
));
4610 vty_out (vty
, " Link State Retransmission List %ld%s",
4611 ospf_ls_retransmit_count (nbr
), VTY_NEWLINE
);
4613 /* Show inactivity timer thread. */
4616 if (nbr
->t_inactivity
!= NULL
)
4617 json_object_string_add(json_sub
, "threadInactivityTimer", "on");
4620 vty_out (vty
, " Thread Inactivity Timer %s%s",
4621 nbr
->t_inactivity
!= NULL
? "on" : "off", VTY_NEWLINE
);
4623 /* Show Database Description retransmission thread. */
4626 if (nbr
->t_db_desc
!= NULL
)
4627 json_object_string_add(json_sub
, "threadDatabaseDescriptionRetransmission", "on");
4630 vty_out (vty
, " Thread Database Description Retransmision %s%s",
4631 nbr
->t_db_desc
!= NULL
? "on" : "off", VTY_NEWLINE
);
4633 /* Show Link State Request Retransmission thread. */
4636 if (nbr
->t_ls_req
!= NULL
)
4637 json_object_string_add(json_sub
, "threadLinkStateRequestRetransmission", "on");
4640 vty_out (vty
, " Thread Link State Request Retransmission %s%s",
4641 nbr
->t_ls_req
!= NULL
? "on" : "off", VTY_NEWLINE
);
4643 /* Show Link State Update Retransmission thread. */
4646 if (nbr
->t_ls_upd
!= NULL
)
4647 json_object_string_add(json_sub
, "threadLinkStateUpdateRetransmission", "on");
4650 vty_out (vty
, " Thread Link State Update Retransmission %s%s%s",
4651 nbr
->t_ls_upd
!= NULL
? "on" : "off", VTY_NEWLINE
, VTY_NEWLINE
);
4655 if (nbr
->state
== NSM_Attempt
&& nbr
->router_id
.s_addr
== 0)
4656 json_object_object_add(json
, "noNbrId", json_sub
);
4658 json_object_object_add(json
, inet_ntoa (nbr
->router_id
), json_sub
);
4661 ospf_bfd_show_info(vty
, nbr
->bfd_info
, json
, use_json
, 0);
4665 show_ip_ospf_neighbor_id_common (struct vty
*vty
, struct ospf
*ospf
,
4666 int arg_base
, const char **argv
, u_char use_json
)
4668 struct listnode
*node
;
4669 struct ospf_neighbor
*nbr
;
4670 struct ospf_interface
*oi
;
4671 struct in_addr router_id
;
4673 json_object
*json
= NULL
;
4676 json
= json_object_new_object();
4681 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4683 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4684 VTY_NEWLINE
, VTY_NEWLINE
);
4687 ret
= inet_aton (argv
[arg_base
], &router_id
);
4691 vty_out (vty
, "Please specify Neighbor ID by A.B.C.D%s", VTY_NEWLINE
);
4695 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4697 if ((nbr
= ospf_nbr_lookup_by_routerid (oi
->nbrs
, &router_id
)))
4699 show_ip_ospf_neighbor_detail_sub (vty
, oi
, nbr
, use_json
, json
);
4705 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4706 json_object_free(json
);
4709 vty_out (vty
, "%s", VTY_NEWLINE
);
4714 DEFUN (show_ip_ospf_neighbor_id
,
4715 show_ip_ospf_neighbor_id_cmd
,
4716 "show ip ospf neighbor A.B.C.D {json}",
4719 "OSPF information\n"
4722 "JavaScript Object Notation\n")
4725 u_char uj
= use_json(argc
, argv
);
4727 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4730 return show_ip_ospf_neighbor_id_common(vty
, ospf
, 0, argv
, uj
);
4733 DEFUN (show_ip_ospf_instance_neighbor_id
,
4734 show_ip_ospf_instance_neighbor_id_cmd
,
4735 "show ip ospf <1-65535> neighbor A.B.C.D {json}",
4738 "OSPF information\n"
4742 "JavaScript Object Notation\n")
4745 u_short instance
= 0;
4746 u_char uj
= use_json(argc
, argv
);
4748 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4749 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4752 return show_ip_ospf_neighbor_id_common(vty
, ospf
, 1, argv
, uj
);
4756 show_ip_ospf_neighbor_detail_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
4758 struct ospf_interface
*oi
;
4759 struct listnode
*node
;
4760 json_object
*json
= NULL
;
4763 json
= json_object_new_object();
4768 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4770 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4771 VTY_NEWLINE
, VTY_NEWLINE
);
4774 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4776 struct route_node
*rn
;
4777 struct ospf_neighbor
*nbr
;
4779 for (rn
= route_top (oi
->nbrs
); rn
; rn
= route_next (rn
))
4781 if ((nbr
= rn
->info
))
4783 if (nbr
!= oi
->nbr_self
)
4785 if (nbr
->state
!= NSM_Down
)
4787 show_ip_ospf_neighbor_detail_sub (vty
, oi
, nbr
, use_json
, json
);
4796 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4797 json_object_free(json
);
4800 vty_out (vty
, "%s", VTY_NEWLINE
);
4805 DEFUN (show_ip_ospf_neighbor_detail
,
4806 show_ip_ospf_neighbor_detail_cmd
,
4807 "show ip ospf neighbor detail {json}",
4810 "OSPF information\n"
4812 "detail of all neighbors\n"
4813 "JavaScript Object Notation\n")
4816 u_char uj
= use_json(argc
, argv
);
4818 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4821 return show_ip_ospf_neighbor_detail_common(vty
, ospf
, uj
);
4824 DEFUN (show_ip_ospf_instance_neighbor_detail
,
4825 show_ip_ospf_instance_neighbor_detail_cmd
,
4826 "show ip ospf <1-65535> neighbor detail {json}",
4829 "OSPF information\n"
4832 "detail of all neighbors\n"
4833 "JavaScript Object Notation\n")
4836 u_short instance
= 0;
4837 u_char uj
= use_json(argc
, argv
);
4839 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4840 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
4843 return show_ip_ospf_neighbor_detail_common(vty
, ospf
, uj
);
4847 show_ip_ospf_neighbor_detail_all_common (struct vty
*vty
, struct ospf
*ospf
, u_char use_json
)
4849 struct listnode
*node
;
4850 struct ospf_interface
*oi
;
4851 json_object
*json
= NULL
;
4854 json
= json_object_new_object();
4859 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4861 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4862 VTY_NEWLINE
, VTY_NEWLINE
);
4865 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
4867 struct route_node
*rn
;
4868 struct ospf_neighbor
*nbr
;
4869 struct ospf_nbr_nbma
*nbr_nbma
;
4871 for (rn
= route_top (oi
->nbrs
); rn
; rn
= route_next (rn
))
4872 if ((nbr
= rn
->info
))
4873 if (nbr
!= oi
->nbr_self
)
4874 if (oi
->type
== OSPF_IFTYPE_NBMA
&& nbr
->state
!= NSM_Down
)
4875 show_ip_ospf_neighbor_detail_sub (vty
, oi
, rn
->info
, use_json
, json
);
4877 if (oi
->type
== OSPF_IFTYPE_NBMA
)
4879 struct listnode
*nd
;
4881 for (ALL_LIST_ELEMENTS_RO (oi
->nbr_nbma
, nd
, nbr_nbma
))
4883 if (nbr_nbma
->nbr
== NULL
|| nbr_nbma
->nbr
->state
== NSM_Down
)
4884 show_ip_ospf_nbr_nbma_detail_sub (vty
, oi
, nbr_nbma
, use_json
, json
);
4891 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4892 json_object_free(json
);
4896 vty_out (vty
, "%s", VTY_NEWLINE
);
4902 DEFUN (show_ip_ospf_neighbor_detail_all
,
4903 show_ip_ospf_neighbor_detail_all_cmd
,
4904 "show ip ospf neighbor detail all {json}",
4907 "OSPF information\n"
4909 "detail of all neighbors\n"
4910 "include down status neighbor\n"
4911 "JavaScript Object Notation\n")
4914 u_char uj
= use_json(argc
, argv
);
4916 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
4919 return show_ip_ospf_neighbor_detail_all_common(vty
, ospf
, uj
);
4922 DEFUN (show_ip_ospf_instance_neighbor_detail_all
,
4923 show_ip_ospf_instance_neighbor_detail_all_cmd
,
4924 "show ip ospf <1-65535> neighbor detail all {json}",
4927 "OSPF information\n"
4930 "detail of all neighbors\n"
4931 "include down status neighbor\n"
4932 "JavaScript Object Notation\n")
4935 u_short instance
= 0;
4936 u_char uj
= use_json(argc
, argv
);
4938 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
4939 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
4942 return show_ip_ospf_neighbor_detail_all_common(vty
, ospf
, uj
);
4946 show_ip_ospf_neighbor_int_detail_common (struct vty
*vty
, struct ospf
*ospf
,
4947 int arg_base
, const char **argv
, u_char use_json
)
4949 struct ospf_interface
*oi
;
4950 struct interface
*ifp
;
4951 struct route_node
*rn
, *nrn
;
4952 struct ospf_neighbor
*nbr
;
4953 json_object
*json
= NULL
;
4956 json
= json_object_new_object();
4961 json_object_int_add(json
, "ospfInstance", ospf
->instance
);
4963 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
4964 VTY_NEWLINE
, VTY_NEWLINE
);
4967 ifp
= if_lookup_by_name (argv
[arg_base
]);
4971 vty_out (vty
, "No such interface.%s", VTY_NEWLINE
);
4975 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
4977 if ((oi
= rn
->info
))
4979 for (nrn
= route_top (oi
->nbrs
); nrn
; nrn
= route_next (nrn
))
4981 if ((nbr
= nrn
->info
))
4983 if (nbr
!= oi
->nbr_self
)
4985 if (nbr
->state
!= NSM_Down
)
4986 show_ip_ospf_neighbor_detail_sub (vty
, oi
, nbr
, use_json
, json
);
4995 vty_out (vty
, "%s%s", json_object_to_json_string(json
), VTY_NEWLINE
);
4996 json_object_free(json
);
4999 vty_out (vty
, "%s", VTY_NEWLINE
);
5004 DEFUN (show_ip_ospf_neighbor_int_detail
,
5005 show_ip_ospf_neighbor_int_detail_cmd
,
5006 "show ip ospf neighbor IFNAME detail {json}",
5009 "OSPF information\n"
5012 "detail of all neighbors\n"
5013 "JavaScript Object Notation\n")
5016 u_char uj
= use_json(argc
, argv
);
5018 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
5021 return show_ip_ospf_neighbor_int_detail_common(vty
, ospf
, 0, argv
, uj
);
5024 DEFUN (show_ip_ospf_instance_neighbor_int_detail
,
5025 show_ip_ospf_instance_neighbor_int_detail_cmd
,
5026 "show ip ospf <1-65535> neighbor IFNAME detail {json}",
5029 "OSPF information\n"
5033 "detail of all neighbors\n"
5034 "JavaScript Object Notation\n")
5037 u_short instance
= 0;
5038 u_char uj
= use_json(argc
, argv
);
5040 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
5041 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
|| !ospf
->oi_running
)
5044 return show_ip_ospf_neighbor_int_detail_common(vty
, ospf
, 1, argv
, uj
);
5047 /* Show functions */
5049 show_lsa_summary (struct vty
*vty
, struct ospf_lsa
*lsa
, int self
)
5051 struct router_lsa
*rl
;
5052 struct summary_lsa
*sl
;
5053 struct as_external_lsa
*asel
;
5054 struct prefix_ipv4 p
;
5057 /* If self option is set, check LSA self flag. */
5058 if (self
== 0 || IS_LSA_SELF (lsa
))
5060 /* LSA common part show. */
5061 vty_out (vty
, "%-15s ", inet_ntoa (lsa
->data
->id
));
5062 vty_out (vty
, "%-15s %4d 0x%08lx 0x%04x",
5063 inet_ntoa (lsa
->data
->adv_router
), LS_AGE (lsa
),
5064 (u_long
)ntohl (lsa
->data
->ls_seqnum
), ntohs (lsa
->data
->checksum
));
5065 /* LSA specific part show. */
5066 switch (lsa
->data
->type
)
5068 case OSPF_ROUTER_LSA
:
5069 rl
= (struct router_lsa
*) lsa
->data
;
5070 vty_out (vty
, " %-d", ntohs (rl
->links
));
5072 case OSPF_SUMMARY_LSA
:
5073 sl
= (struct summary_lsa
*) lsa
->data
;
5076 p
.prefix
= sl
->header
.id
;
5077 p
.prefixlen
= ip_masklen (sl
->mask
);
5078 apply_mask_ipv4 (&p
);
5080 vty_out (vty
, " %s/%d", inet_ntoa (p
.prefix
), p
.prefixlen
);
5082 case OSPF_AS_EXTERNAL_LSA
:
5083 case OSPF_AS_NSSA_LSA
:
5084 asel
= (struct as_external_lsa
*) lsa
->data
;
5087 p
.prefix
= asel
->header
.id
;
5088 p
.prefixlen
= ip_masklen (asel
->mask
);
5089 apply_mask_ipv4 (&p
);
5091 vty_out (vty
, " %s %s/%d [0x%lx]",
5092 IS_EXTERNAL_METRIC (asel
->e
[0].tos
) ? "E2" : "E1",
5093 inet_ntoa (p
.prefix
), p
.prefixlen
,
5094 (u_long
)ntohl (asel
->e
[0].route_tag
));
5096 case OSPF_NETWORK_LSA
:
5097 case OSPF_ASBR_SUMMARY_LSA
:
5098 #ifdef HAVE_OPAQUE_LSA
5099 case OSPF_OPAQUE_LINK_LSA
:
5100 case OSPF_OPAQUE_AREA_LSA
:
5101 case OSPF_OPAQUE_AS_LSA
:
5102 #endif /* HAVE_OPAQUE_LSA */
5106 vty_out (vty
, VTY_NEWLINE
);
5112 static const char *show_database_desc
[] =
5115 "Router Link States",
5117 "Summary Link States",
5118 "ASBR-Summary Link States",
5119 "AS External Link States",
5120 "Group Membership LSA",
5121 "NSSA-external Link States",
5122 #ifdef HAVE_OPAQUE_LSA
5124 "Link-Local Opaque-LSA",
5125 "Area-Local Opaque-LSA",
5126 "AS-external Opaque-LSA",
5127 #endif /* HAVE_OPAQUE_LSA */
5130 static const char *show_database_header
[] =
5133 "Link ID ADV Router Age Seq# CkSum Link count",
5134 "Link ID ADV Router Age Seq# CkSum",
5135 "Link ID ADV Router Age Seq# CkSum Route",
5136 "Link ID ADV Router Age Seq# CkSum",
5137 "Link ID ADV Router Age Seq# CkSum Route",
5138 " --- header for Group Member ----",
5139 "Link ID ADV Router Age Seq# CkSum Route",
5140 #ifdef HAVE_OPAQUE_LSA
5142 "Opaque-Type/Id ADV Router Age Seq# CkSum",
5143 "Opaque-Type/Id ADV Router Age Seq# CkSum",
5144 "Opaque-Type/Id ADV Router Age Seq# CkSum",
5145 #endif /* HAVE_OPAQUE_LSA */
5149 show_ip_ospf_database_header (struct vty
*vty
, struct ospf_lsa
*lsa
)
5151 struct router_lsa
*rlsa
= (struct router_lsa
*) lsa
->data
;
5153 vty_out (vty
, " LS age: %d%s", LS_AGE (lsa
), VTY_NEWLINE
);
5154 vty_out (vty
, " Options: 0x%-2x : %s%s",
5156 ospf_options_dump(lsa
->data
->options
),
5158 vty_out (vty
, " LS Flags: 0x%-2x %s%s",
5160 ((lsa
->flags
& OSPF_LSA_LOCAL_XLT
) ? "(Translated from Type-7)" : ""),
5163 if (lsa
->data
->type
== OSPF_ROUTER_LSA
)
5165 vty_out (vty
, " Flags: 0x%x" , rlsa
->flags
);
5168 vty_out (vty
, " :%s%s%s%s",
5169 IS_ROUTER_LSA_BORDER (rlsa
) ? " ABR" : "",
5170 IS_ROUTER_LSA_EXTERNAL (rlsa
) ? " ASBR" : "",
5171 IS_ROUTER_LSA_VIRTUAL (rlsa
) ? " VL-endpoint" : "",
5172 IS_ROUTER_LSA_SHORTCUT (rlsa
) ? " Shortcut" : "");
5174 vty_out (vty
, "%s", VTY_NEWLINE
);
5176 vty_out (vty
, " LS Type: %s%s",
5177 LOOKUP (ospf_lsa_type_msg
, lsa
->data
->type
), VTY_NEWLINE
);
5178 vty_out (vty
, " Link State ID: %s %s%s", inet_ntoa (lsa
->data
->id
),
5179 LOOKUP (ospf_link_state_id_type_msg
, lsa
->data
->type
), VTY_NEWLINE
);
5180 vty_out (vty
, " Advertising Router: %s%s",
5181 inet_ntoa (lsa
->data
->adv_router
), VTY_NEWLINE
);
5182 vty_out (vty
, " LS Seq Number: %08lx%s", (u_long
)ntohl (lsa
->data
->ls_seqnum
),
5184 vty_out (vty
, " Checksum: 0x%04x%s", ntohs (lsa
->data
->checksum
),
5186 vty_out (vty
, " Length: %d%s", ntohs (lsa
->data
->length
), VTY_NEWLINE
);
5189 const char *link_type_desc
[] =
5192 "another Router (point-to-point)",
5193 "a Transit Network",
5198 const char *link_id_desc
[] =
5201 "Neighboring Router ID",
5202 "Designated Router address",
5204 "Neighboring Router ID",
5207 const char *link_data_desc
[] =
5210 "Router Interface address",
5211 "Router Interface address",
5213 "Router Interface address",
5216 /* Show router-LSA each Link information. */
5218 show_ip_ospf_database_router_links (struct vty
*vty
,
5219 struct router_lsa
*rl
)
5224 len
= ntohs (rl
->header
.length
) - 4;
5225 for (i
= 0; i
< ntohs (rl
->links
) && len
> 0; len
-= 12, i
++)
5227 type
= rl
->link
[i
].type
;
5229 vty_out (vty
, " Link connected to: %s%s",
5230 link_type_desc
[type
], VTY_NEWLINE
);
5231 vty_out (vty
, " (Link ID) %s: %s%s", link_id_desc
[type
],
5232 inet_ntoa (rl
->link
[i
].link_id
), VTY_NEWLINE
);
5233 vty_out (vty
, " (Link Data) %s: %s%s", link_data_desc
[type
],
5234 inet_ntoa (rl
->link
[i
].link_data
), VTY_NEWLINE
);
5235 vty_out (vty
, " Number of TOS metrics: 0%s", VTY_NEWLINE
);
5236 vty_out (vty
, " TOS 0 Metric: %d%s",
5237 ntohs (rl
->link
[i
].metric
), VTY_NEWLINE
);
5238 vty_out (vty
, "%s", VTY_NEWLINE
);
5242 /* Show router-LSA detail information. */
5244 show_router_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5248 struct router_lsa
*rl
= (struct router_lsa
*) lsa
->data
;
5250 show_ip_ospf_database_header (vty
, lsa
);
5252 vty_out (vty
, " Number of Links: %d%s%s", ntohs (rl
->links
),
5253 VTY_NEWLINE
, VTY_NEWLINE
);
5255 show_ip_ospf_database_router_links (vty
, rl
);
5256 vty_out (vty
, "%s", VTY_NEWLINE
);
5262 /* Show network-LSA detail information. */
5264 show_network_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5270 struct network_lsa
*nl
= (struct network_lsa
*) lsa
->data
;
5272 show_ip_ospf_database_header (vty
, lsa
);
5274 vty_out (vty
, " Network Mask: /%d%s",
5275 ip_masklen (nl
->mask
), VTY_NEWLINE
);
5277 length
= ntohs (lsa
->data
->length
) - OSPF_LSA_HEADER_SIZE
- 4;
5279 for (i
= 0; length
> 0; i
++, length
-= 4)
5280 vty_out (vty
, " Attached Router: %s%s",
5281 inet_ntoa (nl
->routers
[i
]), VTY_NEWLINE
);
5283 vty_out (vty
, "%s", VTY_NEWLINE
);
5289 /* Show summary-LSA detail information. */
5291 show_summary_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5295 struct summary_lsa
*sl
= (struct summary_lsa
*) lsa
->data
;
5297 show_ip_ospf_database_header (vty
, lsa
);
5299 vty_out (vty
, " Network Mask: /%d%s", ip_masklen (sl
->mask
),
5301 vty_out (vty
, " TOS: 0 Metric: %d%s", GET_METRIC (sl
->metric
),
5303 vty_out (vty
, "%s", VTY_NEWLINE
);
5309 /* Show summary-ASBR-LSA detail information. */
5311 show_summary_asbr_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5315 struct summary_lsa
*sl
= (struct summary_lsa
*) lsa
->data
;
5317 show_ip_ospf_database_header (vty
, lsa
);
5319 vty_out (vty
, " Network Mask: /%d%s",
5320 ip_masklen (sl
->mask
), VTY_NEWLINE
);
5321 vty_out (vty
, " TOS: 0 Metric: %d%s", GET_METRIC (sl
->metric
),
5323 vty_out (vty
, "%s", VTY_NEWLINE
);
5329 /* Show AS-external-LSA detail information. */
5331 show_as_external_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5335 struct as_external_lsa
*al
= (struct as_external_lsa
*) lsa
->data
;
5337 show_ip_ospf_database_header (vty
, lsa
);
5339 vty_out (vty
, " Network Mask: /%d%s",
5340 ip_masklen (al
->mask
), VTY_NEWLINE
);
5341 vty_out (vty
, " Metric Type: %s%s",
5342 IS_EXTERNAL_METRIC (al
->e
[0].tos
) ?
5343 "2 (Larger than any link state path)" : "1", VTY_NEWLINE
);
5344 vty_out (vty
, " TOS: 0%s", VTY_NEWLINE
);
5345 vty_out (vty
, " Metric: %d%s",
5346 GET_METRIC (al
->e
[0].metric
), VTY_NEWLINE
);
5347 vty_out (vty
, " Forward Address: %s%s",
5348 inet_ntoa (al
->e
[0].fwd_addr
), VTY_NEWLINE
);
5350 vty_out (vty
, " External Route Tag: %lu%s%s",
5351 (u_long
)ntohl (al
->e
[0].route_tag
), VTY_NEWLINE
, VTY_NEWLINE
);
5359 show_as_external_lsa_stdvty (struct ospf_lsa
*lsa
)
5361 struct as_external_lsa
*al
= (struct as_external_lsa
*) lsa
->data
;
5363 /* show_ip_ospf_database_header (vty, lsa); */
5365 zlog_debug( " Network Mask: /%d%s",
5366 ip_masklen (al
->mask
), "\n");
5367 zlog_debug( " Metric Type: %s%s",
5368 IS_EXTERNAL_METRIC (al
->e
[0].tos
) ?
5369 "2 (Larger than any link state path)" : "1", "\n");
5370 zlog_debug( " TOS: 0%s", "\n");
5371 zlog_debug( " Metric: %d%s",
5372 GET_METRIC (al
->e
[0].metric
), "\n");
5373 zlog_debug( " Forward Address: %s%s",
5374 inet_ntoa (al
->e
[0].fwd_addr
), "\n");
5376 zlog_debug( " External Route Tag: %u%s%s",
5377 ntohl (al
->e
[0].route_tag
), "\n", "\n");
5383 /* Show AS-NSSA-LSA detail information. */
5385 show_as_nssa_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5389 struct as_external_lsa
*al
= (struct as_external_lsa
*) lsa
->data
;
5391 show_ip_ospf_database_header (vty
, lsa
);
5393 vty_out (vty
, " Network Mask: /%d%s",
5394 ip_masklen (al
->mask
), VTY_NEWLINE
);
5395 vty_out (vty
, " Metric Type: %s%s",
5396 IS_EXTERNAL_METRIC (al
->e
[0].tos
) ?
5397 "2 (Larger than any link state path)" : "1", VTY_NEWLINE
);
5398 vty_out (vty
, " TOS: 0%s", VTY_NEWLINE
);
5399 vty_out (vty
, " Metric: %d%s",
5400 GET_METRIC (al
->e
[0].metric
), VTY_NEWLINE
);
5401 vty_out (vty
, " NSSA: Forward Address: %s%s",
5402 inet_ntoa (al
->e
[0].fwd_addr
), VTY_NEWLINE
);
5404 vty_out (vty
, " External Route Tag: %u%s%s",
5405 ntohl (al
->e
[0].route_tag
), VTY_NEWLINE
, VTY_NEWLINE
);
5412 show_func_dummy (struct vty
*vty
, struct ospf_lsa
*lsa
)
5417 #ifdef HAVE_OPAQUE_LSA
5419 show_opaque_lsa_detail (struct vty
*vty
, struct ospf_lsa
*lsa
)
5423 show_ip_ospf_database_header (vty
, lsa
);
5424 show_opaque_info_detail (vty
, lsa
);
5426 vty_out (vty
, "%s", VTY_NEWLINE
);
5430 #endif /* HAVE_OPAQUE_LSA */
5432 int (*show_function
[])(struct vty
*, struct ospf_lsa
*) =
5435 show_router_lsa_detail
,
5436 show_network_lsa_detail
,
5437 show_summary_lsa_detail
,
5438 show_summary_asbr_lsa_detail
,
5439 show_as_external_lsa_detail
,
5441 show_as_nssa_lsa_detail
, /* almost same as external */
5442 #ifdef HAVE_OPAQUE_LSA
5444 show_opaque_lsa_detail
,
5445 show_opaque_lsa_detail
,
5446 show_opaque_lsa_detail
,
5447 #endif /* HAVE_OPAQUE_LSA */
5451 show_lsa_prefix_set (struct vty
*vty
, struct prefix_ls
*lp
, struct in_addr
*id
,
5452 struct in_addr
*adv_router
)
5454 memset (lp
, 0, sizeof (struct prefix_ls
));
5458 else if (adv_router
== NULL
)
5467 lp
->adv_router
= *adv_router
;
5472 show_lsa_detail_proc (struct vty
*vty
, struct route_table
*rt
,
5473 struct in_addr
*id
, struct in_addr
*adv_router
)
5475 struct prefix_ls lp
;
5476 struct route_node
*rn
, *start
;
5477 struct ospf_lsa
*lsa
;
5479 show_lsa_prefix_set (vty
, &lp
, id
, adv_router
);
5480 start
= route_node_get (rt
, (struct prefix
*) &lp
);
5483 route_lock_node (start
);
5484 for (rn
= start
; rn
; rn
= route_next_until (rn
, start
))
5485 if ((lsa
= rn
->info
))
5487 if (show_function
[lsa
->data
->type
] != NULL
)
5488 show_function
[lsa
->data
->type
] (vty
, lsa
);
5490 route_unlock_node (start
);
5494 /* Show detail LSA information
5495 -- if id is NULL then show all LSAs. */
5497 show_lsa_detail (struct vty
*vty
, struct ospf
*ospf
, int type
,
5498 struct in_addr
*id
, struct in_addr
*adv_router
)
5500 struct listnode
*node
;
5501 struct ospf_area
*area
;
5505 case OSPF_AS_EXTERNAL_LSA
:
5506 #ifdef HAVE_OPAQUE_LSA
5507 case OSPF_OPAQUE_AS_LSA
:
5508 #endif /* HAVE_OPAQUE_LSA */
5509 vty_out (vty
, " %s %s%s",
5510 show_database_desc
[type
],
5511 VTY_NEWLINE
, VTY_NEWLINE
);
5512 show_lsa_detail_proc (vty
, AS_LSDB (ospf
, type
), id
, adv_router
);
5515 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
5517 vty_out (vty
, "%s %s (Area %s)%s%s",
5518 VTY_NEWLINE
, show_database_desc
[type
],
5519 ospf_area_desc_string (area
), VTY_NEWLINE
, VTY_NEWLINE
);
5520 show_lsa_detail_proc (vty
, AREA_LSDB (area
, type
), id
, adv_router
);
5527 show_lsa_detail_adv_router_proc (struct vty
*vty
, struct route_table
*rt
,
5528 struct in_addr
*adv_router
)
5530 struct route_node
*rn
;
5531 struct ospf_lsa
*lsa
;
5533 for (rn
= route_top (rt
); rn
; rn
= route_next (rn
))
5534 if ((lsa
= rn
->info
))
5535 if (IPV4_ADDR_SAME (adv_router
, &lsa
->data
->adv_router
))
5537 if (CHECK_FLAG (lsa
->flags
, OSPF_LSA_LOCAL_XLT
))
5539 if (show_function
[lsa
->data
->type
] != NULL
)
5540 show_function
[lsa
->data
->type
] (vty
, lsa
);
5544 /* Show detail LSA information. */
5546 show_lsa_detail_adv_router (struct vty
*vty
, struct ospf
*ospf
, int type
,
5547 struct in_addr
*adv_router
)
5549 struct listnode
*node
;
5550 struct ospf_area
*area
;
5554 case OSPF_AS_EXTERNAL_LSA
:
5555 #ifdef HAVE_OPAQUE_LSA
5556 case OSPF_OPAQUE_AS_LSA
:
5557 #endif /* HAVE_OPAQUE_LSA */
5558 vty_out (vty
, " %s %s%s",
5559 show_database_desc
[type
],
5560 VTY_NEWLINE
, VTY_NEWLINE
);
5561 show_lsa_detail_adv_router_proc (vty
, AS_LSDB (ospf
, type
),
5565 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
5567 vty_out (vty
, "%s %s (Area %s)%s%s",
5568 VTY_NEWLINE
, show_database_desc
[type
],
5569 ospf_area_desc_string (area
), VTY_NEWLINE
, VTY_NEWLINE
);
5570 show_lsa_detail_adv_router_proc (vty
, AREA_LSDB (area
, type
),
5578 show_ip_ospf_database_summary (struct vty
*vty
, struct ospf
*ospf
, int self
)
5580 struct ospf_lsa
*lsa
;
5581 struct route_node
*rn
;
5582 struct ospf_area
*area
;
5583 struct listnode
*node
;
5586 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
5588 for (type
= OSPF_MIN_LSA
; type
< OSPF_MAX_LSA
; type
++)
5592 case OSPF_AS_EXTERNAL_LSA
:
5593 #ifdef HAVE_OPAQUE_LSA
5594 case OSPF_OPAQUE_AS_LSA
:
5595 #endif /* HAVE_OPAQUE_LSA */
5600 if (ospf_lsdb_count_self (area
->lsdb
, type
) > 0 ||
5601 (!self
&& ospf_lsdb_count (area
->lsdb
, type
) > 0))
5603 vty_out (vty
, " %s (Area %s)%s%s",
5604 show_database_desc
[type
],
5605 ospf_area_desc_string (area
),
5606 VTY_NEWLINE
, VTY_NEWLINE
);
5607 vty_out (vty
, "%s%s", show_database_header
[type
], VTY_NEWLINE
);
5609 LSDB_LOOP (AREA_LSDB (area
, type
), rn
, lsa
)
5610 show_lsa_summary (vty
, lsa
, self
);
5612 vty_out (vty
, "%s", VTY_NEWLINE
);
5617 for (type
= OSPF_MIN_LSA
; type
< OSPF_MAX_LSA
; type
++)
5621 case OSPF_AS_EXTERNAL_LSA
:
5622 #ifdef HAVE_OPAQUE_LSA
5623 case OSPF_OPAQUE_AS_LSA
:
5624 #endif /* HAVE_OPAQUE_LSA */
5629 if (ospf_lsdb_count_self (ospf
->lsdb
, type
) ||
5630 (!self
&& ospf_lsdb_count (ospf
->lsdb
, type
)))
5632 vty_out (vty
, " %s%s%s",
5633 show_database_desc
[type
],
5634 VTY_NEWLINE
, VTY_NEWLINE
);
5635 vty_out (vty
, "%s%s", show_database_header
[type
],
5638 LSDB_LOOP (AS_LSDB (ospf
, type
), rn
, lsa
)
5639 show_lsa_summary (vty
, lsa
, self
);
5641 vty_out (vty
, "%s", VTY_NEWLINE
);
5645 vty_out (vty
, "%s", VTY_NEWLINE
);
5649 show_ip_ospf_database_maxage (struct vty
*vty
, struct ospf
*ospf
)
5651 struct route_node
*rn
;
5653 vty_out (vty
, "%s MaxAge Link States:%s%s",
5654 VTY_NEWLINE
, VTY_NEWLINE
, VTY_NEWLINE
);
5656 for (rn
= route_top (ospf
->maxage_lsa
); rn
; rn
= route_next (rn
))
5658 struct ospf_lsa
*lsa
;
5660 if ((lsa
= rn
->info
) != NULL
)
5662 vty_out (vty
, "Link type: %d%s", lsa
->data
->type
, VTY_NEWLINE
);
5663 vty_out (vty
, "Link State ID: %s%s",
5664 inet_ntoa (lsa
->data
->id
), VTY_NEWLINE
);
5665 vty_out (vty
, "Advertising Router: %s%s",
5666 inet_ntoa (lsa
->data
->adv_router
), VTY_NEWLINE
);
5667 vty_out (vty
, "LSA lock count: %d%s", lsa
->lock
, VTY_NEWLINE
);
5668 vty_out (vty
, "%s", VTY_NEWLINE
);
5673 #define OSPF_LSA_TYPE_NSSA_DESC "NSSA external link state\n"
5674 #define OSPF_LSA_TYPE_NSSA_CMD_STR "|nssa-external"
5676 #ifdef HAVE_OPAQUE_LSA
5677 #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC "Link local Opaque-LSA\n"
5678 #define OSPF_LSA_TYPE_OPAQUE_AREA_DESC "Link area Opaque-LSA\n"
5679 #define OSPF_LSA_TYPE_OPAQUE_AS_DESC "Link AS Opaque-LSA\n"
5680 #define OSPF_LSA_TYPE_OPAQUE_CMD_STR "|opaque-link|opaque-area|opaque-as"
5681 #else /* HAVE_OPAQUE_LSA */
5682 #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC ""
5683 #define OSPF_LSA_TYPE_OPAQUE_AREA_DESC ""
5684 #define OSPF_LSA_TYPE_OPAQUE_AS_DESC ""
5685 #define OSPF_LSA_TYPE_OPAQUE_CMD_STR ""
5686 #endif /* HAVE_OPAQUE_LSA */
5688 #define OSPF_LSA_TYPES_CMD_STR \
5689 "asbr-summary|external|network|router|summary" \
5690 OSPF_LSA_TYPE_NSSA_CMD_STR \
5691 OSPF_LSA_TYPE_OPAQUE_CMD_STR
5693 #define OSPF_LSA_TYPES_DESC \
5694 "ASBR summary link states\n" \
5695 "External link states\n" \
5696 "Network link states\n" \
5697 "Router link states\n" \
5698 "Network summary link states\n" \
5699 OSPF_LSA_TYPE_NSSA_DESC \
5700 OSPF_LSA_TYPE_OPAQUE_LINK_DESC \
5701 OSPF_LSA_TYPE_OPAQUE_AREA_DESC \
5702 OSPF_LSA_TYPE_OPAQUE_AS_DESC
5705 show_ip_ospf_database_common (struct vty
*vty
, struct ospf
*ospf
,
5706 int arg_base
, int argc
, const char **argv
)
5709 struct in_addr id
, adv_router
;
5712 vty_out (vty
, "%sOSPF Instance: %d%s", VTY_NEWLINE
, ospf
->instance
,
5715 vty_out (vty
, "%s OSPF Router with ID (%s)%s%s", VTY_NEWLINE
,
5716 inet_ntoa (ospf
->router_id
), VTY_NEWLINE
, VTY_NEWLINE
);
5719 if (argc
== arg_base
+ 0)
5721 show_ip_ospf_database_summary (vty
, ospf
, 0);
5725 /* Set database type to show. */
5726 if (strncmp (argv
[arg_base
+ 0], "r", 1) == 0)
5727 type
= OSPF_ROUTER_LSA
;
5728 else if (strncmp (argv
[arg_base
+ 0], "ne", 2) == 0)
5729 type
= OSPF_NETWORK_LSA
;
5730 else if (strncmp (argv
[arg_base
+ 0], "ns", 2) == 0)
5731 type
= OSPF_AS_NSSA_LSA
;
5732 else if (strncmp (argv
[arg_base
+ 0], "su", 2) == 0)
5733 type
= OSPF_SUMMARY_LSA
;
5734 else if (strncmp (argv
[arg_base
+ 0], "a", 1) == 0)
5735 type
= OSPF_ASBR_SUMMARY_LSA
;
5736 else if (strncmp (argv
[arg_base
+ 0], "e", 1) == 0)
5737 type
= OSPF_AS_EXTERNAL_LSA
;
5738 else if (strncmp (argv
[arg_base
+ 0], "se", 2) == 0)
5740 show_ip_ospf_database_summary (vty
, ospf
, 1);
5743 else if (strncmp (argv
[arg_base
+ 0], "m", 1) == 0)
5745 show_ip_ospf_database_maxage (vty
, ospf
);
5748 #ifdef HAVE_OPAQUE_LSA
5749 else if (strncmp (argv
[arg_base
+ 0], "opaque-l", 8) == 0)
5750 type
= OSPF_OPAQUE_LINK_LSA
;
5751 else if (strncmp (argv
[arg_base
+ 0], "opaque-ar", 9) == 0)
5752 type
= OSPF_OPAQUE_AREA_LSA
;
5753 else if (strncmp (argv
[arg_base
+ 0], "opaque-as", 9) == 0)
5754 type
= OSPF_OPAQUE_AS_LSA
;
5755 #endif /* HAVE_OPAQUE_LSA */
5759 /* `show ip ospf database LSA'. */
5760 if (argc
== arg_base
+ 1)
5761 show_lsa_detail (vty
, ospf
, type
, NULL
, NULL
);
5762 else if (argc
>= arg_base
+ 2)
5764 ret
= inet_aton (argv
[arg_base
+ 1], &id
);
5768 /* `show ip ospf database LSA ID'. */
5769 if (argc
== arg_base
+ 2)
5770 show_lsa_detail (vty
, ospf
, type
, &id
, NULL
);
5771 /* `show ip ospf database LSA ID adv-router ADV_ROUTER'. */
5772 else if (argc
== arg_base
+ 3)
5774 if (strncmp (argv
[arg_base
+ 2], "s", 1) == 0)
5775 adv_router
= ospf
->router_id
;
5778 ret
= inet_aton (argv
[arg_base
+ 2], &adv_router
);
5782 show_lsa_detail (vty
, ospf
, type
, &id
, &adv_router
);
5789 DEFUN (show_ip_ospf_database
,
5790 show_ip_ospf_database_cmd
,
5791 "show ip ospf database",
5794 "OSPF information\n"
5795 "Database summary\n")
5799 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
5802 return (show_ip_ospf_database_common(vty
, ospf
, 0, argc
, argv
));
5805 ALIAS (show_ip_ospf_database
,
5806 show_ip_ospf_database_type_cmd
,
5807 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
"|max-age|self-originate)",
5810 "OSPF information\n"
5811 "Database summary\n"
5813 "LSAs in MaxAge list\n"
5814 "Self-originated link states\n")
5816 ALIAS (show_ip_ospf_database
,
5817 show_ip_ospf_database_type_id_cmd
,
5818 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D",
5821 "OSPF information\n"
5822 "Database summary\n"
5824 "Link State ID (as an IP address)\n")
5826 ALIAS (show_ip_ospf_database
,
5827 show_ip_ospf_database_type_id_adv_router_cmd
,
5828 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D adv-router A.B.C.D",
5831 "OSPF information\n"
5832 "Database summary\n"
5834 "Link State ID (as an IP address)\n"
5835 "Advertising Router link states\n"
5836 "Advertising Router (as an IP address)\n")
5838 ALIAS (show_ip_ospf_database
,
5839 show_ip_ospf_database_type_id_self_cmd
,
5840 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D (self-originate|)",
5843 "OSPF information\n"
5844 "Database summary\n"
5846 "Link State ID (as an IP address)\n"
5847 "Self-originated link states\n"
5850 DEFUN (show_ip_ospf_instance_database
,
5851 show_ip_ospf_instance_database_cmd
,
5852 "show ip ospf <1-65535> database",
5855 "OSPF information\n"
5857 "Database summary\n")
5860 u_short instance
= 0;
5862 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
5864 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
5867 return (show_ip_ospf_database_common(vty
, ospf
, 1, argc
, argv
));
5870 ALIAS (show_ip_ospf_instance_database
,
5871 show_ip_ospf_instance_database_type_cmd
,
5872 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
"|max-age|self-originate)",
5875 "OSPF information\n"
5877 "Database summary\n"
5879 "LSAs in MaxAge list\n"
5880 "Self-originated link states\n")
5882 ALIAS (show_ip_ospf_instance_database
,
5883 show_ip_ospf_instance_database_type_id_cmd
,
5884 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D",
5887 "OSPF information\n"
5889 "Database summary\n"
5891 "Link State ID (as an IP address)\n")
5893 ALIAS (show_ip_ospf_instance_database
,
5894 show_ip_ospf_instance_database_type_id_adv_router_cmd
,
5895 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D adv-router A.B.C.D",
5898 "OSPF information\n"
5900 "Database summary\n"
5902 "Link State ID (as an IP address)\n"
5903 "Advertising Router link states\n"
5904 "Advertising Router (as an IP address)\n")
5906 ALIAS (show_ip_ospf_instance_database
,
5907 show_ip_ospf_instance_database_type_id_self_cmd
,
5908 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") A.B.C.D (self-originate|)",
5911 "OSPF information\n"
5913 "Database summary\n"
5915 "Link State ID (as an IP address)\n"
5916 "Self-originated link states\n"
5921 show_ip_ospf_database_type_adv_router_common (struct vty
*vty
, struct ospf
*ospf
,
5922 int arg_base
, int argc
, const char **argv
)
5925 struct in_addr adv_router
;
5928 vty_out (vty
, "%sOSPF Instance: %d%s", VTY_NEWLINE
, ospf
->instance
,
5931 vty_out (vty
, "%s OSPF Router with ID (%s)%s%s", VTY_NEWLINE
,
5932 inet_ntoa (ospf
->router_id
), VTY_NEWLINE
, VTY_NEWLINE
);
5934 if (argc
!= arg_base
+ 2)
5937 /* Set database type to show. */
5938 if (strncmp (argv
[arg_base
+ 0], "r", 1) == 0)
5939 type
= OSPF_ROUTER_LSA
;
5940 else if (strncmp (argv
[arg_base
+ 0], "ne", 2) == 0)
5941 type
= OSPF_NETWORK_LSA
;
5942 else if (strncmp (argv
[arg_base
+ 0], "ns", 2) == 0)
5943 type
= OSPF_AS_NSSA_LSA
;
5944 else if (strncmp (argv
[arg_base
+ 0], "s", 1) == 0)
5945 type
= OSPF_SUMMARY_LSA
;
5946 else if (strncmp (argv
[arg_base
+ 0], "a", 1) == 0)
5947 type
= OSPF_ASBR_SUMMARY_LSA
;
5948 else if (strncmp (argv
[arg_base
+ 0], "e", 1) == 0)
5949 type
= OSPF_AS_EXTERNAL_LSA
;
5950 #ifdef HAVE_OPAQUE_LSA
5951 else if (strncmp (argv
[arg_base
+ 0], "opaque-l", 8) == 0)
5952 type
= OSPF_OPAQUE_LINK_LSA
;
5953 else if (strncmp (argv
[arg_base
+ 0], "opaque-ar", 9) == 0)
5954 type
= OSPF_OPAQUE_AREA_LSA
;
5955 else if (strncmp (argv
[arg_base
+ 0], "opaque-as", 9) == 0)
5956 type
= OSPF_OPAQUE_AS_LSA
;
5957 #endif /* HAVE_OPAQUE_LSA */
5961 /* `show ip ospf database LSA adv-router ADV_ROUTER'. */
5962 if (strncmp (argv
[arg_base
+ 1], "s", 1) == 0)
5963 adv_router
= ospf
->router_id
;
5966 ret
= inet_aton (argv
[arg_base
+ 1], &adv_router
);
5971 show_lsa_detail_adv_router (vty
, ospf
, type
, &adv_router
);
5976 DEFUN (show_ip_ospf_database_type_adv_router
,
5977 show_ip_ospf_database_type_adv_router_cmd
,
5978 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") adv-router A.B.C.D",
5981 "OSPF information\n"
5982 "Database summary\n"
5984 "Advertising Router link states\n"
5985 "Advertising Router (as an IP address)\n")
5989 if ((ospf
= ospf_lookup()) == NULL
|| !ospf
->oi_running
)
5992 return (show_ip_ospf_database_type_adv_router_common(vty
, ospf
, 0, argc
, argv
));
5995 ALIAS (show_ip_ospf_database_type_adv_router
,
5996 show_ip_ospf_database_type_self_cmd
,
5997 "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR
") (self-originate|)",
6000 "OSPF information\n"
6001 "Database summary\n"
6003 "Self-originated link states\n")
6005 DEFUN (show_ip_ospf_instance_database_type_adv_router
,
6006 show_ip_ospf_instance_database_type_adv_router_cmd
,
6007 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") adv-router A.B.C.D",
6010 "OSPF information\n"
6012 "Database summary\n"
6014 "Advertising Router link states\n"
6015 "Advertising Router (as an IP address)\n")
6018 u_short instance
= 0;
6020 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
6022 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
6025 return (show_ip_ospf_database_type_adv_router_common(vty
, ospf
, 1, argc
, argv
));
6028 ALIAS (show_ip_ospf_instance_database_type_adv_router
,
6029 show_ip_ospf_instance_database_type_self_cmd
,
6030 "show ip ospf <1-65535> database (" OSPF_LSA_TYPES_CMD_STR
") (self-originate|)",
6033 "OSPF information\n"
6035 "Database summary\n"
6037 "Self-originated link states\n")
6039 DEFUN (ip_ospf_authentication_args
,
6040 ip_ospf_authentication_args_addr_cmd
,
6041 "ip ospf authentication (null|message-digest) A.B.C.D",
6043 "OSPF interface commands\n"
6044 "Enable authentication on this interface\n"
6045 "Use null authentication\n"
6046 "Use message-digest authentication\n"
6047 "Address of interface")
6049 struct interface
*ifp
;
6050 struct in_addr addr
;
6052 struct ospf_if_params
*params
;
6055 params
= IF_DEF_PARAMS (ifp
);
6059 ret
= inet_aton(argv
[1], &addr
);
6062 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6067 params
= ospf_get_if_params (ifp
, addr
);
6068 ospf_if_update_params (ifp
, addr
);
6071 /* Handle null authentication */
6072 if ( argv
[0][0] == 'n' )
6074 SET_IF_PARAM (params
, auth_type
);
6075 params
->auth_type
= OSPF_AUTH_NULL
;
6079 /* Handle message-digest authentication */
6080 if ( argv
[0][0] == 'm' )
6082 SET_IF_PARAM (params
, auth_type
);
6083 params
->auth_type
= OSPF_AUTH_CRYPTOGRAPHIC
;
6087 vty_out (vty
, "You shouldn't get here!%s", VTY_NEWLINE
);
6091 ALIAS (ip_ospf_authentication_args
,
6092 ip_ospf_authentication_args_cmd
,
6093 "ip ospf authentication (null|message-digest)",
6095 "OSPF interface commands\n"
6096 "Enable authentication on this interface\n"
6097 "Use null authentication\n"
6098 "Use message-digest authentication\n")
6100 DEFUN (ip_ospf_authentication
,
6101 ip_ospf_authentication_addr_cmd
,
6102 "ip ospf authentication A.B.C.D",
6104 "OSPF interface commands\n"
6105 "Enable authentication on this interface\n"
6106 "Address of interface")
6108 struct interface
*ifp
;
6109 struct in_addr addr
;
6111 struct ospf_if_params
*params
;
6114 params
= IF_DEF_PARAMS (ifp
);
6118 ret
= inet_aton(argv
[0], &addr
);
6121 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6126 params
= ospf_get_if_params (ifp
, addr
);
6127 ospf_if_update_params (ifp
, addr
);
6130 SET_IF_PARAM (params
, auth_type
);
6131 params
->auth_type
= OSPF_AUTH_SIMPLE
;
6136 ALIAS (ip_ospf_authentication
,
6137 ip_ospf_authentication_cmd
,
6138 "ip ospf authentication",
6140 "OSPF interface commands\n"
6141 "Enable authentication on this interface\n")
6143 DEFUN (no_ip_ospf_authentication_args
,
6144 no_ip_ospf_authentication_args_addr_cmd
,
6145 "no ip ospf authentication (null|message-digest) A.B.C.D",
6148 "OSPF interface commands\n"
6149 "Enable authentication on this interface\n"
6150 "Use null authentication\n"
6151 "Use message-digest authentication\n"
6152 "Address of interface")
6154 struct interface
*ifp
;
6155 struct in_addr addr
;
6157 struct ospf_if_params
*params
;
6158 struct route_node
*rn
;
6162 params
= IF_DEF_PARAMS (ifp
);
6166 ret
= inet_aton(argv
[1], &addr
);
6169 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6174 params
= ospf_lookup_if_params (ifp
, addr
);
6177 vty_out (vty
, "Ip Address specified is unknown%s", VTY_NEWLINE
);
6180 params
->auth_type
= OSPF_AUTH_NOTSET
;
6181 UNSET_IF_PARAM (params
, auth_type
);
6182 if (params
!= IF_DEF_PARAMS (ifp
))
6184 ospf_free_if_params (ifp
, addr
);
6185 ospf_if_update_params (ifp
, addr
);
6190 if ( argv
[0][0] == 'n' )
6192 auth_type
= OSPF_AUTH_NULL
;
6194 else if ( argv
[0][0] == 'm' )
6196 auth_type
= OSPF_AUTH_CRYPTOGRAPHIC
;
6200 vty_out (vty
, "Unexpected input encountered%s", VTY_NEWLINE
);
6204 * Here we have a case where the user has entered
6205 * 'no ip ospf authentication (null | message_digest )'
6206 * we need to find if we have any ip addresses underneath it that
6207 * correspond to the associated type.
6209 if (params
->auth_type
== auth_type
)
6211 params
->auth_type
= OSPF_AUTH_NOTSET
;
6212 UNSET_IF_PARAM (params
, auth_type
);
6215 for (rn
= route_top (IF_OIFS_PARAMS (ifp
)); rn
; rn
= route_next (rn
))
6217 if ((params
= rn
->info
))
6219 if (params
->auth_type
== auth_type
)
6221 params
->auth_type
= OSPF_AUTH_NOTSET
;
6222 UNSET_IF_PARAM (params
, auth_type
);
6223 if (params
!= IF_DEF_PARAMS (ifp
))
6225 ospf_free_if_params (ifp
, rn
->p
.u
.prefix4
);
6226 ospf_if_update_params(ifp
, rn
->p
.u
.prefix4
);
6236 ALIAS (no_ip_ospf_authentication_args
,
6237 no_ip_ospf_authentication_args_cmd
,
6238 "no ip ospf authentication (null|message-digest)",
6241 "OSPF interface commands\n"
6242 "Enable authentication on this interface\n"
6243 "Use null authentication\n"
6244 "Use message-digest authentication\n")
6246 DEFUN (no_ip_ospf_authentication
,
6247 no_ip_ospf_authentication_addr_cmd
,
6248 "no ip ospf authentication A.B.C.D",
6251 "OSPF interface commands\n"
6252 "Enable authentication on this interface\n"
6253 "Address of interface")
6255 struct interface
*ifp
;
6256 struct in_addr addr
;
6258 struct ospf_if_params
*params
;
6259 struct route_node
*rn
;
6262 params
= IF_DEF_PARAMS (ifp
);
6266 ret
= inet_aton(argv
[0], &addr
);
6269 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6274 params
= ospf_lookup_if_params (ifp
, addr
);
6277 vty_out (vty
, "Ip Address specified is unknown%s", VTY_NEWLINE
);
6281 params
->auth_type
= OSPF_AUTH_NOTSET
;
6282 UNSET_IF_PARAM (params
, auth_type
);
6283 if (params
!= IF_DEF_PARAMS (ifp
))
6285 ospf_free_if_params (ifp
, addr
);
6286 ospf_if_update_params (ifp
, addr
);
6292 * When a user enters 'no ip ospf authentication'
6293 * We should remove all authentication types from
6296 if ((params
->auth_type
== OSPF_AUTH_NULL
) ||
6297 (params
->auth_type
== OSPF_AUTH_CRYPTOGRAPHIC
) ||
6298 (params
->auth_type
== OSPF_AUTH_SIMPLE
))
6300 params
->auth_type
= OSPF_AUTH_NOTSET
;
6301 UNSET_IF_PARAM (params
, auth_type
);
6304 for (rn
= route_top (IF_OIFS_PARAMS (ifp
)); rn
; rn
= route_next (rn
))
6306 if ((params
= rn
->info
))
6309 if ((params
->auth_type
== OSPF_AUTH_NULL
) ||
6310 (params
->auth_type
== OSPF_AUTH_CRYPTOGRAPHIC
) ||
6311 (params
->auth_type
== OSPF_AUTH_SIMPLE
))
6313 params
->auth_type
= OSPF_AUTH_NOTSET
;
6314 UNSET_IF_PARAM (params
, auth_type
);
6315 if (params
!= IF_DEF_PARAMS (ifp
))
6317 ospf_free_if_params (ifp
, rn
->p
.u
.prefix4
);
6318 ospf_if_update_params(ifp
, rn
->p
.u
.prefix4
);
6328 ALIAS (no_ip_ospf_authentication
,
6329 no_ip_ospf_authentication_cmd
,
6330 "no ip ospf authentication",
6333 "OSPF interface commands\n"
6334 "Enable authentication on this interface\n")
6336 DEFUN (ip_ospf_authentication_key
,
6337 ip_ospf_authentication_key_addr_cmd
,
6338 "ip ospf authentication-key AUTH_KEY A.B.C.D",
6340 "OSPF interface commands\n"
6341 "Authentication password (key)\n"
6342 "The OSPF password (key)\n"
6343 "Address of interface")
6345 struct interface
*ifp
;
6346 struct in_addr addr
;
6348 struct ospf_if_params
*params
;
6351 params
= IF_DEF_PARAMS (ifp
);
6355 ret
= inet_aton(argv
[1], &addr
);
6358 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6363 params
= ospf_get_if_params (ifp
, addr
);
6364 ospf_if_update_params (ifp
, addr
);
6367 memset (params
->auth_simple
, 0, OSPF_AUTH_SIMPLE_SIZE
+ 1);
6368 strncpy ((char *) params
->auth_simple
, argv
[0], OSPF_AUTH_SIMPLE_SIZE
);
6369 SET_IF_PARAM (params
, auth_simple
);
6374 ALIAS (ip_ospf_authentication_key
,
6375 ip_ospf_authentication_key_cmd
,
6376 "ip ospf authentication-key AUTH_KEY",
6378 "OSPF interface commands\n"
6379 "Authentication password (key)\n"
6380 "The OSPF password (key)")
6382 ALIAS_HIDDEN (ip_ospf_authentication_key
,
6383 ospf_authentication_key_cmd
,
6384 "ospf authentication-key AUTH_KEY",
6385 "OSPF interface commands\n"
6386 "Authentication password (key)\n"
6387 "The OSPF password (key)")
6389 DEFUN (no_ip_ospf_authentication_key
,
6390 no_ip_ospf_authentication_key_authkey_addr_cmd
,
6391 "no ip ospf authentication-key AUTH_KEY A.B.C.D",
6394 "OSPF interface commands\n"
6395 "Authentication password (key)\n"
6396 "The OSPF password (key)")
6398 struct interface
*ifp
;
6399 struct in_addr addr
;
6400 struct ospf_if_params
*params
;
6404 params
= IF_DEF_PARAMS (ifp
);
6408 ret
= inet_aton(argv
[1], &addr
);
6411 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6416 params
= ospf_lookup_if_params (ifp
, addr
);
6421 memset (params
->auth_simple
, 0, OSPF_AUTH_SIMPLE_SIZE
);
6422 UNSET_IF_PARAM (params
, auth_simple
);
6424 if (params
!= IF_DEF_PARAMS (ifp
))
6426 ospf_free_if_params (ifp
, addr
);
6427 ospf_if_update_params (ifp
, addr
);
6433 ALIAS (no_ip_ospf_authentication_key
,
6434 no_ip_ospf_authentication_key_authkey_cmd
,
6435 "no ip ospf authentication-key AUTH_KEY",
6438 "OSPF interface commands\n"
6439 "Authentication password (key)\n")
6441 ALIAS (no_ip_ospf_authentication_key
,
6442 no_ip_ospf_authentication_key_cmd
,
6443 "no ip ospf authentication-key",
6446 "OSPF interface commands\n"
6447 "Authentication password (key)\n")
6449 ALIAS (no_ip_ospf_authentication_key
,
6450 no_ospf_authentication_key_cmd
,
6451 "no ospf authentication-key",
6453 "OSPF interface commands\n"
6454 "Authentication password (key)\n")
6456 ALIAS (no_ip_ospf_authentication_key
,
6457 no_ospf_authentication_key_authkey_cmd
,
6458 "no ospf authentication-key AUTH_KEY",
6460 "OSPF interface commands\n"
6461 "Authentication password (key)\n"
6462 "The OSPF password (key)\n")
6464 ALIAS (no_ip_ospf_authentication_key
,
6465 no_ospf_authentication_key_authkey_ip_cmd
,
6466 "no ospf authentication-key AUTH_KEY A.B.C.D",
6468 "OSPF interface commands\n"
6469 "Authentication password (key)\n"
6470 "The OSPF password (key)\n"
6471 "Address of interface")
6473 DEFUN (ip_ospf_message_digest_key
,
6474 ip_ospf_message_digest_key_addr_cmd
,
6475 "ip ospf message-digest-key <1-255> md5 KEY A.B.C.D",
6477 "OSPF interface commands\n"
6478 "Message digest authentication password (key)\n"
6480 "Use MD5 algorithm\n"
6481 "The OSPF password (key)"
6482 "Address of interface")
6484 struct interface
*ifp
;
6485 struct crypt_key
*ck
;
6487 struct in_addr addr
;
6489 struct ospf_if_params
*params
;
6492 params
= IF_DEF_PARAMS (ifp
);
6496 ret
= inet_aton(argv
[2], &addr
);
6499 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6504 params
= ospf_get_if_params (ifp
, addr
);
6505 ospf_if_update_params (ifp
, addr
);
6508 key_id
= strtol (argv
[0], NULL
, 10);
6509 if (ospf_crypt_key_lookup (params
->auth_crypt
, key_id
) != NULL
)
6511 vty_out (vty
, "OSPF: Key %d already exists%s", key_id
, VTY_NEWLINE
);
6515 ck
= ospf_crypt_key_new ();
6516 ck
->key_id
= (u_char
) key_id
;
6517 memset (ck
->auth_key
, 0, OSPF_AUTH_MD5_SIZE
+1);
6518 strncpy ((char *) ck
->auth_key
, argv
[1], OSPF_AUTH_MD5_SIZE
);
6520 ospf_crypt_key_add (params
->auth_crypt
, ck
);
6521 SET_IF_PARAM (params
, auth_crypt
);
6526 ALIAS (ip_ospf_message_digest_key
,
6527 ip_ospf_message_digest_key_cmd
,
6528 "ip ospf message-digest-key <1-255> md5 KEY",
6530 "OSPF interface commands\n"
6531 "Message digest authentication password (key)\n"
6533 "Use MD5 algorithm\n"
6534 "The OSPF password (key)")
6536 ALIAS_HIDDEN (ip_ospf_message_digest_key
,
6537 ospf_message_digest_key_cmd
,
6538 "ospf message-digest-key <1-255> md5 KEY",
6539 "OSPF interface commands\n"
6540 "Message digest authentication password (key)\n"
6542 "Use MD5 algorithm\n"
6543 "The OSPF password (key)")
6545 DEFUN (no_ip_ospf_message_digest_key_md5
,
6546 no_ip_ospf_message_digest_key_md5_addr_cmd
,
6547 "no ip ospf message-digest-key <1-255> md5 KEY A.B.C.D",
6550 "OSPF interface commands\n"
6551 "Message digest authentication password (key)\n"
6553 "Use MD5 algorithm\n"
6554 "The OSPF password (key)"
6555 "Address of interface")
6557 struct interface
*ifp
;
6558 struct crypt_key
*ck
;
6560 struct in_addr addr
;
6562 struct ospf_if_params
*params
;
6565 params
= IF_DEF_PARAMS (ifp
);
6569 ret
= inet_aton(argv
[2], &addr
);
6572 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6577 params
= ospf_lookup_if_params (ifp
, addr
);
6582 key_id
= strtol (argv
[0], NULL
, 10);
6583 ck
= ospf_crypt_key_lookup (params
->auth_crypt
, key_id
);
6586 vty_out (vty
, "OSPF: Key %d does not exist%s", key_id
, VTY_NEWLINE
);
6590 ospf_crypt_key_delete (params
->auth_crypt
, key_id
);
6592 if (params
!= IF_DEF_PARAMS (ifp
))
6594 ospf_free_if_params (ifp
, addr
);
6595 ospf_if_update_params (ifp
, addr
);
6601 ALIAS (no_ip_ospf_message_digest_key_md5
,
6602 no_ip_ospf_message_digest_key_md5_cmd
,
6603 "no ip ospf message-digest-key <1-255> md5 KEY",
6606 "OSPF interface commands\n"
6607 "Message digest authentication password (key)\n"
6609 "Use MD5 algorithm\n"
6610 "The OSPF password (key)")
6612 DEFUN (no_ip_ospf_message_digest_key
,
6613 no_ip_ospf_message_digest_key_addr_cmd
,
6614 "no ip ospf message-digest-key <1-255> A.B.C.D",
6617 "OSPF interface commands\n"
6618 "Message digest authentication password (key)\n"
6620 "Address of interface")
6622 struct interface
*ifp
;
6623 struct crypt_key
*ck
;
6625 struct in_addr addr
;
6627 struct ospf_if_params
*params
;
6630 params
= IF_DEF_PARAMS (ifp
);
6634 ret
= inet_aton(argv
[1], &addr
);
6637 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6642 params
= ospf_lookup_if_params (ifp
, addr
);
6647 key_id
= strtol (argv
[0], NULL
, 10);
6648 ck
= ospf_crypt_key_lookup (params
->auth_crypt
, key_id
);
6651 vty_out (vty
, "OSPF: Key %d does not exist%s", key_id
, VTY_NEWLINE
);
6655 ospf_crypt_key_delete (params
->auth_crypt
, key_id
);
6657 if (params
!= IF_DEF_PARAMS (ifp
))
6659 ospf_free_if_params (ifp
, addr
);
6660 ospf_if_update_params (ifp
, addr
);
6666 ALIAS (no_ip_ospf_message_digest_key
,
6667 no_ip_ospf_message_digest_key_cmd
,
6668 "no ip ospf message-digest-key <1-255>",
6671 "OSPF interface commands\n"
6672 "Message digest authentication password (key)\n"
6675 ALIAS (no_ip_ospf_message_digest_key
,
6676 no_ospf_message_digest_key_cmd
,
6677 "no ospf message-digest-key <1-255>",
6679 "OSPF interface commands\n"
6680 "Message digest authentication password (key)\n"
6683 DEFUN (ip_ospf_cost
,
6684 ip_ospf_cost_u32_inet4_cmd
,
6685 "ip ospf cost <1-65535> A.B.C.D",
6687 "OSPF interface commands\n"
6690 "Address of interface")
6692 struct interface
*ifp
= vty
->index
;
6694 struct in_addr addr
;
6696 struct ospf_if_params
*params
;
6698 params
= IF_DEF_PARAMS (ifp
);
6700 cost
= strtol (argv
[0], NULL
, 10);
6702 /* cost range is <1-65535>. */
6703 if (cost
< 1 || cost
> 65535)
6705 vty_out (vty
, "Interface output cost is invalid%s", VTY_NEWLINE
);
6711 ret
= inet_aton(argv
[1], &addr
);
6714 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6719 params
= ospf_get_if_params (ifp
, addr
);
6720 ospf_if_update_params (ifp
, addr
);
6723 SET_IF_PARAM (params
, output_cost_cmd
);
6724 params
->output_cost_cmd
= cost
;
6726 ospf_if_recalculate_output_cost (ifp
);
6731 ALIAS (ip_ospf_cost
,
6732 ip_ospf_cost_u32_cmd
,
6733 "ip ospf cost <1-65535>",
6735 "OSPF interface commands\n"
6739 ALIAS_HIDDEN (ip_ospf_cost
,
6741 "ospf cost <1-65535>",
6742 "OSPF interface commands\n"
6746 ALIAS_HIDDEN (ip_ospf_cost
,
6747 ospf_cost_u32_inet4_cmd
,
6748 "ospf cost <1-65535> A.B.C.D",
6749 "OSPF interface commands\n"
6752 "Address of interface")
6754 DEFUN (no_ip_ospf_cost
,
6755 no_ip_ospf_cost_inet4_cmd
,
6756 "no ip ospf cost A.B.C.D",
6759 "OSPF interface commands\n"
6761 "Address of interface")
6763 struct interface
*ifp
= vty
->index
;
6764 struct in_addr addr
;
6766 struct ospf_if_params
*params
;
6769 params
= IF_DEF_PARAMS (ifp
);
6773 ret
= inet_aton(argv
[0], &addr
);
6776 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6781 params
= ospf_lookup_if_params (ifp
, addr
);
6786 UNSET_IF_PARAM (params
, output_cost_cmd
);
6788 if (params
!= IF_DEF_PARAMS (ifp
))
6790 ospf_free_if_params (ifp
, addr
);
6791 ospf_if_update_params (ifp
, addr
);
6794 ospf_if_recalculate_output_cost (ifp
);
6799 ALIAS (no_ip_ospf_cost
,
6800 no_ip_ospf_cost_cmd
,
6804 "OSPF interface commands\n"
6807 ALIAS (no_ip_ospf_cost
,
6811 "OSPF interface commands\n"
6814 ALIAS (no_ip_ospf_cost
,
6815 no_ospf_cost_inet4_cmd
,
6816 "no ospf cost A.B.C.D",
6818 "OSPF interface commands\n"
6820 "Address of interface")
6822 DEFUN (no_ip_ospf_cost2
,
6823 no_ip_ospf_cost_u32_cmd
,
6824 "no ip ospf cost <1-65535>",
6827 "OSPF interface commands\n"
6831 struct interface
*ifp
= vty
->index
;
6832 struct in_addr addr
;
6835 struct ospf_if_params
*params
;
6838 params
= IF_DEF_PARAMS (ifp
);
6840 /* According to the semantics we are mimicking "no ip ospf cost N" is
6841 * always treated as "no ip ospf cost" regardless of the actual value
6842 * of N already configured for the interface. Thus the first argument
6843 * is always checked to be a number, but is ignored after that.
6845 cost
= strtol (argv
[0], NULL
, 10);
6846 if (cost
< 1 || cost
> 65535)
6848 vty_out (vty
, "Interface output cost is invalid%s", VTY_NEWLINE
);
6854 ret
= inet_aton(argv
[1], &addr
);
6857 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6862 params
= ospf_lookup_if_params (ifp
, addr
);
6867 UNSET_IF_PARAM (params
, output_cost_cmd
);
6869 if (params
!= IF_DEF_PARAMS (ifp
))
6871 ospf_free_if_params (ifp
, addr
);
6872 ospf_if_update_params (ifp
, addr
);
6875 ospf_if_recalculate_output_cost (ifp
);
6880 ALIAS (no_ip_ospf_cost2
,
6881 no_ospf_cost_u32_cmd
,
6882 "no ospf cost <1-65535>",
6884 "OSPF interface commands\n"
6888 ALIAS (no_ip_ospf_cost2
,
6889 no_ip_ospf_cost_u32_inet4_cmd
,
6890 "no ip ospf cost <1-65535> A.B.C.D",
6893 "OSPF interface commands\n"
6896 "Address of interface")
6898 ALIAS (no_ip_ospf_cost2
,
6899 no_ospf_cost_u32_inet4_cmd
,
6900 "no ospf cost <1-65535> A.B.C.D",
6902 "OSPF interface commands\n"
6905 "Address of interface")
6908 ospf_nbr_timer_update (struct ospf_interface
*oi
)
6910 struct route_node
*rn
;
6911 struct ospf_neighbor
*nbr
;
6913 for (rn
= route_top (oi
->nbrs
); rn
; rn
= route_next (rn
))
6914 if ((nbr
= rn
->info
))
6916 nbr
->v_inactivity
= OSPF_IF_PARAM (oi
, v_wait
);
6917 nbr
->v_db_desc
= OSPF_IF_PARAM (oi
, retransmit_interval
);
6918 nbr
->v_ls_req
= OSPF_IF_PARAM (oi
, retransmit_interval
);
6919 nbr
->v_ls_upd
= OSPF_IF_PARAM (oi
, retransmit_interval
);
6924 ospf_vty_dead_interval_set (struct vty
*vty
, const char *interval_str
,
6925 const char *nbr_str
,
6926 const char *fast_hello_str
)
6928 struct interface
*ifp
= vty
->index
;
6931 struct in_addr addr
;
6933 struct ospf_if_params
*params
;
6934 struct ospf_interface
*oi
;
6935 struct route_node
*rn
;
6937 params
= IF_DEF_PARAMS (ifp
);
6941 ret
= inet_aton(nbr_str
, &addr
);
6944 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
6949 params
= ospf_get_if_params (ifp
, addr
);
6950 ospf_if_update_params (ifp
, addr
);
6955 VTY_GET_INTEGER_RANGE ("Router Dead Interval", seconds
, interval_str
,
6958 /* reset fast_hello too, just to be sure */
6959 UNSET_IF_PARAM (params
, fast_hello
);
6960 params
->fast_hello
= OSPF_FAST_HELLO_DEFAULT
;
6962 else if (fast_hello_str
)
6964 VTY_GET_INTEGER_RANGE ("Hello Multiplier", hellomult
, fast_hello_str
,
6966 /* 1s dead-interval with sub-second hellos desired */
6967 seconds
= OSPF_ROUTER_DEAD_INTERVAL_MINIMAL
;
6968 SET_IF_PARAM (params
, fast_hello
);
6969 params
->fast_hello
= hellomult
;
6973 vty_out (vty
, "Please specify dead-interval or hello-multiplier%s",
6978 SET_IF_PARAM (params
, v_wait
);
6979 params
->v_wait
= seconds
;
6981 /* Update timer values in neighbor structure. */
6985 if ((ospf
= ospf_lookup()))
6987 oi
= ospf_if_lookup_by_local_addr (ospf
, ifp
, addr
);
6989 ospf_nbr_timer_update (oi
);
6994 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
6995 if ((oi
= rn
->info
))
6996 ospf_nbr_timer_update (oi
);
7003 DEFUN (ip_ospf_dead_interval
,
7004 ip_ospf_dead_interval_addr_cmd
,
7005 "ip ospf dead-interval <1-65535> A.B.C.D",
7007 "OSPF interface commands\n"
7008 "Interval after which a neighbor is declared dead\n"
7010 "Address of interface\n")
7013 return ospf_vty_dead_interval_set (vty
, argv
[0], argv
[1], NULL
);
7015 return ospf_vty_dead_interval_set (vty
, argv
[0], NULL
, NULL
);
7018 ALIAS (ip_ospf_dead_interval
,
7019 ip_ospf_dead_interval_cmd
,
7020 "ip ospf dead-interval <1-65535>",
7022 "OSPF interface commands\n"
7023 "Interval after which a neighbor is declared dead\n"
7026 ALIAS_HIDDEN (ip_ospf_dead_interval
,
7027 ospf_dead_interval_cmd
,
7028 "ospf dead-interval <1-65535>",
7029 "OSPF interface commands\n"
7030 "Interval after which a neighbor is declared dead\n"
7033 DEFUN (ip_ospf_dead_interval_minimal
,
7034 ip_ospf_dead_interval_minimal_addr_cmd
,
7035 "ip ospf dead-interval minimal hello-multiplier <1-10> A.B.C.D",
7037 "OSPF interface commands\n"
7038 "Interval after which a neighbor is declared dead\n"
7039 "Minimal 1s dead-interval with fast sub-second hellos\n"
7040 "Hello multiplier factor\n"
7041 "Number of Hellos to send each second\n"
7042 "Address of interface\n")
7045 return ospf_vty_dead_interval_set (vty
, NULL
, argv
[1], argv
[0]);
7047 return ospf_vty_dead_interval_set (vty
, NULL
, NULL
, argv
[0]);
7050 ALIAS (ip_ospf_dead_interval_minimal
,
7051 ip_ospf_dead_interval_minimal_cmd
,
7052 "ip ospf dead-interval minimal hello-multiplier <1-10>",
7054 "OSPF interface commands\n"
7055 "Interval after which a neighbor is declared dead\n"
7056 "Minimal 1s dead-interval with fast sub-second hellos\n"
7057 "Hello multiplier factor\n"
7058 "Number of Hellos to send each second\n")
7060 DEFUN (no_ip_ospf_dead_interval
,
7061 no_ip_ospf_dead_interval_addr_cmd
,
7062 "no ip ospf dead-interval <1-65535> A.B.C.D",
7065 "OSPF interface commands\n"
7066 "Interval after which a neighbor is declared dead\n"
7068 "Address of interface")
7070 struct interface
*ifp
= vty
->index
;
7071 struct in_addr addr
;
7073 struct ospf_if_params
*params
;
7074 struct ospf_interface
*oi
;
7075 struct route_node
*rn
;
7078 params
= IF_DEF_PARAMS (ifp
);
7082 ret
= inet_aton(argv
[1], &addr
);
7085 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7090 params
= ospf_lookup_if_params (ifp
, addr
);
7095 UNSET_IF_PARAM (params
, v_wait
);
7096 params
->v_wait
= OSPF_ROUTER_DEAD_INTERVAL_DEFAULT
;
7098 UNSET_IF_PARAM (params
, fast_hello
);
7099 params
->fast_hello
= OSPF_FAST_HELLO_DEFAULT
;
7101 if (params
!= IF_DEF_PARAMS (ifp
))
7103 ospf_free_if_params (ifp
, addr
);
7104 ospf_if_update_params (ifp
, addr
);
7107 /* Update timer values in neighbor structure. */
7112 if ((ospf
= ospf_lookup()))
7114 oi
= ospf_if_lookup_by_local_addr (ospf
, ifp
, addr
);
7116 ospf_nbr_timer_update (oi
);
7121 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7122 if ((oi
= rn
->info
))
7123 ospf_nbr_timer_update (oi
);
7129 ALIAS (no_ip_ospf_dead_interval
,
7130 no_ip_ospf_dead_interval_seconds_cmd
,
7131 "no ip ospf dead-interval <1-65535>",
7134 "OSPF interface commands\n"
7135 "Interval after which a neighbor is declared dead\n"
7138 ALIAS (no_ip_ospf_dead_interval
,
7139 no_ip_ospf_dead_interval_cmd
,
7140 "no ip ospf dead-interval",
7143 "OSPF interface commands\n"
7144 "Interval after which a neighbor is declared dead\n")
7146 ALIAS (no_ip_ospf_dead_interval
,
7147 no_ospf_dead_interval_cmd
,
7148 "no ospf dead-interval",
7150 "OSPF interface commands\n"
7151 "Interval after which a neighbor is declared dead\n")
7153 ALIAS (no_ip_ospf_dead_interval
,
7154 no_ip_ospf_dead_interval_minimal_addr_cmd
,
7155 "no ip ospf dead-interval minimal hello-multiplier <1-10> A.B.C.D",
7158 "OSPF interface commands\n"
7159 "Interval after which a neighbor is declared dead\n"
7160 "Minimal 1s dead-interval with fast sub-second hellos\n"
7161 "Hello multiplier factor\n"
7162 "Number of Hellos to send each second\n"
7163 "Address of interface\n")
7165 ALIAS (no_ip_ospf_dead_interval
,
7166 no_ip_ospf_dead_interval_minimal_cmd
,
7167 "no ip ospf dead-interval minimal hello-multiplier <1-10>",
7170 "OSPF interface commands\n"
7171 "Interval after which a neighbor is declared dead\n"
7172 "Minimal 1s dead-interval with fast sub-second hellos\n"
7173 "Hello multiplier factor\n"
7174 "Number of Hellos to send each second\n")
7176 DEFUN (ip_ospf_hello_interval
,
7177 ip_ospf_hello_interval_addr_cmd
,
7178 "ip ospf hello-interval <1-65535> A.B.C.D",
7180 "OSPF interface commands\n"
7181 "Time between HELLO packets\n"
7183 "Address of interface")
7185 struct interface
*ifp
= vty
->index
;
7187 struct in_addr addr
;
7189 struct ospf_if_params
*params
;
7191 params
= IF_DEF_PARAMS (ifp
);
7193 seconds
= strtol (argv
[0], NULL
, 10);
7195 /* HelloInterval range is <1-65535>. */
7196 if (seconds
< 1 || seconds
> 65535)
7198 vty_out (vty
, "Hello Interval is invalid%s", VTY_NEWLINE
);
7204 ret
= inet_aton(argv
[1], &addr
);
7207 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7212 params
= ospf_get_if_params (ifp
, addr
);
7213 ospf_if_update_params (ifp
, addr
);
7216 SET_IF_PARAM (params
, v_hello
);
7217 params
->v_hello
= seconds
;
7222 ALIAS (ip_ospf_hello_interval
,
7223 ip_ospf_hello_interval_cmd
,
7224 "ip ospf hello-interval <1-65535>",
7226 "OSPF interface commands\n"
7227 "Time between HELLO packets\n"
7230 ALIAS_HIDDEN (ip_ospf_hello_interval
,
7231 ospf_hello_interval_cmd
,
7232 "ospf hello-interval <1-65535>",
7233 "OSPF interface commands\n"
7234 "Time between HELLO packets\n"
7237 DEFUN (no_ip_ospf_hello_interval
,
7238 no_ip_ospf_hello_interval_addr_cmd
,
7239 "no ip ospf hello-interval <1-65535> A.B.C.D",
7242 "OSPF interface commands\n"
7243 "Time between HELLO packets\n"
7245 "Address of interface")
7247 struct interface
*ifp
= vty
->index
;
7248 struct in_addr addr
;
7250 struct ospf_if_params
*params
;
7253 params
= IF_DEF_PARAMS (ifp
);
7257 ret
= inet_aton(argv
[1], &addr
);
7260 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7265 params
= ospf_lookup_if_params (ifp
, addr
);
7270 UNSET_IF_PARAM (params
, v_hello
);
7271 params
->v_hello
= OSPF_HELLO_INTERVAL_DEFAULT
;
7273 if (params
!= IF_DEF_PARAMS (ifp
))
7275 ospf_free_if_params (ifp
, addr
);
7276 ospf_if_update_params (ifp
, addr
);
7282 ALIAS (no_ip_ospf_hello_interval
,
7283 no_ip_ospf_hello_interval_seconds_cmd
,
7284 "no ip ospf hello-interval <1-65535>",
7287 "OSPF interface commands\n"
7288 "Time between HELLO packets\n"
7291 ALIAS (no_ip_ospf_hello_interval
,
7292 no_ip_ospf_hello_interval_cmd
,
7293 "no ip ospf hello-interval",
7296 "OSPF interface commands\n"
7297 "Time between HELLO packets\n")
7299 ALIAS (no_ip_ospf_hello_interval
,
7300 no_ospf_hello_interval_cmd
,
7301 "no ospf hello-interval <1-65535>",
7303 "OSPF interface commands\n"
7304 "Time between HELLO packets\n"
7307 DEFUN (ip_ospf_network
,
7308 ip_ospf_network_cmd
,
7309 "ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
7311 "OSPF interface commands\n"
7313 "Specify OSPF broadcast multi-access network\n"
7314 "Specify OSPF NBMA network\n"
7315 "Specify OSPF point-to-multipoint network\n"
7316 "Specify OSPF point-to-point network\n")
7318 struct interface
*ifp
= vty
->index
;
7319 int old_type
= IF_DEF_PARAMS (ifp
)->type
;
7320 struct route_node
*rn
;
7322 if (old_type
== OSPF_IFTYPE_LOOPBACK
)
7324 vty_out (vty
, "This is a loopback interface. Can't set network type.%s", VTY_NEWLINE
);
7328 if (strncmp (argv
[0], "b", 1) == 0)
7329 IF_DEF_PARAMS (ifp
)->type
= OSPF_IFTYPE_BROADCAST
;
7330 else if (strncmp (argv
[0], "n", 1) == 0)
7331 IF_DEF_PARAMS (ifp
)->type
= OSPF_IFTYPE_NBMA
;
7332 else if (strncmp (argv
[0], "point-to-m", 10) == 0)
7333 IF_DEF_PARAMS (ifp
)->type
= OSPF_IFTYPE_POINTOMULTIPOINT
;
7334 else if (strncmp (argv
[0], "point-to-p", 10) == 0)
7335 IF_DEF_PARAMS (ifp
)->type
= OSPF_IFTYPE_POINTOPOINT
;
7337 if (IF_DEF_PARAMS (ifp
)->type
== old_type
)
7340 SET_IF_PARAM (IF_DEF_PARAMS (ifp
), type
);
7342 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7344 struct ospf_interface
*oi
= rn
->info
;
7349 oi
->type
= IF_DEF_PARAMS (ifp
)->type
;
7351 if (oi
->state
> ISM_Down
)
7353 OSPF_ISM_EVENT_EXECUTE (oi
, ISM_InterfaceDown
);
7354 OSPF_ISM_EVENT_EXECUTE (oi
, ISM_InterfaceUp
);
7361 ALIAS_HIDDEN (ip_ospf_network
,
7363 "ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
7364 "OSPF interface commands\n"
7366 "Specify OSPF broadcast multi-access network\n"
7367 "Specify OSPF NBMA network\n"
7368 "Specify OSPF point-to-multipoint network\n"
7369 "Specify OSPF point-to-point network\n")
7371 DEFUN (no_ip_ospf_network
,
7372 no_ip_ospf_network_cmd
,
7373 "no ip ospf network",
7376 "OSPF interface commands\n"
7379 struct interface
*ifp
= vty
->index
;
7380 int old_type
= IF_DEF_PARAMS (ifp
)->type
;
7381 struct route_node
*rn
;
7383 IF_DEF_PARAMS (ifp
)->type
= ospf_default_iftype(ifp
);
7385 if (IF_DEF_PARAMS (ifp
)->type
== old_type
)
7388 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7390 struct ospf_interface
*oi
= rn
->info
;
7395 oi
->type
= IF_DEF_PARAMS (ifp
)->type
;
7397 if (oi
->state
> ISM_Down
)
7399 OSPF_ISM_EVENT_EXECUTE (oi
, ISM_InterfaceDown
);
7400 OSPF_ISM_EVENT_EXECUTE (oi
, ISM_InterfaceUp
);
7407 ALIAS (no_ip_ospf_network
,
7408 no_ip_ospf_network_val_cmd
,
7409 "no ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
7412 "OSPF interface commands\n"
7414 "Specify OSPF broadcast multi-access network\n"
7415 "Specify OSPF NBMA network\n"
7416 "Specify OSPF point-to-multipoint network\n"
7417 "Specify OSPF point-to-point network\n")
7419 ALIAS (no_ip_ospf_network
,
7420 no_ospf_network_cmd
,
7423 "OSPF interface commands\n"
7426 ALIAS (no_ip_ospf_network
,
7427 no_ospf_network_val_cmd
,
7428 "no ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
7430 "OSPF interface commands\n"
7432 "Specify OSPF broadcast multi-access network\n"
7433 "Specify OSPF NBMA network\n"
7434 "Specify OSPF point-to-multipoint network\n"
7435 "Specify OSPF point-to-point network\n")
7437 DEFUN (ip_ospf_priority
,
7438 ip_ospf_priority_addr_cmd
,
7439 "ip ospf priority <0-255> A.B.C.D",
7441 "OSPF interface commands\n"
7444 "Address of interface")
7446 struct interface
*ifp
= vty
->index
;
7448 struct route_node
*rn
;
7449 struct in_addr addr
;
7451 struct ospf_if_params
*params
;
7453 params
= IF_DEF_PARAMS (ifp
);
7455 priority
= strtol (argv
[0], NULL
, 10);
7457 /* Router Priority range is <0-255>. */
7458 if (priority
< 0 || priority
> 255)
7460 vty_out (vty
, "Router Priority is invalid%s", VTY_NEWLINE
);
7466 ret
= inet_aton(argv
[1], &addr
);
7469 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7474 params
= ospf_get_if_params (ifp
, addr
);
7475 ospf_if_update_params (ifp
, addr
);
7478 SET_IF_PARAM (params
, priority
);
7479 params
->priority
= priority
;
7481 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7483 struct ospf_interface
*oi
= rn
->info
;
7489 if (PRIORITY (oi
) != OSPF_IF_PARAM (oi
, priority
))
7491 PRIORITY (oi
) = OSPF_IF_PARAM (oi
, priority
);
7492 OSPF_ISM_EVENT_SCHEDULE (oi
, ISM_NeighborChange
);
7499 ALIAS (ip_ospf_priority
,
7500 ip_ospf_priority_cmd
,
7501 "ip ospf priority <0-255>",
7503 "OSPF interface commands\n"
7507 ALIAS_HIDDEN (ip_ospf_priority
,
7509 "ospf priority <0-255>",
7510 "OSPF interface commands\n"
7514 DEFUN (no_ip_ospf_priority
,
7515 no_ip_ospf_priority_addr_cmd
,
7516 "no ip ospf priority <0-255> A.B.C.D",
7519 "OSPF interface commands\n"
7522 "Address of interface")
7524 struct interface
*ifp
= vty
->index
;
7525 struct route_node
*rn
;
7526 struct in_addr addr
;
7528 struct ospf_if_params
*params
;
7531 params
= IF_DEF_PARAMS (ifp
);
7535 ret
= inet_aton(argv
[1], &addr
);
7538 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7543 params
= ospf_lookup_if_params (ifp
, addr
);
7548 UNSET_IF_PARAM (params
, priority
);
7549 params
->priority
= OSPF_ROUTER_PRIORITY_DEFAULT
;
7551 if (params
!= IF_DEF_PARAMS (ifp
))
7553 ospf_free_if_params (ifp
, addr
);
7554 ospf_if_update_params (ifp
, addr
);
7557 for (rn
= route_top (IF_OIFS (ifp
)); rn
; rn
= route_next (rn
))
7559 struct ospf_interface
*oi
= rn
->info
;
7565 if (PRIORITY (oi
) != OSPF_IF_PARAM (oi
, priority
))
7567 PRIORITY (oi
) = OSPF_IF_PARAM (oi
, priority
);
7568 OSPF_ISM_EVENT_SCHEDULE (oi
, ISM_NeighborChange
);
7575 ALIAS (no_ip_ospf_priority
,
7576 no_ip_ospf_priority_no_param_cmd
,
7577 "no ip ospf priority",
7580 "OSPF interface commands\n"
7581 "Router priority\n");
7583 ALIAS (no_ip_ospf_priority
,
7584 no_ip_ospf_priority_cmd
,
7585 "no ip ospf priority <0-255>",
7588 "OSPF interface commands\n"
7592 ALIAS (no_ip_ospf_priority
,
7593 no_ospf_priority_cmd
,
7594 "no ospf priority <0-255>",
7596 "OSPF interface commands\n"
7601 DEFUN (ip_ospf_retransmit_interval
,
7602 ip_ospf_retransmit_interval_addr_cmd
,
7603 "ip ospf retransmit-interval <3-65535> A.B.C.D",
7605 "OSPF interface commands\n"
7606 "Time between retransmitting lost link state advertisements\n"
7608 "Address of interface")
7610 struct interface
*ifp
= vty
->index
;
7612 struct in_addr addr
;
7614 struct ospf_if_params
*params
;
7616 params
= IF_DEF_PARAMS (ifp
);
7617 seconds
= strtol (argv
[0], NULL
, 10);
7619 /* Retransmit Interval range is <3-65535>. */
7620 if (seconds
< 3 || seconds
> 65535)
7622 vty_out (vty
, "Retransmit Interval is invalid%s", VTY_NEWLINE
);
7629 ret
= inet_aton(argv
[1], &addr
);
7632 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7637 params
= ospf_get_if_params (ifp
, addr
);
7638 ospf_if_update_params (ifp
, addr
);
7641 SET_IF_PARAM (params
, retransmit_interval
);
7642 params
->retransmit_interval
= seconds
;
7647 ALIAS (ip_ospf_retransmit_interval
,
7648 ip_ospf_retransmit_interval_cmd
,
7649 "ip ospf retransmit-interval <3-65535>",
7651 "OSPF interface commands\n"
7652 "Time between retransmitting lost link state advertisements\n"
7655 ALIAS_HIDDEN (ip_ospf_retransmit_interval
,
7656 ospf_retransmit_interval_cmd
,
7657 "ospf retransmit-interval <3-65535>",
7658 "OSPF interface commands\n"
7659 "Time between retransmitting lost link state advertisements\n"
7662 DEFUN (no_ip_ospf_retransmit_interval
,
7663 no_ip_ospf_retransmit_interval_addr_cmd
,
7664 "no ip ospf retransmit-interval A.B.C.D",
7667 "OSPF interface commands\n"
7668 "Time between retransmitting lost link state advertisements\n"
7669 "Address of interface")
7671 struct interface
*ifp
= vty
->index
;
7672 struct in_addr addr
;
7674 struct ospf_if_params
*params
;
7678 params
= IF_DEF_PARAMS (ifp
);
7687 ret
= inet_aton(argv
[addr_index
], &addr
);
7690 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7695 params
= ospf_lookup_if_params (ifp
, addr
);
7700 UNSET_IF_PARAM (params
, retransmit_interval
);
7701 params
->retransmit_interval
= OSPF_RETRANSMIT_INTERVAL_DEFAULT
;
7703 if (params
!= IF_DEF_PARAMS (ifp
))
7705 ospf_free_if_params (ifp
, addr
);
7706 ospf_if_update_params (ifp
, addr
);
7712 ALIAS (no_ip_ospf_retransmit_interval
,
7713 no_ip_ospf_retransmit_interval_sec_addr_cmd
,
7714 "no ip ospf retransmit-interval <3-65535> A.B.C.D",
7717 "OSPF interface commands\n"
7718 "Time between retransmitting lost link state advertisements\n"
7720 "Address of interface")
7722 ALIAS (no_ip_ospf_retransmit_interval
,
7723 no_ip_ospf_retransmit_interval_cmd
,
7724 "no ip ospf retransmit-interval",
7727 "OSPF interface commands\n"
7728 "Time between retransmitting lost link state advertisements\n")
7730 ALIAS (no_ip_ospf_retransmit_interval
,
7731 no_ospf_retransmit_interval_cmd
,
7732 "no ospf retransmit-interval",
7734 "OSPF interface commands\n"
7735 "Time between retransmitting lost link state advertisements\n")
7737 DEFUN (no_ip_ospf_retransmit_interval_sec
,
7738 no_ip_ospf_retransmit_interval_sec_cmd
,
7739 "no ip ospf retransmit-interval <3-65535>",
7742 "OSPF interface commands\n"
7743 "Time between retransmitting lost link state advertisements\n"
7746 struct interface
*ifp
= vty
->index
;
7747 struct ospf_if_params
*params
;
7750 params
= IF_DEF_PARAMS (ifp
);
7752 UNSET_IF_PARAM (params
, retransmit_interval
);
7753 params
->retransmit_interval
= OSPF_RETRANSMIT_INTERVAL_DEFAULT
;
7759 DEFUN (ip_ospf_transmit_delay
,
7760 ip_ospf_transmit_delay_addr_cmd
,
7761 "ip ospf transmit-delay <1-65535> A.B.C.D",
7763 "OSPF interface commands\n"
7764 "Link state transmit delay\n"
7766 "Address of interface")
7768 struct interface
*ifp
= vty
->index
;
7770 struct in_addr addr
;
7772 struct ospf_if_params
*params
;
7774 params
= IF_DEF_PARAMS (ifp
);
7775 seconds
= strtol (argv
[0], NULL
, 10);
7777 /* Transmit Delay range is <1-65535>. */
7778 if (seconds
< 1 || seconds
> 65535)
7780 vty_out (vty
, "Transmit Delay is invalid%s", VTY_NEWLINE
);
7786 ret
= inet_aton(argv
[1], &addr
);
7789 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7794 params
= ospf_get_if_params (ifp
, addr
);
7795 ospf_if_update_params (ifp
, addr
);
7798 SET_IF_PARAM (params
, transmit_delay
);
7799 params
->transmit_delay
= seconds
;
7804 ALIAS (ip_ospf_transmit_delay
,
7805 ip_ospf_transmit_delay_cmd
,
7806 "ip ospf transmit-delay <1-65535>",
7808 "OSPF interface commands\n"
7809 "Link state transmit delay\n"
7812 ALIAS_HIDDEN (ip_ospf_transmit_delay
,
7813 ospf_transmit_delay_cmd
,
7814 "ospf transmit-delay <1-65535>",
7815 "OSPF interface commands\n"
7816 "Link state transmit delay\n"
7819 DEFUN (no_ip_ospf_transmit_delay
,
7820 no_ip_ospf_transmit_delay_addr_cmd
,
7821 "no ip ospf transmit-delay A.B.C.D",
7824 "OSPF interface commands\n"
7825 "Link state transmit delay\n"
7826 "Address of interface")
7828 struct interface
*ifp
= vty
->index
;
7829 struct in_addr addr
;
7831 struct ospf_if_params
*params
;
7835 params
= IF_DEF_PARAMS (ifp
);
7844 ret
= inet_aton(argv
[addr_index
], &addr
);
7847 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
7852 params
= ospf_lookup_if_params (ifp
, addr
);
7857 UNSET_IF_PARAM (params
, transmit_delay
);
7858 params
->transmit_delay
= OSPF_TRANSMIT_DELAY_DEFAULT
;
7860 if (params
!= IF_DEF_PARAMS (ifp
))
7862 ospf_free_if_params (ifp
, addr
);
7863 ospf_if_update_params (ifp
, addr
);
7869 ALIAS (no_ip_ospf_transmit_delay
,
7870 no_ip_ospf_transmit_delay_sec_addr_cmd
,
7871 "no ip ospf transmit-delay <1-65535> A.B.C.D",
7874 "OSPF interface commands\n"
7875 "Link state transmit delay\n"
7877 "Address of interface")
7879 ALIAS (no_ip_ospf_transmit_delay
,
7880 no_ip_ospf_transmit_delay_cmd
,
7881 "no ip ospf transmit-delay",
7884 "OSPF interface commands\n"
7885 "Link state transmit delay\n")
7887 ALIAS (no_ip_ospf_transmit_delay
,
7888 no_ospf_transmit_delay_cmd
,
7889 "no ospf transmit-delay",
7891 "OSPF interface commands\n"
7892 "Link state transmit delay\n")
7894 DEFUN (no_ip_ospf_transmit_delay_sec
,
7895 no_ip_ospf_transmit_delay_sec_cmd
,
7896 "no ip ospf transmit-delay <1-65535>",
7899 "OSPF interface commands\n"
7900 "Link state transmit delay\n"
7902 "Address of interface")
7904 struct interface
*ifp
= vty
->index
;
7905 struct ospf_if_params
*params
;
7908 params
= IF_DEF_PARAMS (ifp
);
7910 UNSET_IF_PARAM (params
, transmit_delay
);
7911 params
->transmit_delay
= OSPF_TRANSMIT_DELAY_DEFAULT
;
7916 DEFUN (ip_ospf_area
,
7918 "ip ospf area (A.B.C.D|<0-4294967295>)",
7920 "OSPF interface commands\n"
7921 "Enable OSPF on this interface\n"
7922 "OSPF area ID in IP address format\n"
7923 "OSPF area ID as a decimal value\n")
7925 struct interface
*ifp
= vty
->index
;
7927 struct in_addr area_id
;
7929 struct ospf_if_params
*params
;
7930 struct route_node
*rn
;
7931 u_short instance
= 0;
7934 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
7936 ospf
= ospf_lookup_instance (instance
);
7939 params
= IF_DEF_PARAMS (ifp
);
7940 if (OSPF_IF_PARAM_CONFIGURED(params
, if_area
))
7942 ospf_interface_unset (ifp
);
7943 ospf
= ospf_lookup();
7944 ospf
->if_ospf_cli_count
--;
7949 ret
= ospf_str2area_id (argv
[instance
? 1 : 0], &area_id
, &format
);
7952 vty_out (vty
, "Please specify area by A.B.C.D|<0-4294967295>%s",
7956 if (memcmp (ifp
->name
, "VLINK", 5) == 0)
7958 vty_out (vty
, "Cannot enable OSPF on a virtual link.%s", VTY_NEWLINE
);
7962 params
= IF_DEF_PARAMS (ifp
);
7963 if (OSPF_IF_PARAM_CONFIGURED(params
, if_area
))
7966 "Must remove previous area config before changing ospf area %s",
7971 for (rn
= route_top (ospf
->networks
); rn
; rn
= route_next (rn
))
7973 if (rn
->info
!= NULL
)
7975 vty_out (vty
, "Please remove all network commands first.%s", VTY_NEWLINE
);
7980 /* enable ospf on this interface with area_id */
7981 ospf_interface_set (ifp
, area_id
);
7982 ospf
->if_ospf_cli_count
++;
7987 ALIAS (ip_ospf_area
,
7988 ip_ospf_instance_area_cmd
,
7989 "ip ospf <1-65535> area (A.B.C.D|<0-4294967295>)",
7991 "OSPF interface commands\n"
7993 "Enable OSPF on this interface\n"
7994 "OSPF area ID in IP address format\n"
7995 "OSPF area ID as a decimal value\n")
7997 DEFUN (no_ip_ospf_area
,
7998 no_ip_ospf_area_cmd
,
8002 "OSPF interface commands\n"
8003 "Disable OSPF on this interface\n")
8005 struct interface
*ifp
= vty
->index
;
8007 struct ospf_if_params
*params
;
8008 u_short instance
= 0;
8010 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
)
8013 params
= IF_DEF_PARAMS (ifp
);
8014 if (!OSPF_IF_PARAM_CONFIGURED(params
, if_area
))
8016 vty_out (vty
, "Can't find specified inteface area configuration.%s", VTY_NEWLINE
);
8020 ospf_interface_unset (ifp
);
8021 ospf
->if_ospf_cli_count
--;
8025 ALIAS (no_ip_ospf_area
,
8026 no_ip_ospf_area_val_cmd
,
8027 "no ip ospf area (A.B.C.D|<0-4294967295>)",
8030 "OSPF interface commands\n"
8031 "Disable OSPF on this interface\n"
8032 "OSPF area ID in IP address format\n"
8033 "OSPF area ID as a decimal value\n")
8035 DEFUN (no_ip_ospf_instance_area
,
8036 no_ip_ospf_instance_area_cmd
,
8037 "no ip ospf <1-65535> area",
8040 "OSPF interface commands\n"
8042 "Disable OSPF on this interface\n")
8044 struct interface
*ifp
= vty
->index
;
8046 struct ospf_if_params
*params
;
8047 u_short instance
= 0;
8049 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
8051 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
)
8054 params
= IF_DEF_PARAMS (ifp
);
8055 if (!OSPF_IF_PARAM_CONFIGURED(params
, if_area
))
8057 vty_out (vty
, "Can't find specified inteface area configuration.%s", VTY_NEWLINE
);
8061 ospf_interface_unset (ifp
);
8062 ospf
->if_ospf_cli_count
--;
8066 ALIAS (no_ip_ospf_instance_area
,
8067 no_ip_ospf_instance_area_val_cmd
,
8068 "no ip ospf <1-65535> area (A.B.C.D|<0-4294967295>)",
8071 "OSPF interface commands\n"
8073 "Disable OSPF on this interface\n"
8074 "OSPF area ID in IP address format\n"
8075 "OSPF area ID as a decimal value\n")
8077 DEFUN (ospf_redistribute_source
,
8078 ospf_redistribute_source_cmd
,
8079 "redistribute " QUAGGA_REDIST_STR_OSPFD
8080 " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8082 QUAGGA_REDIST_HELP_STR_OSPFD
8083 "Metric for redistributed routes\n"
8084 "OSPF default metric\n"
8085 "OSPF exterior metric type for redistributed routes\n"
8086 "Set OSPF External Type 1 metrics\n"
8087 "Set OSPF External Type 2 metrics\n"
8088 "Route map reference\n"
8089 "Pointer to route-map entries\n")
8091 struct ospf
*ospf
= vty
->index
;
8095 struct ospf_redist
*red
;
8101 return CMD_WARNING
; /* should not happen */
8106 /* Get distribute source. */
8107 source
= proto_redistnum(AFI_IP
, argv
[0]);
8108 if (source
< 0 || source
== ZEBRA_ROUTE_OSPF
)
8111 /* Get metric value. */
8112 if (argv
[1] != NULL
)
8113 if (!str2metric (argv
[1], &metric
))
8116 /* Get metric type. */
8117 if (argv
[2] != NULL
)
8118 if (!str2metric_type (argv
[2], &type
))
8121 red
= ospf_redist_add(ospf
, source
, 0);
8123 if (argv
[3] != NULL
)
8124 ospf_routemap_set (red
, argv
[3]);
8126 ospf_routemap_unset (red
);
8128 return ospf_redistribute_set (ospf
, source
, 0, type
, metric
);
8131 DEFUN (no_ospf_redistribute_source
,
8132 no_ospf_redistribute_source_cmd
,
8133 "no redistribute " QUAGGA_REDIST_STR_OSPFD
8134 " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8137 QUAGGA_REDIST_HELP_STR_OSPFD
8138 "Metric for redistributed routes\n"
8139 "OSPF default metric\n"
8140 "OSPF exterior metric type for redistributed routes\n"
8141 "Set OSPF External Type 1 metrics\n"
8142 "Set OSPF External Type 2 metrics\n"
8143 "Route map reference\n"
8144 "Pointer to route-map entries\n")
8146 struct ospf
*ospf
= vty
->index
;
8148 struct ospf_redist
*red
;
8152 source
= proto_redistnum(AFI_IP
, argv
[0]);
8153 if (source
< 0 || source
== ZEBRA_ROUTE_OSPF
)
8156 red
= ospf_redist_lookup(ospf
, source
, 0);
8160 ospf_routemap_unset (red
);
8161 return ospf_redistribute_unset (ospf
, source
, 0);
8164 DEFUN (ospf_redistribute_instance_source
,
8165 ospf_redistribute_instance_source_cmd
,
8166 "redistribute (ospf|table) <1-65535>"
8167 " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8169 "Open Shortest Path First\n"
8170 "Non-main Kernel Routing Table\n"
8171 "Instance ID/Table ID\n"
8172 "Metric for redistributed routes\n"
8173 "OSPF default metric\n"
8174 "OSPF exterior metric type for redistributed routes\n"
8175 "Set OSPF External Type 1 metrics\n"
8176 "Set OSPF External Type 2 metrics\n"
8177 "Route map reference\n"
8178 "Pointer to route-map entries\n")
8180 struct ospf
*ospf
= vty
->index
;
8185 struct ospf_redist
*red
;
8190 if (strncmp(argv
[0], "o", 1) == 0)
8191 source
= ZEBRA_ROUTE_OSPF
;
8193 source
= ZEBRA_ROUTE_TABLE
;
8195 VTY_GET_INTEGER ("Instance ID", instance
, argv
[1]);
8200 if ((source
== ZEBRA_ROUTE_OSPF
) && !ospf
->instance
)
8202 vty_out (vty
, "Instance redistribution in non-instanced OSPF not allowed%s",
8207 if ((source
== ZEBRA_ROUTE_OSPF
) && (ospf
->instance
== instance
))
8209 vty_out (vty
, "Same instance OSPF redistribution not allowed%s",
8214 /* Get metric value. */
8215 if (argv
[2] != NULL
)
8216 if (!str2metric (argv
[2], &metric
))
8219 /* Get metric type. */
8220 if (argv
[3] != NULL
)
8221 if (!str2metric_type (argv
[3], &type
))
8224 red
= ospf_redist_add(ospf
, source
, instance
);
8225 if (argv
[4] != NULL
)
8226 ospf_routemap_set (red
, argv
[4]);
8228 ospf_routemap_unset (red
);
8230 return ospf_redistribute_set (ospf
, source
, instance
, type
, metric
);
8233 DEFUN (no_ospf_redistribute_instance_source
,
8234 no_ospf_redistribute_instance_source_cmd
,
8235 "no redistribute (ospf|table) <1-65535>"
8236 " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8239 "Open Shortest Path First\n"
8240 "Non-main Kernel Routing Table\n"
8241 "Instance ID/Table Id\n"
8242 "Metric for redistributed routes\n"
8243 "OSPF default metric\n"
8244 "OSPF exterior metric type for redistributed routes\n"
8245 "Set OSPF External Type 1 metrics\n"
8246 "Set OSPF External Type 2 metrics\n"
8247 "Route map reference\n"
8248 "Pointer to route-map entries\n")
8250 struct ospf
*ospf
= vty
->index
;
8252 struct ospf_redist
*red
;
8258 if (strncmp(argv
[0], "o", 1) == 0)
8259 source
= ZEBRA_ROUTE_OSPF
;
8261 source
= ZEBRA_ROUTE_TABLE
;
8263 VTY_GET_INTEGER ("Instance ID", instance
, argv
[1]);
8265 if ((source
== ZEBRA_ROUTE_OSPF
) && !ospf
->instance
)
8267 vty_out (vty
, "Instance redistribution in non-instanced OSPF not allowed%s",
8272 if ((source
== ZEBRA_ROUTE_OSPF
) && (ospf
->instance
== instance
))
8274 vty_out (vty
, "Same instance OSPF redistribution not allowed%s",
8279 red
= ospf_redist_lookup(ospf
, source
, instance
);
8283 ospf_routemap_unset (red
);
8284 return ospf_redistribute_unset (ospf
, source
, instance
);
8287 DEFUN (ospf_distribute_list_out
,
8288 ospf_distribute_list_out_cmd
,
8289 "distribute-list WORD out " QUAGGA_REDIST_STR_OSPFD
,
8290 "Filter networks in routing updates\n"
8291 "Access-list name\n"
8293 QUAGGA_REDIST_HELP_STR_OSPFD
)
8295 struct ospf
*ospf
= vty
->index
;
8301 /* Get distribute source. */
8302 source
= proto_redistnum(AFI_IP
, argv
[1]);
8303 if (source
< 0 || source
== ZEBRA_ROUTE_OSPF
)
8306 return ospf_distribute_list_out_set (ospf
, source
, argv
[0]);
8309 DEFUN (no_ospf_distribute_list_out
,
8310 no_ospf_distribute_list_out_cmd
,
8311 "no distribute-list WORD out " QUAGGA_REDIST_STR_OSPFD
,
8313 "Filter networks in routing updates\n"
8314 "Access-list name\n"
8316 QUAGGA_REDIST_HELP_STR_OSPFD
)
8318 struct ospf
*ospf
= vty
->index
;
8324 source
= proto_redistnum(AFI_IP
, argv
[1]);
8325 if (source
< 0 || source
== ZEBRA_ROUTE_OSPF
)
8328 return ospf_distribute_list_out_unset (ospf
, source
, argv
[0]);
8331 /* Default information originate. */
8332 DEFUN (ospf_default_information_originate
,
8333 ospf_default_information_originate_cmd
,
8334 "default-information originate "
8335 "{always|metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8336 "Control distribution of default information\n"
8337 "Distribute a default route\n"
8338 "Always advertise default route\n"
8339 "OSPF default metric\n"
8341 "OSPF metric type for default routes\n"
8342 "Set OSPF External Type 1 metrics\n"
8343 "Set OSPF External Type 2 metrics\n"
8344 "Route map reference\n"
8345 "Pointer to route-map entries\n")
8347 struct ospf
*ospf
= vty
->index
;
8348 int default_originate
= DEFAULT_ORIGINATE_ZEBRA
;
8351 struct ospf_redist
*red
;
8357 return CMD_WARNING
; /* this should not happen */
8359 /* Check whether "always" was specified */
8360 if (argv
[0] != NULL
)
8361 default_originate
= DEFAULT_ORIGINATE_ALWAYS
;
8363 red
= ospf_redist_add(ospf
, DEFAULT_ROUTE
, 0);
8365 /* Get metric value. */
8366 if (argv
[1] != NULL
)
8367 if (!str2metric (argv
[1], &metric
))
8370 /* Get metric type. */
8371 if (argv
[2] != NULL
)
8372 if (!str2metric_type (argv
[2], &type
))
8375 if (argv
[3] != NULL
)
8376 ospf_routemap_set (red
, argv
[3]);
8378 ospf_routemap_unset (red
);
8380 return ospf_redistribute_default_set (ospf
, default_originate
,
8384 DEFUN (no_ospf_default_information_originate
,
8385 no_ospf_default_information_originate_cmd
,
8386 "no default-information originate"
8387 "{always|metric <0-16777214>|metric-type (1|2)|route-map WORD}",
8389 "Control distribution of default information\n"
8390 "Distribute a default route\n"
8391 "Always advertise default route\n"
8392 "OSPF default metric\n"
8394 "OSPF metric type for default routes\n"
8395 "Set OSPF External Type 1 metrics\n"
8396 "Set OSPF External Type 2 metrics\n"
8397 "Route map reference\n"
8398 "Pointer to route-map entries\n")
8400 struct ospf
*ospf
= vty
->index
;
8401 struct prefix_ipv4 p
;
8402 struct ospf_external
*ext
;
8403 struct ospf_redist
*red
;
8409 p
.prefix
.s_addr
= 0;
8412 ospf_external_lsa_flush (ospf
, DEFAULT_ROUTE
, &p
, 0);
8414 if ((ext
= ospf_external_lookup(DEFAULT_ROUTE
, 0)) &&
8415 EXTERNAL_INFO (ext
)) {
8416 ospf_external_info_delete (DEFAULT_ROUTE
, 0, p
);
8417 ospf_external_del (DEFAULT_ROUTE
, 0);
8420 red
= ospf_redist_lookup(ospf
, DEFAULT_ROUTE
, 0);
8424 ospf_routemap_unset (red
);
8425 return ospf_redistribute_default_unset (ospf
);
8428 DEFUN (ospf_default_metric
,
8429 ospf_default_metric_cmd
,
8430 "default-metric <0-16777214>",
8431 "Set metric of redistributed routes\n"
8434 struct ospf
*ospf
= vty
->index
;
8440 if (!str2metric (argv
[0], &metric
))
8443 ospf
->default_metric
= metric
;
8448 DEFUN (no_ospf_default_metric
,
8449 no_ospf_default_metric_cmd
,
8450 "no default-metric",
8452 "Set metric of redistributed routes\n")
8454 struct ospf
*ospf
= vty
->index
;
8459 ospf
->default_metric
= -1;
8464 ALIAS (no_ospf_default_metric
,
8465 no_ospf_default_metric_val_cmd
,
8466 "no default-metric <0-16777214>",
8468 "Set metric of redistributed routes\n"
8471 DEFUN (ospf_distance
,
8474 "Define an administrative distance\n"
8475 "OSPF Administrative distance\n")
8477 struct ospf
*ospf
= vty
->index
;
8482 ospf
->distance_all
= atoi (argv
[0]);
8487 DEFUN (no_ospf_distance
,
8488 no_ospf_distance_cmd
,
8489 "no distance <1-255>",
8491 "Define an administrative distance\n"
8492 "OSPF Administrative distance\n")
8494 struct ospf
*ospf
= vty
->index
;
8499 ospf
->distance_all
= 0;
8504 DEFUN (no_ospf_distance_ospf
,
8505 no_ospf_distance_ospf_cmd
,
8506 "no distance ospf {intra-area <1-255>|inter-area <1-255>|external <1-255>}",
8508 "Define an administrative distance\n"
8509 "OSPF Administrative distance\n"
8510 "Intra-area routes\n"
8511 "Distance for intra-area routes\n"
8512 "Inter-area routes\n"
8513 "Distance for inter-area routes\n"
8515 "Distance for external routes\n")
8517 struct ospf
*ospf
= vty
->index
;
8528 if (argv
[0] != NULL
)
8529 ospf
->distance_intra
= 0;
8531 if (argv
[1] != NULL
)
8532 ospf
->distance_inter
= 0;
8534 if (argv
[2] != NULL
)
8535 ospf
->distance_external
= 0;
8537 if (argv
[0] || argv
[1] || argv
[2])
8540 /* If no arguments are given, clear all distance information */
8541 ospf
->distance_intra
= 0;
8542 ospf
->distance_inter
= 0;
8543 ospf
->distance_external
= 0;
8548 DEFUN (ospf_distance_ospf
,
8549 ospf_distance_ospf_cmd
,
8551 "{intra-area <1-255>|inter-area <1-255>|external <1-255>}",
8552 "Define an administrative distance\n"
8553 "OSPF Administrative distance\n"
8554 "Intra-area routes\n"
8555 "Distance for intra-area routes\n"
8556 "Inter-area routes\n"
8557 "Distance for inter-area routes\n"
8559 "Distance for external routes\n")
8561 struct ospf
*ospf
= vty
->index
;
8566 if (argc
< 3) /* should not happen */
8569 if (!argv
[0] && !argv
[1] && !argv
[2])
8571 vty_out(vty
, "%% Command incomplete. (Arguments required)%s",
8576 if (argv
[0] != NULL
)
8577 ospf
->distance_intra
= atoi(argv
[0]);
8579 if (argv
[1] != NULL
)
8580 ospf
->distance_inter
= atoi(argv
[1]);
8582 if (argv
[2] != NULL
)
8583 ospf
->distance_external
= atoi(argv
[2]);
8588 DEFUN (ospf_distance_source
,
8589 ospf_distance_source_cmd
,
8590 "distance <1-255> A.B.C.D/M",
8591 "Administrative distance\n"
8593 "IP source prefix\n")
8595 struct ospf
*ospf
= vty
->index
;
8600 ospf_distance_set (vty
, ospf
, argv
[0], argv
[1], NULL
);
8605 DEFUN (no_ospf_distance_source
,
8606 no_ospf_distance_source_cmd
,
8607 "no distance <1-255> A.B.C.D/M",
8609 "Administrative distance\n"
8611 "IP source prefix\n")
8613 struct ospf
*ospf
= vty
->index
;
8618 ospf_distance_unset (vty
, ospf
, argv
[0], argv
[1], NULL
);
8623 DEFUN (ospf_distance_source_access_list
,
8624 ospf_distance_source_access_list_cmd
,
8625 "distance <1-255> A.B.C.D/M WORD",
8626 "Administrative distance\n"
8628 "IP source prefix\n"
8629 "Access list name\n")
8631 struct ospf
*ospf
= vty
->index
;
8636 ospf_distance_set (vty
, ospf
, argv
[0], argv
[1], argv
[2]);
8641 DEFUN (no_ospf_distance_source_access_list
,
8642 no_ospf_distance_source_access_list_cmd
,
8643 "no distance <1-255> A.B.C.D/M WORD",
8645 "Administrative distance\n"
8647 "IP source prefix\n"
8648 "Access list name\n")
8650 struct ospf
*ospf
= vty
->index
;
8655 ospf_distance_unset (vty
, ospf
, argv
[0], argv
[1], argv
[2]);
8660 DEFUN (ip_ospf_mtu_ignore
,
8661 ip_ospf_mtu_ignore_addr_cmd
,
8662 "ip ospf mtu-ignore A.B.C.D",
8664 "OSPF interface commands\n"
8665 "Disable mtu mismatch detection\n"
8666 "Address of interface")
8668 struct interface
*ifp
= vty
->index
;
8669 struct in_addr addr
;
8672 struct ospf_if_params
*params
;
8673 params
= IF_DEF_PARAMS (ifp
);
8677 ret
= inet_aton(argv
[0], &addr
);
8680 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
8684 params
= ospf_get_if_params (ifp
, addr
);
8685 ospf_if_update_params (ifp
, addr
);
8687 params
->mtu_ignore
= 1;
8688 if (params
->mtu_ignore
!= OSPF_MTU_IGNORE_DEFAULT
)
8689 SET_IF_PARAM (params
, mtu_ignore
);
8692 UNSET_IF_PARAM (params
, mtu_ignore
);
8693 if (params
!= IF_DEF_PARAMS (ifp
))
8695 ospf_free_if_params (ifp
, addr
);
8696 ospf_if_update_params (ifp
, addr
);
8702 ALIAS (ip_ospf_mtu_ignore
,
8703 ip_ospf_mtu_ignore_cmd
,
8704 "ip ospf mtu-ignore",
8706 "OSPF interface commands\n"
8707 "Disable mtu mismatch detection\n")
8710 DEFUN (no_ip_ospf_mtu_ignore
,
8711 no_ip_ospf_mtu_ignore_addr_cmd
,
8712 "no ip ospf mtu-ignore A.B.C.D",
8714 "OSPF interface commands\n"
8715 "Disable mtu mismatch detection\n"
8716 "Address of interface")
8718 struct interface
*ifp
= vty
->index
;
8719 struct in_addr addr
;
8722 struct ospf_if_params
*params
;
8723 params
= IF_DEF_PARAMS (ifp
);
8727 ret
= inet_aton(argv
[0], &addr
);
8730 vty_out (vty
, "Please specify interface address by A.B.C.D%s",
8734 params
= ospf_get_if_params (ifp
, addr
);
8735 ospf_if_update_params (ifp
, addr
);
8737 params
->mtu_ignore
= 0;
8738 if (params
->mtu_ignore
!= OSPF_MTU_IGNORE_DEFAULT
)
8739 SET_IF_PARAM (params
, mtu_ignore
);
8742 UNSET_IF_PARAM (params
, mtu_ignore
);
8743 if (params
!= IF_DEF_PARAMS (ifp
))
8745 ospf_free_if_params (ifp
, addr
);
8746 ospf_if_update_params (ifp
, addr
);
8752 ALIAS (no_ip_ospf_mtu_ignore
,
8753 no_ip_ospf_mtu_ignore_cmd
,
8754 "no ip ospf mtu-ignore",
8756 "OSPF interface commands\n"
8757 "Disable mtu mismatch detection\n")
8759 DEFUN (ospf_max_metric_router_lsa_admin
,
8760 ospf_max_metric_router_lsa_admin_cmd
,
8761 "max-metric router-lsa administrative",
8762 "OSPF maximum / infinite-distance metric\n"
8763 "Advertise own Router-LSA with infinite distance (stub router)\n"
8764 "Administratively applied, for an indefinite period\n")
8766 struct listnode
*ln
;
8767 struct ospf_area
*area
;
8768 struct ospf
*ospf
= vty
->index
;
8773 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, ln
, area
))
8775 SET_FLAG (area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
);
8777 if (!CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
))
8778 ospf_router_lsa_update_area (area
);
8781 /* Allows for areas configured later to get the property */
8782 ospf
->stub_router_admin_set
= OSPF_STUB_ROUTER_ADMINISTRATIVE_SET
;
8787 DEFUN (no_ospf_max_metric_router_lsa_admin
,
8788 no_ospf_max_metric_router_lsa_admin_cmd
,
8789 "no max-metric router-lsa administrative",
8791 "OSPF maximum / infinite-distance metric\n"
8792 "Advertise own Router-LSA with infinite distance (stub router)\n"
8793 "Administratively applied, for an indefinite period\n")
8795 struct listnode
*ln
;
8796 struct ospf_area
*area
;
8797 struct ospf
*ospf
= vty
->index
;
8802 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, ln
, area
))
8804 UNSET_FLAG (area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
);
8806 /* Don't trample on the start-up stub timer */
8807 if (CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
)
8808 && !area
->t_stub_router
)
8810 UNSET_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
);
8811 ospf_router_lsa_update_area (area
);
8814 ospf
->stub_router_admin_set
= OSPF_STUB_ROUTER_ADMINISTRATIVE_UNSET
;
8818 DEFUN (ospf_max_metric_router_lsa_startup
,
8819 ospf_max_metric_router_lsa_startup_cmd
,
8820 "max-metric router-lsa on-startup <5-86400>",
8821 "OSPF maximum / infinite-distance metric\n"
8822 "Advertise own Router-LSA with infinite distance (stub router)\n"
8823 "Automatically advertise stub Router-LSA on startup of OSPF\n"
8824 "Time (seconds) to advertise self as stub-router\n")
8826 unsigned int seconds
;
8827 struct ospf
*ospf
= vty
->index
;
8834 vty_out (vty
, "%% Must supply stub-router period");
8838 VTY_GET_INTEGER ("stub-router startup period", seconds
, argv
[0]);
8840 ospf
->stub_router_startup_time
= seconds
;
8845 DEFUN (no_ospf_max_metric_router_lsa_startup
,
8846 no_ospf_max_metric_router_lsa_startup_cmd
,
8847 "no max-metric router-lsa on-startup <5-86400>",
8849 "OSPF maximum / infinite-distance metric\n"
8850 "Advertise own Router-LSA with infinite distance (stub router)\n"
8851 "Automatically advertise stub Router-LSA on startup of OSPF\n"
8852 "Time (seconds) to advertise self as stub-router\n")
8854 struct listnode
*ln
;
8855 struct ospf_area
*area
;
8856 struct ospf
*ospf
= vty
->index
;
8861 ospf
->stub_router_startup_time
= OSPF_STUB_ROUTER_UNCONFIGURED
;
8863 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, ln
, area
))
8865 SET_FLAG (area
->stub_router_state
, OSPF_AREA_WAS_START_STUB_ROUTED
);
8866 OSPF_TIMER_OFF (area
->t_stub_router
);
8868 /* Don't trample on admin stub routed */
8869 if (!CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
))
8871 UNSET_FLAG (area
->stub_router_state
, OSPF_AREA_IS_STUB_ROUTED
);
8872 ospf_router_lsa_update_area (area
);
8878 ALIAS (no_ospf_max_metric_router_lsa_startup
,
8879 no_ospf_max_metric_router_lsa_startup_no_param_cmd
,
8880 "no max-metric router-lsa on-startup",
8882 "OSPF maximum / infinite-distance metric\n"
8883 "Advertise own Router-LSA with infinite distance (stub router)\n"
8884 "Automatically advertise stub Router-LSA on startup of OSPF\n");
8886 DEFUN (ospf_max_metric_router_lsa_shutdown
,
8887 ospf_max_metric_router_lsa_shutdown_cmd
,
8888 "max-metric router-lsa on-shutdown <5-100>",
8889 "OSPF maximum / infinite-distance metric\n"
8890 "Advertise own Router-LSA with infinite distance (stub router)\n"
8891 "Advertise stub-router prior to full shutdown of OSPF\n"
8892 "Time (seconds) to wait till full shutdown\n")
8894 unsigned int seconds
;
8895 struct ospf
*ospf
= vty
->index
;
8902 vty_out (vty
, "%% Must supply stub-router shutdown period");
8906 VTY_GET_INTEGER ("stub-router shutdown wait period", seconds
, argv
[0]);
8908 ospf
->stub_router_shutdown_time
= seconds
;
8913 DEFUN (no_ospf_max_metric_router_lsa_shutdown
,
8914 no_ospf_max_metric_router_lsa_shutdown_cmd
,
8915 "no max-metric router-lsa on-shutdown <5-100>",
8917 "OSPF maximum / infinite-distance metric\n"
8918 "Advertise own Router-LSA with infinite distance (stub router)\n"
8919 "Advertise stub-router prior to full shutdown of OSPF\n"
8920 "Time (seconds) to wait till full shutdown\n")
8922 struct ospf
*ospf
= vty
->index
;
8927 ospf
->stub_router_shutdown_time
= OSPF_STUB_ROUTER_UNCONFIGURED
;
8932 ALIAS (no_ospf_max_metric_router_lsa_shutdown
,
8933 no_ospf_max_metric_router_lsa_shutdown_no_param_cmd
,
8934 "no max-metric router-lsa on-shutdown",
8936 "OSPF maximum / infinite-distance metric\n"
8937 "Advertise own Router-LSA with infinite distance (stub router)\n"
8938 "Advertise stub-router prior to full shutdown of OSPF\n");
8941 config_write_stub_router (struct vty
*vty
, struct ospf
*ospf
)
8943 struct listnode
*ln
;
8944 struct ospf_area
*area
;
8946 if (ospf
->stub_router_startup_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
8947 vty_out (vty
, " max-metric router-lsa on-startup %u%s",
8948 ospf
->stub_router_startup_time
, VTY_NEWLINE
);
8949 if (ospf
->stub_router_shutdown_time
!= OSPF_STUB_ROUTER_UNCONFIGURED
)
8950 vty_out (vty
, " max-metric router-lsa on-shutdown %u%s",
8951 ospf
->stub_router_shutdown_time
, VTY_NEWLINE
);
8952 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, ln
, area
))
8954 if (CHECK_FLAG (area
->stub_router_state
, OSPF_AREA_ADMIN_STUB_ROUTED
))
8956 vty_out (vty
, " max-metric router-lsa administrative%s",
8965 show_ip_ospf_route_network (struct vty
*vty
, struct route_table
*rt
)
8967 struct route_node
*rn
;
8968 struct ospf_route
*or;
8969 struct listnode
*pnode
, *pnnode
;
8970 struct ospf_path
*path
;
8972 vty_out (vty
, "============ OSPF network routing table ============%s",
8975 for (rn
= route_top (rt
); rn
; rn
= route_next (rn
))
8976 if ((or = rn
->info
) != NULL
)
8979 snprintf (buf1
, 19, "%s/%d",
8980 inet_ntoa (rn
->p
.u
.prefix4
), rn
->p
.prefixlen
);
8982 switch (or->path_type
)
8984 case OSPF_PATH_INTER_AREA
:
8985 if (or->type
== OSPF_DESTINATION_NETWORK
)
8986 vty_out (vty
, "N IA %-18s [%d] area: %s%s", buf1
, or->cost
,
8987 inet_ntoa (or->u
.std
.area_id
), VTY_NEWLINE
);
8988 else if (or->type
== OSPF_DESTINATION_DISCARD
)
8989 vty_out (vty
, "D IA %-18s Discard entry%s", buf1
, VTY_NEWLINE
);
8991 case OSPF_PATH_INTRA_AREA
:
8992 vty_out (vty
, "N %-18s [%d] area: %s%s", buf1
, or->cost
,
8993 inet_ntoa (or->u
.std
.area_id
), VTY_NEWLINE
);
8999 if (or->type
== OSPF_DESTINATION_NETWORK
)
9000 for (ALL_LIST_ELEMENTS (or->paths
, pnode
, pnnode
, path
))
9002 if (if_lookup_by_index(path
->ifindex
))
9004 if (path
->nexthop
.s_addr
== 0)
9005 vty_out (vty
, "%24s directly attached to %s%s",
9006 "", ifindex2ifname (path
->ifindex
), VTY_NEWLINE
);
9008 vty_out (vty
, "%24s via %s, %s%s", "",
9009 inet_ntoa (path
->nexthop
),
9010 ifindex2ifname (path
->ifindex
), VTY_NEWLINE
);
9014 vty_out (vty
, "%s", VTY_NEWLINE
);
9018 show_ip_ospf_route_router (struct vty
*vty
, struct route_table
*rtrs
)
9020 struct route_node
*rn
;
9021 struct ospf_route
*or;
9022 struct listnode
*pnode
;
9023 struct listnode
*node
;
9024 struct ospf_path
*path
;
9026 vty_out (vty
, "============ OSPF router routing table =============%s",
9028 for (rn
= route_top (rtrs
); rn
; rn
= route_next (rn
))
9033 vty_out (vty
, "R %-15s ", inet_ntoa (rn
->p
.u
.prefix4
));
9035 for (ALL_LIST_ELEMENTS_RO ((struct list
*)rn
->info
, node
, or))
9038 vty_out (vty
, "%24s", "");
9041 vty_out (vty
, "%s [%d] area: %s",
9042 (or->path_type
== OSPF_PATH_INTER_AREA
? "IA" : " "),
9043 or->cost
, inet_ntoa (or->u
.std
.area_id
));
9045 vty_out (vty
, "%s%s%s",
9046 (or->u
.std
.flags
& ROUTER_LSA_BORDER
? ", ABR" : ""),
9047 (or->u
.std
.flags
& ROUTER_LSA_EXTERNAL
? ", ASBR" : ""),
9050 for (ALL_LIST_ELEMENTS_RO (or->paths
, pnode
, path
))
9052 if (if_lookup_by_index(path
->ifindex
))
9054 if (path
->nexthop
.s_addr
== 0)
9055 vty_out (vty
, "%24s directly attached to %s%s",
9056 "", ifindex2ifname (path
->ifindex
),
9059 vty_out (vty
, "%24s via %s, %s%s", "",
9060 inet_ntoa (path
->nexthop
),
9061 ifindex2ifname (path
->ifindex
),
9067 vty_out (vty
, "%s", VTY_NEWLINE
);
9071 show_ip_ospf_route_external (struct vty
*vty
, struct route_table
*rt
)
9073 struct route_node
*rn
;
9074 struct ospf_route
*er
;
9075 struct listnode
*pnode
, *pnnode
;
9076 struct ospf_path
*path
;
9078 vty_out (vty
, "============ OSPF external routing table ===========%s",
9080 for (rn
= route_top (rt
); rn
; rn
= route_next (rn
))
9081 if ((er
= rn
->info
) != NULL
)
9084 snprintf (buf1
, 19, "%s/%d",
9085 inet_ntoa (rn
->p
.u
.prefix4
), rn
->p
.prefixlen
);
9087 switch (er
->path_type
)
9089 case OSPF_PATH_TYPE1_EXTERNAL
:
9090 vty_out (vty
, "N E1 %-18s [%d] tag: %u%s", buf1
,
9091 er
->cost
, er
->u
.ext
.tag
, VTY_NEWLINE
);
9093 case OSPF_PATH_TYPE2_EXTERNAL
:
9094 vty_out (vty
, "N E2 %-18s [%d/%d] tag: %u%s", buf1
, er
->cost
,
9095 er
->u
.ext
.type2_cost
, er
->u
.ext
.tag
, VTY_NEWLINE
);
9099 for (ALL_LIST_ELEMENTS (er
->paths
, pnode
, pnnode
, path
))
9101 if (if_lookup_by_index(path
->ifindex
))
9103 if (path
->nexthop
.s_addr
== 0)
9104 vty_out (vty
, "%24s directly attached to %s%s",
9105 "", ifindex2ifname (path
->ifindex
), VTY_NEWLINE
);
9107 vty_out (vty
, "%24s via %s, %s%s", "",
9108 inet_ntoa (path
->nexthop
),
9109 ifindex2ifname (path
->ifindex
),
9114 vty_out (vty
, "%s", VTY_NEWLINE
);
9118 show_ip_ospf_border_routers_common (struct vty
*vty
, struct ospf
*ospf
)
9121 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
9122 VTY_NEWLINE
, VTY_NEWLINE
);
9124 if (ospf
->new_table
== NULL
)
9126 vty_out (vty
, "No OSPF routing information exist%s", VTY_NEWLINE
);
9130 /* Show Network routes.
9131 show_ip_ospf_route_network (vty, ospf->new_table); */
9133 /* Show Router routes. */
9134 show_ip_ospf_route_router (vty
, ospf
->new_rtrs
);
9136 vty_out (vty
, "%s", VTY_NEWLINE
);
9141 DEFUN (show_ip_ospf_border_routers
,
9142 show_ip_ospf_border_routers_cmd
,
9143 "show ip ospf border-routers",
9146 "OSPF information\n"
9147 "Show all the ABR's and ASBR's\n")
9151 if ((ospf
= ospf_lookup ()) == NULL
|| !ospf
->oi_running
)
9154 return show_ip_ospf_border_routers_common(vty
, ospf
);
9157 DEFUN (show_ip_ospf_instance_border_routers
,
9158 show_ip_ospf_instance_border_routers_cmd
,
9159 "show ip ospf <1-65535> border-routers",
9162 "OSPF information\n"
9164 "Show all the ABR's and ASBR's\n")
9167 u_short instance
= 0;
9169 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
9170 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
9173 return show_ip_ospf_border_routers_common(vty
, ospf
);
9177 show_ip_ospf_route_common (struct vty
*vty
, struct ospf
*ospf
)
9180 vty_out (vty
, "%sOSPF Instance: %d%s%s", VTY_NEWLINE
, ospf
->instance
,
9181 VTY_NEWLINE
, VTY_NEWLINE
);
9183 if (ospf
->new_table
== NULL
)
9185 vty_out (vty
, "No OSPF routing information exist%s", VTY_NEWLINE
);
9189 /* Show Network routes. */
9190 show_ip_ospf_route_network (vty
, ospf
->new_table
);
9192 /* Show Router routes. */
9193 show_ip_ospf_route_router (vty
, ospf
->new_rtrs
);
9195 /* Show AS External routes. */
9196 show_ip_ospf_route_external (vty
, ospf
->old_external_route
);
9198 vty_out (vty
, "%s", VTY_NEWLINE
);
9203 DEFUN (show_ip_ospf_route
,
9204 show_ip_ospf_route_cmd
,
9205 "show ip ospf route",
9208 "OSPF information\n"
9209 "OSPF routing table\n")
9213 if ((ospf
= ospf_lookup ()) == NULL
|| !ospf
->oi_running
)
9216 return show_ip_ospf_route_common(vty
, ospf
);
9219 DEFUN (show_ip_ospf_instance_route
,
9220 show_ip_ospf_instance_route_cmd
,
9221 "show ip ospf <1-65535> route",
9224 "OSPF information\n"
9226 "OSPF routing table\n")
9229 u_short instance
= 0;
9231 VTY_GET_INTEGER ("Instance", instance
, argv
[0]);
9232 if ((ospf
= ospf_lookup_instance (instance
)) == NULL
|| !ospf
->oi_running
)
9235 return show_ip_ospf_route_common(vty
, ospf
);
9238 const char *ospf_abr_type_str
[] =
9247 const char *ospf_shortcut_mode_str
[] =
9256 area_id2str (char *buf
, int length
, struct ospf_area
*area
)
9258 memset (buf
, 0, length
);
9260 if (area
->format
== OSPF_AREA_ID_FORMAT_ADDRESS
)
9261 strncpy (buf
, inet_ntoa (area
->area_id
), length
);
9263 sprintf (buf
, "%lu", (unsigned long) ntohl (area
->area_id
.s_addr
));
9267 const char *ospf_int_type_str
[] =
9269 "unknown", /* should never be used. */
9273 "point-to-multipoint",
9274 "virtual-link", /* should never be used. */
9278 /* Configuration write function for ospfd. */
9280 config_write_interface (struct vty
*vty
)
9282 struct listnode
*n1
, *n2
;
9283 struct interface
*ifp
;
9284 struct crypt_key
*ck
;
9286 struct route_node
*rn
= NULL
;
9287 struct ospf_if_params
*params
;
9288 struct ospf
*ospf
= ospf_lookup();
9290 for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT
), n1
, ifp
))
9292 if (memcmp (ifp
->name
, "VLINK", 5) == 0)
9295 if (ifp
->ifindex
== IFINDEX_DELETED
)
9298 vty_out (vty
, "!%s", VTY_NEWLINE
);
9299 vty_out (vty
, "interface %s%s", ifp
->name
,
9302 vty_out (vty
, " description %s%s", ifp
->desc
,
9307 params
= IF_DEF_PARAMS (ifp
);
9310 /* Interface Network print. */
9311 if (OSPF_IF_PARAM_CONFIGURED (params
, type
) &&
9312 params
->type
!= OSPF_IFTYPE_LOOPBACK
)
9314 if (params
->type
!= ospf_default_iftype(ifp
))
9316 vty_out (vty
, " ip ospf network %s",
9317 ospf_int_type_str
[params
->type
]);
9318 if (params
!= IF_DEF_PARAMS (ifp
))
9319 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9320 vty_out (vty
, "%s", VTY_NEWLINE
);
9324 /* OSPF interface authentication print */
9325 if (OSPF_IF_PARAM_CONFIGURED (params
, auth_type
) &&
9326 params
->auth_type
!= OSPF_AUTH_NOTSET
)
9328 const char *auth_str
;
9330 /* Translation tables are not that much help here due to syntax
9331 of the simple option */
9332 switch (params
->auth_type
)
9335 case OSPF_AUTH_NULL
:
9339 case OSPF_AUTH_SIMPLE
:
9343 case OSPF_AUTH_CRYPTOGRAPHIC
:
9344 auth_str
= " message-digest";
9352 vty_out (vty
, " ip ospf authentication%s", auth_str
);
9353 if (params
!= IF_DEF_PARAMS (ifp
))
9354 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9355 vty_out (vty
, "%s", VTY_NEWLINE
);
9358 /* Simple Authentication Password print. */
9359 if (OSPF_IF_PARAM_CONFIGURED (params
, auth_simple
) &&
9360 params
->auth_simple
[0] != '\0')
9362 vty_out (vty
, " ip ospf authentication-key %s",
9363 params
->auth_simple
);
9364 if (params
!= IF_DEF_PARAMS (ifp
))
9365 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9366 vty_out (vty
, "%s", VTY_NEWLINE
);
9369 /* Cryptographic Authentication Key print. */
9370 for (ALL_LIST_ELEMENTS_RO (params
->auth_crypt
, n2
, ck
))
9372 vty_out (vty
, " ip ospf message-digest-key %d md5 %s",
9373 ck
->key_id
, ck
->auth_key
);
9374 if (params
!= IF_DEF_PARAMS (ifp
))
9375 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9376 vty_out (vty
, "%s", VTY_NEWLINE
);
9379 /* Interface Output Cost print. */
9380 if (OSPF_IF_PARAM_CONFIGURED (params
, output_cost_cmd
))
9382 vty_out (vty
, " ip ospf cost %u", params
->output_cost_cmd
);
9383 if (params
!= IF_DEF_PARAMS (ifp
))
9384 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9385 vty_out (vty
, "%s", VTY_NEWLINE
);
9388 /* Hello Interval print. */
9389 if (OSPF_IF_PARAM_CONFIGURED (params
, v_hello
) &&
9390 params
->v_hello
!= OSPF_HELLO_INTERVAL_DEFAULT
)
9392 vty_out (vty
, " ip ospf hello-interval %u", params
->v_hello
);
9393 if (params
!= IF_DEF_PARAMS (ifp
))
9394 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9395 vty_out (vty
, "%s", VTY_NEWLINE
);
9399 /* Router Dead Interval print. */
9400 if (OSPF_IF_PARAM_CONFIGURED (params
, v_wait
) &&
9401 params
->v_wait
!= OSPF_ROUTER_DEAD_INTERVAL_DEFAULT
)
9403 vty_out (vty
, " ip ospf dead-interval ");
9406 if (OSPF_IF_PARAM_CONFIGURED (params
, fast_hello
))
9407 vty_out (vty
, "minimal hello-multiplier %d",
9408 params
->fast_hello
);
9410 vty_out (vty
, "%u", params
->v_wait
);
9412 if (params
!= IF_DEF_PARAMS (ifp
))
9413 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9414 vty_out (vty
, "%s", VTY_NEWLINE
);
9417 /* Router Priority print. */
9418 if (OSPF_IF_PARAM_CONFIGURED (params
, priority
) &&
9419 params
->priority
!= OSPF_ROUTER_PRIORITY_DEFAULT
)
9421 vty_out (vty
, " ip ospf priority %u", params
->priority
);
9422 if (params
!= IF_DEF_PARAMS (ifp
))
9423 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9424 vty_out (vty
, "%s", VTY_NEWLINE
);
9427 /* Retransmit Interval print. */
9428 if (OSPF_IF_PARAM_CONFIGURED (params
, retransmit_interval
) &&
9429 params
->retransmit_interval
!= OSPF_RETRANSMIT_INTERVAL_DEFAULT
)
9431 vty_out (vty
, " ip ospf retransmit-interval %u",
9432 params
->retransmit_interval
);
9433 if (params
!= IF_DEF_PARAMS (ifp
))
9434 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9435 vty_out (vty
, "%s", VTY_NEWLINE
);
9438 /* Transmit Delay print. */
9439 if (OSPF_IF_PARAM_CONFIGURED (params
, transmit_delay
) &&
9440 params
->transmit_delay
!= OSPF_TRANSMIT_DELAY_DEFAULT
)
9442 vty_out (vty
, " ip ospf transmit-delay %u", params
->transmit_delay
);
9443 if (params
!= IF_DEF_PARAMS (ifp
))
9444 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9445 vty_out (vty
, "%s", VTY_NEWLINE
);
9449 if (OSPF_IF_PARAM_CONFIGURED (params
, if_area
))
9452 vty_out (vty
, " ip ospf %d area %s%s", ospf
->instance
,
9453 inet_ntoa (params
->if_area
), VTY_NEWLINE
);
9455 vty_out (vty
, " ip ospf area %s%s",
9456 inet_ntoa (params
->if_area
), VTY_NEWLINE
);
9461 ospf_bfd_write_config(vty
, params
);
9463 /* MTU ignore print. */
9464 if (OSPF_IF_PARAM_CONFIGURED (params
, mtu_ignore
) &&
9465 params
->mtu_ignore
!= OSPF_MTU_IGNORE_DEFAULT
)
9467 if (params
->mtu_ignore
== 0)
9468 vty_out (vty
, " no ip ospf mtu-ignore");
9470 vty_out (vty
, " ip ospf mtu-ignore");
9471 if (params
!= IF_DEF_PARAMS (ifp
))
9472 vty_out (vty
, " %s", inet_ntoa (rn
->p
.u
.prefix4
));
9473 vty_out (vty
, "%s", VTY_NEWLINE
);
9480 rn
= route_top (IF_OIFS_PARAMS (ifp
));
9482 rn
= route_next (rn
);
9492 #ifdef HAVE_OPAQUE_LSA
9493 ospf_opaque_config_write_if (vty
, ifp
);
9494 #endif /* HAVE_OPAQUE_LSA */
9501 config_write_network_area (struct vty
*vty
, struct ospf
*ospf
)
9503 struct route_node
*rn
;
9504 u_char buf
[INET_ADDRSTRLEN
];
9506 /* `network area' print. */
9507 for (rn
= route_top (ospf
->networks
); rn
; rn
= route_next (rn
))
9510 struct ospf_network
*n
= rn
->info
;
9512 memset (buf
, 0, INET_ADDRSTRLEN
);
9514 /* Create Area ID string by specified Area ID format. */
9515 if (n
->format
== OSPF_AREA_ID_FORMAT_ADDRESS
)
9516 strncpy ((char *) buf
, inet_ntoa (n
->area_id
), INET_ADDRSTRLEN
);
9518 sprintf ((char *) buf
, "%lu",
9519 (unsigned long int) ntohl (n
->area_id
.s_addr
));
9521 /* Network print. */
9522 vty_out (vty
, " network %s/%d area %s%s",
9523 inet_ntoa (rn
->p
.u
.prefix4
), rn
->p
.prefixlen
,
9531 config_write_ospf_area (struct vty
*vty
, struct ospf
*ospf
)
9533 struct listnode
*node
;
9534 struct ospf_area
*area
;
9535 u_char buf
[INET_ADDRSTRLEN
];
9537 /* Area configuration print. */
9538 for (ALL_LIST_ELEMENTS_RO (ospf
->areas
, node
, area
))
9540 struct route_node
*rn1
;
9542 area_id2str ((char *) buf
, INET_ADDRSTRLEN
, area
);
9544 if (area
->auth_type
!= OSPF_AUTH_NULL
)
9546 if (area
->auth_type
== OSPF_AUTH_SIMPLE
)
9547 vty_out (vty
, " area %s authentication%s", buf
, VTY_NEWLINE
);
9549 vty_out (vty
, " area %s authentication message-digest%s",
9553 if (area
->shortcut_configured
!= OSPF_SHORTCUT_DEFAULT
)
9554 vty_out (vty
, " area %s shortcut %s%s", buf
,
9555 ospf_shortcut_mode_str
[area
->shortcut_configured
],
9558 if ((area
->external_routing
== OSPF_AREA_STUB
)
9559 || (area
->external_routing
== OSPF_AREA_NSSA
)
9562 if (area
->external_routing
== OSPF_AREA_STUB
)
9563 vty_out (vty
, " area %s stub", buf
);
9564 else if (area
->external_routing
== OSPF_AREA_NSSA
)
9566 vty_out (vty
, " area %s nssa", buf
);
9567 switch (area
->NSSATranslatorRole
)
9569 case OSPF_NSSA_ROLE_NEVER
:
9570 vty_out (vty
, " translate-never");
9572 case OSPF_NSSA_ROLE_ALWAYS
:
9573 vty_out (vty
, " translate-always");
9575 case OSPF_NSSA_ROLE_CANDIDATE
:
9577 vty_out (vty
, " translate-candidate");
9581 if (area
->no_summary
)
9582 vty_out (vty
, " no-summary");
9584 vty_out (vty
, "%s", VTY_NEWLINE
);
9586 if (area
->default_cost
!= 1)
9587 vty_out (vty
, " area %s default-cost %d%s", buf
,
9588 area
->default_cost
, VTY_NEWLINE
);
9591 for (rn1
= route_top (area
->ranges
); rn1
; rn1
= route_next (rn1
))
9594 struct ospf_area_range
*range
= rn1
->info
;
9596 vty_out (vty
, " area %s range %s/%d", buf
,
9597 inet_ntoa (rn1
->p
.u
.prefix4
), rn1
->p
.prefixlen
);
9599 if (range
->cost_config
!= OSPF_AREA_RANGE_COST_UNSPEC
)
9600 vty_out (vty
, " cost %d", range
->cost_config
);
9602 if (!CHECK_FLAG (range
->flags
, OSPF_AREA_RANGE_ADVERTISE
))
9603 vty_out (vty
, " not-advertise");
9605 if (CHECK_FLAG (range
->flags
, OSPF_AREA_RANGE_SUBSTITUTE
))
9606 vty_out (vty
, " substitute %s/%d",
9607 inet_ntoa (range
->subst_addr
), range
->subst_masklen
);
9609 vty_out (vty
, "%s", VTY_NEWLINE
);
9612 if (EXPORT_NAME (area
))
9613 vty_out (vty
, " area %s export-list %s%s", buf
,
9614 EXPORT_NAME (area
), VTY_NEWLINE
);
9616 if (IMPORT_NAME (area
))
9617 vty_out (vty
, " area %s import-list %s%s", buf
,
9618 IMPORT_NAME (area
), VTY_NEWLINE
);
9620 if (PREFIX_NAME_IN (area
))
9621 vty_out (vty
, " area %s filter-list prefix %s in%s", buf
,
9622 PREFIX_NAME_IN (area
), VTY_NEWLINE
);
9624 if (PREFIX_NAME_OUT (area
))
9625 vty_out (vty
, " area %s filter-list prefix %s out%s", buf
,
9626 PREFIX_NAME_OUT (area
), VTY_NEWLINE
);
9633 config_write_ospf_nbr_nbma (struct vty
*vty
, struct ospf
*ospf
)
9635 struct ospf_nbr_nbma
*nbr_nbma
;
9636 struct route_node
*rn
;
9638 /* Static Neighbor configuration print. */
9639 for (rn
= route_top (ospf
->nbr_nbma
); rn
; rn
= route_next (rn
))
9640 if ((nbr_nbma
= rn
->info
))
9642 vty_out (vty
, " neighbor %s", inet_ntoa (nbr_nbma
->addr
));
9644 if (nbr_nbma
->priority
!= OSPF_NEIGHBOR_PRIORITY_DEFAULT
)
9645 vty_out (vty
, " priority %d", nbr_nbma
->priority
);
9647 if (nbr_nbma
->v_poll
!= OSPF_POLL_INTERVAL_DEFAULT
)
9648 vty_out (vty
, " poll-interval %d", nbr_nbma
->v_poll
);
9650 vty_out (vty
, "%s", VTY_NEWLINE
);
9657 config_write_virtual_link (struct vty
*vty
, struct ospf
*ospf
)
9659 struct listnode
*node
;
9660 struct ospf_vl_data
*vl_data
;
9661 u_char buf
[INET_ADDRSTRLEN
];
9663 /* Virtual-Link print */
9664 for (ALL_LIST_ELEMENTS_RO (ospf
->vlinks
, node
, vl_data
))
9666 struct listnode
*n2
;
9667 struct crypt_key
*ck
;
9668 struct ospf_interface
*oi
;
9670 if (vl_data
!= NULL
)
9672 memset (buf
, 0, INET_ADDRSTRLEN
);
9674 if (vl_data
->format
== OSPF_AREA_ID_FORMAT_ADDRESS
)
9675 strncpy ((char *) buf
, inet_ntoa (vl_data
->vl_area_id
), INET_ADDRSTRLEN
);
9677 sprintf ((char *) buf
, "%lu",
9678 (unsigned long int) ntohl (vl_data
->vl_area_id
.s_addr
));
9679 oi
= vl_data
->vl_oi
;
9682 if (OSPF_IF_PARAM (oi
, v_hello
) != OSPF_HELLO_INTERVAL_DEFAULT
||
9683 OSPF_IF_PARAM (oi
, v_wait
) != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT
||
9684 OSPF_IF_PARAM (oi
, retransmit_interval
) != OSPF_RETRANSMIT_INTERVAL_DEFAULT
||
9685 OSPF_IF_PARAM (oi
, transmit_delay
) != OSPF_TRANSMIT_DELAY_DEFAULT
)
9686 vty_out (vty
, " area %s virtual-link %s hello-interval %d retransmit-interval %d transmit-delay %d dead-interval %d%s",
9688 inet_ntoa (vl_data
->vl_peer
),
9689 OSPF_IF_PARAM (oi
, v_hello
),
9690 OSPF_IF_PARAM (oi
, retransmit_interval
),
9691 OSPF_IF_PARAM (oi
, transmit_delay
),
9692 OSPF_IF_PARAM (oi
, v_wait
),
9695 vty_out (vty
, " area %s virtual-link %s%s", buf
,
9696 inet_ntoa (vl_data
->vl_peer
), VTY_NEWLINE
);
9698 if (IF_DEF_PARAMS (vl_data
->vl_oi
->ifp
)->auth_simple
[0] != '\0')
9699 vty_out (vty
, " area %s virtual-link %s authentication-key %s%s",
9701 inet_ntoa (vl_data
->vl_peer
),
9702 IF_DEF_PARAMS (vl_data
->vl_oi
->ifp
)->auth_simple
,
9705 for (ALL_LIST_ELEMENTS_RO (IF_DEF_PARAMS (vl_data
->vl_oi
->ifp
)->auth_crypt
,
9707 vty_out (vty
, " area %s virtual-link %s"
9708 " message-digest-key %d md5 %s%s",
9710 inet_ntoa (vl_data
->vl_peer
),
9711 ck
->key_id
, ck
->auth_key
, VTY_NEWLINE
);
9721 config_write_ospf_redistribute (struct vty
*vty
, struct ospf
*ospf
)
9725 /* redistribute print. */
9726 for (type
= 0; type
< ZEBRA_ROUTE_MAX
; type
++)
9728 struct list
*red_list
;
9729 struct listnode
*node
;
9730 struct ospf_redist
*red
;
9732 red_list
= ospf
->redist
[type
];
9736 for (ALL_LIST_ELEMENTS_RO(red_list
, node
, red
))
9738 vty_out (vty
, " redistribute %s", zebra_route_string(type
));
9740 vty_out (vty
, " %d", red
->instance
);
9742 if (red
->dmetric
.value
>= 0)
9743 vty_out (vty
, " metric %d", red
->dmetric
.value
);
9745 if (red
->dmetric
.type
== EXTERNAL_METRIC_TYPE_1
)
9746 vty_out (vty
, " metric-type 1");
9748 if (ROUTEMAP_NAME (red
))
9749 vty_out (vty
, " route-map %s", ROUTEMAP_NAME (red
));
9751 vty_out (vty
, "%s", VTY_NEWLINE
);
9759 config_write_ospf_default_metric (struct vty
*vty
, struct ospf
*ospf
)
9761 if (ospf
->default_metric
!= -1)
9762 vty_out (vty
, " default-metric %d%s", ospf
->default_metric
,
9768 config_write_ospf_distribute (struct vty
*vty
, struct ospf
*ospf
)
9771 struct ospf_redist
*red
;
9775 /* distribute-list print. */
9776 for (type
= 0; type
< ZEBRA_ROUTE_MAX
; type
++)
9777 if (DISTRIBUTE_NAME (ospf
, type
))
9778 vty_out (vty
, " distribute-list %s out %s%s",
9779 DISTRIBUTE_NAME (ospf
, type
),
9780 zebra_route_string(type
), VTY_NEWLINE
);
9782 /* default-information print. */
9783 if (ospf
->default_originate
!= DEFAULT_ORIGINATE_NONE
)
9785 vty_out (vty
, " default-information originate");
9786 if (ospf
->default_originate
== DEFAULT_ORIGINATE_ALWAYS
)
9787 vty_out (vty
, " always");
9789 red
= ospf_redist_lookup(ospf
, DEFAULT_ROUTE
, 0);
9792 if (red
->dmetric
.value
>= 0)
9793 vty_out (vty
, " metric %d",
9794 red
->dmetric
.value
);
9795 if (red
->dmetric
.type
== EXTERNAL_METRIC_TYPE_1
)
9796 vty_out (vty
, " metric-type 1");
9798 if (ROUTEMAP_NAME (red
))
9799 vty_out (vty
, " route-map %s",
9800 ROUTEMAP_NAME (red
));
9803 vty_out (vty
, "%s", VTY_NEWLINE
);
9812 config_write_ospf_distance (struct vty
*vty
, struct ospf
*ospf
)
9814 struct route_node
*rn
;
9815 struct ospf_distance
*odistance
;
9817 if (ospf
->distance_all
)
9818 vty_out (vty
, " distance %d%s", ospf
->distance_all
, VTY_NEWLINE
);
9820 if (ospf
->distance_intra
9821 || ospf
->distance_inter
9822 || ospf
->distance_external
)
9824 vty_out (vty
, " distance ospf");
9826 if (ospf
->distance_intra
)
9827 vty_out (vty
, " intra-area %d", ospf
->distance_intra
);
9828 if (ospf
->distance_inter
)
9829 vty_out (vty
, " inter-area %d", ospf
->distance_inter
);
9830 if (ospf
->distance_external
)
9831 vty_out (vty
, " external %d", ospf
->distance_external
);
9833 vty_out (vty
, "%s", VTY_NEWLINE
);
9836 for (rn
= route_top (ospf
->distance_table
); rn
; rn
= route_next (rn
))
9837 if ((odistance
= rn
->info
) != NULL
)
9839 vty_out (vty
, " distance %d %s/%d %s%s", odistance
->distance
,
9840 inet_ntoa (rn
->p
.u
.prefix4
), rn
->p
.prefixlen
,
9841 odistance
->access_list
? odistance
->access_list
: "",
9847 /* OSPF configuration write function. */
9849 ospf_config_write (struct vty
*vty
)
9852 struct interface
*ifp
;
9853 struct ospf_interface
*oi
;
9854 struct listnode
*node
;
9857 ospf
= ospf_lookup ();
9858 if (ospf
!= NULL
&& ospf
->oi_running
)
9860 /* `router ospf' print. */
9862 vty_out (vty
, "router ospf %d%s", ospf
->instance
, VTY_NEWLINE
);
9864 vty_out (vty
, "router ospf%s", VTY_NEWLINE
);
9868 if (!ospf
->networks
)
9871 /* Router ID print. */
9872 if (ospf
->router_id_static
.s_addr
!= 0)
9873 vty_out (vty
, " ospf router-id %s%s",
9874 inet_ntoa (ospf
->router_id_static
), VTY_NEWLINE
);
9876 /* ABR type print. */
9877 if (ospf
->abr_type
!= OSPF_ABR_DEFAULT
)
9878 vty_out (vty
, " ospf abr-type %s%s",
9879 ospf_abr_type_str
[ospf
->abr_type
], VTY_NEWLINE
);
9881 /* log-adjacency-changes flag print. */
9882 if (CHECK_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_CHANGES
))
9884 if (CHECK_FLAG(ospf
->config
, OSPF_LOG_ADJACENCY_DETAIL
))
9885 vty_out(vty
, " log-adjacency-changes detail%s", VTY_NEWLINE
);
9889 vty_out(vty
, " no log-adjacency-changes%s", VTY_NEWLINE
);
9892 /* RFC1583 compatibility flag print -- Compatible with CISCO 12.1. */
9893 if (CHECK_FLAG (ospf
->config
, OSPF_RFC1583_COMPATIBLE
))
9894 vty_out (vty
, " compatible rfc1583%s", VTY_NEWLINE
);
9896 /* auto-cost reference-bandwidth configuration. */
9897 if (ospf
->ref_bandwidth
!= OSPF_DEFAULT_REF_BANDWIDTH
)
9899 vty_out (vty
, "! Important: ensure reference bandwidth "
9900 "is consistent across all routers%s", VTY_NEWLINE
);
9901 vty_out (vty
, " auto-cost reference-bandwidth %d%s",
9902 ospf
->ref_bandwidth
/ 1000, VTY_NEWLINE
);
9905 /* SPF timers print. */
9906 if (ospf
->spf_delay
!= OSPF_SPF_DELAY_DEFAULT
||
9907 ospf
->spf_holdtime
!= OSPF_SPF_HOLDTIME_DEFAULT
||
9908 ospf
->spf_max_holdtime
!= OSPF_SPF_MAX_HOLDTIME_DEFAULT
)
9909 vty_out (vty
, " timers throttle spf %d %d %d%s",
9910 ospf
->spf_delay
, ospf
->spf_holdtime
,
9911 ospf
->spf_max_holdtime
, VTY_NEWLINE
);
9913 /* LSA timers print. */
9914 if (ospf
->min_ls_interval
!= OSPF_MIN_LS_INTERVAL
)
9915 vty_out (vty
, " timers throttle lsa all %d%s",
9916 ospf
->min_ls_interval
, VTY_NEWLINE
);
9917 if (ospf
->min_ls_arrival
!= OSPF_MIN_LS_ARRIVAL
)
9918 vty_out (vty
, " timers lsa min-arrival %d%s",
9919 ospf
->min_ls_arrival
, VTY_NEWLINE
);
9921 /* Write multiplier print. */
9922 if (ospf
->write_oi_count
!= OSPF_WRITE_INTERFACE_COUNT_DEFAULT
)
9923 vty_out (vty
, " ospf write-multiplier %d%s",
9924 ospf
->write_oi_count
, VTY_NEWLINE
);
9926 /* Max-metric router-lsa print */
9927 config_write_stub_router (vty
, ospf
);
9929 /* SPF refresh parameters print. */
9930 if (ospf
->lsa_refresh_interval
!= OSPF_LSA_REFRESH_INTERVAL_DEFAULT
)
9931 vty_out (vty
, " refresh timer %d%s",
9932 ospf
->lsa_refresh_interval
, VTY_NEWLINE
);
9934 /* Redistribute information print. */
9935 config_write_ospf_redistribute (vty
, ospf
);
9937 /* passive-interface print. */
9938 if (ospf
->passive_interface_default
== OSPF_IF_PASSIVE
)
9939 vty_out (vty
, " passive-interface default%s", VTY_NEWLINE
);
9941 for (ALL_LIST_ELEMENTS_RO (om
->iflist
, node
, ifp
))
9942 if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp
), passive_interface
)
9943 && IF_DEF_PARAMS (ifp
)->passive_interface
!=
9944 ospf
->passive_interface_default
)
9946 vty_out (vty
, " %spassive-interface %s%s",
9947 IF_DEF_PARAMS (ifp
)->passive_interface
? "" : "no ",
9948 ifp
->name
, VTY_NEWLINE
);
9950 for (ALL_LIST_ELEMENTS_RO (ospf
->oiflist
, node
, oi
))
9952 if (!OSPF_IF_PARAM_CONFIGURED (oi
->params
, passive_interface
))
9954 if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (oi
->ifp
),
9957 if (oi
->params
->passive_interface
== IF_DEF_PARAMS (oi
->ifp
)->passive_interface
)
9960 else if (oi
->params
->passive_interface
== ospf
->passive_interface_default
)
9963 vty_out (vty
, " %spassive-interface %s %s%s",
9964 oi
->params
->passive_interface
? "" : "no ",
9966 inet_ntoa (oi
->address
->u
.prefix4
), VTY_NEWLINE
);
9969 /* Network area print. */
9970 config_write_network_area (vty
, ospf
);
9972 /* Area config print. */
9973 config_write_ospf_area (vty
, ospf
);
9975 /* static neighbor print. */
9976 config_write_ospf_nbr_nbma (vty
, ospf
);
9978 /* Virtual-Link print. */
9979 config_write_virtual_link (vty
, ospf
);
9981 /* Default metric configuration. */
9982 config_write_ospf_default_metric (vty
, ospf
);
9984 /* Distribute-list and default-information print. */
9985 config_write_ospf_distribute (vty
, ospf
);
9987 /* Distance configuration. */
9988 config_write_ospf_distance (vty
, ospf
);
9990 #ifdef HAVE_OPAQUE_LSA
9991 ospf_opaque_config_write_router (vty
, ospf
);
9992 #endif /* HAVE_OPAQUE_LSA */
9999 ospf_vty_show_init (void)
10001 /* "show ip ospf" commands. */
10002 install_element (VIEW_NODE
, &show_ip_ospf_cmd
);
10003 install_element (ENABLE_NODE
, &show_ip_ospf_cmd
);
10005 install_element (VIEW_NODE
, &show_ip_ospf_instance_cmd
);
10006 install_element (ENABLE_NODE
, &show_ip_ospf_instance_cmd
);
10008 /* "show ip ospf database" commands. */
10009 install_element (VIEW_NODE
, &show_ip_ospf_database_type_cmd
);
10010 install_element (VIEW_NODE
, &show_ip_ospf_database_type_id_cmd
);
10011 install_element (VIEW_NODE
, &show_ip_ospf_database_type_id_adv_router_cmd
);
10012 install_element (VIEW_NODE
, &show_ip_ospf_database_type_adv_router_cmd
);
10013 install_element (VIEW_NODE
, &show_ip_ospf_database_type_id_self_cmd
);
10014 install_element (VIEW_NODE
, &show_ip_ospf_database_type_self_cmd
);
10015 install_element (VIEW_NODE
, &show_ip_ospf_database_cmd
);
10016 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_cmd
);
10017 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_id_cmd
);
10018 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_id_adv_router_cmd
);
10019 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_adv_router_cmd
);
10020 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_id_self_cmd
);
10021 install_element (ENABLE_NODE
, &show_ip_ospf_database_type_self_cmd
);
10022 install_element (ENABLE_NODE
, &show_ip_ospf_database_cmd
);
10024 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_cmd
);
10025 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_id_cmd
);
10026 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_id_adv_router_cmd
);
10027 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_adv_router_cmd
);
10028 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_id_self_cmd
);
10029 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_type_self_cmd
);
10030 install_element (VIEW_NODE
, &show_ip_ospf_instance_database_cmd
);
10031 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_cmd
);
10032 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_id_cmd
);
10033 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_id_adv_router_cmd
);
10034 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_adv_router_cmd
);
10035 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_id_self_cmd
);
10036 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_type_self_cmd
);
10037 install_element (ENABLE_NODE
, &show_ip_ospf_instance_database_cmd
);
10039 /* "show ip ospf interface" commands. */
10040 install_element (VIEW_NODE
, &show_ip_ospf_interface_cmd
);
10041 install_element (ENABLE_NODE
, &show_ip_ospf_interface_cmd
);
10043 install_element (VIEW_NODE
, &show_ip_ospf_instance_interface_cmd
);
10044 install_element (ENABLE_NODE
, &show_ip_ospf_instance_interface_cmd
);
10046 /* "show ip ospf neighbor" commands. */
10047 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_int_detail_cmd
);
10048 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_int_cmd
);
10049 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_id_cmd
);
10050 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_detail_all_cmd
);
10051 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_detail_cmd
);
10052 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_cmd
);
10053 install_element (VIEW_NODE
, &show_ip_ospf_neighbor_all_cmd
);
10054 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_int_detail_cmd
);
10055 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_int_cmd
);
10056 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_id_cmd
);
10057 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_detail_all_cmd
);
10058 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_detail_cmd
);
10059 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_cmd
);
10060 install_element (ENABLE_NODE
, &show_ip_ospf_neighbor_all_cmd
);
10062 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_int_detail_cmd
);
10063 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_int_cmd
);
10064 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_id_cmd
);
10065 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_detail_all_cmd
);
10066 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_detail_cmd
);
10067 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_cmd
);
10068 install_element (VIEW_NODE
, &show_ip_ospf_instance_neighbor_all_cmd
);
10069 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_int_detail_cmd
);
10070 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_int_cmd
);
10071 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_id_cmd
);
10072 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_detail_all_cmd
);
10073 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_detail_cmd
);
10074 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_cmd
);
10075 install_element (ENABLE_NODE
, &show_ip_ospf_instance_neighbor_all_cmd
);
10077 /* "show ip ospf route" commands. */
10078 install_element (VIEW_NODE
, &show_ip_ospf_route_cmd
);
10079 install_element (ENABLE_NODE
, &show_ip_ospf_route_cmd
);
10080 install_element (VIEW_NODE
, &show_ip_ospf_border_routers_cmd
);
10081 install_element (ENABLE_NODE
, &show_ip_ospf_border_routers_cmd
);
10083 install_element (VIEW_NODE
, &show_ip_ospf_instance_route_cmd
);
10084 install_element (ENABLE_NODE
, &show_ip_ospf_instance_route_cmd
);
10085 install_element (VIEW_NODE
, &show_ip_ospf_instance_border_routers_cmd
);
10086 install_element (ENABLE_NODE
, &show_ip_ospf_instance_border_routers_cmd
);
10090 /* ospfd's interface node. */
10091 static struct cmd_node interface_node
=
10098 /* Initialization of OSPF interface. */
10100 ospf_vty_if_init (void)
10102 /* Install interface node. */
10103 install_node (&interface_node
, config_write_interface
);
10105 install_element (CONFIG_NODE
, &interface_cmd
);
10106 install_element (CONFIG_NODE
, &no_interface_cmd
);
10107 install_default (INTERFACE_NODE
);
10109 /* "description" commands. */
10110 install_element (INTERFACE_NODE
, &interface_desc_cmd
);
10111 install_element (INTERFACE_NODE
, &no_interface_desc_cmd
);
10113 /* "ip ospf authentication" commands. */
10114 install_element (INTERFACE_NODE
, &ip_ospf_authentication_args_addr_cmd
);
10115 install_element (INTERFACE_NODE
, &ip_ospf_authentication_args_cmd
);
10116 install_element (INTERFACE_NODE
, &ip_ospf_authentication_addr_cmd
);
10117 install_element (INTERFACE_NODE
, &ip_ospf_authentication_cmd
);
10118 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_args_addr_cmd
);
10119 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_args_cmd
);
10120 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_addr_cmd
);
10121 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_cmd
);
10122 install_element (INTERFACE_NODE
, &ip_ospf_authentication_key_addr_cmd
);
10123 install_element (INTERFACE_NODE
, &ip_ospf_authentication_key_cmd
);
10124 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_key_authkey_addr_cmd
);
10125 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_key_authkey_cmd
);
10126 install_element (INTERFACE_NODE
, &no_ip_ospf_authentication_key_cmd
);
10128 /* "ip ospf message-digest-key" commands. */
10129 install_element (INTERFACE_NODE
, &ip_ospf_message_digest_key_addr_cmd
);
10130 install_element (INTERFACE_NODE
, &ip_ospf_message_digest_key_cmd
);
10131 install_element (INTERFACE_NODE
, &no_ip_ospf_message_digest_key_addr_cmd
);
10132 install_element (INTERFACE_NODE
, &no_ip_ospf_message_digest_key_cmd
);
10133 install_element (INTERFACE_NODE
, &no_ip_ospf_message_digest_key_md5_addr_cmd
);
10134 install_element (INTERFACE_NODE
, &no_ip_ospf_message_digest_key_md5_cmd
);
10136 /* "ip ospf cost" commands. */
10137 install_element (INTERFACE_NODE
, &ip_ospf_cost_u32_inet4_cmd
);
10138 install_element (INTERFACE_NODE
, &ip_ospf_cost_u32_cmd
);
10139 install_element (INTERFACE_NODE
, &no_ip_ospf_cost_u32_cmd
);
10140 install_element (INTERFACE_NODE
, &no_ip_ospf_cost_u32_inet4_cmd
);
10141 install_element (INTERFACE_NODE
, &no_ip_ospf_cost_inet4_cmd
);
10142 install_element (INTERFACE_NODE
, &no_ip_ospf_cost_cmd
);
10144 /* "ip ospf mtu-ignore" commands. */
10145 install_element (INTERFACE_NODE
, &ip_ospf_mtu_ignore_addr_cmd
);
10146 install_element (INTERFACE_NODE
, &ip_ospf_mtu_ignore_cmd
);
10147 install_element (INTERFACE_NODE
, &no_ip_ospf_mtu_ignore_addr_cmd
);
10148 install_element (INTERFACE_NODE
, &no_ip_ospf_mtu_ignore_cmd
);
10150 /* "ip ospf dead-interval" commands. */
10151 install_element (INTERFACE_NODE
, &ip_ospf_dead_interval_addr_cmd
);
10152 install_element (INTERFACE_NODE
, &ip_ospf_dead_interval_cmd
);
10153 install_element (INTERFACE_NODE
, &ip_ospf_dead_interval_minimal_addr_cmd
);
10154 install_element (INTERFACE_NODE
, &ip_ospf_dead_interval_minimal_cmd
);
10155 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_addr_cmd
);
10156 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_cmd
);
10157 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_seconds_cmd
);
10159 /* "ip ospf hello-interval" commands. */
10160 install_element (INTERFACE_NODE
, &ip_ospf_hello_interval_addr_cmd
);
10161 install_element (INTERFACE_NODE
, &ip_ospf_hello_interval_cmd
);
10162 install_element (INTERFACE_NODE
, &no_ip_ospf_hello_interval_addr_cmd
);
10163 install_element (INTERFACE_NODE
, &no_ip_ospf_hello_interval_cmd
);
10164 install_element (INTERFACE_NODE
, &no_ip_ospf_hello_interval_seconds_cmd
);
10166 /* "ip ospf network" commands. */
10167 install_element (INTERFACE_NODE
, &ip_ospf_network_cmd
);
10168 install_element (INTERFACE_NODE
, &no_ip_ospf_network_cmd
);
10169 install_element (INTERFACE_NODE
, &no_ip_ospf_network_val_cmd
);
10171 /* "ip ospf priority" commands. */
10172 install_element (INTERFACE_NODE
, &ip_ospf_priority_addr_cmd
);
10173 install_element (INTERFACE_NODE
, &ip_ospf_priority_cmd
);
10174 install_element (INTERFACE_NODE
, &no_ip_ospf_priority_cmd
);
10175 install_element (INTERFACE_NODE
, &no_ip_ospf_priority_no_param_cmd
);
10176 install_element (INTERFACE_NODE
, &no_ip_ospf_priority_addr_cmd
);
10178 /* "ip ospf retransmit-interval" commands. */
10179 install_element (INTERFACE_NODE
, &ip_ospf_retransmit_interval_addr_cmd
);
10180 install_element (INTERFACE_NODE
, &ip_ospf_retransmit_interval_cmd
);
10181 install_element (INTERFACE_NODE
, &no_ip_ospf_retransmit_interval_addr_cmd
);
10182 install_element (INTERFACE_NODE
, &no_ip_ospf_retransmit_interval_cmd
);
10183 install_element (INTERFACE_NODE
, &no_ip_ospf_retransmit_interval_sec_addr_cmd
);
10184 install_element (INTERFACE_NODE
, &no_ip_ospf_retransmit_interval_sec_cmd
);
10186 /* "ip ospf transmit-delay" commands. */
10187 install_element (INTERFACE_NODE
, &ip_ospf_transmit_delay_addr_cmd
);
10188 install_element (INTERFACE_NODE
, &ip_ospf_transmit_delay_cmd
);
10189 install_element (INTERFACE_NODE
, &no_ip_ospf_transmit_delay_addr_cmd
);
10190 install_element (INTERFACE_NODE
, &no_ip_ospf_transmit_delay_cmd
);
10191 install_element (INTERFACE_NODE
, &no_ip_ospf_transmit_delay_sec_addr_cmd
);
10192 install_element (INTERFACE_NODE
, &no_ip_ospf_transmit_delay_sec_cmd
);
10194 /* "ip ospf area" commands. */
10195 install_element (INTERFACE_NODE
, &ip_ospf_area_cmd
);
10196 install_element (INTERFACE_NODE
, &no_ip_ospf_area_cmd
);
10197 install_element (INTERFACE_NODE
, &no_ip_ospf_area_val_cmd
);
10198 install_element (INTERFACE_NODE
, &ip_ospf_instance_area_cmd
);
10199 install_element (INTERFACE_NODE
, &no_ip_ospf_instance_area_cmd
);
10200 install_element (INTERFACE_NODE
, &no_ip_ospf_instance_area_val_cmd
);
10202 /* These commands are compatibitliy for previous version. */
10203 install_element (INTERFACE_NODE
, &ospf_authentication_key_cmd
);
10204 install_element (INTERFACE_NODE
, &no_ospf_authentication_key_cmd
);
10205 install_element (INTERFACE_NODE
, &no_ospf_authentication_key_authkey_cmd
);
10206 install_element (INTERFACE_NODE
, &no_ospf_authentication_key_authkey_ip_cmd
);
10207 install_element (INTERFACE_NODE
, &ospf_message_digest_key_cmd
);
10208 install_element (INTERFACE_NODE
, &no_ospf_message_digest_key_cmd
);
10209 install_element (INTERFACE_NODE
, &ospf_cost_u32_cmd
);
10210 install_element (INTERFACE_NODE
, &ospf_cost_u32_inet4_cmd
);
10211 install_element (INTERFACE_NODE
, &no_ospf_cost_cmd
);
10212 install_element (INTERFACE_NODE
, &no_ospf_cost_u32_cmd
);
10213 install_element (INTERFACE_NODE
, &no_ospf_cost_u32_inet4_cmd
);
10214 install_element (INTERFACE_NODE
, &no_ospf_cost_inet4_cmd
);
10215 install_element (INTERFACE_NODE
, &ospf_dead_interval_cmd
);
10216 install_element (INTERFACE_NODE
, &no_ospf_dead_interval_cmd
);
10217 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_minimal_addr_cmd
);
10218 install_element (INTERFACE_NODE
, &no_ip_ospf_dead_interval_minimal_cmd
);
10219 install_element (INTERFACE_NODE
, &ospf_hello_interval_cmd
);
10220 install_element (INTERFACE_NODE
, &no_ospf_hello_interval_cmd
);
10221 install_element (INTERFACE_NODE
, &ospf_network_cmd
);
10222 install_element (INTERFACE_NODE
, &no_ospf_network_cmd
);
10223 install_element (INTERFACE_NODE
, &no_ospf_network_val_cmd
);
10224 install_element (INTERFACE_NODE
, &ospf_priority_cmd
);
10225 install_element (INTERFACE_NODE
, &no_ospf_priority_cmd
);
10226 install_element (INTERFACE_NODE
, &ospf_retransmit_interval_cmd
);
10227 install_element (INTERFACE_NODE
, &no_ospf_retransmit_interval_cmd
);
10228 install_element (INTERFACE_NODE
, &ospf_transmit_delay_cmd
);
10229 install_element (INTERFACE_NODE
, &no_ospf_transmit_delay_cmd
);
10233 ospf_vty_zebra_init (void)
10235 install_element (OSPF_NODE
, &ospf_redistribute_source_cmd
);
10236 install_element (OSPF_NODE
, &no_ospf_redistribute_source_cmd
);
10237 install_element (OSPF_NODE
, &ospf_redistribute_instance_source_cmd
);
10238 install_element (OSPF_NODE
, &no_ospf_redistribute_instance_source_cmd
);
10240 install_element (OSPF_NODE
, &ospf_distribute_list_out_cmd
);
10241 install_element (OSPF_NODE
, &no_ospf_distribute_list_out_cmd
);
10243 install_element (OSPF_NODE
, &ospf_default_information_originate_cmd
);
10244 install_element (OSPF_NODE
, &no_ospf_default_information_originate_cmd
);
10246 install_element (OSPF_NODE
, &ospf_default_metric_cmd
);
10247 install_element (OSPF_NODE
, &no_ospf_default_metric_cmd
);
10248 install_element (OSPF_NODE
, &no_ospf_default_metric_val_cmd
);
10250 install_element (OSPF_NODE
, &ospf_distance_cmd
);
10251 install_element (OSPF_NODE
, &no_ospf_distance_cmd
);
10252 install_element (OSPF_NODE
, &no_ospf_distance_ospf_cmd
);
10253 install_element (OSPF_NODE
, &ospf_distance_ospf_cmd
);
10255 install_element (OSPF_NODE
, &ospf_distance_source_cmd
);
10256 install_element (OSPF_NODE
, &no_ospf_distance_source_cmd
);
10257 install_element (OSPF_NODE
, &ospf_distance_source_access_list_cmd
);
10258 install_element (OSPF_NODE
, &no_ospf_distance_source_access_list_cmd
);
10262 static struct cmd_node ospf_node
=
10265 "%s(config-router)# ",
10270 ospf_interface_clear (struct interface
*ifp
)
10272 if (!if_is_operative (ifp
)) return;
10274 if (IS_DEBUG_OSPF (ism
, ISM_EVENTS
))
10275 zlog (NULL
, LOG_DEBUG
, "ISM[%s]: clear by reset", ifp
->name
);
10277 ospf_if_reset(ifp
);
10280 DEFUN (clear_ip_ospf_interface
,
10281 clear_ip_ospf_interface_cmd
,
10282 "clear ip ospf interface [IFNAME]",
10285 "OSPF information\n"
10286 "Interface information\n"
10287 "Interface name\n")
10289 struct interface
*ifp
;
10290 struct listnode
*node
;
10292 if (argc
== 0) /* Clear all the ospfv2 interfaces. */
10294 for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT
), node
, ifp
))
10295 ospf_interface_clear(ifp
);
10297 else /* Interface name is specified. */
10299 if ((ifp
= if_lookup_by_name (argv
[0])) == NULL
)
10300 vty_out (vty
, "No such interface name%s", VTY_NEWLINE
);
10302 ospf_interface_clear(ifp
);
10305 return CMD_SUCCESS
;
10309 ospf_vty_clear_init (void)
10311 install_element (ENABLE_NODE
, &clear_ip_ospf_interface_cmd
);
10315 /* Install OSPF related vty commands. */
10317 ospf_vty_init (void)
10319 /* Install ospf top node. */
10320 install_node (&ospf_node
, ospf_config_write
);
10322 /* "router ospf" commands. */
10323 install_element (CONFIG_NODE
, &router_ospf_cmd
);
10324 install_element (CONFIG_NODE
, &no_router_ospf_cmd
);
10326 install_element (CONFIG_NODE
, &router_ospf_instance_cmd
);
10327 install_element (CONFIG_NODE
, &no_router_ospf_instance_cmd
);
10329 install_default (OSPF_NODE
);
10331 /* "ospf router-id" commands. */
10332 install_element (OSPF_NODE
, &ospf_router_id_cmd
);
10333 install_element (OSPF_NODE
, &ospf_router_id_old_cmd
);
10334 install_element (OSPF_NODE
, &no_ospf_router_id_cmd
);
10335 install_element (OSPF_NODE
, &no_ospf_router_id_val_cmd
);
10337 /* "passive-interface" commands. */
10338 install_element (OSPF_NODE
, &ospf_passive_interface_addr_cmd
);
10339 install_element (OSPF_NODE
, &ospf_passive_interface_cmd
);
10340 install_element (OSPF_NODE
, &ospf_passive_interface_default_cmd
);
10341 install_element (OSPF_NODE
, &no_ospf_passive_interface_addr_cmd
);
10342 install_element (OSPF_NODE
, &no_ospf_passive_interface_cmd
);
10343 install_element (OSPF_NODE
, &no_ospf_passive_interface_default_cmd
);
10345 /* "ospf abr-type" commands. */
10346 install_element (OSPF_NODE
, &ospf_abr_type_cmd
);
10347 install_element (OSPF_NODE
, &no_ospf_abr_type_cmd
);
10349 /* "ospf log-adjacency-changes" commands. */
10350 install_element (OSPF_NODE
, &ospf_log_adjacency_changes_cmd
);
10351 install_element (OSPF_NODE
, &ospf_log_adjacency_changes_detail_cmd
);
10352 install_element (OSPF_NODE
, &no_ospf_log_adjacency_changes_cmd
);
10353 install_element (OSPF_NODE
, &no_ospf_log_adjacency_changes_detail_cmd
);
10355 /* "ospf rfc1583-compatible" commands. */
10356 install_element (OSPF_NODE
, &ospf_rfc1583_flag_cmd
);
10357 install_element (OSPF_NODE
, &no_ospf_rfc1583_flag_cmd
);
10358 install_element (OSPF_NODE
, &ospf_compatible_rfc1583_cmd
);
10359 install_element (OSPF_NODE
, &no_ospf_compatible_rfc1583_cmd
);
10361 /* "network area" commands. */
10362 install_element (OSPF_NODE
, &ospf_network_area_cmd
);
10363 install_element (OSPF_NODE
, &no_ospf_network_area_cmd
);
10365 /* "area authentication" commands. */
10366 install_element (OSPF_NODE
, &ospf_area_authentication_message_digest_cmd
);
10367 install_element (OSPF_NODE
, &ospf_area_authentication_cmd
);
10368 install_element (OSPF_NODE
, &no_ospf_area_authentication_cmd
);
10370 /* "area range" commands. */
10371 install_element (OSPF_NODE
, &ospf_area_range_cmd
);
10372 install_element (OSPF_NODE
, &ospf_area_range_advertise_cmd
);
10373 install_element (OSPF_NODE
, &ospf_area_range_cost_cmd
);
10374 install_element (OSPF_NODE
, &ospf_area_range_advertise_cost_cmd
);
10375 install_element (OSPF_NODE
, &ospf_area_range_not_advertise_cmd
);
10376 install_element (OSPF_NODE
, &no_ospf_area_range_cmd
);
10377 install_element (OSPF_NODE
, &no_ospf_area_range_advertise_cmd
);
10378 install_element (OSPF_NODE
, &no_ospf_area_range_cost_cmd
);
10379 install_element (OSPF_NODE
, &no_ospf_area_range_advertise_cost_cmd
);
10380 install_element (OSPF_NODE
, &ospf_area_range_substitute_cmd
);
10381 install_element (OSPF_NODE
, &no_ospf_area_range_substitute_cmd
);
10383 /* "area virtual-link" commands. */
10384 install_element (OSPF_NODE
, &ospf_area_vlink_cmd
);
10385 install_element (OSPF_NODE
, &no_ospf_area_vlink_cmd
);
10387 install_element (OSPF_NODE
, &ospf_area_vlink_param1_cmd
);
10388 install_element (OSPF_NODE
, &no_ospf_area_vlink_param1_cmd
);
10390 install_element (OSPF_NODE
, &ospf_area_vlink_param2_cmd
);
10391 install_element (OSPF_NODE
, &no_ospf_area_vlink_param2_cmd
);
10393 install_element (OSPF_NODE
, &ospf_area_vlink_param3_cmd
);
10394 install_element (OSPF_NODE
, &no_ospf_area_vlink_param3_cmd
);
10396 install_element (OSPF_NODE
, &ospf_area_vlink_param4_cmd
);
10397 install_element (OSPF_NODE
, &no_ospf_area_vlink_param4_cmd
);
10399 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_args_cmd
);
10400 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_args_cmd
);
10401 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_cmd
);
10402 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_cmd
);
10404 install_element (OSPF_NODE
, &ospf_area_vlink_md5_cmd
);
10405 install_element (OSPF_NODE
, &no_ospf_area_vlink_md5_cmd
);
10407 install_element (OSPF_NODE
, &ospf_area_vlink_authkey_cmd
);
10408 install_element (OSPF_NODE
, &no_ospf_area_vlink_authkey_cmd
);
10410 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_args_authkey_cmd
);
10411 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_args_authkey_cmd
);
10412 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_authkey_cmd
);
10413 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_authkey_cmd
);
10415 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_args_md5_cmd
);
10416 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_args_md5_cmd
);
10417 install_element (OSPF_NODE
, &ospf_area_vlink_authtype_md5_cmd
);
10418 install_element (OSPF_NODE
, &no_ospf_area_vlink_authtype_md5_cmd
);
10420 /* "area stub" commands. */
10421 install_element (OSPF_NODE
, &ospf_area_stub_no_summary_cmd
);
10422 install_element (OSPF_NODE
, &ospf_area_stub_cmd
);
10423 install_element (OSPF_NODE
, &no_ospf_area_stub_no_summary_cmd
);
10424 install_element (OSPF_NODE
, &no_ospf_area_stub_cmd
);
10426 /* "area nssa" commands. */
10427 install_element (OSPF_NODE
, &ospf_area_nssa_cmd
);
10428 install_element (OSPF_NODE
, &ospf_area_nssa_translate_no_summary_cmd
);
10429 install_element (OSPF_NODE
, &ospf_area_nssa_translate_cmd
);
10430 install_element (OSPF_NODE
, &ospf_area_nssa_no_summary_cmd
);
10431 install_element (OSPF_NODE
, &no_ospf_area_nssa_cmd
);
10432 install_element (OSPF_NODE
, &no_ospf_area_nssa_no_summary_cmd
);
10434 install_element (OSPF_NODE
, &ospf_area_default_cost_cmd
);
10435 install_element (OSPF_NODE
, &no_ospf_area_default_cost_cmd
);
10437 install_element (OSPF_NODE
, &ospf_area_shortcut_cmd
);
10438 install_element (OSPF_NODE
, &no_ospf_area_shortcut_cmd
);
10440 install_element (OSPF_NODE
, &ospf_area_export_list_cmd
);
10441 install_element (OSPF_NODE
, &no_ospf_area_export_list_cmd
);
10443 install_element (OSPF_NODE
, &ospf_area_filter_list_cmd
);
10444 install_element (OSPF_NODE
, &no_ospf_area_filter_list_cmd
);
10446 install_element (OSPF_NODE
, &ospf_area_import_list_cmd
);
10447 install_element (OSPF_NODE
, &no_ospf_area_import_list_cmd
);
10449 /* SPF timer commands */
10450 install_element (OSPF_NODE
, &ospf_timers_throttle_spf_cmd
);
10451 install_element (OSPF_NODE
, &no_ospf_timers_throttle_spf_cmd
);
10452 install_element (OSPF_NODE
, &no_ospf_timers_throttle_spf_val_cmd
);
10454 /* LSA timers commands */
10455 install_element (OSPF_NODE
, &ospf_timers_min_ls_interval_cmd
);
10456 install_element (OSPF_NODE
, &no_ospf_timers_min_ls_interval_cmd
);
10457 install_element (OSPF_NODE
, &no_ospf_timers_min_ls_interval_val_cmd
);
10458 install_element (OSPF_NODE
, &ospf_timers_min_ls_arrival_cmd
);
10459 install_element (OSPF_NODE
, &no_ospf_timers_min_ls_arrival_cmd
);
10460 install_element (OSPF_NODE
, &no_ospf_timers_min_ls_arrival_val_cmd
);
10461 install_element (OSPF_NODE
, &ospf_timers_lsa_cmd
);
10462 install_element (OSPF_NODE
, &no_ospf_timers_lsa_cmd
);
10463 install_element (OSPF_NODE
, &no_ospf_timers_lsa_val_cmd
);
10465 /* refresh timer commands */
10466 install_element (OSPF_NODE
, &ospf_refresh_timer_cmd
);
10467 install_element (OSPF_NODE
, &no_ospf_refresh_timer_val_cmd
);
10468 install_element (OSPF_NODE
, &no_ospf_refresh_timer_cmd
);
10470 /* max-metric commands */
10471 install_element (OSPF_NODE
, &ospf_max_metric_router_lsa_admin_cmd
);
10472 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_admin_cmd
);
10473 install_element (OSPF_NODE
, &ospf_max_metric_router_lsa_startup_cmd
);
10474 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_startup_cmd
);
10475 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_startup_no_param_cmd
);
10476 install_element (OSPF_NODE
, &ospf_max_metric_router_lsa_shutdown_cmd
);
10477 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_shutdown_cmd
);
10478 install_element (OSPF_NODE
, &no_ospf_max_metric_router_lsa_shutdown_no_param_cmd
);
10480 /* reference bandwidth commands */
10481 install_element (OSPF_NODE
, &ospf_auto_cost_reference_bandwidth_cmd
);
10482 install_element (OSPF_NODE
, &no_ospf_auto_cost_reference_bandwidth_cmd
);
10483 install_element (OSPF_NODE
, &no_ospf_auto_cost_reference_bandwidth_val_cmd
);
10485 /* "neighbor" commands. */
10486 install_element (OSPF_NODE
, &ospf_neighbor_cmd
);
10487 install_element (OSPF_NODE
, &ospf_neighbor_priority_poll_interval_cmd
);
10488 install_element (OSPF_NODE
, &ospf_neighbor_priority_cmd
);
10489 install_element (OSPF_NODE
, &ospf_neighbor_poll_interval_cmd
);
10490 install_element (OSPF_NODE
, &ospf_neighbor_poll_interval_priority_cmd
);
10491 install_element (OSPF_NODE
, &no_ospf_neighbor_cmd
);
10492 install_element (OSPF_NODE
, &no_ospf_neighbor_priority_cmd
);
10493 install_element (OSPF_NODE
, &no_ospf_neighbor_poll_interval_cmd
);
10494 install_element (OSPF_NODE
, &no_ospf_neighbor_poll_interval_priority_cmd
);
10495 install_element (OSPF_NODE
, &no_ospf_neighbor_priority_pollinterval_cmd
);
10497 /* write multiplier commands */
10498 install_element (OSPF_NODE
, &ospf_write_multiplier_cmd
);
10499 install_element (OSPF_NODE
, &no_ospf_write_multiplier_cmd
);
10500 install_element (OSPF_NODE
, &write_multiplier_cmd
);
10501 install_element (OSPF_NODE
, &no_write_multiplier_cmd
);
10502 install_element (OSPF_NODE
, &no_write_multiplier_val_cmd
);
10504 /* Init interface related vty commands. */
10505 ospf_vty_if_init ();
10507 /* Init zebra related vty commands. */
10508 ospf_vty_zebra_init ();