diff options
Diffstat (limited to 'ospfd/ospf_vty.c')
-rw-r--r-- | ospfd/ospf_vty.c | 610 |
1 files changed, 343 insertions, 267 deletions
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index accf7a8c..fff6f659 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -199,8 +199,9 @@ DEFUN (ospf_router_id, "router-id for the OSPF process\n" "OSPF router-id in IP address format\n") { - int ret; + struct ospf *ospf = vty->index; struct in_addr router_id; + int ret; ret = inet_aton (argv[0], &router_id); if (!ret) @@ -209,11 +210,10 @@ DEFUN (ospf_router_id, return CMD_WARNING; } - /* ospf_top->router_id = router_id; */ - ospf_top->router_id_static = router_id; + ospf->router_id_static = router_id; - if (ospf_top->t_router_id_update == NULL) - ospf_top->t_router_id_update = + if (ospf->t_router_id_update == NULL) + ospf->t_router_id_update = thread_add_timer (master, ospf_router_id_update_timer, NULL, OSPF_ROUTER_ID_UPDATE_DELAY); @@ -233,9 +233,11 @@ DEFUN (no_ospf_router_id, "OSPF specific commands\n" "router-id for the OSPF process\n") { - ospf_top->router_id_static.s_addr = 0; + struct ospf *ospf = vty->index; + + ospf->router_id_static.s_addr = 0; - ospf_router_id_update (); + ospf_router_id_update (ospf); return CMD_SUCCESS; } @@ -647,7 +649,7 @@ ospf_vl_config_data_init (struct ospf_vl_config_data *vl_config, } struct ospf_vl_data * -ospf_find_vl_data (struct ospf_vl_config_data *vl_config) +ospf_find_vl_data (struct ospf *ospf, struct ospf_vl_config_data *vl_config) { struct ospf_area *area; struct ospf_vl_data *vl_data; @@ -664,7 +666,7 @@ ospf_find_vl_data (struct ospf_vl_config_data *vl_config) VTY_NEWLINE); return NULL; } - area = ospf_area_get (area_id, vl_config->format); + area = ospf_area_get (ospf, area_id, vl_config->format); if (area->external_routing != OSPF_AREA_DEFAULT) { @@ -694,9 +696,9 @@ ospf_find_vl_data (struct ospf_vl_config_data *vl_config) vl_data = ospf_vl_data_new (area, vl_config->vl_peer); if (vl_data->vl_oi == NULL) { - vl_data->vl_oi = ospf_vl_new (vl_data); - ospf_vl_add (vl_data); - ospf_spf_calculate_schedule (); + vl_data->vl_oi = ospf_vl_new (ospf, vl_data); + ospf_vl_add (ospf, vl_data); + ospf_spf_calculate_schedule (ospf); } } return vl_data; @@ -800,12 +802,12 @@ ospf_vl_set_timers (struct ospf_vl_data *vl_data, /* The business end of all of the above */ int -ospf_vl_set (struct ospf_vl_config_data *vl_config) +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 (vl_config); + vl_data = ospf_find_vl_data (ospf, vl_config); if (!vl_data) return CMD_WARNING; @@ -872,6 +874,7 @@ DEFUN (area_vlink, "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D", VLINK_HELPSTR_IPADDR) { + struct ospf *ospf = vty->index; struct ospf_vl_config_data vl_config; char auth_key[OSPF_AUTH_SIMPLE_SIZE+1]; char md5_key[OSPF_AUTH_MD5_SIZE+1]; @@ -900,7 +903,7 @@ DEFUN (area_vlink, { /* Thats all folks! - BUGS B. strikes again!!!*/ - return ospf_vl_set (&vl_config); + return ospf_vl_set (ospf, &vl_config); } /* Deal with other parameters */ @@ -996,7 +999,7 @@ DEFUN (area_vlink, /* Action configuration */ - return ospf_vl_set (&vl_config); + return ospf_vl_set (ospf, &vl_config); } @@ -1006,6 +1009,7 @@ DEFUN (no_area_vlink, NO_STR VLINK_HELPSTR_IPADDR) { + struct ospf *ospf = vty->index; struct ospf_area *area; struct ospf_vl_config_data vl_config; struct ospf_vl_data *vl_data = NULL; @@ -1022,7 +1026,7 @@ DEFUN (no_area_vlink, return CMD_WARNING; } - area = ospf_area_lookup_by_area_id (vl_config.area_id); + area = ospf_area_lookup_by_area_id (ospf, vl_config.area_id); if (!area) { vty_out (vty, "Area does not exist%s", VTY_NEWLINE); @@ -1042,9 +1046,9 @@ DEFUN (no_area_vlink, /* Basic VLink no command */ /* Thats all folks! - BUGS B. strikes again!!!*/ if ((vl_data = ospf_vl_lookup (area, vl_config.vl_peer))) - ospf_vl_delete (vl_data); + ospf_vl_delete (ospf, vl_data); - ospf_area_check_free (vl_config.area_id); + ospf_area_check_free (ospf, vl_config.area_id); return CMD_SUCCESS; } @@ -1054,7 +1058,6 @@ DEFUN (no_area_vlink, /* Deal with other parameters */ for (i=2; i < argc; i++) { - /* vty_out (vty, "argv[%d] - %s%s", i, argv[i], VTY_NEWLINE); */ switch (argv[i][0]) @@ -1113,7 +1116,7 @@ DEFUN (no_area_vlink, /* Action configuration */ - return ospf_vl_set (&vl_config); + return ospf_vl_set (ospf, &vl_config); } ALIAS (area_vlink, @@ -1320,6 +1323,7 @@ DEFUN (area_shortcut, "Enable shortcutting through the area\n" "Disable shortcutting through the area\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; int mode; @@ -1327,7 +1331,7 @@ DEFUN (area_shortcut, VTY_GET_OSPF_AREA_ID_NO_BB ("shortcut", area_id, format, argv[0]); - area = ospf_area_get (area_id, format); + area = ospf_area_get (ospf, area_id, format); if (strncmp (argv[1], "de", 2) == 0) mode = OSPF_SHORTCUT_DEFAULT; @@ -1338,9 +1342,9 @@ DEFUN (area_shortcut, else return CMD_WARNING; - ospf_area_shortcut_set (area, mode); + ospf_area_shortcut_set (ospf, area, mode); - if (ospf_top->abr_type != OSPF_ABR_SHORTCUT) + 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%s", VTY_NEWLINE); @@ -1359,17 +1363,18 @@ DEFUN (no_area_shortcut, "Deconfigure enabled shortcutting through the area\n" "Deconfigure disabled shortcutting through the area\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; int format; VTY_GET_OSPF_AREA_ID_NO_BB ("shortcut", area_id, format, argv[0]); - area = ospf_area_lookup_by_area_id (area_id); + area = ospf_area_lookup_by_area_id (ospf, area_id); if (!area) return CMD_SUCCESS; - ospf_area_shortcut_unset (area); + ospf_area_shortcut_unset (ospf, area); return CMD_SUCCESS; } @@ -1617,6 +1622,7 @@ DEFUN (area_default_cost, "Set the summary-default cost of a NSSA or stub area\n" "Stub's advertised default summary cost\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; u_int32_t cost; @@ -1625,7 +1631,7 @@ DEFUN (area_default_cost, VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id, format, argv[0]); VTY_GET_INTEGER_RANGE ("stub default cost", cost, argv[1], 0, 16777215); - area = ospf_area_get (area_id, format); + area = ospf_area_get (ospf, area_id, format); if (area->external_routing == OSPF_AREA_DEFAULT) { @@ -1648,6 +1654,7 @@ DEFUN (no_area_default_cost, "Set the summary-default cost of a NSSA or stub area\n" "Stub's advertised default summary cost\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; u_int32_t cost; @@ -1656,7 +1663,7 @@ DEFUN (no_area_default_cost, VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id, format, argv[0]); VTY_GET_INTEGER_RANGE ("stub default cost", cost, argv[1], 0, 16777215); - area = ospf_area_lookup_by_area_id (area_id); + area = ospf_area_lookup_by_area_id (ospf, area_id); if (area == NULL) return CMD_SUCCESS; @@ -1668,7 +1675,7 @@ DEFUN (no_area_default_cost, area->default_cost = 1; - ospf_area_check_free (area_id); + ospf_area_check_free (ospf, area_id); return CMD_SUCCESS; } @@ -1682,14 +1689,15 @@ DEFUN (area_export_list, "Set the filter for networks announced to other areas\n" "Name of the access-list\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; int format; VTY_GET_OSPF_AREA_ID_NO_BB ("export-list", area_id, format, argv[0]); - area = ospf_area_get (area_id, format); - ospf_area_export_list_set (area, argv[1]); + area = ospf_area_get (ospf, area_id, format); + ospf_area_export_list_set (ospf, area, argv[1]); return CMD_SUCCESS; } @@ -1704,17 +1712,18 @@ DEFUN (no_area_export_list, "Unset the filter for networks announced to other areas\n" "Name of the access-list\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; int format; VTY_GET_OSPF_AREA_ID_NO_BB ("export-list", area_id, format, argv[0]); - area = ospf_area_lookup_by_area_id (area_id); + area = ospf_area_lookup_by_area_id (ospf, area_id); if (area == NULL) return CMD_SUCCESS; - ospf_area_export_list_unset (area); + ospf_area_export_list_unset (ospf, area); return CMD_SUCCESS; } @@ -1729,14 +1738,15 @@ DEFUN (area_import_list, "Set the filter for networks from other areas announced to the specified one\n" "Name of the access-list\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; int format; VTY_GET_OSPF_AREA_ID_NO_BB ("import-list", area_id, format, argv[0]); - area = ospf_area_get (area_id, format); - ospf_area_import_list_set (area, argv[1]); + area = ospf_area_get (ospf, area_id, format); + ospf_area_import_list_set (ospf, area, argv[1]); return CMD_SUCCESS; } @@ -1751,16 +1761,17 @@ DEFUN (no_area_import_list, "Unset the filter for networks announced to other areas\n" "Name of the access-list\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; int format; VTY_GET_OSPF_AREA_ID_NO_BB ("import-list", area_id, format, argv[0]); - area = ospf_area_lookup_by_area_id (area_id); + area = ospf_area_lookup_by_area_id (ospf, area_id); if (area == NULL) return CMD_SUCCESS; - ospf_area_import_list_unset (area); + ospf_area_import_list_unset (ospf, area); return CMD_SUCCESS; } @@ -1777,6 +1788,7 @@ DEFUN (area_filter_list, "Filter networks sent to this area\n" "Filter networks sent from this area\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; struct prefix_list *plist; @@ -1784,7 +1796,7 @@ DEFUN (area_filter_list, VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]); - area = ospf_area_get (area_id, format); + area = ospf_area_get (ospf, area_id, format); plist = prefix_list_lookup (AFI_IP, argv[1]); if (strncmp (argv[2], "in", 2) == 0) { @@ -1793,7 +1805,7 @@ DEFUN (area_filter_list, free (PREFIX_NAME_IN (area)); PREFIX_NAME_IN (area) = strdup (argv[1]); - ospf_schedule_abr_task (); + ospf_schedule_abr_task (ospf); } else { @@ -1802,7 +1814,7 @@ DEFUN (area_filter_list, free (PREFIX_NAME_OUT (area)); PREFIX_NAME_OUT (area) = strdup (argv[1]); - ospf_schedule_abr_task (); + ospf_schedule_abr_task (ospf); } return CMD_SUCCESS; @@ -1821,6 +1833,7 @@ DEFUN (no_area_filter_list, "Filter networks sent to this area\n" "Filter networks sent from this area\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; struct prefix_list *plist; @@ -1828,7 +1841,7 @@ DEFUN (no_area_filter_list, VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]); - area = ospf_area_lookup_by_area_id (area_id); + area = ospf_area_lookup_by_area_id (ospf, area_id); plist = prefix_list_lookup (AFI_IP, argv[1]); if (strncmp (argv[2], "in", 2) == 0) { @@ -1842,7 +1855,7 @@ DEFUN (no_area_filter_list, PREFIX_NAME_IN (area) = NULL; - ospf_schedule_abr_task (); + ospf_schedule_abr_task (ospf); } else { @@ -1856,7 +1869,7 @@ DEFUN (no_area_filter_list, PREFIX_NAME_OUT (area) = NULL; - ospf_schedule_abr_task (); + ospf_schedule_abr_task (ospf); } return CMD_SUCCESS; @@ -1870,13 +1883,14 @@ DEFUN (area_authentication_message_digest, "Enable authentication\n" "Use message-digest authentication\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; int format; VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]); - area = ospf_area_get (area_id, format); + area = ospf_area_get (ospf, area_id, format); area->auth_type = OSPF_AUTH_CRYPTOGRAPHIC; return CMD_SUCCESS; @@ -1890,13 +1904,14 @@ DEFUN (area_authentication, "OSPF area ID as a decimal value\n" "Enable authentication\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; int format; VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]); - area = ospf_area_get (area_id, format); + area = ospf_area_get (ospf, area_id, format); area->auth_type = OSPF_AUTH_SIMPLE; return CMD_SUCCESS; @@ -1911,19 +1926,20 @@ DEFUN (no_area_authentication, "OSPF area ID as a decimal value\n" "Enable authentication\n") { + struct ospf *ospf = vty->index; struct ospf_area *area; struct in_addr area_id; int format; VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]); - area = ospf_area_lookup_by_area_id (area_id); + area = ospf_area_lookup_by_area_id (ospf, area_id); if (area == NULL) return CMD_SUCCESS; area->auth_type = OSPF_AUTH_NULL; - ospf_area_check_free (area_id); + ospf_area_check_free (ospf, area_id); return CMD_SUCCESS; } @@ -1939,6 +1955,7 @@ DEFUN (ospf_abr_type, "Shortcut ABR\n" "Standard behavior (RFC2328)\n") { + struct ospf *ospf = vty->index; u_char abr_type = OSPF_ABR_UNKNOWN; if (strncmp (argv[0], "c", 1) == 0) @@ -1953,10 +1970,10 @@ DEFUN (ospf_abr_type, return CMD_WARNING; /* If ABR type value is changed, schedule ABR task. */ - if (ospf_top->abr_type != abr_type) + if (ospf->abr_type != abr_type) { - ospf_top->abr_type = abr_type; - ospf_schedule_abr_task (); + ospf->abr_type = abr_type; + ospf_schedule_abr_task (ospf); } return CMD_SUCCESS; @@ -1972,6 +1989,7 @@ DEFUN (no_ospf_abr_type, "Alternative ABR, IBM implementation\n" "Shortcut ABR\n") { + struct ospf *ospf = vty->index; u_char abr_type = OSPF_ABR_UNKNOWN; if (strncmp (argv[0], "c", 1) == 0) @@ -1984,10 +2002,10 @@ DEFUN (no_ospf_abr_type, return CMD_WARNING; /* If ABR type value is changed, schedule ABR task. */ - if (ospf_top->abr_type == abr_type) + if (ospf->abr_type == abr_type) { - ospf_top->abr_type = OSPF_ABR_STAND; - ospf_schedule_abr_task (); + ospf->abr_type = OSPF_ABR_STAND; + ospf_schedule_abr_task (ospf); } return CMD_SUCCESS; @@ -2004,7 +2022,7 @@ DEFUN (ospf_compatible_rfc1583, if (!CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE)) { SET_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE); - ospf_spf_calculate_schedule (); + ospf_spf_calculate_schedule (ospf); } return CMD_SUCCESS; } @@ -2021,7 +2039,7 @@ DEFUN (no_ospf_compatible_rfc1583, if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE)) { UNSET_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE); - ospf_spf_calculate_schedule (); + ospf_spf_calculate_schedule (ospf); } return CMD_SUCCESS; } @@ -2065,8 +2083,10 @@ DEFUN (no_timers_spf, "Adjust routing timers\n" "OSPF SPF timers\n") { - ospf_top->spf_delay = OSPF_SPF_DELAY_DEFAULT; - ospf_top->spf_holdtime = OSPF_SPF_HOLDTIME_DEFAULT; + struct ospf *ospf = vty->index; + + ospf->spf_delay = OSPF_SPF_DELAY_DEFAULT; + ospf->spf_holdtime = OSPF_SPF_HOLDTIME_DEFAULT; return CMD_SUCCESS; } @@ -2259,6 +2279,7 @@ DEFUN (auto_cost_reference_bandwidth, "Use reference bandwidth method to assign OSPF cost\n" "The reference bandwidth in terms of Mbits per second\n") { + struct ospf *ospf = vty->index; u_int32_t refbw; listnode node; @@ -2270,14 +2291,14 @@ DEFUN (auto_cost_reference_bandwidth, } /* If reference bandwidth is changed. */ - if ((refbw * 1000) == ospf_top->ref_bandwidth) + if ((refbw * 1000) == ospf->ref_bandwidth) return CMD_SUCCESS; - ospf_top->ref_bandwidth = refbw * 1000; + ospf->ref_bandwidth = refbw * 1000; vty_out (vty, "%% OSPF: Reference bandwidth is changed.%s", VTY_NEWLINE); vty_out (vty, " Please ensure reference bandwidth is consistent across all routers%s", VTY_NEWLINE); - for (node = listhead (ospf_top->iflist); node; nextnode (node)) + for (node = listhead (ospf->iflist); node; nextnode (node)) ospf_if_recalculate_output_cost (getdata (node)); return CMD_SUCCESS; @@ -2290,61 +2311,22 @@ DEFUN (no_auto_cost_reference_bandwidth, "Calculate OSPF interface cost according to bandwidth\n" "Use reference bandwidth method to assign OSPF cost\n") { + struct ospf *ospf = vty->index; listnode node; - if (ospf_top->ref_bandwidth == OSPF_DEFAULT_REF_BANDWIDTH) + if (ospf->ref_bandwidth == OSPF_DEFAULT_REF_BANDWIDTH) return CMD_SUCCESS; - ospf_top->ref_bandwidth = OSPF_DEFAULT_REF_BANDWIDTH; + ospf->ref_bandwidth = OSPF_DEFAULT_REF_BANDWIDTH; vty_out (vty, "%% OSPF: Reference bandwidth is changed.%s", VTY_NEWLINE); vty_out (vty, " Please ensure reference bandwidth is consistent across all routers%s", VTY_NEWLINE); - - for (node = listhead (ospf_top->iflist); node; nextnode (node)) + for (node = listhead (ospf->iflist); node; nextnode (node)) ospf_if_recalculate_output_cost (getdata (node)); return CMD_SUCCESS; } - -DEFUN (clear_ip_ospf_neighbor, - clear_ip_ospf_neighbor_cmd, - "clear ip ospf neighbor A.B.C.D", - "Reset functions\n" - "IP\n" - "Clear OSPF\n" - "Neighbor list\n" - "Neighbor ID\n") -{ - listnode node; - struct ospf_neighbor *nbr; - struct in_addr router_id; - int ret; - - ret = inet_aton (argv[0], &router_id); - if (!ret) - { - vty_out (vty, "Please specify Neighbor ID by A.B.C.D%s", VTY_NEWLINE); - return CMD_WARNING; - } - - for (node = listhead (ospf_top->oiflist); node; nextnode (node)) - { - struct ospf_interface *oi = getdata (node); - - nbr = ospf_nbr_lookup_by_routerid (oi->nbrs, &router_id); - - if (nbr) - { - OSPF_NSM_EVENT_SCHEDULE (nbr, NSM_SeqNumberMismatch); - vty_out (vty, "clear neighbor %s%s", argv[0], VTY_NEWLINE); - break; - } - } - - return CMD_SUCCESS; -} - char *ospf_abr_type_descr_str[] = { "Unknown", @@ -2453,9 +2435,10 @@ DEFUN (show_ip_ospf, { listnode node; struct ospf_area * area; + struct ospf *ospf = ospf_top; /* Check OSPF is enable. */ - if (ospf_top == NULL) + if (ospf == NULL) { vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE); return CMD_SUCCESS; @@ -2463,51 +2446,51 @@ DEFUN (show_ip_ospf, /* Show Router ID. */ vty_out (vty, " OSPF Routing Process, Router ID: %s%s", - inet_ntoa (ospf_top->router_id), + inet_ntoa (ospf->router_id), VTY_NEWLINE); /* Show capability. */ vty_out (vty, " Supports only single TOS (TOS0) routes%s", VTY_NEWLINE); vty_out (vty, " This implementation conforms to RFC2328%s", VTY_NEWLINE); vty_out (vty, " RFC1583Compatibility flag is %s%s", - CHECK_FLAG (ospf_top->config, OSPF_RFC1583_COMPATIBLE) ? + CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE) ? "enabled" : "disabled", VTY_NEWLINE); #ifdef HAVE_OPAQUE_LSA vty_out (vty, " OpaqueCapability flag is %s%s%s", - CHECK_FLAG (ospf_top->config, OSPF_OPAQUE_CAPABLE) ? + CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE) ? "enabled" : "disabled", - IS_OPAQUE_LSA_ORIGINATION_BLOCKED (ospf_top->opaque) ? + IS_OPAQUE_LSA_ORIGINATION_BLOCKED (ospf->opaque) ? " (origination blocked)" : "", VTY_NEWLINE); #endif /* HAVE_OPAQUE_LSA */ /* Show SPF timers. */ vty_out (vty, " SPF schedule delay %d secs, Hold time between two SPFs %d secs%s", - ospf_top->spf_delay, ospf_top->spf_holdtime, VTY_NEWLINE); + ospf->spf_delay, ospf->spf_holdtime, VTY_NEWLINE); /* Show refresh parameters. */ vty_out (vty, " Refresh timer %d secs%s", - ospf_top->lsa_refresh_interval, VTY_NEWLINE); + ospf->lsa_refresh_interval, VTY_NEWLINE); /* Show ABR/ASBR flags. */ - if (CHECK_FLAG (ospf_top->flags, OSPF_FLAG_ABR)) + if (CHECK_FLAG (ospf->flags, OSPF_FLAG_ABR)) vty_out (vty, " This router is an ABR, ABR type is: %s%s", - ospf_abr_type_descr_str[ospf_top->abr_type], VTY_NEWLINE); + ospf_abr_type_descr_str[ospf->abr_type], VTY_NEWLINE); - if (CHECK_FLAG (ospf_top->flags, OSPF_FLAG_ASBR)) + if (CHECK_FLAG (ospf->flags, OSPF_FLAG_ASBR)) vty_out (vty, " This router is an ASBR " "(injecting external routing information)%s", VTY_NEWLINE); /* Show Number of AS-external-LSAs. */ vty_out (vty, " Number of external LSA %ld%s", - ospf_lsdb_count_all (ospf_top->lsdb), VTY_NEWLINE); + ospf_lsdb_count_all (ospf->lsdb), VTY_NEWLINE); /* Show number of areas attached. */ vty_out (vty, " Number of areas attached to this router: %d%s%s", - listcount (ospf_top->areas), VTY_NEWLINE, VTY_NEWLINE); + listcount (ospf->areas), VTY_NEWLINE, VTY_NEWLINE); /* Show each area status. */ - for (node = listhead (ospf_top->areas); node; nextnode (node)) + for (node = listhead (ospf->areas); node; nextnode (node)) if ((area = getdata (node)) != NULL) show_ip_ospf_area (vty, area); @@ -2516,7 +2499,8 @@ DEFUN (show_ip_ospf, void -show_ip_ospf_interface_sub (struct vty *vty, struct interface *ifp) +show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf, + struct interface *ifp) { struct ospf_neighbor *nbr; int oi_count; @@ -2563,7 +2547,7 @@ show_ip_ospf_interface_sub (struct vty *vty, struct interface *ifp) VTY_NEWLINE); vty_out (vty, " Router ID %s, Network Type %s, Cost: %d%s", - inet_ntoa (ospf_top->router_id), ospf_network_type_str[oi->type], + inet_ntoa (ospf->router_id), ospf_network_type_str[oi->type], oi->output_cost, VTY_NEWLINE); vty_out (vty, " Transmit Delay is %d sec, State %s, Priority %d%s", @@ -2619,7 +2603,7 @@ show_ip_ospf_interface_sub (struct vty *vty, struct interface *ifp) vty_out (vty, " No Hellos (Passive interface)%s", VTY_NEWLINE); vty_out (vty, " Neighbor Count is %d, Adjacent neighbor count is %d%s", - ospf_nbr_count (oi->nbrs, 0), ospf_nbr_count (oi->nbrs, NSM_Full), + ospf_nbr_count (oi, 0), ospf_nbr_count (oi, NSM_Full), VTY_NEWLINE); } } @@ -2634,19 +2618,20 @@ DEFUN (show_ip_ospf_interface, "Interface name\n") { struct interface *ifp; + struct ospf *ospf = ospf_top; listnode node; /* Show All Interfaces. */ if (argc == 0) for (node = listhead (iflist); node; nextnode (node)) - show_ip_ospf_interface_sub (vty, node->data); + show_ip_ospf_interface_sub (vty, ospf, node->data); /* Interface name is specified. */ else { if ((ifp = if_lookup_by_name (argv[0])) == NULL) vty_out (vty, "No such interface name%s", VTY_NEWLINE); else - show_ip_ospf_interface_sub (vty, ifp); + show_ip_ospf_interface_sub (vty, ospf, ifp); } return CMD_SUCCESS; @@ -2693,9 +2678,10 @@ DEFUN (show_ip_ospf_neighbor, "OSPF information\n" "Neighbor list\n") { + struct ospf *ospf = ospf_top; listnode node; - if (!ospf_top) + if (ospf == NULL) { vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE); return CMD_SUCCESS; @@ -2706,7 +2692,7 @@ DEFUN (show_ip_ospf_neighbor, "Time Address Interface RXmtL " "RqstL DBsmL%s", VTY_NEWLINE, VTY_NEWLINE); - for (node = listhead (ospf_top->oiflist); node; nextnode (node)) + for (node = listhead (ospf->oiflist); node; nextnode (node)) show_ip_ospf_neighbor_sub (vty, getdata (node)); return CMD_SUCCESS; @@ -2721,9 +2707,10 @@ DEFUN (show_ip_ospf_neighbor_all, "Neighbor list\n" "include down status neighbor\n") { + struct ospf *ospf = vty->index; listnode node; - if (!ospf_top) + if (ospf == NULL) { vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE); return CMD_SUCCESS; @@ -2734,7 +2721,7 @@ DEFUN (show_ip_ospf_neighbor_all, "Time Address Interface RXmtL " "RqstL DBsmL%s", VTY_NEWLINE, VTY_NEWLINE); - for (node = listhead (ospf_top->oiflist); node; nextnode (node)) + for (node = listhead (ospf->oiflist); node; nextnode (node)) { struct ospf_interface *oi = getdata (node); listnode nbr_node; @@ -2772,11 +2759,12 @@ DEFUN (show_ip_ospf_neighbor_int, "Neighbor list\n" "Interface name\n") { + struct ospf *ospf = ospf_top; struct ospf_interface *oi; struct in_addr addr; int ret; - if (!ospf_top) + if (ospf == NULL) { vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE); return CMD_SUCCESS; @@ -2790,7 +2778,7 @@ DEFUN (show_ip_ospf_neighbor_int, return CMD_WARNING; } - if ((oi = ospf_if_is_configured (&addr)) == NULL) + if ((oi = ospf_if_is_configured (ospf, &addr)) == NULL) vty_out (vty, "No such interface address%s", VTY_NEWLINE); else { @@ -2902,6 +2890,7 @@ DEFUN (show_ip_ospf_neighbor_id, "Neighbor list\n" "Neighbor ID\n") { + struct ospf *ospf = ospf_top; listnode node; struct ospf_neighbor *nbr; struct in_addr router_id; @@ -2914,7 +2903,7 @@ DEFUN (show_ip_ospf_neighbor_id, return CMD_WARNING; } - for (node = listhead (ospf_top->oiflist); node; nextnode (node)) + for (node = listhead (ospf->oiflist); node; nextnode (node)) { struct ospf_interface *oi = getdata (node); @@ -2938,12 +2927,13 @@ DEFUN (show_ip_ospf_neighbor_detail, "Neighbor list\n" "detail of all neighbors\n") { + struct ospf *ospf = ospf_top; listnode node; - if (!ospf_top) + if (ospf == NULL) return CMD_SUCCESS; - for (node = listhead (ospf_top->oiflist); node; nextnode (node)) + for (node = listhead (ospf->oiflist); node; nextnode (node)) { struct ospf_interface *oi = getdata (node); struct route_node *rn; @@ -2969,12 +2959,13 @@ DEFUN (show_ip_ospf_neighbor_detail_all, "detail of all neighbors\n" "include down status neighbor\n") { + struct ospf *ospf = ospf_top; listnode node; - if (!ospf_top) + if (ospf == NULL) return CMD_SUCCESS; - for (node = listhead (ospf_top->oiflist); node; nextnode (node)) + for (node = listhead (ospf->oiflist); node; nextnode (node)) { struct ospf_interface *oi = getdata (node); struct route_node *rn; @@ -3025,7 +3016,10 @@ DEFUN (show_ip_ospf_neighbor_int_detail, return CMD_WARNING; } - if ((oi = ospf_if_is_configured (&addr)) == NULL) + if (ospf_top == NULL) + return CMD_WARNING; + + if ((oi = ospf_if_is_configured (ospf_top, &addr)) == NULL) vty_out (vty, "No such interface address%s", VTY_NEWLINE); else { @@ -3203,7 +3197,7 @@ char *link_id_desc[] = "(null)", "Neighboring Router ID", "Designated Router address", - "Network/subnet number", + "Net", "Neighboring Router ID", }; @@ -3509,6 +3503,7 @@ void show_lsa_detail (struct vty *vty, int type, struct in_addr *id, struct in_addr *adv_router) { + struct ospf *ospf = ospf_top; listnode node; switch (type) @@ -3520,10 +3515,10 @@ show_lsa_detail (struct vty *vty, int type, vty_out (vty, " %s %s%s", show_database_desc[type], VTY_NEWLINE, VTY_NEWLINE); - show_lsa_detail_proc (vty, AS_LSDB (ospf_top, type), id, adv_router); + show_lsa_detail_proc (vty, AS_LSDB (ospf, type), id, adv_router); break; default: - for (node = listhead (ospf_top->areas); node; nextnode (node)) + for (node = listhead (ospf->areas); node; nextnode (node)) { struct ospf_area *area = node->data; vty_out (vty, "%s %s (Area %s)%s%s", @@ -3560,6 +3555,7 @@ void show_lsa_detail_adv_router (struct vty *vty, int type, struct in_addr *adv_router) { + struct ospf *ospf = ospf_top; listnode node; switch (type) @@ -3571,11 +3567,11 @@ show_lsa_detail_adv_router (struct vty *vty, int type, vty_out (vty, " %s %s%s", show_database_desc[type], VTY_NEWLINE, VTY_NEWLINE); - show_lsa_detail_adv_router_proc (vty, AS_LSDB (ospf_top, type), + show_lsa_detail_adv_router_proc (vty, AS_LSDB (ospf, type), adv_router); break; default: - for (node = listhead (ospf_top->areas); node; nextnode (node)) + for (node = listhead (ospf->areas); node; nextnode (node)) { struct ospf_area *area = node->data; vty_out (vty, "%s %s (Area %s)%s%s", @@ -3591,10 +3587,11 @@ show_lsa_detail_adv_router (struct vty *vty, int type, void show_ip_ospf_database_summary (struct vty *vty, int self) { + struct ospf *ospf = ospf_top; listnode node; int type; - for (node = listhead (ospf_top->areas); node; nextnode (node)) + for (node = listhead (ospf->areas); node; nextnode (node)) { struct ospf_area *area = node->data; for (type = OSPF_MIN_LSA; type < OSPF_MAX_LSA; type++) @@ -3637,15 +3634,15 @@ show_ip_ospf_database_summary (struct vty *vty, int self) default: continue; } - if (ospf_lsdb_count_self (ospf_top->lsdb, type) || - (!self && ospf_lsdb_count (ospf_top->lsdb, type))) + if (ospf_lsdb_count_self (ospf->lsdb, type) || + (!self && ospf_lsdb_count (ospf->lsdb, type))) { vty_out (vty, " %s%s%s", show_database_desc[type], VTY_NEWLINE, VTY_NEWLINE); vty_out (vty, "%s%s", show_database_header[type], VTY_NEWLINE); - foreach_lsa (AS_LSDB (ospf_top, type), vty, self, show_lsa_summary); + foreach_lsa (AS_LSDB (ospf, type), vty, self, show_lsa_summary); vty_out (vty, "%s", VTY_NEWLINE); } } @@ -3656,13 +3653,14 @@ show_ip_ospf_database_summary (struct vty *vty, int self) void show_ip_ospf_database_maxage (struct vty *vty) { + struct ospf *ospf = ospf_top; listnode node; struct ospf_lsa *lsa; vty_out (vty, "%s MaxAge Link States:%s%s", VTY_NEWLINE, VTY_NEWLINE, VTY_NEWLINE); - for (node = listhead (ospf_top->maxage_lsa); node; nextnode (node)) + for (node = listhead (ospf->maxage_lsa); node; nextnode (node)) if ((lsa = node->data) != NULL) { vty_out (vty, "Link type: %d%s", lsa->data->type, VTY_NEWLINE); @@ -3719,14 +3717,15 @@ DEFUN (show_ip_ospf_database, "OSPF information\n" "Database summary\n") { + struct ospf *ospf = ospf_top; int type, ret; struct in_addr id, adv_router; - if (ospf_top == NULL) + if (ospf == NULL) return CMD_SUCCESS; vty_out (vty, "%s OSPF Router with ID (%s)%s%s", VTY_NEWLINE, - inet_ntoa (ospf_top->router_id), VTY_NEWLINE, VTY_NEWLINE); + inet_ntoa (ospf->router_id), VTY_NEWLINE, VTY_NEWLINE); /* Show all LSA. */ if (argc == 0) @@ -3787,7 +3786,7 @@ DEFUN (show_ip_ospf_database, else if (argc == 3) { if (strncmp (argv[2], "s", 1) == 0) - adv_router = ospf_top->router_id; + adv_router = ospf->router_id; else { ret = inet_aton (argv[2], &adv_router); @@ -3857,14 +3856,15 @@ DEFUN (show_ip_ospf_database_type_adv_router, "Advertising Router link states\n" "Advertising Router (as an IP address)\n") { + struct ospf *ospf = ospf_top; int type, ret; struct in_addr adv_router; - if (ospf_top == NULL) + if (ospf == NULL) return CMD_SUCCESS; vty_out (vty, "%s OSPF Router with ID (%s)%s%s", VTY_NEWLINE, - inet_ntoa (ospf_top->router_id), VTY_NEWLINE, VTY_NEWLINE); + inet_ntoa (ospf->router_id), VTY_NEWLINE, VTY_NEWLINE); if (argc != 2) return CMD_WARNING; @@ -3897,7 +3897,7 @@ DEFUN (show_ip_ospf_database_type_adv_router, /* `show ip ospf database LSA adv-router ADV_ROUTER'. */ if (strncmp (argv[1], "s", 1) == 0) - adv_router = ospf_top->router_id; + adv_router = ospf->router_id; else { ret = inet_aton (argv[1], &adv_router); @@ -4488,6 +4488,7 @@ DEFUN (ip_ospf_dead_interval, struct ospf_if_params *params; struct ospf_interface *oi; struct route_node *rn; + struct ospf *ospf = ospf_top; params = IF_DEF_PARAMS (ifp); @@ -4520,9 +4521,12 @@ DEFUN (ip_ospf_dead_interval, /* Update timer values in neighbor structure. */ if (argc == 2) { - oi = ospf_if_lookup_by_local_addr (ifp, addr); - if (oi) - ospf_nbr_timer_update (oi); + if (ospf) + { + oi = ospf_if_lookup_by_local_addr (ospf, ifp, addr); + if (oi) + ospf_nbr_timer_update (oi); + } } else { @@ -4564,6 +4568,7 @@ DEFUN (no_ip_ospf_dead_interval, struct ospf_if_params *params; struct ospf_interface *oi; struct route_node *rn; + struct ospf *ospf = ospf_top; ifp = vty->index; params = IF_DEF_PARAMS (ifp); @@ -4595,9 +4600,12 @@ DEFUN (no_ip_ospf_dead_interval, /* Update timer values in neighbor structure. */ if (argc == 1) { - oi = ospf_if_lookup_by_local_addr (ifp, addr); - if (oi) - ospf_nbr_timer_update (oi); + if (ospf) + { + oi = ospf_if_lookup_by_local_addr (ospf, ifp, addr); + if (oi) + ospf_nbr_timer_update (oi); + } } else { @@ -5515,13 +5523,14 @@ DEFUN (ospf_distribute_list_out, "Routing Information Protocol (RIP)\n" "Border Gateway Protocol (BGP)\n") { + struct ospf *ospf = vty->index; int source; /* Get distribute source. */ if (!str2distribute_source (argv[1], &source)) return CMD_WARNING; - return ospf_distribute_list_out_set (source, argv[0]); + return ospf_distribute_list_out_set (ospf, source, argv[0]); } DEFUN (no_ospf_distribute_list_out, @@ -5537,12 +5546,13 @@ DEFUN (no_ospf_distribute_list_out, "Routing Information Protocol (RIP)\n" "Border Gateway Protocol (BGP)\n") { + struct ospf *ospf = vty->index; int source; if (!str2distribute_source (argv[1], &source)) return CMD_WARNING; - return ospf_distribute_list_out_unset (source, argv[0]); + return ospf_distribute_list_out_unset (ospf, source, argv[0]); } /* Default information originate. */ @@ -5929,6 +5939,7 @@ DEFUN (no_ospf_default_information_originate, "Control distribution of default information\n" "Distribute a default route\n") { + struct ospf *ospf = vty->index; struct prefix_ipv4 p; struct in_addr nexthop; @@ -5936,7 +5947,7 @@ DEFUN (no_ospf_default_information_originate, p.prefix.s_addr = 0; p.prefixlen = 0; - ospf_external_lsa_flush (DEFAULT_ROUTE, &p, 0, nexthop); + ospf_external_lsa_flush (ospf, DEFAULT_ROUTE, &p, 0, nexthop); if (EXTERNAL_INFO (DEFAULT_ROUTE)) { ospf_external_info_delete (DEFAULT_ROUTE, p); @@ -5954,12 +5965,13 @@ DEFUN (ospf_default_metric, "Set metric of redistributed routes\n" "Default metric\n") { + struct ospf *ospf = vty->index; int metric = -1; if (!str2metric (argv[0], &metric)) return CMD_WARNING; - ospf_top->default_metric = metric; + ospf->default_metric = metric; return CMD_SUCCESS; } @@ -5970,7 +5982,10 @@ DEFUN (no_ospf_default_metric, NO_STR "Set metric of redistributed routes\n") { - ospf_top->default_metric = -1; + struct ospf *ospf = vty->index; + + ospf->default_metric = -1; + return CMD_SUCCESS; } @@ -5987,7 +6002,10 @@ DEFUN (ospf_distance, "Define an administrative distance\n" "OSPF Administrative distance\n") { - ospf_top->distance_all = atoi (argv[0]); + struct ospf *ospf = vty->index; + + ospf->distance_all = atoi (argv[0]); + return CMD_SUCCESS; } @@ -5998,7 +6016,10 @@ DEFUN (no_ospf_distance, "Define an administrative distance\n" "OSPF Administrative distance\n") { - ospf_top->distance_all = 0; + struct ospf *ospf = vty->index; + + ospf->distance_all = 0; + return CMD_SUCCESS; } @@ -6010,9 +6031,12 @@ DEFUN (no_ospf_distance_ospf, "OSPF Administrative distance\n" "OSPF Distance\n") { - ospf_top->distance_intra = 0; - ospf_top->distance_inter = 0; - ospf_top->distance_external = 0; + struct ospf *ospf = vty->index; + + ospf->distance_intra = 0; + ospf->distance_inter = 0; + ospf->distance_external = 0; + return CMD_SUCCESS; } @@ -6024,7 +6048,10 @@ DEFUN (ospf_distance_ospf_intra, "Intra-area routes\n" "Distance for intra-area routes\n") { - ospf_top->distance_intra = atoi (argv[0]); + struct ospf *ospf = vty->index; + + ospf->distance_intra = atoi (argv[0]); + return CMD_SUCCESS; } @@ -6038,8 +6065,11 @@ DEFUN (ospf_distance_ospf_intra_inter, "Inter-area routes\n" "Distance for inter-area routes\n") { - ospf_top->distance_intra = atoi (argv[0]); - ospf_top->distance_inter = atoi (argv[1]); + struct ospf *ospf = vty->index; + + ospf->distance_intra = atoi (argv[0]); + ospf->distance_inter = atoi (argv[1]); + return CMD_SUCCESS; } @@ -6053,8 +6083,11 @@ DEFUN (ospf_distance_ospf_intra_external, "External routes\n" "Distance for external routes\n") { - ospf_top->distance_intra = atoi (argv[0]); - ospf_top->distance_external = atoi (argv[1]); + struct ospf *ospf = vty->index; + + ospf->distance_intra = atoi (argv[0]); + ospf->distance_external = atoi (argv[1]); + return CMD_SUCCESS; } @@ -6070,9 +6103,12 @@ DEFUN (ospf_distance_ospf_intra_inter_external, "External routes\n" "Distance for external routes\n") { - ospf_top->distance_intra = atoi (argv[0]); - ospf_top->distance_inter = atoi (argv[1]); - ospf_top->distance_external = atoi (argv[2]); + struct ospf *ospf = vty->index; + + ospf->distance_intra = atoi (argv[0]); + ospf->distance_inter = atoi (argv[1]); + ospf->distance_external = atoi (argv[2]); + return CMD_SUCCESS; } @@ -6088,9 +6124,12 @@ DEFUN (ospf_distance_ospf_intra_external_inter, "Inter-area routes\n" "Distance for inter-area routes\n") { - ospf_top->distance_intra = atoi (argv[0]); - ospf_top->distance_external = atoi (argv[1]); - ospf_top->distance_inter = atoi (argv[2]); + struct ospf *ospf = vty->index; + + ospf->distance_intra = atoi (argv[0]); + ospf->distance_external = atoi (argv[1]); + ospf->distance_inter = atoi (argv[2]); + return CMD_SUCCESS; } @@ -6102,7 +6141,10 @@ DEFUN (ospf_distance_ospf_inter, "Inter-area routes\n" "Distance for inter-area routes\n") { - ospf_top->distance_inter = atoi (argv[0]); + struct ospf *ospf = vty->index; + + ospf->distance_inter = atoi (argv[0]); + return CMD_SUCCESS; } @@ -6116,8 +6158,11 @@ DEFUN (ospf_distance_ospf_inter_intra, "Intra-area routes\n" "Distance for intra-area routes\n") { - ospf_top->distance_inter = atoi (argv[0]); - ospf_top->distance_intra = atoi (argv[1]); + struct ospf *ospf = vty->index; + + ospf->distance_inter = atoi (argv[0]); + ospf->distance_intra = atoi (argv[1]); + return CMD_SUCCESS; } @@ -6131,8 +6176,11 @@ DEFUN (ospf_distance_ospf_inter_external, "External routes\n" "Distance for external routes\n") { - ospf_top->distance_inter = atoi (argv[0]); - ospf_top->distance_external = atoi (argv[1]); + struct ospf *ospf = vty->index; + + ospf->distance_inter = atoi (argv[0]); + ospf->distance_external = atoi (argv[1]); + return CMD_SUCCESS; } @@ -6148,9 +6196,12 @@ DEFUN (ospf_distance_ospf_inter_intra_external, "External routes\n" "Distance for external routes\n") { - ospf_top->distance_inter = atoi (argv[0]); - ospf_top->distance_intra = atoi (argv[1]); - ospf_top->distance_external = atoi (argv[2]); + struct ospf *ospf = vty->index; + + ospf->distance_inter = atoi (argv[0]); + ospf->distance_intra = atoi (argv[1]); + ospf->distance_external = atoi (argv[2]); + return CMD_SUCCESS; } @@ -6166,9 +6217,12 @@ DEFUN (ospf_distance_ospf_inter_external_intra, "Intra-area routes\n" "Distance for intra-area routes\n") { - ospf_top->distance_inter = atoi (argv[0]); - ospf_top->distance_external = atoi (argv[1]); - ospf_top->distance_intra = atoi (argv[2]); + struct ospf *ospf = vty->index; + + ospf->distance_inter = atoi (argv[0]); + ospf->distance_external = atoi (argv[1]); + ospf->distance_intra = atoi (argv[2]); + return CMD_SUCCESS; } @@ -6180,7 +6234,10 @@ DEFUN (ospf_distance_ospf_external, "External routes\n" "Distance for external routes\n") { - ospf_top->distance_external = atoi (argv[0]); + struct ospf *ospf = vty->index; + + ospf->distance_external = atoi (argv[0]); + return CMD_SUCCESS; } @@ -6194,8 +6251,11 @@ DEFUN (ospf_distance_ospf_external_intra, "Intra-area routes\n" "Distance for intra-area routes\n") { - ospf_top->distance_external = atoi (argv[0]); - ospf_top->distance_intra = atoi (argv[1]); + struct ospf *ospf = vty->index; + + ospf->distance_external = atoi (argv[0]); + ospf->distance_intra = atoi (argv[1]); + return CMD_SUCCESS; } @@ -6209,8 +6269,11 @@ DEFUN (ospf_distance_ospf_external_inter, "Inter-area routes\n" "Distance for inter-area routes\n") { - ospf_top->distance_external = atoi (argv[0]); - ospf_top->distance_inter = atoi (argv[1]); + struct ospf *ospf = vty->index; + + ospf->distance_external = atoi (argv[0]); + ospf->distance_inter = atoi (argv[1]); + return CMD_SUCCESS; } @@ -6226,9 +6289,12 @@ DEFUN (ospf_distance_ospf_external_intra_inter, "Inter-area routes\n" "Distance for inter-area routes\n") { - ospf_top->distance_external = atoi (argv[0]); - ospf_top->distance_intra = atoi (argv[1]); - ospf_top->distance_inter = atoi (argv[2]); + struct ospf *ospf = vty->index; + + ospf->distance_external = atoi (argv[0]); + ospf->distance_intra = atoi (argv[1]); + ospf->distance_inter = atoi (argv[2]); + return CMD_SUCCESS; } @@ -6244,9 +6310,12 @@ DEFUN (ospf_distance_ospf_external_inter_intra, "Intra-area routes\n" "Distance for intra-area routes\n") { - ospf_top->distance_external = atoi (argv[0]); - ospf_top->distance_inter = atoi (argv[1]); - ospf_top->distance_intra = atoi (argv[2]); + struct ospf *ospf = vty->index; + + ospf->distance_external = atoi (argv[0]); + ospf->distance_inter = atoi (argv[1]); + ospf->distance_intra = atoi (argv[2]); + return CMD_SUCCESS; } @@ -6258,6 +6327,7 @@ DEFUN (ospf_distance_source, "IP source prefix\n") { ospf_distance_set (vty, argv[0], argv[1], NULL); + return CMD_SUCCESS; } @@ -6457,13 +6527,15 @@ DEFUN (show_ip_ospf_border_routers, "show all the ABR's and ASBR's\n" "for this area\n") { - if (ospf_top == NULL) + struct ospf *ospf = ospf_top; + + if (ospf == NULL) { vty_out (vty, "OSPF is not enabled%s", VTY_NEWLINE); return CMD_SUCCESS; } - if (ospf_top->new_table == NULL) + if (ospf->new_table == NULL) { vty_out (vty, "No OSPF routing information exist%s", VTY_NEWLINE); return CMD_SUCCESS; @@ -6473,7 +6545,7 @@ DEFUN (show_ip_ospf_border_routers, show_ip_ospf_route_network (vty, ospf_top->new_table); */ /* Show Router routes. */ - show_ip_ospf_route_router (vty, ospf_top->new_rtrs); + show_ip_ospf_route_router (vty, ospf->new_rtrs); return CMD_SUCCESS; } @@ -6487,26 +6559,28 @@ DEFUN (show_ip_ospf_route, "OSPF information\n" "OSPF routing table\n") { - if (ospf_top == NULL) + struct ospf *ospf = ospf_top; + + if (ospf == NULL) { vty_out (vty, "OSPF is not enabled%s", VTY_NEWLINE); return CMD_SUCCESS; } - if (ospf_top->new_table == NULL) + if (ospf->new_table == NULL) { vty_out (vty, "No OSPF routing information exist%s", VTY_NEWLINE); return CMD_SUCCESS; } /* Show Network routes. */ - show_ip_ospf_route_network (vty, ospf_top->new_table); + show_ip_ospf_route_network (vty, ospf->new_table); /* Show Router routes. */ - show_ip_ospf_route_router (vty, ospf_top->new_rtrs); + show_ip_ospf_route_router (vty, ospf->new_rtrs); /* Show AS External routes. */ - show_ip_ospf_route_external (vty, ospf_top->old_external_route); + show_ip_ospf_route_external (vty, ospf->old_external_route); return CMD_SUCCESS; } @@ -6735,13 +6809,13 @@ config_write_interface (struct vty *vty) } int -config_write_network_area (struct vty *vty) +config_write_network_area (struct vty *vty, struct ospf *ospf) { struct route_node *rn; u_char buf[INET_ADDRSTRLEN]; /* `network area' print. */ - for (rn = route_top (ospf_top->networks); rn; rn = route_next (rn)) + for (rn = route_top (ospf->networks); rn; rn = route_next (rn)) if (rn->info) { struct ospf_network *n = rn->info; @@ -6765,13 +6839,13 @@ config_write_network_area (struct vty *vty) } int -config_write_ospf_area (struct vty *vty) +config_write_ospf_area (struct vty *vty, struct ospf *ospf) { listnode node; u_char buf[INET_ADDRSTRLEN]; /* Area configuration print. */ - for (node = listhead (ospf_top->areas); node; nextnode (node)) + for (node = listhead (ospf->areas); node; nextnode (node)) { struct ospf_area *area = getdata (node); struct route_node *rn1; @@ -6857,13 +6931,13 @@ config_write_ospf_area (struct vty *vty) } int -config_write_ospf_nbr_nbma (struct vty *vty) +config_write_ospf_nbr_nbma (struct vty *vty, struct ospf *ospf) { struct ospf_nbr_nbma *nbr_nbma; struct route_node *rn; /* Static Neighbor configuration print. */ - for (rn = route_top (ospf_top->nbr_nbma); rn; rn = route_next (rn)) + 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)); @@ -6881,13 +6955,13 @@ config_write_ospf_nbr_nbma (struct vty *vty) } int -config_write_virtual_link (struct vty *vty) +config_write_virtual_link (struct vty *vty, struct ospf *ospf) { listnode node; u_char buf[INET_ADDRSTRLEN]; /* Virtual-Link print */ - for (node = listhead (ospf_top->vlinks); node; nextnode (node)) + for (node = listhead (ospf->vlinks); node; nextnode (node)) { listnode n2; struct crypt_key *ck; @@ -6948,7 +7022,7 @@ config_write_virtual_link (struct vty *vty) char *distribute_str[] = { "system", "kernel", "connected", "static", "rip", "ripng", "ospf", "ospf6", "bgp"}; int -config_write_ospf_redistribute (struct vty *vty) +config_write_ospf_redistribute (struct vty *vty, struct ospf *ospf) { int type; @@ -6957,10 +7031,10 @@ config_write_ospf_redistribute (struct vty *vty) if (type != zclient->redist_default && zclient->redist[type]) { vty_out (vty, " redistribute %s", distribute_str[type]); - if (ospf_top->dmetric[type].value >= 0) + if (ospf->dmetric[type].value >= 0) vty_out (vty, " metric %d", ospf_top->dmetric[type].value); - if (ospf_top->dmetric[type].type == EXTERNAL_METRIC_TYPE_1) + if (ospf->dmetric[type].type == EXTERNAL_METRIC_TYPE_1) vty_out (vty, " metric-type 1"); if (ROUTEMAP_NAME (type)) @@ -6973,40 +7047,40 @@ config_write_ospf_redistribute (struct vty *vty) } int -config_write_ospf_default_metric (struct vty *vty) +config_write_ospf_default_metric (struct vty *vty, struct ospf *ospf) { - if (ospf_top->default_metric != -1) - vty_out (vty, " default-metric %d%s", ospf_top->default_metric, + if (ospf->default_metric != -1) + vty_out (vty, " default-metric %d%s", ospf->default_metric, VTY_NEWLINE); return 0; } int -config_write_ospf_distribute (struct vty *vty) +config_write_ospf_distribute (struct vty *vty, struct ospf *ospf) { int type; - if (ospf_top) + if (ospf) { /* distribute-list print. */ for (type = 0; type < ZEBRA_ROUTE_MAX; type++) - if (ospf_top->dlist[type].name) + if (ospf->dlist[type].name) vty_out (vty, " distribute-list %s out %s%s", - ospf_top->dlist[type].name, + ospf->dlist[type].name, distribute_str[type], VTY_NEWLINE); /* default-information print. */ - if (ospf_top->default_originate != DEFAULT_ORIGINATE_NONE) + if (ospf->default_originate != DEFAULT_ORIGINATE_NONE) { - if (ospf_top->default_originate == DEFAULT_ORIGINATE_ZEBRA) + if (ospf->default_originate == DEFAULT_ORIGINATE_ZEBRA) vty_out (vty, " default-information originate"); else vty_out (vty, " default-information originate always"); - if (ospf_top->dmetric[DEFAULT_ROUTE].value >= 0) + if (ospf->dmetric[DEFAULT_ROUTE].value >= 0) vty_out (vty, " metric %d", - ospf_top->dmetric[DEFAULT_ROUTE].value); - if (ospf_top->dmetric[DEFAULT_ROUTE].type == EXTERNAL_METRIC_TYPE_1) + ospf->dmetric[DEFAULT_ROUTE].value); + if (ospf->dmetric[DEFAULT_ROUTE].type == EXTERNAL_METRIC_TYPE_1) vty_out (vty, " metric-type 1"); if (ROUTEMAP_NAME (DEFAULT_ROUTE)) @@ -7021,31 +7095,31 @@ config_write_ospf_distribute (struct vty *vty) } int -config_write_ospf_distance (struct vty *vty) +config_write_ospf_distance (struct vty *vty, struct ospf *ospf) { struct route_node *rn; struct ospf_distance *odistance; - if (ospf_top->distance_all) - vty_out (vty, " distance %d%s", ospf_top->distance_all, VTY_NEWLINE); + if (ospf->distance_all) + vty_out (vty, " distance %d%s", ospf->distance_all, VTY_NEWLINE); - if (ospf_top->distance_intra - || ospf_top->distance_inter - || ospf_top->distance_external) + if (ospf->distance_intra + || ospf->distance_inter + || ospf->distance_external) { vty_out (vty, " distance ospf"); - if (ospf_top->distance_intra) - vty_out (vty, " intra-area %d", ospf_top->distance_intra); - if (ospf_top->distance_inter) - vty_out (vty, " inter-area %d", ospf_top->distance_inter); - if (ospf_top->distance_external) - vty_out (vty, " external %d", ospf_top->distance_external); + 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, "%s", VTY_NEWLINE); } - for (rn = route_top (ospf_top->distance_table); rn; rn = route_next (rn)) + 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%s", odistance->distance, @@ -7060,54 +7134,55 @@ config_write_ospf_distance (struct vty *vty) int ospf_config_write (struct vty *vty) { + struct ospf *ospf = ospf_top; listnode node; int write = 0; - if (ospf_top != NULL) + if (ospf != NULL) { /* `router ospf' print. */ vty_out (vty, "router ospf%s", VTY_NEWLINE); write++; - if (!ospf_top->networks) + if (!ospf->networks) return write; /* Router ID print. */ - if (ospf_top->router_id_static.s_addr != 0) + if (ospf->router_id_static.s_addr != 0) vty_out (vty, " ospf router-id %s%s", - inet_ntoa (ospf_top->router_id_static), VTY_NEWLINE); + inet_ntoa (ospf->router_id_static), VTY_NEWLINE); /* ABR type print. */ - if (ospf_top->abr_type != OSPF_ABR_STAND) + if (ospf->abr_type != OSPF_ABR_STAND) vty_out (vty, " ospf abr-type %s%s", - ospf_abr_type_str[ospf_top->abr_type], VTY_NEWLINE); + ospf_abr_type_str[ospf->abr_type], VTY_NEWLINE); /* RFC1583 compatibility flag print -- Compatible with CISCO 12.1. */ - if (CHECK_FLAG (ospf_top->config, OSPF_RFC1583_COMPATIBLE)) + if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE)) vty_out (vty, " compatible rfc1583%s", VTY_NEWLINE); /* auto-cost reference-bandwidth configuration. */ - if (ospf_top->ref_bandwidth != OSPF_DEFAULT_REF_BANDWIDTH) + if (ospf->ref_bandwidth != OSPF_DEFAULT_REF_BANDWIDTH) vty_out (vty, " auto-cost reference-bandwidth %d%s", - ospf_top->ref_bandwidth / 1000, VTY_NEWLINE); + ospf->ref_bandwidth / 1000, VTY_NEWLINE); /* SPF timers print. */ - if (ospf_top->spf_delay != OSPF_SPF_DELAY_DEFAULT || - ospf_top->spf_holdtime != OSPF_SPF_HOLDTIME_DEFAULT) + if (ospf->spf_delay != OSPF_SPF_DELAY_DEFAULT || + ospf->spf_holdtime != OSPF_SPF_HOLDTIME_DEFAULT) vty_out (vty, " timers spf %d %d%s", - ospf_top->spf_delay, ospf_top->spf_holdtime, VTY_NEWLINE); + ospf->spf_delay, ospf->spf_holdtime, VTY_NEWLINE); /* SPF refresh parameters print. */ - if (ospf_top->lsa_refresh_interval != OSPF_LSA_REFRESH_INTERVAL_DEFAULT) + if (ospf->lsa_refresh_interval != OSPF_LSA_REFRESH_INTERVAL_DEFAULT) vty_out (vty, " refresh timer %d%s", - ospf_top->lsa_refresh_interval, VTY_NEWLINE); + ospf->lsa_refresh_interval, VTY_NEWLINE); /* Redistribute information print. */ - config_write_ospf_redistribute (vty); + config_write_ospf_redistribute (vty, ospf); /* passive-interface print. */ - for (node = listhead (ospf_top->iflist); node; nextnode (node)) + for (node = listhead (ospf->iflist); node; nextnode (node)) { struct interface *ifp = getdata (node); @@ -7118,7 +7193,7 @@ ospf_config_write (struct vty *vty) ifp->name, VTY_NEWLINE); } - for (node = listhead (ospf_top->oiflist); node; nextnode (node)) + for (node = listhead (ospf->oiflist); node; nextnode (node)) { struct ospf_interface *oi = getdata (node); @@ -7130,28 +7205,28 @@ ospf_config_write (struct vty *vty) /* Network area print. */ - config_write_network_area (vty); + config_write_network_area (vty, ospf); /* Area config print. */ - config_write_ospf_area (vty); + config_write_ospf_area (vty, ospf); /* static neighbor print. */ - config_write_ospf_nbr_nbma (vty); + config_write_ospf_nbr_nbma (vty, ospf); /* Virtual-Link print. */ - config_write_virtual_link (vty); + config_write_virtual_link (vty, ospf); /* Default metric configuration. */ - config_write_ospf_default_metric (vty); + config_write_ospf_default_metric (vty, ospf); /* Distribute-list and default-information print. */ - config_write_ospf_distribute (vty); + config_write_ospf_distribute (vty, ospf); /* Distance configuration. */ - config_write_ospf_distance (vty); + config_write_ospf_distance (vty, ospf); #ifdef HAVE_OPAQUE_LSA - ospf_opaque_config_write_router (vty, ospf_top); + ospf_opaque_config_write_router (vty, ospf); #endif /* HAVE_OPAQUE_LSA */ } @@ -7568,3 +7643,4 @@ ospf_vty_init () ospf_vty_zebra_init (); } + |