summaryrefslogtreecommitdiff
path: root/ospfd/ospf_vty.c
diff options
context:
space:
mode:
Diffstat (limited to 'ospfd/ospf_vty.c')
-rw-r--r--ospfd/ospf_vty.c12939
1 files changed, 6481 insertions, 6458 deletions
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index f6387b7590..55d6c27e8c 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -53,88 +53,77 @@
#include "ospfd/ospf_dump.h"
#include "ospfd/ospf_bfd.h"
-static const char *ospf_network_type_str[] =
-{
- "Null",
- "POINTOPOINT",
- "BROADCAST",
- "NBMA",
- "POINTOMULTIPOINT",
- "VIRTUALLINK",
- "LOOPBACK"
-};
+static const char *ospf_network_type_str[] = {
+ "Null", "POINTOPOINT", "BROADCAST", "NBMA", "POINTOMULTIPOINT",
+ "VIRTUALLINK", "LOOPBACK"};
/* Utility functions. */
-int
-str2area_id (const char *str, struct in_addr *area_id, int *area_id_fmt)
+int str2area_id(const char *str, struct in_addr *area_id, int *area_id_fmt)
{
- char *ep;
+ char *ep;
- area_id->s_addr = htonl (strtoul (str, &ep, 10));
- if (*ep && !inet_aton (str, area_id))
- return -1;
+ area_id->s_addr = htonl(strtoul(str, &ep, 10));
+ if (*ep && !inet_aton(str, area_id))
+ return -1;
- *area_id_fmt = *ep ? OSPF_AREA_ID_FMT_DOTTEDQUAD : OSPF_AREA_ID_FMT_DECIMAL;
+ *area_id_fmt =
+ *ep ? OSPF_AREA_ID_FMT_DOTTEDQUAD : OSPF_AREA_ID_FMT_DECIMAL;
- return 0;
+ return 0;
}
-void
-area_id2str (char *buf, int length, struct in_addr *area_id, int area_id_fmt)
+void area_id2str(char *buf, int length, struct in_addr *area_id,
+ int area_id_fmt)
{
- memset (buf, 0, length);
+ memset(buf, 0, length);
- if (area_id_fmt == OSPF_AREA_ID_FMT_DOTTEDQUAD)
- strncpy (buf, inet_ntoa (*area_id), length);
- else
- sprintf (buf, "%lu", (unsigned long) ntohl (area_id->s_addr));
+ if (area_id_fmt == OSPF_AREA_ID_FMT_DOTTEDQUAD)
+ strncpy(buf, inet_ntoa(*area_id), length);
+ else
+ sprintf(buf, "%lu", (unsigned long)ntohl(area_id->s_addr));
}
-static int
-str2metric (const char *str, int *metric)
+static int str2metric(const char *str, int *metric)
{
- /* Sanity check. */
- if (str == NULL)
- return 0;
+ /* Sanity check. */
+ if (str == NULL)
+ return 0;
- *metric = strtol (str, NULL, 10);
- if (*metric < 0 && *metric > 16777214)
- {
- /* vty_out (vty, "OSPF metric value is invalid\n"); */
- return 0;
- }
+ *metric = strtol(str, NULL, 10);
+ if (*metric < 0 && *metric > 16777214) {
+ /* vty_out (vty, "OSPF metric value is invalid\n"); */
+ return 0;
+ }
- return 1;
+ return 1;
}
-static int
-str2metric_type (const char *str, int *metric_type)
+static int str2metric_type(const char *str, int *metric_type)
{
- /* Sanity check. */
- if (str == NULL)
- return 0;
+ /* Sanity check. */
+ if (str == NULL)
+ return 0;
- if (strncmp (str, "1", 1) == 0)
- *metric_type = EXTERNAL_METRIC_TYPE_1;
- else if (strncmp (str, "2", 1) == 0)
- *metric_type = EXTERNAL_METRIC_TYPE_2;
- else
- return 0;
+ if (strncmp(str, "1", 1) == 0)
+ *metric_type = EXTERNAL_METRIC_TYPE_1;
+ else if (strncmp(str, "2", 1) == 0)
+ *metric_type = EXTERNAL_METRIC_TYPE_2;
+ else
+ return 0;
- return 1;
+ return 1;
}
-int
-ospf_oi_count (struct interface *ifp)
+int ospf_oi_count(struct interface *ifp)
{
- struct route_node *rn;
- int i = 0;
+ struct route_node *rn;
+ int i = 0;
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- if (rn->info)
- i++;
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn))
+ if (rn->info)
+ i++;
- return i;
+ return i;
}
DEFUN_NOSH (router_ospf,
@@ -144,33 +133,32 @@ DEFUN_NOSH (router_ospf,
"Start OSPF configuration\n"
"Instance ID\n")
{
- struct ospf *ospf;
- u_short instance = 0;
+ struct ospf *ospf;
+ u_short instance = 0;
- ospf = ospf_lookup();
- if (!ospf)
- {
- vty_out (vty, "There isn't active ospf instance \n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (argc > 2)
- instance = strtoul (argv[2]->arg, NULL, 10);
-
- /* The following logic to set the vty qobj index is in place to be able
- to ignore the commands which dont belong to this instance. */
- if (ospf->instance != instance)
- VTY_PUSH_CONTEXT_NULL(OSPF_NODE);
- else
- {
- if (IS_DEBUG_OSPF_EVENT)
- zlog_debug ("Config command 'router ospf %d' received", instance);
- ospf->oi_running = 1;
- VTY_PUSH_CONTEXT(OSPF_NODE, ospf);
- ospf_router_id_update (ospf);
- }
-
- return CMD_SUCCESS;
+ ospf = ospf_lookup();
+ if (!ospf) {
+ vty_out(vty, "There isn't active ospf instance \n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (argc > 2)
+ instance = strtoul(argv[2]->arg, NULL, 10);
+
+ /* The following logic to set the vty qobj index is in place to be able
+ to ignore the commands which dont belong to this instance. */
+ if (ospf->instance != instance)
+ VTY_PUSH_CONTEXT_NULL(OSPF_NODE);
+ else {
+ if (IS_DEBUG_OSPF_EVENT)
+ zlog_debug("Config command 'router ospf %d' received",
+ instance);
+ ospf->oi_running = 1;
+ VTY_PUSH_CONTEXT(OSPF_NODE, ospf);
+ ospf_router_id_update(ospf);
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (no_router_ospf,
@@ -181,18 +169,18 @@ DEFUN (no_router_ospf,
"Start OSPF configuration\n"
"Instance ID\n")
{
- struct ospf *ospf;
- u_short instance = 0;
+ struct ospf *ospf;
+ u_short instance = 0;
- if (argc > 3)
- instance = strtoul(argv[3]->arg, NULL, 10);
+ if (argc > 3)
+ instance = strtoul(argv[3]->arg, NULL, 10);
- if ((ospf = ospf_lookup_instance (instance)) == NULL)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup_instance(instance)) == NULL)
+ return CMD_SUCCESS;
- ospf_finish (ospf);
+ ospf_finish(ospf);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -203,33 +191,32 @@ DEFUN (ospf_router_id,
"router-id for the OSPF process\n"
"OSPF router-id in IP address format\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4 = 2;
- struct listnode *node;
- struct ospf_area *area;
- struct in_addr router_id;
- int ret;
-
- ret = inet_aton (argv[idx_ipv4]->arg, &router_id);
- if (!ret)
- {
- vty_out (vty, "Please specify Router ID by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- ospf->router_id_static = router_id;
-
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
- if (area->full_nbrs)
- {
- vty_out (vty, "For this router-id change to take effect,"
- " save config and restart ospfd\n");
- return CMD_SUCCESS;
- }
-
- ospf_router_id_update (ospf);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4 = 2;
+ struct listnode *node;
+ struct ospf_area *area;
+ struct in_addr router_id;
+ int ret;
+
+ ret = inet_aton(argv[idx_ipv4]->arg, &router_id);
+ if (!ret) {
+ vty_out(vty, "Please specify Router ID by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ospf->router_id_static = router_id;
+
+ for (ALL_LIST_ELEMENTS_RO(ospf->areas, node, area))
+ if (area->full_nbrs) {
+ vty_out(vty,
+ "For this router-id change to take effect,"
+ " save config and restart ospfd\n");
+ return CMD_SUCCESS;
+ }
+
+ ospf_router_id_update(ospf);
+
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (ospf_router_id_old,
@@ -238,33 +225,32 @@ DEFUN_HIDDEN (ospf_router_id_old,
"router-id for the OSPF process\n"
"OSPF router-id in IP address format\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4 = 1;
- struct listnode *node;
- struct ospf_area *area;
- struct in_addr router_id;
- int ret;
-
- ret = inet_aton (argv[idx_ipv4]->arg, &router_id);
- if (!ret)
- {
- vty_out (vty, "Please specify Router ID by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- ospf->router_id_static = router_id;
-
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
- if (area->full_nbrs)
- {
- vty_out (vty, "For this router-id change to take effect,"
- " save config and restart ospfd\n");
- return CMD_SUCCESS;
- }
-
- ospf_router_id_update (ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4 = 1;
+ struct listnode *node;
+ struct ospf_area *area;
+ struct in_addr router_id;
+ int ret;
+
+ ret = inet_aton(argv[idx_ipv4]->arg, &router_id);
+ if (!ret) {
+ vty_out(vty, "Please specify Router ID by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- return CMD_SUCCESS;
+ ospf->router_id_static = router_id;
+
+ for (ALL_LIST_ELEMENTS_RO(ospf->areas, node, area))
+ if (area->full_nbrs) {
+ vty_out(vty,
+ "For this router-id change to take effect,"
+ " save config and restart ospfd\n");
+ return CMD_SUCCESS;
+ }
+
+ ospf_router_id_update(ospf);
+
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_router_id,
@@ -275,87 +261,85 @@ DEFUN (no_ospf_router_id,
"router-id for the OSPF process\n"
"OSPF router-id in IP address format\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- struct listnode *node;
- struct ospf_area *area;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ struct listnode *node;
+ struct ospf_area *area;
+
+ ospf->router_id_static.s_addr = 0;
- ospf->router_id_static.s_addr = 0;
+ for (ALL_LIST_ELEMENTS_RO(ospf->areas, node, area))
+ if (area->full_nbrs) {
+ vty_out(vty,
+ "For this router-id change to take effect,"
+ " save config and restart ospfd\n");
+ return CMD_SUCCESS;
+ }
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
- if (area->full_nbrs)
- {
- vty_out (vty, "For this router-id change to take effect,"
- " save config and restart ospfd\n");
- return CMD_SUCCESS;
- }
+ ospf_router_id_update(ospf);
- ospf_router_id_update (ospf);
+ return CMD_SUCCESS;
+}
- return CMD_SUCCESS;
+
+static void ospf_passive_interface_default(struct ospf *ospf, u_char newval)
+{
+ struct listnode *ln;
+ struct interface *ifp;
+ struct ospf_interface *oi;
+
+ ospf->passive_interface_default = newval;
+
+ for (ALL_LIST_ELEMENTS_RO(om->iflist, ln, ifp)) {
+ if (ifp && OSPF_IF_PARAM_CONFIGURED(IF_DEF_PARAMS(ifp),
+ passive_interface))
+ UNSET_IF_PARAM(IF_DEF_PARAMS(ifp), passive_interface);
+ }
+ for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, ln, oi)) {
+ if (OSPF_IF_PARAM_CONFIGURED(oi->params, passive_interface))
+ UNSET_IF_PARAM(oi->params, passive_interface);
+ /* update multicast memberships */
+ ospf_if_set_multicast(oi);
+ }
}
+static void ospf_passive_interface_update_addr(struct ospf *ospf,
+ struct interface *ifp,
+ struct ospf_if_params *params,
+ u_char value,
+ struct in_addr addr)
+{
+ u_char dflt;
-static void
-ospf_passive_interface_default (struct ospf *ospf, u_char newval)
-{
- struct listnode *ln;
- struct interface *ifp;
- struct ospf_interface *oi;
-
- ospf->passive_interface_default = newval;
-
- for (ALL_LIST_ELEMENTS_RO (om->iflist, ln, ifp))
- {
- if (ifp &&
- OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp), passive_interface))
- UNSET_IF_PARAM (IF_DEF_PARAMS (ifp), passive_interface);
- }
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, ln, oi))
- {
- if (OSPF_IF_PARAM_CONFIGURED (oi->params, passive_interface))
- UNSET_IF_PARAM (oi->params, passive_interface);
- /* update multicast memberships */
- ospf_if_set_multicast(oi);
- }
-}
-
-static void
-ospf_passive_interface_update_addr (struct ospf *ospf, struct interface *ifp,
- struct ospf_if_params *params, u_char value,
- struct in_addr addr)
-{
- u_char dflt;
-
- params->passive_interface = value;
- if (params != IF_DEF_PARAMS (ifp))
- {
- if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp), passive_interface))
- dflt = IF_DEF_PARAMS (ifp)->passive_interface;
- else
- dflt = ospf->passive_interface_default;
-
- if (value != dflt)
- SET_IF_PARAM (params, passive_interface);
- else
- UNSET_IF_PARAM (params, passive_interface);
-
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-}
-
-static void
-ospf_passive_interface_update (struct ospf *ospf, struct interface *ifp,
- struct ospf_if_params *params, u_char value)
-{
- params->passive_interface = value;
- if (params == IF_DEF_PARAMS (ifp))
- {
- if (value != ospf->passive_interface_default)
- SET_IF_PARAM (params, passive_interface);
- else
- UNSET_IF_PARAM (params, passive_interface);
- }
+ params->passive_interface = value;
+ if (params != IF_DEF_PARAMS(ifp)) {
+ if (OSPF_IF_PARAM_CONFIGURED(IF_DEF_PARAMS(ifp),
+ passive_interface))
+ dflt = IF_DEF_PARAMS(ifp)->passive_interface;
+ else
+ dflt = ospf->passive_interface_default;
+
+ if (value != dflt)
+ SET_IF_PARAM(params, passive_interface);
+ else
+ UNSET_IF_PARAM(params, passive_interface);
+
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
+}
+
+static void ospf_passive_interface_update(struct ospf *ospf,
+ struct interface *ifp,
+ struct ospf_if_params *params,
+ u_char value)
+{
+ params->passive_interface = value;
+ if (params == IF_DEF_PARAMS(ifp)) {
+ if (value != ospf->passive_interface_default)
+ SET_IF_PARAM(params, passive_interface);
+ else
+ UNSET_IF_PARAM(params, passive_interface);
+ }
}
DEFUN (ospf_passive_interface,
@@ -366,64 +350,62 @@ DEFUN (ospf_passive_interface,
"IPv4 address\n"
"Suppress routing updates on interfaces by default\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4 = 2;
- struct interface *ifp;
- struct in_addr addr = { .s_addr = INADDR_ANY };
- int ret;
- struct ospf_if_params *params;
- struct route_node *rn;
-
- if (strmatch(argv[1]->text, "default"))
- {
- ospf_passive_interface_default (ospf, OSPF_IF_PASSIVE);
- return CMD_SUCCESS;
- }
-
- ifp = if_get_by_name (argv[1]->arg, VRF_DEFAULT);
-
- params = IF_DEF_PARAMS (ifp);
-
- if (argc == 3)
- {
- ret = inet_aton(argv[idx_ipv4]->arg, &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- ospf_passive_interface_update_addr (ospf, ifp, params,
- OSPF_IF_PASSIVE, addr);
- }
-
- ospf_passive_interface_update (ospf, ifp, params, OSPF_IF_PASSIVE);
-
- /* XXX We should call ospf_if_set_multicast on exactly those
- * interfaces for which the passive property changed. It is too much
- * work to determine this set, so we do this for every interface.
- * This is safe and reasonable because ospf_if_set_multicast uses a
- * record of joined groups to avoid systems calls if the desired
- * memberships match the current memership.
- */
-
- for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
-
- if (oi && (OSPF_IF_PARAM(oi, passive_interface) == OSPF_IF_PASSIVE))
- ospf_if_set_multicast(oi);
- }
- /*
- * XXX It is not clear what state transitions the interface needs to
- * undergo when going from active to passive. Fixing this will
- * require precise identification of interfaces having such a
- * transition.
- */
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4 = 2;
+ struct interface *ifp;
+ struct in_addr addr = {.s_addr = INADDR_ANY};
+ int ret;
+ struct ospf_if_params *params;
+ struct route_node *rn;
+
+ if (strmatch(argv[1]->text, "default")) {
+ ospf_passive_interface_default(ospf, OSPF_IF_PASSIVE);
+ return CMD_SUCCESS;
+ }
+
+ ifp = if_get_by_name(argv[1]->arg, VRF_DEFAULT);
+
+ params = IF_DEF_PARAMS(ifp);
+
+ if (argc == 3) {
+ ret = inet_aton(argv[idx_ipv4]->arg, &addr);
+ if (!ret) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ ospf_passive_interface_update_addr(ospf, ifp, params,
+ OSPF_IF_PASSIVE, addr);
+ }
+
+ ospf_passive_interface_update(ospf, ifp, params, OSPF_IF_PASSIVE);
+
+ /* XXX We should call ospf_if_set_multicast on exactly those
+ * interfaces for which the passive property changed. It is too much
+ * work to determine this set, so we do this for every interface.
+ * This is safe and reasonable because ospf_if_set_multicast uses a
+ * record of joined groups to avoid systems calls if the desired
+ * memberships match the current memership.
+ */
+
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
+ struct ospf_interface *oi = rn->info;
+
+ if (oi && (OSPF_IF_PARAM(oi, passive_interface)
+ == OSPF_IF_PASSIVE))
+ ospf_if_set_multicast(oi);
+ }
+ /*
+ * XXX It is not clear what state transitions the interface needs to
+ * undergo when going from active to passive. Fixing this will
+ * require precise identification of interfaces having such a
+ * transition.
+ */
+
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_passive_interface,
@@ -435,61 +417,58 @@ DEFUN (no_ospf_passive_interface,
"IPv4 address\n"
"Allow routing updates on interfaces by default\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4 = 3;
- struct interface *ifp;
- struct in_addr addr = { .s_addr = INADDR_ANY };
- struct ospf_if_params *params;
- int ret;
- struct route_node *rn;
-
- if (strmatch(argv[2]->text, "default"))
- {
- ospf_passive_interface_default (ospf, OSPF_IF_ACTIVE);
- return CMD_SUCCESS;
- }
-
- ifp = if_get_by_name (argv[2]->arg, VRF_DEFAULT);
-
- params = IF_DEF_PARAMS (ifp);
-
- if (argc == 4)
- {
- ret = inet_aton(argv[idx_ipv4]->arg, &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4 = 3;
+ struct interface *ifp;
+ struct in_addr addr = {.s_addr = INADDR_ANY};
+ struct ospf_if_params *params;
+ int ret;
+ struct route_node *rn;
+
+ if (strmatch(argv[2]->text, "default")) {
+ ospf_passive_interface_default(ospf, OSPF_IF_ACTIVE);
+ return CMD_SUCCESS;
}
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- ospf_passive_interface_update_addr (ospf, ifp, params, OSPF_IF_ACTIVE,
- addr);
- }
- ospf_passive_interface_update (ospf, ifp, params, OSPF_IF_ACTIVE);
-
- /* XXX We should call ospf_if_set_multicast on exactly those
- * interfaces for which the passive property changed. It is too much
- * work to determine this set, so we do this for every interface.
- * This is safe and reasonable because ospf_if_set_multicast uses a
- * record of joined groups to avoid systems calls if the desired
- * memberships match the current memership.
- */
- for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
-
- if (oi && (OSPF_IF_PARAM(oi, passive_interface) == OSPF_IF_ACTIVE))
- ospf_if_set_multicast(oi);
- }
+ ifp = if_get_by_name(argv[2]->arg, VRF_DEFAULT);
- return CMD_SUCCESS;
+ params = IF_DEF_PARAMS(ifp);
+
+ if (argc == 4) {
+ ret = inet_aton(argv[idx_ipv4]->arg, &addr);
+ if (!ret) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ params = ospf_lookup_if_params(ifp, addr);
+ if (params == NULL)
+ return CMD_SUCCESS;
+ ospf_passive_interface_update_addr(ospf, ifp, params,
+ OSPF_IF_ACTIVE, addr);
+ }
+ ospf_passive_interface_update(ospf, ifp, params, OSPF_IF_ACTIVE);
+
+ /* XXX We should call ospf_if_set_multicast on exactly those
+ * interfaces for which the passive property changed. It is too much
+ * work to determine this set, so we do this for every interface.
+ * This is safe and reasonable because ospf_if_set_multicast uses a
+ * record of joined groups to avoid systems calls if the desired
+ * memberships match the current memership.
+ */
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
+ struct ospf_interface *oi = rn->info;
+
+ if (oi
+ && (OSPF_IF_PARAM(oi, passive_interface) == OSPF_IF_ACTIVE))
+ ospf_if_set_multicast(oi);
+ }
+
+ return CMD_SUCCESS;
}
-
DEFUN (ospf_network_area,
ospf_network_area_cmd,
"network A.B.C.D/M area <A.B.C.D|(0-4294967295)>",
@@ -499,37 +478,36 @@ DEFUN (ospf_network_area,
"OSPF area ID in IP address format\n"
"OSPF area ID as a decimal value\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_prefixlen = 1;
- int idx_ipv4_number = 3;
- struct prefix_ipv4 p;
- struct in_addr area_id;
- int ret, format;
-
- if (ospf->instance)
- {
- vty_out (vty, "The network command is not supported in multi-instance ospf\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (ospf->if_ospf_cli_count > 0)
- {
- vty_out (vty, "Please remove all ip ospf area x.x.x.x commands first.\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* Get network prefix and Area ID. */
- str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
-
- ret = ospf_network_set (ospf, &p, area_id, format);
- if (ret == 0)
- {
- vty_out (vty, "There is already same network statement.\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_prefixlen = 1;
+ int idx_ipv4_number = 3;
+ struct prefix_ipv4 p;
+ struct in_addr area_id;
+ int ret, format;
+
+ if (ospf->instance) {
+ vty_out(vty,
+ "The network command is not supported in multi-instance ospf\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- return CMD_SUCCESS;
+ if (ospf->if_ospf_cli_count > 0) {
+ vty_out(vty,
+ "Please remove all ip ospf area x.x.x.x commands first.\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* Get network prefix and Area ID. */
+ str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
+
+ ret = ospf_network_set(ospf, &p, area_id, format);
+ if (ret == 0) {
+ vty_out(vty, "There is already same network statement.\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_network_area,
@@ -542,31 +520,31 @@ DEFUN (no_ospf_network_area,
"OSPF area ID in IP address format\n"
"OSPF area ID as a decimal value\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_prefixlen = 2;
- int idx_ipv4_number = 4;
- struct prefix_ipv4 p;
- struct in_addr area_id;
- int ret, format;
-
- if (ospf->instance)
- {
- vty_out (vty, "The network command is not supported in multi-instance ospf\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* Get network prefix and Area ID. */
- str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
-
- ret = ospf_network_unset (ospf, &p, area_id);
- if (ret == 0)
- {
- vty_out (vty, "Can't find specified network area configuration.\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_prefixlen = 2;
+ int idx_ipv4_number = 4;
+ struct prefix_ipv4 p;
+ struct in_addr area_id;
+ int ret, format;
+
+ if (ospf->instance) {
+ vty_out(vty,
+ "The network command is not supported in multi-instance ospf\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- return CMD_SUCCESS;
+ /* Get network prefix and Area ID. */
+ str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
+
+ ret = ospf_network_unset(ospf, &p, area_id);
+ if (ret == 0) {
+ vty_out(vty,
+ "Can't find specified network area configuration.\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (ospf_area_range,
@@ -581,26 +559,25 @@ DEFUN (ospf_area_range,
"User specified metric for this range\n"
"Advertised metric for this range\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- int idx_ipv4_prefixlen = 3;
- int idx_cost = 6;
- struct prefix_ipv4 p;
- struct in_addr area_id;
- int format;
- u_int32_t cost;
-
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
- str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
-
- ospf_area_range_set (ospf, area_id, &p, OSPF_AREA_RANGE_ADVERTISE);
- if (argc > 5)
- {
- cost = strtoul(argv[idx_cost]->arg, NULL, 10);
- ospf_area_range_cost_set (ospf, area_id, &p, cost);
- }
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ int idx_ipv4_prefixlen = 3;
+ int idx_cost = 6;
+ struct prefix_ipv4 p;
+ struct in_addr area_id;
+ int format;
+ u_int32_t cost;
+
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
+ str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
+
+ ospf_area_range_set(ospf, area_id, &p, OSPF_AREA_RANGE_ADVERTISE);
+ if (argc > 5) {
+ cost = strtoul(argv[idx_cost]->arg, NULL, 10);
+ ospf_area_range_cost_set(ospf, area_id, &p, cost);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ospf_area_range_cost,
@@ -614,25 +591,26 @@ DEFUN (ospf_area_range_cost,
"User specified metric for this range\n"
"Advertised metric for this range\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- int idx_ipv4_prefixlen = 3;
- int idx_cost = 5;
- struct prefix_ipv4 p;
- struct in_addr area_id;
- int format;
- u_int32_t cost;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ int idx_ipv4_prefixlen = 3;
+ int idx_cost = 5;
+ struct prefix_ipv4 p;
+ struct in_addr area_id;
+ int format;
+ u_int32_t cost;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
- str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
+ str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
- ospf_area_range_set (ospf, area_id, &p, OSPF_AREA_RANGE_ADVERTISE);
- ospf_area_display_format_set (ospf, ospf_area_get (ospf, area_id), format);
+ ospf_area_range_set(ospf, area_id, &p, OSPF_AREA_RANGE_ADVERTISE);
+ ospf_area_display_format_set(ospf, ospf_area_get(ospf, area_id),
+ format);
- cost = strtoul(argv[idx_cost]->arg, NULL, 10);
- ospf_area_range_cost_set (ospf, area_id, &p, cost);
+ cost = strtoul(argv[idx_cost]->arg, NULL, 10);
+ ospf_area_range_cost_set(ospf, area_id, &p, cost);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ospf_area_range_not_advertise,
@@ -645,20 +623,21 @@ DEFUN (ospf_area_range_not_advertise,
"Area range prefix\n"
"DoNotAdvertise this range\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- int idx_ipv4_prefixlen = 3;
- struct prefix_ipv4 p;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ int idx_ipv4_prefixlen = 3;
+ struct prefix_ipv4 p;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
- str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
+ str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
- ospf_area_range_set (ospf, area_id, &p, 0);
- ospf_area_display_format_set (ospf, ospf_area_get (ospf, area_id), format);
+ ospf_area_range_set(ospf, area_id, &p, 0);
+ ospf_area_display_format_set(ospf, ospf_area_get(ospf, area_id),
+ format);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_area_range,
@@ -677,19 +656,19 @@ DEFUN (no_ospf_area_range,
"Advertised metric for this range\n"
"DoNotAdvertise this range\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 2;
- int idx_ipv4_prefixlen = 4;
- struct prefix_ipv4 p;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 2;
+ int idx_ipv4_prefixlen = 4;
+ struct prefix_ipv4 p;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
- str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
+ str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
- ospf_area_range_unset (ospf, area_id, &p);
+ ospf_area_range_unset(ospf, area_id, &p);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ospf_area_range_substitute,
@@ -703,22 +682,23 @@ DEFUN (ospf_area_range_substitute,
"Announce area range as another prefix\n"
"Network prefix to be announced instead of range\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- int idx_ipv4_prefixlen = 3;
- int idx_ipv4_prefixlen_2 = 5;
- struct prefix_ipv4 p, s;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ int idx_ipv4_prefixlen = 3;
+ int idx_ipv4_prefixlen_2 = 5;
+ struct prefix_ipv4 p, s;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
- str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
- str2prefix_ipv4(argv[idx_ipv4_prefixlen_2]->arg, &s);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
+ str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
+ str2prefix_ipv4(argv[idx_ipv4_prefixlen_2]->arg, &s);
- ospf_area_range_substitute_set (ospf, area_id, &p, &s);
- ospf_area_display_format_set (ospf, ospf_area_get (ospf, area_id), format);
+ ospf_area_range_substitute_set(ospf, area_id, &p, &s);
+ ospf_area_display_format_set(ospf, ospf_area_get(ospf, area_id),
+ format);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_area_range_substitute,
@@ -733,21 +713,21 @@ DEFUN (no_ospf_area_range_substitute,
"Announce area range as another prefix\n"
"Network prefix to be announced instead of range\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 2;
- int idx_ipv4_prefixlen = 4;
- int idx_ipv4_prefixlen_2 = 6;
- struct prefix_ipv4 p, s;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 2;
+ int idx_ipv4_prefixlen = 4;
+ int idx_ipv4_prefixlen_2 = 6;
+ struct prefix_ipv4 p, s;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
- str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
- str2prefix_ipv4(argv[idx_ipv4_prefixlen_2]->arg, &s);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
+ str2prefix_ipv4(argv[idx_ipv4_prefixlen]->arg, &p);
+ str2prefix_ipv4(argv[idx_ipv4_prefixlen_2]->arg, &s);
- ospf_area_range_substitute_unset (ospf, area_id, &p);
+ ospf_area_range_substitute_unset(ospf, area_id, &p);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -762,243 +742,232 @@ DEFUN (no_ospf_area_range_substitute,
bacckend handler. This is to drastically reduce the verbeage
required to coe up with a reasonably compatible Cisco VLink command
- - Matthew Grant <grantma@anathoth.gen.nz>
+ - Matthew Grant <grantma@anathoth.gen.nz>
Wed, 21 Feb 2001 15:13:52 +1300
*/
-/* Configuration data for virtual links
- */
+/* Configuration data for virtual links
+ */
struct ospf_vl_config_data {
- struct vty *vty; /* vty stuff */
- struct in_addr area_id; /* area ID from command line */
- int area_id_fmt; /* command line area ID format */
- struct in_addr vl_peer; /* command line vl_peer */
- int auth_type; /* Authehntication type, if given */
- char *auth_key; /* simple password if present */
- int crypto_key_id; /* Cryptographic key ID */
- char *md5_key; /* MD5 authentication key */
- int hello_interval; /* Obvious what these are... */
- int retransmit_interval;
- int transmit_delay;
- int dead_interval;
+ struct vty *vty; /* vty stuff */
+ struct in_addr area_id; /* area ID from command line */
+ int area_id_fmt; /* command line area ID format */
+ struct in_addr vl_peer; /* command line vl_peer */
+ int auth_type; /* Authehntication type, if given */
+ char *auth_key; /* simple password if present */
+ int crypto_key_id; /* Cryptographic key ID */
+ char *md5_key; /* MD5 authentication key */
+ int hello_interval; /* Obvious what these are... */
+ int retransmit_interval;
+ int transmit_delay;
+ int dead_interval;
};
-static void
-ospf_vl_config_data_init (struct ospf_vl_config_data *vl_config,
- struct vty *vty)
+static void ospf_vl_config_data_init(struct ospf_vl_config_data *vl_config,
+ struct vty *vty)
{
- memset (vl_config, 0, sizeof (struct ospf_vl_config_data));
- vl_config->auth_type = OSPF_AUTH_CMD_NOTSEEN;
- vl_config->vty = vty;
+ memset(vl_config, 0, sizeof(struct ospf_vl_config_data));
+ vl_config->auth_type = OSPF_AUTH_CMD_NOTSEEN;
+ vl_config->vty = vty;
}
static struct ospf_vl_data *
-ospf_find_vl_data (struct ospf *ospf, struct ospf_vl_config_data *vl_config)
-{
- struct ospf_area *area;
- struct ospf_vl_data *vl_data;
- struct vty *vty;
- struct in_addr area_id;
-
- vty = vl_config->vty;
- area_id = vl_config->area_id;
-
- if (area_id.s_addr == OSPF_AREA_BACKBONE)
- {
- vty_out (vty,
- "Configuring VLs over the backbone is not allowed\n");
- return NULL;
- }
- area = ospf_area_get (ospf, area_id);
- ospf_area_display_format_set (ospf, area, vl_config->area_id_fmt);
-
- if (area->external_routing != OSPF_AREA_DEFAULT)
- {
- if (vl_config->area_id_fmt == OSPF_AREA_ID_FMT_DOTTEDQUAD)
- vty_out (vty, "Area %s is %s\n",
- inet_ntoa (area_id),
- area->external_routing == OSPF_AREA_NSSA?"nssa":"stub");
- else
- vty_out (vty, "Area %ld is %s\n",
- (u_long)ntohl (area_id.s_addr),
- area->external_routing == OSPF_AREA_NSSA?"nssa":"stub");
- return NULL;
- }
-
- if ((vl_data = ospf_vl_lookup (ospf, area, vl_config->vl_peer)) == NULL)
- {
- vl_data = ospf_vl_data_new (area, vl_config->vl_peer);
- if (vl_data->vl_oi == NULL)
- {
- vl_data->vl_oi = ospf_vl_new (ospf, vl_data);
- ospf_vl_add (ospf, vl_data);
- ospf_spf_calculate_schedule (ospf, SPF_FLAG_CONFIG_CHANGE);
+ospf_find_vl_data(struct ospf *ospf, struct ospf_vl_config_data *vl_config)
+{
+ struct ospf_area *area;
+ struct ospf_vl_data *vl_data;
+ struct vty *vty;
+ struct in_addr area_id;
+
+ vty = vl_config->vty;
+ area_id = vl_config->area_id;
+
+ if (area_id.s_addr == OSPF_AREA_BACKBONE) {
+ vty_out(vty,
+ "Configuring VLs over the backbone is not allowed\n");
+ return NULL;
+ }
+ area = ospf_area_get(ospf, area_id);
+ ospf_area_display_format_set(ospf, area, vl_config->area_id_fmt);
+
+ if (area->external_routing != OSPF_AREA_DEFAULT) {
+ if (vl_config->area_id_fmt == OSPF_AREA_ID_FMT_DOTTEDQUAD)
+ vty_out(vty, "Area %s is %s\n", inet_ntoa(area_id),
+ area->external_routing == OSPF_AREA_NSSA
+ ? "nssa"
+ : "stub");
+ else
+ vty_out(vty, "Area %ld is %s\n",
+ (u_long)ntohl(area_id.s_addr),
+ area->external_routing == OSPF_AREA_NSSA
+ ? "nssa"
+ : "stub");
+ return NULL;
+ }
+
+ if ((vl_data = ospf_vl_lookup(ospf, area, vl_config->vl_peer))
+ == NULL) {
+ vl_data = ospf_vl_data_new(area, vl_config->vl_peer);
+ if (vl_data->vl_oi == NULL) {
+ vl_data->vl_oi = ospf_vl_new(ospf, vl_data);
+ ospf_vl_add(ospf, vl_data);
+ ospf_spf_calculate_schedule(ospf,
+ SPF_FLAG_CONFIG_CHANGE);
+ }
}
- }
- return vl_data;
+ return vl_data;
}
-static int
-ospf_vl_set_security (struct ospf_vl_data *vl_data,
- struct ospf_vl_config_data *vl_config)
-{
- struct crypt_key *ck;
- struct vty *vty;
- struct interface *ifp = vl_data->vl_oi->ifp;
-
- vty = vl_config->vty;
-
- if (vl_config->auth_type != OSPF_AUTH_CMD_NOTSEEN)
- {
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), auth_type);
- IF_DEF_PARAMS (ifp)->auth_type = vl_config->auth_type;
- }
-
- if (vl_config->auth_key)
- {
- memset(IF_DEF_PARAMS (ifp)->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE+1);
- strncpy ((char *) IF_DEF_PARAMS (ifp)->auth_simple, vl_config->auth_key,
- OSPF_AUTH_SIMPLE_SIZE);
- }
- else if (vl_config->md5_key)
- {
- if (ospf_crypt_key_lookup (IF_DEF_PARAMS (ifp)->auth_crypt, vl_config->crypto_key_id)
- != NULL)
- {
- vty_out (vty, "OSPF: Key %d already exists\n",
- vl_config->crypto_key_id);
- return CMD_WARNING_CONFIG_FAILED;
- }
- ck = ospf_crypt_key_new ();
- ck->key_id = vl_config->crypto_key_id;
- memset(ck->auth_key, 0, OSPF_AUTH_MD5_SIZE+1);
- strncpy ((char *) ck->auth_key, vl_config->md5_key, OSPF_AUTH_MD5_SIZE);
-
- ospf_crypt_key_add (IF_DEF_PARAMS (ifp)->auth_crypt, ck);
- }
- else if (vl_config->crypto_key_id != 0)
- {
- /* Delete a key */
-
- if (ospf_crypt_key_lookup (IF_DEF_PARAMS (ifp)->auth_crypt,
- vl_config->crypto_key_id) == NULL)
- {
- vty_out (vty, "OSPF: Key %d does not exist\n",
- vl_config->crypto_key_id);
- return CMD_WARNING_CONFIG_FAILED;
+static int ospf_vl_set_security(struct ospf_vl_data *vl_data,
+ struct ospf_vl_config_data *vl_config)
+{
+ struct crypt_key *ck;
+ struct vty *vty;
+ struct interface *ifp = vl_data->vl_oi->ifp;
+
+ vty = vl_config->vty;
+
+ if (vl_config->auth_type != OSPF_AUTH_CMD_NOTSEEN) {
+ SET_IF_PARAM(IF_DEF_PARAMS(ifp), auth_type);
+ IF_DEF_PARAMS(ifp)->auth_type = vl_config->auth_type;
}
-
- ospf_crypt_key_delete (IF_DEF_PARAMS (ifp)->auth_crypt, vl_config->crypto_key_id);
- }
-
- return CMD_SUCCESS;
+ if (vl_config->auth_key) {
+ memset(IF_DEF_PARAMS(ifp)->auth_simple, 0,
+ OSPF_AUTH_SIMPLE_SIZE + 1);
+ strncpy((char *)IF_DEF_PARAMS(ifp)->auth_simple,
+ vl_config->auth_key, OSPF_AUTH_SIMPLE_SIZE);
+ } else if (vl_config->md5_key) {
+ if (ospf_crypt_key_lookup(IF_DEF_PARAMS(ifp)->auth_crypt,
+ vl_config->crypto_key_id)
+ != NULL) {
+ vty_out(vty, "OSPF: Key %d already exists\n",
+ vl_config->crypto_key_id);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ ck = ospf_crypt_key_new();
+ ck->key_id = vl_config->crypto_key_id;
+ memset(ck->auth_key, 0, OSPF_AUTH_MD5_SIZE + 1);
+ strncpy((char *)ck->auth_key, vl_config->md5_key,
+ OSPF_AUTH_MD5_SIZE);
+
+ ospf_crypt_key_add(IF_DEF_PARAMS(ifp)->auth_crypt, ck);
+ } else if (vl_config->crypto_key_id != 0) {
+ /* Delete a key */
+
+ if (ospf_crypt_key_lookup(IF_DEF_PARAMS(ifp)->auth_crypt,
+ vl_config->crypto_key_id)
+ == NULL) {
+ vty_out(vty, "OSPF: Key %d does not exist\n",
+ vl_config->crypto_key_id);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ospf_crypt_key_delete(IF_DEF_PARAMS(ifp)->auth_crypt,
+ vl_config->crypto_key_id);
+ }
+
+ return CMD_SUCCESS;
}
-static int
-ospf_vl_set_timers (struct ospf_vl_data *vl_data,
- struct ospf_vl_config_data *vl_config)
-{
- struct interface *ifp = vl_data->vl_oi->ifp;
- /* Virtual Link data initialised to defaults, so only set
- if a value given */
- if (vl_config->hello_interval)
- {
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), v_hello);
- IF_DEF_PARAMS (ifp)->v_hello = vl_config->hello_interval;
- }
-
- if (vl_config->dead_interval)
- {
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), v_wait);
- IF_DEF_PARAMS (ifp)->v_wait = vl_config->dead_interval;
- }
-
- if (vl_config->retransmit_interval)
- {
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), retransmit_interval);
- IF_DEF_PARAMS (ifp)->retransmit_interval = vl_config->retransmit_interval;
- }
-
- if (vl_config->transmit_delay)
- {
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), transmit_delay);
- IF_DEF_PARAMS (ifp)->transmit_delay = vl_config->transmit_delay;
- }
-
- return CMD_SUCCESS;
+static int ospf_vl_set_timers(struct ospf_vl_data *vl_data,
+ struct ospf_vl_config_data *vl_config)
+{
+ struct interface *ifp = vl_data->vl_oi->ifp;
+ /* Virtual Link data initialised to defaults, so only set
+ if a value given */
+ if (vl_config->hello_interval) {
+ SET_IF_PARAM(IF_DEF_PARAMS(ifp), v_hello);
+ IF_DEF_PARAMS(ifp)->v_hello = vl_config->hello_interval;
+ }
+
+ if (vl_config->dead_interval) {
+ SET_IF_PARAM(IF_DEF_PARAMS(ifp), v_wait);
+ IF_DEF_PARAMS(ifp)->v_wait = vl_config->dead_interval;
+ }
+
+ if (vl_config->retransmit_interval) {
+ SET_IF_PARAM(IF_DEF_PARAMS(ifp), retransmit_interval);
+ IF_DEF_PARAMS(ifp)->retransmit_interval =
+ vl_config->retransmit_interval;
+ }
+
+ if (vl_config->transmit_delay) {
+ SET_IF_PARAM(IF_DEF_PARAMS(ifp), transmit_delay);
+ IF_DEF_PARAMS(ifp)->transmit_delay = vl_config->transmit_delay;
+ }
+
+ return CMD_SUCCESS;
}
/* The business end of all of the above */
-static int
-ospf_vl_set (struct ospf *ospf, struct ospf_vl_config_data *vl_config)
-{
- struct ospf_vl_data *vl_data;
- int ret;
-
- vl_data = ospf_find_vl_data (ospf, vl_config);
- if (!vl_data)
- return CMD_WARNING_CONFIG_FAILED;
-
- /* Process this one first as it can have a fatal result, which can
- only logically occur if the virtual link exists already
- Thus a command error does not result in a change to the
- running configuration such as unexpectedly altered timer
- values etc.*/
- ret = ospf_vl_set_security (vl_data, vl_config);
- if (ret != CMD_SUCCESS)
- return ret;
-
- /* Set any time based parameters, these area already range checked */
-
- ret = ospf_vl_set_timers (vl_data, vl_config);
- if (ret != CMD_SUCCESS)
- return ret;
+static int ospf_vl_set(struct ospf *ospf, struct ospf_vl_config_data *vl_config)
+{
+ struct ospf_vl_data *vl_data;
+ int ret;
- return CMD_SUCCESS;
+ vl_data = ospf_find_vl_data(ospf, vl_config);
+ if (!vl_data)
+ return CMD_WARNING_CONFIG_FAILED;
+ /* Process this one first as it can have a fatal result, which can
+ only logically occur if the virtual link exists already
+ Thus a command error does not result in a change to the
+ running configuration such as unexpectedly altered timer
+ values etc.*/
+ ret = ospf_vl_set_security(vl_data, vl_config);
+ if (ret != CMD_SUCCESS)
+ return ret;
+
+ /* Set any time based parameters, these area already range checked */
+
+ ret = ospf_vl_set_timers(vl_data, vl_config);
+ if (ret != CMD_SUCCESS)
+ return ret;
+
+ return CMD_SUCCESS;
}
/* This stuff exists to make specifying all the alias commands A LOT simpler
*/
-#define VLINK_HELPSTR_IPADDR \
- "OSPF area parameters\n" \
- "OSPF area ID in IP address format\n" \
- "OSPF area ID as a decimal value\n" \
- "Configure a virtual link\n" \
- "Router ID of the remote ABR\n"
-
-#define VLINK_HELPSTR_AUTHTYPE_SIMPLE \
- "Enable authentication on this virtual link\n" \
- "dummy string \n"
-
-#define VLINK_HELPSTR_AUTHTYPE_ALL \
- VLINK_HELPSTR_AUTHTYPE_SIMPLE \
- "Use null authentication\n" \
- "Use message-digest authentication\n"
-
-#define VLINK_HELPSTR_TIME_PARAM \
- "Time between HELLO packets\n" \
- "Seconds\n" \
- "Time between retransmitting lost link state advertisements\n" \
- "Seconds\n" \
- "Link state transmit delay\n" \
- "Seconds\n" \
- "Interval time after which a neighbor is declared down\n" \
- "Seconds\n" \
-
-#define VLINK_HELPSTR_AUTH_SIMPLE \
- "Authentication password (key)\n" \
- "The OSPF password (key)"
-
-#define VLINK_HELPSTR_AUTH_MD5 \
- "Message digest authentication password (key)\n" \
- "dummy string \n" \
- "Key ID\n" \
- "Use MD5 algorithm\n" \
- "The OSPF password (key)"
+#define VLINK_HELPSTR_IPADDR \
+ "OSPF area parameters\n" \
+ "OSPF area ID in IP address format\n" \
+ "OSPF area ID as a decimal value\n" \
+ "Configure a virtual link\n" \
+ "Router ID of the remote ABR\n"
+
+#define VLINK_HELPSTR_AUTHTYPE_SIMPLE \
+ "Enable authentication on this virtual link\n" \
+ "dummy string \n"
+
+#define VLINK_HELPSTR_AUTHTYPE_ALL \
+ VLINK_HELPSTR_AUTHTYPE_SIMPLE \
+ "Use null authentication\n" \
+ "Use message-digest authentication\n"
+
+#define VLINK_HELPSTR_TIME_PARAM \
+ "Time between HELLO packets\n" \
+ "Seconds\n" \
+ "Time between retransmitting lost link state advertisements\n" \
+ "Seconds\n" \
+ "Link state transmit delay\n" \
+ "Seconds\n" \
+ "Interval time after which a neighbor is declared down\n" \
+ "Seconds\n"
+
+#define VLINK_HELPSTR_AUTH_SIMPLE \
+ "Authentication password (key)\n" \
+ "The OSPF password (key)"
+
+#define VLINK_HELPSTR_AUTH_MD5 \
+ "Message digest authentication password (key)\n" \
+ "dummy string \n" \
+ "Key ID\n" \
+ "Use MD5 algorithm\n" \
+ "The OSPF password (key)"
DEFUN (ospf_area_vlink,
ospf_area_vlink_cmd,
@@ -1012,111 +981,115 @@ DEFUN (ospf_area_vlink,
"Use MD5 algorithm\n" \
"The OSPF password (key)")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- int idx_ipv4 = 3;
- struct ospf_vl_config_data vl_config;
- char auth_key[OSPF_AUTH_SIMPLE_SIZE+1];
- char md5_key[OSPF_AUTH_MD5_SIZE+1];
- int i;
- int ret;
-
- ospf_vl_config_data_init(&vl_config, vty);
-
- /* Read off first 2 parameters and check them */
- ret = str2area_id (argv[idx_ipv4_number]->arg, &vl_config.area_id,
- &vl_config.area_id_fmt);
- if (ret < 0)
- {
- vty_out (vty, "OSPF area ID is invalid\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- ret = inet_aton (argv[idx_ipv4]->arg, &vl_config.vl_peer);
- if (! ret)
- {
- vty_out (vty, "Please specify valid Router ID as a.b.c.d\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (argc <=4)
- {
- /* Thats all folks! - BUGS B. strikes again!!!*/
-
- return ospf_vl_set (ospf, &vl_config);
- }
-
- /* Deal with other parameters */
- for (i=5; i < argc; i++)
- {
-
- /* vty_out (vty, "argv[%d]->arg - %s\n", i, argv[i]->text); */
-
- switch (argv[i]->arg[0])
- {
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ int idx_ipv4 = 3;
+ struct ospf_vl_config_data vl_config;
+ char auth_key[OSPF_AUTH_SIMPLE_SIZE + 1];
+ char md5_key[OSPF_AUTH_MD5_SIZE + 1];
+ int i;
+ int ret;
+
+ ospf_vl_config_data_init(&vl_config, vty);
+
+ /* Read off first 2 parameters and check them */
+ ret = str2area_id(argv[idx_ipv4_number]->arg, &vl_config.area_id,
+ &vl_config.area_id_fmt);
+ if (ret < 0) {
+ vty_out(vty, "OSPF area ID is invalid\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- case 'a':
- if (i >5 || strncmp (argv[i]->arg, "authentication-", 15) == 0)
- {
- /* authentication-key - this option can occur anywhere on
- command line. At start of command line
- must check for authentication option. */
- memset (auth_key, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
- strncpy (auth_key, argv[i+1]->text, OSPF_AUTH_SIMPLE_SIZE);
- vl_config.auth_key = auth_key;
- i++;
- }
- else if (strncmp (argv[i]->arg, "authentication", 14) == 0)
- {
- /* authentication - this option can only occur at start
- of command line */
- vl_config.auth_type = OSPF_AUTH_SIMPLE;
- if ((i+1) < argc)
- {
- if (strncmp (argv[i+1]->arg, "n", 1) == 0)
- {
- /* "authentication null" */
- vl_config.auth_type = OSPF_AUTH_NULL;
- i++;
- }
- else if (strncmp (argv[i+1]->arg, "m", 1) == 0
- && !strmatch(argv[i + 1]->text, "message-digest-"))
- {
- /* "authentication message-digest" */
- vl_config.auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
- i++;
- }
- }
- }
- break;
-
- case 'm':
- /* message-digest-key */
- i++;
- if (i < argc)
- {
- vl_config.crypto_key_id = strtol (argv[i]->arg, NULL, 10);
- if (vl_config.crypto_key_id < 0)
- return CMD_WARNING_CONFIG_FAILED;
- i++;
- if (i < argc)
- {
- memset(md5_key, 0, OSPF_AUTH_MD5_SIZE+1);
- strncpy (md5_key, argv[i]->arg, OSPF_AUTH_MD5_SIZE);
- vl_config.md5_key = md5_key;
- }
- }
- else
- vl_config.md5_key = NULL;
- break;
+ ret = inet_aton(argv[idx_ipv4]->arg, &vl_config.vl_peer);
+ if (!ret) {
+ vty_out(vty, "Please specify valid Router ID as a.b.c.d\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (argc <= 4) {
+ /* Thats all folks! - BUGS B. strikes again!!!*/
+
+ return ospf_vl_set(ospf, &vl_config);
}
- }
+ /* Deal with other parameters */
+ for (i = 5; i < argc; i++) {
+
+ /* vty_out (vty, "argv[%d]->arg - %s\n", i, argv[i]->text); */
+
+ switch (argv[i]->arg[0]) {
+
+ case 'a':
+ if (i > 5
+ || strncmp(argv[i]->arg, "authentication-", 15)
+ == 0) {
+ /* authentication-key - this option can occur
+ anywhere on
+ command line. At start
+ of command line
+ must check for
+ authentication option. */
+ memset(auth_key, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
+ strncpy(auth_key, argv[i + 1]->text,
+ OSPF_AUTH_SIMPLE_SIZE);
+ vl_config.auth_key = auth_key;
+ i++;
+ } else if (strncmp(argv[i]->arg, "authentication", 14)
+ == 0) {
+ /* authentication - this option can only occur
+ at start
+ of command line */
+ vl_config.auth_type = OSPF_AUTH_SIMPLE;
+ if ((i + 1) < argc) {
+ if (strncmp(argv[i + 1]->arg, "n", 1)
+ == 0) {
+ /* "authentication null" */
+ vl_config.auth_type =
+ OSPF_AUTH_NULL;
+ i++;
+ } else if (
+ strncmp(argv[i + 1]->arg, "m",
+ 1)
+ == 0
+ && !strmatch(
+ argv[i + 1]->text,
+ "message-digest-")) {
+ /* "authentication
+ * message-digest" */
+ vl_config.auth_type =
+ OSPF_AUTH_CRYPTOGRAPHIC;
+ i++;
+ }
+ }
+ }
+ break;
+
+ case 'm':
+ /* message-digest-key */
+ i++;
+ if (i < argc) {
+ vl_config.crypto_key_id =
+ strtol(argv[i]->arg, NULL, 10);
+ if (vl_config.crypto_key_id < 0)
+ return CMD_WARNING_CONFIG_FAILED;
+ i++;
+ if (i < argc) {
+ memset(md5_key, 0,
+ OSPF_AUTH_MD5_SIZE + 1);
+ strncpy(md5_key, argv[i]->arg,
+ OSPF_AUTH_MD5_SIZE);
+ vl_config.md5_key = md5_key;
+ }
+ } else
+ vl_config.md5_key = NULL;
+ break;
+ }
+ }
- /* Action configuration */
- return ospf_vl_set (ospf, &vl_config);
+ /* Action configuration */
+ return ospf_vl_set(ospf, &vl_config);
}
DEFUN (no_ospf_area_vlink,
@@ -1132,100 +1105,97 @@ DEFUN (no_ospf_area_vlink,
"Use MD5 algorithm\n" \
"The OSPF password (key)")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 2;
- int idx_ipv4 = 4;
- struct ospf_area *area;
- struct ospf_vl_config_data vl_config;
- struct ospf_vl_data *vl_data = NULL;
- char auth_key[OSPF_AUTH_SIMPLE_SIZE+1];
- int i;
- int ret, format;
-
- ospf_vl_config_data_init(&vl_config, vty);
-
- ret = str2area_id (argv[idx_ipv4_number]->arg, &vl_config.area_id, &format);
- if (ret < 0)
- {
- vty_out (vty, "OSPF area ID is invalid\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- area = ospf_area_lookup_by_area_id (ospf, vl_config.area_id);
- if (!area)
- {
- vty_out (vty, "Area does not exist\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- ret = inet_aton (argv[idx_ipv4]->arg, &vl_config.vl_peer);
- if (! ret)
- {
- vty_out (vty, "Please specify valid Router ID as a.b.c.d\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (argc <=5)
- {
- /* Basic VLink no command */
- /* Thats all folks! - BUGS B. strikes again!!!*/
- if ((vl_data = ospf_vl_lookup (ospf, area, vl_config.vl_peer)))
- ospf_vl_delete (ospf, vl_data);
-
- ospf_area_check_free (ospf, vl_config.area_id);
-
- return CMD_SUCCESS;
- }
-
- /* If we are down here, we are reseting parameters */
-
- /* Deal with other parameters */
- for (i=6; i < argc; i++)
- {
- /* vty_out (vty, "argv[%d] - %s\n", i, argv[i]); */
-
- switch (argv[i]->arg[0])
- {
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 2;
+ int idx_ipv4 = 4;
+ struct ospf_area *area;
+ struct ospf_vl_config_data vl_config;
+ struct ospf_vl_data *vl_data = NULL;
+ char auth_key[OSPF_AUTH_SIMPLE_SIZE + 1];
+ int i;
+ int ret, format;
+
+ ospf_vl_config_data_init(&vl_config, vty);
+
+ ret = str2area_id(argv[idx_ipv4_number]->arg, &vl_config.area_id,
+ &format);
+ if (ret < 0) {
+ vty_out(vty, "OSPF area ID is invalid\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ area = ospf_area_lookup_by_area_id(ospf, vl_config.area_id);
+ if (!area) {
+ vty_out(vty, "Area does not exist\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = inet_aton(argv[idx_ipv4]->arg, &vl_config.vl_peer);
+ if (!ret) {
+ vty_out(vty, "Please specify valid Router ID as a.b.c.d\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (argc <= 5) {
+ /* Basic VLink no command */
+ /* Thats all folks! - BUGS B. strikes again!!!*/
+ if ((vl_data = ospf_vl_lookup(ospf, area, vl_config.vl_peer)))
+ ospf_vl_delete(ospf, vl_data);
+
+ ospf_area_check_free(ospf, vl_config.area_id);
+
+ return CMD_SUCCESS;
+ }
- case 'a':
- if (i > 2 || strncmp (argv[i]->text, "authentication-", 15) == 0)
- {
- /* authentication-key - this option can occur anywhere on
- command line. At start of command line
- must check for authentication option. */
- memset (auth_key, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
- vl_config.auth_key = auth_key;
- }
- else if (strncmp (argv[i]->text, "authentication", 14) == 0)
- {
- /* authentication - this option can only occur at start
- of command line */
- vl_config.auth_type = OSPF_AUTH_NOTSET;
- }
- break;
-
- case 'm':
- /* message-digest-key */
- /* Delete one key */
- i++;
- if (i < argc)
- {
- vl_config.crypto_key_id = strtol (argv[i]->arg, NULL, 10);
- if (vl_config.crypto_key_id < 0)
- return CMD_WARNING_CONFIG_FAILED;
- vl_config.md5_key = NULL;
- }
- else
- return CMD_WARNING_CONFIG_FAILED;
- break;
-
- }
- }
-
-
- /* Action configuration */
-
- return ospf_vl_set (ospf, &vl_config);
+ /* If we are down here, we are reseting parameters */
+
+ /* Deal with other parameters */
+ for (i = 6; i < argc; i++) {
+ /* vty_out (vty, "argv[%d] - %s\n", i, argv[i]); */
+
+ switch (argv[i]->arg[0]) {
+
+ case 'a':
+ if (i > 2
+ || strncmp(argv[i]->text, "authentication-", 15)
+ == 0) {
+ /* authentication-key - this option can occur
+ anywhere on
+ command line. At start
+ of command line
+ must check for
+ authentication option. */
+ memset(auth_key, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
+ vl_config.auth_key = auth_key;
+ } else if (strncmp(argv[i]->text, "authentication", 14)
+ == 0) {
+ /* authentication - this option can only occur
+ at start
+ of command line */
+ vl_config.auth_type = OSPF_AUTH_NOTSET;
+ }
+ break;
+
+ case 'm':
+ /* message-digest-key */
+ /* Delete one key */
+ i++;
+ if (i < argc) {
+ vl_config.crypto_key_id =
+ strtol(argv[i]->arg, NULL, 10);
+ if (vl_config.crypto_key_id < 0)
+ return CMD_WARNING_CONFIG_FAILED;
+ vl_config.md5_key = NULL;
+ } else
+ return CMD_WARNING_CONFIG_FAILED;
+ break;
+ }
+ }
+
+
+ /* Action configuration */
+
+ return ospf_vl_set(ospf, &vl_config);
}
DEFUN (ospf_area_vlink_intervals,
@@ -1234,43 +1204,44 @@ DEFUN (ospf_area_vlink_intervals,
VLINK_HELPSTR_IPADDR
VLINK_HELPSTR_TIME_PARAM)
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- struct ospf_vl_config_data vl_config;
- int ret = 0;
-
- ospf_vl_config_data_init(&vl_config, vty);
-
- char *area_id = argv[1]->arg;
- char *router_id = argv[3]->arg;
-
- ret = str2area_id (area_id, &vl_config.area_id, &vl_config.area_id_fmt);
- if (ret < 0)
- {
- vty_out (vty, "OSPF area ID is invalid\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- ret = inet_aton (router_id, &vl_config.vl_peer);
- if (! ret)
- {
- vty_out (vty, "Please specify valid Router ID as a.b.c.d\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- for (int idx = 4; idx < argc; idx++)
- {
- if (strmatch (argv[idx]->text, "hello-interval"))
- vl_config.hello_interval = strtol(argv[++idx]->arg, NULL, 10);
- else if (strmatch (argv[idx]->text, "retransmit-interval"))
- vl_config.retransmit_interval = strtol(argv[++idx]->arg, NULL, 10);
- else if (strmatch (argv[idx]->text, "transmit-delay"))
- vl_config.transmit_delay = strtol(argv[++idx]->arg, NULL, 10);
- else if (strmatch (argv[idx]->text, "dead-interval"))
- vl_config.dead_interval = strtol(argv[++idx]->arg, NULL, 10);
- }
-
- /* Action configuration */
- return ospf_vl_set (ospf, &vl_config);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ struct ospf_vl_config_data vl_config;
+ int ret = 0;
+
+ ospf_vl_config_data_init(&vl_config, vty);
+
+ char *area_id = argv[1]->arg;
+ char *router_id = argv[3]->arg;
+
+ ret = str2area_id(area_id, &vl_config.area_id, &vl_config.area_id_fmt);
+ if (ret < 0) {
+ vty_out(vty, "OSPF area ID is invalid\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = inet_aton(router_id, &vl_config.vl_peer);
+ if (!ret) {
+ vty_out(vty, "Please specify valid Router ID as a.b.c.d\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ for (int idx = 4; idx < argc; idx++) {
+ if (strmatch(argv[idx]->text, "hello-interval"))
+ vl_config.hello_interval =
+ strtol(argv[++idx]->arg, NULL, 10);
+ else if (strmatch(argv[idx]->text, "retransmit-interval"))
+ vl_config.retransmit_interval =
+ strtol(argv[++idx]->arg, NULL, 10);
+ else if (strmatch(argv[idx]->text, "transmit-delay"))
+ vl_config.transmit_delay =
+ strtol(argv[++idx]->arg, NULL, 10);
+ else if (strmatch(argv[idx]->text, "dead-interval"))
+ vl_config.dead_interval =
+ strtol(argv[++idx]->arg, NULL, 10);
+ }
+
+ /* Action configuration */
+ return ospf_vl_set(ospf, &vl_config);
}
DEFUN (no_ospf_area_vlink_intervals,
@@ -1280,43 +1251,42 @@ DEFUN (no_ospf_area_vlink_intervals,
VLINK_HELPSTR_IPADDR
VLINK_HELPSTR_TIME_PARAM)
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- struct ospf_vl_config_data vl_config;
- int ret = 0;
-
- ospf_vl_config_data_init(&vl_config, vty);
-
- char *area_id = argv[2]->arg;
- char *router_id = argv[4]->arg;
-
- ret = str2area_id (area_id, &vl_config.area_id, &vl_config.area_id_fmt);
- if (ret < 0)
- {
- vty_out (vty, "OSPF area ID is invalid\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- ret = inet_aton (router_id, &vl_config.vl_peer);
- if (! ret)
- {
- vty_out (vty, "Please specify valid Router ID as a.b.c.d\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- for (int idx = 5; idx < argc; idx++)
- {
- if (strmatch (argv[idx]->text, "hello-interval"))
- vl_config.hello_interval = OSPF_HELLO_INTERVAL_DEFAULT;
- else if (strmatch (argv[idx]->text, "retransmit-interval"))
- vl_config.retransmit_interval = OSPF_RETRANSMIT_INTERVAL_DEFAULT;
- else if (strmatch (argv[idx]->text, "transmit-delay"))
- vl_config.transmit_delay = OSPF_TRANSMIT_DELAY_DEFAULT;
- else if (strmatch (argv[idx]->text, "dead-interval"))
- vl_config.dead_interval = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
- }
-
- /* Action configuration */
- return ospf_vl_set (ospf, &vl_config);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ struct ospf_vl_config_data vl_config;
+ int ret = 0;
+
+ ospf_vl_config_data_init(&vl_config, vty);
+
+ char *area_id = argv[2]->arg;
+ char *router_id = argv[4]->arg;
+
+ ret = str2area_id(area_id, &vl_config.area_id, &vl_config.area_id_fmt);
+ if (ret < 0) {
+ vty_out(vty, "OSPF area ID is invalid\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ret = inet_aton(router_id, &vl_config.vl_peer);
+ if (!ret) {
+ vty_out(vty, "Please specify valid Router ID as a.b.c.d\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ for (int idx = 5; idx < argc; idx++) {
+ if (strmatch(argv[idx]->text, "hello-interval"))
+ vl_config.hello_interval = OSPF_HELLO_INTERVAL_DEFAULT;
+ else if (strmatch(argv[idx]->text, "retransmit-interval"))
+ vl_config.retransmit_interval =
+ OSPF_RETRANSMIT_INTERVAL_DEFAULT;
+ else if (strmatch(argv[idx]->text, "transmit-delay"))
+ vl_config.transmit_delay = OSPF_TRANSMIT_DELAY_DEFAULT;
+ else if (strmatch(argv[idx]->text, "dead-interval"))
+ vl_config.dead_interval =
+ OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
+ }
+
+ /* Action configuration */
+ return ospf_vl_set(ospf, &vl_config);
}
DEFUN (ospf_area_shortcut,
@@ -1330,35 +1300,37 @@ DEFUN (ospf_area_shortcut,
"Enable shortcutting through the area\n"
"Disable shortcutting through the area\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- int idx_enable_disable = 3;
- struct ospf_area *area;
- struct in_addr area_id;
- int mode;
- int format;
-
- VTY_GET_OSPF_AREA_ID_NO_BB ("shortcut", area_id, format, argv[idx_ipv4_number]->arg);
-
- area = ospf_area_get (ospf, area_id);
- ospf_area_display_format_set (ospf, area, format);
-
- if (strncmp (argv[idx_enable_disable]->arg, "de", 2) == 0)
- mode = OSPF_SHORTCUT_DEFAULT;
- else if (strncmp (argv[idx_enable_disable]->arg, "di", 2) == 0)
- mode = OSPF_SHORTCUT_DISABLE;
- else if (strncmp (argv[idx_enable_disable]->arg, "e", 1) == 0)
- mode = OSPF_SHORTCUT_ENABLE;
- else
- return CMD_WARNING_CONFIG_FAILED;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ int idx_enable_disable = 3;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ int mode;
+ int format;
+
+ VTY_GET_OSPF_AREA_ID_NO_BB("shortcut", area_id, format,
+ argv[idx_ipv4_number]->arg);
+
+ area = ospf_area_get(ospf, area_id);
+ ospf_area_display_format_set(ospf, area, format);
+
+ if (strncmp(argv[idx_enable_disable]->arg, "de", 2) == 0)
+ mode = OSPF_SHORTCUT_DEFAULT;
+ else if (strncmp(argv[idx_enable_disable]->arg, "di", 2) == 0)
+ mode = OSPF_SHORTCUT_DISABLE;
+ else if (strncmp(argv[idx_enable_disable]->arg, "e", 1) == 0)
+ mode = OSPF_SHORTCUT_ENABLE;
+ else
+ return CMD_WARNING_CONFIG_FAILED;
- ospf_area_shortcut_set (ospf, area, mode);
+ ospf_area_shortcut_set(ospf, area, mode);
- if (ospf->abr_type != OSPF_ABR_SHORTCUT)
- vty_out (vty, "Shortcut area setting will take effect "
- "only when the router is configured as Shortcut ABR\n");
+ if (ospf->abr_type != OSPF_ABR_SHORTCUT)
+ vty_out(vty,
+ "Shortcut area setting will take effect "
+ "only when the router is configured as Shortcut ABR\n");
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_area_shortcut,
@@ -1372,21 +1344,22 @@ DEFUN (no_ospf_area_shortcut,
"Deconfigure enabled shortcutting through the area\n"
"Deconfigure disabled shortcutting through the area\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 2;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 2;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("shortcut", area_id, format, argv[idx_ipv4_number]->arg);
+ VTY_GET_OSPF_AREA_ID_NO_BB("shortcut", area_id, format,
+ argv[idx_ipv4_number]->arg);
- area = ospf_area_lookup_by_area_id (ospf, area_id);
- if (!area)
- return CMD_SUCCESS;
+ area = ospf_area_lookup_by_area_id(ospf, area_id);
+ if (!area)
+ return CMD_SUCCESS;
- ospf_area_shortcut_unset (ospf, area);
+ ospf_area_shortcut_unset(ospf, area);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -1398,24 +1371,26 @@ DEFUN (ospf_area_stub,
"OSPF area ID as a decimal value\n"
"Configure OSPF area as stub\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- struct in_addr area_id;
- int ret, format;
-
- VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[idx_ipv4_number]->arg);
-
- ret = ospf_area_stub_set (ospf, area_id);
- ospf_area_display_format_set (ospf, ospf_area_get (ospf, area_id), format);
- if (ret == 0)
- {
- vty_out (vty, "First deconfigure all virtual link through this area\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ struct in_addr area_id;
+ int ret, format;
+
+ VTY_GET_OSPF_AREA_ID_NO_BB("stub", area_id, format,
+ argv[idx_ipv4_number]->arg);
+
+ ret = ospf_area_stub_set(ospf, area_id);
+ ospf_area_display_format_set(ospf, ospf_area_get(ospf, area_id),
+ format);
+ if (ret == 0) {
+ vty_out(vty,
+ "First deconfigure all virtual link through this area\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- ospf_area_no_summary_unset (ospf, area_id);
+ ospf_area_no_summary_unset(ospf, area_id);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ospf_area_stub_no_summary,
@@ -1427,24 +1402,26 @@ DEFUN (ospf_area_stub_no_summary,
"Configure OSPF area as stub\n"
"Do not inject inter-area routes into stub\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- struct in_addr area_id;
- int ret, format;
-
- VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[idx_ipv4_number]->arg);
-
- ret = ospf_area_stub_set (ospf, area_id);
- ospf_area_display_format_set (ospf, ospf_area_get (ospf, area_id), format);
- if (ret == 0)
- {
- vty_out (vty, "%% Area cannot be stub as it contains a virtual link\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ struct in_addr area_id;
+ int ret, format;
+
+ VTY_GET_OSPF_AREA_ID_NO_BB("stub", area_id, format,
+ argv[idx_ipv4_number]->arg);
+
+ ret = ospf_area_stub_set(ospf, area_id);
+ ospf_area_display_format_set(ospf, ospf_area_get(ospf, area_id),
+ format);
+ if (ret == 0) {
+ vty_out(vty,
+ "%% Area cannot be stub as it contains a virtual link\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- ospf_area_no_summary_set (ospf, area_id);
+ ospf_area_no_summary_set(ospf, area_id);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_area_stub,
@@ -1456,17 +1433,18 @@ DEFUN (no_ospf_area_stub,
"OSPF area ID as a decimal value\n"
"Configure OSPF area as stub\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 2;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 2;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[idx_ipv4_number]->arg);
+ VTY_GET_OSPF_AREA_ID_NO_BB("stub", area_id, format,
+ argv[idx_ipv4_number]->arg);
- ospf_area_stub_unset (ospf, area_id);
- ospf_area_no_summary_unset (ospf, area_id);
+ ospf_area_stub_unset(ospf, area_id);
+ ospf_area_no_summary_unset(ospf, area_id);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_area_stub_no_summary,
@@ -1479,61 +1457,59 @@ DEFUN (no_ospf_area_stub_no_summary,
"Configure OSPF area as stub\n"
"Do not inject inter-area routes into area\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 2;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 2;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[idx_ipv4_number]->arg);
- ospf_area_no_summary_unset (ospf, area_id);
+ VTY_GET_OSPF_AREA_ID_NO_BB("stub", area_id, format,
+ argv[idx_ipv4_number]->arg);
+ ospf_area_no_summary_unset(ospf, area_id);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-static int
-ospf_area_nssa_cmd_handler (struct vty *vty, int argc, struct cmd_token **argv,
- int nosum)
+static int ospf_area_nssa_cmd_handler(struct vty *vty, int argc,
+ struct cmd_token **argv, int nosum)
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- struct in_addr area_id;
- int ret, format;
-
- VTY_GET_OSPF_AREA_ID_NO_BB ("NSSA", area_id, format, argv[1]->arg);
-
- ret = ospf_area_nssa_set (ospf, area_id);
- ospf_area_display_format_set (ospf, ospf_area_get (ospf, area_id), format);
- if (ret == 0)
- {
- vty_out (vty, "%% Area cannot be nssa as it contains a virtual link\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (argc > 3)
- {
- if (strncmp (argv[3]->text, "translate-c", 11) == 0)
- ospf_area_nssa_translator_role_set (ospf, area_id,
- OSPF_NSSA_ROLE_CANDIDATE);
- else if (strncmp (argv[3]->text, "translate-n", 11) == 0)
- ospf_area_nssa_translator_role_set (ospf, area_id,
- OSPF_NSSA_ROLE_NEVER);
- else if (strncmp (argv[3]->text, "translate-a", 11) == 0)
- ospf_area_nssa_translator_role_set (ospf, area_id,
- OSPF_NSSA_ROLE_ALWAYS);
- }
- else
- {
- ospf_area_nssa_translator_role_set (ospf, area_id,
- OSPF_NSSA_ROLE_CANDIDATE);
- }
-
- if (nosum)
- ospf_area_no_summary_set (ospf, area_id);
- else
- ospf_area_no_summary_unset (ospf, area_id);
-
- ospf_schedule_abr_task (ospf);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ struct in_addr area_id;
+ int ret, format;
+
+ VTY_GET_OSPF_AREA_ID_NO_BB("NSSA", area_id, format, argv[1]->arg);
+
+ ret = ospf_area_nssa_set(ospf, area_id);
+ ospf_area_display_format_set(ospf, ospf_area_get(ospf, area_id),
+ format);
+ if (ret == 0) {
+ vty_out(vty,
+ "%% Area cannot be nssa as it contains a virtual link\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (argc > 3) {
+ if (strncmp(argv[3]->text, "translate-c", 11) == 0)
+ ospf_area_nssa_translator_role_set(
+ ospf, area_id, OSPF_NSSA_ROLE_CANDIDATE);
+ else if (strncmp(argv[3]->text, "translate-n", 11) == 0)
+ ospf_area_nssa_translator_role_set(
+ ospf, area_id, OSPF_NSSA_ROLE_NEVER);
+ else if (strncmp(argv[3]->text, "translate-a", 11) == 0)
+ ospf_area_nssa_translator_role_set(
+ ospf, area_id, OSPF_NSSA_ROLE_ALWAYS);
+ } else {
+ ospf_area_nssa_translator_role_set(ospf, area_id,
+ OSPF_NSSA_ROLE_CANDIDATE);
+ }
+
+ if (nosum)
+ ospf_area_no_summary_set(ospf, area_id);
+ else
+ ospf_area_no_summary_unset(ospf, area_id);
+
+ ospf_schedule_abr_task(ospf);
+
+ return CMD_SUCCESS;
}
DEFUN (ospf_area_nssa_translate_no_summary,
@@ -1548,7 +1524,7 @@ DEFUN (ospf_area_nssa_translate_no_summary,
"Configure NSSA-ABR to always translate\n"
"Do not inject inter-area routes into nssa\n")
{
- return ospf_area_nssa_cmd_handler (vty, argc, argv, 1);
+ return ospf_area_nssa_cmd_handler(vty, argc, argv, 1);
}
DEFUN (ospf_area_nssa_translate,
@@ -1562,7 +1538,7 @@ DEFUN (ospf_area_nssa_translate,
"Configure NSSA-ABR to never translate\n"
"Configure NSSA-ABR to always translate\n")
{
- return ospf_area_nssa_cmd_handler (vty, argc, argv, 0);
+ return ospf_area_nssa_cmd_handler(vty, argc, argv, 0);
}
DEFUN (ospf_area_nssa,
@@ -1573,7 +1549,7 @@ DEFUN (ospf_area_nssa,
"OSPF area ID as a decimal value\n"
"Configure OSPF area as nssa\n")
{
- return ospf_area_nssa_cmd_handler (vty, argc, argv, 0);
+ return ospf_area_nssa_cmd_handler(vty, argc, argv, 0);
}
DEFUN (ospf_area_nssa_no_summary,
@@ -1585,7 +1561,7 @@ DEFUN (ospf_area_nssa_no_summary,
"Configure OSPF area as nssa\n"
"Do not inject inter-area routes into nssa\n")
{
- return ospf_area_nssa_cmd_handler (vty, argc, argv, 1);
+ return ospf_area_nssa_cmd_handler(vty, argc, argv, 1);
}
DEFUN (no_ospf_area_nssa,
@@ -1601,19 +1577,20 @@ DEFUN (no_ospf_area_nssa,
"Configure NSSA-ABR to always translate\n"
"Do not inject inter-area routes into nssa\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 2;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 2;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("NSSA", area_id, format, argv[idx_ipv4_number]->arg);
+ VTY_GET_OSPF_AREA_ID_NO_BB("NSSA", area_id, format,
+ argv[idx_ipv4_number]->arg);
- ospf_area_nssa_unset (ospf, area_id);
- ospf_area_no_summary_unset (ospf, area_id);
+ ospf_area_nssa_unset(ospf, area_id);
+ ospf_area_no_summary_unset(ospf, area_id);
- ospf_schedule_abr_task (ospf);
+ ospf_schedule_abr_task(ospf);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -1626,39 +1603,40 @@ DEFUN (ospf_area_default_cost,
"Set the summary-default cost of a NSSA or stub area\n"
"Stub's advertised default summary cost\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- int idx_number = 3;
- struct ospf_area *area;
- struct in_addr area_id;
- u_int32_t cost;
- int format;
- struct prefix_ipv4 p;
-
- VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id, format, argv[idx_ipv4_number]->arg);
- cost = strtoul(argv[idx_number]->arg, NULL, 10);
-
- area = ospf_area_get (ospf, area_id);
- ospf_area_display_format_set (ospf, area, format);
-
- if (area->external_routing == OSPF_AREA_DEFAULT)
- {
- vty_out (vty, "The area is neither stub, nor NSSA\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- area->default_cost = cost;
-
- p.family = AF_INET;
- p.prefix.s_addr = OSPF_DEFAULT_DESTINATION;
- p.prefixlen = 0;
- if (IS_DEBUG_OSPF_EVENT)
- zlog_debug ("ospf_abr_announce_stub_defaults(): "
- "announcing 0.0.0.0/0 to area %s",
- inet_ntoa (area->area_id));
- ospf_abr_announce_network_to_area (&p, area->default_cost, area);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ int idx_number = 3;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ u_int32_t cost;
+ int format;
+ struct prefix_ipv4 p;
+
+ VTY_GET_OSPF_AREA_ID_NO_BB("default-cost", area_id, format,
+ argv[idx_ipv4_number]->arg);
+ cost = strtoul(argv[idx_number]->arg, NULL, 10);
+
+ area = ospf_area_get(ospf, area_id);
+ ospf_area_display_format_set(ospf, area, format);
+
+ if (area->external_routing == OSPF_AREA_DEFAULT) {
+ vty_out(vty, "The area is neither stub, nor NSSA\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- return CMD_SUCCESS;
+ area->default_cost = cost;
+
+ p.family = AF_INET;
+ p.prefix.s_addr = OSPF_DEFAULT_DESTINATION;
+ p.prefixlen = 0;
+ if (IS_DEBUG_OSPF_EVENT)
+ zlog_debug(
+ "ospf_abr_announce_stub_defaults(): "
+ "announcing 0.0.0.0/0 to area %s",
+ inet_ntoa(area->area_id));
+ ospf_abr_announce_network_to_area(&p, area->default_cost, area);
+
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_area_default_cost,
@@ -1671,40 +1649,41 @@ DEFUN (no_ospf_area_default_cost,
"Set the summary-default cost of a NSSA or stub area\n"
"Stub's advertised default summary cost\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 2;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
- struct prefix_ipv4 p;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 2;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ int format;
+ struct prefix_ipv4 p;
- VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id, format, argv[idx_ipv4_number]->arg);
+ VTY_GET_OSPF_AREA_ID_NO_BB("default-cost", area_id, format,
+ argv[idx_ipv4_number]->arg);
- area = ospf_area_lookup_by_area_id (ospf, area_id);
- if (area == NULL)
- return CMD_SUCCESS;
+ area = ospf_area_lookup_by_area_id(ospf, area_id);
+ if (area == NULL)
+ return CMD_SUCCESS;
- if (area->external_routing == OSPF_AREA_DEFAULT)
- {
- vty_out (vty, "The area is neither stub, nor NSSA\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (area->external_routing == OSPF_AREA_DEFAULT) {
+ vty_out(vty, "The area is neither stub, nor NSSA\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- area->default_cost = 1;
+ area->default_cost = 1;
- p.family = AF_INET;
- p.prefix.s_addr = OSPF_DEFAULT_DESTINATION;
- p.prefixlen = 0;
- if (IS_DEBUG_OSPF_EVENT)
- zlog_debug ("ospf_abr_announce_stub_defaults(): "
- "announcing 0.0.0.0/0 to area %s",
- inet_ntoa (area->area_id));
- ospf_abr_announce_network_to_area (&p, area->default_cost, area);
+ p.family = AF_INET;
+ p.prefix.s_addr = OSPF_DEFAULT_DESTINATION;
+ p.prefixlen = 0;
+ if (IS_DEBUG_OSPF_EVENT)
+ zlog_debug(
+ "ospf_abr_announce_stub_defaults(): "
+ "announcing 0.0.0.0/0 to area %s",
+ inet_ntoa(area->area_id));
+ ospf_abr_announce_network_to_area(&p, area->default_cost, area);
- ospf_area_check_free (ospf, area_id);
+ ospf_area_check_free(ospf, area_id);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ospf_area_export_list,
@@ -1716,19 +1695,19 @@ DEFUN (ospf_area_export_list,
"Set the filter for networks announced to other areas\n"
"Name of the access-list\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
- area = ospf_area_get (ospf, area_id);
- ospf_area_display_format_set (ospf, area, format);
- ospf_area_export_list_set (ospf, area, argv[3]->arg);
+ area = ospf_area_get(ospf, area_id);
+ ospf_area_display_format_set(ospf, area, format);
+ ospf_area_export_list_set(ospf, area, argv[3]->arg);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_area_export_list,
@@ -1741,21 +1720,21 @@ DEFUN (no_ospf_area_export_list,
"Unset the filter for networks announced to other areas\n"
"Name of the access-list\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 2;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 2;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
- area = ospf_area_lookup_by_area_id (ospf, area_id);
- if (area == NULL)
- return CMD_SUCCESS;
+ area = ospf_area_lookup_by_area_id(ospf, area_id);
+ if (area == NULL)
+ return CMD_SUCCESS;
- ospf_area_export_list_unset (ospf, area);
+ ospf_area_export_list_unset(ospf, area);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -1768,19 +1747,19 @@ DEFUN (ospf_area_import_list,
"Set the filter for networks from other areas announced to the specified one\n"
"Name of the access-list\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
- area = ospf_area_get (ospf, area_id);
- ospf_area_display_format_set (ospf, area, format);
- ospf_area_import_list_set (ospf, area, argv[3]->arg);
+ area = ospf_area_get(ospf, area_id);
+ ospf_area_display_format_set(ospf, area, format);
+ ospf_area_import_list_set(ospf, area, argv[3]->arg);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_area_import_list,
@@ -1793,21 +1772,21 @@ DEFUN (no_ospf_area_import_list,
"Unset the filter for networks announced to other areas\n"
"Name of the access-list\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 2;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 2;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
- area = ospf_area_lookup_by_area_id (ospf, area_id);
- if (area == NULL)
- return CMD_SUCCESS;
+ area = ospf_area_lookup_by_area_id(ospf, area_id);
+ if (area == NULL)
+ return CMD_SUCCESS;
- ospf_area_import_list_unset (ospf, area);
+ ospf_area_import_list_unset(ospf, area);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ospf_area_filter_list,
@@ -1822,40 +1801,37 @@ DEFUN (ospf_area_filter_list,
"Filter networks sent to this area\n"
"Filter networks sent from this area\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- int idx_word = 4;
- int idx_in_out = 5;
- struct ospf_area *area;
- struct in_addr area_id;
- struct prefix_list *plist;
- int format;
-
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
-
- area = ospf_area_get (ospf, area_id);
- ospf_area_display_format_set (ospf, area, format);
- plist = prefix_list_lookup (AFI_IP, argv[idx_word]->arg);
- if (strncmp (argv[idx_in_out]->arg, "in", 2) == 0)
- {
- PREFIX_LIST_IN (area) = plist;
- if (PREFIX_NAME_IN (area))
- free (PREFIX_NAME_IN (area));
-
- PREFIX_NAME_IN (area) = strdup (argv[idx_word]->arg);
- ospf_schedule_abr_task (ospf);
- }
- else
- {
- PREFIX_LIST_OUT (area) = plist;
- if (PREFIX_NAME_OUT (area))
- free (PREFIX_NAME_OUT (area));
-
- PREFIX_NAME_OUT (area) = strdup (argv[idx_word]->arg);
- ospf_schedule_abr_task (ospf);
- }
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ int idx_word = 4;
+ int idx_in_out = 5;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ struct prefix_list *plist;
+ int format;
+
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
+
+ area = ospf_area_get(ospf, area_id);
+ ospf_area_display_format_set(ospf, area, format);
+ plist = prefix_list_lookup(AFI_IP, argv[idx_word]->arg);
+ if (strncmp(argv[idx_in_out]->arg, "in", 2) == 0) {
+ PREFIX_LIST_IN(area) = plist;
+ if (PREFIX_NAME_IN(area))
+ free(PREFIX_NAME_IN(area));
+
+ PREFIX_NAME_IN(area) = strdup(argv[idx_word]->arg);
+ ospf_schedule_abr_task(ospf);
+ } else {
+ PREFIX_LIST_OUT(area) = plist;
+ if (PREFIX_NAME_OUT(area))
+ free(PREFIX_NAME_OUT(area));
+
+ PREFIX_NAME_OUT(area) = strdup(argv[idx_word]->arg);
+ ospf_schedule_abr_task(ospf);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_area_filter_list,
@@ -1871,49 +1847,48 @@ DEFUN (no_ospf_area_filter_list,
"Filter networks sent to this area\n"
"Filter networks sent from this area\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 2;
- int idx_word = 5;
- int idx_in_out = 6;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 2;
+ int idx_word = 5;
+ int idx_in_out = 6;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
- if ((area = ospf_area_lookup_by_area_id (ospf, area_id)) == NULL)
- return CMD_SUCCESS;
-
- if (strncmp (argv[idx_in_out]->arg, "in", 2) == 0)
- {
- if (PREFIX_NAME_IN (area))
- if (strcmp (PREFIX_NAME_IN (area), argv[idx_word]->arg) != 0)
- return CMD_SUCCESS;
+ if ((area = ospf_area_lookup_by_area_id(ospf, area_id)) == NULL)
+ return CMD_SUCCESS;
- PREFIX_LIST_IN (area) = NULL;
- if (PREFIX_NAME_IN (area))
- free (PREFIX_NAME_IN (area));
+ if (strncmp(argv[idx_in_out]->arg, "in", 2) == 0) {
+ if (PREFIX_NAME_IN(area))
+ if (strcmp(PREFIX_NAME_IN(area), argv[idx_word]->arg)
+ != 0)
+ return CMD_SUCCESS;
- PREFIX_NAME_IN (area) = NULL;
+ PREFIX_LIST_IN(area) = NULL;
+ if (PREFIX_NAME_IN(area))
+ free(PREFIX_NAME_IN(area));
- ospf_schedule_abr_task (ospf);
- }
- else
- {
- if (PREFIX_NAME_OUT (area))
- if (strcmp (PREFIX_NAME_OUT (area), argv[idx_word]->arg) != 0)
- return CMD_SUCCESS;
+ PREFIX_NAME_IN(area) = NULL;
- PREFIX_LIST_OUT (area) = NULL;
- if (PREFIX_NAME_OUT (area))
- free (PREFIX_NAME_OUT (area));
+ ospf_schedule_abr_task(ospf);
+ } else {
+ if (PREFIX_NAME_OUT(area))
+ if (strcmp(PREFIX_NAME_OUT(area), argv[idx_word]->arg)
+ != 0)
+ return CMD_SUCCESS;
- PREFIX_NAME_OUT (area) = NULL;
+ PREFIX_LIST_OUT(area) = NULL;
+ if (PREFIX_NAME_OUT(area))
+ free(PREFIX_NAME_OUT(area));
- ospf_schedule_abr_task (ospf);
- }
+ PREFIX_NAME_OUT(area) = NULL;
- return CMD_SUCCESS;
+ ospf_schedule_abr_task(ospf);
+ }
+
+ return CMD_SUCCESS;
}
@@ -1926,19 +1901,19 @@ DEFUN (ospf_area_authentication_message_digest,
"Enable authentication\n"
"Use message-digest authentication\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
- area = ospf_area_get (ospf, area_id);
- ospf_area_display_format_set (ospf, area, format);
- area->auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
+ area = ospf_area_get(ospf, area_id);
+ ospf_area_display_format_set(ospf, area, format);
+ area->auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ospf_area_authentication,
@@ -1949,19 +1924,19 @@ DEFUN (ospf_area_authentication,
"OSPF area ID as a decimal value\n"
"Enable authentication\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 1;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 1;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
- area = ospf_area_get (ospf, area_id);
- ospf_area_display_format_set (ospf, area, format);
- area->auth_type = OSPF_AUTH_SIMPLE;
+ area = ospf_area_get(ospf, area_id);
+ ospf_area_display_format_set(ospf, area, format);
+ area->auth_type = OSPF_AUTH_SIMPLE;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_area_authentication,
@@ -1973,23 +1948,23 @@ DEFUN (no_ospf_area_authentication,
"OSPF area ID as a decimal value\n"
"Enable authentication\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4_number = 2;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4_number = 2;
+ struct ospf_area *area;
+ struct in_addr area_id;
+ int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
+ VTY_GET_OSPF_AREA_ID(area_id, format, argv[idx_ipv4_number]->arg);
- area = ospf_area_lookup_by_area_id (ospf, area_id);
- if (area == NULL)
- return CMD_SUCCESS;
+ area = ospf_area_lookup_by_area_id(ospf, area_id);
+ if (area == NULL)
+ return CMD_SUCCESS;
- area->auth_type = OSPF_AUTH_NULL;
+ area->auth_type = OSPF_AUTH_NULL;
- ospf_area_check_free (ospf, area_id);
-
- return CMD_SUCCESS;
+ ospf_area_check_free(ospf, area_id);
+
+ return CMD_SUCCESS;
}
@@ -2003,29 +1978,28 @@ DEFUN (ospf_abr_type,
"Shortcut ABR\n"
"Standard behavior (RFC2328)\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_vendor = 2;
- u_char abr_type = OSPF_ABR_UNKNOWN;
-
- if (strncmp (argv[idx_vendor]->arg, "c", 1) == 0)
- abr_type = OSPF_ABR_CISCO;
- else if (strncmp (argv[idx_vendor]->arg, "i", 1) == 0)
- abr_type = OSPF_ABR_IBM;
- else if (strncmp (argv[idx_vendor]->arg, "sh", 2) == 0)
- abr_type = OSPF_ABR_SHORTCUT;
- else if (strncmp (argv[idx_vendor]->arg, "st", 2) == 0)
- abr_type = OSPF_ABR_STAND;
- else
- return CMD_WARNING_CONFIG_FAILED;
-
- /* If ABR type value is changed, schedule ABR task. */
- if (ospf->abr_type != abr_type)
- {
- ospf->abr_type = abr_type;
- ospf_schedule_abr_task (ospf);
- }
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_vendor = 2;
+ u_char abr_type = OSPF_ABR_UNKNOWN;
+
+ if (strncmp(argv[idx_vendor]->arg, "c", 1) == 0)
+ abr_type = OSPF_ABR_CISCO;
+ else if (strncmp(argv[idx_vendor]->arg, "i", 1) == 0)
+ abr_type = OSPF_ABR_IBM;
+ else if (strncmp(argv[idx_vendor]->arg, "sh", 2) == 0)
+ abr_type = OSPF_ABR_SHORTCUT;
+ else if (strncmp(argv[idx_vendor]->arg, "st", 2) == 0)
+ abr_type = OSPF_ABR_STAND;
+ else
+ return CMD_WARNING_CONFIG_FAILED;
- return CMD_SUCCESS;
+ /* If ABR type value is changed, schedule ABR task. */
+ if (ospf->abr_type != abr_type) {
+ ospf->abr_type = abr_type;
+ ospf_schedule_abr_task(ospf);
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_abr_type,
@@ -2039,29 +2013,28 @@ DEFUN (no_ospf_abr_type,
"Shortcut ABR\n"
"Standard ABR\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_vendor = 3;
- u_char abr_type = OSPF_ABR_UNKNOWN;
-
- if (strncmp (argv[idx_vendor]->arg, "c", 1) == 0)
- abr_type = OSPF_ABR_CISCO;
- else if (strncmp (argv[idx_vendor]->arg, "i", 1) == 0)
- abr_type = OSPF_ABR_IBM;
- else if (strncmp (argv[idx_vendor]->arg, "sh", 2) == 0)
- abr_type = OSPF_ABR_SHORTCUT;
- else if (strncmp (argv[idx_vendor]->arg, "st", 2) == 0)
- abr_type = OSPF_ABR_STAND;
- else
- return CMD_WARNING_CONFIG_FAILED;
-
- /* If ABR type value is changed, schedule ABR task. */
- if (ospf->abr_type == abr_type)
- {
- ospf->abr_type = OSPF_ABR_DEFAULT;
- ospf_schedule_abr_task (ospf);
- }
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_vendor = 3;
+ u_char abr_type = OSPF_ABR_UNKNOWN;
+
+ if (strncmp(argv[idx_vendor]->arg, "c", 1) == 0)
+ abr_type = OSPF_ABR_CISCO;
+ else if (strncmp(argv[idx_vendor]->arg, "i", 1) == 0)
+ abr_type = OSPF_ABR_IBM;
+ else if (strncmp(argv[idx_vendor]->arg, "sh", 2) == 0)
+ abr_type = OSPF_ABR_SHORTCUT;
+ else if (strncmp(argv[idx_vendor]->arg, "st", 2) == 0)
+ abr_type = OSPF_ABR_STAND;
+ else
+ return CMD_WARNING_CONFIG_FAILED;
- return CMD_SUCCESS;
+ /* If ABR type value is changed, schedule ABR task. */
+ if (ospf->abr_type == abr_type) {
+ ospf->abr_type = OSPF_ABR_DEFAULT;
+ ospf_schedule_abr_task(ospf);
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (ospf_log_adjacency_changes,
@@ -2069,11 +2042,11 @@ DEFUN (ospf_log_adjacency_changes,
"log-adjacency-changes",
"Log changes in adjacency state\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
- SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES);
- UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
- return CMD_SUCCESS;
+ SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES);
+ UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
+ return CMD_SUCCESS;
}
DEFUN (ospf_log_adjacency_changes_detail,
@@ -2082,11 +2055,11 @@ DEFUN (ospf_log_adjacency_changes_detail,
"Log changes in adjacency state\n"
"Log all state changes\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
- SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES);
- SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
- return CMD_SUCCESS;
+ SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES);
+ SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_log_adjacency_changes,
@@ -2095,11 +2068,11 @@ DEFUN (no_ospf_log_adjacency_changes,
NO_STR
"Log changes in adjacency state\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
- UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
- UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES);
- return CMD_SUCCESS;
+ UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
+ UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES);
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_log_adjacency_changes_detail,
@@ -2109,10 +2082,10 @@ DEFUN (no_ospf_log_adjacency_changes_detail,
"Log changes in adjacency state\n"
"Log all state changes\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
- UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
- return CMD_SUCCESS;
+ UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
+ return CMD_SUCCESS;
}
DEFUN (ospf_compatible_rfc1583,
@@ -2121,14 +2094,13 @@ DEFUN (ospf_compatible_rfc1583,
"OSPF compatibility list\n"
"compatible with RFC 1583\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
- if (!CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE))
- {
- SET_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE);
- ospf_spf_calculate_schedule (ospf, SPF_FLAG_CONFIG_CHANGE);
- }
- return CMD_SUCCESS;
+ if (!CHECK_FLAG(ospf->config, OSPF_RFC1583_COMPATIBLE)) {
+ SET_FLAG(ospf->config, OSPF_RFC1583_COMPATIBLE);
+ ospf_spf_calculate_schedule(ospf, SPF_FLAG_CONFIG_CHANGE);
+ }
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_compatible_rfc1583,
@@ -2138,41 +2110,35 @@ DEFUN (no_ospf_compatible_rfc1583,
"OSPF compatibility list\n"
"compatible with RFC 1583\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
- if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE))
- {
- UNSET_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE);
- ospf_spf_calculate_schedule (ospf, SPF_FLAG_CONFIG_CHANGE);
- }
- return CMD_SUCCESS;
+ if (CHECK_FLAG(ospf->config, OSPF_RFC1583_COMPATIBLE)) {
+ UNSET_FLAG(ospf->config, OSPF_RFC1583_COMPATIBLE);
+ ospf_spf_calculate_schedule(ospf, SPF_FLAG_CONFIG_CHANGE);
+ }
+ return CMD_SUCCESS;
}
-ALIAS (ospf_compatible_rfc1583,
- ospf_rfc1583_flag_cmd,
- "ospf rfc1583compatibility",
- "OSPF specific commands\n"
- "Enable the RFC1583Compatibility flag\n")
+ALIAS(ospf_compatible_rfc1583, ospf_rfc1583_flag_cmd,
+ "ospf rfc1583compatibility",
+ "OSPF specific commands\n"
+ "Enable the RFC1583Compatibility flag\n")
-ALIAS (no_ospf_compatible_rfc1583,
- no_ospf_rfc1583_flag_cmd,
- "no ospf rfc1583compatibility",
- NO_STR
- "OSPF specific commands\n"
- "Disable the RFC1583Compatibility flag\n")
+ALIAS(no_ospf_compatible_rfc1583, no_ospf_rfc1583_flag_cmd,
+ "no ospf rfc1583compatibility", NO_STR
+ "OSPF specific commands\n"
+ "Disable the RFC1583Compatibility flag\n")
-static int
-ospf_timers_spf_set (struct vty *vty, unsigned int delay,
- unsigned int hold,
- unsigned int max)
+static int ospf_timers_spf_set(struct vty *vty, unsigned int delay,
+ unsigned int hold, unsigned int max)
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
- ospf->spf_delay = delay;
- ospf->spf_holdtime = hold;
- ospf->spf_max_holdtime = max;
-
- return CMD_SUCCESS;
+ ospf->spf_delay = delay;
+ ospf->spf_holdtime = hold;
+ ospf->spf_max_holdtime = max;
+
+ return CMD_SUCCESS;
}
DEFUN (ospf_timers_min_ls_interval,
@@ -2184,21 +2150,20 @@ DEFUN (ospf_timers_min_ls_interval,
"All LSA types\n"
"Delay (msec) between sending LSAs\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_number = 4;
- unsigned int interval;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_number = 4;
+ unsigned int interval;
- if (argc < 5)
- {
- vty_out (vty, "Insufficient arguments\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (argc < 5) {
+ vty_out(vty, "Insufficient arguments\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- interval = strtoul(argv[idx_number]->arg, NULL, 10);
+ interval = strtoul(argv[idx_number]->arg, NULL, 10);
- ospf->min_ls_interval = interval;
+ ospf->min_ls_interval = interval;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_timers_min_ls_interval,
@@ -2211,10 +2176,10 @@ DEFUN (no_ospf_timers_min_ls_interval,
"All LSA types\n"
"Delay (msec) between sending LSAs\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- ospf->min_ls_interval = OSPF_MIN_LS_INTERVAL;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ ospf->min_ls_interval = OSPF_MIN_LS_INTERVAL;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -2226,21 +2191,20 @@ DEFUN (ospf_timers_min_ls_arrival,
"OSPF minimum arrival interval delay\n"
"Delay (msec) between accepted LSAs\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_number = 3;
- unsigned int arrival;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_number = 3;
+ unsigned int arrival;
- if (argc < 4)
- {
- vty_out (vty, "Insufficient arguments\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (argc < 4) {
+ vty_out(vty, "Insufficient arguments\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- arrival = strtoul(argv[idx_number]->arg, NULL, 10);
+ arrival = strtoul(argv[idx_number]->arg, NULL, 10);
- ospf->min_ls_arrival = arrival;
+ ospf->min_ls_arrival = arrival;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_timers_min_ls_arrival,
@@ -2252,11 +2216,11 @@ DEFUN (no_ospf_timers_min_ls_arrival,
"OSPF minimum arrival interval delay\n"
"Delay (msec) between accepted LSAs\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
- ospf->min_ls_arrival = OSPF_MIN_LS_ARRIVAL;
+ ospf->min_ls_arrival = OSPF_MIN_LS_ARRIVAL;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -2270,22 +2234,21 @@ DEFUN (ospf_timers_throttle_spf,
"Initial hold time (msec) between consecutive SPF calculations\n"
"Maximum hold time (msec)\n")
{
- int idx_number = 3;
- int idx_number_2 = 4;
- int idx_number_3 = 5;
- unsigned int delay, hold, max;
-
- if (argc < 6)
- {
- vty_out (vty, "Insufficient arguments\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- delay = strtoul(argv[idx_number]->arg, NULL, 10);
- hold = strtoul(argv[idx_number_2]->arg, NULL, 10);
- max = strtoul(argv[idx_number_3]->arg, NULL, 10);
-
- return ospf_timers_spf_set (vty, delay, hold, max);
+ int idx_number = 3;
+ int idx_number_2 = 4;
+ int idx_number_3 = 5;
+ unsigned int delay, hold, max;
+
+ if (argc < 6) {
+ vty_out(vty, "Insufficient arguments\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ delay = strtoul(argv[idx_number]->arg, NULL, 10);
+ hold = strtoul(argv[idx_number_2]->arg, NULL, 10);
+ max = strtoul(argv[idx_number_3]->arg, NULL, 10);
+
+ return ospf_timers_spf_set(vty, delay, hold, max);
}
DEFUN (no_ospf_timers_throttle_spf,
@@ -2299,10 +2262,9 @@ DEFUN (no_ospf_timers_throttle_spf,
"Initial hold time (msec) between consecutive SPF calculations\n"
"Maximum hold time (msec)\n")
{
- return ospf_timers_spf_set (vty,
- OSPF_SPF_DELAY_DEFAULT,
- OSPF_SPF_HOLDTIME_DEFAULT,
- OSPF_SPF_MAX_HOLDTIME_DEFAULT);
+ return ospf_timers_spf_set(vty, OSPF_SPF_DELAY_DEFAULT,
+ OSPF_SPF_HOLDTIME_DEFAULT,
+ OSPF_SPF_MAX_HOLDTIME_DEFAULT);
}
@@ -2314,21 +2276,20 @@ DEFUN (ospf_timers_lsa,
"Minimum delay in receiving new version of a LSA\n"
"Delay in milliseconds\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_number = 3;
- unsigned int minarrival;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_number = 3;
+ unsigned int minarrival;
- if (argc < 4)
- {
- vty_out (vty, "Insufficient number of arguments\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (argc < 4) {
+ vty_out(vty, "Insufficient number of arguments\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- minarrival = strtoul(argv[idx_number]->arg, NULL, 10);
+ minarrival = strtoul(argv[idx_number]->arg, NULL, 10);
- ospf->min_ls_arrival = minarrival;
+ ospf->min_ls_arrival = minarrival;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_timers_lsa,
@@ -2340,21 +2301,20 @@ DEFUN (no_ospf_timers_lsa,
"Minimum delay in receiving new version of a LSA\n"
"Delay in milliseconds\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- unsigned int minarrival;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ unsigned int minarrival;
- if (argc > 4)
- {
- minarrival = strtoul(argv[4]->arg, NULL, 10);
+ if (argc > 4) {
+ minarrival = strtoul(argv[4]->arg, NULL, 10);
- if (ospf->min_ls_arrival != minarrival ||
- minarrival == OSPF_MIN_LS_ARRIVAL)
- return CMD_SUCCESS;
- }
+ if (ospf->min_ls_arrival != minarrival
+ || minarrival == OSPF_MIN_LS_ARRIVAL)
+ return CMD_SUCCESS;
+ }
- ospf->min_ls_arrival = OSPF_MIN_LS_ARRIVAL;
+ ospf->min_ls_arrival = OSPF_MIN_LS_ARRIVAL;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ospf_neighbor,
@@ -2367,31 +2327,31 @@ DEFUN (ospf_neighbor,
"Dead Neighbor Polling interval\n"
"Seconds\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4 = 1;
- int idx_pri = 3;
- int idx_poll = 5;
- struct in_addr nbr_addr;
- unsigned int priority = OSPF_NEIGHBOR_PRIORITY_DEFAULT;
- unsigned int interval = OSPF_POLL_INTERVAL_DEFAULT;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4 = 1;
+ int idx_pri = 3;
+ int idx_poll = 5;
+ struct in_addr nbr_addr;
+ unsigned int priority = OSPF_NEIGHBOR_PRIORITY_DEFAULT;
+ unsigned int interval = OSPF_POLL_INTERVAL_DEFAULT;
- inet_aton(argv[idx_ipv4]->arg, &nbr_addr);
+ inet_aton(argv[idx_ipv4]->arg, &nbr_addr);
- if (argc > 2)
- priority = strtoul(argv[idx_pri]->arg, NULL, 10);
+ if (argc > 2)
+ priority = strtoul(argv[idx_pri]->arg, NULL, 10);
- if (argc > 4)
- interval = strtoul(argv[idx_poll]->arg, NULL, 10);
+ if (argc > 4)
+ interval = strtoul(argv[idx_poll]->arg, NULL, 10);
- ospf_nbr_nbma_set (ospf, nbr_addr);
+ ospf_nbr_nbma_set(ospf, nbr_addr);
- if (argc > 2)
- ospf_nbr_nbma_priority_set (ospf, nbr_addr, priority);
+ if (argc > 2)
+ ospf_nbr_nbma_priority_set(ospf, nbr_addr, priority);
- if (argc > 4)
- ospf_nbr_nbma_poll_interval_set (ospf, nbr_addr, interval);
+ if (argc > 4)
+ ospf_nbr_nbma_poll_interval_set(ospf, nbr_addr, interval);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ospf_neighbor_poll_interval,
@@ -2404,28 +2364,28 @@ DEFUN (ospf_neighbor_poll_interval,
"OSPF priority of non-broadcast neighbor\n"
"Priority\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4 = 1;
- int idx_poll = 3;
- int idx_pri = 5;
- struct in_addr nbr_addr;
- unsigned int priority = OSPF_NEIGHBOR_PRIORITY_DEFAULT;
- unsigned int interval = OSPF_POLL_INTERVAL_DEFAULT;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4 = 1;
+ int idx_poll = 3;
+ int idx_pri = 5;
+ struct in_addr nbr_addr;
+ unsigned int priority = OSPF_NEIGHBOR_PRIORITY_DEFAULT;
+ unsigned int interval = OSPF_POLL_INTERVAL_DEFAULT;
- inet_aton(argv[idx_ipv4]->arg, &nbr_addr);
+ inet_aton(argv[idx_ipv4]->arg, &nbr_addr);
- interval = strtoul(argv[idx_poll]->arg, NULL, 10);
+ interval = strtoul(argv[idx_poll]->arg, NULL, 10);
- if (argc > 4)
- priority = strtoul(argv[idx_pri]->arg, NULL, 10);
+ if (argc > 4)
+ priority = strtoul(argv[idx_pri]->arg, NULL, 10);
- ospf_nbr_nbma_set (ospf, nbr_addr);
- ospf_nbr_nbma_poll_interval_set (ospf, nbr_addr, interval);
+ ospf_nbr_nbma_set(ospf, nbr_addr);
+ ospf_nbr_nbma_poll_interval_set(ospf, nbr_addr, interval);
- if (argc > 4)
- ospf_nbr_nbma_priority_set (ospf, nbr_addr, priority);
+ if (argc > 4)
+ ospf_nbr_nbma_priority_set(ospf, nbr_addr, priority);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_neighbor,
@@ -2439,15 +2399,15 @@ DEFUN (no_ospf_neighbor,
"Dead Neighbor Polling interval\n"
"Seconds\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4 = 2;
- struct in_addr nbr_addr;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4 = 2;
+ struct in_addr nbr_addr;
- inet_aton(argv[idx_ipv4]->arg, &nbr_addr);
+ inet_aton(argv[idx_ipv4]->arg, &nbr_addr);
- (void)ospf_nbr_nbma_unset (ospf, nbr_addr);
+ (void)ospf_nbr_nbma_unset(ospf, nbr_addr);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_neighbor_poll,
@@ -2461,15 +2421,15 @@ DEFUN (no_ospf_neighbor_poll,
"Neighbor Priority\n"
"Priority\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ipv4 = 2;
- struct in_addr nbr_addr;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ipv4 = 2;
+ struct in_addr nbr_addr;
- inet_aton(argv[idx_ipv4]->arg, &nbr_addr);
+ inet_aton(argv[idx_ipv4]->arg, &nbr_addr);
- (void)ospf_nbr_nbma_unset (ospf, nbr_addr);
+ (void)ospf_nbr_nbma_unset(ospf, nbr_addr);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ospf_refresh_timer,
@@ -2479,16 +2439,17 @@ DEFUN (ospf_refresh_timer,
"Set refresh timer\n"
"Timer value in seconds\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_number = 2;
- unsigned int interval;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_number = 2;
+ unsigned int interval;
- interval = strtoul(argv[idx_number]->arg, NULL, 10);
- interval = (interval / OSPF_LSA_REFRESHER_GRANULARITY) * OSPF_LSA_REFRESHER_GRANULARITY;
+ interval = strtoul(argv[idx_number]->arg, NULL, 10);
+ interval = (interval / OSPF_LSA_REFRESHER_GRANULARITY)
+ * OSPF_LSA_REFRESHER_GRANULARITY;
- ospf_timers_refresh_set (ospf, interval);
+ ospf_timers_refresh_set(ospf, interval);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_refresh_timer,
@@ -2499,22 +2460,21 @@ DEFUN (no_ospf_refresh_timer,
"Unset refresh timer\n"
"Timer value in seconds\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_number = 3;
- unsigned int interval;
-
- if (argc == 1)
- {
- interval = strtoul(argv[idx_number]->arg, NULL, 10);
-
- if (ospf->lsa_refresh_interval != interval ||
- interval == OSPF_LSA_REFRESH_INTERVAL_DEFAULT)
- return CMD_SUCCESS;
- }
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_number = 3;
+ unsigned int interval;
- ospf_timers_refresh_unset (ospf);
+ if (argc == 1) {
+ interval = strtoul(argv[idx_number]->arg, NULL, 10);
- return CMD_SUCCESS;
+ if (ospf->lsa_refresh_interval != interval
+ || interval == OSPF_LSA_REFRESH_INTERVAL_DEFAULT)
+ return CMD_SUCCESS;
+ }
+
+ ospf_timers_refresh_unset(ospf);
+
+ return CMD_SUCCESS;
}
@@ -2525,28 +2485,27 @@ DEFUN (ospf_auto_cost_reference_bandwidth,
"Use reference bandwidth method to assign OSPF cost\n"
"The reference bandwidth in terms of Mbits per second\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_number = 2;
- u_int32_t refbw;
- struct listnode *node;
- struct interface *ifp;
-
- refbw = strtol (argv[idx_number]->arg, NULL, 10);
- if (refbw < 1 || refbw > 4294967)
- {
- vty_out (vty, "reference-bandwidth value is invalid\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* If reference bandwidth is changed. */
- if ((refbw) == ospf->ref_bandwidth)
- return CMD_SUCCESS;
-
- ospf->ref_bandwidth = refbw;
- for (ALL_LIST_ELEMENTS_RO (om->iflist, node, ifp))
- ospf_if_recalculate_output_cost (ifp);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_number = 2;
+ u_int32_t refbw;
+ struct listnode *node;
+ struct interface *ifp;
+
+ refbw = strtol(argv[idx_number]->arg, NULL, 10);
+ if (refbw < 1 || refbw > 4294967) {
+ vty_out(vty, "reference-bandwidth value is invalid\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* If reference bandwidth is changed. */
+ if ((refbw) == ospf->ref_bandwidth)
+ return CMD_SUCCESS;
+
+ ospf->ref_bandwidth = refbw;
+ for (ALL_LIST_ELEMENTS_RO(om->iflist, node, ifp))
+ ospf_if_recalculate_output_cost(ifp);
+
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_auto_cost_reference_bandwidth,
@@ -2557,21 +2516,22 @@ DEFUN (no_ospf_auto_cost_reference_bandwidth,
"Use reference bandwidth method to assign OSPF cost\n"
"The reference bandwidth in terms of Mbits per second\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- struct listnode *node, *nnode;
- struct interface *ifp;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ struct listnode *node, *nnode;
+ struct interface *ifp;
- if (ospf->ref_bandwidth == OSPF_DEFAULT_REF_BANDWIDTH)
- return CMD_SUCCESS;
-
- ospf->ref_bandwidth = OSPF_DEFAULT_REF_BANDWIDTH;
- vty_out (vty, "%% OSPF: Reference bandwidth is changed.\n");
- vty_out (vty, " Please ensure reference bandwidth is consistent across all routers\n");
-
- for (ALL_LIST_ELEMENTS (om->iflist, node, nnode, ifp))
- ospf_if_recalculate_output_cost (ifp);
-
- return CMD_SUCCESS;
+ if (ospf->ref_bandwidth == OSPF_DEFAULT_REF_BANDWIDTH)
+ return CMD_SUCCESS;
+
+ ospf->ref_bandwidth = OSPF_DEFAULT_REF_BANDWIDTH;
+ vty_out(vty, "%% OSPF: Reference bandwidth is changed.\n");
+ vty_out(vty,
+ " Please ensure reference bandwidth is consistent across all routers\n");
+
+ for (ALL_LIST_ELEMENTS(om->iflist, node, nnode, ifp))
+ ospf_if_recalculate_output_cost(ifp);
+
+ return CMD_SUCCESS;
}
DEFUN (ospf_write_multiplier,
@@ -2581,31 +2541,28 @@ DEFUN (ospf_write_multiplier,
"Write multiplier\n"
"Maximum number of interface serviced per write\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_number;
- u_int32_t write_oi_count;
-
- if (argc == 3)
- idx_number = 2;
- else
- idx_number = 1;
-
- write_oi_count = strtol (argv[idx_number]->arg, NULL, 10);
- if (write_oi_count < 1 || write_oi_count > 100)
- {
- vty_out (vty, "write-multiplier value is invalid\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- ospf->write_oi_count = write_oi_count;
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_number;
+ u_int32_t write_oi_count;
+
+ if (argc == 3)
+ idx_number = 2;
+ else
+ idx_number = 1;
+
+ write_oi_count = strtol(argv[idx_number]->arg, NULL, 10);
+ if (write_oi_count < 1 || write_oi_count > 100) {
+ vty_out(vty, "write-multiplier value is invalid\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ospf->write_oi_count = write_oi_count;
+ return CMD_SUCCESS;
}
-ALIAS (ospf_write_multiplier,
- write_multiplier_cmd,
- "write-multiplier (1-100)",
- "Write multiplier\n"
- "Maximum number of interface serviced per write\n")
+ALIAS(ospf_write_multiplier, write_multiplier_cmd, "write-multiplier (1-100)",
+ "Write multiplier\n"
+ "Maximum number of interface serviced per write\n")
DEFUN (no_ospf_write_multiplier,
no_ospf_write_multiplier_cmd,
@@ -2615,564 +2572,618 @@ DEFUN (no_ospf_write_multiplier,
"Write multiplier\n"
"Maximum number of interface serviced per write\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
- ospf->write_oi_count = OSPF_WRITE_INTERFACE_COUNT_DEFAULT;
- return CMD_SUCCESS;
+ ospf->write_oi_count = OSPF_WRITE_INTERFACE_COUNT_DEFAULT;
+ return CMD_SUCCESS;
}
-ALIAS (no_ospf_write_multiplier,
- no_write_multiplier_cmd,
- "no write-multiplier (1-100)",
- NO_STR
- "Write multiplier\n"
- "Maximum number of interface serviced per write\n")
+ALIAS(no_ospf_write_multiplier, no_write_multiplier_cmd,
+ "no write-multiplier (1-100)", NO_STR
+ "Write multiplier\n"
+ "Maximum number of interface serviced per write\n")
+
+const char *ospf_abr_type_descr_str[] = {"Unknown", "Standard (RFC2328)",
+ "Alternative IBM", "Alternative Cisco",
+ "Alternative Shortcut"};
+
+const char *ospf_shortcut_mode_descr_str[] = {"Default", "Enabled", "Disabled"};
+
+static void show_ip_ospf_area(struct vty *vty, struct ospf_area *area,
+ json_object *json_areas, u_char use_json)
+{
+ json_object *json_area = NULL;
+
+ if (use_json)
+ json_area = json_object_new_object();
+
+ /* Show Area ID. */
+ if (!use_json)
+ vty_out(vty, " Area ID: %s", inet_ntoa(area->area_id));
+
+ /* Show Area type/mode. */
+ if (OSPF_IS_AREA_BACKBONE(area)) {
+ if (use_json)
+ json_object_boolean_true_add(json_area, "backbone");
+ else
+ vty_out(vty, " (Backbone)\n");
+ } else {
+ if (use_json) {
+ if (area->external_routing == OSPF_AREA_STUB) {
+ if (area->no_summary)
+ json_object_boolean_true_add(
+ json_area, "stubNoSummary");
+ if (area->shortcut_configured)
+ json_object_boolean_true_add(
+ json_area, "stubShortcut");
+ } else if (area->external_routing == OSPF_AREA_NSSA) {
+ if (area->no_summary)
+ json_object_boolean_true_add(
+ json_area, "nssaNoSummary");
+ if (area->shortcut_configured)
+ json_object_boolean_true_add(
+ json_area, "nssaShortcut");
+ }
-const char *ospf_abr_type_descr_str[] =
-{
- "Unknown",
- "Standard (RFC2328)",
- "Alternative IBM",
- "Alternative Cisco",
- "Alternative Shortcut"
-};
+ json_object_string_add(
+ json_area, "shortcuttingMode",
+ ospf_shortcut_mode_descr_str
+ [area->shortcut_configured]);
+ if (area->shortcut_capability)
+ json_object_boolean_true_add(json_area,
+ "sBitConcensus");
+ } else {
+ if (area->external_routing == OSPF_AREA_STUB)
+ vty_out(vty, " (Stub%s%s)",
+ area->no_summary ? ", no summary" : "",
+ area->shortcut_configured ? "; " : "");
+ else if (area->external_routing == OSPF_AREA_NSSA)
+ vty_out(vty, " (NSSA%s%s)",
+ area->no_summary ? ", no summary" : "",
+ area->shortcut_configured ? "; " : "");
+
+ vty_out(vty, "\n");
+ vty_out(vty, " Shortcutting mode: %s",
+ ospf_shortcut_mode_descr_str
+ [area->shortcut_configured]);
+ vty_out(vty, ", S-bit consensus: %s\n",
+ area->shortcut_capability ? "ok" : "no");
+ }
+ }
-const char *ospf_shortcut_mode_descr_str[] =
-{
- "Default",
- "Enabled",
- "Disabled"
-};
+ /* Show number of interfaces */
+ if (use_json) {
+ json_object_int_add(json_area, "areaIfTotalCounter",
+ listcount(area->oiflist));
+ json_object_int_add(json_area, "areaIfActiveCounter",
+ area->act_ints);
+ } else
+ vty_out(vty,
+ " Number of interfaces in this area: Total: %d, "
+ "Active: %d\n",
+ listcount(area->oiflist), area->act_ints);
+
+ if (area->external_routing == OSPF_AREA_NSSA) {
+ if (use_json) {
+ json_object_boolean_true_add(json_area, "nssa");
+ if (!IS_OSPF_ABR(area->ospf))
+ json_object_boolean_false_add(json_area, "abr");
+ else if (area->NSSATranslatorState) {
+ json_object_boolean_true_add(json_area, "abr");
+ if (area->NSSATranslatorRole
+ == OSPF_NSSA_ROLE_CANDIDATE)
+ json_object_boolean_true_add(
+ json_area,
+ "nssaTranslatorElected");
+ else if (area->NSSATranslatorRole
+ == OSPF_NSSA_ROLE_ALWAYS)
+ json_object_boolean_true_add(
+ json_area,
+ "nssaTranslatorAlways");
+ } else {
+ json_object_boolean_true_add(json_area, "abr");
+ if (area->NSSATranslatorRole
+ == OSPF_NSSA_ROLE_CANDIDATE)
+ json_object_boolean_false_add(
+ json_area,
+ "nssaTranslatorElected");
+ else
+ json_object_boolean_true_add(
+ json_area,
+ "nssaTranslatorNever");
+ }
+ } else {
+ vty_out(vty,
+ " It is an NSSA configuration. \n Elected NSSA/ABR performs type-7/type-5 LSA translation. \n");
+ if (!IS_OSPF_ABR(area->ospf))
+ vty_out(vty,
+ " It is not ABR, therefore not Translator. \n");
+ else if (area->NSSATranslatorState) {
+ vty_out(vty, " We are an ABR and ");
+ if (area->NSSATranslatorRole
+ == OSPF_NSSA_ROLE_CANDIDATE)
+ vty_out(vty,
+ "the NSSA Elected Translator. \n");
+ else if (area->NSSATranslatorRole
+ == OSPF_NSSA_ROLE_ALWAYS)
+ vty_out(vty,
+ "always an NSSA Translator. \n");
+ } else {
+ vty_out(vty, " We are an ABR, but ");
+ if (area->NSSATranslatorRole
+ == OSPF_NSSA_ROLE_CANDIDATE)
+ vty_out(vty,
+ "not the NSSA Elected Translator. \n");
+ else
+ vty_out(vty,
+ "never an NSSA Translator. \n");
+ }
+ }
+ }
-static void
-show_ip_ospf_area (struct vty *vty, struct ospf_area *area, json_object *json_areas, u_char use_json)
-{
- json_object *json_area = NULL;
-
- if (use_json)
- json_area = json_object_new_object();
-
- /* Show Area ID. */
- if (!use_json)
- vty_out (vty, " Area ID: %s", inet_ntoa (area->area_id));
-
- /* Show Area type/mode. */
- if (OSPF_IS_AREA_BACKBONE (area))
- {
- if (use_json)
- json_object_boolean_true_add(json_area, "backbone");
- else
- vty_out (vty, " (Backbone)\n");
- }
- else
- {
- if (use_json)
- {
- if (area->external_routing == OSPF_AREA_STUB)
- {
- if (area->no_summary)
- json_object_boolean_true_add(json_area, "stubNoSummary");
- if (area->shortcut_configured)
- json_object_boolean_true_add(json_area, "stubShortcut");
- }
- else if (area->external_routing == OSPF_AREA_NSSA)
- {
- if (area->no_summary)
- json_object_boolean_true_add(json_area, "nssaNoSummary");
- if (area->shortcut_configured)
- json_object_boolean_true_add(json_area, "nssaShortcut");
- }
-
- json_object_string_add(json_area,"shortcuttingMode",
- ospf_shortcut_mode_descr_str[area->shortcut_configured]);
- if (area->shortcut_capability)
- json_object_boolean_true_add(json_area,"sBitConcensus");
- }
- else
- {
- if (area->external_routing == OSPF_AREA_STUB)
- vty_out (vty, " (Stub%s%s)",
- area->no_summary ? ", no summary" : "",
- area->shortcut_configured ? "; " : "");
- else if (area->external_routing == OSPF_AREA_NSSA)
- vty_out (vty, " (NSSA%s%s)",
- area->no_summary ? ", no summary" : "",
- area->shortcut_configured ? "; " : "");
-
- vty_out (vty, "\n");
- vty_out (vty, " Shortcutting mode: %s",
- ospf_shortcut_mode_descr_str[area->shortcut_configured]);
- vty_out (vty, ", S-bit consensus: %s\n",
- area->shortcut_capability ? "ok" : "no");
- }
- }
-
- /* Show number of interfaces */
- if (use_json)
- {
- json_object_int_add(json_area, "areaIfTotalCounter", listcount (area->oiflist));
- json_object_int_add(json_area, "areaIfActiveCounter", area->act_ints);
- }
- else
- vty_out (vty, " Number of interfaces in this area: Total: %d, "
- "Active: %d\n", listcount (area->oiflist),
- area->act_ints);
-
- if (area->external_routing == OSPF_AREA_NSSA)
- {
- if (use_json)
- {
- json_object_boolean_true_add(json_area, "nssa");
- if (! IS_OSPF_ABR (area->ospf))
- json_object_boolean_false_add(json_area, "abr");
- else if (area->NSSATranslatorState)
- {
- json_object_boolean_true_add(json_area, "abr");
- if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_CANDIDATE)
- json_object_boolean_true_add(json_area, "nssaTranslatorElected");
- else if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_ALWAYS)
- json_object_boolean_true_add(json_area, "nssaTranslatorAlways");
- }
- else
- {
- json_object_boolean_true_add(json_area, "abr");
- if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_CANDIDATE)
- json_object_boolean_false_add(json_area, "nssaTranslatorElected");
- else
- json_object_boolean_true_add(json_area, "nssaTranslatorNever");
- }
- }
- else
- {
- vty_out (vty, " It is an NSSA configuration. \n Elected NSSA/ABR performs type-7/type-5 LSA translation. \n");
- if (! IS_OSPF_ABR (area->ospf))
- vty_out (vty, " It is not ABR, therefore not Translator. \n");
- else if (area->NSSATranslatorState)
- {
- vty_out (vty, " We are an ABR and ");
- if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_CANDIDATE)
- vty_out (vty, "the NSSA Elected Translator. \n");
- else if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_ALWAYS)
- vty_out (vty, "always an NSSA Translator. \n");
- }
- else
- {
- vty_out (vty, " We are an ABR, but ");
- if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_CANDIDATE)
- vty_out (vty, "not the NSSA Elected Translator. \n");
- else
- vty_out (vty, "never an NSSA Translator. \n");
- }
- }
- }
-
- /* Stub-router state for this area */
- if (CHECK_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED))
- {
- char timebuf[OSPF_TIME_DUMP_SIZE];
-
- if (use_json)
- {
- json_object_boolean_true_add(json_area, "originStubMaxDistRouterLsa");
- if (CHECK_FLAG(area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED))
- json_object_boolean_true_add(json_area, "indefiniteActiveAdmin");
- if (area->t_stub_router)
- {
- long time_store;
- time_store = monotime_until(&area->t_stub_router->u.sands, NULL) / 1000LL;
- json_object_int_add(json_area, "activeStartupRemainderMsecs", time_store);
- }
- }
- else
- {
- vty_out (vty, " Originating stub / maximum-distance Router-LSA\n");
- if (CHECK_FLAG(area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED))
- vty_out (vty, " Administratively activated (indefinitely)\n");
- if (area->t_stub_router)
- vty_out (vty, " Active from startup, %s remaining\n",
- ospf_timer_dump (area->t_stub_router, timebuf,
- sizeof(timebuf)));
- }
- }
-
- if (use_json)
- {
- /* Show number of fully adjacent neighbors. */
- json_object_int_add(json_area, "nbrFullAdjacentCounter", area->full_nbrs);
-
- /* Show authentication type. */
- if (area->auth_type == OSPF_AUTH_NULL)
- json_object_string_add(json_area, "authentication", "authenticationNone");
- else if (area->auth_type == OSPF_AUTH_SIMPLE)
- json_object_string_add(json_area, "authentication", "authenticationSimplePassword");
- else if (area->auth_type == OSPF_AUTH_CRYPTOGRAPHIC)
- json_object_string_add(json_area, "authentication", "authenticationMessageDigest");
-
- if (!OSPF_IS_AREA_BACKBONE (area))
- json_object_int_add(json_area, "virtualAdjacenciesPassingCounter", area->full_vls);
-
- /* Show SPF calculation times. */
- json_object_int_add(json_area, "spfExecutedCounter", area->spf_calculation);
- json_object_int_add(json_area, "lsaNumber", area->lsdb->total);
- json_object_int_add(json_area, "lsaRouterNumber", ospf_lsdb_count (area->lsdb, OSPF_ROUTER_LSA));
- json_object_int_add(json_area, "lsaRouterChecksum", ospf_lsdb_checksum (area->lsdb, OSPF_ROUTER_LSA));
- json_object_int_add(json_area, "lsaNetworkNumber", ospf_lsdb_count (area->lsdb, OSPF_NETWORK_LSA));
- json_object_int_add(json_area, "lsaNetworkChecksum", ospf_lsdb_checksum (area->lsdb, OSPF_NETWORK_LSA));
- json_object_int_add(json_area, "lsaSummaryNumber", ospf_lsdb_count (area->lsdb, OSPF_SUMMARY_LSA));
- json_object_int_add(json_area, "lsaSummaryChecksum", ospf_lsdb_checksum (area->lsdb, OSPF_SUMMARY_LSA));
- json_object_int_add(json_area, "lsaAsbrNumber", ospf_lsdb_count (area->lsdb, OSPF_ASBR_SUMMARY_LSA));
- json_object_int_add(json_area, "lsaAsbrChecksum", ospf_lsdb_checksum (area->lsdb, OSPF_ASBR_SUMMARY_LSA));
- json_object_int_add(json_area, "lsaNssaNumber", ospf_lsdb_count (area->lsdb, OSPF_AS_NSSA_LSA));
- json_object_int_add(json_area, "lsaNssaChecksum", ospf_lsdb_checksum (area->lsdb, OSPF_AS_NSSA_LSA));
- }
- else
- {
- /* Show number of fully adjacent neighbors. */
- vty_out (vty, " Number of fully adjacent neighbors in this area:"
- " %d\n", area->full_nbrs);
-
- /* Show authentication type. */
- vty_out (vty, " Area has ");
- if (area->auth_type == OSPF_AUTH_NULL)
- vty_out (vty, "no authentication\n");
- else if (area->auth_type == OSPF_AUTH_SIMPLE)
- vty_out (vty, "simple password authentication\n");
- else if (area->auth_type == OSPF_AUTH_CRYPTOGRAPHIC)
- vty_out (vty, "message digest authentication\n");
-
- if (!OSPF_IS_AREA_BACKBONE (area))
- vty_out (vty, " Number of full virtual adjacencies going through"
- " this area: %d\n", area->full_vls);
-
- /* Show SPF calculation times. */
- vty_out (vty, " SPF algorithm executed %d times\n",
- area->spf_calculation);
-
- /* Show number of LSA. */
- vty_out (vty, " Number of LSA %ld\n", area->lsdb->total);
- vty_out (vty, " Number of router LSA %ld. Checksum Sum 0x%08x\n",
- ospf_lsdb_count (area->lsdb, OSPF_ROUTER_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_ROUTER_LSA));
- vty_out (vty, " Number of network LSA %ld. Checksum Sum 0x%08x\n",
- ospf_lsdb_count (area->lsdb, OSPF_NETWORK_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_NETWORK_LSA));
- vty_out (vty, " Number of summary LSA %ld. Checksum Sum 0x%08x\n",
- ospf_lsdb_count (area->lsdb, OSPF_SUMMARY_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_SUMMARY_LSA));
- vty_out (vty, " Number of ASBR summary LSA %ld. Checksum Sum 0x%08x\n",
- ospf_lsdb_count (area->lsdb, OSPF_ASBR_SUMMARY_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_ASBR_SUMMARY_LSA));
- vty_out (vty, " Number of NSSA LSA %ld. Checksum Sum 0x%08x\n",
- ospf_lsdb_count (area->lsdb, OSPF_AS_NSSA_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_AS_NSSA_LSA));
- }
-
- if (use_json)
- {
- json_object_int_add(json_area, "lsaOpaqueLinkNumber", ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_LINK_LSA));
- json_object_int_add(json_area, "lsaOpaqueLinkChecksum", ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_LINK_LSA));
- json_object_int_add(json_area, "lsaOpaqueAreaNumber", ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_AREA_LSA));
- json_object_int_add(json_area, "lsaOpaqueAreaChecksum", ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_AREA_LSA));
- }
- else
- {
- vty_out (vty, " Number of opaque link LSA %ld. Checksum Sum 0x%08x\n",
- ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_LINK_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_LINK_LSA));
- vty_out (vty, " Number of opaque area LSA %ld. Checksum Sum 0x%08x\n",
- ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_AREA_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_AREA_LSA));
- }
-
- if (use_json)
- json_object_object_add(json_areas, inet_ntoa (area->area_id), json_area);
- else
- vty_out (vty, "\n");
+ /* Stub-router state for this area */
+ if (CHECK_FLAG(area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED)) {
+ char timebuf[OSPF_TIME_DUMP_SIZE];
+
+ if (use_json) {
+ json_object_boolean_true_add(
+ json_area, "originStubMaxDistRouterLsa");
+ if (CHECK_FLAG(area->stub_router_state,
+ OSPF_AREA_ADMIN_STUB_ROUTED))
+ json_object_boolean_true_add(
+ json_area, "indefiniteActiveAdmin");
+ if (area->t_stub_router) {
+ long time_store;
+ time_store =
+ monotime_until(
+ &area->t_stub_router->u.sands,
+ NULL)
+ / 1000LL;
+ json_object_int_add(
+ json_area,
+ "activeStartupRemainderMsecs",
+ time_store);
+ }
+ } else {
+ vty_out(vty,
+ " Originating stub / maximum-distance Router-LSA\n");
+ if (CHECK_FLAG(area->stub_router_state,
+ OSPF_AREA_ADMIN_STUB_ROUTED))
+ vty_out(vty,
+ " Administratively activated (indefinitely)\n");
+ if (area->t_stub_router)
+ vty_out(vty,
+ " Active from startup, %s remaining\n",
+ ospf_timer_dump(area->t_stub_router,
+ timebuf,
+ sizeof(timebuf)));
+ }
+ }
+
+ if (use_json) {
+ /* Show number of fully adjacent neighbors. */
+ json_object_int_add(json_area, "nbrFullAdjacentCounter",
+ area->full_nbrs);
+
+ /* Show authentication type. */
+ if (area->auth_type == OSPF_AUTH_NULL)
+ json_object_string_add(json_area, "authentication",
+ "authenticationNone");
+ else if (area->auth_type == OSPF_AUTH_SIMPLE)
+ json_object_string_add(json_area, "authentication",
+ "authenticationSimplePassword");
+ else if (area->auth_type == OSPF_AUTH_CRYPTOGRAPHIC)
+ json_object_string_add(json_area, "authentication",
+ "authenticationMessageDigest");
+
+ if (!OSPF_IS_AREA_BACKBONE(area))
+ json_object_int_add(json_area,
+ "virtualAdjacenciesPassingCounter",
+ area->full_vls);
+
+ /* Show SPF calculation times. */
+ json_object_int_add(json_area, "spfExecutedCounter",
+ area->spf_calculation);
+ json_object_int_add(json_area, "lsaNumber", area->lsdb->total);
+ json_object_int_add(
+ json_area, "lsaRouterNumber",
+ ospf_lsdb_count(area->lsdb, OSPF_ROUTER_LSA));
+ json_object_int_add(
+ json_area, "lsaRouterChecksum",
+ ospf_lsdb_checksum(area->lsdb, OSPF_ROUTER_LSA));
+ json_object_int_add(
+ json_area, "lsaNetworkNumber",
+ ospf_lsdb_count(area->lsdb, OSPF_NETWORK_LSA));
+ json_object_int_add(
+ json_area, "lsaNetworkChecksum",
+ ospf_lsdb_checksum(area->lsdb, OSPF_NETWORK_LSA));
+ json_object_int_add(
+ json_area, "lsaSummaryNumber",
+ ospf_lsdb_count(area->lsdb, OSPF_SUMMARY_LSA));
+ json_object_int_add(
+ json_area, "lsaSummaryChecksum",
+ ospf_lsdb_checksum(area->lsdb, OSPF_SUMMARY_LSA));
+ json_object_int_add(
+ json_area, "lsaAsbrNumber",
+ ospf_lsdb_count(area->lsdb, OSPF_ASBR_SUMMARY_LSA));
+ json_object_int_add(
+ json_area, "lsaAsbrChecksum",
+ ospf_lsdb_checksum(area->lsdb, OSPF_ASBR_SUMMARY_LSA));
+ json_object_int_add(
+ json_area, "lsaNssaNumber",
+ ospf_lsdb_count(area->lsdb, OSPF_AS_NSSA_LSA));
+ json_object_int_add(
+ json_area, "lsaNssaChecksum",
+ ospf_lsdb_checksum(area->lsdb, OSPF_AS_NSSA_LSA));
+ } else {
+ /* Show number of fully adjacent neighbors. */
+ vty_out(vty,
+ " Number of fully adjacent neighbors in this area:"
+ " %d\n",
+ area->full_nbrs);
+
+ /* Show authentication type. */
+ vty_out(vty, " Area has ");
+ if (area->auth_type == OSPF_AUTH_NULL)
+ vty_out(vty, "no authentication\n");
+ else if (area->auth_type == OSPF_AUTH_SIMPLE)
+ vty_out(vty, "simple password authentication\n");
+ else if (area->auth_type == OSPF_AUTH_CRYPTOGRAPHIC)
+ vty_out(vty, "message digest authentication\n");
+
+ if (!OSPF_IS_AREA_BACKBONE(area))
+ vty_out(vty,
+ " Number of full virtual adjacencies going through"
+ " this area: %d\n",
+ area->full_vls);
+
+ /* Show SPF calculation times. */
+ vty_out(vty, " SPF algorithm executed %d times\n",
+ area->spf_calculation);
+
+ /* Show number of LSA. */
+ vty_out(vty, " Number of LSA %ld\n", area->lsdb->total);
+ vty_out(vty,
+ " Number of router LSA %ld. Checksum Sum 0x%08x\n",
+ ospf_lsdb_count(area->lsdb, OSPF_ROUTER_LSA),
+ ospf_lsdb_checksum(area->lsdb, OSPF_ROUTER_LSA));
+ vty_out(vty,
+ " Number of network LSA %ld. Checksum Sum 0x%08x\n",
+ ospf_lsdb_count(area->lsdb, OSPF_NETWORK_LSA),
+ ospf_lsdb_checksum(area->lsdb, OSPF_NETWORK_LSA));
+ vty_out(vty,
+ " Number of summary LSA %ld. Checksum Sum 0x%08x\n",
+ ospf_lsdb_count(area->lsdb, OSPF_SUMMARY_LSA),
+ ospf_lsdb_checksum(area->lsdb, OSPF_SUMMARY_LSA));
+ vty_out(vty,
+ " Number of ASBR summary LSA %ld. Checksum Sum 0x%08x\n",
+ ospf_lsdb_count(area->lsdb, OSPF_ASBR_SUMMARY_LSA),
+ ospf_lsdb_checksum(area->lsdb, OSPF_ASBR_SUMMARY_LSA));
+ vty_out(vty, " Number of NSSA LSA %ld. Checksum Sum 0x%08x\n",
+ ospf_lsdb_count(area->lsdb, OSPF_AS_NSSA_LSA),
+ ospf_lsdb_checksum(area->lsdb, OSPF_AS_NSSA_LSA));
+ }
+
+ if (use_json) {
+ json_object_int_add(
+ json_area, "lsaOpaqueLinkNumber",
+ ospf_lsdb_count(area->lsdb, OSPF_OPAQUE_LINK_LSA));
+ json_object_int_add(
+ json_area, "lsaOpaqueLinkChecksum",
+ ospf_lsdb_checksum(area->lsdb, OSPF_OPAQUE_LINK_LSA));
+ json_object_int_add(
+ json_area, "lsaOpaqueAreaNumber",
+ ospf_lsdb_count(area->lsdb, OSPF_OPAQUE_AREA_LSA));
+ json_object_int_add(
+ json_area, "lsaOpaqueAreaChecksum",
+ ospf_lsdb_checksum(area->lsdb, OSPF_OPAQUE_AREA_LSA));
+ } else {
+ vty_out(vty,
+ " Number of opaque link LSA %ld. Checksum Sum 0x%08x\n",
+ ospf_lsdb_count(area->lsdb, OSPF_OPAQUE_LINK_LSA),
+ ospf_lsdb_checksum(area->lsdb, OSPF_OPAQUE_LINK_LSA));
+ vty_out(vty,
+ " Number of opaque area LSA %ld. Checksum Sum 0x%08x\n",
+ ospf_lsdb_count(area->lsdb, OSPF_OPAQUE_AREA_LSA),
+ ospf_lsdb_checksum(area->lsdb, OSPF_OPAQUE_AREA_LSA));
+ }
+
+ if (use_json)
+ json_object_object_add(json_areas, inet_ntoa(area->area_id),
+ json_area);
+ else
+ vty_out(vty, "\n");
}
-static int
-show_ip_ospf_common (struct vty *vty, struct ospf *ospf, u_char use_json)
-{
- struct listnode *node, *nnode;
- struct ospf_area * area;
- struct timeval result;
- char timebuf[OSPF_TIME_DUMP_SIZE];
- json_object *json = NULL;
- json_object *json_areas = NULL;
-
- if (use_json)
- {
- json = json_object_new_object();
- json_areas = json_object_new_object();
- }
-
- if (ospf->instance)
- {
- if (use_json)
- {
- json_object_int_add(json, "ospfInstance", ospf->instance);
- }
- else
- {
- vty_out (vty, "\nOSPF Instance: %d\n\n", ospf->instance);
- }
- }
-
- /* Show Router ID. */
- if (use_json)
- {
- json_object_string_add(json, "routerId", inet_ntoa (ospf->router_id));
- }
- else
- {
- vty_out (vty, " OSPF Routing Process, Router ID: %s\n",
- inet_ntoa (ospf->router_id));
- }
-
- /* Graceful shutdown */
- if (ospf->t_deferred_shutdown)
- {
- if (use_json)
- {
- long time_store;
- time_store = monotime_until(&ospf->t_deferred_shutdown->u.sands, NULL) / 1000LL;
- json_object_int_add(json, "deferredShutdownMsecs", time_store);
- }
- else
- {
- vty_out (vty, " Deferred shutdown in progress, %s remaining\n",
- ospf_timer_dump (ospf->t_deferred_shutdown,
- timebuf, sizeof (timebuf)));
- }
- }
-
- /* Show capability. */
- if (use_json)
- {
- json_object_boolean_true_add(json, "tosRoutesOnly");
- json_object_boolean_true_add(json, "rfc2328Conform");
- if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE))
- {
- json_object_boolean_true_add(json, "rfc1583Compatibility");
- }
- }
- else
- {
- vty_out (vty, " Supports only single TOS (TOS0) routes\n");
- vty_out (vty, " This implementation conforms to RFC2328\n");
- vty_out (vty, " RFC1583Compatibility flag is %s\n",
- CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE) ?
- "enabled" : "disabled");
- }
-
- if (use_json)
- {
- if (CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE))
- {
- json_object_boolean_true_add(json, "opaqueCapable");
- }
- }
- else
- {
- vty_out (vty, " OpaqueCapability flag is %s\n",
- CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE) ? "enabled" : "disabled");
- }
-
- /* Show stub-router configuration */
- if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED
- || ospf->stub_router_shutdown_time != OSPF_STUB_ROUTER_UNCONFIGURED)
- {
- if (use_json)
- {
- json_object_boolean_true_add(json, "stubAdvertisement");
- if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED)
- json_object_int_add(json,"postStartEnabledMsecs", ospf->stub_router_startup_time / 1000);
- if (ospf->stub_router_shutdown_time != OSPF_STUB_ROUTER_UNCONFIGURED)
- json_object_int_add(json,"preShutdownEnabledMsecs", ospf->stub_router_shutdown_time / 1000);
- }
- else
- {
- vty_out (vty, " Stub router advertisement is configured\n");
- if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED)
- vty_out (vty, " Enabled for %us after start-up\n",
- ospf->stub_router_startup_time);
- if (ospf->stub_router_shutdown_time != OSPF_STUB_ROUTER_UNCONFIGURED)
- vty_out (vty, " Enabled for %us prior to full shutdown\n",
- ospf->stub_router_shutdown_time);
- }
- }
-
- /* Show SPF timers. */
- if (use_json)
- {
- json_object_int_add(json, "spfScheduleDelayMsecs", ospf->spf_delay);
- json_object_int_add(json, "holdtimeMinMsecs", ospf->spf_holdtime);
- json_object_int_add(json, "holdtimeMaxMsecs", ospf->spf_max_holdtime);
- json_object_int_add(json, "holdtimeMultplier", ospf->spf_hold_multiplier);
- }
- else
- {
- vty_out (vty, " Initial SPF scheduling delay %d millisec(s)\n"
- " Minimum hold time between consecutive SPFs %d millisec(s)\n"
- " Maximum hold time between consecutive SPFs %d millisec(s)\n"
- " Hold time multiplier is currently %d\n",
- ospf->spf_delay,
- ospf->spf_holdtime,
- ospf->spf_max_holdtime,
- ospf->spf_hold_multiplier);
- }
-
- if (use_json)
- {
- if (ospf->ts_spf.tv_sec || ospf->ts_spf.tv_usec)
- {
- long time_store = 0;
-
- time_store = monotime_since(&ospf->ts_spf, NULL) / 1000LL;
- json_object_int_add(json, "spfLastExecutedMsecs", time_store);
-
- time_store = (1000 * ospf->ts_spf_duration.tv_sec) + (ospf->ts_spf_duration.tv_usec / 1000);
- json_object_int_add(json, "spfLastDurationMsecs", time_store);
- }
- else
- json_object_boolean_true_add(json, "spfHasNotRun");
- }
- else
- {
- vty_out (vty, " SPF algorithm ");
- if (ospf->ts_spf.tv_sec || ospf->ts_spf.tv_usec)
- {
- monotime_since(&ospf->ts_spf, &result);
- vty_out (vty, "last executed %s ago\n",
- ospf_timeval_dump (&result, timebuf, sizeof (timebuf)));
- vty_out (vty, " Last SPF duration %s\n",
- ospf_timeval_dump (&ospf->ts_spf_duration, timebuf, sizeof (timebuf)));
- }
- else
- vty_out (vty, "has not been run\n");
- }
-
- if (use_json)
- {
- if (ospf->t_spf_calc)
- {
- long time_store;
- time_store = monotime_until(&ospf->t_spf_calc->u.sands, NULL) / 1000LL;
- json_object_int_add(json, "spfTimerDueInMsecs", time_store);
- }
-
- json_object_int_add(json, "lsaMinIntervalMsecs", ospf->min_ls_interval);
- json_object_int_add(json, "lsaMinArrivalMsecs", ospf->min_ls_arrival);
- /* Show write multiplier values */
- json_object_int_add(json, "writeMultiplier", ospf->write_oi_count);
- /* Show refresh parameters. */
- json_object_int_add(json, "refreshTimerMsecs", ospf->lsa_refresh_interval * 1000);
- }
- else
- {
- vty_out (vty, " SPF timer %s%s\n",
- (ospf->t_spf_calc ? "due in " : "is "),
- ospf_timer_dump (ospf->t_spf_calc, timebuf, sizeof (timebuf)));
-
- vty_out (vty, " LSA minimum interval %d msecs\n",
- ospf->min_ls_interval);
- vty_out (vty, " LSA minimum arrival %d msecs\n",
- ospf->min_ls_arrival);
-
- /* Show write multiplier values */
- vty_out (vty, " Write Multiplier set to %d \n",
- ospf->write_oi_count);
-
- /* Show refresh parameters. */
- vty_out (vty, " Refresh timer %d secs\n",
- ospf->lsa_refresh_interval);
- }
-
- /* Show ABR/ASBR flags. */
- if (CHECK_FLAG (ospf->flags, OSPF_FLAG_ABR))
- {
- if (use_json)
- json_object_string_add(json, "abrType", ospf_abr_type_descr_str[ospf->abr_type]);
- else
- vty_out (vty, " This router is an ABR, ABR type is: %s\n",
- ospf_abr_type_descr_str[ospf->abr_type]);
- }
- if (CHECK_FLAG (ospf->flags, OSPF_FLAG_ASBR))
- {
- if (use_json)
- json_object_string_add(json, "asbrRouter", "injectingExternalRoutingInformation");
- else
- vty_out (vty, " This router is an ASBR "
- "(injecting external routing information)\n");
- }
-
- /* Show Number of AS-external-LSAs. */
- if (use_json)
- {
- json_object_int_add(json, "lsaExternalCounter",
- ospf_lsdb_count (ospf->lsdb, OSPF_AS_EXTERNAL_LSA));
- json_object_int_add(json, "lsaExternalChecksum",
- ospf_lsdb_checksum (ospf->lsdb, OSPF_AS_EXTERNAL_LSA));
- }
- else
- {
- vty_out (vty, " Number of external LSA %ld. Checksum Sum 0x%08x\n",
- ospf_lsdb_count (ospf->lsdb, OSPF_AS_EXTERNAL_LSA),
- ospf_lsdb_checksum (ospf->lsdb, OSPF_AS_EXTERNAL_LSA));
- }
-
- if (use_json)
- {
- json_object_int_add(json, "lsaAsopaqueCounter",
- ospf_lsdb_count (ospf->lsdb, OSPF_OPAQUE_AS_LSA));
- json_object_int_add(json, "lsaAsOpaqueChecksum",
- ospf_lsdb_checksum (ospf->lsdb, OSPF_OPAQUE_AS_LSA));
- }
- else
- {
- vty_out (vty, " Number of opaque AS LSA %ld. Checksum Sum 0x%08x\n",
- ospf_lsdb_count (ospf->lsdb, OSPF_OPAQUE_AS_LSA),
- ospf_lsdb_checksum (ospf->lsdb, OSPF_OPAQUE_AS_LSA));
- }
-
- /* Show number of areas attached. */
- if (use_json)
- json_object_int_add(json, "attachedAreaCounter", listcount (ospf->areas));
- else
- vty_out (vty, " Number of areas attached to this router: %d\n",
- listcount (ospf->areas));
-
- if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES))
- {
- if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL))
- {
- if (use_json)
- json_object_boolean_true_add(json, "adjacencyChangesLoggedAll");
- else
- vty_out(vty, " All adjacency changes are logged\n");
- }
- else
- {
- if (use_json)
- json_object_boolean_true_add(json, "adjacencyChangesLogged");
- else
- vty_out(vty, " Adjacency changes are logged\n");
- }
- }
- /* Show each area status. */
- for (ALL_LIST_ELEMENTS (ospf->areas, node, nnode, area))
- show_ip_ospf_area (vty, area, json_areas, use_json);
-
- if (use_json)
- {
- json_object_object_add(json, "areas", json_areas);
- vty_out (vty, "%s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
- json_object_free(json);
- }
- else
- vty_out (vty, "\n");
+static int show_ip_ospf_common(struct vty *vty, struct ospf *ospf,
+ u_char use_json)
+{
+ struct listnode *node, *nnode;
+ struct ospf_area *area;
+ struct timeval result;
+ char timebuf[OSPF_TIME_DUMP_SIZE];
+ json_object *json = NULL;
+ json_object *json_areas = NULL;
- return CMD_SUCCESS;
+ if (use_json) {
+ json = json_object_new_object();
+ json_areas = json_object_new_object();
+ }
+
+ if (ospf->instance) {
+ if (use_json) {
+ json_object_int_add(json, "ospfInstance",
+ ospf->instance);
+ } else {
+ vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);
+ }
+ }
+
+ /* Show Router ID. */
+ if (use_json) {
+ json_object_string_add(json, "routerId",
+ inet_ntoa(ospf->router_id));
+ } else {
+ vty_out(vty, " OSPF Routing Process, Router ID: %s\n",
+ inet_ntoa(ospf->router_id));
+ }
+
+ /* Graceful shutdown */
+ if (ospf->t_deferred_shutdown) {
+ if (use_json) {
+ long time_store;
+ time_store =
+ monotime_until(
+ &ospf->t_deferred_shutdown->u.sands,
+ NULL)
+ / 1000LL;
+ json_object_int_add(json, "deferredShutdownMsecs",
+ time_store);
+ } else {
+ vty_out(vty,
+ " Deferred shutdown in progress, %s remaining\n",
+ ospf_timer_dump(ospf->t_deferred_shutdown,
+ timebuf, sizeof(timebuf)));
+ }
+ }
+
+ /* Show capability. */
+ if (use_json) {
+ json_object_boolean_true_add(json, "tosRoutesOnly");
+ json_object_boolean_true_add(json, "rfc2328Conform");
+ if (CHECK_FLAG(ospf->config, OSPF_RFC1583_COMPATIBLE)) {
+ json_object_boolean_true_add(json,
+ "rfc1583Compatibility");
+ }
+ } else {
+ vty_out(vty, " Supports only single TOS (TOS0) routes\n");
+ vty_out(vty, " This implementation conforms to RFC2328\n");
+ vty_out(vty, " RFC1583Compatibility flag is %s\n",
+ CHECK_FLAG(ospf->config, OSPF_RFC1583_COMPATIBLE)
+ ? "enabled"
+ : "disabled");
+ }
+
+ if (use_json) {
+ if (CHECK_FLAG(ospf->config, OSPF_OPAQUE_CAPABLE)) {
+ json_object_boolean_true_add(json, "opaqueCapable");
+ }
+ } else {
+ vty_out(vty, " OpaqueCapability flag is %s\n",
+ CHECK_FLAG(ospf->config, OSPF_OPAQUE_CAPABLE)
+ ? "enabled"
+ : "disabled");
+ }
+
+ /* Show stub-router configuration */
+ if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED
+ || ospf->stub_router_shutdown_time
+ != OSPF_STUB_ROUTER_UNCONFIGURED) {
+ if (use_json) {
+ json_object_boolean_true_add(json, "stubAdvertisement");
+ if (ospf->stub_router_startup_time
+ != OSPF_STUB_ROUTER_UNCONFIGURED)
+ json_object_int_add(
+ json, "postStartEnabledMsecs",
+ ospf->stub_router_startup_time / 1000);
+ if (ospf->stub_router_shutdown_time
+ != OSPF_STUB_ROUTER_UNCONFIGURED)
+ json_object_int_add(
+ json, "preShutdownEnabledMsecs",
+ ospf->stub_router_shutdown_time / 1000);
+ } else {
+ vty_out(vty,
+ " Stub router advertisement is configured\n");
+ if (ospf->stub_router_startup_time
+ != OSPF_STUB_ROUTER_UNCONFIGURED)
+ vty_out(vty,
+ " Enabled for %us after start-up\n",
+ ospf->stub_router_startup_time);
+ if (ospf->stub_router_shutdown_time
+ != OSPF_STUB_ROUTER_UNCONFIGURED)
+ vty_out(vty,
+ " Enabled for %us prior to full shutdown\n",
+ ospf->stub_router_shutdown_time);
+ }
+ }
+
+ /* Show SPF timers. */
+ if (use_json) {
+ json_object_int_add(json, "spfScheduleDelayMsecs",
+ ospf->spf_delay);
+ json_object_int_add(json, "holdtimeMinMsecs",
+ ospf->spf_holdtime);
+ json_object_int_add(json, "holdtimeMaxMsecs",
+ ospf->spf_max_holdtime);
+ json_object_int_add(json, "holdtimeMultplier",
+ ospf->spf_hold_multiplier);
+ } else {
+ vty_out(vty,
+ " Initial SPF scheduling delay %d millisec(s)\n"
+ " Minimum hold time between consecutive SPFs %d millisec(s)\n"
+ " Maximum hold time between consecutive SPFs %d millisec(s)\n"
+ " Hold time multiplier is currently %d\n",
+ ospf->spf_delay, ospf->spf_holdtime,
+ ospf->spf_max_holdtime, ospf->spf_hold_multiplier);
+ }
+
+ if (use_json) {
+ if (ospf->ts_spf.tv_sec || ospf->ts_spf.tv_usec) {
+ long time_store = 0;
+
+ time_store =
+ monotime_since(&ospf->ts_spf, NULL) / 1000LL;
+ json_object_int_add(json, "spfLastExecutedMsecs",
+ time_store);
+
+ time_store = (1000 * ospf->ts_spf_duration.tv_sec)
+ + (ospf->ts_spf_duration.tv_usec / 1000);
+ json_object_int_add(json, "spfLastDurationMsecs",
+ time_store);
+ } else
+ json_object_boolean_true_add(json, "spfHasNotRun");
+ } else {
+ vty_out(vty, " SPF algorithm ");
+ if (ospf->ts_spf.tv_sec || ospf->ts_spf.tv_usec) {
+ monotime_since(&ospf->ts_spf, &result);
+ vty_out(vty, "last executed %s ago\n",
+ ospf_timeval_dump(&result, timebuf,
+ sizeof(timebuf)));
+ vty_out(vty, " Last SPF duration %s\n",
+ ospf_timeval_dump(&ospf->ts_spf_duration,
+ timebuf, sizeof(timebuf)));
+ } else
+ vty_out(vty, "has not been run\n");
+ }
+
+ if (use_json) {
+ if (ospf->t_spf_calc) {
+ long time_store;
+ time_store =
+ monotime_until(&ospf->t_spf_calc->u.sands, NULL)
+ / 1000LL;
+ json_object_int_add(json, "spfTimerDueInMsecs",
+ time_store);
+ }
+
+ json_object_int_add(json, "lsaMinIntervalMsecs",
+ ospf->min_ls_interval);
+ json_object_int_add(json, "lsaMinArrivalMsecs",
+ ospf->min_ls_arrival);
+ /* Show write multiplier values */
+ json_object_int_add(json, "writeMultiplier",
+ ospf->write_oi_count);
+ /* Show refresh parameters. */
+ json_object_int_add(json, "refreshTimerMsecs",
+ ospf->lsa_refresh_interval * 1000);
+ } else {
+ vty_out(vty, " SPF timer %s%s\n",
+ (ospf->t_spf_calc ? "due in " : "is "),
+ ospf_timer_dump(ospf->t_spf_calc, timebuf,
+ sizeof(timebuf)));
+
+ vty_out(vty, " LSA minimum interval %d msecs\n",
+ ospf->min_ls_interval);
+ vty_out(vty, " LSA minimum arrival %d msecs\n",
+ ospf->min_ls_arrival);
+
+ /* Show write multiplier values */
+ vty_out(vty, " Write Multiplier set to %d \n",
+ ospf->write_oi_count);
+
+ /* Show refresh parameters. */
+ vty_out(vty, " Refresh timer %d secs\n",
+ ospf->lsa_refresh_interval);
+ }
+
+ /* Show ABR/ASBR flags. */
+ if (CHECK_FLAG(ospf->flags, OSPF_FLAG_ABR)) {
+ if (use_json)
+ json_object_string_add(
+ json, "abrType",
+ ospf_abr_type_descr_str[ospf->abr_type]);
+ else
+ vty_out(vty,
+ " This router is an ABR, ABR type is: %s\n",
+ ospf_abr_type_descr_str[ospf->abr_type]);
+ }
+ if (CHECK_FLAG(ospf->flags, OSPF_FLAG_ASBR)) {
+ if (use_json)
+ json_object_string_add(
+ json, "asbrRouter",
+ "injectingExternalRoutingInformation");
+ else
+ vty_out(vty,
+ " This router is an ASBR "
+ "(injecting external routing information)\n");
+ }
+
+ /* Show Number of AS-external-LSAs. */
+ if (use_json) {
+ json_object_int_add(
+ json, "lsaExternalCounter",
+ ospf_lsdb_count(ospf->lsdb, OSPF_AS_EXTERNAL_LSA));
+ json_object_int_add(
+ json, "lsaExternalChecksum",
+ ospf_lsdb_checksum(ospf->lsdb, OSPF_AS_EXTERNAL_LSA));
+ } else {
+ vty_out(vty,
+ " Number of external LSA %ld. Checksum Sum 0x%08x\n",
+ ospf_lsdb_count(ospf->lsdb, OSPF_AS_EXTERNAL_LSA),
+ ospf_lsdb_checksum(ospf->lsdb, OSPF_AS_EXTERNAL_LSA));
+ }
+
+ if (use_json) {
+ json_object_int_add(
+ json, "lsaAsopaqueCounter",
+ ospf_lsdb_count(ospf->lsdb, OSPF_OPAQUE_AS_LSA));
+ json_object_int_add(
+ json, "lsaAsOpaqueChecksum",
+ ospf_lsdb_checksum(ospf->lsdb, OSPF_OPAQUE_AS_LSA));
+ } else {
+ vty_out(vty,
+ " Number of opaque AS LSA %ld. Checksum Sum 0x%08x\n",
+ ospf_lsdb_count(ospf->lsdb, OSPF_OPAQUE_AS_LSA),
+ ospf_lsdb_checksum(ospf->lsdb, OSPF_OPAQUE_AS_LSA));
+ }
+
+ /* Show number of areas attached. */
+ if (use_json)
+ json_object_int_add(json, "attachedAreaCounter",
+ listcount(ospf->areas));
+ else
+ vty_out(vty, " Number of areas attached to this router: %d\n",
+ listcount(ospf->areas));
+
+ if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES)) {
+ if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL)) {
+ if (use_json)
+ json_object_boolean_true_add(
+ json, "adjacencyChangesLoggedAll");
+ else
+ vty_out(vty,
+ " All adjacency changes are logged\n");
+ } else {
+ if (use_json)
+ json_object_boolean_true_add(
+ json, "adjacencyChangesLogged");
+ else
+ vty_out(vty, " Adjacency changes are logged\n");
+ }
+ }
+ /* Show each area status. */
+ for (ALL_LIST_ELEMENTS(ospf->areas, node, nnode, area))
+ show_ip_ospf_area(vty, area, json_areas, use_json);
+
+ if (use_json) {
+ json_object_object_add(json, "areas", json_areas);
+ vty_out(vty, "%s\n", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
+ json_object_free(json);
+ } else
+ vty_out(vty, "\n");
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf,
@@ -3183,13 +3194,13 @@ DEFUN (show_ip_ospf,
"OSPF information\n"
JSON_STR)
{
- struct ospf *ospf;
- u_char uj = use_json(argc, argv);
+ struct ospf *ospf;
+ u_char uj = use_json(argc, argv);
- if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
+ return CMD_SUCCESS;
- return (show_ip_ospf_common(vty, ospf, uj));
+ return (show_ip_ospf_common(vty, ospf, uj));
}
DEFUN (show_ip_ospf_instance,
@@ -3201,360 +3212,407 @@ DEFUN (show_ip_ospf_instance,
"Instance ID\n"
JSON_STR)
{
- int idx_number = 3;
- struct ospf *ospf;
- u_short instance = 0;
- u_char uj = use_json(argc, argv);
+ int idx_number = 3;
+ struct ospf *ospf;
+ u_short instance = 0;
+ u_char uj = use_json(argc, argv);
+
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ if ((ospf = ospf_lookup_instance(instance)) == NULL
+ || !ospf->oi_running)
+ return CMD_SUCCESS;
+
+ return (show_ip_ospf_common(vty, ospf, uj));
+}
+
+static void show_ip_ospf_interface_sub(struct vty *vty, struct ospf *ospf,
+ struct interface *ifp,
+ json_object *json_interface_sub,
+ u_char use_json)
+{
+ int is_up;
+ struct ospf_neighbor *nbr;
+ struct route_node *rn;
+ uint32_t bandwidth = ifp->bandwidth ? ifp->bandwidth : ifp->speed;
+
+ /* Is interface up? */
+ if (use_json) {
+ is_up = if_is_operative(ifp);
+ if (is_up)
+ json_object_boolean_true_add(json_interface_sub,
+ "ifUp");
+ else
+ json_object_boolean_false_add(json_interface_sub,
+ "ifDown");
+
+ json_object_int_add(json_interface_sub, "ifIndex",
+ ifp->ifindex);
+ json_object_int_add(json_interface_sub, "mtuBytes", ifp->mtu);
+ json_object_int_add(json_interface_sub, "bandwidthMbit",
+ bandwidth);
+ json_object_string_add(json_interface_sub, "ifFlags",
+ if_flag_dump(ifp->flags));
+ } else {
+ vty_out(vty, "%s is %s\n", ifp->name,
+ ((is_up = if_is_operative(ifp)) ? "up" : "down"));
+ vty_out(vty, " ifindex %u, MTU %u bytes, BW %u Mbit %s\n",
+ ifp->ifindex, ifp->mtu, bandwidth,
+ if_flag_dump(ifp->flags));
+ }
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
- if ((ospf = ospf_lookup_instance (instance)) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ /* Is interface OSPF enabled? */
+ if (use_json) {
+ if (ospf_oi_count(ifp) == 0) {
+ json_object_boolean_false_add(json_interface_sub,
+ "ospfEnabled");
+ return;
+ } else if (!is_up) {
+ json_object_boolean_false_add(json_interface_sub,
+ "ospfRunning");
+ return;
+ } else
+ json_object_boolean_true_add(json_interface_sub,
+ "ospfEnabled");
+ } else {
+ if (ospf_oi_count(ifp) == 0) {
+ vty_out(vty, " OSPF not enabled on this interface\n");
+ return;
+ } else if (!is_up) {
+ vty_out(vty,
+ " OSPF is enabled, but not running on this interface\n");
+ return;
+ }
+ }
- return (show_ip_ospf_common(vty, ospf, uj));
-}
-
-static void
-show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf, struct interface *ifp,
- json_object *json_interface_sub, u_char use_json)
-{
- int is_up;
- struct ospf_neighbor *nbr;
- struct route_node *rn;
- uint32_t bandwidth = ifp->bandwidth ? ifp->bandwidth : ifp->speed;
-
- /* Is interface up? */
- if (use_json)
- {
- is_up = if_is_operative(ifp);
- if (is_up)
- json_object_boolean_true_add(json_interface_sub, "ifUp");
- else
- json_object_boolean_false_add(json_interface_sub, "ifDown");
-
- json_object_int_add(json_interface_sub, "ifIndex", ifp->ifindex);
- json_object_int_add(json_interface_sub, "mtuBytes", ifp->mtu);
- json_object_int_add(json_interface_sub, "bandwidthMbit", bandwidth);
- json_object_string_add(json_interface_sub, "ifFlags", if_flag_dump(ifp->flags));
- }
- else
- {
- vty_out (vty, "%s is %s\n", ifp->name,
- ((is_up = if_is_operative(ifp)) ? "up" : "down"));
- vty_out (vty, " ifindex %u, MTU %u bytes, BW %u Mbit %s\n",
- ifp->ifindex, ifp->mtu, bandwidth, if_flag_dump(ifp->flags));
- }
-
- /* Is interface OSPF enabled? */
- if (use_json)
- {
- if (ospf_oi_count(ifp) == 0)
- {
- json_object_boolean_false_add(json_interface_sub, "ospfEnabled");
- return;
- }
- else if (!is_up)
- {
- json_object_boolean_false_add(json_interface_sub, "ospfRunning");
- return;
- }
- else
- json_object_boolean_true_add(json_interface_sub, "ospfEnabled");
- }
- else
- {
- if (ospf_oi_count(ifp) == 0)
- {
- vty_out (vty, " OSPF not enabled on this interface\n");
- return;
- }
- else if (!is_up)
- {
- vty_out (vty, " OSPF is enabled, but not running on this interface\n");
- return;
- }
- }
-
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
-
- if (oi == NULL)
- continue;
-
- if (CHECK_FLAG(oi->connected->flags, ZEBRA_IFA_UNNUMBERED))
- {
- if (use_json)
- json_object_boolean_true_add(json_interface_sub, "ifUnnumbered");
- else
- vty_out (vty, " This interface is UNNUMBERED,");
- }
- else
- {
- /* Show OSPF interface information. */
- if (use_json)
- {
- json_object_string_add(json_interface_sub, "ipAddress", inet_ntoa (oi->address->u.prefix4));
- json_object_int_add(json_interface_sub, "ipAddressPrefixlen", oi->address->prefixlen);
- }
- else
- vty_out (vty, " Internet Address %s/%d,",
- inet_ntoa (oi->address->u.prefix4), oi->address->prefixlen);
-
- if (oi->connected->destination || oi->type == OSPF_IFTYPE_VIRTUALLINK)
- {
- struct in_addr *dest;
- const char *dstr;
-
- if (CONNECTED_PEER(oi->connected)
- || oi->type == OSPF_IFTYPE_VIRTUALLINK)
- dstr = "Peer";
- else
- dstr = "Broadcast";
-
- /* For Vlinks, showing the peer address is probably more
- * * * * * informative than the local interface that is being used
- * * * * */
- if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
- dest = &oi->vl_data->peer_addr;
- else
- dest = &oi->connected->destination->u.prefix4;
-
- if (use_json)
- {
- json_object_string_add(json_interface_sub, "ospfIfType", dstr);
- if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
- json_object_string_add(json_interface_sub, "vlinkPeer", inet_ntoa (*dest));
- else
- json_object_string_add(json_interface_sub, "localIfUsed", inet_ntoa (*dest));
- }
- else
- vty_out (vty, " %s %s,", dstr, inet_ntoa (*dest));
- }
- }
- if (use_json)
- {
- json_object_string_add(json_interface_sub, "area", ospf_area_desc_string (oi->area));
- if (OSPF_IF_PARAM(oi, mtu_ignore))
- json_object_boolean_true_add(json_interface_sub, "mtuMismatchDetect");
- json_object_string_add(json_interface_sub, "routerId", inet_ntoa (ospf->router_id));
- json_object_string_add(json_interface_sub, "networkType", ospf_network_type_str[oi->type]);
- json_object_int_add(json_interface_sub, "cost", oi->output_cost);
- json_object_int_add(json_interface_sub, "transmitDelayMsecs", 1000 / OSPF_IF_PARAM (oi,transmit_delay));
- json_object_string_add(json_interface_sub, "state", lookup_msg(ospf_ism_state_msg, oi->state, NULL));
- json_object_int_add(json_interface_sub, "priority", PRIORITY (oi));
- }
- else
- {
- vty_out (vty, " Area %s\n", ospf_area_desc_string (oi->area));
-
- vty_out (vty, " MTU mismatch detection: %s\n",
- OSPF_IF_PARAM(oi, mtu_ignore) ? "disabled" : "enabled");
-
- vty_out (vty, " Router ID %s, Network Type %s, Cost: %d\n",
- inet_ntoa (ospf->router_id), ospf_network_type_str[oi->type],
- oi->output_cost);
-
- vty_out (vty, " Transmit Delay is %d sec, State %s, Priority %d\n",
- OSPF_IF_PARAM (oi,transmit_delay), lookup_msg(ospf_ism_state_msg, oi->state, NULL),
- PRIORITY (oi));
- }
-
- /* Show DR information. */
- if (DR (oi).s_addr == 0)
- {
- if (!use_json)
- vty_out (vty, " No backup designated router on this network\n");
- }
- else
- {
- nbr = ospf_nbr_lookup_by_addr (oi->nbrs, &BDR (oi));
- if (nbr == NULL)
- {
- if (!use_json)
- vty_out (vty, " No backup designated router on this network\n");
- }
- else
- {
- if (use_json)
- {
- json_object_string_add(json_interface_sub, "bdrId", inet_ntoa (nbr->router_id));
- json_object_string_add(json_interface_sub, "bdrAddress", inet_ntoa (nbr->address.u.prefix4));
- }
- else
- {
- vty_out (vty, " Backup Designated Router (ID) %s,",
- inet_ntoa (nbr->router_id));
- vty_out (vty, " Interface Address %s\n",
- inet_ntoa (nbr->address.u.prefix4));
- }
- }
- }
-
- /* Next network-LSA sequence number we'll use, if we're elected DR */
- if (oi->params && ntohl (oi->params->network_lsa_seqnum) != OSPF_INITIAL_SEQUENCE_NUMBER)
- {
- if (use_json)
- json_object_int_add(json_interface_sub, "networkLsaSequence", ntohl (oi->params->network_lsa_seqnum));
- else
- vty_out (vty, " Saved Network-LSA sequence number 0x%x\n",
- ntohl (oi->params->network_lsa_seqnum));
- }
-
- if (use_json)
- {
- if (OI_MEMBER_CHECK(oi, MEMBER_ALLROUTERS)
- || OI_MEMBER_CHECK(oi, MEMBER_DROUTERS))
- {
- if (OI_MEMBER_CHECK(oi, MEMBER_ALLROUTERS))
- json_object_boolean_true_add(json_interface_sub, "mcastMemberOspfAllRouters");
- if (OI_MEMBER_CHECK(oi, MEMBER_DROUTERS))
- json_object_boolean_true_add(json_interface_sub, "mcastMemberOspfDesignatedRouters");
- }
- }
- else
- {
- vty_out (vty, " Multicast group memberships:");
- if (OI_MEMBER_CHECK(oi, MEMBER_ALLROUTERS)
- || OI_MEMBER_CHECK(oi, MEMBER_DROUTERS))
- {
- if (OI_MEMBER_CHECK(oi, MEMBER_ALLROUTERS))
- vty_out (vty, " OSPFAllRouters");
- if (OI_MEMBER_CHECK(oi, MEMBER_DROUTERS))
- vty_out (vty, " OSPFDesignatedRouters");
- }
- else
- vty_out (vty, " <None>");
- vty_out (vty, "\n");
- }
-
- if (use_json)
- {
- if (OSPF_IF_PARAM (oi, fast_hello) == 0)
- json_object_int_add(json_interface_sub, "timerMsecs", 1000 /OSPF_IF_PARAM (oi, v_hello));
- else
- json_object_int_add(json_interface_sub, "timerMsecs", 1000 / OSPF_IF_PARAM (oi, fast_hello));
- json_object_int_add(json_interface_sub, "timerDeadMsecs", 1000 / OSPF_IF_PARAM (oi, v_wait));
- json_object_int_add(json_interface_sub, "timerWaitMsecs", 1000 / OSPF_IF_PARAM (oi, v_wait));
- json_object_int_add(json_interface_sub, "timerRetransmit", 1000 / OSPF_IF_PARAM (oi, retransmit_interval));
- }
- else
- {
- vty_out (vty, " Timer intervals configured,");
- vty_out (vty, " Hello ");
- if (OSPF_IF_PARAM (oi, fast_hello) == 0)
- vty_out (vty, "%ds,", OSPF_IF_PARAM (oi, v_hello));
- else
- vty_out (vty, "%dms,", 1000 / OSPF_IF_PARAM (oi, fast_hello));
- vty_out (vty, " Dead %ds, Wait %ds, Retransmit %d\n",
- OSPF_IF_PARAM (oi, v_wait),
- OSPF_IF_PARAM (oi, v_wait),
- OSPF_IF_PARAM (oi, retransmit_interval));
- }
-
- if (OSPF_IF_PASSIVE_STATUS (oi) == OSPF_IF_ACTIVE)
- {
- char timebuf[OSPF_TIME_DUMP_SIZE];
- if (use_json)
- {
- long time_store = 0;
- if (oi->t_hello)
- time_store = monotime_until(&oi->t_hello->u.sands, NULL) / 1000LL;
- json_object_int_add(json_interface_sub, "timerHelloInMsecs", time_store);
- }
- else
- vty_out (vty, " Hello due in %s\n",
- ospf_timer_dump (oi->t_hello, timebuf, sizeof(timebuf)));
- }
- else /* passive-interface is set */
- {
- if (use_json)
- json_object_boolean_true_add(json_interface_sub, "timerPassiveIface");
- else
- vty_out (vty, " No Hellos (Passive interface)\n");
- }
-
- if (use_json)
- {
- json_object_int_add(json_interface_sub, "nbrCount", ospf_nbr_count (oi, 0));
- json_object_int_add(json_interface_sub, "nbrAdjacentCount", ospf_nbr_count (oi, NSM_Full));
- }
- else
- vty_out (vty, " Neighbor Count is %d, Adjacent neighbor count is %d\n",
- ospf_nbr_count (oi, 0), ospf_nbr_count (oi, NSM_Full));
- ospf_bfd_interface_show(vty, ifp, json_interface_sub, use_json);
- }
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
+ struct ospf_interface *oi = rn->info;
+
+ if (oi == NULL)
+ continue;
+
+ if (CHECK_FLAG(oi->connected->flags, ZEBRA_IFA_UNNUMBERED)) {
+ if (use_json)
+ json_object_boolean_true_add(json_interface_sub,
+ "ifUnnumbered");
+ else
+ vty_out(vty, " This interface is UNNUMBERED,");
+ } else {
+ /* Show OSPF interface information. */
+ if (use_json) {
+ json_object_string_add(
+ json_interface_sub, "ipAddress",
+ inet_ntoa(oi->address->u.prefix4));
+ json_object_int_add(json_interface_sub,
+ "ipAddressPrefixlen",
+ oi->address->prefixlen);
+ } else
+ vty_out(vty, " Internet Address %s/%d,",
+ inet_ntoa(oi->address->u.prefix4),
+ oi->address->prefixlen);
+
+ if (oi->connected->destination
+ || oi->type == OSPF_IFTYPE_VIRTUALLINK) {
+ struct in_addr *dest;
+ const char *dstr;
+
+ if (CONNECTED_PEER(oi->connected)
+ || oi->type == OSPF_IFTYPE_VIRTUALLINK)
+ dstr = "Peer";
+ else
+ dstr = "Broadcast";
+
+ /* For Vlinks, showing the peer address is
+ * probably more
+ * * * * * informative than the local
+ * interface that is being used
+ * * * * */
+ if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
+ dest = &oi->vl_data->peer_addr;
+ else
+ dest = &oi->connected->destination->u
+ .prefix4;
+
+ if (use_json) {
+ json_object_string_add(
+ json_interface_sub,
+ "ospfIfType", dstr);
+ if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
+ json_object_string_add(
+ json_interface_sub,
+ "vlinkPeer",
+ inet_ntoa(*dest));
+ else
+ json_object_string_add(
+ json_interface_sub,
+ "localIfUsed",
+ inet_ntoa(*dest));
+ } else
+ vty_out(vty, " %s %s,", dstr,
+ inet_ntoa(*dest));
+ }
+ }
+ if (use_json) {
+ json_object_string_add(json_interface_sub, "area",
+ ospf_area_desc_string(oi->area));
+ if (OSPF_IF_PARAM(oi, mtu_ignore))
+ json_object_boolean_true_add(
+ json_interface_sub,
+ "mtuMismatchDetect");
+ json_object_string_add(json_interface_sub, "routerId",
+ inet_ntoa(ospf->router_id));
+ json_object_string_add(json_interface_sub,
+ "networkType",
+ ospf_network_type_str[oi->type]);
+ json_object_int_add(json_interface_sub, "cost",
+ oi->output_cost);
+ json_object_int_add(
+ json_interface_sub, "transmitDelayMsecs",
+ 1000 / OSPF_IF_PARAM(oi, transmit_delay));
+ json_object_string_add(json_interface_sub, "state",
+ lookup_msg(ospf_ism_state_msg,
+ oi->state, NULL));
+ json_object_int_add(json_interface_sub, "priority",
+ PRIORITY(oi));
+ } else {
+ vty_out(vty, " Area %s\n",
+ ospf_area_desc_string(oi->area));
+
+ vty_out(vty, " MTU mismatch detection: %s\n",
+ OSPF_IF_PARAM(oi, mtu_ignore) ? "disabled"
+ : "enabled");
+
+ vty_out(vty,
+ " Router ID %s, Network Type %s, Cost: %d\n",
+ inet_ntoa(ospf->router_id),
+ ospf_network_type_str[oi->type],
+ oi->output_cost);
+
+ vty_out(vty,
+ " Transmit Delay is %d sec, State %s, Priority %d\n",
+ OSPF_IF_PARAM(oi, transmit_delay),
+ lookup_msg(ospf_ism_state_msg, oi->state, NULL),
+ PRIORITY(oi));
+ }
+
+ /* Show DR information. */
+ if (DR(oi).s_addr == 0) {
+ if (!use_json)
+ vty_out(vty,
+ " No backup designated router on this network\n");
+ } else {
+ nbr = ospf_nbr_lookup_by_addr(oi->nbrs, &BDR(oi));
+ if (nbr == NULL) {
+ if (!use_json)
+ vty_out(vty,
+ " No backup designated router on this network\n");
+ } else {
+ if (use_json) {
+ json_object_string_add(
+ json_interface_sub, "bdrId",
+ inet_ntoa(nbr->router_id));
+ json_object_string_add(
+ json_interface_sub,
+ "bdrAddress",
+ inet_ntoa(nbr->address.u
+ .prefix4));
+ } else {
+ vty_out(vty,
+ " Backup Designated Router (ID) %s,",
+ inet_ntoa(nbr->router_id));
+ vty_out(vty, " Interface Address %s\n",
+ inet_ntoa(nbr->address.u
+ .prefix4));
+ }
+ }
+ }
+
+ /* Next network-LSA sequence number we'll use, if we're elected
+ * DR */
+ if (oi->params
+ && ntohl(oi->params->network_lsa_seqnum)
+ != OSPF_INITIAL_SEQUENCE_NUMBER) {
+ if (use_json)
+ json_object_int_add(
+ json_interface_sub,
+ "networkLsaSequence",
+ ntohl(oi->params->network_lsa_seqnum));
+ else
+ vty_out(vty,
+ " Saved Network-LSA sequence number 0x%x\n",
+ ntohl(oi->params->network_lsa_seqnum));
+ }
+
+ if (use_json) {
+ if (OI_MEMBER_CHECK(oi, MEMBER_ALLROUTERS)
+ || OI_MEMBER_CHECK(oi, MEMBER_DROUTERS)) {
+ if (OI_MEMBER_CHECK(oi, MEMBER_ALLROUTERS))
+ json_object_boolean_true_add(
+ json_interface_sub,
+ "mcastMemberOspfAllRouters");
+ if (OI_MEMBER_CHECK(oi, MEMBER_DROUTERS))
+ json_object_boolean_true_add(
+ json_interface_sub,
+ "mcastMemberOspfDesignatedRouters");
+ }
+ } else {
+ vty_out(vty, " Multicast group memberships:");
+ if (OI_MEMBER_CHECK(oi, MEMBER_ALLROUTERS)
+ || OI_MEMBER_CHECK(oi, MEMBER_DROUTERS)) {
+ if (OI_MEMBER_CHECK(oi, MEMBER_ALLROUTERS))
+ vty_out(vty, " OSPFAllRouters");
+ if (OI_MEMBER_CHECK(oi, MEMBER_DROUTERS))
+ vty_out(vty, " OSPFDesignatedRouters");
+ } else
+ vty_out(vty, " <None>");
+ vty_out(vty, "\n");
+ }
+
+ if (use_json) {
+ if (OSPF_IF_PARAM(oi, fast_hello) == 0)
+ json_object_int_add(
+ json_interface_sub, "timerMsecs",
+ 1000 / OSPF_IF_PARAM(oi, v_hello));
+ else
+ json_object_int_add(
+ json_interface_sub, "timerMsecs",
+ 1000 / OSPF_IF_PARAM(oi, fast_hello));
+ json_object_int_add(json_interface_sub,
+ "timerDeadMsecs",
+ 1000 / OSPF_IF_PARAM(oi, v_wait));
+ json_object_int_add(json_interface_sub,
+ "timerWaitMsecs",
+ 1000 / OSPF_IF_PARAM(oi, v_wait));
+ json_object_int_add(
+ json_interface_sub, "timerRetransmit",
+ 1000 / OSPF_IF_PARAM(oi, retransmit_interval));
+ } else {
+ vty_out(vty, " Timer intervals configured,");
+ vty_out(vty, " Hello ");
+ if (OSPF_IF_PARAM(oi, fast_hello) == 0)
+ vty_out(vty, "%ds,",
+ OSPF_IF_PARAM(oi, v_hello));
+ else
+ vty_out(vty, "%dms,",
+ 1000 / OSPF_IF_PARAM(oi, fast_hello));
+ vty_out(vty, " Dead %ds, Wait %ds, Retransmit %d\n",
+ OSPF_IF_PARAM(oi, v_wait),
+ OSPF_IF_PARAM(oi, v_wait),
+ OSPF_IF_PARAM(oi, retransmit_interval));
+ }
+
+ if (OSPF_IF_PASSIVE_STATUS(oi) == OSPF_IF_ACTIVE) {
+ char timebuf[OSPF_TIME_DUMP_SIZE];
+ if (use_json) {
+ long time_store = 0;
+ if (oi->t_hello)
+ time_store =
+ monotime_until(
+ &oi->t_hello->u.sands,
+ NULL)
+ / 1000LL;
+ json_object_int_add(json_interface_sub,
+ "timerHelloInMsecs",
+ time_store);
+ } else
+ vty_out(vty, " Hello due in %s\n",
+ ospf_timer_dump(oi->t_hello, timebuf,
+ sizeof(timebuf)));
+ } else /* passive-interface is set */
+ {
+ if (use_json)
+ json_object_boolean_true_add(
+ json_interface_sub,
+ "timerPassiveIface");
+ else
+ vty_out(vty,
+ " No Hellos (Passive interface)\n");
+ }
+
+ if (use_json) {
+ json_object_int_add(json_interface_sub, "nbrCount",
+ ospf_nbr_count(oi, 0));
+ json_object_int_add(json_interface_sub,
+ "nbrAdjacentCount",
+ ospf_nbr_count(oi, NSM_Full));
+ } else
+ vty_out(vty,
+ " Neighbor Count is %d, Adjacent neighbor count is %d\n",
+ ospf_nbr_count(oi, 0),
+ ospf_nbr_count(oi, NSM_Full));
+ ospf_bfd_interface_show(vty, ifp, json_interface_sub, use_json);
+ }
}
-static int
-show_ip_ospf_interface_common (struct vty *vty, struct ospf *ospf, int argc,
- struct cmd_token **argv, int iface_argv, u_char use_json)
-{
- struct interface *ifp;
- struct listnode *node;
- json_object *json = NULL;
- json_object *json_interface_sub = NULL;
-
- if (use_json)
- {
- json = json_object_new_object();
- }
-
- if (ospf->instance)
- {
- if (use_json)
- json_object_int_add(json, "ospfInstance", ospf->instance);
- else
- vty_out (vty, "\nOSPF Instance: %d\n\n", ospf->instance);
- }
-
- if (argc == iface_argv)
- {
- /* Show All Interfaces.*/
- for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
- {
- if (ospf_oi_count(ifp))
- {
- if (use_json)
- json_interface_sub = json_object_new_object();
-
- show_ip_ospf_interface_sub (vty, ospf, ifp, json_interface_sub, use_json);
-
- if (use_json)
- json_object_object_add (json, ifp->name, json_interface_sub);
- }
- }
- }
- else
- {
- /* Interface name is specified. */
- if ((ifp = if_lookup_by_name (argv[iface_argv]->arg, VRF_DEFAULT)) == NULL)
- {
- if (use_json)
- json_object_boolean_true_add(json, "noSuchIface");
- else
- vty_out (vty, "No such interface name\n");
- }
- else
- {
- if (use_json)
- json_interface_sub = json_object_new_object();
-
- show_ip_ospf_interface_sub (vty, ospf, ifp, json_interface_sub, use_json);
-
- if (use_json)
- json_object_object_add(json, ifp->name, json_interface_sub);
- }
- }
-
- if (use_json)
- {
- vty_out (vty, "%s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
- json_object_free(json);
- }
- else
- vty_out (vty, "\n");
+static int show_ip_ospf_interface_common(struct vty *vty, struct ospf *ospf,
+ int argc, struct cmd_token **argv,
+ int iface_argv, u_char use_json)
+{
+ struct interface *ifp;
+ struct listnode *node;
+ json_object *json = NULL;
+ json_object *json_interface_sub = NULL;
- return CMD_SUCCESS;
+ if (use_json) {
+ json = json_object_new_object();
+ }
+
+ if (ospf->instance) {
+ if (use_json)
+ json_object_int_add(json, "ospfInstance",
+ ospf->instance);
+ else
+ vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);
+ }
+
+ if (argc == iface_argv) {
+ /* Show All Interfaces.*/
+ for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), node, ifp)) {
+ if (ospf_oi_count(ifp)) {
+ if (use_json)
+ json_interface_sub =
+ json_object_new_object();
+
+ show_ip_ospf_interface_sub(vty, ospf, ifp,
+ json_interface_sub,
+ use_json);
+
+ if (use_json)
+ json_object_object_add(
+ json, ifp->name,
+ json_interface_sub);
+ }
+ }
+ } else {
+ /* Interface name is specified. */
+ if ((ifp = if_lookup_by_name(argv[iface_argv]->arg,
+ VRF_DEFAULT))
+ == NULL) {
+ if (use_json)
+ json_object_boolean_true_add(json,
+ "noSuchIface");
+ else
+ vty_out(vty, "No such interface name\n");
+ } else {
+ if (use_json)
+ json_interface_sub = json_object_new_object();
+
+ show_ip_ospf_interface_sub(
+ vty, ospf, ifp, json_interface_sub, use_json);
+
+ if (use_json)
+ json_object_object_add(json, ifp->name,
+ json_interface_sub);
+ }
+ }
+
+ if (use_json) {
+ vty_out(vty, "%s\n", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
+ json_object_free(json);
+ } else
+ vty_out(vty, "\n");
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf_interface,
@@ -3567,16 +3625,16 @@ DEFUN (show_ip_ospf_interface,
"Interface name\n"
JSON_STR)
{
- struct ospf *ospf;
- u_char uj = use_json(argc, argv);
+ struct ospf *ospf;
+ u_char uj = use_json(argc, argv);
- if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
+ return CMD_SUCCESS;
- if (uj)
- argc--;
+ if (uj)
+ argc--;
- return show_ip_ospf_interface_common(vty, ospf, argc, argv, 4, uj);
+ return show_ip_ospf_interface_common(vty, ospf, argc, argv, 4, uj);
}
DEFUN (show_ip_ospf_instance_interface,
@@ -3590,129 +3648,182 @@ DEFUN (show_ip_ospf_instance_interface,
"Interface name\n"
JSON_STR)
{
- int idx_number = 3;
- struct ospf *ospf;
- u_short instance = 0;
- u_char uj = use_json(argc, argv);
+ int idx_number = 3;
+ struct ospf *ospf;
+ u_short instance = 0;
+ u_char uj = use_json(argc, argv);
+
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ if ((ospf = ospf_lookup_instance(instance)) == NULL
+ || !ospf->oi_running)
+ return CMD_SUCCESS;
+
+ if (uj)
+ argc--;
+
+ return show_ip_ospf_interface_common(vty, ospf, argc, argv, 5, uj);
+}
+
+static void show_ip_ospf_neighbour_header(struct vty *vty)
+{
+ vty_out(vty, "\n%-15s %3s %-15s %9s %-15s %-20s %5s %5s %5s\n",
+ "Neighbor ID", "Pri", "State", "Dead Time", "Address",
+ "Interface", "RXmtL", "RqstL", "DBsmL");
+}
+
+static void show_ip_ospf_neighbor_sub(struct vty *vty,
+ struct ospf_interface *oi,
+ json_object *json, u_char use_json)
+{
+ struct route_node *rn;
+ struct ospf_neighbor *nbr;
+ char msgbuf[16];
+ char timebuf[OSPF_TIME_DUMP_SIZE];
+ json_object *json_neighbor = NULL;
+
+ for (rn = route_top(oi->nbrs); rn; rn = route_next(rn)) {
+ if ((nbr = rn->info)) {
+ /* Do not show myself. */
+ if (nbr != oi->nbr_self) {
+ /* Down state is not shown. */
+ if (nbr->state != NSM_Down) {
+ if (use_json) {
+ json_neighbor =
+ json_object_new_object();
+ ospf_nbr_state_message(
+ nbr, msgbuf, 16);
+
+ long time_store;
+
+ time_store =
+ monotime_until(
+ &nbr->t_inactivity
+ ->u
+ .sands,
+ NULL)
+ / 1000LL;
+
+ json_object_int_add(
+ json_neighbor,
+ "priority",
+ nbr->priority);
+ json_object_string_add(
+ json_neighbor, "state",
+ msgbuf);
+ json_object_int_add(
+ json_neighbor,
+ "deadTimeMsecs",
+ time_store);
+ json_object_string_add(
+ json_neighbor,
+ "address",
+ inet_ntoa(nbr->src));
+ json_object_string_add(
+ json_neighbor,
+ "ifaceName",
+ IF_NAME(oi));
+ json_object_int_add(
+ json_neighbor,
+ "retransmitCounter",
+ ospf_ls_retransmit_count(
+ nbr));
+ json_object_int_add(
+ json_neighbor,
+ "requestCounter",
+ ospf_ls_request_count(
+ nbr));
+ json_object_int_add(
+ json_neighbor,
+ "dbSummaryCounter",
+ ospf_db_summary_count(
+ nbr));
+ if (nbr->state == NSM_Attempt
+ && nbr->router_id.s_addr
+ == 0)
+ json_object_object_add(
+ json,
+ "neighbor",
+ json_neighbor);
+ else
+ json_object_object_add(
+ json,
+ inet_ntoa(
+ nbr->router_id),
+ json_neighbor);
+ } else {
+ ospf_nbr_state_message(
+ nbr, msgbuf, 16);
+
+ if (nbr->state == NSM_Attempt
+ && nbr->router_id.s_addr
+ == 0)
+ vty_out(vty,
+ "%-15s %3d %-15s ",
+ "-",
+ nbr->priority,
+ msgbuf);
+ else
+ vty_out(vty,
+ "%-15s %3d %-15s ",
+ inet_ntoa(
+ nbr->router_id),
+ nbr->priority,
+ msgbuf);
+
+ vty_out(vty, "%9s ",
+ ospf_timer_dump(
+ nbr->t_inactivity,
+ timebuf,
+ sizeof(timebuf)));
+ vty_out(vty, "%-15s ",
+ inet_ntoa(nbr->src));
+ vty_out(vty,
+ "%-20s %5ld %5ld %5d\n",
+ IF_NAME(oi),
+ ospf_ls_retransmit_count(
+ nbr),
+ ospf_ls_request_count(
+ nbr),
+ ospf_db_summary_count(
+ nbr));
+ }
+ }
+ }
+ }
+ }
+}
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
- if ((ospf = ospf_lookup_instance (instance)) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+static int show_ip_ospf_neighbor_common(struct vty *vty, struct ospf *ospf,
+ u_char use_json)
+{
+ struct ospf_interface *oi;
+ struct listnode *node;
+ json_object *json = NULL;
- if (uj)
- argc--;
-
- return show_ip_ospf_interface_common(vty, ospf, argc, argv, 5, uj);
-}
-
-static void
-show_ip_ospf_neighbour_header (struct vty *vty)
-{
- vty_out (vty, "\n%-15s %3s %-15s %9s %-15s %-20s %5s %5s %5s\n",
- "Neighbor ID", "Pri", "State", "Dead Time",
- "Address", "Interface", "RXmtL", "RqstL", "DBsmL");
-}
-
-static void
-show_ip_ospf_neighbor_sub (struct vty *vty, struct ospf_interface *oi, json_object *json, u_char use_json)
-{
- struct route_node *rn;
- struct ospf_neighbor *nbr;
- char msgbuf[16];
- char timebuf[OSPF_TIME_DUMP_SIZE];
- json_object *json_neighbor = NULL;
-
- for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
- {
- if ((nbr = rn->info))
- {
- /* Do not show myself. */
- if (nbr != oi->nbr_self)
- {
- /* Down state is not shown. */
- if (nbr->state != NSM_Down)
- {
- if (use_json)
- {
- json_neighbor = json_object_new_object();
- ospf_nbr_state_message (nbr, msgbuf, 16);
-
- long time_store;
-
- time_store = monotime_until(&nbr->t_inactivity->u.sands, NULL) / 1000LL;
-
- json_object_int_add (json_neighbor, "priority", nbr->priority);
- json_object_string_add (json_neighbor, "state", msgbuf);
- json_object_int_add (json_neighbor, "deadTimeMsecs", time_store);
- json_object_string_add (json_neighbor, "address", inet_ntoa (nbr->src));
- json_object_string_add (json_neighbor, "ifaceName", IF_NAME (oi));
- json_object_int_add (json_neighbor, "retransmitCounter", ospf_ls_retransmit_count (nbr));
- json_object_int_add (json_neighbor, "requestCounter", ospf_ls_request_count (nbr));
- json_object_int_add (json_neighbor, "dbSummaryCounter", ospf_db_summary_count (nbr));
- if (nbr->state == NSM_Attempt && nbr->router_id.s_addr == 0)
- json_object_object_add(json, "neighbor", json_neighbor);
- else
- json_object_object_add(json, inet_ntoa (nbr->router_id), json_neighbor);
- }
- else
- {
- ospf_nbr_state_message (nbr, msgbuf, 16);
-
- if (nbr->state == NSM_Attempt && nbr->router_id.s_addr == 0)
- vty_out (vty, "%-15s %3d %-15s ",
- "-", nbr->priority,
- msgbuf);
- else
- vty_out (vty, "%-15s %3d %-15s ",
- inet_ntoa (nbr->router_id), nbr->priority,
- msgbuf);
-
- vty_out (vty, "%9s ",
- ospf_timer_dump (nbr->t_inactivity, timebuf,
- sizeof(timebuf)));
- vty_out (vty, "%-15s ", inet_ntoa (nbr->src));
- vty_out (vty, "%-20s %5ld %5ld %5d\n",
- IF_NAME (oi), ospf_ls_retransmit_count (nbr),
- ospf_ls_request_count (nbr), ospf_db_summary_count (nbr));
- }
- }
- }
- }
- }
-}
+ if (use_json)
+ json = json_object_new_object();
+ else
+ show_ip_ospf_neighbour_header(vty);
+
+ if (ospf->instance) {
+ if (use_json)
+ json_object_int_add(json, "ospfInstance",
+ ospf->instance);
+ else
+ vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);
+ }
-static int
-show_ip_ospf_neighbor_common (struct vty *vty, struct ospf *ospf, u_char use_json)
-{
- struct ospf_interface *oi;
- struct listnode *node;
- json_object *json = NULL;
-
- if (use_json)
- json = json_object_new_object();
- else
- show_ip_ospf_neighbour_header (vty);
-
- if (ospf->instance)
- {
- if (use_json)
- json_object_int_add(json, "ospfInstance", ospf->instance);
- else
- vty_out (vty, "\nOSPF Instance: %d\n\n", ospf->instance);
- }
-
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
- show_ip_ospf_neighbor_sub (vty, oi, json, use_json);
-
- if (use_json)
- {
- vty_out (vty, "%s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
- json_object_free(json);
- }
- else
- vty_out (vty, "\n");
+ for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi))
+ show_ip_ospf_neighbor_sub(vty, oi, json, use_json);
- return CMD_SUCCESS;
+ if (use_json) {
+ vty_out(vty, "%s\n", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
+ json_object_free(json);
+ } else
+ vty_out(vty, "\n");
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf_neighbor,
@@ -3724,13 +3835,13 @@ DEFUN (show_ip_ospf_neighbor,
"Neighbor list\n"
JSON_STR)
{
- struct ospf *ospf;
- u_char uj = use_json(argc, argv);
+ struct ospf *ospf;
+ u_char uj = use_json(argc, argv);
- if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_common(vty, ospf, uj);
+ return show_ip_ospf_neighbor_common(vty, ospf, uj);
}
@@ -3744,86 +3855,95 @@ DEFUN (show_ip_ospf_instance_neighbor,
"Neighbor list\n"
JSON_STR)
{
- int idx_number = 3;
- struct ospf *ospf;
- u_short instance = 0;
- u_char uj = use_json(argc, argv);
+ int idx_number = 3;
+ struct ospf *ospf;
+ u_short instance = 0;
+ u_char uj = use_json(argc, argv);
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
- if ((ospf = ospf_lookup_instance(instance)) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ if ((ospf = ospf_lookup_instance(instance)) == NULL
+ || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_common(vty, ospf, uj);
+ return show_ip_ospf_neighbor_common(vty, ospf, uj);
}
-static int
-show_ip_ospf_neighbor_all_common (struct vty *vty, struct ospf *ospf, u_char use_json)
-{
- struct listnode *node;
- struct ospf_interface *oi;
- json_object *json = NULL;
- json_object *json_neighbor_sub = NULL;
-
- if (use_json)
- {
- json = json_object_new_object();
- json_neighbor_sub = json_object_new_object();
- }
- else
- show_ip_ospf_neighbour_header (vty);
-
- if (ospf->instance)
- {
- if (use_json)
- json_object_int_add(json, "ospfInstance", ospf->instance);
- else
- vty_out (vty, "\nOSPF Instance: %d\n\n", ospf->instance);
- }
-
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
- {
- struct listnode *nbr_node;
- struct ospf_nbr_nbma *nbr_nbma;
-
- show_ip_ospf_neighbor_sub (vty, oi, json, use_json);
-
- /* print Down neighbor status */
- for (ALL_LIST_ELEMENTS_RO (oi->nbr_nbma, nbr_node, nbr_nbma))
- {
- if (nbr_nbma->nbr == NULL
- || nbr_nbma->nbr->state == NSM_Down)
- {
- if (use_json)
- {
- json_object_int_add (json_neighbor_sub, "nbrNbmaPriority", nbr_nbma->priority);
- json_object_boolean_true_add (json_neighbor_sub, "nbrNbmaDown");
- json_object_string_add (json_neighbor_sub, "nbrNbmaIfaceName", IF_NAME (oi));
- json_object_int_add (json_neighbor_sub, "nbrNbmaRetransmitCounter", 0);
- json_object_int_add (json_neighbor_sub, "nbrNbmaRequestCounter", 0);
- json_object_int_add (json_neighbor_sub, "nbrNbmaDbSummaryCounter", 0);
- json_object_object_add(json, inet_ntoa (nbr_nbma->addr), json_neighbor_sub);
- }
- else
- {
- vty_out (vty, "%-15s %3d %-15s %9s ",
- "-", nbr_nbma->priority, "Down", "-");
- vty_out (vty, "%-15s %-20s %5d %5d %5d\n",
- inet_ntoa (nbr_nbma->addr), IF_NAME (oi),
- 0, 0, 0);
- }
- }
- }
- }
-
- if (use_json)
- {
- vty_out (vty, "%s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
- json_object_free(json);
- }
- else
- vty_out (vty, "\n");
+static int show_ip_ospf_neighbor_all_common(struct vty *vty, struct ospf *ospf,
+ u_char use_json)
+{
+ struct listnode *node;
+ struct ospf_interface *oi;
+ json_object *json = NULL;
+ json_object *json_neighbor_sub = NULL;
- return CMD_SUCCESS;
+ if (use_json) {
+ json = json_object_new_object();
+ json_neighbor_sub = json_object_new_object();
+ } else
+ show_ip_ospf_neighbour_header(vty);
+
+ if (ospf->instance) {
+ if (use_json)
+ json_object_int_add(json, "ospfInstance",
+ ospf->instance);
+ else
+ vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);
+ }
+
+ for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi)) {
+ struct listnode *nbr_node;
+ struct ospf_nbr_nbma *nbr_nbma;
+
+ show_ip_ospf_neighbor_sub(vty, oi, json, use_json);
+
+ /* print Down neighbor status */
+ for (ALL_LIST_ELEMENTS_RO(oi->nbr_nbma, nbr_node, nbr_nbma)) {
+ if (nbr_nbma->nbr == NULL
+ || nbr_nbma->nbr->state == NSM_Down) {
+ if (use_json) {
+ json_object_int_add(json_neighbor_sub,
+ "nbrNbmaPriority",
+ nbr_nbma->priority);
+ json_object_boolean_true_add(
+ json_neighbor_sub,
+ "nbrNbmaDown");
+ json_object_string_add(
+ json_neighbor_sub,
+ "nbrNbmaIfaceName",
+ IF_NAME(oi));
+ json_object_int_add(
+ json_neighbor_sub,
+ "nbrNbmaRetransmitCounter", 0);
+ json_object_int_add(
+ json_neighbor_sub,
+ "nbrNbmaRequestCounter", 0);
+ json_object_int_add(
+ json_neighbor_sub,
+ "nbrNbmaDbSummaryCounter", 0);
+ json_object_object_add(
+ json, inet_ntoa(nbr_nbma->addr),
+ json_neighbor_sub);
+ } else {
+ vty_out(vty, "%-15s %3d %-15s %9s ",
+ "-", nbr_nbma->priority, "Down",
+ "-");
+ vty_out(vty,
+ "%-15s %-20s %5d %5d %5d\n",
+ inet_ntoa(nbr_nbma->addr),
+ IF_NAME(oi), 0, 0, 0);
+ }
+ }
+ }
+ }
+
+ if (use_json) {
+ vty_out(vty, "%s\n", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
+ json_object_free(json);
+ } else
+ vty_out(vty, "\n");
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf_neighbor_all,
@@ -3836,13 +3956,13 @@ DEFUN (show_ip_ospf_neighbor_all,
"include down status neighbor\n"
JSON_STR)
{
- struct ospf *ospf;
- u_char uj = use_json(argc, argv);
+ struct ospf *ospf;
+ u_char uj = use_json(argc, argv);
- if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_all_common(vty, ospf, uj);
+ return show_ip_ospf_neighbor_all_common(vty, ospf, uj);
}
DEFUN (show_ip_ospf_instance_neighbor_all,
@@ -3856,68 +3976,67 @@ DEFUN (show_ip_ospf_instance_neighbor_all,
"include down status neighbor\n"
JSON_STR)
{
- int idx_number = 3;
- struct ospf *ospf;
- u_short instance = 0;
- u_char uj = use_json(argc, argv);
+ int idx_number = 3;
+ struct ospf *ospf;
+ u_short instance = 0;
+ u_char uj = use_json(argc, argv);
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
- if ((ospf = ospf_lookup_instance(instance)) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ if ((ospf = ospf_lookup_instance(instance)) == NULL
+ || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_all_common(vty, ospf, uj);
+ return show_ip_ospf_neighbor_all_common(vty, ospf, uj);
}
-static int
-show_ip_ospf_neighbor_int_common (struct vty *vty, struct ospf *ospf, int arg_base,
- struct cmd_token **argv, u_char use_json)
-{
- struct interface *ifp;
- struct route_node *rn;
- json_object *json = NULL;
-
- if (use_json)
- json = json_object_new_object();
- else
- show_ip_ospf_neighbour_header (vty);
-
- if (ospf->instance)
- {
- if (use_json)
- json_object_int_add(json, "ospfInstance", ospf->instance);
- else
- vty_out (vty, "\nOSPF Instance: %d\n\n", ospf->instance);
- }
-
- ifp = if_lookup_by_name (argv[arg_base]->arg, VRF_DEFAULT);
- if (!ifp)
- {
- if (use_json)
- json_object_boolean_true_add(json, "noSuchIface");
- else
- vty_out (vty, "No such interface.\n");
- return CMD_WARNING;
- }
-
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
-
- if (oi == NULL)
- continue;
-
- show_ip_ospf_neighbor_sub (vty, oi, json, use_json);
- }
-
- if (use_json)
- {
- vty_out (vty, "%s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
- json_object_free(json);
- }
- else
- vty_out (vty, "\n");
+static int show_ip_ospf_neighbor_int_common(struct vty *vty, struct ospf *ospf,
+ int arg_base,
+ struct cmd_token **argv,
+ u_char use_json)
+{
+ struct interface *ifp;
+ struct route_node *rn;
+ json_object *json = NULL;
- return CMD_SUCCESS;
+ if (use_json)
+ json = json_object_new_object();
+ else
+ show_ip_ospf_neighbour_header(vty);
+
+ if (ospf->instance) {
+ if (use_json)
+ json_object_int_add(json, "ospfInstance",
+ ospf->instance);
+ else
+ vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);
+ }
+
+ ifp = if_lookup_by_name(argv[arg_base]->arg, VRF_DEFAULT);
+ if (!ifp) {
+ if (use_json)
+ json_object_boolean_true_add(json, "noSuchIface");
+ else
+ vty_out(vty, "No such interface.\n");
+ return CMD_WARNING;
+ }
+
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
+ struct ospf_interface *oi = rn->info;
+
+ if (oi == NULL)
+ continue;
+
+ show_ip_ospf_neighbor_sub(vty, oi, json, use_json);
+ }
+
+ if (use_json) {
+ vty_out(vty, "%s\n", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
+ json_object_free(json);
+ } else
+ vty_out(vty, "\n");
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf_neighbor_int,
@@ -3930,13 +4049,13 @@ DEFUN (show_ip_ospf_neighbor_int,
"Interface name\n"
JSON_STR)
{
- struct ospf *ospf;
- u_char uj = use_json(argc, argv);
+ struct ospf *ospf;
+ u_char uj = use_json(argc, argv);
- if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_int_common(vty, ospf, 0, argv, uj);
+ return show_ip_ospf_neighbor_int_common(vty, ospf, 0, argv, uj);
}
DEFUN (show_ip_ospf_instance_neighbor_int,
@@ -3950,340 +4069,357 @@ DEFUN (show_ip_ospf_instance_neighbor_int,
"Interface name\n"
JSON_STR)
{
- int idx_number = 3;
- struct ospf *ospf;
- u_short instance = 0;
- u_char uj = use_json(argc, argv);
+ int idx_number = 3;
+ struct ospf *ospf;
+ u_short instance = 0;
+ u_char uj = use_json(argc, argv);
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
- if ((ospf = ospf_lookup_instance(instance)) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ if ((ospf = ospf_lookup_instance(instance)) == NULL
+ || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_int_common(vty, ospf, 1, argv, uj);
-}
-
-static void
-show_ip_ospf_nbr_nbma_detail_sub (struct vty *vty, struct ospf_interface *oi, struct ospf_nbr_nbma *nbr_nbma,
- u_char use_json, json_object *json)
-{
- char timebuf[OSPF_TIME_DUMP_SIZE];
- json_object *json_sub = NULL;
-
- if (use_json)
- json_sub = json_object_new_object();
- else /* Show neighbor ID. */
- vty_out (vty, " Neighbor %s,", "-");
-
- /* Show interface address. */
- if (use_json)
- json_object_string_add(json_sub, "ifaceAddress", inet_ntoa (nbr_nbma->addr));
- else
- vty_out (vty, " interface address %s\n",
- inet_ntoa (nbr_nbma->addr));
-
- /* Show Area ID. */
- if (use_json)
- {
- json_object_string_add(json_sub, "areaId", ospf_area_desc_string (oi->area));
- json_object_string_add(json_sub, "iface", IF_NAME (oi));
- }
- else
- vty_out (vty, " In the area %s via interface %s\n",
- ospf_area_desc_string (oi->area), IF_NAME (oi));
-
- /* Show neighbor priority and state. */
- if (use_json)
- {
- json_object_int_add(json_sub, "nbrPriority", nbr_nbma->priority);
- json_object_string_add(json_sub, "nbrState", "down");
- }
- else
- vty_out (vty, " Neighbor priority is %d, State is %s,",
- nbr_nbma->priority, "Down");
-
- /* Show state changes. */
- if (use_json)
- json_object_int_add(json_sub, "stateChangeCounter", nbr_nbma->state_change);
- else
- vty_out (vty, " %d state changes\n", nbr_nbma->state_change);
-
- /* Show PollInterval */
- if (use_json)
- json_object_int_add(json_sub, "pollInterval", nbr_nbma->v_poll);
- else
- vty_out (vty, " Poll interval %d\n", nbr_nbma->v_poll);
-
- /* Show poll-interval timer. */
- if (use_json)
- {
- long time_store;
- time_store = monotime_until(&nbr_nbma->t_poll->u.sands, NULL) / 1000LL;
- json_object_int_add(json_sub, "pollIntervalTimerDueMsec", time_store);
- }
- else
- vty_out (vty, " Poll timer due in %s\n",
- ospf_timer_dump (nbr_nbma->t_poll, timebuf, sizeof(timebuf)));
-
- /* Show poll-interval timer thread. */
- if (use_json)
- {
- if (nbr_nbma->t_poll != NULL)
- json_object_string_add(json_sub, "pollIntervalTimerThread", "on");
- }
- else
- vty_out (vty, " Thread Poll Timer %s\n",
- nbr_nbma->t_poll != NULL ? "on" : "off");
-
- if (use_json)
- json_object_object_add(json, "noNbrId", json_sub);
-}
-
-static void
-show_ip_ospf_neighbor_detail_sub (struct vty *vty, struct ospf_interface *oi,
- struct ospf_neighbor *nbr, u_char use_json, json_object *json)
-{
- char timebuf[OSPF_TIME_DUMP_SIZE];
- json_object *json_sub = NULL;
-
- if (use_json)
- json_sub = json_object_new_object();
- else
- {
- /* Show neighbor ID. */
- if (nbr->state == NSM_Attempt && nbr->router_id.s_addr == 0)
- vty_out (vty, " Neighbor %s,", "-");
- else
- vty_out (vty, " Neighbor %s,", inet_ntoa (nbr->router_id));
- }
-
- /* Show interface address. */
- if (use_json)
- json_object_string_add(json_sub, "ifaceAddress", inet_ntoa (nbr->address.u.prefix4));
- else
- vty_out (vty, " interface address %s\n",
- inet_ntoa (nbr->address.u.prefix4));
-
- /* Show Area ID. */
- if (use_json)
- {
- json_object_string_add(json_sub, "areaId", ospf_area_desc_string (oi->area));
- json_object_string_add(json_sub, "ifaceName", oi->ifp->name);
- }
- else
- vty_out (vty, " In the area %s via interface %s\n",
- ospf_area_desc_string (oi->area), oi->ifp->name);
-
- /* Show neighbor priority and state. */
- if (use_json)
- {
- json_object_int_add(json_sub, "nbrPriority", nbr->priority);
- json_object_string_add(json_sub, "nbrState", lookup_msg(ospf_nsm_state_msg, nbr->state, NULL));
- }
- else
- vty_out (vty, " Neighbor priority is %d, State is %s,",
- nbr->priority, lookup_msg(ospf_nsm_state_msg, nbr->state, NULL));
-
- /* Show state changes. */
- if (use_json)
- json_object_int_add(json_sub, "stateChangeCounter", nbr->state_change);
- else
- vty_out (vty, " %d state changes\n", nbr->state_change);
-
- if (nbr->ts_last_progress.tv_sec || nbr->ts_last_progress.tv_usec)
- {
- struct timeval res;
- long time_store;
-
- time_store = monotime_since(&nbr->ts_last_progress, &res) / 1000LL;
- if (use_json)
- {
- json_object_int_add(json_sub, "lastPrgrsvChangeMsec", time_store);
- }
- else
- {
- vty_out (vty, " Most recent state change statistics:\n");
- vty_out (vty, " Progressive change %s ago\n",
- ospf_timeval_dump (&res, timebuf, sizeof(timebuf)));
- }
- }
-
- if (nbr->ts_last_regress.tv_sec || nbr->ts_last_regress.tv_usec)
- {
- struct timeval res;
- long time_store;
-
- time_store = monotime_since(&nbr->ts_last_regress, &res) / 1000LL;
- if (use_json)
- {
- json_object_int_add(json_sub, "lastRegressiveChangeMsec", time_store);
- if (nbr->last_regress_str)
- json_object_string_add(json_sub, "lastRegressiveChangeReason", nbr->last_regress_str);
- }
- else
- {
- vty_out (vty, " Regressive change %s ago, due to %s\n",
- ospf_timeval_dump (&res, timebuf, sizeof(timebuf)),
- (nbr->last_regress_str ? nbr->last_regress_str : "??"));
- }
- }
-
- /* Show Designated Rotuer ID. */
- if (use_json)
- json_object_string_add(json_sub, "routerDesignatedId", inet_ntoa (nbr->d_router));
- else
- vty_out (vty, " DR is %s,", inet_ntoa (nbr->d_router));
-
- /* Show Backup Designated Rotuer ID. */
- if (use_json)
- json_object_string_add(json_sub, "routerDesignatedBackupId", inet_ntoa (nbr->bd_router));
- else
- vty_out (vty, " BDR is %s\n", inet_ntoa (nbr->bd_router));
-
- /* Show options. */
- if (use_json)
- {
- json_object_int_add(json_sub, "optionsCounter", nbr->options);
- json_object_string_add(json_sub, "optionsList", ospf_options_dump (nbr->options));
- }
- else
- vty_out (vty, " Options %d %s\n", nbr->options,
- ospf_options_dump (nbr->options));
-
- /* Show Router Dead interval timer. */
- if (use_json)
- {
- if (nbr->t_inactivity)
- {
- long time_store;
- time_store = monotime_until(&nbr->t_inactivity->u.sands, NULL) / 1000LL;
- json_object_int_add(json_sub, "routerDeadIntervalTimerDueMsec", time_store);
- }
- else
- json_object_int_add(json_sub, "routerDeadIntervalTimerDueMsec", -1);
- }
- else
- vty_out (vty, " Dead timer due in %s\n",
- ospf_timer_dump (nbr->t_inactivity, timebuf, sizeof (timebuf)));
-
- /* Show Database Summary list. */
- if (use_json)
- json_object_int_add(json_sub, "databaseSummaryListCounter", ospf_db_summary_count (nbr));
- else
- vty_out (vty, " Database Summary List %d\n",
- ospf_db_summary_count (nbr));
-
- /* Show Link State Request list. */
- if (use_json)
- json_object_int_add(json_sub, "linkStateRequestListCounter", ospf_ls_request_count (nbr));
- else
- vty_out (vty, " Link State Request List %ld\n",
- ospf_ls_request_count (nbr));
-
- /* Show Link State Retransmission list. */
- if (use_json)
- json_object_int_add(json_sub, "linkStateRetransmissionListCounter", ospf_ls_retransmit_count (nbr));
- else
- vty_out (vty, " Link State Retransmission List %ld\n",
- ospf_ls_retransmit_count (nbr));
-
- /* Show inactivity timer thread. */
- if (use_json)
- {
- if (nbr->t_inactivity != NULL)
- json_object_string_add(json_sub, "threadInactivityTimer", "on");
- }
- else
- vty_out (vty, " Thread Inactivity Timer %s\n",
- nbr->t_inactivity != NULL ? "on" : "off");
-
- /* Show Database Description retransmission thread. */
- if (use_json)
- {
- if (nbr->t_db_desc != NULL)
- json_object_string_add(json_sub, "threadDatabaseDescriptionRetransmission", "on");
- }
- else
- vty_out (vty, " Thread Database Description Retransmision %s\n",
- nbr->t_db_desc != NULL ? "on" : "off");
-
- /* Show Link State Request Retransmission thread. */
- if (use_json)
- {
- if (nbr->t_ls_req != NULL)
- json_object_string_add(json_sub, "threadLinkStateRequestRetransmission", "on");
- }
- else
- vty_out (vty, " Thread Link State Request Retransmission %s\n",
- nbr->t_ls_req != NULL ? "on" : "off");
-
- /* Show Link State Update Retransmission thread. */
- if (use_json)
- {
- if (nbr->t_ls_upd != NULL)
- json_object_string_add(json_sub, "threadLinkStateUpdateRetransmission", "on");
- }
- else
- vty_out (vty, " Thread Link State Update Retransmission %s\n\n",
- nbr->t_ls_upd != NULL ? "on" : "off");
-
- if (use_json)
- {
- if (nbr->state == NSM_Attempt && nbr->router_id.s_addr == 0)
- json_object_object_add(json, "noNbrId", json_sub);
- else
- json_object_object_add(json, inet_ntoa (nbr->router_id), json_sub);
- }
-
- ospf_bfd_show_info(vty, nbr->bfd_info, json, use_json, 0);
+ return show_ip_ospf_neighbor_int_common(vty, ospf, 1, argv, uj);
}
-static int
-show_ip_ospf_neighbor_id_common (struct vty *vty, struct ospf *ospf,
- int arg_base, struct cmd_token **argv, u_char use_json)
-{
- struct listnode *node;
- struct ospf_neighbor *nbr;
- struct ospf_interface *oi;
- struct in_addr router_id;
- int ret;
- json_object *json = NULL;
-
- if (use_json)
- json = json_object_new_object();
-
- if (ospf->instance)
- {
- if (use_json)
- json_object_int_add(json, "ospfInstance", ospf->instance);
- else
- vty_out (vty, "\nOSPF Instance: %d\n\n", ospf->instance);
- }
-
- ret = inet_aton (argv[arg_base]->arg, &router_id);
- if (!ret)
- {
- if (!use_json)
- vty_out (vty, "Please specify Neighbor ID by A.B.C.D\n");
- return CMD_WARNING;
- }
-
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
- {
- if ((nbr = ospf_nbr_lookup_by_routerid (oi->nbrs, &router_id)))
- {
- show_ip_ospf_neighbor_detail_sub (vty, oi, nbr, use_json, json);
- }
- }
-
- if (use_json)
- {
- vty_out (vty, "%s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
- json_object_free(json);
- }
- else
- vty_out (vty, "\n");
+static void show_ip_ospf_nbr_nbma_detail_sub(struct vty *vty,
+ struct ospf_interface *oi,
+ struct ospf_nbr_nbma *nbr_nbma,
+ u_char use_json, json_object *json)
+{
+ char timebuf[OSPF_TIME_DUMP_SIZE];
+ json_object *json_sub = NULL;
- return CMD_SUCCESS;
+ if (use_json)
+ json_sub = json_object_new_object();
+ else /* Show neighbor ID. */
+ vty_out(vty, " Neighbor %s,", "-");
+
+ /* Show interface address. */
+ if (use_json)
+ json_object_string_add(json_sub, "ifaceAddress",
+ inet_ntoa(nbr_nbma->addr));
+ else
+ vty_out(vty, " interface address %s\n",
+ inet_ntoa(nbr_nbma->addr));
+
+ /* Show Area ID. */
+ if (use_json) {
+ json_object_string_add(json_sub, "areaId",
+ ospf_area_desc_string(oi->area));
+ json_object_string_add(json_sub, "iface", IF_NAME(oi));
+ } else
+ vty_out(vty, " In the area %s via interface %s\n",
+ ospf_area_desc_string(oi->area), IF_NAME(oi));
+
+ /* Show neighbor priority and state. */
+ if (use_json) {
+ json_object_int_add(json_sub, "nbrPriority",
+ nbr_nbma->priority);
+ json_object_string_add(json_sub, "nbrState", "down");
+ } else
+ vty_out(vty, " Neighbor priority is %d, State is %s,",
+ nbr_nbma->priority, "Down");
+
+ /* Show state changes. */
+ if (use_json)
+ json_object_int_add(json_sub, "stateChangeCounter",
+ nbr_nbma->state_change);
+ else
+ vty_out(vty, " %d state changes\n", nbr_nbma->state_change);
+
+ /* Show PollInterval */
+ if (use_json)
+ json_object_int_add(json_sub, "pollInterval", nbr_nbma->v_poll);
+ else
+ vty_out(vty, " Poll interval %d\n", nbr_nbma->v_poll);
+
+ /* Show poll-interval timer. */
+ if (use_json) {
+ long time_store;
+ time_store = monotime_until(&nbr_nbma->t_poll->u.sands, NULL)
+ / 1000LL;
+ json_object_int_add(json_sub, "pollIntervalTimerDueMsec",
+ time_store);
+ } else
+ vty_out(vty, " Poll timer due in %s\n",
+ ospf_timer_dump(nbr_nbma->t_poll, timebuf,
+ sizeof(timebuf)));
+
+ /* Show poll-interval timer thread. */
+ if (use_json) {
+ if (nbr_nbma->t_poll != NULL)
+ json_object_string_add(json_sub,
+ "pollIntervalTimerThread", "on");
+ } else
+ vty_out(vty, " Thread Poll Timer %s\n",
+ nbr_nbma->t_poll != NULL ? "on" : "off");
+
+ if (use_json)
+ json_object_object_add(json, "noNbrId", json_sub);
+}
+
+static void show_ip_ospf_neighbor_detail_sub(struct vty *vty,
+ struct ospf_interface *oi,
+ struct ospf_neighbor *nbr,
+ u_char use_json, json_object *json)
+{
+ char timebuf[OSPF_TIME_DUMP_SIZE];
+ json_object *json_sub = NULL;
+
+ if (use_json)
+ json_sub = json_object_new_object();
+ else {
+ /* Show neighbor ID. */
+ if (nbr->state == NSM_Attempt && nbr->router_id.s_addr == 0)
+ vty_out(vty, " Neighbor %s,", "-");
+ else
+ vty_out(vty, " Neighbor %s,",
+ inet_ntoa(nbr->router_id));
+ }
+
+ /* Show interface address. */
+ if (use_json)
+ json_object_string_add(json_sub, "ifaceAddress",
+ inet_ntoa(nbr->address.u.prefix4));
+ else
+ vty_out(vty, " interface address %s\n",
+ inet_ntoa(nbr->address.u.prefix4));
+
+ /* Show Area ID. */
+ if (use_json) {
+ json_object_string_add(json_sub, "areaId",
+ ospf_area_desc_string(oi->area));
+ json_object_string_add(json_sub, "ifaceName", oi->ifp->name);
+ } else
+ vty_out(vty, " In the area %s via interface %s\n",
+ ospf_area_desc_string(oi->area), oi->ifp->name);
+
+ /* Show neighbor priority and state. */
+ if (use_json) {
+ json_object_int_add(json_sub, "nbrPriority", nbr->priority);
+ json_object_string_add(
+ json_sub, "nbrState",
+ lookup_msg(ospf_nsm_state_msg, nbr->state, NULL));
+ } else
+ vty_out(vty, " Neighbor priority is %d, State is %s,",
+ nbr->priority,
+ lookup_msg(ospf_nsm_state_msg, nbr->state, NULL));
+
+ /* Show state changes. */
+ if (use_json)
+ json_object_int_add(json_sub, "stateChangeCounter",
+ nbr->state_change);
+ else
+ vty_out(vty, " %d state changes\n", nbr->state_change);
+
+ if (nbr->ts_last_progress.tv_sec || nbr->ts_last_progress.tv_usec) {
+ struct timeval res;
+ long time_store;
+
+ time_store =
+ monotime_since(&nbr->ts_last_progress, &res) / 1000LL;
+ if (use_json) {
+ json_object_int_add(json_sub, "lastPrgrsvChangeMsec",
+ time_store);
+ } else {
+ vty_out(vty,
+ " Most recent state change statistics:\n");
+ vty_out(vty, " Progressive change %s ago\n",
+ ospf_timeval_dump(&res, timebuf,
+ sizeof(timebuf)));
+ }
+ }
+
+ if (nbr->ts_last_regress.tv_sec || nbr->ts_last_regress.tv_usec) {
+ struct timeval res;
+ long time_store;
+
+ time_store =
+ monotime_since(&nbr->ts_last_regress, &res) / 1000LL;
+ if (use_json) {
+ json_object_int_add(json_sub,
+ "lastRegressiveChangeMsec",
+ time_store);
+ if (nbr->last_regress_str)
+ json_object_string_add(
+ json_sub, "lastRegressiveChangeReason",
+ nbr->last_regress_str);
+ } else {
+ vty_out(vty,
+ " Regressive change %s ago, due to %s\n",
+ ospf_timeval_dump(&res, timebuf,
+ sizeof(timebuf)),
+ (nbr->last_regress_str ? nbr->last_regress_str
+ : "??"));
+ }
+ }
+
+ /* Show Designated Rotuer ID. */
+ if (use_json)
+ json_object_string_add(json_sub, "routerDesignatedId",
+ inet_ntoa(nbr->d_router));
+ else
+ vty_out(vty, " DR is %s,", inet_ntoa(nbr->d_router));
+
+ /* Show Backup Designated Rotuer ID. */
+ if (use_json)
+ json_object_string_add(json_sub, "routerDesignatedBackupId",
+ inet_ntoa(nbr->bd_router));
+ else
+ vty_out(vty, " BDR is %s\n", inet_ntoa(nbr->bd_router));
+
+ /* Show options. */
+ if (use_json) {
+ json_object_int_add(json_sub, "optionsCounter", nbr->options);
+ json_object_string_add(json_sub, "optionsList",
+ ospf_options_dump(nbr->options));
+ } else
+ vty_out(vty, " Options %d %s\n", nbr->options,
+ ospf_options_dump(nbr->options));
+
+ /* Show Router Dead interval timer. */
+ if (use_json) {
+ if (nbr->t_inactivity) {
+ long time_store;
+ time_store = monotime_until(&nbr->t_inactivity->u.sands,
+ NULL)
+ / 1000LL;
+ json_object_int_add(json_sub,
+ "routerDeadIntervalTimerDueMsec",
+ time_store);
+ } else
+ json_object_int_add(
+ json_sub, "routerDeadIntervalTimerDueMsec", -1);
+ } else
+ vty_out(vty, " Dead timer due in %s\n",
+ ospf_timer_dump(nbr->t_inactivity, timebuf,
+ sizeof(timebuf)));
+
+ /* Show Database Summary list. */
+ if (use_json)
+ json_object_int_add(json_sub, "databaseSummaryListCounter",
+ ospf_db_summary_count(nbr));
+ else
+ vty_out(vty, " Database Summary List %d\n",
+ ospf_db_summary_count(nbr));
+
+ /* Show Link State Request list. */
+ if (use_json)
+ json_object_int_add(json_sub, "linkStateRequestListCounter",
+ ospf_ls_request_count(nbr));
+ else
+ vty_out(vty, " Link State Request List %ld\n",
+ ospf_ls_request_count(nbr));
+
+ /* Show Link State Retransmission list. */
+ if (use_json)
+ json_object_int_add(json_sub,
+ "linkStateRetransmissionListCounter",
+ ospf_ls_retransmit_count(nbr));
+ else
+ vty_out(vty, " Link State Retransmission List %ld\n",
+ ospf_ls_retransmit_count(nbr));
+
+ /* Show inactivity timer thread. */
+ if (use_json) {
+ if (nbr->t_inactivity != NULL)
+ json_object_string_add(json_sub,
+ "threadInactivityTimer", "on");
+ } else
+ vty_out(vty, " Thread Inactivity Timer %s\n",
+ nbr->t_inactivity != NULL ? "on" : "off");
+
+ /* Show Database Description retransmission thread. */
+ if (use_json) {
+ if (nbr->t_db_desc != NULL)
+ json_object_string_add(
+ json_sub,
+ "threadDatabaseDescriptionRetransmission",
+ "on");
+ } else
+ vty_out(vty,
+ " Thread Database Description Retransmision %s\n",
+ nbr->t_db_desc != NULL ? "on" : "off");
+
+ /* Show Link State Request Retransmission thread. */
+ if (use_json) {
+ if (nbr->t_ls_req != NULL)
+ json_object_string_add(
+ json_sub,
+ "threadLinkStateRequestRetransmission", "on");
+ } else
+ vty_out(vty,
+ " Thread Link State Request Retransmission %s\n",
+ nbr->t_ls_req != NULL ? "on" : "off");
+
+ /* Show Link State Update Retransmission thread. */
+ if (use_json) {
+ if (nbr->t_ls_upd != NULL)
+ json_object_string_add(
+ json_sub, "threadLinkStateUpdateRetransmission",
+ "on");
+ } else
+ vty_out(vty,
+ " Thread Link State Update Retransmission %s\n\n",
+ nbr->t_ls_upd != NULL ? "on" : "off");
+
+ if (use_json) {
+ if (nbr->state == NSM_Attempt && nbr->router_id.s_addr == 0)
+ json_object_object_add(json, "noNbrId", json_sub);
+ else
+ json_object_object_add(json, inet_ntoa(nbr->router_id),
+ json_sub);
+ }
+
+ ospf_bfd_show_info(vty, nbr->bfd_info, json, use_json, 0);
+}
+
+static int show_ip_ospf_neighbor_id_common(struct vty *vty, struct ospf *ospf,
+ int arg_base,
+ struct cmd_token **argv,
+ u_char use_json)
+{
+ struct listnode *node;
+ struct ospf_neighbor *nbr;
+ struct ospf_interface *oi;
+ struct in_addr router_id;
+ int ret;
+ json_object *json = NULL;
+
+ if (use_json)
+ json = json_object_new_object();
+
+ if (ospf->instance) {
+ if (use_json)
+ json_object_int_add(json, "ospfInstance",
+ ospf->instance);
+ else
+ vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);
+ }
+
+ ret = inet_aton(argv[arg_base]->arg, &router_id);
+ if (!ret) {
+ if (!use_json)
+ vty_out(vty, "Please specify Neighbor ID by A.B.C.D\n");
+ return CMD_WARNING;
+ }
+
+ for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi)) {
+ if ((nbr = ospf_nbr_lookup_by_routerid(oi->nbrs, &router_id))) {
+ show_ip_ospf_neighbor_detail_sub(vty, oi, nbr, use_json,
+ json);
+ }
+ }
+
+ if (use_json) {
+ vty_out(vty, "%s\n", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
+ json_object_free(json);
+ } else
+ vty_out(vty, "\n");
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf_neighbor_id,
@@ -4296,13 +4432,13 @@ DEFUN (show_ip_ospf_neighbor_id,
"Neighbor ID\n"
JSON_STR)
{
- struct ospf *ospf;
- u_char uj = use_json(argc, argv);
+ struct ospf *ospf;
+ u_char uj = use_json(argc, argv);
- if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_id_common(vty, ospf, 0, argv, uj);
+ return show_ip_ospf_neighbor_id_common(vty, ospf, 0, argv, uj);
}
DEFUN (show_ip_ospf_instance_neighbor_id,
@@ -4316,65 +4452,63 @@ DEFUN (show_ip_ospf_instance_neighbor_id,
"Neighbor ID\n"
JSON_STR)
{
- int idx_number = 3;
- struct ospf *ospf;
- u_short instance = 0;
- u_char uj = use_json(argc, argv);
+ int idx_number = 3;
+ struct ospf *ospf;
+ u_short instance = 0;
+ u_char uj = use_json(argc, argv);
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
- if ((ospf = ospf_lookup_instance(instance)) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ if ((ospf = ospf_lookup_instance(instance)) == NULL
+ || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_id_common(vty, ospf, 1, argv, uj);
+ return show_ip_ospf_neighbor_id_common(vty, ospf, 1, argv, uj);
}
-static int
-show_ip_ospf_neighbor_detail_common (struct vty *vty, struct ospf *ospf, u_char use_json)
-{
- struct ospf_interface *oi;
- struct listnode *node;
- json_object *json = NULL;
-
- if (use_json)
- json = json_object_new_object();
-
- if (ospf->instance)
- {
- if (use_json)
- json_object_int_add(json, "ospfInstance", ospf->instance);
- else
- vty_out (vty, "\nOSPF Instance: %d\n\n", ospf->instance);
- }
-
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
- {
- struct route_node *rn;
- struct ospf_neighbor *nbr;
-
- for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
- {
- if ((nbr = rn->info))
- {
- if (nbr != oi->nbr_self)
- {
- if (nbr->state != NSM_Down)
- {
- show_ip_ospf_neighbor_detail_sub (vty, oi, nbr, use_json, json);
- }
- }
- }
- }
- }
-
- if (use_json)
- {
- vty_out (vty, "%s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
- json_object_free(json);
- }
- else
- vty_out (vty, "\n");
+static int show_ip_ospf_neighbor_detail_common(struct vty *vty,
+ struct ospf *ospf,
+ u_char use_json)
+{
+ struct ospf_interface *oi;
+ struct listnode *node;
+ json_object *json = NULL;
- return CMD_SUCCESS;
+ if (use_json)
+ json = json_object_new_object();
+
+ if (ospf->instance) {
+ if (use_json)
+ json_object_int_add(json, "ospfInstance",
+ ospf->instance);
+ else
+ vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);
+ }
+
+ for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi)) {
+ struct route_node *rn;
+ struct ospf_neighbor *nbr;
+
+ for (rn = route_top(oi->nbrs); rn; rn = route_next(rn)) {
+ if ((nbr = rn->info)) {
+ if (nbr != oi->nbr_self) {
+ if (nbr->state != NSM_Down) {
+ show_ip_ospf_neighbor_detail_sub(
+ vty, oi, nbr, use_json,
+ json);
+ }
+ }
+ }
+ }
+ }
+
+ if (use_json) {
+ vty_out(vty, "%s\n", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
+ json_object_free(json);
+ } else
+ vty_out(vty, "\n");
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf_neighbor_detail,
@@ -4387,13 +4521,13 @@ DEFUN (show_ip_ospf_neighbor_detail,
"detail of all neighbors\n"
JSON_STR)
{
- struct ospf *ospf;
- u_char uj = use_json(argc, argv);
+ struct ospf *ospf;
+ u_char uj = use_json(argc, argv);
- if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_detail_common(vty, ospf, uj);
+ return show_ip_ospf_neighbor_detail_common(vty, ospf, uj);
}
DEFUN (show_ip_ospf_instance_neighbor_detail,
@@ -4407,71 +4541,73 @@ DEFUN (show_ip_ospf_instance_neighbor_detail,
"detail of all neighbors\n"
JSON_STR)
{
- int idx_number = 3;
- struct ospf *ospf;
- u_short instance = 0;
- u_char uj = use_json(argc, argv);
+ int idx_number = 3;
+ struct ospf *ospf;
+ u_short instance = 0;
+ u_char uj = use_json(argc, argv);
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
- if ((ospf = ospf_lookup_instance (instance)) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ if ((ospf = ospf_lookup_instance(instance)) == NULL
+ || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_detail_common(vty, ospf, uj);
+ return show_ip_ospf_neighbor_detail_common(vty, ospf, uj);
}
-static int
-show_ip_ospf_neighbor_detail_all_common (struct vty *vty, struct ospf *ospf, u_char use_json)
-{
- struct listnode *node;
- struct ospf_interface *oi;
- json_object *json = NULL;
-
- if (use_json)
- json = json_object_new_object();
-
- if (ospf->instance)
- {
- if (use_json)
- json_object_int_add(json, "ospfInstance", ospf->instance);
- else
- vty_out (vty, "\nOSPF Instance: %d\n\n", ospf->instance);
- }
-
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
- {
- struct route_node *rn;
- struct ospf_neighbor *nbr;
- struct ospf_nbr_nbma *nbr_nbma;
-
- for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
- if ((nbr = rn->info))
- if (nbr != oi->nbr_self)
- if (nbr->state != NSM_Down)
- show_ip_ospf_neighbor_detail_sub (vty, oi, rn->info, use_json, json);
-
- if (oi->type == OSPF_IFTYPE_NBMA)
- {
- struct listnode *nd;
-
- for (ALL_LIST_ELEMENTS_RO (oi->nbr_nbma, nd, nbr_nbma))
- {
- if (nbr_nbma->nbr == NULL || nbr_nbma->nbr->state == NSM_Down)
- show_ip_ospf_nbr_nbma_detail_sub (vty, oi, nbr_nbma, use_json, json);
- }
- }
- }
-
- if (use_json)
- {
- vty_out (vty, "%s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
- json_object_free(json);
- }
- else
- {
- vty_out (vty, "\n");
- }
+static int show_ip_ospf_neighbor_detail_all_common(struct vty *vty,
+ struct ospf *ospf,
+ u_char use_json)
+{
+ struct listnode *node;
+ struct ospf_interface *oi;
+ json_object *json = NULL;
- return CMD_SUCCESS;
+ if (use_json)
+ json = json_object_new_object();
+
+ if (ospf->instance) {
+ if (use_json)
+ json_object_int_add(json, "ospfInstance",
+ ospf->instance);
+ else
+ vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);
+ }
+
+ for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi)) {
+ struct route_node *rn;
+ struct ospf_neighbor *nbr;
+ struct ospf_nbr_nbma *nbr_nbma;
+
+ for (rn = route_top(oi->nbrs); rn; rn = route_next(rn))
+ if ((nbr = rn->info))
+ if (nbr != oi->nbr_self)
+ if (nbr->state != NSM_Down)
+ show_ip_ospf_neighbor_detail_sub(
+ vty, oi, rn->info,
+ use_json, json);
+
+ if (oi->type == OSPF_IFTYPE_NBMA) {
+ struct listnode *nd;
+
+ for (ALL_LIST_ELEMENTS_RO(oi->nbr_nbma, nd, nbr_nbma)) {
+ if (nbr_nbma->nbr == NULL
+ || nbr_nbma->nbr->state == NSM_Down)
+ show_ip_ospf_nbr_nbma_detail_sub(
+ vty, oi, nbr_nbma, use_json,
+ json);
+ }
+ }
+ }
+
+ if (use_json) {
+ vty_out(vty, "%s\n", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
+ json_object_free(json);
+ } else {
+ vty_out(vty, "\n");
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf_neighbor_detail_all,
@@ -4485,13 +4621,13 @@ DEFUN (show_ip_ospf_neighbor_detail_all,
"include down status neighbor\n"
JSON_STR)
{
- struct ospf *ospf;
- u_char uj = use_json(argc, argv);
+ struct ospf *ospf;
+ u_char uj = use_json(argc, argv);
- if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_detail_all_common(vty, ospf, uj);
+ return show_ip_ospf_neighbor_detail_all_common(vty, ospf, uj);
}
DEFUN (show_ip_ospf_instance_neighbor_detail_all,
@@ -4506,74 +4642,73 @@ DEFUN (show_ip_ospf_instance_neighbor_detail_all,
"include down status neighbor\n"
JSON_STR)
{
- int idx_number = 3;
- struct ospf *ospf;
- u_short instance = 0;
- u_char uj = use_json(argc, argv);
+ int idx_number = 3;
+ struct ospf *ospf;
+ u_short instance = 0;
+ u_char uj = use_json(argc, argv);
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
- if ((ospf = ospf_lookup_instance(instance)) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ if ((ospf = ospf_lookup_instance(instance)) == NULL
+ || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_detail_all_common(vty, ospf, uj);
+ return show_ip_ospf_neighbor_detail_all_common(vty, ospf, uj);
}
-static int
-show_ip_ospf_neighbor_int_detail_common (struct vty *vty, struct ospf *ospf,
- int arg_base, struct cmd_token **argv, u_char use_json)
-{
- struct ospf_interface *oi;
- struct interface *ifp;
- struct route_node *rn, *nrn;
- struct ospf_neighbor *nbr;
- json_object *json = NULL;
-
- if (use_json)
- json = json_object_new_object();
-
- if (ospf->instance)
- {
- if (use_json)
- json_object_int_add(json, "ospfInstance", ospf->instance);
- else
- vty_out (vty, "\nOSPF Instance: %d\n\n", ospf->instance);
- }
-
- ifp = if_lookup_by_name (argv[arg_base]->arg, VRF_DEFAULT);
- if (!ifp)
- {
- if (!use_json)
- vty_out (vty, "No such interface.\n");
- return CMD_WARNING;
- }
-
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- if ((oi = rn->info))
- {
- for (nrn = route_top (oi->nbrs); nrn; nrn = route_next (nrn))
- {
- if ((nbr = nrn->info))
- {
- if (nbr != oi->nbr_self)
- {
- if (nbr->state != NSM_Down)
- show_ip_ospf_neighbor_detail_sub (vty, oi, nbr, use_json, json);
- }
- }
- }
- }
- }
-
- if (use_json)
- {
- vty_out (vty, "%s\n", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
- json_object_free(json);
- }
- else
- vty_out (vty, "\n");
+static int show_ip_ospf_neighbor_int_detail_common(struct vty *vty,
+ struct ospf *ospf,
+ int arg_base,
+ struct cmd_token **argv,
+ u_char use_json)
+{
+ struct ospf_interface *oi;
+ struct interface *ifp;
+ struct route_node *rn, *nrn;
+ struct ospf_neighbor *nbr;
+ json_object *json = NULL;
- return CMD_SUCCESS;
+ if (use_json)
+ json = json_object_new_object();
+
+ if (ospf->instance) {
+ if (use_json)
+ json_object_int_add(json, "ospfInstance",
+ ospf->instance);
+ else
+ vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);
+ }
+
+ ifp = if_lookup_by_name(argv[arg_base]->arg, VRF_DEFAULT);
+ if (!ifp) {
+ if (!use_json)
+ vty_out(vty, "No such interface.\n");
+ return CMD_WARNING;
+ }
+
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
+ if ((oi = rn->info)) {
+ for (nrn = route_top(oi->nbrs); nrn;
+ nrn = route_next(nrn)) {
+ if ((nbr = nrn->info)) {
+ if (nbr != oi->nbr_self) {
+ if (nbr->state != NSM_Down)
+ show_ip_ospf_neighbor_detail_sub(
+ vty, oi, nbr,
+ use_json, json);
+ }
+ }
+ }
+ }
+ }
+
+ if (use_json) {
+ vty_out(vty, "%s\n", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
+ json_object_free(json);
+ } else
+ vty_out(vty, "\n");
+
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf_neighbor_int_detail,
@@ -4587,13 +4722,13 @@ DEFUN (show_ip_ospf_neighbor_int_detail,
"detail of all neighbors\n"
JSON_STR)
{
- struct ospf *ospf;
- u_char uj = use_json(argc, argv);
+ struct ospf *ospf;
+ u_char uj = use_json(argc, argv);
- if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_int_detail_common(vty, ospf, 0, argv, uj);
+ return show_ip_ospf_neighbor_int_detail_common(vty, ospf, 0, argv, uj);
}
DEFUN (show_ip_ospf_instance_neighbor_int_detail,
@@ -4608,311 +4743,293 @@ DEFUN (show_ip_ospf_instance_neighbor_int_detail,
"detail of all neighbors\n"
JSON_STR)
{
- int idx_number = 3;
- struct ospf *ospf;
- u_short instance = 0;
- u_char uj = use_json(argc, argv);
+ int idx_number = 3;
+ struct ospf *ospf;
+ u_short instance = 0;
+ u_char uj = use_json(argc, argv);
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
- if ((ospf = ospf_lookup_instance(instance)) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ if ((ospf = ospf_lookup_instance(instance)) == NULL
+ || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_neighbor_int_detail_common(vty, ospf, 1, argv, uj);
+ return show_ip_ospf_neighbor_int_detail_common(vty, ospf, 1, argv, uj);
}
/* Show functions */
-static int
-show_lsa_summary (struct vty *vty, struct ospf_lsa *lsa, int self)
-{
- struct router_lsa *rl;
- struct summary_lsa *sl;
- struct as_external_lsa *asel;
- struct prefix_ipv4 p;
-
- if (lsa != NULL)
- /* If self option is set, check LSA self flag. */
- if (self == 0 || IS_LSA_SELF (lsa))
- {
- /* LSA common part show. */
- vty_out (vty, "%-15s ", inet_ntoa (lsa->data->id));
- vty_out (vty, "%-15s %4d 0x%08lx 0x%04x",
- inet_ntoa (lsa->data->adv_router), LS_AGE (lsa),
- (u_long)ntohl (lsa->data->ls_seqnum), ntohs (lsa->data->checksum));
- /* LSA specific part show. */
- switch (lsa->data->type)
- {
- case OSPF_ROUTER_LSA:
- rl = (struct router_lsa *) lsa->data;
- vty_out (vty, " %-d", ntohs (rl->links));
- break;
- case OSPF_SUMMARY_LSA:
- sl = (struct summary_lsa *) lsa->data;
-
- p.family = AF_INET;
- p.prefix = sl->header.id;
- p.prefixlen = ip_masklen (sl->mask);
- apply_mask_ipv4 (&p);
-
- vty_out (vty, " %s/%d", inet_ntoa (p.prefix), p.prefixlen);
- break;
- case OSPF_AS_EXTERNAL_LSA:
- case OSPF_AS_NSSA_LSA:
- asel = (struct as_external_lsa *) lsa->data;
-
- p.family = AF_INET;
- p.prefix = asel->header.id;
- p.prefixlen = ip_masklen (asel->mask);
- apply_mask_ipv4 (&p);
-
- vty_out (vty, " %s %s/%d [0x%lx]",
- IS_EXTERNAL_METRIC (asel->e[0].tos) ? "E2" : "E1",
- inet_ntoa (p.prefix), p.prefixlen,
- (u_long)ntohl (asel->e[0].route_tag));
- break;
- case OSPF_NETWORK_LSA:
- case OSPF_ASBR_SUMMARY_LSA:
- case OSPF_OPAQUE_LINK_LSA:
- case OSPF_OPAQUE_AREA_LSA:
- case OSPF_OPAQUE_AS_LSA:
- default:
- break;
- }
- vty_out (vty, "\n");
- }
-
- return 0;
-}
+static int show_lsa_summary(struct vty *vty, struct ospf_lsa *lsa, int self)
+{
+ struct router_lsa *rl;
+ struct summary_lsa *sl;
+ struct as_external_lsa *asel;
+ struct prefix_ipv4 p;
+
+ if (lsa != NULL)
+ /* If self option is set, check LSA self flag. */
+ if (self == 0 || IS_LSA_SELF(lsa)) {
+ /* LSA common part show. */
+ vty_out(vty, "%-15s ", inet_ntoa(lsa->data->id));
+ vty_out(vty, "%-15s %4d 0x%08lx 0x%04x",
+ inet_ntoa(lsa->data->adv_router), LS_AGE(lsa),
+ (u_long)ntohl(lsa->data->ls_seqnum),
+ ntohs(lsa->data->checksum));
+ /* LSA specific part show. */
+ switch (lsa->data->type) {
+ case OSPF_ROUTER_LSA:
+ rl = (struct router_lsa *)lsa->data;
+ vty_out(vty, " %-d", ntohs(rl->links));
+ break;
+ case OSPF_SUMMARY_LSA:
+ sl = (struct summary_lsa *)lsa->data;
+
+ p.family = AF_INET;
+ p.prefix = sl->header.id;
+ p.prefixlen = ip_masklen(sl->mask);
+ apply_mask_ipv4(&p);
+
+ vty_out(vty, " %s/%d", inet_ntoa(p.prefix),
+ p.prefixlen);
+ break;
+ case OSPF_AS_EXTERNAL_LSA:
+ case OSPF_AS_NSSA_LSA:
+ asel = (struct as_external_lsa *)lsa->data;
+
+ p.family = AF_INET;
+ p.prefix = asel->header.id;
+ p.prefixlen = ip_masklen(asel->mask);
+ apply_mask_ipv4(&p);
+
+ vty_out(vty, " %s %s/%d [0x%lx]",
+ IS_EXTERNAL_METRIC(asel->e[0].tos)
+ ? "E2"
+ : "E1",
+ inet_ntoa(p.prefix), p.prefixlen,
+ (u_long)ntohl(asel->e[0].route_tag));
+ break;
+ case OSPF_NETWORK_LSA:
+ case OSPF_ASBR_SUMMARY_LSA:
+ case OSPF_OPAQUE_LINK_LSA:
+ case OSPF_OPAQUE_AREA_LSA:
+ case OSPF_OPAQUE_AS_LSA:
+ default:
+ break;
+ }
+ vty_out(vty, "\n");
+ }
-static const char *show_database_desc[] =
-{
- "unknown",
- "Router Link States",
- "Net Link States",
- "Summary Link States",
- "ASBR-Summary Link States",
- "AS External Link States",
- "Group Membership LSA",
- "NSSA-external Link States",
- "Type-8 LSA",
- "Link-Local Opaque-LSA",
- "Area-Local Opaque-LSA",
- "AS-external Opaque-LSA",
+ return 0;
+}
+
+static const char *show_database_desc[] = {
+ "unknown",
+ "Router Link States",
+ "Net Link States",
+ "Summary Link States",
+ "ASBR-Summary Link States",
+ "AS External Link States",
+ "Group Membership LSA",
+ "NSSA-external Link States",
+ "Type-8 LSA",
+ "Link-Local Opaque-LSA",
+ "Area-Local Opaque-LSA",
+ "AS-external Opaque-LSA",
};
-static const char *show_database_header[] =
-{
- "",
- "Link ID ADV Router Age Seq# CkSum Link count",
- "Link ID ADV Router Age Seq# CkSum",
- "Link ID ADV Router Age Seq# CkSum Route",
- "Link ID ADV Router Age Seq# CkSum",
- "Link ID ADV Router Age Seq# CkSum Route",
- " --- header for Group Member ----",
- "Link ID ADV Router Age Seq# CkSum Route",
- " --- type-8 ---",
- "Opaque-Type/Id ADV Router Age Seq# CkSum",
- "Opaque-Type/Id ADV Router Age Seq# CkSum",
- "Opaque-Type/Id ADV Router Age Seq# CkSum",
+static const char *show_database_header[] = {
+ "",
+ "Link ID ADV Router Age Seq# CkSum Link count",
+ "Link ID ADV Router Age Seq# CkSum",
+ "Link ID ADV Router Age Seq# CkSum Route",
+ "Link ID ADV Router Age Seq# CkSum",
+ "Link ID ADV Router Age Seq# CkSum Route",
+ " --- header for Group Member ----",
+ "Link ID ADV Router Age Seq# CkSum Route",
+ " --- type-8 ---",
+ "Opaque-Type/Id ADV Router Age Seq# CkSum",
+ "Opaque-Type/Id ADV Router Age Seq# CkSum",
+ "Opaque-Type/Id ADV Router Age Seq# CkSum",
};
-static void
-show_ip_ospf_database_header (struct vty *vty, struct ospf_lsa *lsa)
-{
- struct router_lsa *rlsa = (struct router_lsa*) lsa->data;
-
- vty_out (vty, " LS age: %d\n", LS_AGE (lsa));
- vty_out (vty, " Options: 0x%-2x : %s\n", lsa->data->options,
- ospf_options_dump(lsa->data->options));
- vty_out (vty, " LS Flags: 0x%-2x %s\n",
- lsa->flags,
- ((lsa->flags & OSPF_LSA_LOCAL_XLT) ?
- "(Translated from Type-7)" : ""));
-
- if (lsa->data->type == OSPF_ROUTER_LSA)
- {
- vty_out (vty, " Flags: 0x%x" , rlsa->flags);
-
- if (rlsa->flags)
- vty_out (vty, " :%s%s%s%s",
- IS_ROUTER_LSA_BORDER (rlsa) ? " ABR" : "",
- IS_ROUTER_LSA_EXTERNAL (rlsa) ? " ASBR" : "",
- IS_ROUTER_LSA_VIRTUAL (rlsa) ? " VL-endpoint" : "",
- IS_ROUTER_LSA_SHORTCUT (rlsa) ? " Shortcut" : "");
-
- vty_out (vty, "\n");
- }
- vty_out (vty, " LS Type: %s\n",
- lookup_msg(ospf_lsa_type_msg, lsa->data->type, NULL));
- vty_out (vty, " Link State ID: %s %s\n", inet_ntoa (lsa->data->id),
- lookup_msg(ospf_link_state_id_type_msg, lsa->data->type, NULL));
- vty_out (vty, " Advertising Router: %s\n", inet_ntoa (lsa->data->adv_router));
- vty_out (vty, " LS Seq Number: %08lx\n", (u_long)ntohl (lsa->data->ls_seqnum));
- vty_out (vty, " Checksum: 0x%04x\n", ntohs (lsa->data->checksum));
- vty_out (vty, " Length: %d\n\n", ntohs (lsa->data->length));
-}
-
-const char *link_type_desc[] =
-{
- "(null)",
- "another Router (point-to-point)",
- "a Transit Network",
- "Stub Network",
- "a Virtual Link",
+static void show_ip_ospf_database_header(struct vty *vty, struct ospf_lsa *lsa)
+{
+ struct router_lsa *rlsa = (struct router_lsa *)lsa->data;
+
+ vty_out(vty, " LS age: %d\n", LS_AGE(lsa));
+ vty_out(vty, " Options: 0x%-2x : %s\n", lsa->data->options,
+ ospf_options_dump(lsa->data->options));
+ vty_out(vty, " LS Flags: 0x%-2x %s\n", lsa->flags,
+ ((lsa->flags & OSPF_LSA_LOCAL_XLT) ? "(Translated from Type-7)"
+ : ""));
+
+ if (lsa->data->type == OSPF_ROUTER_LSA) {
+ vty_out(vty, " Flags: 0x%x", rlsa->flags);
+
+ if (rlsa->flags)
+ vty_out(vty, " :%s%s%s%s",
+ IS_ROUTER_LSA_BORDER(rlsa) ? " ABR" : "",
+ IS_ROUTER_LSA_EXTERNAL(rlsa) ? " ASBR" : "",
+ IS_ROUTER_LSA_VIRTUAL(rlsa) ? " VL-endpoint"
+ : "",
+ IS_ROUTER_LSA_SHORTCUT(rlsa) ? " Shortcut"
+ : "");
+
+ vty_out(vty, "\n");
+ }
+ vty_out(vty, " LS Type: %s\n",
+ lookup_msg(ospf_lsa_type_msg, lsa->data->type, NULL));
+ vty_out(vty, " Link State ID: %s %s\n", inet_ntoa(lsa->data->id),
+ lookup_msg(ospf_link_state_id_type_msg, lsa->data->type, NULL));
+ vty_out(vty, " Advertising Router: %s\n",
+ inet_ntoa(lsa->data->adv_router));
+ vty_out(vty, " LS Seq Number: %08lx\n",
+ (u_long)ntohl(lsa->data->ls_seqnum));
+ vty_out(vty, " Checksum: 0x%04x\n", ntohs(lsa->data->checksum));
+ vty_out(vty, " Length: %d\n\n", ntohs(lsa->data->length));
+}
+
+const char *link_type_desc[] = {
+ "(null)",
+ "another Router (point-to-point)",
+ "a Transit Network",
+ "Stub Network",
+ "a Virtual Link",
};
-const char *link_id_desc[] =
-{
- "(null)",
- "Neighboring Router ID",
- "Designated Router address",
- "Net",
- "Neighboring Router ID",
+const char *link_id_desc[] = {
+ "(null)", "Neighboring Router ID", "Designated Router address",
+ "Net", "Neighboring Router ID",
};
-const char *link_data_desc[] =
-{
- "(null)",
- "Router Interface address",
- "Router Interface address",
- "Network Mask",
- "Router Interface address",
+const char *link_data_desc[] = {
+ "(null)", "Router Interface address", "Router Interface address",
+ "Network Mask", "Router Interface address",
};
/* Show router-LSA each Link information. */
-static void
-show_ip_ospf_database_router_links (struct vty *vty,
- struct router_lsa *rl)
-{
- int len, type;
- unsigned int i;
-
- len = ntohs (rl->header.length) - 4;
- for (i = 0; i < ntohs (rl->links) && len > 0; len -= 12, i++)
- {
- type = rl->link[i].type;
-
- vty_out (vty, " Link connected to: %s\n",
- link_type_desc[type]);
- vty_out (vty, " (Link ID) %s: %s\n", link_id_desc[type],
- inet_ntoa (rl->link[i].link_id));
- vty_out (vty, " (Link Data) %s: %s\n", link_data_desc[type],
- inet_ntoa (rl->link[i].link_data));
- vty_out (vty, " Number of TOS metrics: 0\n");
- vty_out (vty, " TOS 0 Metric: %d\n",
- ntohs (rl->link[i].metric));
- vty_out (vty, "\n");
- }
+static void show_ip_ospf_database_router_links(struct vty *vty,
+ struct router_lsa *rl)
+{
+ int len, type;
+ unsigned int i;
+
+ len = ntohs(rl->header.length) - 4;
+ for (i = 0; i < ntohs(rl->links) && len > 0; len -= 12, i++) {
+ type = rl->link[i].type;
+
+ vty_out(vty, " Link connected to: %s\n",
+ link_type_desc[type]);
+ vty_out(vty, " (Link ID) %s: %s\n", link_id_desc[type],
+ inet_ntoa(rl->link[i].link_id));
+ vty_out(vty, " (Link Data) %s: %s\n", link_data_desc[type],
+ inet_ntoa(rl->link[i].link_data));
+ vty_out(vty, " Number of TOS metrics: 0\n");
+ vty_out(vty, " TOS 0 Metric: %d\n",
+ ntohs(rl->link[i].metric));
+ vty_out(vty, "\n");
+ }
}
/* Show router-LSA detail information. */
-static int
-show_router_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
+static int show_router_lsa_detail(struct vty *vty, struct ospf_lsa *lsa)
{
- if (lsa != NULL)
- {
- struct router_lsa *rl = (struct router_lsa *) lsa->data;
+ if (lsa != NULL) {
+ struct router_lsa *rl = (struct router_lsa *)lsa->data;
- show_ip_ospf_database_header (vty, lsa);
-
- vty_out (vty, " Number of Links: %d\n\n", ntohs (rl->links));
+ show_ip_ospf_database_header(vty, lsa);
- show_ip_ospf_database_router_links (vty, rl);
- vty_out (vty, "\n");
- }
+ vty_out(vty, " Number of Links: %d\n\n", ntohs(rl->links));
- return 0;
+ show_ip_ospf_database_router_links(vty, rl);
+ vty_out(vty, "\n");
+ }
+
+ return 0;
}
/* Show network-LSA detail information. */
-static int
-show_network_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
+static int show_network_lsa_detail(struct vty *vty, struct ospf_lsa *lsa)
{
- int length, i;
+ int length, i;
- if (lsa != NULL)
- {
- struct network_lsa *nl = (struct network_lsa *) lsa->data;
+ if (lsa != NULL) {
+ struct network_lsa *nl = (struct network_lsa *)lsa->data;
- show_ip_ospf_database_header (vty, lsa);
+ show_ip_ospf_database_header(vty, lsa);
- vty_out (vty, " Network Mask: /%d\n",
- ip_masklen (nl->mask));
+ vty_out(vty, " Network Mask: /%d\n", ip_masklen(nl->mask));
- length = ntohs (lsa->data->length) - OSPF_LSA_HEADER_SIZE - 4;
+ length = ntohs(lsa->data->length) - OSPF_LSA_HEADER_SIZE - 4;
- for (i = 0; length > 0; i++, length -= 4)
- vty_out (vty, " Attached Router: %s\n",
- inet_ntoa (nl->routers[i]));
+ for (i = 0; length > 0; i++, length -= 4)
+ vty_out(vty, " Attached Router: %s\n",
+ inet_ntoa(nl->routers[i]));
- vty_out (vty, "\n");
- }
+ vty_out(vty, "\n");
+ }
- return 0;
+ return 0;
}
/* Show summary-LSA detail information. */
-static int
-show_summary_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
+static int show_summary_lsa_detail(struct vty *vty, struct ospf_lsa *lsa)
{
- if (lsa != NULL)
- {
- struct summary_lsa *sl = (struct summary_lsa *) lsa->data;
+ if (lsa != NULL) {
+ struct summary_lsa *sl = (struct summary_lsa *)lsa->data;
- show_ip_ospf_database_header (vty, lsa);
+ show_ip_ospf_database_header(vty, lsa);
- vty_out (vty, " Network Mask: /%d\n", ip_masklen (sl->mask));
- vty_out (vty, " TOS: 0 Metric: %d\n", GET_METRIC (sl->metric));
- vty_out (vty, "\n");
- }
+ vty_out(vty, " Network Mask: /%d\n", ip_masklen(sl->mask));
+ vty_out(vty, " TOS: 0 Metric: %d\n",
+ GET_METRIC(sl->metric));
+ vty_out(vty, "\n");
+ }
- return 0;
+ return 0;
}
/* Show summary-ASBR-LSA detail information. */
-static int
-show_summary_asbr_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
+static int show_summary_asbr_lsa_detail(struct vty *vty, struct ospf_lsa *lsa)
{
- if (lsa != NULL)
- {
- struct summary_lsa *sl = (struct summary_lsa *) lsa->data;
+ if (lsa != NULL) {
+ struct summary_lsa *sl = (struct summary_lsa *)lsa->data;
- show_ip_ospf_database_header (vty, lsa);
+ show_ip_ospf_database_header(vty, lsa);
- vty_out (vty, " Network Mask: /%d\n",
- ip_masklen (sl->mask));
- vty_out (vty, " TOS: 0 Metric: %d\n", GET_METRIC (sl->metric));
- vty_out (vty, "\n");
- }
+ vty_out(vty, " Network Mask: /%d\n", ip_masklen(sl->mask));
+ vty_out(vty, " TOS: 0 Metric: %d\n",
+ GET_METRIC(sl->metric));
+ vty_out(vty, "\n");
+ }
- return 0;
+ return 0;
}
/* Show AS-external-LSA detail information. */
-static int
-show_as_external_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
-{
- if (lsa != NULL)
- {
- struct as_external_lsa *al = (struct as_external_lsa *) lsa->data;
-
- show_ip_ospf_database_header (vty, lsa);
-
- vty_out (vty, " Network Mask: /%d\n",
- ip_masklen (al->mask));
- vty_out (vty, " Metric Type: %s\n",
- IS_EXTERNAL_METRIC (al->e[0].tos) ?
- "2 (Larger than any link state path)" : "1");
- vty_out (vty, " TOS: 0\n");
- vty_out (vty, " Metric: %d\n",
- GET_METRIC (al->e[0].metric));
- vty_out (vty, " Forward Address: %s\n",
- inet_ntoa (al->e[0].fwd_addr));
-
- vty_out (vty, " External Route Tag: %"ROUTE_TAG_PRI"\n\n",
- (route_tag_t)ntohl (al->e[0].route_tag));
- }
+static int show_as_external_lsa_detail(struct vty *vty, struct ospf_lsa *lsa)
+{
+ if (lsa != NULL) {
+ struct as_external_lsa *al =
+ (struct as_external_lsa *)lsa->data;
+
+ show_ip_ospf_database_header(vty, lsa);
+
+ vty_out(vty, " Network Mask: /%d\n", ip_masklen(al->mask));
+ vty_out(vty, " Metric Type: %s\n",
+ IS_EXTERNAL_METRIC(al->e[0].tos)
+ ? "2 (Larger than any link state path)"
+ : "1");
+ vty_out(vty, " TOS: 0\n");
+ vty_out(vty, " Metric: %d\n",
+ GET_METRIC(al->e[0].metric));
+ vty_out(vty, " Forward Address: %s\n",
+ inet_ntoa(al->e[0].fwd_addr));
+
+ vty_out(vty,
+ " External Route Tag: %" ROUTE_TAG_PRI "\n\n",
+ (route_tag_t)ntohl(al->e[0].route_tag));
+ }
- return 0;
+ return 0;
}
#if 0
static int
@@ -4940,273 +5057,253 @@ show_as_external_lsa_stdvty (struct ospf_lsa *lsa)
}
#endif
/* Show AS-NSSA-LSA detail information. */
-static int
-show_as_nssa_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
-{
- if (lsa != NULL)
- {
- struct as_external_lsa *al = (struct as_external_lsa *) lsa->data;
-
- show_ip_ospf_database_header (vty, lsa);
-
- vty_out (vty, " Network Mask: /%d\n",
- ip_masklen (al->mask));
- vty_out (vty, " Metric Type: %s\n",
- IS_EXTERNAL_METRIC (al->e[0].tos) ?
- "2 (Larger than any link state path)" : "1");
- vty_out (vty, " TOS: 0\n");
- vty_out (vty, " Metric: %d\n",
- GET_METRIC (al->e[0].metric));
- vty_out (vty, " NSSA: Forward Address: %s\n",
- inet_ntoa (al->e[0].fwd_addr));
-
- vty_out (vty, " External Route Tag: %"ROUTE_TAG_PRI"\n\n",
- (route_tag_t)ntohl (al->e[0].route_tag));
- }
+static int show_as_nssa_lsa_detail(struct vty *vty, struct ospf_lsa *lsa)
+{
+ if (lsa != NULL) {
+ struct as_external_lsa *al =
+ (struct as_external_lsa *)lsa->data;
+
+ show_ip_ospf_database_header(vty, lsa);
+
+ vty_out(vty, " Network Mask: /%d\n", ip_masklen(al->mask));
+ vty_out(vty, " Metric Type: %s\n",
+ IS_EXTERNAL_METRIC(al->e[0].tos)
+ ? "2 (Larger than any link state path)"
+ : "1");
+ vty_out(vty, " TOS: 0\n");
+ vty_out(vty, " Metric: %d\n",
+ GET_METRIC(al->e[0].metric));
+ vty_out(vty, " NSSA: Forward Address: %s\n",
+ inet_ntoa(al->e[0].fwd_addr));
+
+ vty_out(vty,
+ " External Route Tag: %" ROUTE_TAG_PRI "\n\n",
+ (route_tag_t)ntohl(al->e[0].route_tag));
+ }
- return 0;
+ return 0;
}
-static int
-show_func_dummy (struct vty *vty, struct ospf_lsa *lsa)
+static int show_func_dummy(struct vty *vty, struct ospf_lsa *lsa)
{
- return 0;
+ return 0;
}
-static int
-show_opaque_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
+static int show_opaque_lsa_detail(struct vty *vty, struct ospf_lsa *lsa)
{
- if (lsa != NULL)
- {
- show_ip_ospf_database_header (vty, lsa);
- show_opaque_info_detail (vty, lsa);
+ if (lsa != NULL) {
+ show_ip_ospf_database_header(vty, lsa);
+ show_opaque_info_detail(vty, lsa);
- vty_out (vty, "\n");
- }
- return 0;
+ vty_out(vty, "\n");
+ }
+ return 0;
+}
+
+int (*show_function[])(struct vty *, struct ospf_lsa *) = {
+ NULL,
+ show_router_lsa_detail,
+ show_network_lsa_detail,
+ show_summary_lsa_detail,
+ show_summary_asbr_lsa_detail,
+ show_as_external_lsa_detail,
+ show_func_dummy,
+ show_as_nssa_lsa_detail, /* almost same as external */
+ NULL, /* type-8 */
+ show_opaque_lsa_detail,
+ show_opaque_lsa_detail,
+ show_opaque_lsa_detail,
+};
+
+static void show_lsa_prefix_set(struct vty *vty, struct prefix_ls *lp,
+ struct in_addr *id, struct in_addr *adv_router)
+{
+ memset(lp, 0, sizeof(struct prefix_ls));
+ lp->family = 0;
+ if (id == NULL)
+ lp->prefixlen = 0;
+ else if (adv_router == NULL) {
+ lp->prefixlen = 32;
+ lp->id = *id;
+ } else {
+ lp->prefixlen = 64;
+ lp->id = *id;
+ lp->adv_router = *adv_router;
+ }
}
-int (*show_function[])(struct vty *, struct ospf_lsa *) =
-{
- NULL,
- show_router_lsa_detail,
- show_network_lsa_detail,
- show_summary_lsa_detail,
- show_summary_asbr_lsa_detail,
- show_as_external_lsa_detail,
- show_func_dummy,
- show_as_nssa_lsa_detail, /* almost same as external */
- NULL, /* type-8 */
- show_opaque_lsa_detail,
- show_opaque_lsa_detail,
- show_opaque_lsa_detail,
-};
+static void show_lsa_detail_proc(struct vty *vty, struct route_table *rt,
+ struct in_addr *id, struct in_addr *adv_router)
+{
+ struct prefix_ls lp;
+ struct route_node *rn, *start;
+ struct ospf_lsa *lsa;
-static void
-show_lsa_prefix_set (struct vty *vty, struct prefix_ls *lp, struct in_addr *id,
- struct in_addr *adv_router)
-{
- memset (lp, 0, sizeof (struct prefix_ls));
- lp->family = 0;
- if (id == NULL)
- lp->prefixlen = 0;
- else if (adv_router == NULL)
- {
- lp->prefixlen = 32;
- lp->id = *id;
- }
- else
- {
- lp->prefixlen = 64;
- lp->id = *id;
- lp->adv_router = *adv_router;
- }
-}
-
-static void
-show_lsa_detail_proc (struct vty *vty, struct route_table *rt,
- struct in_addr *id, struct in_addr *adv_router)
-{
- struct prefix_ls lp;
- struct route_node *rn, *start;
- struct ospf_lsa *lsa;
-
- show_lsa_prefix_set (vty, &lp, id, adv_router);
- start = route_node_get (rt, (struct prefix *) &lp);
- if (start)
- {
- route_lock_node (start);
- for (rn = start; rn; rn = route_next_until (rn, start))
- if ((lsa = rn->info))
- {
- if (show_function[lsa->data->type] != NULL)
- show_function[lsa->data->type] (vty, lsa);
- }
- route_unlock_node (start);
- }
+ show_lsa_prefix_set(vty, &lp, id, adv_router);
+ start = route_node_get(rt, (struct prefix *)&lp);
+ if (start) {
+ route_lock_node(start);
+ for (rn = start; rn; rn = route_next_until(rn, start))
+ if ((lsa = rn->info)) {
+ if (show_function[lsa->data->type] != NULL)
+ show_function[lsa->data->type](vty,
+ lsa);
+ }
+ route_unlock_node(start);
+ }
}
/* Show detail LSA information
-- if id is NULL then show all LSAs. */
-static void
-show_lsa_detail (struct vty *vty, struct ospf *ospf, int type,
- struct in_addr *id, struct in_addr *adv_router)
-{
- struct listnode *node;
- struct ospf_area *area;
-
- switch (type)
- {
- case OSPF_AS_EXTERNAL_LSA:
- case OSPF_OPAQUE_AS_LSA:
- vty_out (vty, " %s \n\n",
- show_database_desc[type]);
- show_lsa_detail_proc (vty, AS_LSDB (ospf, type), id, adv_router);
- break;
- default:
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
- {
- vty_out (vty, "\n %s (Area %s)\n\n", show_database_desc[type],
- ospf_area_desc_string (area));
- show_lsa_detail_proc (vty, AREA_LSDB (area, type), id, adv_router);
- }
- break;
- }
-}
-
-static void
-show_lsa_detail_adv_router_proc (struct vty *vty, struct route_table *rt,
- struct in_addr *adv_router)
-{
- struct route_node *rn;
- struct ospf_lsa *lsa;
-
- for (rn = route_top (rt); rn; rn = route_next (rn))
- if ((lsa = rn->info))
- if (IPV4_ADDR_SAME (adv_router, &lsa->data->adv_router))
- {
- if (CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT))
- continue;
- if (show_function[lsa->data->type] != NULL)
- show_function[lsa->data->type] (vty, lsa);
+static void show_lsa_detail(struct vty *vty, struct ospf *ospf, int type,
+ struct in_addr *id, struct in_addr *adv_router)
+{
+ struct listnode *node;
+ struct ospf_area *area;
+
+ switch (type) {
+ case OSPF_AS_EXTERNAL_LSA:
+ case OSPF_OPAQUE_AS_LSA:
+ vty_out(vty, " %s \n\n",
+ show_database_desc[type]);
+ show_lsa_detail_proc(vty, AS_LSDB(ospf, type), id, adv_router);
+ break;
+ default:
+ for (ALL_LIST_ELEMENTS_RO(ospf->areas, node, area)) {
+ vty_out(vty, "\n %s (Area %s)\n\n",
+ show_database_desc[type],
+ ospf_area_desc_string(area));
+ show_lsa_detail_proc(vty, AREA_LSDB(area, type), id,
+ adv_router);
+ }
+ break;
}
}
+static void show_lsa_detail_adv_router_proc(struct vty *vty,
+ struct route_table *rt,
+ struct in_addr *adv_router)
+{
+ struct route_node *rn;
+ struct ospf_lsa *lsa;
+
+ for (rn = route_top(rt); rn; rn = route_next(rn))
+ if ((lsa = rn->info))
+ if (IPV4_ADDR_SAME(adv_router,
+ &lsa->data->adv_router)) {
+ if (CHECK_FLAG(lsa->flags, OSPF_LSA_LOCAL_XLT))
+ continue;
+ if (show_function[lsa->data->type] != NULL)
+ show_function[lsa->data->type](vty,
+ lsa);
+ }
+}
+
/* Show detail LSA information. */
-static void
-show_lsa_detail_adv_router (struct vty *vty, struct ospf *ospf, int type,
- struct in_addr *adv_router)
-{
- struct listnode *node;
- struct ospf_area *area;
-
- switch (type)
- {
- case OSPF_AS_EXTERNAL_LSA:
- case OSPF_OPAQUE_AS_LSA:
- vty_out (vty, " %s \n\n",
- show_database_desc[type]);
- show_lsa_detail_adv_router_proc (vty, AS_LSDB (ospf, type),
- adv_router);
- break;
- default:
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
- {
- vty_out (vty, "\n %s (Area %s)\n\n", show_database_desc[type],
- ospf_area_desc_string (area));
- show_lsa_detail_adv_router_proc (vty, AREA_LSDB (area, type),
- adv_router);
- }
- break;
- }
-}
-
-static void
-show_ip_ospf_database_summary (struct vty *vty, struct ospf *ospf, int self)
-{
- struct ospf_lsa *lsa;
- struct route_node *rn;
- struct ospf_area *area;
- struct listnode *node;
- int type;
-
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
- {
- for (type = OSPF_MIN_LSA; type < OSPF_MAX_LSA; type++)
- {
- switch (type)
- {
- case OSPF_AS_EXTERNAL_LSA:
- case OSPF_OPAQUE_AS_LSA:
- continue;
- default:
- break;
- }
- if (ospf_lsdb_count_self (area->lsdb, type) > 0 ||
- (!self && ospf_lsdb_count (area->lsdb, type) > 0))
- {
- vty_out (vty, " %s (Area %s)\n\n",
- show_database_desc[type],
- ospf_area_desc_string (area));
- vty_out (vty, "%s\n", show_database_header[type]);
-
- LSDB_LOOP (AREA_LSDB (area, type), rn, lsa)
- show_lsa_summary (vty, lsa, self);
-
- vty_out (vty, "\n");
- }
- }
- }
-
- for (type = OSPF_MIN_LSA; type < OSPF_MAX_LSA; type++)
- {
- switch (type)
- {
- case OSPF_AS_EXTERNAL_LSA:
- case OSPF_OPAQUE_AS_LSA:
- break;
- default:
- continue;
- }
- if (ospf_lsdb_count_self (ospf->lsdb, type) ||
- (!self && ospf_lsdb_count (ospf->lsdb, type)))
- {
- vty_out (vty, " %s\n\n",
- show_database_desc[type]);
- vty_out (vty, "%s\n", show_database_header[type]);
-
- LSDB_LOOP (AS_LSDB (ospf, type), rn, lsa)
- show_lsa_summary (vty, lsa, self);
-
- vty_out (vty, "\n");
- }
- }
-
- vty_out (vty, "\n");
-}
-
-static void
-show_ip_ospf_database_maxage (struct vty *vty, struct ospf *ospf)
-{
- struct route_node *rn;
-
- vty_out (vty, "\n MaxAge Link States:\n\n");
-
- for (rn = route_top (ospf->maxage_lsa); rn; rn = route_next (rn))
- {
- struct ospf_lsa *lsa;
-
- if ((lsa = rn->info) != NULL)
- {
- vty_out (vty, "Link type: %d\n", lsa->data->type);
- vty_out (vty, "Link State ID: %s\n",
- inet_ntoa (lsa->data->id));
- vty_out (vty, "Advertising Router: %s\n",
- inet_ntoa (lsa->data->adv_router));
- vty_out (vty, "LSA lock count: %d\n", lsa->lock);
- vty_out (vty, "\n");
+static void show_lsa_detail_adv_router(struct vty *vty, struct ospf *ospf,
+ int type, struct in_addr *adv_router)
+{
+ struct listnode *node;
+ struct ospf_area *area;
+
+ switch (type) {
+ case OSPF_AS_EXTERNAL_LSA:
+ case OSPF_OPAQUE_AS_LSA:
+ vty_out(vty, " %s \n\n",
+ show_database_desc[type]);
+ show_lsa_detail_adv_router_proc(vty, AS_LSDB(ospf, type),
+ adv_router);
+ break;
+ default:
+ for (ALL_LIST_ELEMENTS_RO(ospf->areas, node, area)) {
+ vty_out(vty, "\n %s (Area %s)\n\n",
+ show_database_desc[type],
+ ospf_area_desc_string(area));
+ show_lsa_detail_adv_router_proc(
+ vty, AREA_LSDB(area, type), adv_router);
+ }
+ break;
+ }
+}
+
+static void show_ip_ospf_database_summary(struct vty *vty, struct ospf *ospf,
+ int self)
+{
+ struct ospf_lsa *lsa;
+ struct route_node *rn;
+ struct ospf_area *area;
+ struct listnode *node;
+ int type;
+
+ for (ALL_LIST_ELEMENTS_RO(ospf->areas, node, area)) {
+ for (type = OSPF_MIN_LSA; type < OSPF_MAX_LSA; type++) {
+ switch (type) {
+ case OSPF_AS_EXTERNAL_LSA:
+ case OSPF_OPAQUE_AS_LSA:
+ continue;
+ default:
+ break;
+ }
+ if (ospf_lsdb_count_self(area->lsdb, type) > 0
+ || (!self
+ && ospf_lsdb_count(area->lsdb, type) > 0)) {
+ vty_out(vty, " %s (Area %s)\n\n",
+ show_database_desc[type],
+ ospf_area_desc_string(area));
+ vty_out(vty, "%s\n",
+ show_database_header[type]);
+
+ LSDB_LOOP(AREA_LSDB(area, type), rn, lsa)
+ show_lsa_summary(vty, lsa, self);
+
+ vty_out(vty, "\n");
+ }
+ }
+ }
+
+ for (type = OSPF_MIN_LSA; type < OSPF_MAX_LSA; type++) {
+ switch (type) {
+ case OSPF_AS_EXTERNAL_LSA:
+ case OSPF_OPAQUE_AS_LSA:
+ break;
+ default:
+ continue;
+ }
+ if (ospf_lsdb_count_self(ospf->lsdb, type)
+ || (!self && ospf_lsdb_count(ospf->lsdb, type))) {
+ vty_out(vty, " %s\n\n",
+ show_database_desc[type]);
+ vty_out(vty, "%s\n", show_database_header[type]);
+
+ LSDB_LOOP(AS_LSDB(ospf, type), rn, lsa)
+ show_lsa_summary(vty, lsa, self);
+
+ vty_out(vty, "\n");
+ }
+ }
+
+ vty_out(vty, "\n");
+}
+
+static void show_ip_ospf_database_maxage(struct vty *vty, struct ospf *ospf)
+{
+ struct route_node *rn;
+
+ vty_out(vty, "\n MaxAge Link States:\n\n");
+
+ for (rn = route_top(ospf->maxage_lsa); rn; rn = route_next(rn)) {
+ struct ospf_lsa *lsa;
+
+ if ((lsa = rn->info) != NULL) {
+ vty_out(vty, "Link type: %d\n", lsa->data->type);
+ vty_out(vty, "Link State ID: %s\n",
+ inet_ntoa(lsa->data->id));
+ vty_out(vty, "Advertising Router: %s\n",
+ inet_ntoa(lsa->data->adv_router));
+ vty_out(vty, "LSA lock count: %d\n", lsa->lock);
+ vty_out(vty, "\n");
+ }
}
- }
}
#define OSPF_LSA_TYPE_NSSA_DESC "NSSA external link state\n"
@@ -5217,98 +5314,89 @@ show_ip_ospf_database_maxage (struct vty *vty, struct ospf *ospf)
#define OSPF_LSA_TYPE_OPAQUE_AS_DESC "Link AS Opaque-LSA\n"
#define OSPF_LSA_TYPE_OPAQUE_CMD_STR "|opaque-link|opaque-area|opaque-as"
-#define OSPF_LSA_TYPES_DESC \
- "ASBR summary link states\n" \
- "External link states\n" \
- "Network link states\n" \
- "Router link states\n" \
- "Network summary link states\n" \
- OSPF_LSA_TYPE_NSSA_DESC \
- OSPF_LSA_TYPE_OPAQUE_LINK_DESC \
- OSPF_LSA_TYPE_OPAQUE_AREA_DESC \
- OSPF_LSA_TYPE_OPAQUE_AS_DESC
+#define OSPF_LSA_TYPES_DESC \
+ "ASBR summary link states\n" \
+ "External link states\n" \
+ "Network link states\n" \
+ "Router link states\n" \
+ "Network summary link states\n" OSPF_LSA_TYPE_NSSA_DESC \
+ OSPF_LSA_TYPE_OPAQUE_LINK_DESC OSPF_LSA_TYPE_OPAQUE_AREA_DESC \
+ OSPF_LSA_TYPE_OPAQUE_AS_DESC
+
+static int show_ip_ospf_database_common(struct vty *vty, struct ospf *ospf,
+ int arg_base, int argc,
+ struct cmd_token **argv)
+{
+ int idx_type = 4;
+ int type, ret;
+ struct in_addr id, adv_router;
+
+ if (ospf->instance)
+ vty_out(vty, "\nOSPF Instance: %d\n", ospf->instance);
+
+ vty_out(vty, "\n OSPF Router with ID (%s)\n\n",
+ inet_ntoa(ospf->router_id));
+
+ /* Show all LSA. */
+ if (argc == arg_base + 4) {
+ show_ip_ospf_database_summary(vty, ospf, 0);
+ return CMD_SUCCESS;
+ }
-static int
-show_ip_ospf_database_common (struct vty *vty, struct ospf *ospf,
- int arg_base, int argc, struct cmd_token **argv)
-{
- int idx_type = 4;
- int type, ret;
- struct in_addr id, adv_router;
-
- if (ospf->instance)
- vty_out (vty, "\nOSPF Instance: %d\n", ospf->instance);
-
- vty_out (vty, "\n OSPF Router with ID (%s)\n\n",
- inet_ntoa (ospf->router_id));
-
- /* Show all LSA. */
- if (argc == arg_base + 4)
- {
- show_ip_ospf_database_summary (vty, ospf, 0);
- return CMD_SUCCESS;
- }
-
- /* Set database type to show. */
- if (strncmp (argv[arg_base + idx_type]->text, "r", 1) == 0)
- type = OSPF_ROUTER_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "ne", 2) == 0)
- type = OSPF_NETWORK_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "ns", 2) == 0)
- type = OSPF_AS_NSSA_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "su", 2) == 0)
- type = OSPF_SUMMARY_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "a", 1) == 0)
- type = OSPF_ASBR_SUMMARY_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "e", 1) == 0)
- type = OSPF_AS_EXTERNAL_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "se", 2) == 0)
- {
- show_ip_ospf_database_summary (vty, ospf, 1);
- return CMD_SUCCESS;
- }
- else if (strncmp (argv[arg_base + idx_type]->text, "m", 1) == 0)
- {
- show_ip_ospf_database_maxage (vty, ospf);
- return CMD_SUCCESS;
- }
- else if (strncmp (argv[arg_base + idx_type]->text, "opaque-l", 8) == 0)
- type = OSPF_OPAQUE_LINK_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "opaque-ar", 9) == 0)
- type = OSPF_OPAQUE_AREA_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "opaque-as", 9) == 0)
- type = OSPF_OPAQUE_AS_LSA;
- else
- return CMD_WARNING;
-
- /* `show ip ospf database LSA'. */
- if (argc == arg_base + 5)
- show_lsa_detail (vty, ospf, type, NULL, NULL);
- else if (argc >= arg_base + 6)
- {
- ret = inet_aton (argv[arg_base + 5]->arg, &id);
- if (!ret)
- return CMD_WARNING;
-
- /* `show ip ospf database LSA ID'. */
- if (argc == arg_base + 6)
- show_lsa_detail (vty, ospf, type, &id, NULL);
- /* `show ip ospf database LSA ID adv-router ADV_ROUTER'. */
- else if (argc == arg_base + 7)
- {
- if (strncmp (argv[arg_base + 6]->text, "s", 1) == 0)
- adv_router = ospf->router_id;
- else
- {
- ret = inet_aton (argv[arg_base + 7]->arg, &adv_router);
- if (!ret)
+ /* Set database type to show. */
+ if (strncmp(argv[arg_base + idx_type]->text, "r", 1) == 0)
+ type = OSPF_ROUTER_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "ne", 2) == 0)
+ type = OSPF_NETWORK_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "ns", 2) == 0)
+ type = OSPF_AS_NSSA_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "su", 2) == 0)
+ type = OSPF_SUMMARY_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "a", 1) == 0)
+ type = OSPF_ASBR_SUMMARY_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "e", 1) == 0)
+ type = OSPF_AS_EXTERNAL_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "se", 2) == 0) {
+ show_ip_ospf_database_summary(vty, ospf, 1);
+ return CMD_SUCCESS;
+ } else if (strncmp(argv[arg_base + idx_type]->text, "m", 1) == 0) {
+ show_ip_ospf_database_maxage(vty, ospf);
+ return CMD_SUCCESS;
+ } else if (strncmp(argv[arg_base + idx_type]->text, "opaque-l", 8) == 0)
+ type = OSPF_OPAQUE_LINK_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "opaque-ar", 9) == 0)
+ type = OSPF_OPAQUE_AREA_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "opaque-as", 9) == 0)
+ type = OSPF_OPAQUE_AS_LSA;
+ else
return CMD_WARNING;
- }
- show_lsa_detail (vty, ospf, type, &id, &adv_router);
+
+ /* `show ip ospf database LSA'. */
+ if (argc == arg_base + 5)
+ show_lsa_detail(vty, ospf, type, NULL, NULL);
+ else if (argc >= arg_base + 6) {
+ ret = inet_aton(argv[arg_base + 5]->arg, &id);
+ if (!ret)
+ return CMD_WARNING;
+
+ /* `show ip ospf database LSA ID'. */
+ if (argc == arg_base + 6)
+ show_lsa_detail(vty, ospf, type, &id, NULL);
+ /* `show ip ospf database LSA ID adv-router ADV_ROUTER'. */
+ else if (argc == arg_base + 7) {
+ if (strncmp(argv[arg_base + 6]->text, "s", 1) == 0)
+ adv_router = ospf->router_id;
+ else {
+ ret = inet_aton(argv[arg_base + 7]->arg,
+ &adv_router);
+ if (!ret)
+ return CMD_WARNING;
+ }
+ show_lsa_detail(vty, ospf, type, &id, &adv_router);
+ }
}
- }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf_database_max,
@@ -5321,12 +5409,12 @@ DEFUN (show_ip_ospf_database_max,
"LSAs in MaxAge list\n"
"Self-originated link states\n")
{
- struct ospf *ospf;
+ struct ospf *ospf;
- if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
+ return CMD_SUCCESS;
- return (show_ip_ospf_database_common(vty, ospf, 0, argc, argv));
+ return (show_ip_ospf_database_common(vty, ospf, 0, argc, argv));
}
DEFUN (show_ip_ospf_instance_database,
@@ -5343,23 +5431,22 @@ DEFUN (show_ip_ospf_instance_database,
"Advertising Router link states\n"
"Advertising Router (as an IP address)\n")
{
- struct ospf *ospf;
- u_short instance = 0;
+ struct ospf *ospf;
+ u_short instance = 0;
- int idx = 0;
- if (argv_find (argv, argc, "(1-65535)", &idx))
- {
- instance = strtoul(argv[idx]->arg, NULL, 10);
- ospf = ospf_lookup_instance (instance);
- }
- else {
- ospf = ospf_lookup();
- }
+ int idx = 0;
+ if (argv_find(argv, argc, "(1-65535)", &idx)) {
+ instance = strtoul(argv[idx]->arg, NULL, 10);
+ ospf = ospf_lookup_instance(instance);
+ } else {
+ ospf = ospf_lookup();
+ }
- if (!ospf || !ospf->oi_running)
- return CMD_SUCCESS;
+ if (!ospf || !ospf->oi_running)
+ return CMD_SUCCESS;
- return (show_ip_ospf_database_common(vty, ospf, idx ? 1 : 0, argc, argv));
+ return (show_ip_ospf_database_common(vty, ospf, idx ? 1 : 0, argc,
+ argv));
}
DEFUN (show_ip_ospf_instance_database_max,
@@ -5373,68 +5460,69 @@ DEFUN (show_ip_ospf_instance_database_max,
"LSAs in MaxAge list\n"
"Self-originated link states\n")
{
- int idx_number = 3;
- struct ospf *ospf;
- u_short instance = 0;
-
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
-
- if ((ospf = ospf_lookup_instance (instance)) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
-
- return (show_ip_ospf_database_common(vty, ospf, 1, argc, argv));
-}
+ int idx_number = 3;
+ struct ospf *ospf;
+ u_short instance = 0;
+
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+
+ if ((ospf = ospf_lookup_instance(instance)) == NULL
+ || !ospf->oi_running)
+ return CMD_SUCCESS;
+
+ return (show_ip_ospf_database_common(vty, ospf, 1, argc, argv));
+}
+
+
+static int show_ip_ospf_database_type_adv_router_common(struct vty *vty,
+ struct ospf *ospf,
+ int arg_base, int argc,
+ struct cmd_token **argv)
+{
+ int idx_type = 4;
+ int type, ret;
+ struct in_addr adv_router;
+
+ if (ospf->instance)
+ vty_out(vty, "\nOSPF Instance: %d\n", ospf->instance);
+
+ vty_out(vty, "\n OSPF Router with ID (%s)\n\n",
+ inet_ntoa(ospf->router_id));
+
+ /* Set database type to show. */
+ if (strncmp(argv[arg_base + idx_type]->text, "r", 1) == 0)
+ type = OSPF_ROUTER_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "ne", 2) == 0)
+ type = OSPF_NETWORK_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "ns", 2) == 0)
+ type = OSPF_AS_NSSA_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "s", 1) == 0)
+ type = OSPF_SUMMARY_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "a", 1) == 0)
+ type = OSPF_ASBR_SUMMARY_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "e", 1) == 0)
+ type = OSPF_AS_EXTERNAL_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "opaque-l", 8) == 0)
+ type = OSPF_OPAQUE_LINK_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "opaque-ar", 9) == 0)
+ type = OSPF_OPAQUE_AREA_LSA;
+ else if (strncmp(argv[arg_base + idx_type]->text, "opaque-as", 9) == 0)
+ type = OSPF_OPAQUE_AS_LSA;
+ else
+ return CMD_WARNING;
+ /* `show ip ospf database LSA adv-router ADV_ROUTER'. */
+ if (strncmp(argv[arg_base + 5]->text, "s", 1) == 0)
+ adv_router = ospf->router_id;
+ else {
+ ret = inet_aton(argv[arg_base + 6]->arg, &adv_router);
+ if (!ret)
+ return CMD_WARNING;
+ }
-static int
-show_ip_ospf_database_type_adv_router_common (struct vty *vty, struct ospf *ospf,
- int arg_base, int argc, struct cmd_token **argv)
-{
- int idx_type = 4;
- int type, ret;
- struct in_addr adv_router;
-
- if (ospf->instance)
- vty_out (vty, "\nOSPF Instance: %d\n", ospf->instance);
-
- vty_out (vty, "\n OSPF Router with ID (%s)\n\n",
- inet_ntoa (ospf->router_id));
-
- /* Set database type to show. */
- if (strncmp (argv[arg_base + idx_type]->text, "r", 1) == 0)
- type = OSPF_ROUTER_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "ne", 2) == 0)
- type = OSPF_NETWORK_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "ns", 2) == 0)
- type = OSPF_AS_NSSA_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "s", 1) == 0)
- type = OSPF_SUMMARY_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "a", 1) == 0)
- type = OSPF_ASBR_SUMMARY_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "e", 1) == 0)
- type = OSPF_AS_EXTERNAL_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "opaque-l", 8) == 0)
- type = OSPF_OPAQUE_LINK_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "opaque-ar", 9) == 0)
- type = OSPF_OPAQUE_AREA_LSA;
- else if (strncmp (argv[arg_base + idx_type]->text, "opaque-as", 9) == 0)
- type = OSPF_OPAQUE_AS_LSA;
- else
- return CMD_WARNING;
-
- /* `show ip ospf database LSA adv-router ADV_ROUTER'. */
- if (strncmp (argv[arg_base + 5]->text, "s", 1) == 0)
- adv_router = ospf->router_id;
- else
- {
- ret = inet_aton (argv[arg_base + 6]->arg, &adv_router);
- if (!ret)
- return CMD_WARNING;
- }
-
- show_lsa_detail_adv_router (vty, ospf, type, &adv_router);
+ show_lsa_detail_adv_router(vty, ospf, type, &adv_router);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf_instance_database_type_adv_router,
@@ -5450,22 +5538,21 @@ DEFUN (show_ip_ospf_instance_database_type_adv_router,
"Advertising Router (as an IP address)\n"
"Self-originated link states\n")
{
- struct ospf *ospf;
- u_short instance = 0;
- int idx = 0;
+ struct ospf *ospf;
+ u_short instance = 0;
+ int idx = 0;
- if (argv_find(argv, argc, "(1-65535)", &idx))
- {
- instance = strtoul(argv[idx]->arg, NULL, 10);
- ospf = ospf_lookup_instance(instance);
- }
- else
- ospf = ospf_lookup();
+ if (argv_find(argv, argc, "(1-65535)", &idx)) {
+ instance = strtoul(argv[idx]->arg, NULL, 10);
+ ospf = ospf_lookup_instance(instance);
+ } else
+ ospf = ospf_lookup();
- if (!ospf || !ospf->oi_running)
- return CMD_SUCCESS;
+ if (!ospf || !ospf->oi_running)
+ return CMD_SUCCESS;
- return (show_ip_ospf_database_type_adv_router_common(vty, ospf, idx ? 1 : 0, argc, argv));
+ return (show_ip_ospf_database_type_adv_router_common(
+ vty, ospf, idx ? 1 : 0, argc, argv));
}
DEFUN (ip_ospf_authentication_args,
@@ -5478,46 +5565,43 @@ DEFUN (ip_ospf_authentication_args,
"Use message-digest authentication\n"
"Address of interface\n")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx_encryption = 3;
- int idx_ipv4 = 4;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- params = IF_DEF_PARAMS (ifp);
-
- if (argc == 5)
- {
- ret = inet_aton(argv[idx_ipv4]->arg, &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx_encryption = 3;
+ int idx_ipv4 = 4;
+ struct in_addr addr;
+ int ret;
+ struct ospf_if_params *params;
+
+ params = IF_DEF_PARAMS(ifp);
+
+ if (argc == 5) {
+ ret = inet_aton(argv[idx_ipv4]->arg, &addr);
+ if (!ret) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
- /* Handle null authentication */
- if ( argv[idx_encryption]->arg[0] == 'n' )
- {
- SET_IF_PARAM (params, auth_type);
- params->auth_type = OSPF_AUTH_NULL;
- return CMD_SUCCESS;
- }
+ /* Handle null authentication */
+ if (argv[idx_encryption]->arg[0] == 'n') {
+ SET_IF_PARAM(params, auth_type);
+ params->auth_type = OSPF_AUTH_NULL;
+ return CMD_SUCCESS;
+ }
- /* Handle message-digest authentication */
- if ( argv[idx_encryption]->arg[0] == 'm' )
- {
- SET_IF_PARAM (params, auth_type);
- params->auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
- return CMD_SUCCESS;
- }
+ /* Handle message-digest authentication */
+ if (argv[idx_encryption]->arg[0] == 'm') {
+ SET_IF_PARAM(params, auth_type);
+ params->auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
+ return CMD_SUCCESS;
+ }
- vty_out (vty, "You shouldn't get here!\n");
- return CMD_WARNING_CONFIG_FAILED;
+ vty_out(vty, "You shouldn't get here!\n");
+ return CMD_WARNING_CONFIG_FAILED;
}
DEFUN (ip_ospf_authentication,
@@ -5528,31 +5612,30 @@ DEFUN (ip_ospf_authentication,
"Enable authentication on this interface\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx_ipv4 = 3;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- params = IF_DEF_PARAMS (ifp);
-
- if (argc == 4)
- {
- ret = inet_aton(argv[idx_ipv4]->arg, &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx_ipv4 = 3;
+ struct in_addr addr;
+ int ret;
+ struct ospf_if_params *params;
+
+ params = IF_DEF_PARAMS(ifp);
+
+ if (argc == 4) {
+ ret = inet_aton(argv[idx_ipv4]->arg, &addr);
+ if (!ret) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
}
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-
- SET_IF_PARAM (params, auth_type);
- params->auth_type = OSPF_AUTH_SIMPLE;
+ SET_IF_PARAM(params, auth_type);
+ params->auth_type = OSPF_AUTH_SIMPLE;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ip_ospf_authentication_args,
@@ -5566,86 +5649,75 @@ DEFUN (no_ip_ospf_authentication_args,
"Use message-digest authentication\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx_encryption = 4;
- int idx_ipv4 = 5;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
- struct route_node *rn;
- int auth_type;
-
- params = IF_DEF_PARAMS (ifp);
-
- if (argc == 6)
- {
- ret = inet_aton(argv[idx_ipv4]->arg, &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx_encryption = 4;
+ int idx_ipv4 = 5;
+ struct in_addr addr;
+ int ret;
+ struct ospf_if_params *params;
+ struct route_node *rn;
+ int auth_type;
+
+ params = IF_DEF_PARAMS(ifp);
+
+ if (argc == 6) {
+ ret = inet_aton(argv[idx_ipv4]->arg, &addr);
+ if (!ret) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- {
- vty_out (vty, "Ip Address specified is unknown\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- params->auth_type = OSPF_AUTH_NOTSET;
- UNSET_IF_PARAM (params, auth_type);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- }
- else
- {
- if ( argv[idx_encryption]->arg[0] == 'n' )
- {
- auth_type = OSPF_AUTH_NULL;
- }
- else if ( argv[idx_encryption]->arg[0] == 'm' )
- {
- auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
- }
- else
- {
- vty_out (vty, "Unexpected input encountered\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- /*
- * Here we have a case where the user has entered
- * 'no ip ospf authentication (null | message_digest )'
- * we need to find if we have any ip addresses underneath it that
- * correspond to the associated type.
- */
- if (params->auth_type == auth_type)
- {
- params->auth_type = OSPF_AUTH_NOTSET;
- UNSET_IF_PARAM (params, auth_type);
- }
-
- for (rn = route_top (IF_OIFS_PARAMS (ifp)); rn; rn = route_next (rn))
- {
- if ((params = rn->info))
- {
- if (params->auth_type == auth_type)
- {
- params->auth_type = OSPF_AUTH_NOTSET;
- UNSET_IF_PARAM (params, auth_type);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, rn->p.u.prefix4);
- ospf_if_update_params(ifp, rn->p.u.prefix4);
- }
+ params = ospf_lookup_if_params(ifp, addr);
+ if (params == NULL) {
+ vty_out(vty, "Ip Address specified is unknown\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ params->auth_type = OSPF_AUTH_NOTSET;
+ UNSET_IF_PARAM(params, auth_type);
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
+ } else {
+ if (argv[idx_encryption]->arg[0] == 'n') {
+ auth_type = OSPF_AUTH_NULL;
+ } else if (argv[idx_encryption]->arg[0] == 'm') {
+ auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
+ } else {
+ vty_out(vty, "Unexpected input encountered\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ /*
+ * Here we have a case where the user has entered
+ * 'no ip ospf authentication (null | message_digest )'
+ * we need to find if we have any ip addresses underneath it
+ * that
+ * correspond to the associated type.
+ */
+ if (params->auth_type == auth_type) {
+ params->auth_type = OSPF_AUTH_NOTSET;
+ UNSET_IF_PARAM(params, auth_type);
+ }
+
+ for (rn = route_top(IF_OIFS_PARAMS(ifp)); rn;
+ rn = route_next(rn)) {
+ if ((params = rn->info)) {
+ if (params->auth_type == auth_type) {
+ params->auth_type = OSPF_AUTH_NOTSET;
+ UNSET_IF_PARAM(params, auth_type);
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(
+ ifp, rn->p.u.prefix4);
+ ospf_if_update_params(
+ ifp, rn->p.u.prefix4);
+ }
+ }
+ }
}
- }
}
- }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ip_ospf_authentication,
@@ -5657,76 +5729,71 @@ DEFUN (no_ip_ospf_authentication,
"Enable authentication on this interface\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx_ipv4 = 4;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
- struct route_node *rn;
-
- params = IF_DEF_PARAMS (ifp);
-
- if (argc == 5)
- {
- ret = inet_aton(argv[idx_ipv4]->arg, &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx_ipv4 = 4;
+ struct in_addr addr;
+ int ret;
+ struct ospf_if_params *params;
+ struct route_node *rn;
+
+ params = IF_DEF_PARAMS(ifp);
+
+ if (argc == 5) {
+ ret = inet_aton(argv[idx_ipv4]->arg, &addr);
+ if (!ret) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- {
- vty_out (vty, "Ip Address specified is unknown\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ params = ospf_lookup_if_params(ifp, addr);
+ if (params == NULL) {
+ vty_out(vty, "Ip Address specified is unknown\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- params->auth_type = OSPF_AUTH_NOTSET;
- UNSET_IF_PARAM (params, auth_type);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- }
- else
- {
- /*
- * When a user enters 'no ip ospf authentication'
- * We should remove all authentication types from
- * the interface.
- */
- if ((params->auth_type == OSPF_AUTH_NULL) ||
- (params->auth_type == OSPF_AUTH_CRYPTOGRAPHIC) ||
- (params->auth_type == OSPF_AUTH_SIMPLE))
- {
- params->auth_type = OSPF_AUTH_NOTSET;
- UNSET_IF_PARAM (params, auth_type);
- }
-
- for (rn = route_top (IF_OIFS_PARAMS (ifp)); rn; rn = route_next (rn))
- {
- if ((params = rn->info))
- {
+ params->auth_type = OSPF_AUTH_NOTSET;
+ UNSET_IF_PARAM(params, auth_type);
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
+ } else {
+ /*
+ * When a user enters 'no ip ospf authentication'
+ * We should remove all authentication types from
+ * the interface.
+ */
+ if ((params->auth_type == OSPF_AUTH_NULL)
+ || (params->auth_type == OSPF_AUTH_CRYPTOGRAPHIC)
+ || (params->auth_type == OSPF_AUTH_SIMPLE)) {
+ params->auth_type = OSPF_AUTH_NOTSET;
+ UNSET_IF_PARAM(params, auth_type);
+ }
- if ((params->auth_type == OSPF_AUTH_NULL) ||
- (params->auth_type == OSPF_AUTH_CRYPTOGRAPHIC) ||
- (params->auth_type == OSPF_AUTH_SIMPLE))
- {
- params->auth_type = OSPF_AUTH_NOTSET;
- UNSET_IF_PARAM (params, auth_type);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, rn->p.u.prefix4);
- ospf_if_update_params(ifp, rn->p.u.prefix4);
- }
+ for (rn = route_top(IF_OIFS_PARAMS(ifp)); rn;
+ rn = route_next(rn)) {
+ if ((params = rn->info)) {
+
+ if ((params->auth_type == OSPF_AUTH_NULL)
+ || (params->auth_type
+ == OSPF_AUTH_CRYPTOGRAPHIC)
+ || (params->auth_type
+ == OSPF_AUTH_SIMPLE)) {
+ params->auth_type = OSPF_AUTH_NOTSET;
+ UNSET_IF_PARAM(params, auth_type);
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(
+ ifp, rn->p.u.prefix4);
+ ospf_if_update_params(
+ ifp, rn->p.u.prefix4);
+ }
+ }
+ }
}
- }
}
- }
-
- return CMD_SUCCESS;
+
+ return CMD_SUCCESS;
}
@@ -5739,30 +5806,30 @@ DEFUN (ip_ospf_authentication_key,
"The OSPF password (key)\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- struct in_addr addr;
- struct ospf_if_params *params;
-
- params = IF_DEF_PARAMS (ifp);
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ struct in_addr addr;
+ struct ospf_if_params *params;
- if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- if (!inet_aton(argv[idx]->arg, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ params = IF_DEF_PARAMS(ifp);
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
+ if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ if (!inet_aton(argv[idx]->arg, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- memset (params->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
- strncpy ((char *) params->auth_simple, argv[3]->arg, OSPF_AUTH_SIMPLE_SIZE);
- SET_IF_PARAM (params, auth_simple);
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
- return CMD_SUCCESS;
+ memset(params->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
+ strncpy((char *)params->auth_simple, argv[3]->arg,
+ OSPF_AUTH_SIMPLE_SIZE);
+ SET_IF_PARAM(params, auth_simple);
+
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (ospf_authentication_key,
@@ -5773,7 +5840,7 @@ DEFUN_HIDDEN (ospf_authentication_key,
"The OSPF password (key)\n"
"Address of interface\n")
{
- return ip_ospf_authentication_key (self, vty, argc, argv);
+ return ip_ospf_authentication_key(self, vty, argc, argv);
}
DEFUN (no_ip_ospf_authentication_key,
@@ -5785,35 +5852,33 @@ DEFUN (no_ip_ospf_authentication_key,
"Authentication password (key)\n"
"The OSPF password (key)")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- struct in_addr addr;
- struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ struct in_addr addr;
+ struct ospf_if_params *params;
+ params = IF_DEF_PARAMS(ifp);
+
+ if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ if (!inet_aton(argv[idx]->arg, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- if (!inet_aton(argv[idx]->arg, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
+ params = ospf_lookup_if_params(ifp, addr);
+ if (params == NULL)
+ return CMD_SUCCESS;
}
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
-
- memset (params->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE);
- UNSET_IF_PARAM (params, auth_simple);
+ memset(params->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE);
+ UNSET_IF_PARAM(params, auth_simple);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (no_ospf_authentication_key,
@@ -5824,7 +5889,7 @@ DEFUN_HIDDEN (no_ospf_authentication_key,
"Authentication password (key)\n"
"The OSPF password (key)")
{
- return no_ip_ospf_authentication_key (self, vty, argc, argv);
+ return no_ip_ospf_authentication_key(self, vty, argc, argv);
}
DEFUN (ip_ospf_message_digest_key,
@@ -5838,48 +5903,46 @@ DEFUN (ip_ospf_message_digest_key,
"The OSPF password (key)\n"
"Address of interface\n")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- struct crypt_key *ck;
- u_char key_id;
- struct in_addr addr;
- struct ospf_if_params *params;
-
- params = IF_DEF_PARAMS (ifp);
- int idx = 0;
-
- argv_find (argv, argc, "(1-255)", &idx);
- char *keyid = argv[idx]->arg;
- argv_find (argv, argc, "KEY", &idx);
- char *cryptkey = argv[idx]->arg;
-
- if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- if (!inet_aton(argv[idx]->arg, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ struct crypt_key *ck;
+ u_char key_id;
+ struct in_addr addr;
+ struct ospf_if_params *params;
+
+ params = IF_DEF_PARAMS(ifp);
+ int idx = 0;
+
+ argv_find(argv, argc, "(1-255)", &idx);
+ char *keyid = argv[idx]->arg;
+ argv_find(argv, argc, "KEY", &idx);
+ char *cryptkey = argv[idx]->arg;
+
+ if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ if (!inet_aton(argv[idx]->arg, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
}
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
+ key_id = strtol(keyid, NULL, 10);
+ if (ospf_crypt_key_lookup(params->auth_crypt, key_id) != NULL) {
+ vty_out(vty, "OSPF: Key %d already exists\n", key_id);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- key_id = strtol (keyid, NULL, 10);
- if (ospf_crypt_key_lookup (params->auth_crypt, key_id) != NULL)
- {
- vty_out (vty, "OSPF: Key %d already exists\n", key_id);
- return CMD_WARNING_CONFIG_FAILED;
- }
+ ck = ospf_crypt_key_new();
+ ck->key_id = (u_char)key_id;
+ memset(ck->auth_key, 0, OSPF_AUTH_MD5_SIZE + 1);
+ strncpy((char *)ck->auth_key, cryptkey, OSPF_AUTH_MD5_SIZE);
- ck = ospf_crypt_key_new ();
- ck->key_id = (u_char) key_id;
- memset (ck->auth_key, 0, OSPF_AUTH_MD5_SIZE+1);
- strncpy ((char *) ck->auth_key, cryptkey, OSPF_AUTH_MD5_SIZE);
+ ospf_crypt_key_add(params->auth_crypt, ck);
+ SET_IF_PARAM(params, auth_crypt);
- ospf_crypt_key_add (params->auth_crypt, ck);
- SET_IF_PARAM (params, auth_crypt);
-
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (ospf_message_digest_key,
@@ -5892,7 +5955,7 @@ DEFUN_HIDDEN (ospf_message_digest_key,
"The OSPF password (key)\n"
"Address of interface\n")
{
- return ip_ospf_message_digest_key (self, vty, argc, argv);
+ return ip_ospf_message_digest_key(self, vty, argc, argv);
}
DEFUN (no_ip_ospf_message_digest_key,
@@ -5907,47 +5970,44 @@ DEFUN (no_ip_ospf_message_digest_key,
"The OSPF password (key)\n"
"Address of interface\n")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- struct crypt_key *ck;
- int key_id;
- struct in_addr addr;
- struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
-
- argv_find (argv, argc, "(1-255)", &idx);
- char *keyid = argv[idx]->arg;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ struct crypt_key *ck;
+ int key_id;
+ struct in_addr addr;
+ struct ospf_if_params *params;
+ params = IF_DEF_PARAMS(ifp);
+
+ argv_find(argv, argc, "(1-255)", &idx);
+ char *keyid = argv[idx]->arg;
+
+ if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ if (!inet_aton(argv[idx]->arg, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- if (!inet_aton(argv[idx]->arg, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
+ params = ospf_lookup_if_params(ifp, addr);
+ if (params == NULL)
+ return CMD_SUCCESS;
}
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
-
- key_id = strtol (keyid, NULL, 10);
- ck = ospf_crypt_key_lookup (params->auth_crypt, key_id);
- if (ck == NULL)
- {
- vty_out (vty, "OSPF: Key %d does not exist\n", key_id);
- return CMD_WARNING_CONFIG_FAILED;
- }
+ key_id = strtol(keyid, NULL, 10);
+ ck = ospf_crypt_key_lookup(params->auth_crypt, key_id);
+ if (ck == NULL) {
+ vty_out(vty, "OSPF: Key %d does not exist\n", key_id);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- ospf_crypt_key_delete (params->auth_crypt, key_id);
+ ospf_crypt_key_delete(params->auth_crypt, key_id);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (no_ospf_message_digest_key,
@@ -5959,7 +6019,7 @@ DEFUN_HIDDEN (no_ospf_message_digest_key,
"Key ID\n"
"Address of interface")
{
- return no_ip_ospf_message_digest_key (self, vty, argc, argv);
+ return no_ip_ospf_message_digest_key(self, vty, argc, argv);
}
DEFUN (ip_ospf_cost,
@@ -5971,38 +6031,38 @@ DEFUN (ip_ospf_cost,
"Cost\n"
"Address of interface\n")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- u_int32_t cost;
- struct in_addr addr;
- struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
-
- // get arguments
- char *coststr = NULL, *ifaddr = NULL;
- coststr = argv_find (argv, argc, "(1-65535)", &idx) ? argv[idx]->arg : NULL;
- ifaddr = argv_find (argv, argc, "A.B.C.D", &idx) ? argv[idx]->arg : NULL;
-
- cost = strtol (coststr, NULL, 10);
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ u_int32_t cost;
+ struct in_addr addr;
+ struct ospf_if_params *params;
+ params = IF_DEF_PARAMS(ifp);
+
+ // get arguments
+ char *coststr = NULL, *ifaddr = NULL;
+ coststr = argv_find(argv, argc, "(1-65535)", &idx) ? argv[idx]->arg
+ : NULL;
+ ifaddr = argv_find(argv, argc, "A.B.C.D", &idx) ? argv[idx]->arg : NULL;
+
+ cost = strtol(coststr, NULL, 10);
+
+ if (ifaddr) {
+ if (!inet_aton(ifaddr, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if (ifaddr)
- {
- if(!inet_aton(ifaddr, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
}
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
+ SET_IF_PARAM(params, output_cost_cmd);
+ params->output_cost_cmd = cost;
- SET_IF_PARAM (params, output_cost_cmd);
- params->output_cost_cmd = cost;
+ ospf_if_recalculate_output_cost(ifp);
- ospf_if_recalculate_output_cost (ifp);
-
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (ospf_cost,
@@ -6013,7 +6073,7 @@ DEFUN_HIDDEN (ospf_cost,
"Cost\n"
"Address of interface\n")
{
- return ip_ospf_cost (self, vty, argc, argv);
+ return ip_ospf_cost(self, vty, argc, argv);
}
DEFUN (no_ip_ospf_cost,
@@ -6024,45 +6084,43 @@ DEFUN (no_ip_ospf_cost,
"Interface cost\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- struct in_addr addr;
- struct ospf_if_params *params;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ struct in_addr addr;
+ struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
+ params = IF_DEF_PARAMS(ifp);
- // get arguments
- char *ifaddr = NULL;
- ifaddr = argv_find (argv, argc, "A.B.C.D", &idx) ? argv[idx]->arg : NULL;
+ // get arguments
+ char *ifaddr = NULL;
+ ifaddr = argv_find(argv, argc, "A.B.C.D", &idx) ? argv[idx]->arg : NULL;
- /* According to the semantics we are mimicking "no ip ospf cost N" is
- * always treated as "no ip ospf cost" regardless of the actual value
- * of N already configured for the interface. Thus ignore cost. */
+ /* According to the semantics we are mimicking "no ip ospf cost N" is
+ * always treated as "no ip ospf cost" regardless of the actual value
+ * of N already configured for the interface. Thus ignore cost. */
- if (ifaddr)
- {
- if (!inet_aton(ifaddr, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (ifaddr) {
+ if (!inet_aton(ifaddr, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
+ params = ospf_lookup_if_params(ifp, addr);
+ if (params == NULL)
+ return CMD_SUCCESS;
+ }
- UNSET_IF_PARAM (params, output_cost_cmd);
+ UNSET_IF_PARAM(params, output_cost_cmd);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
- ospf_if_recalculate_output_cost (ifp);
+ ospf_if_recalculate_output_cost(ifp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (no_ospf_cost,
@@ -6074,98 +6132,86 @@ DEFUN_HIDDEN (no_ospf_cost,
"Cost\n"
"Address of interface\n")
{
- return no_ip_ospf_cost (self, vty, argc, argv);
+ return no_ip_ospf_cost(self, vty, argc, argv);
}
-static void
-ospf_nbr_timer_update (struct ospf_interface *oi)
+static void ospf_nbr_timer_update(struct ospf_interface *oi)
{
- struct route_node *rn;
- struct ospf_neighbor *nbr;
+ struct route_node *rn;
+ struct ospf_neighbor *nbr;
- for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
- if ((nbr = rn->info))
- {
- nbr->v_inactivity = OSPF_IF_PARAM (oi, v_wait);
- nbr->v_db_desc = OSPF_IF_PARAM (oi, retransmit_interval);
- nbr->v_ls_req = OSPF_IF_PARAM (oi, retransmit_interval);
- nbr->v_ls_upd = OSPF_IF_PARAM (oi, retransmit_interval);
- }
+ for (rn = route_top(oi->nbrs); rn; rn = route_next(rn))
+ if ((nbr = rn->info)) {
+ nbr->v_inactivity = OSPF_IF_PARAM(oi, v_wait);
+ nbr->v_db_desc = OSPF_IF_PARAM(oi, retransmit_interval);
+ nbr->v_ls_req = OSPF_IF_PARAM(oi, retransmit_interval);
+ nbr->v_ls_upd = OSPF_IF_PARAM(oi, retransmit_interval);
+ }
}
-static int
-ospf_vty_dead_interval_set (struct vty *vty, const char *interval_str,
- const char *nbr_str,
- const char *fast_hello_str)
-{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- u_int32_t seconds;
- u_char hellomult;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
- struct ospf_interface *oi;
- struct route_node *rn;
-
- params = IF_DEF_PARAMS (ifp);
-
- if (nbr_str)
- {
- ret = inet_aton(nbr_str, &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-
- if (interval_str)
- {
- seconds = strtoul(interval_str, NULL, 10);
-
- /* reset fast_hello too, just to be sure */
- UNSET_IF_PARAM (params, fast_hello);
- params->fast_hello = OSPF_FAST_HELLO_DEFAULT;
- }
- else if (fast_hello_str)
- {
- hellomult = strtoul(fast_hello_str, NULL, 10);
- /* 1s dead-interval with sub-second hellos desired */
- seconds = OSPF_ROUTER_DEAD_INTERVAL_MINIMAL;
- SET_IF_PARAM (params, fast_hello);
- params->fast_hello = hellomult;
- }
- else
- {
- vty_out (vty, "Please specify dead-interval or hello-multiplier\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- SET_IF_PARAM (params, v_wait);
- params->v_wait = seconds;
-
- /* Update timer values in neighbor structure. */
- if (nbr_str)
- {
- struct ospf *ospf;
- if ((ospf = ospf_lookup()))
- {
- oi = ospf_if_lookup_by_local_addr (ospf, ifp, addr);
- if (oi)
- ospf_nbr_timer_update (oi);
- }
- }
- else
- {
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- if ((oi = rn->info))
- ospf_nbr_timer_update (oi);
- }
+static int ospf_vty_dead_interval_set(struct vty *vty, const char *interval_str,
+ const char *nbr_str,
+ const char *fast_hello_str)
+{
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ u_int32_t seconds;
+ u_char hellomult;
+ struct in_addr addr;
+ int ret;
+ struct ospf_if_params *params;
+ struct ospf_interface *oi;
+ struct route_node *rn;
- return CMD_SUCCESS;
+ params = IF_DEF_PARAMS(ifp);
+
+ if (nbr_str) {
+ ret = inet_aton(nbr_str, &addr);
+ if (!ret) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
+
+ if (interval_str) {
+ seconds = strtoul(interval_str, NULL, 10);
+
+ /* reset fast_hello too, just to be sure */
+ UNSET_IF_PARAM(params, fast_hello);
+ params->fast_hello = OSPF_FAST_HELLO_DEFAULT;
+ } else if (fast_hello_str) {
+ hellomult = strtoul(fast_hello_str, NULL, 10);
+ /* 1s dead-interval with sub-second hellos desired */
+ seconds = OSPF_ROUTER_DEAD_INTERVAL_MINIMAL;
+ SET_IF_PARAM(params, fast_hello);
+ params->fast_hello = hellomult;
+ } else {
+ vty_out(vty,
+ "Please specify dead-interval or hello-multiplier\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ SET_IF_PARAM(params, v_wait);
+ params->v_wait = seconds;
+
+ /* Update timer values in neighbor structure. */
+ if (nbr_str) {
+ struct ospf *ospf;
+ if ((ospf = ospf_lookup())) {
+ oi = ospf_if_lookup_by_local_addr(ospf, ifp, addr);
+ if (oi)
+ ospf_nbr_timer_update(oi);
+ }
+ } else {
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn))
+ if ((oi = rn->info))
+ ospf_nbr_timer_update(oi);
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (ip_ospf_dead_interval,
@@ -6177,10 +6223,13 @@ DEFUN (ip_ospf_dead_interval,
"Seconds\n"
"Address of interface\n")
{
- int idx = 0;
- char *interval = argv_find (argv, argc, "(1-65535)", &idx) ? argv[idx]->arg : NULL;
- char *ifaddr = argv_find (argv, argc, "A.B.C.D", &idx) ? argv[idx]->arg : NULL;
- return ospf_vty_dead_interval_set (vty, interval, ifaddr, NULL);
+ int idx = 0;
+ char *interval = argv_find(argv, argc, "(1-65535)", &idx)
+ ? argv[idx]->arg
+ : NULL;
+ char *ifaddr =
+ argv_find(argv, argc, "A.B.C.D", &idx) ? argv[idx]->arg : NULL;
+ return ospf_vty_dead_interval_set(vty, interval, ifaddr, NULL);
}
@@ -6192,7 +6241,7 @@ DEFUN_HIDDEN (ospf_dead_interval,
"Seconds\n"
"Address of interface\n")
{
- return ip_ospf_dead_interval (self, vty, argc, argv);
+ return ip_ospf_dead_interval(self, vty, argc, argv);
}
DEFUN (ip_ospf_dead_interval_minimal,
@@ -6206,12 +6255,14 @@ DEFUN (ip_ospf_dead_interval_minimal,
"Number of Hellos to send each second\n"
"Address of interface\n")
{
- int idx_number = 5;
- int idx_ipv4 = 6;
- if (argc == 7)
- return ospf_vty_dead_interval_set (vty, NULL, argv[idx_ipv4]->arg, argv[idx_number]->arg);
- else
- return ospf_vty_dead_interval_set (vty, NULL, NULL, argv[idx_number]->arg);
+ int idx_number = 5;
+ int idx_ipv4 = 6;
+ if (argc == 7)
+ return ospf_vty_dead_interval_set(
+ vty, NULL, argv[idx_ipv4]->arg, argv[idx_number]->arg);
+ else
+ return ospf_vty_dead_interval_set(vty, NULL, NULL,
+ argv[idx_number]->arg);
}
DEFUN (no_ip_ospf_dead_interval,
@@ -6224,62 +6275,56 @@ DEFUN (no_ip_ospf_dead_interval,
"Seconds\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx_ipv4 = argc - 1;
- struct in_addr addr = { .s_addr = 0L};
- int ret;
- struct ospf_if_params *params;
- struct ospf_interface *oi;
- struct route_node *rn;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx_ipv4 = argc - 1;
+ struct in_addr addr = {.s_addr = 0L};
+ int ret;
+ struct ospf_if_params *params;
+ struct ospf_interface *oi;
+ struct route_node *rn;
+
+ params = IF_DEF_PARAMS(ifp);
+
+ if (argv[idx_ipv4]->type == IPV4_TKN) {
+ ret = inet_aton(argv[idx_ipv4]->arg, &addr);
+ if (!ret) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- params = IF_DEF_PARAMS (ifp);
+ params = ospf_lookup_if_params(ifp, addr);
+ if (params == NULL)
+ return CMD_SUCCESS;
+ }
- if (argv[idx_ipv4]->type == IPV4_TKN)
- {
- ret = inet_aton(argv[idx_ipv4]->arg, &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
+ UNSET_IF_PARAM(params, v_wait);
+ params->v_wait = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
+
+ UNSET_IF_PARAM(params, fast_hello);
+ params->fast_hello = OSPF_FAST_HELLO_DEFAULT;
+
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
}
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
-
- UNSET_IF_PARAM (params, v_wait);
- params->v_wait = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
-
- UNSET_IF_PARAM (params, fast_hello);
- params->fast_hello = OSPF_FAST_HELLO_DEFAULT;
-
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-
- /* Update timer values in neighbor structure. */
- if (argc == 1)
- {
- struct ospf *ospf;
-
- if ((ospf = ospf_lookup()))
- {
- oi = ospf_if_lookup_by_local_addr (ospf, ifp, addr);
- if (oi)
- ospf_nbr_timer_update (oi);
- }
- }
- else
- {
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- if ((oi = rn->info))
- ospf_nbr_timer_update (oi);
- }
+ /* Update timer values in neighbor structure. */
+ if (argc == 1) {
+ struct ospf *ospf;
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup())) {
+ oi = ospf_if_lookup_by_local_addr(ospf, ifp, addr);
+ if (oi)
+ ospf_nbr_timer_update(oi);
+ }
+ } else {
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn))
+ if ((oi = rn->info))
+ ospf_nbr_timer_update(oi);
+ }
+
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (no_ospf_dead_interval,
@@ -6291,7 +6336,7 @@ DEFUN_HIDDEN (no_ospf_dead_interval,
"Seconds\n"
"Address of interface")
{
- return no_ip_ospf_dead_interval (self, vty, argc, argv);
+ return no_ip_ospf_dead_interval(self, vty, argc, argv);
}
DEFUN (ip_ospf_hello_interval,
@@ -6303,32 +6348,31 @@ DEFUN (ip_ospf_hello_interval,
"Seconds\n"
"Address of interface\n")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- struct in_addr addr;
- struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
- u_int32_t seconds = 0;
-
- argv_find (argv, argc, "(1-65535)", &idx);
- seconds = strtol (argv[idx]->arg, NULL, 10);
-
- if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- if(!inet_aton(argv[idx]->arg, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ struct in_addr addr;
+ struct ospf_if_params *params;
+ params = IF_DEF_PARAMS(ifp);
+ u_int32_t seconds = 0;
+
+ argv_find(argv, argc, "(1-65535)", &idx);
+ seconds = strtol(argv[idx]->arg, NULL, 10);
+
+ if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ if (!inet_aton(argv[idx]->arg, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
- SET_IF_PARAM (params, v_hello);
- params->v_hello = seconds;
+ SET_IF_PARAM(params, v_hello);
+ params->v_hello = seconds;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (ospf_hello_interval,
@@ -6339,7 +6383,7 @@ DEFUN_HIDDEN (ospf_hello_interval,
"Seconds\n"
"Address of interface\n")
{
- return ip_ospf_hello_interval (self, vty, argc, argv);
+ return ip_ospf_hello_interval(self, vty, argc, argv);
}
DEFUN (no_ip_ospf_hello_interval,
@@ -6352,36 +6396,34 @@ DEFUN (no_ip_ospf_hello_interval,
"Seconds\n"
"Address of interface\n")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- struct in_addr addr;
- struct ospf_if_params *params;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ struct in_addr addr;
+ struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
+ params = IF_DEF_PARAMS(ifp);
- if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- if(!inet_aton(argv[idx]->arg, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ if (!inet_aton(argv[idx]->arg, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
+ params = ospf_lookup_if_params(ifp, addr);
+ if (params == NULL)
+ return CMD_SUCCESS;
+ }
- UNSET_IF_PARAM (params, v_hello);
- params->v_hello = OSPF_HELLO_INTERVAL_DEFAULT;
+ UNSET_IF_PARAM(params, v_hello);
+ params->v_hello = OSPF_HELLO_INTERVAL_DEFAULT;
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (no_ospf_hello_interval,
@@ -6393,7 +6435,7 @@ DEFUN_HIDDEN (no_ospf_hello_interval,
"Seconds\n"
"Address of interface\n")
{
- return no_ip_ospf_hello_interval (self, vty, argc, argv);
+ return no_ip_ospf_hello_interval(self, vty, argc, argv);
}
DEFUN (ip_ospf_network,
@@ -6407,48 +6449,46 @@ DEFUN (ip_ospf_network,
"Specify OSPF point-to-multipoint network\n"
"Specify OSPF point-to-point network\n")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- int old_type = IF_DEF_PARAMS (ifp)->type;
- struct route_node *rn;
-
- if (old_type == OSPF_IFTYPE_LOOPBACK)
- {
- vty_out (vty, "This is a loopback interface. Can't set network type.\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (argv_find (argv, argc, "broadcast", &idx))
- IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_BROADCAST;
- else if (argv_find (argv, argc, "non-broadcast", &idx))
- IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_NBMA;
- else if (argv_find (argv, argc, "point-to-multipoint", &idx))
- IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_POINTOMULTIPOINT;
- else if (argv_find (argv, argc, "point-to-point", &idx))
- IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_POINTOPOINT;
-
- if (IF_DEF_PARAMS (ifp)->type == old_type)
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ int old_type = IF_DEF_PARAMS(ifp)->type;
+ struct route_node *rn;
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), type);
+ if (old_type == OSPF_IFTYPE_LOOPBACK) {
+ vty_out(vty,
+ "This is a loopback interface. Can't set network type.\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
+ if (argv_find(argv, argc, "broadcast", &idx))
+ IF_DEF_PARAMS(ifp)->type = OSPF_IFTYPE_BROADCAST;
+ else if (argv_find(argv, argc, "non-broadcast", &idx))
+ IF_DEF_PARAMS(ifp)->type = OSPF_IFTYPE_NBMA;
+ else if (argv_find(argv, argc, "point-to-multipoint", &idx))
+ IF_DEF_PARAMS(ifp)->type = OSPF_IFTYPE_POINTOMULTIPOINT;
+ else if (argv_find(argv, argc, "point-to-point", &idx))
+ IF_DEF_PARAMS(ifp)->type = OSPF_IFTYPE_POINTOPOINT;
- if (!oi)
- continue;
-
- oi->type = IF_DEF_PARAMS (ifp)->type;
-
- if (oi->state > ISM_Down)
- {
- OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceDown);
- OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceUp);
+ if (IF_DEF_PARAMS(ifp)->type == old_type)
+ return CMD_SUCCESS;
+
+ SET_IF_PARAM(IF_DEF_PARAMS(ifp), type);
+
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
+ struct ospf_interface *oi = rn->info;
+
+ if (!oi)
+ continue;
+
+ oi->type = IF_DEF_PARAMS(ifp)->type;
+
+ if (oi->state > ISM_Down) {
+ OSPF_ISM_EVENT_EXECUTE(oi, ISM_InterfaceDown);
+ OSPF_ISM_EVENT_EXECUTE(oi, ISM_InterfaceUp);
+ }
}
- }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (ospf_network,
@@ -6461,7 +6501,7 @@ DEFUN_HIDDEN (ospf_network,
"Specify OSPF point-to-multipoint network\n"
"Specify OSPF point-to-point network\n")
{
- return ip_ospf_network (self, vty, argc, argv);
+ return ip_ospf_network(self, vty, argc, argv);
}
DEFUN (no_ip_ospf_network,
@@ -6476,32 +6516,30 @@ DEFUN (no_ip_ospf_network,
"Specify OSPF point-to-multipoint network\n"
"Specify OSPF point-to-point network\n")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int old_type = IF_DEF_PARAMS (ifp)->type;
- struct route_node *rn;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int old_type = IF_DEF_PARAMS(ifp)->type;
+ struct route_node *rn;
- IF_DEF_PARAMS (ifp)->type = ospf_default_iftype(ifp);
+ IF_DEF_PARAMS(ifp)->type = ospf_default_iftype(ifp);
- if (IF_DEF_PARAMS (ifp)->type == old_type)
- return CMD_SUCCESS;
+ if (IF_DEF_PARAMS(ifp)->type == old_type)
+ return CMD_SUCCESS;
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
+ struct ospf_interface *oi = rn->info;
- if (!oi)
- continue;
+ if (!oi)
+ continue;
- oi->type = IF_DEF_PARAMS (ifp)->type;
+ oi->type = IF_DEF_PARAMS(ifp)->type;
- if (oi->state > ISM_Down)
- {
- OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceDown);
- OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceUp);
+ if (oi->state > ISM_Down) {
+ OSPF_ISM_EVENT_EXECUTE(oi, ISM_InterfaceDown);
+ OSPF_ISM_EVENT_EXECUTE(oi, ISM_InterfaceUp);
+ }
}
- }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (no_ospf_network,
@@ -6515,7 +6553,7 @@ DEFUN_HIDDEN (no_ospf_network,
"Specify OSPF point-to-multipoint network\n"
"Specify OSPF point-to-point network\n")
{
- return no_ip_ospf_network (self, vty, argc, argv);
+ return no_ip_ospf_network(self, vty, argc, argv);
}
DEFUN (ip_ospf_priority,
@@ -6527,47 +6565,44 @@ DEFUN (ip_ospf_priority,
"Priority\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- long priority;
- struct route_node *rn;
- struct in_addr addr;
- struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
-
- argv_find (argv, argc, "(0-255)", &idx);
- priority = strtol (argv[idx]->arg, NULL, 10);
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ long priority;
+ struct route_node *rn;
+ struct in_addr addr;
+ struct ospf_if_params *params;
+ params = IF_DEF_PARAMS(ifp);
+
+ argv_find(argv, argc, "(0-255)", &idx);
+ priority = strtol(argv[idx]->arg, NULL, 10);
+
+ if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ if (!inet_aton(argv[idx]->arg, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- if (!inet_aton(argv[idx]->arg, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
}
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-
- SET_IF_PARAM (params, priority);
- params->priority = priority;
+ SET_IF_PARAM(params, priority);
+ params->priority = priority;
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
+ struct ospf_interface *oi = rn->info;
- if (!oi)
- continue;
+ if (!oi)
+ continue;
- if (PRIORITY (oi) != OSPF_IF_PARAM (oi, priority))
- {
- PRIORITY (oi) = OSPF_IF_PARAM (oi, priority);
- OSPF_ISM_EVENT_SCHEDULE (oi, ISM_NeighborChange);
+ if (PRIORITY(oi) != OSPF_IF_PARAM(oi, priority)) {
+ PRIORITY(oi) = OSPF_IF_PARAM(oi, priority);
+ OSPF_ISM_EVENT_SCHEDULE(oi, ISM_NeighborChange);
+ }
}
- }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (ospf_priority,
@@ -6578,7 +6613,7 @@ DEFUN_HIDDEN (ospf_priority,
"Priority\n"
"Address of interface")
{
- return ip_ospf_priority (self, vty, argc, argv);
+ return ip_ospf_priority(self, vty, argc, argv);
}
DEFUN (no_ip_ospf_priority,
@@ -6591,51 +6626,47 @@ DEFUN (no_ip_ospf_priority,
"Priority\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- struct route_node *rn;
- struct in_addr addr;
- struct ospf_if_params *params;
-
- params = IF_DEF_PARAMS (ifp);
-
- if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- if (!inet_aton(argv[idx]->arg, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ struct route_node *rn;
+ struct in_addr addr;
+ struct ospf_if_params *params;
+
+ params = IF_DEF_PARAMS(ifp);
+
+ if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ if (!inet_aton(argv[idx]->arg, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ params = ospf_lookup_if_params(ifp, addr);
+ if (params == NULL)
+ return CMD_SUCCESS;
}
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
-
- UNSET_IF_PARAM (params, priority);
- params->priority = OSPF_ROUTER_PRIORITY_DEFAULT;
-
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
-
- if (!oi)
- continue;
-
- if (PRIORITY (oi) != OSPF_IF_PARAM (oi, priority))
- {
- PRIORITY (oi) = OSPF_IF_PARAM (oi, priority);
- OSPF_ISM_EVENT_SCHEDULE (oi, ISM_NeighborChange);
+ UNSET_IF_PARAM(params, priority);
+ params->priority = OSPF_ROUTER_PRIORITY_DEFAULT;
+
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
}
- }
-
- return CMD_SUCCESS;
+
+ for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
+ struct ospf_interface *oi = rn->info;
+
+ if (!oi)
+ continue;
+
+ if (PRIORITY(oi) != OSPF_IF_PARAM(oi, priority)) {
+ PRIORITY(oi) = OSPF_IF_PARAM(oi, priority);
+ OSPF_ISM_EVENT_SCHEDULE(oi, ISM_NeighborChange);
+ }
+ }
+
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (no_ospf_priority,
@@ -6647,7 +6678,7 @@ DEFUN_HIDDEN (no_ospf_priority,
"Priority\n"
"Address of interface")
{
- return no_ip_ospf_priority (self, vty, argc, argv);
+ return no_ip_ospf_priority(self, vty, argc, argv);
}
DEFUN (ip_ospf_retransmit_interval,
@@ -6659,32 +6690,31 @@ DEFUN (ip_ospf_retransmit_interval,
"Seconds\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- u_int32_t seconds;
- struct in_addr addr;
- struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
-
- argv_find (argv, argc, "(3-65535)", &idx);
- seconds = strtol (argv[idx]->arg, NULL, 10);
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ u_int32_t seconds;
+ struct in_addr addr;
+ struct ospf_if_params *params;
+ params = IF_DEF_PARAMS(ifp);
+
+ argv_find(argv, argc, "(3-65535)", &idx);
+ seconds = strtol(argv[idx]->arg, NULL, 10);
+
+ if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ if (!inet_aton(argv[idx]->arg, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- if (!inet_aton(argv[idx]->arg, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
}
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
+ SET_IF_PARAM(params, retransmit_interval);
+ params->retransmit_interval = seconds;
- SET_IF_PARAM (params, retransmit_interval);
- params->retransmit_interval = seconds;
-
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (ospf_retransmit_interval,
@@ -6695,7 +6725,7 @@ DEFUN_HIDDEN (ospf_retransmit_interval,
"Seconds\n"
"Address of interface")
{
- return ip_ospf_retransmit_interval (self, vty, argc, argv);
+ return ip_ospf_retransmit_interval(self, vty, argc, argv);
}
DEFUN (no_ip_ospf_retransmit_interval,
@@ -6708,36 +6738,34 @@ DEFUN (no_ip_ospf_retransmit_interval,
"Seconds\n"
"Address of interface\n")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- struct in_addr addr;
- struct ospf_if_params *params;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ struct in_addr addr;
+ struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
+ params = IF_DEF_PARAMS(ifp);
- if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- if (!inet_aton(argv[idx]->arg, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ if (!inet_aton(argv[idx]->arg, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
+ params = ospf_lookup_if_params(ifp, addr);
+ if (params == NULL)
+ return CMD_SUCCESS;
+ }
- UNSET_IF_PARAM (params, retransmit_interval);
- params->retransmit_interval = OSPF_RETRANSMIT_INTERVAL_DEFAULT;
+ UNSET_IF_PARAM(params, retransmit_interval);
+ params->retransmit_interval = OSPF_RETRANSMIT_INTERVAL_DEFAULT;
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (no_ospf_retransmit_interval,
@@ -6749,7 +6777,7 @@ DEFUN_HIDDEN (no_ospf_retransmit_interval,
"Seconds\n"
"Address of interface\n")
{
- return no_ip_ospf_retransmit_interval (self, vty, argc, argv);
+ return no_ip_ospf_retransmit_interval(self, vty, argc, argv);
}
DEFUN (ip_ospf_transmit_delay,
@@ -6761,32 +6789,31 @@ DEFUN (ip_ospf_transmit_delay,
"Seconds\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- u_int32_t seconds;
- struct in_addr addr;
- struct ospf_if_params *params;
-
- params = IF_DEF_PARAMS (ifp);
- argv_find (argv, argc, "(1-65535)", &idx);
- seconds = strtol (argv[idx]->arg, NULL, 10);
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ u_int32_t seconds;
+ struct in_addr addr;
+ struct ospf_if_params *params;
+
+ params = IF_DEF_PARAMS(ifp);
+ argv_find(argv, argc, "(1-65535)", &idx);
+ seconds = strtol(argv[idx]->arg, NULL, 10);
+
+ if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ if (!inet_aton(argv[idx]->arg, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- if (!inet_aton(argv[idx]->arg, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
}
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-
- SET_IF_PARAM (params, transmit_delay);
- params->transmit_delay = seconds;
+ SET_IF_PARAM(params, transmit_delay);
+ params->transmit_delay = seconds;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN_HIDDEN (ospf_transmit_delay,
@@ -6797,7 +6824,7 @@ DEFUN_HIDDEN (ospf_transmit_delay,
"Seconds\n"
"Address of interface")
{
- return ip_ospf_transmit_delay (self, vty, argc, argv);
+ return ip_ospf_transmit_delay(self, vty, argc, argv);
}
DEFUN (no_ip_ospf_transmit_delay,
@@ -6809,36 +6836,34 @@ DEFUN (no_ip_ospf_transmit_delay,
"Link state transmit delay\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- struct in_addr addr;
- struct ospf_if_params *params;
-
- params = IF_DEF_PARAMS (ifp);
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ struct in_addr addr;
+ struct ospf_if_params *params;
- if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- if (!inet_aton(argv[idx]->arg, &addr))
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ params = IF_DEF_PARAMS(ifp);
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
+ if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ if (!inet_aton(argv[idx]->arg, &addr)) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- UNSET_IF_PARAM (params, transmit_delay);
- params->transmit_delay = OSPF_TRANSMIT_DELAY_DEFAULT;
+ params = ospf_lookup_if_params(ifp, addr);
+ if (params == NULL)
+ return CMD_SUCCESS;
+ }
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
+ UNSET_IF_PARAM(params, transmit_delay);
+ params->transmit_delay = OSPF_TRANSMIT_DELAY_DEFAULT;
- return CMD_SUCCESS;
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
+
+ return CMD_SUCCESS;
}
@@ -6849,7 +6874,7 @@ DEFUN_HIDDEN (no_ospf_transmit_delay,
"OSPF interface commands\n"
"Link state transmit delay\n")
{
- return no_ip_ospf_transmit_delay (self, vty, argc, argv);
+ return no_ip_ospf_transmit_delay(self, vty, argc, argv);
}
DEFUN (ip_ospf_area,
@@ -6863,87 +6888,81 @@ DEFUN (ip_ospf_area,
"OSPF area ID as a decimal value\n"
"Address of interface\n")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- int format, ret;
- struct in_addr area_id;
- struct in_addr addr;
- struct ospf_if_params *params;
- struct route_node *rn;
- struct ospf *ospf;
- u_short instance = 0;
- char *areaid;
-
- if (argv_find (argv, argc, "(1-65535)", &idx))
- instance = strtol (argv[idx]->arg, NULL, 10);
-
- argv_find (argv, argc, "area", &idx);
- areaid = argv[idx + 1]->arg;
-
- ospf = ospf_lookup_instance (instance);
- if (ospf == NULL)
- {
- params = IF_DEF_PARAMS (ifp);
- if (OSPF_IF_PARAM_CONFIGURED(params, if_area))
- {
- UNSET_IF_PARAM (params, if_area);
- ospf_interface_area_unset (ifp);
- ospf = ospf_lookup();
- ospf->if_ospf_cli_count--;
- }
- return CMD_SUCCESS;
- }
-
- ret = str2area_id (areaid, &area_id, &format);
- if (ret < 0)
- {
- vty_out (vty, "Please specify area by A.B.C.D|<0-4294967295>\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- if (memcmp (ifp->name, "VLINK", 5) == 0)
- {
- vty_out (vty, "Cannot enable OSPF on a virtual link.\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- params = IF_DEF_PARAMS (ifp);
- if (OSPF_IF_PARAM_CONFIGURED(params, if_area) && !IPV4_ADDR_SAME(&params->if_area, &area_id))
- {
- vty_out (vty,
- "Must remove previous area config before changing ospf area \n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- // Check if we have an address arg and proccess it
- if (argc == idx + 3) {
- inet_aton(argv[idx+2]->arg, &addr);
- // update/create address-level params
- params = ospf_get_if_params ((ifp), (addr));
- if (OSPF_IF_PARAM_CONFIGURED(params, if_area))
- {
- vty_out (vty,
- "Must remove previous area/address config before changing ospf area");
- return CMD_WARNING_CONFIG_FAILED;
- }
- ospf_if_update_params ((ifp), (addr));
- }
-
- for (rn = route_top (ospf->networks); rn; rn = route_next (rn))
- {
- if (rn->info != NULL)
- {
- vty_out (vty, "Please remove all network commands first.\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- }
-
- /* enable ospf on this interface with area_id */
- SET_IF_PARAM (params, if_area);
- params->if_area = area_id;
- ospf_interface_area_set (ifp);
- ospf->if_ospf_cli_count++;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ int format, ret;
+ struct in_addr area_id;
+ struct in_addr addr;
+ struct ospf_if_params *params;
+ struct route_node *rn;
+ struct ospf *ospf;
+ u_short instance = 0;
+ char *areaid;
+
+ if (argv_find(argv, argc, "(1-65535)", &idx))
+ instance = strtol(argv[idx]->arg, NULL, 10);
+
+ argv_find(argv, argc, "area", &idx);
+ areaid = argv[idx + 1]->arg;
+
+ ospf = ospf_lookup_instance(instance);
+ if (ospf == NULL) {
+ params = IF_DEF_PARAMS(ifp);
+ if (OSPF_IF_PARAM_CONFIGURED(params, if_area)) {
+ UNSET_IF_PARAM(params, if_area);
+ ospf_interface_area_unset(ifp);
+ ospf = ospf_lookup();
+ ospf->if_ospf_cli_count--;
+ }
+ return CMD_SUCCESS;
+ }
- return CMD_SUCCESS;
+ ret = str2area_id(areaid, &area_id, &format);
+ if (ret < 0) {
+ vty_out(vty, "Please specify area by A.B.C.D|<0-4294967295>\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ if (memcmp(ifp->name, "VLINK", 5) == 0) {
+ vty_out(vty, "Cannot enable OSPF on a virtual link.\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ params = IF_DEF_PARAMS(ifp);
+ if (OSPF_IF_PARAM_CONFIGURED(params, if_area)
+ && !IPV4_ADDR_SAME(&params->if_area, &area_id)) {
+ vty_out(vty,
+ "Must remove previous area config before changing ospf area \n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ // Check if we have an address arg and proccess it
+ if (argc == idx + 3) {
+ inet_aton(argv[idx + 2]->arg, &addr);
+ // update/create address-level params
+ params = ospf_get_if_params((ifp), (addr));
+ if (OSPF_IF_PARAM_CONFIGURED(params, if_area)) {
+ vty_out(vty,
+ "Must remove previous area/address config before changing ospf area");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ ospf_if_update_params((ifp), (addr));
+ }
+
+ for (rn = route_top(ospf->networks); rn; rn = route_next(rn)) {
+ if (rn->info != NULL) {
+ vty_out(vty,
+ "Please remove all network commands first.\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ }
+
+ /* enable ospf on this interface with area_id */
+ SET_IF_PARAM(params, if_area);
+ params->if_area = area_id;
+ ospf_interface_area_set(ifp);
+ ospf->if_ospf_cli_count++;
+
+ return CMD_SUCCESS;
}
DEFUN (no_ip_ospf_area,
@@ -6958,47 +6977,45 @@ DEFUN (no_ip_ospf_area,
"OSPF area ID as a decimal value\n"
"Address of interface\n")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx = 0;
- struct ospf *ospf;
- struct ospf_if_params *params;
- u_short instance = 0;
- struct in_addr addr;
-
- if (argv_find (argv, argc, "(1-65535)", &idx))
- instance = strtol (argv[idx]->arg, NULL, 10);
-
- if ((ospf = ospf_lookup_instance (instance)) == NULL)
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx = 0;
+ struct ospf *ospf;
+ struct ospf_if_params *params;
+ u_short instance = 0;
+ struct in_addr addr;
+
+ if (argv_find(argv, argc, "(1-65535)", &idx))
+ instance = strtol(argv[idx]->arg, NULL, 10);
+
+ if ((ospf = ospf_lookup_instance(instance)) == NULL)
+ return CMD_SUCCESS;
+
+ argv_find(argv, argc, "area", &idx);
+
+ // Check if we have an address arg and proccess it
+ if (argc == idx + 3) {
+ inet_aton(argv[idx + 2]->arg, &addr);
+ params = ospf_lookup_if_params(ifp, addr);
+ if ((params) == NULL)
+ return CMD_SUCCESS;
+ } else
+ params = IF_DEF_PARAMS(ifp);
+
+ if (!OSPF_IF_PARAM_CONFIGURED(params, if_area)) {
+ vty_out(vty,
+ "Can't find specified interface area configuration.\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- argv_find (argv, argc, "area", &idx);
-
- // Check if we have an address arg and proccess it
- if (argc == idx + 3) {
- inet_aton(argv[idx+2]->arg, &addr);
- params = ospf_lookup_if_params (ifp, addr);
- if ((params) == NULL)
- return CMD_SUCCESS;
- }
- else
- params = IF_DEF_PARAMS (ifp);
-
- if (!OSPF_IF_PARAM_CONFIGURED(params, if_area))
- {
- vty_out (vty, "Can't find specified interface area configuration.\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- UNSET_IF_PARAM (params, if_area);
- if (params != IF_DEF_PARAMS ((ifp)))
- {
- ospf_free_if_params ((ifp), (addr));
- ospf_if_update_params ((ifp), (addr));
- }
-
- ospf_interface_area_unset (ifp);
- ospf->if_ospf_cli_count--;
- return CMD_SUCCESS;
+ UNSET_IF_PARAM(params, if_area);
+ if (params != IF_DEF_PARAMS((ifp))) {
+ ospf_free_if_params((ifp), (addr));
+ ospf_if_update_params((ifp), (addr));
+ }
+
+ ospf_interface_area_unset(ifp);
+ ospf->if_ospf_cli_count--;
+ return CMD_SUCCESS;
}
DEFUN (ospf_redistribute_source,
@@ -7013,42 +7030,41 @@ DEFUN (ospf_redistribute_source,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_protocol = 1;
- int source;
- int type = -1;
- int metric = -1;
- struct ospf_redist *red;
- int idx = 0;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_protocol = 1;
+ int source;
+ int type = -1;
+ int metric = -1;
+ struct ospf_redist *red;
+ int idx = 0;
- if (!ospf)
- return CMD_SUCCESS;
+ if (!ospf)
+ return CMD_SUCCESS;
+
+ /* Get distribute source. */
+ source = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
+ if (source < 0)
+ return CMD_WARNING_CONFIG_FAILED;
+
+ red = ospf_redist_add(ospf, source, 0);
- /* Get distribute source. */
- source = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
- if (source < 0)
- return CMD_WARNING_CONFIG_FAILED;
-
- red = ospf_redist_add(ospf, source, 0);
-
- /* Get metric value. */
- if (argv_find (argv, argc, "(0-16777214)", &idx)) {
- if (!str2metric (argv[idx]->arg, &metric))
- return CMD_WARNING_CONFIG_FAILED;
- }
- /* Get metric type. */
- else if (argv_find (argv, argc, "(1-2)", &idx)) {
- if (!str2metric_type (argv[idx]->arg, &type))
- return CMD_WARNING_CONFIG_FAILED;
- }
- /* Get route-map */
- else if (argv_find (argv, argc, "WORD", &idx)) {
- ospf_routemap_set (red, argv[idx]->arg);
- }
- else
- ospf_routemap_unset (red);
-
- return ospf_redistribute_set (ospf, source, 0, type, metric);
+ /* Get metric value. */
+ if (argv_find(argv, argc, "(0-16777214)", &idx)) {
+ if (!str2metric(argv[idx]->arg, &metric))
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ /* Get metric type. */
+ else if (argv_find(argv, argc, "(1-2)", &idx)) {
+ if (!str2metric_type(argv[idx]->arg, &type))
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ /* Get route-map */
+ else if (argv_find(argv, argc, "WORD", &idx)) {
+ ospf_routemap_set(red, argv[idx]->arg);
+ } else
+ ospf_routemap_unset(red);
+
+ return ospf_redistribute_set(ospf, source, 0, type, metric);
}
DEFUN (no_ospf_redistribute_source,
@@ -7064,21 +7080,21 @@ DEFUN (no_ospf_redistribute_source,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_protocol = 2;
- int source;
- struct ospf_redist *red;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_protocol = 2;
+ int source;
+ struct ospf_redist *red;
- source = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
- if (source < 0)
- return CMD_WARNING_CONFIG_FAILED;
+ source = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
+ if (source < 0)
+ return CMD_WARNING_CONFIG_FAILED;
- red = ospf_redist_lookup(ospf, source, 0);
- if (!red)
- return CMD_SUCCESS;
+ red = ospf_redist_lookup(ospf, source, 0);
+ if (!red)
+ return CMD_SUCCESS;
- ospf_routemap_unset (red);
- return ospf_redistribute_unset (ospf, source, 0);
+ ospf_routemap_unset(red);
+ return ospf_redistribute_unset(ospf, source, 0);
}
DEFUN (ospf_redistribute_instance_source,
@@ -7095,58 +7111,57 @@ DEFUN (ospf_redistribute_instance_source,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ospf_table = 1;
- int idx_number = 2;
- int idx = 3;
- int source;
- int type = -1;
- int metric = -1;
- u_short instance;
- struct ospf_redist *red;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ospf_table = 1;
+ int idx_number = 2;
+ int idx = 3;
+ int source;
+ int type = -1;
+ int metric = -1;
+ u_short instance;
+ struct ospf_redist *red;
- if (!ospf)
- return CMD_SUCCESS;
+ if (!ospf)
+ return CMD_SUCCESS;
- source = proto_redistnum (AFI_IP, argv[idx_ospf_table]->text);
+ source = proto_redistnum(AFI_IP, argv[idx_ospf_table]->text);
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
- if (!ospf)
- return CMD_SUCCESS;
+ if (!ospf)
+ return CMD_SUCCESS;
- if ((source == ZEBRA_ROUTE_OSPF) && !ospf->instance)
- {
- vty_out (vty, "Instance redistribution in non-instanced OSPF not allowed\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if ((source == ZEBRA_ROUTE_OSPF) && !ospf->instance) {
+ vty_out(vty,
+ "Instance redistribution in non-instanced OSPF not allowed\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if ((source == ZEBRA_ROUTE_OSPF) && (ospf->instance == instance))
- {
- vty_out (vty, "Same instance OSPF redistribution not allowed\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if ((source == ZEBRA_ROUTE_OSPF) && (ospf->instance == instance)) {
+ vty_out(vty, "Same instance OSPF redistribution not allowed\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- /* Get metric value. */
- if (argv_find (argv, argc, "metric", &idx))
- if (!str2metric (argv[idx+1]->arg, &metric))
- return CMD_WARNING_CONFIG_FAILED;
+ /* Get metric value. */
+ if (argv_find(argv, argc, "metric", &idx))
+ if (!str2metric(argv[idx + 1]->arg, &metric))
+ return CMD_WARNING_CONFIG_FAILED;
- idx = 3;
- /* Get metric type. */
- if (argv_find (argv, argc, "metric-type", &idx))
- if (!str2metric_type (argv[idx+1]->arg, &type))
- return CMD_WARNING_CONFIG_FAILED;
+ idx = 3;
+ /* Get metric type. */
+ if (argv_find(argv, argc, "metric-type", &idx))
+ if (!str2metric_type(argv[idx + 1]->arg, &type))
+ return CMD_WARNING_CONFIG_FAILED;
- red = ospf_redist_add(ospf, source, instance);
+ red = ospf_redist_add(ospf, source, instance);
- idx = 3;
- if (argv_find (argv, argc, "route-map", &idx))
- ospf_routemap_set (red, argv[idx+1]->arg);
- else
- ospf_routemap_unset (red);
+ idx = 3;
+ if (argv_find(argv, argc, "route-map", &idx))
+ ospf_routemap_set(red, argv[idx + 1]->arg);
+ else
+ ospf_routemap_unset(red);
- return ospf_redistribute_set (ospf, source, instance, type, metric);
+ return ospf_redistribute_set(ospf, source, instance, type, metric);
}
DEFUN (no_ospf_redistribute_instance_source,
@@ -7164,38 +7179,37 @@ DEFUN (no_ospf_redistribute_instance_source,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_ospf_table = 2;
- int idx_number = 3;
- u_int instance;
- struct ospf_redist *red;
- int source;
-
- if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
- source = ZEBRA_ROUTE_OSPF;
- else
- source = ZEBRA_ROUTE_TABLE;
-
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
-
- if ((source == ZEBRA_ROUTE_OSPF) && !ospf->instance)
- {
- vty_out (vty, "Instance redistribution in non-instanced OSPF not allowed\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if ((source == ZEBRA_ROUTE_OSPF) && (ospf->instance == instance))
- {
- vty_out (vty, "Same instance OSPF redistribution not allowed\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- red = ospf_redist_lookup(ospf, source, instance);
- if (!red)
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_ospf_table = 2;
+ int idx_number = 3;
+ u_int instance;
+ struct ospf_redist *red;
+ int source;
+
+ if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
+ source = ZEBRA_ROUTE_OSPF;
+ else
+ source = ZEBRA_ROUTE_TABLE;
+
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+
+ if ((source == ZEBRA_ROUTE_OSPF) && !ospf->instance) {
+ vty_out(vty,
+ "Instance redistribution in non-instanced OSPF not allowed\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if ((source == ZEBRA_ROUTE_OSPF) && (ospf->instance == instance)) {
+ vty_out(vty, "Same instance OSPF redistribution not allowed\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- ospf_routemap_unset (red);
- return ospf_redistribute_unset (ospf, source, instance);
+ red = ospf_redist_lookup(ospf, source, instance);
+ if (!red)
+ return CMD_SUCCESS;
+
+ ospf_routemap_unset(red);
+ return ospf_redistribute_unset(ospf, source, instance);
}
DEFUN (ospf_distribute_list_out,
@@ -7206,18 +7220,18 @@ DEFUN (ospf_distribute_list_out,
OUT_STR
FRR_REDIST_HELP_STR_OSPFD)
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_word = 1;
- int source;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_word = 1;
+ int source;
- char *proto = argv[argc - 1]->text;
+ char *proto = argv[argc - 1]->text;
- /* Get distribute source. */
- source = proto_redistnum(AFI_IP, proto);
- if (source < 0)
- return CMD_WARNING_CONFIG_FAILED;
+ /* Get distribute source. */
+ source = proto_redistnum(AFI_IP, proto);
+ if (source < 0)
+ return CMD_WARNING_CONFIG_FAILED;
- return ospf_distribute_list_out_set (ospf, source, argv[idx_word]->arg);
+ return ospf_distribute_list_out_set(ospf, source, argv[idx_word]->arg);
}
DEFUN (no_ospf_distribute_list_out,
@@ -7229,16 +7243,17 @@ DEFUN (no_ospf_distribute_list_out,
OUT_STR
FRR_REDIST_HELP_STR_OSPFD)
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_word = 2;
- int source;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_word = 2;
+ int source;
- char *proto = argv[argc - 1]->text;
- source = proto_redistnum(AFI_IP, proto);
- if (source < 0)
- return CMD_WARNING_CONFIG_FAILED;
+ char *proto = argv[argc - 1]->text;
+ source = proto_redistnum(AFI_IP, proto);
+ if (source < 0)
+ return CMD_WARNING_CONFIG_FAILED;
- return ospf_distribute_list_out_unset (ospf, source, argv[idx_word]->arg);
+ return ospf_distribute_list_out_unset(ospf, source,
+ argv[idx_word]->arg);
}
/* Default information originate. */
@@ -7255,36 +7270,36 @@ DEFUN (ospf_default_information_originate,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int default_originate = DEFAULT_ORIGINATE_ZEBRA;
- int type = -1;
- int metric = -1;
- struct ospf_redist *red;
- int idx = 0;
-
- red = ospf_redist_add(ospf, DEFAULT_ROUTE, 0);
-
- /* Check whether "always" was specified */
- if (argv_find (argv, argc, "always", &idx))
- default_originate = DEFAULT_ORIGINATE_ALWAYS;
- /* Get metric value */
- else if (argv_find (argv, argc, "(0-16777214)", &idx)) {
- if (!str2metric (argv[idx]->arg, &metric))
- return CMD_WARNING_CONFIG_FAILED;
- }
- /* Get metric type. */
- else if (argv_find (argv, argc, "(1-2)", &idx)) {
- if (!str2metric_type (argv[idx]->arg, &type))
- return CMD_WARNING_CONFIG_FAILED;
- }
- /* Get route-map */
- else if (argv_find (argv, argc, "WORD", &idx))
- ospf_routemap_set (red, argv[idx]->arg);
- else
- ospf_routemap_unset (red);
-
- return ospf_redistribute_default_set (ospf, default_originate,
- type, metric);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int default_originate = DEFAULT_ORIGINATE_ZEBRA;
+ int type = -1;
+ int metric = -1;
+ struct ospf_redist *red;
+ int idx = 0;
+
+ red = ospf_redist_add(ospf, DEFAULT_ROUTE, 0);
+
+ /* Check whether "always" was specified */
+ if (argv_find(argv, argc, "always", &idx))
+ default_originate = DEFAULT_ORIGINATE_ALWAYS;
+ /* Get metric value */
+ else if (argv_find(argv, argc, "(0-16777214)", &idx)) {
+ if (!str2metric(argv[idx]->arg, &metric))
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ /* Get metric type. */
+ else if (argv_find(argv, argc, "(1-2)", &idx)) {
+ if (!str2metric_type(argv[idx]->arg, &type))
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ /* Get route-map */
+ else if (argv_find(argv, argc, "WORD", &idx))
+ ospf_routemap_set(red, argv[idx]->arg);
+ else
+ ospf_routemap_unset(red);
+
+ return ospf_redistribute_default_set(ospf, default_originate, type,
+ metric);
}
DEFUN (no_ospf_default_information_originate,
@@ -7301,29 +7316,29 @@ DEFUN (no_ospf_default_information_originate,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- struct prefix_ipv4 p;
- struct ospf_external *ext;
- struct ospf_redist *red;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ struct prefix_ipv4 p;
+ struct ospf_external *ext;
+ struct ospf_redist *red;
- p.family = AF_INET;
- p.prefix.s_addr = 0;
- p.prefixlen = 0;
+ p.family = AF_INET;
+ p.prefix.s_addr = 0;
+ p.prefixlen = 0;
- ospf_external_lsa_flush (ospf, DEFAULT_ROUTE, &p, 0);
+ ospf_external_lsa_flush(ospf, DEFAULT_ROUTE, &p, 0);
- if ((ext = ospf_external_lookup(DEFAULT_ROUTE, 0)) &&
- EXTERNAL_INFO (ext)) {
- ospf_external_info_delete (DEFAULT_ROUTE, 0, p);
- ospf_external_del (DEFAULT_ROUTE, 0);
- }
+ if ((ext = ospf_external_lookup(DEFAULT_ROUTE, 0))
+ && EXTERNAL_INFO(ext)) {
+ ospf_external_info_delete(DEFAULT_ROUTE, 0, p);
+ ospf_external_del(DEFAULT_ROUTE, 0);
+ }
- red = ospf_redist_lookup(ospf, DEFAULT_ROUTE, 0);
- if (!red)
- return CMD_SUCCESS;
+ red = ospf_redist_lookup(ospf, DEFAULT_ROUTE, 0);
+ if (!red)
+ return CMD_SUCCESS;
- ospf_routemap_unset (red);
- return ospf_redistribute_default_unset (ospf);
+ ospf_routemap_unset(red);
+ return ospf_redistribute_default_unset(ospf);
}
DEFUN (ospf_default_metric,
@@ -7332,16 +7347,16 @@ DEFUN (ospf_default_metric,
"Set metric of redistributed routes\n"
"Default metric\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_number = 1;
- int metric = -1;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_number = 1;
+ int metric = -1;
- if (!str2metric (argv[idx_number]->arg, &metric))
- return CMD_WARNING_CONFIG_FAILED;
+ if (!str2metric(argv[idx_number]->arg, &metric))
+ return CMD_WARNING_CONFIG_FAILED;
- ospf->default_metric = metric;
+ ospf->default_metric = metric;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_default_metric,
@@ -7351,11 +7366,11 @@ DEFUN (no_ospf_default_metric,
"Set metric of redistributed routes\n"
"Default metric\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
- ospf->default_metric = -1;
+ ospf->default_metric = -1;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -7365,12 +7380,12 @@ DEFUN (ospf_distance,
"Administrative distance\n"
"OSPF Administrative distance\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_number = 1;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_number = 1;
- ospf->distance_all = atoi (argv[idx_number]->arg);
+ ospf->distance_all = atoi(argv[idx_number]->arg);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_distance,
@@ -7380,11 +7395,11 @@ DEFUN (no_ospf_distance,
"Administrative distance\n"
"OSPF Administrative distance\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
- ospf->distance_all = 0;
+ ospf->distance_all = 0;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_distance_ospf,
@@ -7400,20 +7415,20 @@ DEFUN (no_ospf_distance_ospf,
"External routes\n"
"Distance for external routes\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx = 0;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx = 0;
- if (!ospf)
- return CMD_SUCCESS;
+ if (!ospf)
+ return CMD_SUCCESS;
- if (argv_find (argv, argc, "intra-area", &idx) || argc == 3)
- idx = ospf->distance_intra = 0;
- if (argv_find (argv, argc, "inter-area", &idx) || argc == 3)
- idx = ospf->distance_inter = 0;
- if (argv_find (argv, argc, "external", &idx) || argc == 3)
- ospf->distance_external = 0;
+ if (argv_find(argv, argc, "intra-area", &idx) || argc == 3)
+ idx = ospf->distance_intra = 0;
+ if (argv_find(argv, argc, "inter-area", &idx) || argc == 3)
+ idx = ospf->distance_inter = 0;
+ if (argv_find(argv, argc, "external", &idx) || argc == 3)
+ ospf->distance_external = 0;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ospf_distance_ospf,
@@ -7428,19 +7443,19 @@ DEFUN (ospf_distance_ospf,
"External routes\n"
"Distance for external routes\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx = 0;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx = 0;
- if (argv_find (argv, argc, "intra-area", &idx))
- ospf->distance_intra = atoi(argv[idx + 1]->arg);
- idx = 0;
- if (argv_find (argv, argc, "inter-area", &idx))
- ospf->distance_inter = atoi(argv[idx + 1]->arg);
- idx = 0;
- if (argv_find (argv, argc, "external", &idx))
- ospf->distance_external = atoi(argv[idx + 1]->arg);
+ if (argv_find(argv, argc, "intra-area", &idx))
+ ospf->distance_intra = atoi(argv[idx + 1]->arg);
+ idx = 0;
+ if (argv_find(argv, argc, "inter-area", &idx))
+ ospf->distance_inter = atoi(argv[idx + 1]->arg);
+ idx = 0;
+ if (argv_find(argv, argc, "external", &idx))
+ ospf->distance_external = atoi(argv[idx + 1]->arg);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
#if 0
@@ -7535,38 +7550,35 @@ DEFUN (ip_ospf_mtu_ignore,
"Disable MTU mismatch detection on this interface\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx_ipv4 = 3;
- struct in_addr addr;
- int ret;
-
- struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
-
- if (argc == 4)
- {
- ret = inet_aton(argv[idx_ipv4]->arg, &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- params->mtu_ignore = 1;
- if (params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT)
- SET_IF_PARAM (params, mtu_ignore);
- else
- {
- UNSET_IF_PARAM (params, mtu_ignore);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx_ipv4 = 3;
+ struct in_addr addr;
+ int ret;
+
+ struct ospf_if_params *params;
+ params = IF_DEF_PARAMS(ifp);
+
+ if (argc == 4) {
+ ret = inet_aton(argv[idx_ipv4]->arg, &addr);
+ if (!ret) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
+ params->mtu_ignore = 1;
+ if (params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT)
+ SET_IF_PARAM(params, mtu_ignore);
+ else {
+ UNSET_IF_PARAM(params, mtu_ignore);
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
+ }
+ return CMD_SUCCESS;
}
DEFUN (no_ip_ospf_mtu_ignore,
@@ -7577,38 +7589,35 @@ DEFUN (no_ip_ospf_mtu_ignore,
"Disable MTU mismatch detection on this interface\n"
"Address of interface")
{
- VTY_DECLVAR_CONTEXT(interface, ifp);
- int idx_ipv4 = 4;
- struct in_addr addr;
- int ret;
-
- struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
-
- if (argc == 5)
- {
- ret = inet_aton(argv[idx_ipv4]->arg, &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- params->mtu_ignore = 0;
- if (params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT)
- SET_IF_PARAM (params, mtu_ignore);
- else
- {
- UNSET_IF_PARAM (params, mtu_ignore);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx_ipv4 = 4;
+ struct in_addr addr;
+ int ret;
+
+ struct ospf_if_params *params;
+ params = IF_DEF_PARAMS(ifp);
+
+ if (argc == 5) {
+ ret = inet_aton(argv[idx_ipv4]->arg, &addr);
+ if (!ret) {
+ vty_out(vty,
+ "Please specify interface address by A.B.C.D\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ params = ospf_get_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
+ params->mtu_ignore = 0;
+ if (params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT)
+ SET_IF_PARAM(params, mtu_ignore);
+ else {
+ UNSET_IF_PARAM(params, mtu_ignore);
+ if (params != IF_DEF_PARAMS(ifp)) {
+ ospf_free_if_params(ifp, addr);
+ ospf_if_update_params(ifp, addr);
+ }
+ }
+ return CMD_SUCCESS;
}
@@ -7619,22 +7628,22 @@ DEFUN (ospf_max_metric_router_lsa_admin,
"Advertise own Router-LSA with infinite distance (stub router)\n"
"Administratively applied, for an indefinite period\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- struct listnode *ln;
- struct ospf_area *area;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ struct listnode *ln;
+ struct ospf_area *area;
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, ln, area))
- {
- SET_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED);
-
- if (!CHECK_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED))
- ospf_router_lsa_update_area (area);
- }
+ for (ALL_LIST_ELEMENTS_RO(ospf->areas, ln, area)) {
+ SET_FLAG(area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED);
- /* Allows for areas configured later to get the property */
- ospf->stub_router_admin_set = OSPF_STUB_ROUTER_ADMINISTRATIVE_SET;
+ if (!CHECK_FLAG(area->stub_router_state,
+ OSPF_AREA_IS_STUB_ROUTED))
+ ospf_router_lsa_update_area(area);
+ }
- return CMD_SUCCESS;
+ /* Allows for areas configured later to get the property */
+ ospf->stub_router_admin_set = OSPF_STUB_ROUTER_ADMINISTRATIVE_SET;
+
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_max_metric_router_lsa_admin,
@@ -7645,24 +7654,25 @@ DEFUN (no_ospf_max_metric_router_lsa_admin,
"Advertise own Router-LSA with infinite distance (stub router)\n"
"Administratively applied, for an indefinite period\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- struct listnode *ln;
- struct ospf_area *area;
-
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, ln, area))
- {
- UNSET_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED);
-
- /* Don't trample on the start-up stub timer */
- if (CHECK_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED)
- && !area->t_stub_router)
- {
- UNSET_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED);
- ospf_router_lsa_update_area (area);
- }
- }
- ospf->stub_router_admin_set = OSPF_STUB_ROUTER_ADMINISTRATIVE_UNSET;
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ struct listnode *ln;
+ struct ospf_area *area;
+
+ for (ALL_LIST_ELEMENTS_RO(ospf->areas, ln, area)) {
+ UNSET_FLAG(area->stub_router_state,
+ OSPF_AREA_ADMIN_STUB_ROUTED);
+
+ /* Don't trample on the start-up stub timer */
+ if (CHECK_FLAG(area->stub_router_state,
+ OSPF_AREA_IS_STUB_ROUTED)
+ && !area->t_stub_router) {
+ UNSET_FLAG(area->stub_router_state,
+ OSPF_AREA_IS_STUB_ROUTED);
+ ospf_router_lsa_update_area(area);
+ }
+ }
+ ospf->stub_router_admin_set = OSPF_STUB_ROUTER_ADMINISTRATIVE_UNSET;
+ return CMD_SUCCESS;
}
DEFUN (ospf_max_metric_router_lsa_startup,
@@ -7673,21 +7683,20 @@ DEFUN (ospf_max_metric_router_lsa_startup,
"Automatically advertise stub Router-LSA on startup of OSPF\n"
"Time (seconds) to advertise self as stub-router\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_number = 3;
- unsigned int seconds;
-
- if (argc != 1)
- {
- vty_out (vty, "%% Must supply stub-router period");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- seconds = strtoul(argv[idx_number]->arg, NULL, 10);
-
- ospf->stub_router_startup_time = seconds;
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_number = 3;
+ unsigned int seconds;
+
+ if (argc != 1) {
+ vty_out(vty, "%% Must supply stub-router period");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ seconds = strtoul(argv[idx_number]->arg, NULL, 10);
+
+ ospf->stub_router_startup_time = seconds;
+
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_max_metric_router_lsa_startup,
@@ -7699,25 +7708,26 @@ DEFUN (no_ospf_max_metric_router_lsa_startup,
"Automatically advertise stub Router-LSA on startup of OSPF\n"
"Time (seconds) to advertise self as stub-router\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- struct listnode *ln;
- struct ospf_area *area;
-
- ospf->stub_router_startup_time = OSPF_STUB_ROUTER_UNCONFIGURED;
-
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, ln, area))
- {
- SET_FLAG (area->stub_router_state, OSPF_AREA_WAS_START_STUB_ROUTED);
- OSPF_TIMER_OFF (area->t_stub_router);
-
- /* Don't trample on admin stub routed */
- if (!CHECK_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED))
- {
- UNSET_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED);
- ospf_router_lsa_update_area (area);
- }
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ struct listnode *ln;
+ struct ospf_area *area;
+
+ ospf->stub_router_startup_time = OSPF_STUB_ROUTER_UNCONFIGURED;
+
+ for (ALL_LIST_ELEMENTS_RO(ospf->areas, ln, area)) {
+ SET_FLAG(area->stub_router_state,
+ OSPF_AREA_WAS_START_STUB_ROUTED);
+ OSPF_TIMER_OFF(area->t_stub_router);
+
+ /* Don't trample on admin stub routed */
+ if (!CHECK_FLAG(area->stub_router_state,
+ OSPF_AREA_ADMIN_STUB_ROUTED)) {
+ UNSET_FLAG(area->stub_router_state,
+ OSPF_AREA_IS_STUB_ROUTED);
+ ospf_router_lsa_update_area(area);
+ }
+ }
+ return CMD_SUCCESS;
}
@@ -7729,21 +7739,20 @@ DEFUN (ospf_max_metric_router_lsa_shutdown,
"Advertise stub-router prior to full shutdown of OSPF\n"
"Time (seconds) to wait till full shutdown\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
- int idx_number = 3;
- unsigned int seconds;
-
- if (argc != 1)
- {
- vty_out (vty, "%% Must supply stub-router shutdown period");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- seconds = strtoul(argv[idx_number]->arg, NULL, 10);
-
- ospf->stub_router_shutdown_time = seconds;
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
+ int idx_number = 3;
+ unsigned int seconds;
+
+ if (argc != 1) {
+ vty_out(vty, "%% Must supply stub-router shutdown period");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ seconds = strtoul(argv[idx_number]->arg, NULL, 10);
+
+ ospf->stub_router_shutdown_time = seconds;
+
+ return CMD_SUCCESS;
}
DEFUN (no_ospf_max_metric_router_lsa_shutdown,
@@ -7755,203 +7764,236 @@ DEFUN (no_ospf_max_metric_router_lsa_shutdown,
"Advertise stub-router prior to full shutdown of OSPF\n"
"Time (seconds) to wait till full shutdown\n")
{
- VTY_DECLVAR_CONTEXT(ospf, ospf);
+ VTY_DECLVAR_CONTEXT(ospf, ospf);
- ospf->stub_router_shutdown_time = OSPF_STUB_ROUTER_UNCONFIGURED;
-
- return CMD_SUCCESS;
+ ospf->stub_router_shutdown_time = OSPF_STUB_ROUTER_UNCONFIGURED;
+
+ return CMD_SUCCESS;
}
-static void
-config_write_stub_router (struct vty *vty, struct ospf *ospf)
-{
- struct listnode *ln;
- struct ospf_area *area;
-
- if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED)
- vty_out (vty, " max-metric router-lsa on-startup %u\n",
- ospf->stub_router_startup_time);
- if (ospf->stub_router_shutdown_time != OSPF_STUB_ROUTER_UNCONFIGURED)
- vty_out (vty, " max-metric router-lsa on-shutdown %u\n",
- ospf->stub_router_shutdown_time);
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, ln, area))
- {
- if (CHECK_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED))
- {
- vty_out (vty, " max-metric router-lsa administrative\n");
- break;
- }
- }
- return;
-}
-
-static void
-show_ip_ospf_route_network (struct vty *vty, struct route_table *rt)
-{
- struct route_node *rn;
- struct ospf_route *or;
- struct listnode *pnode, *pnnode;
- struct ospf_path *path;
-
- vty_out (vty, "============ OSPF network routing table ============\n");
-
- for (rn = route_top (rt); rn; rn = route_next (rn))
- if ((or = rn->info) != NULL)
- {
- char buf1[19];
- snprintf (buf1, 19, "%s/%d",
- inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen);
-
- switch (or->path_type)
- {
- case OSPF_PATH_INTER_AREA:
- if (or->type == OSPF_DESTINATION_NETWORK)
- vty_out (vty, "N IA %-18s [%d] area: %s\n", buf1, or->cost,
- inet_ntoa (or->u.std.area_id));
- else if (or->type == OSPF_DESTINATION_DISCARD)
- vty_out (vty, "D IA %-18s Discard entry\n", buf1);
- break;
- case OSPF_PATH_INTRA_AREA:
- vty_out (vty, "N %-18s [%d] area: %s\n", buf1, or->cost,
- inet_ntoa (or->u.std.area_id));
- break;
- default:
- break;
- }
-
- if (or->type == OSPF_DESTINATION_NETWORK)
- for (ALL_LIST_ELEMENTS (or->paths, pnode, pnnode, path))
- {
- if (if_lookup_by_index(path->ifindex, VRF_DEFAULT))
- {
- if (path->nexthop.s_addr == 0)
- vty_out (vty, "%24s directly attached to %s\n",
- "", ifindex2ifname (path->ifindex, VRF_DEFAULT));
- else
- vty_out (vty, "%24s via %s, %s\n", "",
- inet_ntoa (path->nexthop),
- ifindex2ifname (path->ifindex, VRF_DEFAULT));
- }
- }
- }
- vty_out (vty, "\n");
-}
-
-static void
-show_ip_ospf_route_router (struct vty *vty, struct route_table *rtrs)
-{
- struct route_node *rn;
- struct ospf_route *or;
- struct listnode *pnode;
- struct listnode *node;
- struct ospf_path *path;
-
- vty_out (vty, "============ OSPF router routing table =============\n");
- for (rn = route_top (rtrs); rn; rn = route_next (rn))
- if (rn->info)
- {
- int flag = 0;
-
- vty_out (vty, "R %-15s ", inet_ntoa (rn->p.u.prefix4));
-
- for (ALL_LIST_ELEMENTS_RO ((struct list *)rn->info, node, or))
- {
- if (flag++)
- vty_out (vty, "%24s", "");
-
- /* Show path. */
- vty_out (vty, "%s [%d] area: %s",
- (or->path_type == OSPF_PATH_INTER_AREA ? "IA" : " "),
- or->cost, inet_ntoa (or->u.std.area_id));
- /* Show flags. */
- vty_out (vty, "%s%s\n",
- (or->u.std.flags & ROUTER_LSA_BORDER ? ", ABR" : ""),
- (or->u.std.flags & ROUTER_LSA_EXTERNAL ? ", ASBR" : ""));
-
- for (ALL_LIST_ELEMENTS_RO (or->paths, pnode, path))
- {
- if (if_lookup_by_index(path->ifindex, VRF_DEFAULT))
- {
- if (path->nexthop.s_addr == 0)
- vty_out (vty, "%24s directly attached to %s\n",
- "", ifindex2ifname (path->ifindex, VRF_DEFAULT));
- else
- vty_out (vty, "%24s via %s, %s\n", "",
- inet_ntoa (path->nexthop),
- ifindex2ifname (path->ifindex, VRF_DEFAULT));
+static void config_write_stub_router(struct vty *vty, struct ospf *ospf)
+{
+ struct listnode *ln;
+ struct ospf_area *area;
+
+ if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED)
+ vty_out(vty, " max-metric router-lsa on-startup %u\n",
+ ospf->stub_router_startup_time);
+ if (ospf->stub_router_shutdown_time != OSPF_STUB_ROUTER_UNCONFIGURED)
+ vty_out(vty, " max-metric router-lsa on-shutdown %u\n",
+ ospf->stub_router_shutdown_time);
+ for (ALL_LIST_ELEMENTS_RO(ospf->areas, ln, area)) {
+ if (CHECK_FLAG(area->stub_router_state,
+ OSPF_AREA_ADMIN_STUB_ROUTED)) {
+ vty_out(vty, " max-metric router-lsa administrative\n");
+ break;
+ }
+ }
+ return;
+}
+
+static void show_ip_ospf_route_network(struct vty *vty, struct route_table *rt)
+{
+ struct route_node *rn;
+ struct ospf_route * or ;
+ struct listnode *pnode, *pnnode;
+ struct ospf_path *path;
+
+ vty_out(vty, "============ OSPF network routing table ============\n");
+
+ for (rn = route_top(rt); rn; rn = route_next(rn))
+ if ((or = rn->info) != NULL) {
+ char buf1[19];
+ snprintf(buf1, 19, "%s/%d", inet_ntoa(rn->p.u.prefix4),
+ rn->p.prefixlen);
+
+ switch (or->path_type) {
+ case OSPF_PATH_INTER_AREA:
+ if (or->type == OSPF_DESTINATION_NETWORK)
+ vty_out(vty,
+ "N IA %-18s [%d] area: %s\n",
+ buf1, or->cost,
+ inet_ntoa(or->u.std.area_id));
+ else if (or->type == OSPF_DESTINATION_DISCARD)
+ vty_out(vty,
+ "D IA %-18s Discard entry\n",
+ buf1);
+ break;
+ case OSPF_PATH_INTRA_AREA:
+ vty_out(vty, "N %-18s [%d] area: %s\n",
+ buf1, or->cost,
+ inet_ntoa(or->u.std.area_id));
+ break;
+ default:
+ break;
+ }
+
+ if (or->type == OSPF_DESTINATION_NETWORK)
+ for (ALL_LIST_ELEMENTS(or->paths, pnode, pnnode,
+ path)) {
+ if (if_lookup_by_index(path->ifindex,
+ VRF_DEFAULT)) {
+ if (path->nexthop.s_addr == 0)
+ vty_out(vty,
+ "%24s directly attached to %s\n",
+ "",
+ ifindex2ifname(
+ path->ifindex,
+ VRF_DEFAULT));
+ else
+ vty_out(vty,
+ "%24s via %s, %s\n",
+ "",
+ inet_ntoa(
+ path->nexthop),
+ ifindex2ifname(
+ path->ifindex,
+ VRF_DEFAULT));
+ }
+ }
+ }
+ vty_out(vty, "\n");
+}
+
+static void show_ip_ospf_route_router(struct vty *vty, struct route_table *rtrs)
+{
+ struct route_node *rn;
+ struct ospf_route * or ;
+ struct listnode *pnode;
+ struct listnode *node;
+ struct ospf_path *path;
+
+ vty_out(vty, "============ OSPF router routing table =============\n");
+ for (rn = route_top(rtrs); rn; rn = route_next(rn))
+ if (rn->info) {
+ int flag = 0;
+
+ vty_out(vty, "R %-15s ",
+ inet_ntoa(rn->p.u.prefix4));
+
+ for (ALL_LIST_ELEMENTS_RO((struct list *)rn->info, node,
+ or)) {
+ if (flag++)
+ vty_out(vty, "%24s", "");
+
+ /* Show path. */
+ vty_out(vty, "%s [%d] area: %s",
+ (or->path_type == OSPF_PATH_INTER_AREA
+ ? "IA"
+ : " "),
+ or->cost, inet_ntoa(or->u.std.area_id));
+ /* Show flags. */
+ vty_out(vty, "%s%s\n",
+ (or->u.std.flags & ROUTER_LSA_BORDER
+ ? ", ABR"
+ : ""),
+ (or->u.std.flags & ROUTER_LSA_EXTERNAL
+ ? ", ASBR"
+ : ""));
+
+ for (ALL_LIST_ELEMENTS_RO(or->paths, pnode,
+ path)) {
+ if (if_lookup_by_index(path->ifindex,
+ VRF_DEFAULT)) {
+ if (path->nexthop.s_addr == 0)
+ vty_out(vty,
+ "%24s directly attached to %s\n",
+ "",
+ ifindex2ifname(
+ path->ifindex,
+ VRF_DEFAULT));
+ else
+ vty_out(vty,
+ "%24s via %s, %s\n",
+ "",
+ inet_ntoa(
+ path->nexthop),
+ ifindex2ifname(
+ path->ifindex,
+ VRF_DEFAULT));
+ }
+ }
+ }
+ }
+ vty_out(vty, "\n");
+}
+
+static void show_ip_ospf_route_external(struct vty *vty, struct route_table *rt)
+{
+ struct route_node *rn;
+ struct ospf_route *er;
+ struct listnode *pnode, *pnnode;
+ struct ospf_path *path;
+
+ vty_out(vty, "============ OSPF external routing table ===========\n");
+ for (rn = route_top(rt); rn; rn = route_next(rn))
+ if ((er = rn->info) != NULL) {
+ char buf1[19];
+ snprintf(buf1, 19, "%s/%d", inet_ntoa(rn->p.u.prefix4),
+ rn->p.prefixlen);
+
+ switch (er->path_type) {
+ case OSPF_PATH_TYPE1_EXTERNAL:
+ vty_out(vty,
+ "N E1 %-18s [%d] tag: %" ROUTE_TAG_PRI
+ "\n",
+ buf1, er->cost, er->u.ext.tag);
+ break;
+ case OSPF_PATH_TYPE2_EXTERNAL:
+ vty_out(vty,
+ "N E2 %-18s [%d/%d] tag: %" ROUTE_TAG_PRI
+ "\n",
+ buf1, er->cost, er->u.ext.type2_cost,
+ er->u.ext.tag);
+ break;
+ }
+
+ for (ALL_LIST_ELEMENTS(er->paths, pnode, pnnode,
+ path)) {
+ if (if_lookup_by_index(path->ifindex,
+ VRF_DEFAULT)) {
+ if (path->nexthop.s_addr == 0)
+ vty_out(vty,
+ "%24s directly attached to %s\n",
+ "",
+ ifindex2ifname(
+ path->ifindex,
+ VRF_DEFAULT));
+ else
+ vty_out(vty,
+ "%24s via %s, %s\n",
+ "",
+ inet_ntoa(
+ path->nexthop),
+ ifindex2ifname(
+ path->ifindex,
+ VRF_DEFAULT));
+ }
}
- }
- }
- }
- vty_out (vty, "\n");
-}
-
-static void
-show_ip_ospf_route_external (struct vty *vty, struct route_table *rt)
-{
- struct route_node *rn;
- struct ospf_route *er;
- struct listnode *pnode, *pnnode;
- struct ospf_path *path;
-
- vty_out (vty, "============ OSPF external routing table ===========\n");
- for (rn = route_top (rt); rn; rn = route_next (rn))
- if ((er = rn->info) != NULL)
- {
- char buf1[19];
- snprintf (buf1, 19, "%s/%d",
- inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen);
-
- switch (er->path_type)
- {
- case OSPF_PATH_TYPE1_EXTERNAL:
- vty_out (vty, "N E1 %-18s [%d] tag: %"ROUTE_TAG_PRI"\n", buf1,
- er->cost, er->u.ext.tag);
- break;
- case OSPF_PATH_TYPE2_EXTERNAL:
- vty_out (vty, "N E2 %-18s [%d/%d] tag: %"ROUTE_TAG_PRI"\n", buf1, er->cost,
- er->u.ext.type2_cost, er->u.ext.tag);
- break;
- }
-
- for (ALL_LIST_ELEMENTS (er->paths, pnode, pnnode, path))
- {
- if (if_lookup_by_index(path->ifindex, VRF_DEFAULT))
- {
- if (path->nexthop.s_addr == 0)
- vty_out (vty, "%24s directly attached to %s\n",
- "", ifindex2ifname (path->ifindex, VRF_DEFAULT));
- else
- vty_out (vty, "%24s via %s, %s\n", "",
- inet_ntoa (path->nexthop),
- ifindex2ifname (path->ifindex, VRF_DEFAULT));
- }
- }
- }
- vty_out (vty, "\n");
+ }
+ vty_out(vty, "\n");
}
-static int
-show_ip_ospf_border_routers_common (struct vty *vty, struct ospf *ospf)
+static int show_ip_ospf_border_routers_common(struct vty *vty,
+ struct ospf *ospf)
{
- if (ospf->instance)
- vty_out (vty, "\nOSPF Instance: %d\n\n", ospf->instance);
+ if (ospf->instance)
+ vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);
- if (ospf->new_table == NULL)
- {
- vty_out (vty, "No OSPF routing information exist\n");
- return CMD_SUCCESS;
- }
+ if (ospf->new_table == NULL) {
+ vty_out(vty, "No OSPF routing information exist\n");
+ return CMD_SUCCESS;
+ }
- /* Show Network routes.
- show_ip_ospf_route_network (vty, ospf->new_table); */
+ /* Show Network routes.
+ show_ip_ospf_route_network (vty, ospf->new_table); */
- /* Show Router routes. */
- show_ip_ospf_route_router (vty, ospf->new_rtrs);
+ /* Show Router routes. */
+ show_ip_ospf_route_router(vty, ospf->new_rtrs);
- vty_out (vty, "\n");
+ vty_out(vty, "\n");
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf_border_routers,
@@ -7962,12 +8004,12 @@ DEFUN (show_ip_ospf_border_routers,
"OSPF information\n"
"Show all the ABR's and ASBR's\n")
{
- struct ospf *ospf;
+ struct ospf *ospf;
- if ((ospf = ospf_lookup ()) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_border_routers_common(vty, ospf);
+ return show_ip_ospf_border_routers_common(vty, ospf);
}
DEFUN (show_ip_ospf_instance_border_routers,
@@ -7979,41 +8021,40 @@ DEFUN (show_ip_ospf_instance_border_routers,
"Instance ID\n"
"Show all the ABR's and ASBR's\n")
{
- int idx_number = 3;
- struct ospf *ospf;
- u_short instance = 0;
+ int idx_number = 3;
+ struct ospf *ospf;
+ u_short instance = 0;
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
- if ((ospf = ospf_lookup_instance (instance)) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ if ((ospf = ospf_lookup_instance(instance)) == NULL
+ || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_border_routers_common(vty, ospf);
+ return show_ip_ospf_border_routers_common(vty, ospf);
}
-static int
-show_ip_ospf_route_common (struct vty *vty, struct ospf *ospf)
+static int show_ip_ospf_route_common(struct vty *vty, struct ospf *ospf)
{
- if (ospf->instance)
- vty_out (vty, "\nOSPF Instance: %d\n\n", ospf->instance);
+ if (ospf->instance)
+ vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance);
- if (ospf->new_table == NULL)
- {
- vty_out (vty, "No OSPF routing information exist\n");
- return CMD_SUCCESS;
- }
+ if (ospf->new_table == NULL) {
+ vty_out(vty, "No OSPF routing information exist\n");
+ return CMD_SUCCESS;
+ }
- /* Show Network routes. */
- show_ip_ospf_route_network (vty, ospf->new_table);
+ /* Show Network routes. */
+ show_ip_ospf_route_network(vty, ospf->new_table);
- /* Show Router routes. */
- show_ip_ospf_route_router (vty, ospf->new_rtrs);
+ /* Show Router routes. */
+ show_ip_ospf_route_router(vty, ospf->new_rtrs);
- /* Show AS External routes. */
- show_ip_ospf_route_external (vty, ospf->old_external_route);
+ /* Show AS External routes. */
+ show_ip_ospf_route_external(vty, ospf->old_external_route);
- vty_out (vty, "\n");
+ vty_out(vty, "\n");
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ip_ospf_route,
@@ -8024,12 +8065,12 @@ DEFUN (show_ip_ospf_route,
"OSPF information\n"
"OSPF routing table\n")
{
- struct ospf *ospf;
+ struct ospf *ospf;
- if ((ospf = ospf_lookup ()) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ if ((ospf = ospf_lookup()) == NULL || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_route_common(vty, ospf);
+ return show_ip_ospf_route_common(vty, ospf);
}
DEFUN (show_ip_ospf_instance_route,
@@ -8041,907 +8082,902 @@ DEFUN (show_ip_ospf_instance_route,
"Instance ID\n"
"OSPF routing table\n")
{
- int idx_number = 3;
- struct ospf *ospf;
- u_short instance = 0;
+ int idx_number = 3;
+ struct ospf *ospf;
+ u_short instance = 0;
- instance = strtoul(argv[idx_number]->arg, NULL, 10);
- if ((ospf = ospf_lookup_instance (instance)) == NULL || !ospf->oi_running)
- return CMD_SUCCESS;
+ instance = strtoul(argv[idx_number]->arg, NULL, 10);
+ if ((ospf = ospf_lookup_instance(instance)) == NULL
+ || !ospf->oi_running)
+ return CMD_SUCCESS;
- return show_ip_ospf_route_common(vty, ospf);
+ return show_ip_ospf_route_common(vty, ospf);
}
-const char *ospf_abr_type_str[] =
-{
- "unknown",
- "standard",
- "ibm",
- "cisco",
- "shortcut"
-};
+const char *ospf_abr_type_str[] = {"unknown", "standard", "ibm", "cisco",
+ "shortcut"};
-const char *ospf_shortcut_mode_str[] =
-{
- "default",
- "enable",
- "disable"
-};
+const char *ospf_shortcut_mode_str[] = {"default", "enable", "disable"};
-const char *ospf_int_type_str[] =
-{
- "unknown", /* should never be used. */
- "point-to-point",
- "broadcast",
- "non-broadcast",
- "point-to-multipoint",
- "virtual-link", /* should never be used. */
- "loopback"
-};
+const char *ospf_int_type_str[] = {"unknown", /* should never be used. */
+ "point-to-point", "broadcast",
+ "non-broadcast", "point-to-multipoint",
+ "virtual-link", /* should never be used. */
+ "loopback"};
/* Configuration write function for ospfd. */
-static int
-config_write_interface (struct vty *vty)
-{
- struct listnode *n1, *n2;
- struct interface *ifp;
- struct crypt_key *ck;
- int write = 0;
- struct route_node *rn = NULL;
- struct ospf_if_params *params;
- struct ospf *ospf = ospf_lookup();
-
- for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), n1, ifp))
- {
- if (memcmp (ifp->name, "VLINK", 5) == 0)
- continue;
-
- if (ifp->ifindex == IFINDEX_DELETED)
- continue;
-
- vty_out (vty, "!\n");
- vty_out (vty, "interface %s\n", ifp->name);
- if (ifp->desc)
- vty_out (vty, " description %s\n", ifp->desc);
-
- write++;
-
- params = IF_DEF_PARAMS (ifp);
-
- do {
- /* Interface Network print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, type) &&
- params->type != OSPF_IFTYPE_LOOPBACK)
- {
- if (params->type != ospf_default_iftype(ifp))
- {
- vty_out (vty, " ip ospf network %s",
- ospf_int_type_str[params->type]);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "\n");
- }
- }
-
- /* OSPF interface authentication print */
- if (OSPF_IF_PARAM_CONFIGURED (params, auth_type) &&
- params->auth_type != OSPF_AUTH_NOTSET)
- {
- const char *auth_str;
-
- /* Translation tables are not that much help here due to syntax
- of the simple option */
- switch (params->auth_type)
- {
-
- case OSPF_AUTH_NULL:
- auth_str = " null";
- break;
-
- case OSPF_AUTH_SIMPLE:
- auth_str = "";
- break;
-
- case OSPF_AUTH_CRYPTOGRAPHIC:
- auth_str = " message-digest";
- break;
-
- default:
- auth_str = "";
- break;
- }
-
- vty_out (vty, " ip ospf authentication%s", auth_str);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "\n");
- }
-
- /* Simple Authentication Password print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, auth_simple) &&
- params->auth_simple[0] != '\0')
- {
- vty_out (vty, " ip ospf authentication-key %s",
- params->auth_simple);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "\n");
- }
-
- /* Cryptographic Authentication Key print. */
- for (ALL_LIST_ELEMENTS_RO (params->auth_crypt, n2, ck))
- {
- vty_out (vty, " ip ospf message-digest-key %d md5 %s",
- ck->key_id, ck->auth_key);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "\n");
- }
-
- /* Interface Output Cost print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, output_cost_cmd))
- {
- vty_out (vty, " ip ospf cost %u", params->output_cost_cmd);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "\n");
- }
-
- /* Hello Interval print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, v_hello) &&
- params->v_hello != OSPF_HELLO_INTERVAL_DEFAULT)
- {
- vty_out (vty, " ip ospf hello-interval %u", params->v_hello);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "\n");
- }
-
-
- /* Router Dead Interval print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, v_wait) &&
- params->v_wait != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT)
- {
- vty_out (vty, " ip ospf dead-interval ");
-
- /* fast hello ? */
- if (OSPF_IF_PARAM_CONFIGURED (params, fast_hello))
- vty_out (vty, "minimal hello-multiplier %d",
- params->fast_hello);
- else
- vty_out (vty, "%u", params->v_wait);
-
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "\n");
- }
-
- /* Router Priority print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, priority) &&
- params->priority != OSPF_ROUTER_PRIORITY_DEFAULT)
- {
- vty_out (vty, " ip ospf priority %u", params->priority);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "\n");
- }
-
- /* Retransmit Interval print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, retransmit_interval) &&
- params->retransmit_interval != OSPF_RETRANSMIT_INTERVAL_DEFAULT)
- {
- vty_out (vty, " ip ospf retransmit-interval %u",
- params->retransmit_interval);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "\n");
- }
-
- /* Transmit Delay print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, transmit_delay) &&
- params->transmit_delay != OSPF_TRANSMIT_DELAY_DEFAULT)
- {
- vty_out (vty, " ip ospf transmit-delay %u", params->transmit_delay);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "\n");
- }
-
- /* Area print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, if_area))
- {
- if (ospf->instance)
- vty_out (vty, " ip ospf %d", ospf->instance);
- else
- vty_out (vty, " ip ospf");
-
- vty_out (vty, " area %s", inet_ntoa (params->if_area));
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "\n");
- }
-
- /* bfd print. */
- ospf_bfd_write_config(vty, params);
-
- /* MTU ignore print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, mtu_ignore) &&
- params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT)
- {
- if (params->mtu_ignore == 0)
- vty_out (vty, " no ip ospf mtu-ignore");
- else
- vty_out (vty, " ip ospf mtu-ignore");
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "\n");
- }
-
-
- while (1)
- {
- if (rn == NULL)
- rn = route_top (IF_OIFS_PARAMS (ifp));
- else
- rn = route_next (rn);
-
- if (rn == NULL)
- break;
- params = rn->info;
- if (params != NULL)
- break;
- }
- } while (rn);
-
- ospf_opaque_config_write_if (vty, ifp);
- }
-
- return write;
+static int config_write_interface(struct vty *vty)
+{
+ struct listnode *n1, *n2;
+ struct interface *ifp;
+ struct crypt_key *ck;
+ int write = 0;
+ struct route_node *rn = NULL;
+ struct ospf_if_params *params;
+ struct ospf *ospf = ospf_lookup();
+
+ for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), n1, ifp)) {
+ if (memcmp(ifp->name, "VLINK", 5) == 0)
+ continue;
+
+ if (ifp->ifindex == IFINDEX_DELETED)
+ continue;
+
+ vty_out(vty, "!\n");
+ vty_out(vty, "interface %s\n", ifp->name);
+ if (ifp->desc)
+ vty_out(vty, " description %s\n", ifp->desc);
+
+ write++;
+
+ params = IF_DEF_PARAMS(ifp);
+
+ do {
+ /* Interface Network print. */
+ if (OSPF_IF_PARAM_CONFIGURED(params, type)
+ && params->type != OSPF_IFTYPE_LOOPBACK) {
+ if (params->type != ospf_default_iftype(ifp)) {
+ vty_out(vty, " ip ospf network %s",
+ ospf_int_type_str
+ [params->type]);
+ if (params != IF_DEF_PARAMS(ifp))
+ vty_out(vty, " %s",
+ inet_ntoa(
+ rn->p.u.prefix4));
+ vty_out(vty, "\n");
+ }
+ }
+
+ /* OSPF interface authentication print */
+ if (OSPF_IF_PARAM_CONFIGURED(params, auth_type)
+ && params->auth_type != OSPF_AUTH_NOTSET) {
+ const char *auth_str;
+
+ /* Translation tables are not that much help
+ here due to syntax
+ of the simple option */
+ switch (params->auth_type) {
+
+ case OSPF_AUTH_NULL:
+ auth_str = " null";
+ break;
+
+ case OSPF_AUTH_SIMPLE:
+ auth_str = "";
+ break;
+
+ case OSPF_AUTH_CRYPTOGRAPHIC:
+ auth_str = " message-digest";
+ break;
+
+ default:
+ auth_str = "";
+ break;
+ }
+
+ vty_out(vty, " ip ospf authentication%s",
+ auth_str);
+ if (params != IF_DEF_PARAMS(ifp))
+ vty_out(vty, " %s",
+ inet_ntoa(rn->p.u.prefix4));
+ vty_out(vty, "\n");
+ }
+
+ /* Simple Authentication Password print. */
+ if (OSPF_IF_PARAM_CONFIGURED(params, auth_simple)
+ && params->auth_simple[0] != '\0') {
+ vty_out(vty, " ip ospf authentication-key %s",
+ params->auth_simple);
+ if (params != IF_DEF_PARAMS(ifp))
+ vty_out(vty, " %s",
+ inet_ntoa(rn->p.u.prefix4));
+ vty_out(vty, "\n");
+ }
+
+ /* Cryptographic Authentication Key print. */
+ for (ALL_LIST_ELEMENTS_RO(params->auth_crypt, n2, ck)) {
+ vty_out(vty,
+ " ip ospf message-digest-key %d md5 %s",
+ ck->key_id, ck->auth_key);
+ if (params != IF_DEF_PARAMS(ifp))
+ vty_out(vty, " %s",
+ inet_ntoa(rn->p.u.prefix4));
+ vty_out(vty, "\n");
+ }
+
+ /* Interface Output Cost print. */
+ if (OSPF_IF_PARAM_CONFIGURED(params, output_cost_cmd)) {
+ vty_out(vty, " ip ospf cost %u",
+ params->output_cost_cmd);
+ if (params != IF_DEF_PARAMS(ifp))
+ vty_out(vty, " %s",
+ inet_ntoa(rn->p.u.prefix4));
+ vty_out(vty, "\n");
+ }
+
+ /* Hello Interval print. */
+ if (OSPF_IF_PARAM_CONFIGURED(params, v_hello)
+ && params->v_hello != OSPF_HELLO_INTERVAL_DEFAULT) {
+ vty_out(vty, " ip ospf hello-interval %u",
+ params->v_hello);
+ if (params != IF_DEF_PARAMS(ifp))
+ vty_out(vty, " %s",
+ inet_ntoa(rn->p.u.prefix4));
+ vty_out(vty, "\n");
+ }
+
+
+ /* Router Dead Interval print. */
+ if (OSPF_IF_PARAM_CONFIGURED(params, v_wait)
+ && params->v_wait
+ != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT) {
+ vty_out(vty, " ip ospf dead-interval ");
+
+ /* fast hello ? */
+ if (OSPF_IF_PARAM_CONFIGURED(params,
+ fast_hello))
+ vty_out(vty,
+ "minimal hello-multiplier %d",
+ params->fast_hello);
+ else
+ vty_out(vty, "%u", params->v_wait);
+
+ if (params != IF_DEF_PARAMS(ifp))
+ vty_out(vty, " %s",
+ inet_ntoa(rn->p.u.prefix4));
+ vty_out(vty, "\n");
+ }
+
+ /* Router Priority print. */
+ if (OSPF_IF_PARAM_CONFIGURED(params, priority)
+ && params->priority
+ != OSPF_ROUTER_PRIORITY_DEFAULT) {
+ vty_out(vty, " ip ospf priority %u",
+ params->priority);
+ if (params != IF_DEF_PARAMS(ifp))
+ vty_out(vty, " %s",
+ inet_ntoa(rn->p.u.prefix4));
+ vty_out(vty, "\n");
+ }
+
+ /* Retransmit Interval print. */
+ if (OSPF_IF_PARAM_CONFIGURED(params,
+ retransmit_interval)
+ && params->retransmit_interval
+ != OSPF_RETRANSMIT_INTERVAL_DEFAULT) {
+ vty_out(vty, " ip ospf retransmit-interval %u",
+ params->retransmit_interval);
+ if (params != IF_DEF_PARAMS(ifp))
+ vty_out(vty, " %s",
+ inet_ntoa(rn->p.u.prefix4));
+ vty_out(vty, "\n");
+ }
+
+ /* Transmit Delay print. */
+ if (OSPF_IF_PARAM_CONFIGURED(params, transmit_delay)
+ && params->transmit_delay
+ != OSPF_TRANSMIT_DELAY_DEFAULT) {
+ vty_out(vty, " ip ospf transmit-delay %u",
+ params->transmit_delay);
+ if (params != IF_DEF_PARAMS(ifp))
+ vty_out(vty, " %s",
+ inet_ntoa(rn->p.u.prefix4));
+ vty_out(vty, "\n");
+ }
+
+ /* Area print. */
+ if (OSPF_IF_PARAM_CONFIGURED(params, if_area)) {
+ if (ospf->instance)
+ vty_out(vty, " ip ospf %d",
+ ospf->instance);
+ else
+ vty_out(vty, " ip ospf");
+
+ vty_out(vty, " area %s",
+ inet_ntoa(params->if_area));
+ if (params != IF_DEF_PARAMS(ifp))
+ vty_out(vty, " %s",
+ inet_ntoa(rn->p.u.prefix4));
+ vty_out(vty, "\n");
+ }
+
+ /* bfd print. */
+ ospf_bfd_write_config(vty, params);
+
+ /* MTU ignore print. */
+ if (OSPF_IF_PARAM_CONFIGURED(params, mtu_ignore)
+ && params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT) {
+ if (params->mtu_ignore == 0)
+ vty_out(vty, " no ip ospf mtu-ignore");
+ else
+ vty_out(vty, " ip ospf mtu-ignore");
+ if (params != IF_DEF_PARAMS(ifp))
+ vty_out(vty, " %s",
+ inet_ntoa(rn->p.u.prefix4));
+ vty_out(vty, "\n");
+ }
+
+
+ while (1) {
+ if (rn == NULL)
+ rn = route_top(IF_OIFS_PARAMS(ifp));
+ else
+ rn = route_next(rn);
+
+ if (rn == NULL)
+ break;
+ params = rn->info;
+ if (params != NULL)
+ break;
+ }
+ } while (rn);
+
+ ospf_opaque_config_write_if(vty, ifp);
+ }
+
+ return write;
}
-static int
-config_write_network_area (struct vty *vty, struct ospf *ospf)
+static int config_write_network_area(struct vty *vty, struct ospf *ospf)
{
- struct route_node *rn;
- u_char buf[INET_ADDRSTRLEN];
+ struct route_node *rn;
+ u_char buf[INET_ADDRSTRLEN];
- /* `network area' print. */
- for (rn = route_top (ospf->networks); rn; rn = route_next (rn))
- if (rn->info)
- {
- struct ospf_network *n = rn->info;
+ /* `network area' print. */
+ for (rn = route_top(ospf->networks); rn; rn = route_next(rn))
+ if (rn->info) {
+ struct ospf_network *n = rn->info;
- memset (buf, 0, INET_ADDRSTRLEN);
+ memset(buf, 0, INET_ADDRSTRLEN);
- /* Create Area ID string by specified Area ID format. */
- if (n->area_id_fmt == OSPF_AREA_ID_FMT_DOTTEDQUAD)
- strncpy ((char *) buf, inet_ntoa (n->area_id), INET_ADDRSTRLEN);
- else
- sprintf ((char *) buf, "%lu",
- (unsigned long int) ntohl (n->area_id.s_addr));
+ /* Create Area ID string by specified Area ID format. */
+ if (n->area_id_fmt == OSPF_AREA_ID_FMT_DOTTEDQUAD)
+ strncpy((char *)buf, inet_ntoa(n->area_id),
+ INET_ADDRSTRLEN);
+ else
+ sprintf((char *)buf, "%lu",
+ (unsigned long int)ntohl(
+ n->area_id.s_addr));
- /* Network print. */
- vty_out (vty, " network %s/%d area %s\n",
- inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen,
- buf);
- }
+ /* Network print. */
+ vty_out(vty, " network %s/%d area %s\n",
+ inet_ntoa(rn->p.u.prefix4), rn->p.prefixlen,
+ buf);
+ }
- return 0;
+ return 0;
}
-static int
-config_write_ospf_area (struct vty *vty, struct ospf *ospf)
+static int config_write_ospf_area(struct vty *vty, struct ospf *ospf)
{
- struct listnode *node;
- struct ospf_area *area;
- u_char buf[INET_ADDRSTRLEN];
+ struct listnode *node;
+ struct ospf_area *area;
+ u_char buf[INET_ADDRSTRLEN];
- /* Area configuration print. */
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
- {
- struct route_node *rn1;
+ /* Area configuration print. */
+ for (ALL_LIST_ELEMENTS_RO(ospf->areas, node, area)) {
+ struct route_node *rn1;
- area_id2str ((char *) buf, INET_ADDRSTRLEN, &area->area_id,
- area->area_id_fmt);
+ area_id2str((char *)buf, INET_ADDRSTRLEN, &area->area_id,
+ area->area_id_fmt);
- if (area->auth_type != OSPF_AUTH_NULL)
- {
- if (area->auth_type == OSPF_AUTH_SIMPLE)
- vty_out (vty, " area %s authentication\n", buf);
- else
- vty_out (vty, " area %s authentication message-digest\n",
- buf);
- }
+ if (area->auth_type != OSPF_AUTH_NULL) {
+ if (area->auth_type == OSPF_AUTH_SIMPLE)
+ vty_out(vty, " area %s authentication\n", buf);
+ else
+ vty_out(vty,
+ " area %s authentication message-digest\n",
+ buf);
+ }
- if (area->shortcut_configured != OSPF_SHORTCUT_DEFAULT)
- vty_out (vty, " area %s shortcut %s\n", buf,
- ospf_shortcut_mode_str[area->shortcut_configured]);
+ if (area->shortcut_configured != OSPF_SHORTCUT_DEFAULT)
+ vty_out(vty, " area %s shortcut %s\n", buf,
+ ospf_shortcut_mode_str
+ [area->shortcut_configured]);
+
+ if ((area->external_routing == OSPF_AREA_STUB)
+ || (area->external_routing == OSPF_AREA_NSSA)) {
+ if (area->external_routing == OSPF_AREA_STUB)
+ vty_out(vty, " area %s stub", buf);
+ else if (area->external_routing == OSPF_AREA_NSSA) {
+ vty_out(vty, " area %s nssa", buf);
+ switch (area->NSSATranslatorRole) {
+ case OSPF_NSSA_ROLE_NEVER:
+ vty_out(vty, " translate-never");
+ break;
+ case OSPF_NSSA_ROLE_ALWAYS:
+ vty_out(vty, " translate-always");
+ break;
+ case OSPF_NSSA_ROLE_CANDIDATE:
+ default:
+ vty_out(vty, " translate-candidate");
+ }
+ }
- if ((area->external_routing == OSPF_AREA_STUB)
- || (area->external_routing == OSPF_AREA_NSSA)
- )
- {
- if (area->external_routing == OSPF_AREA_STUB)
- vty_out (vty, " area %s stub", buf);
- else if (area->external_routing == OSPF_AREA_NSSA)
- {
- vty_out (vty, " area %s nssa", buf);
- switch (area->NSSATranslatorRole)
- {
- case OSPF_NSSA_ROLE_NEVER:
- vty_out (vty, " translate-never");
- break;
- case OSPF_NSSA_ROLE_ALWAYS:
- vty_out (vty, " translate-always");
- break;
- case OSPF_NSSA_ROLE_CANDIDATE:
- default:
- vty_out (vty, " translate-candidate");
- }
- }
-
- if (area->no_summary)
- vty_out (vty, " no-summary");
-
- vty_out (vty, "\n");
-
- if (area->default_cost != 1)
- vty_out (vty, " area %s default-cost %d\n", buf,
- area->default_cost);
- }
-
- for (rn1 = route_top (area->ranges); rn1; rn1 = route_next (rn1))
- if (rn1->info)
- {
- struct ospf_area_range *range = rn1->info;
-
- vty_out (vty, " area %s range %s/%d", buf,
- inet_ntoa (rn1->p.u.prefix4), rn1->p.prefixlen);
-
- if (range->cost_config != OSPF_AREA_RANGE_COST_UNSPEC)
- vty_out (vty, " cost %d", range->cost_config);
-
- if (!CHECK_FLAG (range->flags, OSPF_AREA_RANGE_ADVERTISE))
- vty_out (vty, " not-advertise");
-
- if (CHECK_FLAG (range->flags, OSPF_AREA_RANGE_SUBSTITUTE))
- vty_out (vty, " substitute %s/%d",
- inet_ntoa (range->subst_addr), range->subst_masklen);
-
- vty_out (vty, "\n");
- }
-
- if (EXPORT_NAME (area))
- vty_out (vty, " area %s export-list %s\n", buf,
- EXPORT_NAME (area));
-
- if (IMPORT_NAME (area))
- vty_out (vty, " area %s import-list %s\n", buf,
- IMPORT_NAME (area));
-
- if (PREFIX_NAME_IN (area))
- vty_out (vty, " area %s filter-list prefix %s in\n", buf,
- PREFIX_NAME_IN (area));
-
- if (PREFIX_NAME_OUT (area))
- vty_out (vty, " area %s filter-list prefix %s out\n", buf,
- PREFIX_NAME_OUT (area));
- }
+ if (area->no_summary)
+ vty_out(vty, " no-summary");
- return 0;
-}
+ vty_out(vty, "\n");
-static int
-config_write_ospf_nbr_nbma (struct vty *vty, struct ospf *ospf)
-{
- struct ospf_nbr_nbma *nbr_nbma;
- struct route_node *rn;
+ if (area->default_cost != 1)
+ vty_out(vty, " area %s default-cost %d\n", buf,
+ area->default_cost);
+ }
- /* Static Neighbor configuration print. */
- for (rn = route_top (ospf->nbr_nbma); rn; rn = route_next (rn))
- if ((nbr_nbma = rn->info))
- {
- vty_out (vty, " neighbor %s", inet_ntoa (nbr_nbma->addr));
+ for (rn1 = route_top(area->ranges); rn1; rn1 = route_next(rn1))
+ if (rn1->info) {
+ struct ospf_area_range *range = rn1->info;
- if (nbr_nbma->priority != OSPF_NEIGHBOR_PRIORITY_DEFAULT)
- vty_out (vty, " priority %d", nbr_nbma->priority);
+ vty_out(vty, " area %s range %s/%d", buf,
+ inet_ntoa(rn1->p.u.prefix4),
+ rn1->p.prefixlen);
- if (nbr_nbma->v_poll != OSPF_POLL_INTERVAL_DEFAULT)
- vty_out (vty, " poll-interval %d", nbr_nbma->v_poll);
+ if (range->cost_config
+ != OSPF_AREA_RANGE_COST_UNSPEC)
+ vty_out(vty, " cost %d",
+ range->cost_config);
- vty_out (vty, "\n");
- }
+ if (!CHECK_FLAG(range->flags,
+ OSPF_AREA_RANGE_ADVERTISE))
+ vty_out(vty, " not-advertise");
- return 0;
+ if (CHECK_FLAG(range->flags,
+ OSPF_AREA_RANGE_SUBSTITUTE))
+ vty_out(vty, " substitute %s/%d",
+ inet_ntoa(range->subst_addr),
+ range->subst_masklen);
+
+ vty_out(vty, "\n");
+ }
+
+ if (EXPORT_NAME(area))
+ vty_out(vty, " area %s export-list %s\n", buf,
+ EXPORT_NAME(area));
+
+ if (IMPORT_NAME(area))
+ vty_out(vty, " area %s import-list %s\n", buf,
+ IMPORT_NAME(area));
+
+ if (PREFIX_NAME_IN(area))
+ vty_out(vty, " area %s filter-list prefix %s in\n", buf,
+ PREFIX_NAME_IN(area));
+
+ if (PREFIX_NAME_OUT(area))
+ vty_out(vty, " area %s filter-list prefix %s out\n",
+ buf, PREFIX_NAME_OUT(area));
+ }
+
+ return 0;
}
-static int
-config_write_virtual_link (struct vty *vty, struct ospf *ospf)
+static int config_write_ospf_nbr_nbma(struct vty *vty, struct ospf *ospf)
{
- struct listnode *node;
- struct ospf_vl_data *vl_data;
- char buf[INET_ADDRSTRLEN];
+ struct ospf_nbr_nbma *nbr_nbma;
+ struct route_node *rn;
- /* Virtual-Link print */
- for (ALL_LIST_ELEMENTS_RO (ospf->vlinks, node, vl_data))
- {
- struct listnode *n2;
- struct crypt_key *ck;
- struct ospf_interface *oi;
+ /* Static Neighbor configuration print. */
+ for (rn = route_top(ospf->nbr_nbma); rn; rn = route_next(rn))
+ if ((nbr_nbma = rn->info)) {
+ vty_out(vty, " neighbor %s", inet_ntoa(nbr_nbma->addr));
- if (vl_data != NULL)
- {
- memset (buf, 0, INET_ADDRSTRLEN);
-
- area_id2str (buf, sizeof(buf), &vl_data->vl_area_id, vl_data->vl_area_id_fmt);
- oi = vl_data->vl_oi;
-
- /* timers */
- if (OSPF_IF_PARAM (oi, v_hello) != OSPF_HELLO_INTERVAL_DEFAULT ||
- OSPF_IF_PARAM (oi, v_wait) != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT ||
- OSPF_IF_PARAM (oi, retransmit_interval) != OSPF_RETRANSMIT_INTERVAL_DEFAULT ||
- OSPF_IF_PARAM (oi, transmit_delay) != OSPF_TRANSMIT_DELAY_DEFAULT)
- vty_out (vty, " area %s virtual-link %s hello-interval %d retransmit-interval %d transmit-delay %d dead-interval %d\n",
- buf,
- inet_ntoa (vl_data->vl_peer),
- OSPF_IF_PARAM (oi, v_hello),
- OSPF_IF_PARAM (oi, retransmit_interval),
- OSPF_IF_PARAM (oi, transmit_delay),
- OSPF_IF_PARAM (oi, v_wait));
- else
- vty_out (vty, " area %s virtual-link %s\n", buf,
- inet_ntoa (vl_data->vl_peer));
- /* Auth key */
- if (IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_simple[0] != '\0')
- vty_out (vty, " area %s virtual-link %s authentication-key %s\n",
- buf,
- inet_ntoa (vl_data->vl_peer),
- IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_simple);
- /* md5 keys */
- for (ALL_LIST_ELEMENTS_RO (IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_crypt,
- n2, ck))
- vty_out (vty, " area %s virtual-link %s"
- " message-digest-key %d md5 %s\n",
- buf,
- inet_ntoa (vl_data->vl_peer),
- ck->key_id, ck->auth_key);
-
- }
- }
+ if (nbr_nbma->priority
+ != OSPF_NEIGHBOR_PRIORITY_DEFAULT)
+ vty_out(vty, " priority %d",
+ nbr_nbma->priority);
- return 0;
+ if (nbr_nbma->v_poll != OSPF_POLL_INTERVAL_DEFAULT)
+ vty_out(vty, " poll-interval %d",
+ nbr_nbma->v_poll);
+
+ vty_out(vty, "\n");
+ }
+
+ return 0;
+}
+
+static int config_write_virtual_link(struct vty *vty, struct ospf *ospf)
+{
+ struct listnode *node;
+ struct ospf_vl_data *vl_data;
+ char buf[INET_ADDRSTRLEN];
+
+ /* Virtual-Link print */
+ for (ALL_LIST_ELEMENTS_RO(ospf->vlinks, node, vl_data)) {
+ struct listnode *n2;
+ struct crypt_key *ck;
+ struct ospf_interface *oi;
+
+ if (vl_data != NULL) {
+ memset(buf, 0, INET_ADDRSTRLEN);
+
+ area_id2str(buf, sizeof(buf), &vl_data->vl_area_id,
+ vl_data->vl_area_id_fmt);
+ oi = vl_data->vl_oi;
+
+ /* timers */
+ if (OSPF_IF_PARAM(oi, v_hello)
+ != OSPF_HELLO_INTERVAL_DEFAULT
+ || OSPF_IF_PARAM(oi, v_wait)
+ != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT
+ || OSPF_IF_PARAM(oi, retransmit_interval)
+ != OSPF_RETRANSMIT_INTERVAL_DEFAULT
+ || OSPF_IF_PARAM(oi, transmit_delay)
+ != OSPF_TRANSMIT_DELAY_DEFAULT)
+ vty_out(vty,
+ " area %s virtual-link %s hello-interval %d retransmit-interval %d transmit-delay %d dead-interval %d\n",
+ buf, inet_ntoa(vl_data->vl_peer),
+ OSPF_IF_PARAM(oi, v_hello),
+ OSPF_IF_PARAM(oi, retransmit_interval),
+ OSPF_IF_PARAM(oi, transmit_delay),
+ OSPF_IF_PARAM(oi, v_wait));
+ else
+ vty_out(vty, " area %s virtual-link %s\n", buf,
+ inet_ntoa(vl_data->vl_peer));
+ /* Auth key */
+ if (IF_DEF_PARAMS(vl_data->vl_oi->ifp)->auth_simple[0]
+ != '\0')
+ vty_out(vty,
+ " area %s virtual-link %s authentication-key %s\n",
+ buf, inet_ntoa(vl_data->vl_peer),
+ IF_DEF_PARAMS(vl_data->vl_oi->ifp)
+ ->auth_simple);
+ /* md5 keys */
+ for (ALL_LIST_ELEMENTS_RO(
+ IF_DEF_PARAMS(vl_data->vl_oi->ifp)
+ ->auth_crypt,
+ n2, ck))
+ vty_out(vty,
+ " area %s virtual-link %s"
+ " message-digest-key %d md5 %s\n",
+ buf, inet_ntoa(vl_data->vl_peer),
+ ck->key_id, ck->auth_key);
+ }
+ }
+
+ return 0;
}
-static int
-config_write_ospf_redistribute (struct vty *vty, struct ospf *ospf)
+static int config_write_ospf_redistribute(struct vty *vty, struct ospf *ospf)
{
- int type;
+ int type;
- /* redistribute print. */
- for (type = 0; type < ZEBRA_ROUTE_MAX; type++)
- {
- struct list *red_list;
- struct listnode *node;
- struct ospf_redist *red;
+ /* redistribute print. */
+ for (type = 0; type < ZEBRA_ROUTE_MAX; type++) {
+ struct list *red_list;
+ struct listnode *node;
+ struct ospf_redist *red;
- red_list = ospf->redist[type];
- if (!red_list)
- continue;
+ red_list = ospf->redist[type];
+ if (!red_list)
+ continue;
- for (ALL_LIST_ELEMENTS_RO(red_list, node, red))
- {
- vty_out (vty, " redistribute %s", zebra_route_string(type));
- if (red->instance)
- vty_out (vty, " %d", red->instance);
+ for (ALL_LIST_ELEMENTS_RO(red_list, node, red)) {
+ vty_out(vty, " redistribute %s",
+ zebra_route_string(type));
+ if (red->instance)
+ vty_out(vty, " %d", red->instance);
- if (red->dmetric.value >= 0)
- vty_out (vty, " metric %d", red->dmetric.value);
+ if (red->dmetric.value >= 0)
+ vty_out(vty, " metric %d", red->dmetric.value);
- if (red->dmetric.type == EXTERNAL_METRIC_TYPE_1)
- vty_out (vty, " metric-type 1");
+ if (red->dmetric.type == EXTERNAL_METRIC_TYPE_1)
+ vty_out(vty, " metric-type 1");
- if (ROUTEMAP_NAME (red))
- vty_out (vty, " route-map %s", ROUTEMAP_NAME (red));
+ if (ROUTEMAP_NAME(red))
+ vty_out(vty, " route-map %s",
+ ROUTEMAP_NAME(red));
- vty_out (vty, "\n");
- }
- }
+ vty_out(vty, "\n");
+ }
+ }
- return 0;
+ return 0;
}
-static int
-config_write_ospf_default_metric (struct vty *vty, struct ospf *ospf)
+static int config_write_ospf_default_metric(struct vty *vty, struct ospf *ospf)
{
- if (ospf->default_metric != -1)
- vty_out (vty, " default-metric %d\n", ospf->default_metric);
- return 0;
+ if (ospf->default_metric != -1)
+ vty_out(vty, " default-metric %d\n", ospf->default_metric);
+ return 0;
}
-static int
-config_write_ospf_distribute (struct vty *vty, struct ospf *ospf)
-{
- int type;
- struct ospf_redist *red;
-
- if (ospf)
- {
- /* distribute-list print. */
- for (type = 0; type < ZEBRA_ROUTE_MAX; type++)
- if (DISTRIBUTE_NAME (ospf, type))
- vty_out (vty, " distribute-list %s out %s\n",
- DISTRIBUTE_NAME (ospf, type),
- zebra_route_string(type));
-
- /* default-information print. */
- if (ospf->default_originate != DEFAULT_ORIGINATE_NONE)
- {
- vty_out (vty, " default-information originate");
- if (ospf->default_originate == DEFAULT_ORIGINATE_ALWAYS)
- vty_out (vty, " always");
+static int config_write_ospf_distribute(struct vty *vty, struct ospf *ospf)
+{
+ int type;
+ struct ospf_redist *red;
- red = ospf_redist_lookup(ospf, DEFAULT_ROUTE, 0);
- if (red)
- {
- if (red->dmetric.value >= 0)
- vty_out (vty, " metric %d",
- red->dmetric.value);
- if (red->dmetric.type == EXTERNAL_METRIC_TYPE_1)
- vty_out (vty, " metric-type 1");
+ if (ospf) {
+ /* distribute-list print. */
+ for (type = 0; type < ZEBRA_ROUTE_MAX; type++)
+ if (DISTRIBUTE_NAME(ospf, type))
+ vty_out(vty, " distribute-list %s out %s\n",
+ DISTRIBUTE_NAME(ospf, type),
+ zebra_route_string(type));
- if (ROUTEMAP_NAME (red))
- vty_out (vty, " route-map %s",
- ROUTEMAP_NAME (red));
- }
-
- vty_out (vty, "\n");
- }
+ /* default-information print. */
+ if (ospf->default_originate != DEFAULT_ORIGINATE_NONE) {
+ vty_out(vty, " default-information originate");
+ if (ospf->default_originate == DEFAULT_ORIGINATE_ALWAYS)
+ vty_out(vty, " always");
- }
+ red = ospf_redist_lookup(ospf, DEFAULT_ROUTE, 0);
+ if (red) {
+ if (red->dmetric.value >= 0)
+ vty_out(vty, " metric %d",
+ red->dmetric.value);
+ if (red->dmetric.type == EXTERNAL_METRIC_TYPE_1)
+ vty_out(vty, " metric-type 1");
- return 0;
+ if (ROUTEMAP_NAME(red))
+ vty_out(vty, " route-map %s",
+ ROUTEMAP_NAME(red));
+ }
+
+ vty_out(vty, "\n");
+ }
+ }
+
+ return 0;
}
-static int
-config_write_ospf_distance (struct vty *vty, struct ospf *ospf)
-{
- struct route_node *rn;
- struct ospf_distance *odistance;
-
- if (ospf->distance_all)
- vty_out (vty, " distance %d\n", ospf->distance_all);
-
- if (ospf->distance_intra
- || ospf->distance_inter
- || ospf->distance_external)
- {
- vty_out (vty, " distance ospf");
-
- if (ospf->distance_intra)
- vty_out (vty, " intra-area %d", ospf->distance_intra);
- if (ospf->distance_inter)
- vty_out (vty, " inter-area %d", ospf->distance_inter);
- if (ospf->distance_external)
- vty_out (vty, " external %d", ospf->distance_external);
-
- vty_out (vty, "\n");
- }
-
- for (rn = route_top (ospf->distance_table); rn; rn = route_next (rn))
- if ((odistance = rn->info) != NULL)
- {
- vty_out (vty, " distance %d %s/%d %s\n", odistance->distance,
- inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen,
- odistance->access_list ? odistance->access_list : "");
- }
- return 0;
+static int config_write_ospf_distance(struct vty *vty, struct ospf *ospf)
+{
+ struct route_node *rn;
+ struct ospf_distance *odistance;
+
+ if (ospf->distance_all)
+ vty_out(vty, " distance %d\n", ospf->distance_all);
+
+ if (ospf->distance_intra || ospf->distance_inter
+ || ospf->distance_external) {
+ vty_out(vty, " distance ospf");
+
+ if (ospf->distance_intra)
+ vty_out(vty, " intra-area %d", ospf->distance_intra);
+ if (ospf->distance_inter)
+ vty_out(vty, " inter-area %d", ospf->distance_inter);
+ if (ospf->distance_external)
+ vty_out(vty, " external %d", ospf->distance_external);
+
+ vty_out(vty, "\n");
+ }
+
+ for (rn = route_top(ospf->distance_table); rn; rn = route_next(rn))
+ if ((odistance = rn->info) != NULL) {
+ vty_out(vty, " distance %d %s/%d %s\n",
+ odistance->distance, inet_ntoa(rn->p.u.prefix4),
+ rn->p.prefixlen,
+ odistance->access_list ? odistance->access_list
+ : "");
+ }
+ return 0;
}
/* OSPF configuration write function. */
-static int
-ospf_config_write (struct vty *vty)
-{
- struct ospf *ospf;
- struct interface *ifp;
- struct ospf_interface *oi;
- struct listnode *node;
- int write = 0;
-
- ospf = ospf_lookup ();
- if (ospf != NULL && ospf->oi_running)
- {
- /* `router ospf' print. */
- if (ospf->instance)
- vty_out (vty, "router ospf %d\n", ospf->instance);
- else
- vty_out (vty, "router ospf\n");
-
- write++;
-
- if (!ospf->networks)
- return write;
-
- /* Router ID print. */
- if (ospf->router_id_static.s_addr != 0)
- vty_out (vty, " ospf router-id %s\n",
- inet_ntoa (ospf->router_id_static));
-
- /* ABR type print. */
- if (ospf->abr_type != OSPF_ABR_DEFAULT)
- vty_out (vty, " ospf abr-type %s\n",
- ospf_abr_type_str[ospf->abr_type]);
-
- /* log-adjacency-changes flag print. */
- if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES))
- {
- if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL))
- vty_out(vty, " log-adjacency-changes detail\n");
- else if (!DFLT_OSPF_LOG_ADJACENCY_CHANGES)
- vty_out(vty, " log-adjacency-changes\n");
- }
- else if (DFLT_OSPF_LOG_ADJACENCY_CHANGES)
- {
- vty_out(vty, " no log-adjacency-changes\n");
- }
-
- /* RFC1583 compatibility flag print -- Compatible with CISCO 12.1. */
- if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE))
- vty_out (vty, " compatible rfc1583\n");
-
- /* auto-cost reference-bandwidth configuration. */
- if (ospf->ref_bandwidth != OSPF_DEFAULT_REF_BANDWIDTH)
- {
- vty_out (vty, "! Important: ensure reference bandwidth "
- "is consistent across all routers\n");
- vty_out (vty, " auto-cost reference-bandwidth %d\n",
- ospf->ref_bandwidth);
- }
-
- /* SPF timers print. */
- if (ospf->spf_delay != OSPF_SPF_DELAY_DEFAULT ||
- ospf->spf_holdtime != OSPF_SPF_HOLDTIME_DEFAULT ||
- ospf->spf_max_holdtime != OSPF_SPF_MAX_HOLDTIME_DEFAULT)
- vty_out (vty, " timers throttle spf %d %d %d\n",
- ospf->spf_delay, ospf->spf_holdtime,
- ospf->spf_max_holdtime);
-
- /* LSA timers print. */
- if (ospf->min_ls_interval != OSPF_MIN_LS_INTERVAL)
- vty_out (vty, " timers throttle lsa all %d\n",
- ospf->min_ls_interval);
- if (ospf->min_ls_arrival != OSPF_MIN_LS_ARRIVAL)
- vty_out (vty, " timers lsa min-arrival %d\n",
- ospf->min_ls_arrival);
-
- /* Write multiplier print. */
- if (ospf->write_oi_count != OSPF_WRITE_INTERFACE_COUNT_DEFAULT)
- vty_out (vty, " ospf write-multiplier %d\n",
- ospf->write_oi_count);
-
- /* Max-metric router-lsa print */
- config_write_stub_router (vty, ospf);
-
- /* SPF refresh parameters print. */
- if (ospf->lsa_refresh_interval != OSPF_LSA_REFRESH_INTERVAL_DEFAULT)
- vty_out (vty, " refresh timer %d\n",
- ospf->lsa_refresh_interval);
-
- /* Redistribute information print. */
- config_write_ospf_redistribute (vty, ospf);
-
- /* passive-interface print. */
- if (ospf->passive_interface_default == OSPF_IF_PASSIVE)
- vty_out (vty, " passive-interface default\n");
-
- for (ALL_LIST_ELEMENTS_RO (om->iflist, node, ifp))
- if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp), passive_interface)
- && IF_DEF_PARAMS (ifp)->passive_interface !=
- ospf->passive_interface_default)
- {
- vty_out (vty, " %spassive-interface %s\n",
- IF_DEF_PARAMS (ifp)->passive_interface ? "" : "no ",
- ifp->name);
- }
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
- {
- if (!OSPF_IF_PARAM_CONFIGURED (oi->params, passive_interface))
- continue;
- if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (oi->ifp),
- passive_interface))
- {
- if (oi->params->passive_interface == IF_DEF_PARAMS (oi->ifp)->passive_interface)
- continue;
- }
- else if (oi->params->passive_interface == ospf->passive_interface_default)
- continue;
-
- vty_out (vty, " %spassive-interface %s %s\n",
- oi->params->passive_interface ? "" : "no ",
- oi->ifp->name,
- inet_ntoa (oi->address->u.prefix4));
- }
-
- /* Network area print. */
- config_write_network_area (vty, ospf);
-
- /* Area config print. */
- config_write_ospf_area (vty, ospf);
-
- /* static neighbor print. */
- config_write_ospf_nbr_nbma (vty, ospf);
-
- /* Virtual-Link print. */
- config_write_virtual_link (vty, ospf);
-
- /* Default metric configuration. */
- config_write_ospf_default_metric (vty, ospf);
-
- /* Distribute-list and default-information print. */
- config_write_ospf_distribute (vty, ospf);
-
- /* Distance configuration. */
- config_write_ospf_distance (vty, ospf);
-
- ospf_opaque_config_write_router (vty, ospf);
- }
-
- return write;
-}
-
-void
-ospf_vty_show_init (void)
-{
- /* "show ip ospf" commands. */
- install_element (VIEW_NODE, &show_ip_ospf_cmd);
-
- install_element (VIEW_NODE, &show_ip_ospf_instance_cmd);
-
- /* "show ip ospf database" commands. */
- install_element (VIEW_NODE, &show_ip_ospf_database_max_cmd);
-
- install_element (VIEW_NODE, &show_ip_ospf_instance_database_type_adv_router_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_instance_database_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_instance_database_max_cmd);
-
- /* "show ip ospf interface" commands. */
- install_element (VIEW_NODE, &show_ip_ospf_interface_cmd);
-
- install_element (VIEW_NODE, &show_ip_ospf_instance_interface_cmd);
-
- /* "show ip ospf neighbor" commands. */
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_int_detail_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_int_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_id_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_detail_all_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_detail_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_all_cmd);
-
- install_element (VIEW_NODE, &show_ip_ospf_instance_neighbor_int_detail_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_instance_neighbor_int_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_instance_neighbor_id_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_instance_neighbor_detail_all_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_instance_neighbor_detail_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_instance_neighbor_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_instance_neighbor_all_cmd);
-
- /* "show ip ospf route" commands. */
- install_element (VIEW_NODE, &show_ip_ospf_route_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_border_routers_cmd);
-
- install_element (VIEW_NODE, &show_ip_ospf_instance_route_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_instance_border_routers_cmd);
+static int ospf_config_write(struct vty *vty)
+{
+ struct ospf *ospf;
+ struct interface *ifp;
+ struct ospf_interface *oi;
+ struct listnode *node;
+ int write = 0;
+
+ ospf = ospf_lookup();
+ if (ospf != NULL && ospf->oi_running) {
+ /* `router ospf' print. */
+ if (ospf->instance)
+ vty_out(vty, "router ospf %d\n", ospf->instance);
+ else
+ vty_out(vty, "router ospf\n");
+
+ write++;
+
+ if (!ospf->networks)
+ return write;
+
+ /* Router ID print. */
+ if (ospf->router_id_static.s_addr != 0)
+ vty_out(vty, " ospf router-id %s\n",
+ inet_ntoa(ospf->router_id_static));
+
+ /* ABR type print. */
+ if (ospf->abr_type != OSPF_ABR_DEFAULT)
+ vty_out(vty, " ospf abr-type %s\n",
+ ospf_abr_type_str[ospf->abr_type]);
+
+ /* log-adjacency-changes flag print. */
+ if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES)) {
+ if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL))
+ vty_out(vty, " log-adjacency-changes detail\n");
+ else if (!DFLT_OSPF_LOG_ADJACENCY_CHANGES)
+ vty_out(vty, " log-adjacency-changes\n");
+ } else if (DFLT_OSPF_LOG_ADJACENCY_CHANGES) {
+ vty_out(vty, " no log-adjacency-changes\n");
+ }
+
+ /* RFC1583 compatibility flag print -- Compatible with CISCO
+ * 12.1. */
+ if (CHECK_FLAG(ospf->config, OSPF_RFC1583_COMPATIBLE))
+ vty_out(vty, " compatible rfc1583\n");
+
+ /* auto-cost reference-bandwidth configuration. */
+ if (ospf->ref_bandwidth != OSPF_DEFAULT_REF_BANDWIDTH) {
+ vty_out(vty,
+ "! Important: ensure reference bandwidth "
+ "is consistent across all routers\n");
+ vty_out(vty, " auto-cost reference-bandwidth %d\n",
+ ospf->ref_bandwidth);
+ }
+
+ /* SPF timers print. */
+ if (ospf->spf_delay != OSPF_SPF_DELAY_DEFAULT
+ || ospf->spf_holdtime != OSPF_SPF_HOLDTIME_DEFAULT
+ || ospf->spf_max_holdtime != OSPF_SPF_MAX_HOLDTIME_DEFAULT)
+ vty_out(vty, " timers throttle spf %d %d %d\n",
+ ospf->spf_delay, ospf->spf_holdtime,
+ ospf->spf_max_holdtime);
+
+ /* LSA timers print. */
+ if (ospf->min_ls_interval != OSPF_MIN_LS_INTERVAL)
+ vty_out(vty, " timers throttle lsa all %d\n",
+ ospf->min_ls_interval);
+ if (ospf->min_ls_arrival != OSPF_MIN_LS_ARRIVAL)
+ vty_out(vty, " timers lsa min-arrival %d\n",
+ ospf->min_ls_arrival);
+
+ /* Write multiplier print. */
+ if (ospf->write_oi_count != OSPF_WRITE_INTERFACE_COUNT_DEFAULT)
+ vty_out(vty, " ospf write-multiplier %d\n",
+ ospf->write_oi_count);
+
+ /* Max-metric router-lsa print */
+ config_write_stub_router(vty, ospf);
+
+ /* SPF refresh parameters print. */
+ if (ospf->lsa_refresh_interval
+ != OSPF_LSA_REFRESH_INTERVAL_DEFAULT)
+ vty_out(vty, " refresh timer %d\n",
+ ospf->lsa_refresh_interval);
+
+ /* Redistribute information print. */
+ config_write_ospf_redistribute(vty, ospf);
+
+ /* passive-interface print. */
+ if (ospf->passive_interface_default == OSPF_IF_PASSIVE)
+ vty_out(vty, " passive-interface default\n");
+
+ for (ALL_LIST_ELEMENTS_RO(om->iflist, node, ifp))
+ if (OSPF_IF_PARAM_CONFIGURED(IF_DEF_PARAMS(ifp),
+ passive_interface)
+ && IF_DEF_PARAMS(ifp)->passive_interface
+ != ospf->passive_interface_default) {
+ vty_out(vty, " %spassive-interface %s\n",
+ IF_DEF_PARAMS(ifp)->passive_interface
+ ? ""
+ : "no ",
+ ifp->name);
+ }
+ for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi)) {
+ if (!OSPF_IF_PARAM_CONFIGURED(oi->params,
+ passive_interface))
+ continue;
+ if (OSPF_IF_PARAM_CONFIGURED(IF_DEF_PARAMS(oi->ifp),
+ passive_interface)) {
+ if (oi->params->passive_interface
+ == IF_DEF_PARAMS(oi->ifp)
+ ->passive_interface)
+ continue;
+ } else if (oi->params->passive_interface
+ == ospf->passive_interface_default)
+ continue;
+
+ vty_out(vty, " %spassive-interface %s %s\n",
+ oi->params->passive_interface ? "" : "no ",
+ oi->ifp->name,
+ inet_ntoa(oi->address->u.prefix4));
+ }
+
+ /* Network area print. */
+ config_write_network_area(vty, ospf);
+
+ /* Area config print. */
+ config_write_ospf_area(vty, ospf);
+
+ /* static neighbor print. */
+ config_write_ospf_nbr_nbma(vty, ospf);
+
+ /* Virtual-Link print. */
+ config_write_virtual_link(vty, ospf);
+
+ /* Default metric configuration. */
+ config_write_ospf_default_metric(vty, ospf);
+
+ /* Distribute-list and default-information print. */
+ config_write_ospf_distribute(vty, ospf);
+
+ /* Distance configuration. */
+ config_write_ospf_distance(vty, ospf);
+
+ ospf_opaque_config_write_router(vty, ospf);
+ }
+
+ return write;
+}
+
+void ospf_vty_show_init(void)
+{
+ /* "show ip ospf" commands. */
+ install_element(VIEW_NODE, &show_ip_ospf_cmd);
+
+ install_element(VIEW_NODE, &show_ip_ospf_instance_cmd);
+
+ /* "show ip ospf database" commands. */
+ install_element(VIEW_NODE, &show_ip_ospf_database_max_cmd);
+
+ install_element(VIEW_NODE,
+ &show_ip_ospf_instance_database_type_adv_router_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_instance_database_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_instance_database_max_cmd);
+
+ /* "show ip ospf interface" commands. */
+ install_element(VIEW_NODE, &show_ip_ospf_interface_cmd);
+
+ install_element(VIEW_NODE, &show_ip_ospf_instance_interface_cmd);
+
+ /* "show ip ospf neighbor" commands. */
+ install_element(VIEW_NODE, &show_ip_ospf_neighbor_int_detail_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_neighbor_int_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_neighbor_id_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_neighbor_detail_all_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_neighbor_detail_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_neighbor_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_neighbor_all_cmd);
+
+ install_element(VIEW_NODE,
+ &show_ip_ospf_instance_neighbor_int_detail_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_instance_neighbor_int_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_instance_neighbor_id_cmd);
+ install_element(VIEW_NODE,
+ &show_ip_ospf_instance_neighbor_detail_all_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_instance_neighbor_detail_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_instance_neighbor_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_instance_neighbor_all_cmd);
+
+ /* "show ip ospf route" commands. */
+ install_element(VIEW_NODE, &show_ip_ospf_route_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_border_routers_cmd);
+
+ install_element(VIEW_NODE, &show_ip_ospf_instance_route_cmd);
+ install_element(VIEW_NODE, &show_ip_ospf_instance_border_routers_cmd);
}
/* ospfd's interface node. */
-static struct cmd_node interface_node =
-{
- INTERFACE_NODE,
- "%s(config-if)# ",
- 1
-};
+static struct cmd_node interface_node = {INTERFACE_NODE, "%s(config-if)# ", 1};
/* Initialization of OSPF interface. */
-static void
-ospf_vty_if_init (void)
-{
- /* Install interface node. */
- install_node (&interface_node, config_write_interface);
- if_cmd_init ();
-
- /* "ip ospf authentication" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_authentication_args_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_authentication_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_authentication_args_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_authentication_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_authentication_key_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_authentication_key_authkey_addr_cmd);
- install_element (INTERFACE_NODE, &no_ospf_authentication_key_authkey_addr_cmd);
-
- /* "ip ospf message-digest-key" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_message_digest_key_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_message_digest_key_cmd);
-
- /* "ip ospf cost" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_cost_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_cost_cmd);
-
- /* "ip ospf mtu-ignore" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_mtu_ignore_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_mtu_ignore_addr_cmd);
-
- /* "ip ospf dead-interval" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_dead_interval_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_dead_interval_minimal_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_dead_interval_cmd);
-
- /* "ip ospf hello-interval" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_hello_interval_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_hello_interval_cmd);
-
- /* "ip ospf network" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_network_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_network_cmd);
-
- /* "ip ospf priority" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_priority_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_priority_cmd);
-
- /* "ip ospf retransmit-interval" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_retransmit_interval_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_retransmit_interval_addr_cmd);
-
- /* "ip ospf transmit-delay" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_transmit_delay_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_addr_cmd);
-
- /* "ip ospf area" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_area_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_area_cmd);
-
- /* These commands are compatibitliy for previous version. */
- install_element (INTERFACE_NODE, &ospf_authentication_key_cmd);
- install_element (INTERFACE_NODE, &ospf_message_digest_key_cmd);
- install_element (INTERFACE_NODE, &no_ospf_message_digest_key_cmd);
- install_element (INTERFACE_NODE, &ospf_dead_interval_cmd);
- install_element (INTERFACE_NODE, &no_ospf_dead_interval_cmd);
- install_element (INTERFACE_NODE, &ospf_hello_interval_cmd);
- install_element (INTERFACE_NODE, &no_ospf_hello_interval_cmd);
- install_element (INTERFACE_NODE, &ospf_cost_cmd);
- install_element (INTERFACE_NODE, &no_ospf_cost_cmd);
- install_element (INTERFACE_NODE, &ospf_network_cmd);
- install_element (INTERFACE_NODE, &no_ospf_network_cmd);
- install_element (INTERFACE_NODE, &ospf_priority_cmd);
- install_element (INTERFACE_NODE, &no_ospf_priority_cmd);
- install_element (INTERFACE_NODE, &ospf_retransmit_interval_cmd);
- install_element (INTERFACE_NODE, &no_ospf_retransmit_interval_cmd);
- install_element (INTERFACE_NODE, &ospf_transmit_delay_cmd);
- install_element (INTERFACE_NODE, &no_ospf_transmit_delay_cmd);
-}
-
-static void
-ospf_vty_zebra_init (void)
-{
- install_element (OSPF_NODE, &ospf_redistribute_source_cmd);
- install_element (OSPF_NODE, &no_ospf_redistribute_source_cmd);
- install_element (OSPF_NODE, &ospf_redistribute_instance_source_cmd);
- install_element (OSPF_NODE, &no_ospf_redistribute_instance_source_cmd);
-
- install_element (OSPF_NODE, &ospf_distribute_list_out_cmd);
- install_element (OSPF_NODE, &no_ospf_distribute_list_out_cmd);
-
- install_element (OSPF_NODE, &ospf_default_information_originate_cmd);
- install_element (OSPF_NODE, &no_ospf_default_information_originate_cmd);
-
- install_element (OSPF_NODE, &ospf_default_metric_cmd);
- install_element (OSPF_NODE, &no_ospf_default_metric_cmd);
-
- install_element (OSPF_NODE, &ospf_distance_cmd);
- install_element (OSPF_NODE, &no_ospf_distance_cmd);
- install_element (OSPF_NODE, &no_ospf_distance_ospf_cmd);
- install_element (OSPF_NODE, &ospf_distance_ospf_cmd);
+static void ospf_vty_if_init(void)
+{
+ /* Install interface node. */
+ install_node(&interface_node, config_write_interface);
+ if_cmd_init();
+
+ /* "ip ospf authentication" commands. */
+ install_element(INTERFACE_NODE, &ip_ospf_authentication_args_addr_cmd);
+ install_element(INTERFACE_NODE, &ip_ospf_authentication_addr_cmd);
+ install_element(INTERFACE_NODE,
+ &no_ip_ospf_authentication_args_addr_cmd);
+ install_element(INTERFACE_NODE, &no_ip_ospf_authentication_addr_cmd);
+ install_element(INTERFACE_NODE, &ip_ospf_authentication_key_addr_cmd);
+ install_element(INTERFACE_NODE,
+ &no_ip_ospf_authentication_key_authkey_addr_cmd);
+ install_element(INTERFACE_NODE,
+ &no_ospf_authentication_key_authkey_addr_cmd);
+
+ /* "ip ospf message-digest-key" commands. */
+ install_element(INTERFACE_NODE, &ip_ospf_message_digest_key_cmd);
+ install_element(INTERFACE_NODE, &no_ip_ospf_message_digest_key_cmd);
+
+ /* "ip ospf cost" commands. */
+ install_element(INTERFACE_NODE, &ip_ospf_cost_cmd);
+ install_element(INTERFACE_NODE, &no_ip_ospf_cost_cmd);
+
+ /* "ip ospf mtu-ignore" commands. */
+ install_element(INTERFACE_NODE, &ip_ospf_mtu_ignore_addr_cmd);
+ install_element(INTERFACE_NODE, &no_ip_ospf_mtu_ignore_addr_cmd);
+
+ /* "ip ospf dead-interval" commands. */
+ install_element(INTERFACE_NODE, &ip_ospf_dead_interval_cmd);
+ install_element(INTERFACE_NODE,
+ &ip_ospf_dead_interval_minimal_addr_cmd);
+ install_element(INTERFACE_NODE, &no_ip_ospf_dead_interval_cmd);
+
+ /* "ip ospf hello-interval" commands. */
+ install_element(INTERFACE_NODE, &ip_ospf_hello_interval_cmd);
+ install_element(INTERFACE_NODE, &no_ip_ospf_hello_interval_cmd);
+
+ /* "ip ospf network" commands. */
+ install_element(INTERFACE_NODE, &ip_ospf_network_cmd);
+ install_element(INTERFACE_NODE, &no_ip_ospf_network_cmd);
+
+ /* "ip ospf priority" commands. */
+ install_element(INTERFACE_NODE, &ip_ospf_priority_cmd);
+ install_element(INTERFACE_NODE, &no_ip_ospf_priority_cmd);
+
+ /* "ip ospf retransmit-interval" commands. */
+ install_element(INTERFACE_NODE, &ip_ospf_retransmit_interval_addr_cmd);
+ install_element(INTERFACE_NODE,
+ &no_ip_ospf_retransmit_interval_addr_cmd);
+
+ /* "ip ospf transmit-delay" commands. */
+ install_element(INTERFACE_NODE, &ip_ospf_transmit_delay_addr_cmd);
+ install_element(INTERFACE_NODE, &no_ip_ospf_transmit_delay_addr_cmd);
+
+ /* "ip ospf area" commands. */
+ install_element(INTERFACE_NODE, &ip_ospf_area_cmd);
+ install_element(INTERFACE_NODE, &no_ip_ospf_area_cmd);
+
+ /* These commands are compatibitliy for previous version. */
+ install_element(INTERFACE_NODE, &ospf_authentication_key_cmd);
+ install_element(INTERFACE_NODE, &ospf_message_digest_key_cmd);
+ install_element(INTERFACE_NODE, &no_ospf_message_digest_key_cmd);
+ install_element(INTERFACE_NODE, &ospf_dead_interval_cmd);
+ install_element(INTERFACE_NODE, &no_ospf_dead_interval_cmd);
+ install_element(INTERFACE_NODE, &ospf_hello_interval_cmd);
+ install_element(INTERFACE_NODE, &no_ospf_hello_interval_cmd);
+ install_element(INTERFACE_NODE, &ospf_cost_cmd);
+ install_element(INTERFACE_NODE, &no_ospf_cost_cmd);
+ install_element(INTERFACE_NODE, &ospf_network_cmd);
+ install_element(INTERFACE_NODE, &no_ospf_network_cmd);
+ install_element(INTERFACE_NODE, &ospf_priority_cmd);
+ install_element(INTERFACE_NODE, &no_ospf_priority_cmd);
+ install_element(INTERFACE_NODE, &ospf_retransmit_interval_cmd);
+ install_element(INTERFACE_NODE, &no_ospf_retransmit_interval_cmd);
+ install_element(INTERFACE_NODE, &ospf_transmit_delay_cmd);
+ install_element(INTERFACE_NODE, &no_ospf_transmit_delay_cmd);
+}
+
+static void ospf_vty_zebra_init(void)
+{
+ install_element(OSPF_NODE, &ospf_redistribute_source_cmd);
+ install_element(OSPF_NODE, &no_ospf_redistribute_source_cmd);
+ install_element(OSPF_NODE, &ospf_redistribute_instance_source_cmd);
+ install_element(OSPF_NODE, &no_ospf_redistribute_instance_source_cmd);
+
+ install_element(OSPF_NODE, &ospf_distribute_list_out_cmd);
+ install_element(OSPF_NODE, &no_ospf_distribute_list_out_cmd);
+
+ install_element(OSPF_NODE, &ospf_default_information_originate_cmd);
+ install_element(OSPF_NODE, &no_ospf_default_information_originate_cmd);
+
+ install_element(OSPF_NODE, &ospf_default_metric_cmd);
+ install_element(OSPF_NODE, &no_ospf_default_metric_cmd);
+
+ install_element(OSPF_NODE, &ospf_distance_cmd);
+ install_element(OSPF_NODE, &no_ospf_distance_cmd);
+ install_element(OSPF_NODE, &no_ospf_distance_ospf_cmd);
+ install_element(OSPF_NODE, &ospf_distance_ospf_cmd);
#if 0
install_element (OSPF_NODE, &ospf_distance_source_cmd);
install_element (OSPF_NODE, &no_ospf_distance_source_cmd);
@@ -8950,22 +8986,17 @@ ospf_vty_zebra_init (void)
#endif /* 0 */
}
-static struct cmd_node ospf_node =
-{
- OSPF_NODE,
- "%s(config-router)# ",
- 1
-};
+static struct cmd_node ospf_node = {OSPF_NODE, "%s(config-router)# ", 1};
-static void
-ospf_interface_clear (struct interface *ifp)
+static void ospf_interface_clear(struct interface *ifp)
{
- if (!if_is_operative (ifp)) return;
+ if (!if_is_operative(ifp))
+ return;
- if (IS_DEBUG_OSPF (ism, ISM_EVENTS))
- zlog_debug("ISM[%s]: clear by reset", ifp->name);
+ if (IS_DEBUG_OSPF(ism, ISM_EVENTS))
+ zlog_debug("ISM[%s]: clear by reset", ifp->name);
- ospf_if_reset(ifp);
+ ospf_if_reset(ifp);
}
DEFUN (clear_ip_ospf_interface,
@@ -8977,175 +9008,167 @@ DEFUN (clear_ip_ospf_interface,
"Interface information\n"
"Interface name\n")
{
- int idx_ifname = 4;
- struct interface *ifp;
- struct listnode *node;
-
- if (argc == 4) /* Clear all the ospfv2 interfaces. */
- {
- for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
- ospf_interface_clear(ifp);
- }
- else /* Interface name is specified. */
- {
- if ((ifp = if_lookup_by_name (argv[idx_ifname]->arg, VRF_DEFAULT)) == NULL)
- vty_out (vty, "No such interface name\n");
- else
- ospf_interface_clear(ifp);
- }
+ int idx_ifname = 4;
+ struct interface *ifp;
+ struct listnode *node;
- return CMD_SUCCESS;
+ if (argc == 4) /* Clear all the ospfv2 interfaces. */
+ {
+ for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), node, ifp))
+ ospf_interface_clear(ifp);
+ } else /* Interface name is specified. */
+ {
+ if ((ifp = if_lookup_by_name(argv[idx_ifname]->arg,
+ VRF_DEFAULT))
+ == NULL)
+ vty_out(vty, "No such interface name\n");
+ else
+ ospf_interface_clear(ifp);
+ }
+
+ return CMD_SUCCESS;
}
-void
-ospf_vty_clear_init (void)
+void ospf_vty_clear_init(void)
{
- install_element (ENABLE_NODE, &clear_ip_ospf_interface_cmd);
+ install_element(ENABLE_NODE, &clear_ip_ospf_interface_cmd);
}
/* Install OSPF related vty commands. */
-void
-ospf_vty_init (void)
-{
- /* Install ospf top node. */
- install_node (&ospf_node, ospf_config_write);
-
- /* "router ospf" commands. */
- install_element (CONFIG_NODE, &router_ospf_cmd);
- install_element (CONFIG_NODE, &no_router_ospf_cmd);
-
-
- install_default (OSPF_NODE);
-
- /* "ospf router-id" commands. */
- install_element (OSPF_NODE, &ospf_router_id_cmd);
- install_element (OSPF_NODE, &ospf_router_id_old_cmd);
- install_element (OSPF_NODE, &no_ospf_router_id_cmd);
-
- /* "passive-interface" commands. */
- install_element (OSPF_NODE, &ospf_passive_interface_addr_cmd);
- install_element (OSPF_NODE, &no_ospf_passive_interface_addr_cmd);
-
- /* "ospf abr-type" commands. */
- install_element (OSPF_NODE, &ospf_abr_type_cmd);
- install_element (OSPF_NODE, &no_ospf_abr_type_cmd);
-
- /* "ospf log-adjacency-changes" commands. */
- install_element (OSPF_NODE, &ospf_log_adjacency_changes_cmd);
- install_element (OSPF_NODE, &ospf_log_adjacency_changes_detail_cmd);
- install_element (OSPF_NODE, &no_ospf_log_adjacency_changes_cmd);
- install_element (OSPF_NODE, &no_ospf_log_adjacency_changes_detail_cmd);
-
- /* "ospf rfc1583-compatible" commands. */
- install_element (OSPF_NODE, &ospf_compatible_rfc1583_cmd);
- install_element (OSPF_NODE, &no_ospf_compatible_rfc1583_cmd);
- install_element (OSPF_NODE, &ospf_rfc1583_flag_cmd);
- install_element (OSPF_NODE, &no_ospf_rfc1583_flag_cmd);
-
- /* "network area" commands. */
- install_element (OSPF_NODE, &ospf_network_area_cmd);
- install_element (OSPF_NODE, &no_ospf_network_area_cmd);
-
- /* "area authentication" commands. */
- install_element (OSPF_NODE, &ospf_area_authentication_message_digest_cmd);
- install_element (OSPF_NODE, &ospf_area_authentication_cmd);
- install_element (OSPF_NODE, &no_ospf_area_authentication_cmd);
-
- /* "area range" commands. */
- install_element (OSPF_NODE, &ospf_area_range_cmd);
- install_element (OSPF_NODE, &ospf_area_range_cost_cmd);
- install_element (OSPF_NODE, &ospf_area_range_not_advertise_cmd);
- install_element (OSPF_NODE, &no_ospf_area_range_cmd);
- install_element (OSPF_NODE, &ospf_area_range_substitute_cmd);
- install_element (OSPF_NODE, &no_ospf_area_range_substitute_cmd);
-
- /* "area virtual-link" commands. */
- install_element (OSPF_NODE, &ospf_area_vlink_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_intervals_cmd);
- install_element (OSPF_NODE, &no_ospf_area_vlink_cmd);
- install_element (OSPF_NODE, &no_ospf_area_vlink_intervals_cmd);
-
-
-
-
-
-
-
-
-
-
- /* "area stub" commands. */
- install_element (OSPF_NODE, &ospf_area_stub_no_summary_cmd);
- install_element (OSPF_NODE, &ospf_area_stub_cmd);
- install_element (OSPF_NODE, &no_ospf_area_stub_no_summary_cmd);
- install_element (OSPF_NODE, &no_ospf_area_stub_cmd);
-
- /* "area nssa" commands. */
- install_element (OSPF_NODE, &ospf_area_nssa_cmd);
- install_element (OSPF_NODE, &ospf_area_nssa_translate_no_summary_cmd);
- install_element (OSPF_NODE, &ospf_area_nssa_translate_cmd);
- install_element (OSPF_NODE, &ospf_area_nssa_no_summary_cmd);
- install_element (OSPF_NODE, &no_ospf_area_nssa_cmd);
-
- install_element (OSPF_NODE, &ospf_area_default_cost_cmd);
- install_element (OSPF_NODE, &no_ospf_area_default_cost_cmd);
-
- install_element (OSPF_NODE, &ospf_area_shortcut_cmd);
- install_element (OSPF_NODE, &no_ospf_area_shortcut_cmd);
-
- install_element (OSPF_NODE, &ospf_area_export_list_cmd);
- install_element (OSPF_NODE, &no_ospf_area_export_list_cmd);
-
- install_element (OSPF_NODE, &ospf_area_filter_list_cmd);
- install_element (OSPF_NODE, &no_ospf_area_filter_list_cmd);
-
- install_element (OSPF_NODE, &ospf_area_import_list_cmd);
- install_element (OSPF_NODE, &no_ospf_area_import_list_cmd);
-
- /* SPF timer commands */
- install_element (OSPF_NODE, &ospf_timers_throttle_spf_cmd);
- install_element (OSPF_NODE, &no_ospf_timers_throttle_spf_cmd);
-
- /* LSA timers commands */
- install_element (OSPF_NODE, &ospf_timers_min_ls_interval_cmd);
- install_element (OSPF_NODE, &no_ospf_timers_min_ls_interval_cmd);
- install_element (OSPF_NODE, &ospf_timers_min_ls_arrival_cmd);
- install_element (OSPF_NODE, &no_ospf_timers_min_ls_arrival_cmd);
- install_element (OSPF_NODE, &ospf_timers_lsa_cmd);
- install_element (OSPF_NODE, &no_ospf_timers_lsa_cmd);
-
- /* refresh timer commands */
- install_element (OSPF_NODE, &ospf_refresh_timer_cmd);
- install_element (OSPF_NODE, &no_ospf_refresh_timer_val_cmd);
-
- /* max-metric commands */
- install_element (OSPF_NODE, &ospf_max_metric_router_lsa_admin_cmd);
- install_element (OSPF_NODE, &no_ospf_max_metric_router_lsa_admin_cmd);
- install_element (OSPF_NODE, &ospf_max_metric_router_lsa_startup_cmd);
- install_element (OSPF_NODE, &no_ospf_max_metric_router_lsa_startup_cmd);
- install_element (OSPF_NODE, &ospf_max_metric_router_lsa_shutdown_cmd);
- install_element (OSPF_NODE, &no_ospf_max_metric_router_lsa_shutdown_cmd);
-
- /* reference bandwidth commands */
- install_element (OSPF_NODE, &ospf_auto_cost_reference_bandwidth_cmd);
- install_element (OSPF_NODE, &no_ospf_auto_cost_reference_bandwidth_cmd);
-
- /* "neighbor" commands. */
- install_element (OSPF_NODE, &ospf_neighbor_cmd);
- install_element (OSPF_NODE, &ospf_neighbor_poll_interval_cmd);
- install_element (OSPF_NODE, &no_ospf_neighbor_cmd);
- install_element (OSPF_NODE, &no_ospf_neighbor_poll_cmd);
-
- /* write multiplier commands */
- install_element (OSPF_NODE, &ospf_write_multiplier_cmd);
- install_element (OSPF_NODE, &write_multiplier_cmd);
- install_element (OSPF_NODE, &no_ospf_write_multiplier_cmd);
- install_element (OSPF_NODE, &no_write_multiplier_cmd);
-
- /* Init interface related vty commands. */
- ospf_vty_if_init ();
-
- /* Init zebra related vty commands. */
- ospf_vty_zebra_init ();
+void ospf_vty_init(void)
+{
+ /* Install ospf top node. */
+ install_node(&ospf_node, ospf_config_write);
+
+ /* "router ospf" commands. */
+ install_element(CONFIG_NODE, &router_ospf_cmd);
+ install_element(CONFIG_NODE, &no_router_ospf_cmd);
+
+
+ install_default(OSPF_NODE);
+
+ /* "ospf router-id" commands. */
+ install_element(OSPF_NODE, &ospf_router_id_cmd);
+ install_element(OSPF_NODE, &ospf_router_id_old_cmd);
+ install_element(OSPF_NODE, &no_ospf_router_id_cmd);
+
+ /* "passive-interface" commands. */
+ install_element(OSPF_NODE, &ospf_passive_interface_addr_cmd);
+ install_element(OSPF_NODE, &no_ospf_passive_interface_addr_cmd);
+
+ /* "ospf abr-type" commands. */
+ install_element(OSPF_NODE, &ospf_abr_type_cmd);
+ install_element(OSPF_NODE, &no_ospf_abr_type_cmd);
+
+ /* "ospf log-adjacency-changes" commands. */
+ install_element(OSPF_NODE, &ospf_log_adjacency_changes_cmd);
+ install_element(OSPF_NODE, &ospf_log_adjacency_changes_detail_cmd);
+ install_element(OSPF_NODE, &no_ospf_log_adjacency_changes_cmd);
+ install_element(OSPF_NODE, &no_ospf_log_adjacency_changes_detail_cmd);
+
+ /* "ospf rfc1583-compatible" commands. */
+ install_element(OSPF_NODE, &ospf_compatible_rfc1583_cmd);
+ install_element(OSPF_NODE, &no_ospf_compatible_rfc1583_cmd);
+ install_element(OSPF_NODE, &ospf_rfc1583_flag_cmd);
+ install_element(OSPF_NODE, &no_ospf_rfc1583_flag_cmd);
+
+ /* "network area" commands. */
+ install_element(OSPF_NODE, &ospf_network_area_cmd);
+ install_element(OSPF_NODE, &no_ospf_network_area_cmd);
+
+ /* "area authentication" commands. */
+ install_element(OSPF_NODE,
+ &ospf_area_authentication_message_digest_cmd);
+ install_element(OSPF_NODE, &ospf_area_authentication_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_authentication_cmd);
+
+ /* "area range" commands. */
+ install_element(OSPF_NODE, &ospf_area_range_cmd);
+ install_element(OSPF_NODE, &ospf_area_range_cost_cmd);
+ install_element(OSPF_NODE, &ospf_area_range_not_advertise_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_range_cmd);
+ install_element(OSPF_NODE, &ospf_area_range_substitute_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_range_substitute_cmd);
+
+ /* "area virtual-link" commands. */
+ install_element(OSPF_NODE, &ospf_area_vlink_cmd);
+ install_element(OSPF_NODE, &ospf_area_vlink_intervals_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_vlink_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_vlink_intervals_cmd);
+
+
+ /* "area stub" commands. */
+ install_element(OSPF_NODE, &ospf_area_stub_no_summary_cmd);
+ install_element(OSPF_NODE, &ospf_area_stub_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_stub_no_summary_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_stub_cmd);
+
+ /* "area nssa" commands. */
+ install_element(OSPF_NODE, &ospf_area_nssa_cmd);
+ install_element(OSPF_NODE, &ospf_area_nssa_translate_no_summary_cmd);
+ install_element(OSPF_NODE, &ospf_area_nssa_translate_cmd);
+ install_element(OSPF_NODE, &ospf_area_nssa_no_summary_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_nssa_cmd);
+
+ install_element(OSPF_NODE, &ospf_area_default_cost_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_default_cost_cmd);
+
+ install_element(OSPF_NODE, &ospf_area_shortcut_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_shortcut_cmd);
+
+ install_element(OSPF_NODE, &ospf_area_export_list_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_export_list_cmd);
+
+ install_element(OSPF_NODE, &ospf_area_filter_list_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_filter_list_cmd);
+
+ install_element(OSPF_NODE, &ospf_area_import_list_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_import_list_cmd);
+
+ /* SPF timer commands */
+ install_element(OSPF_NODE, &ospf_timers_throttle_spf_cmd);
+ install_element(OSPF_NODE, &no_ospf_timers_throttle_spf_cmd);
+
+ /* LSA timers commands */
+ install_element(OSPF_NODE, &ospf_timers_min_ls_interval_cmd);
+ install_element(OSPF_NODE, &no_ospf_timers_min_ls_interval_cmd);
+ install_element(OSPF_NODE, &ospf_timers_min_ls_arrival_cmd);
+ install_element(OSPF_NODE, &no_ospf_timers_min_ls_arrival_cmd);
+ install_element(OSPF_NODE, &ospf_timers_lsa_cmd);
+ install_element(OSPF_NODE, &no_ospf_timers_lsa_cmd);
+
+ /* refresh timer commands */
+ install_element(OSPF_NODE, &ospf_refresh_timer_cmd);
+ install_element(OSPF_NODE, &no_ospf_refresh_timer_val_cmd);
+
+ /* max-metric commands */
+ install_element(OSPF_NODE, &ospf_max_metric_router_lsa_admin_cmd);
+ install_element(OSPF_NODE, &no_ospf_max_metric_router_lsa_admin_cmd);
+ install_element(OSPF_NODE, &ospf_max_metric_router_lsa_startup_cmd);
+ install_element(OSPF_NODE, &no_ospf_max_metric_router_lsa_startup_cmd);
+ install_element(OSPF_NODE, &ospf_max_metric_router_lsa_shutdown_cmd);
+ install_element(OSPF_NODE, &no_ospf_max_metric_router_lsa_shutdown_cmd);
+
+ /* reference bandwidth commands */
+ install_element(OSPF_NODE, &ospf_auto_cost_reference_bandwidth_cmd);
+ install_element(OSPF_NODE, &no_ospf_auto_cost_reference_bandwidth_cmd);
+
+ /* "neighbor" commands. */
+ install_element(OSPF_NODE, &ospf_neighbor_cmd);
+ install_element(OSPF_NODE, &ospf_neighbor_poll_interval_cmd);
+ install_element(OSPF_NODE, &no_ospf_neighbor_cmd);
+ install_element(OSPF_NODE, &no_ospf_neighbor_poll_cmd);
+
+ /* write multiplier commands */
+ install_element(OSPF_NODE, &ospf_write_multiplier_cmd);
+ install_element(OSPF_NODE, &write_multiplier_cmd);
+ install_element(OSPF_NODE, &no_ospf_write_multiplier_cmd);
+ install_element(OSPF_NODE, &no_write_multiplier_cmd);
+
+ /* Init interface related vty commands. */
+ ospf_vty_if_init();
+
+ /* Init zebra related vty commands. */
+ ospf_vty_zebra_init();
}