diff options
Diffstat (limited to 'ospfd/ospf_vty.c')
| -rw-r--r-- | ospfd/ospf_vty.c | 12939 |
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(¶ms->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(¶ms->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(); } |
