diff options
author | whitespace / reindent <invalid@invalid.invalid> | 2017-07-17 14:03:14 +0200 |
---|---|---|
committer | whitespace / reindent <invalid@invalid.invalid> | 2017-07-17 14:04:07 +0200 |
commit | d62a17aedeb0eebdba98238874bb13d62c48dbf9 (patch) | |
tree | 3b319b1d61c8b85b4d1f06adf8b844bb8a9b5107 /ospf6d/ospf6_area.c | |
parent | *: add indent control files (diff) | |
download | frr-d62a17aedeb0eebdba98238874bb13d62c48dbf9.tar.xz frr-d62a17aedeb0eebdba98238874bb13d62c48dbf9.zip |
*: reindentreindent-master-after
indent.py `git ls-files | pcregrep '\.[ch]$' | pcregrep -v '^(ldpd|babeld|nhrpd)/'`
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'ospf6d/ospf6_area.c')
-rw-r--r-- | ospf6d/ospf6_area.c | 1360 |
1 files changed, 645 insertions, 715 deletions
diff --git a/ospf6d/ospf6_area.c b/ospf6d/ospf6_area.c index 8e6408bf4..a4cc0bf42 100644 --- a/ospf6d/ospf6_area.c +++ b/ospf6d/ospf6_area.c @@ -45,163 +45,146 @@ #include "ospf6_asbr.h" #include "ospf6d.h" -int -ospf6_area_cmp (void *va, void *vb) +int ospf6_area_cmp(void *va, void *vb) { - struct ospf6_area *oa = (struct ospf6_area *) va; - struct ospf6_area *ob = (struct ospf6_area *) vb; - return (ntohl (oa->area_id) < ntohl (ob->area_id) ? -1 : 1); + struct ospf6_area *oa = (struct ospf6_area *)va; + struct ospf6_area *ob = (struct ospf6_area *)vb; + return (ntohl(oa->area_id) < ntohl(ob->area_id) ? -1 : 1); } /* schedule routing table recalculation */ -static void -ospf6_area_lsdb_hook_add (struct ospf6_lsa *lsa) -{ - switch (ntohs (lsa->header->type)) - { - case OSPF6_LSTYPE_ROUTER: - case OSPF6_LSTYPE_NETWORK: - if (IS_OSPF6_DEBUG_EXAMIN_TYPE (lsa->header->type)) - { - zlog_debug ("Examin %s", lsa->name); - zlog_debug ("Schedule SPF Calculation for %s", - OSPF6_AREA (lsa->lsdb->data)->name); - } - ospf6_spf_schedule (OSPF6_PROCESS(OSPF6_AREA (lsa->lsdb->data)->ospf6), - ospf6_lsadd_to_spf_reason(lsa)); - break; - - case OSPF6_LSTYPE_INTRA_PREFIX: - ospf6_intra_prefix_lsa_add (lsa); - break; - - case OSPF6_LSTYPE_INTER_PREFIX: - case OSPF6_LSTYPE_INTER_ROUTER: - ospf6_abr_examin_summary (lsa, (struct ospf6_area *) lsa->lsdb->data); - break; - - default: - break; - } +static void ospf6_area_lsdb_hook_add(struct ospf6_lsa *lsa) +{ + switch (ntohs(lsa->header->type)) { + case OSPF6_LSTYPE_ROUTER: + case OSPF6_LSTYPE_NETWORK: + if (IS_OSPF6_DEBUG_EXAMIN_TYPE(lsa->header->type)) { + zlog_debug("Examin %s", lsa->name); + zlog_debug("Schedule SPF Calculation for %s", + OSPF6_AREA(lsa->lsdb->data)->name); + } + ospf6_spf_schedule( + OSPF6_PROCESS(OSPF6_AREA(lsa->lsdb->data)->ospf6), + ospf6_lsadd_to_spf_reason(lsa)); + break; + + case OSPF6_LSTYPE_INTRA_PREFIX: + ospf6_intra_prefix_lsa_add(lsa); + break; + + case OSPF6_LSTYPE_INTER_PREFIX: + case OSPF6_LSTYPE_INTER_ROUTER: + ospf6_abr_examin_summary(lsa, + (struct ospf6_area *)lsa->lsdb->data); + break; + + default: + break; + } } -static void -ospf6_area_lsdb_hook_remove (struct ospf6_lsa *lsa) -{ - switch (ntohs (lsa->header->type)) - { - case OSPF6_LSTYPE_ROUTER: - case OSPF6_LSTYPE_NETWORK: - if (IS_OSPF6_DEBUG_EXAMIN_TYPE (lsa->header->type)) - { - zlog_debug ("LSA disappearing: %s", lsa->name); - zlog_debug ("Schedule SPF Calculation for %s", - OSPF6_AREA (lsa->lsdb->data)->name); - } - ospf6_spf_schedule (OSPF6_PROCESS(OSPF6_AREA (lsa->lsdb->data)->ospf6), - ospf6_lsremove_to_spf_reason(lsa)); - break; - - case OSPF6_LSTYPE_INTRA_PREFIX: - ospf6_intra_prefix_lsa_remove (lsa); - break; - - case OSPF6_LSTYPE_INTER_PREFIX: - case OSPF6_LSTYPE_INTER_ROUTER: - ospf6_abr_examin_summary (lsa, (struct ospf6_area *) lsa->lsdb->data); - break; - - default: - break; - } +static void ospf6_area_lsdb_hook_remove(struct ospf6_lsa *lsa) +{ + switch (ntohs(lsa->header->type)) { + case OSPF6_LSTYPE_ROUTER: + case OSPF6_LSTYPE_NETWORK: + if (IS_OSPF6_DEBUG_EXAMIN_TYPE(lsa->header->type)) { + zlog_debug("LSA disappearing: %s", lsa->name); + zlog_debug("Schedule SPF Calculation for %s", + OSPF6_AREA(lsa->lsdb->data)->name); + } + ospf6_spf_schedule( + OSPF6_PROCESS(OSPF6_AREA(lsa->lsdb->data)->ospf6), + ospf6_lsremove_to_spf_reason(lsa)); + break; + + case OSPF6_LSTYPE_INTRA_PREFIX: + ospf6_intra_prefix_lsa_remove(lsa); + break; + + case OSPF6_LSTYPE_INTER_PREFIX: + case OSPF6_LSTYPE_INTER_ROUTER: + ospf6_abr_examin_summary(lsa, + (struct ospf6_area *)lsa->lsdb->data); + break; + + default: + break; + } } -static void -ospf6_area_route_hook_add (struct ospf6_route *route) +static void ospf6_area_route_hook_add(struct ospf6_route *route) { - struct ospf6_route *copy = ospf6_route_copy (route); - ospf6_route_add (copy, ospf6->route_table); + struct ospf6_route *copy = ospf6_route_copy(route); + ospf6_route_add(copy, ospf6->route_table); } -static void -ospf6_area_route_hook_remove (struct ospf6_route *route) +static void ospf6_area_route_hook_remove(struct ospf6_route *route) { - struct ospf6_route *copy; + struct ospf6_route *copy; - copy = ospf6_route_lookup_identical (route, ospf6->route_table); - if (copy) - ospf6_route_remove (copy, ospf6->route_table); + copy = ospf6_route_lookup_identical(route, ospf6->route_table); + if (copy) + ospf6_route_remove(copy, ospf6->route_table); } -static void -ospf6_area_stub_update (struct ospf6_area *area) +static void ospf6_area_stub_update(struct ospf6_area *area) { - if (IS_AREA_STUB (area)) - { - if (IS_OSPF6_DEBUG_ORIGINATE (ROUTER)) - zlog_debug ("Stubbing out area for if %s\n", area->name); - OSPF6_OPT_CLEAR (area->options, OSPF6_OPT_E); - } - else if (IS_AREA_ENABLED (area)) - { - if (IS_OSPF6_DEBUG_ORIGINATE (ROUTER)) - zlog_debug ("Normal area for if %s\n", area->name); - OSPF6_OPT_SET (area->options, OSPF6_OPT_E); - ospf6_asbr_send_externals_to_area (area); - } - - OSPF6_ROUTER_LSA_SCHEDULE(area); + if (IS_AREA_STUB(area)) { + if (IS_OSPF6_DEBUG_ORIGINATE(ROUTER)) + zlog_debug("Stubbing out area for if %s\n", area->name); + OSPF6_OPT_CLEAR(area->options, OSPF6_OPT_E); + } else if (IS_AREA_ENABLED(area)) { + if (IS_OSPF6_DEBUG_ORIGINATE(ROUTER)) + zlog_debug("Normal area for if %s\n", area->name); + OSPF6_OPT_SET(area->options, OSPF6_OPT_E); + ospf6_asbr_send_externals_to_area(area); + } + + OSPF6_ROUTER_LSA_SCHEDULE(area); } -static int -ospf6_area_stub_set (struct ospf6 *ospf6, struct ospf6_area *area) +static int ospf6_area_stub_set(struct ospf6 *ospf6, struct ospf6_area *area) { - if (!IS_AREA_STUB(area)) - { - SET_FLAG (area->flag, OSPF6_AREA_STUB); - ospf6_area_stub_update (area); - } + if (!IS_AREA_STUB(area)) { + SET_FLAG(area->flag, OSPF6_AREA_STUB); + ospf6_area_stub_update(area); + } - return (1); + return (1); } -static void -ospf6_area_stub_unset (struct ospf6 *ospf6, struct ospf6_area *area) +static void ospf6_area_stub_unset(struct ospf6 *ospf6, struct ospf6_area *area) { - if (IS_AREA_STUB (area)) - { - UNSET_FLAG (area->flag, OSPF6_AREA_STUB); - ospf6_area_stub_update (area); - } + if (IS_AREA_STUB(area)) { + UNSET_FLAG(area->flag, OSPF6_AREA_STUB); + ospf6_area_stub_update(area); + } } -static void -ospf6_area_no_summary_set (struct ospf6 *ospf6, struct ospf6_area *area) +static void ospf6_area_no_summary_set(struct ospf6 *ospf6, + struct ospf6_area *area) { - if (area) - { - if (!area->no_summary) - { - area->no_summary = 1; - ospf6_abr_range_reset_cost (ospf6); - ospf6_abr_prefix_resummarize (ospf6); + if (area) { + if (!area->no_summary) { + area->no_summary = 1; + ospf6_abr_range_reset_cost(ospf6); + ospf6_abr_prefix_resummarize(ospf6); + } } - } } -static void -ospf6_area_no_summary_unset (struct ospf6 *ospf6, struct ospf6_area *area) +static void ospf6_area_no_summary_unset(struct ospf6 *ospf6, + struct ospf6_area *area) { - if (area) - { - if (area->no_summary) - { - area->no_summary = 0; - ospf6_abr_range_reset_cost (ospf6); - ospf6_abr_prefix_resummarize (ospf6); + if (area) { + if (area->no_summary) { + area->no_summary = 0; + ospf6_abr_range_reset_cost(ospf6); + ospf6_abr_prefix_resummarize(ospf6); + } } - } } /** @@ -211,221 +194,199 @@ ospf6_area_no_summary_unset (struct ospf6 *ospf6, struct ospf6_area *area) * @param o - ospf6 instance * @param df - display format for area ID */ -struct ospf6_area * -ospf6_area_create (u_int32_t area_id, struct ospf6 *o, int df) +struct ospf6_area *ospf6_area_create(u_int32_t area_id, struct ospf6 *o, int df) { - struct ospf6_area *oa; - - oa = XCALLOC (MTYPE_OSPF6_AREA, sizeof (struct ospf6_area)); - - switch (df) - { - case OSPF6_AREA_FMT_DECIMAL: - snprintf (oa->name, sizeof (oa->name), "%u", ntohl (area_id)); - break; - default: - case OSPF6_AREA_FMT_DOTTEDQUAD: - inet_ntop (AF_INET, &area_id, oa->name, sizeof (oa->name)); - break; - } - - oa->area_id = area_id; - oa->if_list = list_new (); - - oa->lsdb = ospf6_lsdb_create (oa); - oa->lsdb->hook_add = ospf6_area_lsdb_hook_add; - oa->lsdb->hook_remove = ospf6_area_lsdb_hook_remove; - oa->lsdb_self = ospf6_lsdb_create (oa); - - oa->spf_table = OSPF6_ROUTE_TABLE_CREATE (AREA, SPF_RESULTS); - oa->spf_table->scope = oa; - oa->route_table = OSPF6_ROUTE_TABLE_CREATE (AREA, ROUTES); - oa->route_table->scope = oa; - oa->route_table->hook_add = ospf6_area_route_hook_add; - oa->route_table->hook_remove = ospf6_area_route_hook_remove; - - oa->range_table = OSPF6_ROUTE_TABLE_CREATE (AREA, PREFIX_RANGES); - oa->range_table->scope = oa; - bf_init(oa->range_table->idspace, 32); - oa->summary_prefix = OSPF6_ROUTE_TABLE_CREATE (AREA, SUMMARY_PREFIXES); - oa->summary_prefix->scope = oa; - oa->summary_router = OSPF6_ROUTE_TABLE_CREATE (AREA, SUMMARY_ROUTERS); - oa->summary_router->scope = oa; - - /* set default options */ - if (CHECK_FLAG (o->flag, OSPF6_STUB_ROUTER)) - { - OSPF6_OPT_CLEAR (oa->options, OSPF6_OPT_V6); - OSPF6_OPT_CLEAR (oa->options, OSPF6_OPT_R); - } - else - { - OSPF6_OPT_SET (oa->options, OSPF6_OPT_V6); - OSPF6_OPT_SET (oa->options, OSPF6_OPT_R); - } - - OSPF6_OPT_SET (oa->options, OSPF6_OPT_E); - - SET_FLAG (oa->flag, OSPF6_AREA_ACTIVE); - SET_FLAG (oa->flag, OSPF6_AREA_ENABLE); - - oa->ospf6 = o; - listnode_add_sort (o->area_list, oa); - - if (area_id == OSPF_AREA_BACKBONE) - { - o->backbone = oa; - } - - return oa; + struct ospf6_area *oa; + + oa = XCALLOC(MTYPE_OSPF6_AREA, sizeof(struct ospf6_area)); + + switch (df) { + case OSPF6_AREA_FMT_DECIMAL: + snprintf(oa->name, sizeof(oa->name), "%u", ntohl(area_id)); + break; + default: + case OSPF6_AREA_FMT_DOTTEDQUAD: + inet_ntop(AF_INET, &area_id, oa->name, sizeof(oa->name)); + break; + } + + oa->area_id = area_id; + oa->if_list = list_new(); + + oa->lsdb = ospf6_lsdb_create(oa); + oa->lsdb->hook_add = ospf6_area_lsdb_hook_add; + oa->lsdb->hook_remove = ospf6_area_lsdb_hook_remove; + oa->lsdb_self = ospf6_lsdb_create(oa); + + oa->spf_table = OSPF6_ROUTE_TABLE_CREATE(AREA, SPF_RESULTS); + oa->spf_table->scope = oa; + oa->route_table = OSPF6_ROUTE_TABLE_CREATE(AREA, ROUTES); + oa->route_table->scope = oa; + oa->route_table->hook_add = ospf6_area_route_hook_add; + oa->route_table->hook_remove = ospf6_area_route_hook_remove; + + oa->range_table = OSPF6_ROUTE_TABLE_CREATE(AREA, PREFIX_RANGES); + oa->range_table->scope = oa; + bf_init(oa->range_table->idspace, 32); + oa->summary_prefix = OSPF6_ROUTE_TABLE_CREATE(AREA, SUMMARY_PREFIXES); + oa->summary_prefix->scope = oa; + oa->summary_router = OSPF6_ROUTE_TABLE_CREATE(AREA, SUMMARY_ROUTERS); + oa->summary_router->scope = oa; + + /* set default options */ + if (CHECK_FLAG(o->flag, OSPF6_STUB_ROUTER)) { + OSPF6_OPT_CLEAR(oa->options, OSPF6_OPT_V6); + OSPF6_OPT_CLEAR(oa->options, OSPF6_OPT_R); + } else { + OSPF6_OPT_SET(oa->options, OSPF6_OPT_V6); + OSPF6_OPT_SET(oa->options, OSPF6_OPT_R); + } + + OSPF6_OPT_SET(oa->options, OSPF6_OPT_E); + + SET_FLAG(oa->flag, OSPF6_AREA_ACTIVE); + SET_FLAG(oa->flag, OSPF6_AREA_ENABLE); + + oa->ospf6 = o; + listnode_add_sort(o->area_list, oa); + + if (area_id == OSPF_AREA_BACKBONE) { + o->backbone = oa; + } + + return oa; } -void -ospf6_area_delete (struct ospf6_area *oa) +void ospf6_area_delete(struct ospf6_area *oa) { - struct listnode *n; - struct ospf6_interface *oi; + struct listnode *n; + struct ospf6_interface *oi; - /* The ospf6_interface structs store configuration - * information which should not be lost/reset when - * deleting an area. - * So just detach the interface from the area and - * keep it around. */ - for (ALL_LIST_ELEMENTS_RO (oa->if_list, n, oi)) - oi->area = NULL; + /* The ospf6_interface structs store configuration + * information which should not be lost/reset when + * deleting an area. + * So just detach the interface from the area and + * keep it around. */ + for (ALL_LIST_ELEMENTS_RO(oa->if_list, n, oi)) + oi->area = NULL; - list_delete (oa->if_list); + list_delete(oa->if_list); - ospf6_lsdb_delete (oa->lsdb); - ospf6_lsdb_delete (oa->lsdb_self); + ospf6_lsdb_delete(oa->lsdb); + ospf6_lsdb_delete(oa->lsdb_self); - ospf6_spf_table_finish (oa->spf_table); - ospf6_route_table_delete (oa->spf_table); - ospf6_route_table_delete (oa->route_table); + ospf6_spf_table_finish(oa->spf_table); + ospf6_route_table_delete(oa->spf_table); + ospf6_route_table_delete(oa->route_table); - ospf6_route_table_delete (oa->range_table); - ospf6_route_table_delete (oa->summary_prefix); - ospf6_route_table_delete (oa->summary_router); + ospf6_route_table_delete(oa->range_table); + ospf6_route_table_delete(oa->summary_prefix); + ospf6_route_table_delete(oa->summary_router); - listnode_delete (oa->ospf6->area_list, oa); - oa->ospf6 = NULL; + listnode_delete(oa->ospf6->area_list, oa); + oa->ospf6 = NULL; - /* free area */ - XFREE (MTYPE_OSPF6_AREA, oa); + /* free area */ + XFREE(MTYPE_OSPF6_AREA, oa); } -struct ospf6_area * -ospf6_area_lookup (u_int32_t area_id, struct ospf6 *ospf6) +struct ospf6_area *ospf6_area_lookup(u_int32_t area_id, struct ospf6 *ospf6) { - struct ospf6_area *oa; - struct listnode *n; + struct ospf6_area *oa; + struct listnode *n; - for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, n, oa)) - if (oa->area_id == area_id) - return oa; + for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, n, oa)) + if (oa->area_id == area_id) + return oa; - return (struct ospf6_area *) NULL; + return (struct ospf6_area *)NULL; } -void -ospf6_area_enable (struct ospf6_area *oa) +void ospf6_area_enable(struct ospf6_area *oa) { - struct listnode *node, *nnode; - struct ospf6_interface *oi; + struct listnode *node, *nnode; + struct ospf6_interface *oi; - SET_FLAG (oa->flag, OSPF6_AREA_ENABLE); + SET_FLAG(oa->flag, OSPF6_AREA_ENABLE); - for (ALL_LIST_ELEMENTS (oa->if_list, node, nnode, oi)) - ospf6_interface_enable (oi); - ospf6_abr_enable_area (oa); + for (ALL_LIST_ELEMENTS(oa->if_list, node, nnode, oi)) + ospf6_interface_enable(oi); + ospf6_abr_enable_area(oa); } -void -ospf6_area_disable (struct ospf6_area *oa) +void ospf6_area_disable(struct ospf6_area *oa) { - struct listnode *node, *nnode; - struct ospf6_interface *oi; + struct listnode *node, *nnode; + struct ospf6_interface *oi; - UNSET_FLAG (oa->flag, OSPF6_AREA_ENABLE); + UNSET_FLAG(oa->flag, OSPF6_AREA_ENABLE); - for (ALL_LIST_ELEMENTS (oa->if_list, node, nnode, oi)) - ospf6_interface_disable (oi); + for (ALL_LIST_ELEMENTS(oa->if_list, node, nnode, oi)) + ospf6_interface_disable(oi); - ospf6_abr_disable_area (oa); - ospf6_lsdb_remove_all (oa->lsdb); - ospf6_lsdb_remove_all (oa->lsdb_self); + ospf6_abr_disable_area(oa); + ospf6_lsdb_remove_all(oa->lsdb); + ospf6_lsdb_remove_all(oa->lsdb_self); - ospf6_spf_table_finish(oa->spf_table); - ospf6_route_remove_all(oa->route_table); + ospf6_spf_table_finish(oa->spf_table); + ospf6_route_remove_all(oa->route_table); - THREAD_OFF (oa->thread_router_lsa); - THREAD_OFF (oa->thread_intra_prefix_lsa); + THREAD_OFF(oa->thread_router_lsa); + THREAD_OFF(oa->thread_intra_prefix_lsa); } -void -ospf6_area_show (struct vty *vty, struct ospf6_area *oa) +void ospf6_area_show(struct vty *vty, struct ospf6_area *oa) { - struct listnode *i; - struct ospf6_interface *oi; - unsigned long result; - - if (!IS_AREA_STUB (oa)) - vty_out (vty, " Area %s\n", oa->name); - else - { - if (oa->no_summary) - { - vty_out (vty, " Area %s[Stub, No Summary]\n", oa->name); - } - else - { - vty_out (vty, " Area %s[Stub]\n", oa->name); - } - } - vty_out (vty, " Number of Area scoped LSAs is %u\n", - oa->lsdb->count); - - vty_out (vty, " Interface attached to this area:"); - for (ALL_LIST_ELEMENTS_RO (oa->if_list, i, oi)) - vty_out (vty, " %s", oi->interface->name); - vty_out (vty, "\n"); - - if (oa->ts_spf.tv_sec || oa->ts_spf.tv_usec) - { - result = monotime_since(&oa->ts_spf, NULL); - if (result/TIMER_SECOND_MICRO > 0) - { - vty_out (vty, "SPF last executed %ld.%lds ago\n", - result/TIMER_SECOND_MICRO, - result % TIMER_SECOND_MICRO); + struct listnode *i; + struct ospf6_interface *oi; + unsigned long result; + + if (!IS_AREA_STUB(oa)) + vty_out(vty, " Area %s\n", oa->name); + else { + if (oa->no_summary) { + vty_out(vty, " Area %s[Stub, No Summary]\n", oa->name); + } else { + vty_out(vty, " Area %s[Stub]\n", oa->name); + } } - else - { - vty_out (vty, "SPF last executed %ldus ago\n", - result); + vty_out(vty, " Number of Area scoped LSAs is %u\n", + oa->lsdb->count); + + vty_out(vty, " Interface attached to this area:"); + for (ALL_LIST_ELEMENTS_RO(oa->if_list, i, oi)) + vty_out(vty, " %s", oi->interface->name); + vty_out(vty, "\n"); + + if (oa->ts_spf.tv_sec || oa->ts_spf.tv_usec) { + result = monotime_since(&oa->ts_spf, NULL); + if (result / TIMER_SECOND_MICRO > 0) { + vty_out(vty, "SPF last executed %ld.%lds ago\n", + result / TIMER_SECOND_MICRO, + result % TIMER_SECOND_MICRO); + } else { + vty_out(vty, "SPF last executed %ldus ago\n", result); + } + } else + vty_out(vty, "SPF has not been run\n"); +} + + +#define OSPF6_CMD_AREA_GET(str, oa) \ + { \ + char *ep; \ + u_int32_t area_id = htonl(strtoul(str, &ep, 10)); \ + if (*ep && inet_pton(AF_INET, str, &area_id) != 1) { \ + vty_out(vty, "Malformed Area-ID: %s\n", str); \ + return CMD_SUCCESS; \ + } \ + int format = !*ep ? OSPF6_AREA_FMT_DECIMAL \ + : OSPF6_AREA_FMT_DOTTEDQUAD; \ + oa = ospf6_area_lookup(area_id, ospf6); \ + if (oa == NULL) \ + oa = ospf6_area_create(area_id, ospf6, format); \ } - } - else - vty_out (vty, "SPF has not been run\n"); -} - - -#define OSPF6_CMD_AREA_GET(str, oa) \ -{ \ - char *ep; \ - u_int32_t area_id = htonl (strtoul (str, &ep, 10)); \ - if (*ep && inet_pton (AF_INET, str, &area_id) != 1) \ - { \ - vty_out (vty, "Malformed Area-ID: %s\n", str); \ - return CMD_SUCCESS; \ - } \ - int format = !*ep ? OSPF6_AREA_FMT_DECIMAL : \ - OSPF6_AREA_FMT_DOTTEDQUAD; \ - oa = ospf6_area_lookup (area_id, ospf6); \ - if (oa == NULL) \ - oa = ospf6_area_create (area_id, ospf6, format); \ -} DEFUN (area_range, area_range_cmd, @@ -440,66 +401,58 @@ DEFUN (area_range, "User specified metric for this range\n" "Advertised metric for this range\n") { - int idx_ipv4 = 1; - int idx_ipv6_prefixlen = 3; - int idx_type = 4; - int ret; - struct ospf6_area *oa; - struct prefix prefix; - struct ospf6_route *range; - u_int32_t cost = OSPF_AREA_RANGE_COST_UNSPEC; - - OSPF6_CMD_AREA_GET (argv[idx_ipv4]->arg, oa); - - ret = str2prefix (argv[idx_ipv6_prefixlen]->arg, &prefix); - if (ret != 1 || prefix.family != AF_INET6) - { - vty_out (vty, "Malformed argument: %s\n", argv[idx_ipv6_prefixlen]->arg); - return CMD_SUCCESS; - } - - range = ospf6_route_lookup (&prefix, oa->range_table); - if (range == NULL) - { - range = ospf6_route_create (); - range->type = OSPF6_DEST_TYPE_RANGE; - range->prefix = prefix; - range->path.area_id = oa->area_id; - range->path.cost = OSPF_AREA_RANGE_COST_UNSPEC; - } - - if (argc > idx_type) - { - if (strmatch (argv[idx_type]->text, "not-advertise")) - { - SET_FLAG (range->flag, OSPF6_ROUTE_DO_NOT_ADVERTISE); + int idx_ipv4 = 1; + int idx_ipv6_prefixlen = 3; + int idx_type = 4; + int ret; + struct ospf6_area *oa; + struct prefix prefix; + struct ospf6_route *range; + u_int32_t cost = OSPF_AREA_RANGE_COST_UNSPEC; + + OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, oa); + + ret = str2prefix(argv[idx_ipv6_prefixlen]->arg, &prefix); + if (ret != 1 || prefix.family != AF_INET6) { + vty_out(vty, "Malformed argument: %s\n", + argv[idx_ipv6_prefixlen]->arg); + return CMD_SUCCESS; } - else if (strmatch (argv[idx_type]->text, "advertise")) - { - UNSET_FLAG (range->flag, OSPF6_ROUTE_DO_NOT_ADVERTISE); + + range = ospf6_route_lookup(&prefix, oa->range_table); + if (range == NULL) { + range = ospf6_route_create(); + range->type = OSPF6_DEST_TYPE_RANGE; + range->prefix = prefix; + range->path.area_id = oa->area_id; + range->path.cost = OSPF_AREA_RANGE_COST_UNSPEC; } - else - { - cost = strtoul(argv[5]->arg, NULL, 10); - UNSET_FLAG (range->flag, OSPF6_ROUTE_DO_NOT_ADVERTISE); + + if (argc > idx_type) { + if (strmatch(argv[idx_type]->text, "not-advertise")) { + SET_FLAG(range->flag, OSPF6_ROUTE_DO_NOT_ADVERTISE); + } else if (strmatch(argv[idx_type]->text, "advertise")) { + UNSET_FLAG(range->flag, OSPF6_ROUTE_DO_NOT_ADVERTISE); + } else { + cost = strtoul(argv[5]->arg, NULL, 10); + UNSET_FLAG(range->flag, OSPF6_ROUTE_DO_NOT_ADVERTISE); + } } - } - range->path.u.cost_config = cost; + range->path.u.cost_config = cost; - zlog_debug ("%s: for prefix %s, flag = %x\n", __func__, argv[idx_ipv6_prefixlen]->arg, range->flag); - if (range->rnode == NULL) - { - ospf6_route_add (range, oa->range_table); - } + zlog_debug("%s: for prefix %s, flag = %x\n", __func__, + argv[idx_ipv6_prefixlen]->arg, range->flag); + if (range->rnode == NULL) { + ospf6_route_add(range, oa->range_table); + } - if (ospf6_is_router_abr (ospf6)) - { - /* Redo summaries if required */ - ospf6_abr_prefix_resummarize (ospf6); - } + if (ospf6_is_router_abr(ospf6)) { + /* Redo summaries if required */ + ospf6_abr_prefix_resummarize(ospf6); + } - return CMD_SUCCESS; + return CMD_SUCCESS; } DEFUN (no_area_range, @@ -516,96 +469,91 @@ DEFUN (no_area_range, "User specified metric for this range\n" "Advertised metric for this range\n") { - int idx_ipv4 = 2; - int idx_ipv6 = 4; - int ret; - struct ospf6_area *oa; - struct prefix prefix; - struct ospf6_route *range, *route; - - OSPF6_CMD_AREA_GET (argv[idx_ipv4]->arg, oa); - - ret = str2prefix (argv[idx_ipv6]->arg, &prefix); - if (ret != 1 || prefix.family != AF_INET6) - { - vty_out (vty, "Malformed argument: %s\n", argv[idx_ipv6]->arg); - return CMD_SUCCESS; - } - - range = ospf6_route_lookup (&prefix, oa->range_table); - if (range == NULL) - { - vty_out (vty, "Range %s does not exists.\n", argv[idx_ipv6]->arg); - return CMD_SUCCESS; - } - - if (ospf6_is_router_abr(oa->ospf6)) - { - /* Blow away the aggregated LSA and route */ - SET_FLAG (range->flag, OSPF6_ROUTE_REMOVE); - - /* Redo summaries if required */ - for (route = ospf6_route_head (ospf6->route_table); route; - route = ospf6_route_next (route)) - ospf6_abr_originate_summary(route); - - /* purge the old aggregated summary LSA */ - ospf6_abr_originate_summary(range); - } - ospf6_route_remove (range, oa->range_table); - - return CMD_SUCCESS; -} + int idx_ipv4 = 2; + int idx_ipv6 = 4; + int ret; + struct ospf6_area *oa; + struct prefix prefix; + struct ospf6_route *range, *route; -void -ospf6_area_config_write (struct vty *vty) -{ - struct listnode *node; - struct ospf6_area *oa; - struct ospf6_route *range; - char buf[PREFIX2STR_BUFFER]; - - for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa)) - { - for (range = ospf6_route_head (oa->range_table); range; - range = ospf6_route_next (range)) - { - prefix2str (&range->prefix, buf, sizeof (buf)); - vty_out (vty, " area %s range %s", oa->name, buf); - - if (CHECK_FLAG (range->flag, OSPF6_ROUTE_DO_NOT_ADVERTISE)) - { - vty_out (vty, " not-advertise"); - } - else - { - // "advertise" is the default so we do not display it - if (range->path.u.cost_config != OSPF_AREA_RANGE_COST_UNSPEC) - vty_out (vty, " cost %d", range->path.u.cost_config); - } - vty_out (vty, "\n"); - - } - if (IS_AREA_STUB (oa)) - { - if (oa->no_summary) - vty_out (vty, " area %s stub no-summary\n", oa->name); - else - vty_out (vty, " area %s stub\n", oa->name); + OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, oa); + + ret = str2prefix(argv[idx_ipv6]->arg, &prefix); + if (ret != 1 || prefix.family != AF_INET6) { + vty_out(vty, "Malformed argument: %s\n", argv[idx_ipv6]->arg); + return CMD_SUCCESS; + } + + range = ospf6_route_lookup(&prefix, oa->range_table); + if (range == NULL) { + vty_out(vty, "Range %s does not exists.\n", + argv[idx_ipv6]->arg); + return CMD_SUCCESS; + } + + if (ospf6_is_router_abr(oa->ospf6)) { + /* Blow away the aggregated LSA and route */ + SET_FLAG(range->flag, OSPF6_ROUTE_REMOVE); + + /* Redo summaries if required */ + for (route = ospf6_route_head(ospf6->route_table); route; + route = ospf6_route_next(route)) + ospf6_abr_originate_summary(route); + + /* purge the old aggregated summary LSA */ + ospf6_abr_originate_summary(range); + } + ospf6_route_remove(range, oa->range_table); + + return CMD_SUCCESS; +} + +void ospf6_area_config_write(struct vty *vty) +{ + struct listnode *node; + struct ospf6_area *oa; + struct ospf6_route *range; + char buf[PREFIX2STR_BUFFER]; + + for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, node, oa)) { + for (range = ospf6_route_head(oa->range_table); range; + range = ospf6_route_next(range)) { + prefix2str(&range->prefix, buf, sizeof(buf)); + vty_out(vty, " area %s range %s", oa->name, buf); + + if (CHECK_FLAG(range->flag, + OSPF6_ROUTE_DO_NOT_ADVERTISE)) { + vty_out(vty, " not-advertise"); + } else { + // "advertise" is the default so we do not + // display it + if (range->path.u.cost_config + != OSPF_AREA_RANGE_COST_UNSPEC) + vty_out(vty, " cost %d", + range->path.u.cost_config); + } + vty_out(vty, "\n"); + } + if (IS_AREA_STUB(oa)) { + if (oa->no_summary) + vty_out(vty, " area %s stub no-summary\n", + oa->name); + else + vty_out(vty, " area %s stub\n", oa->name); + } + if (PREFIX_NAME_IN(oa)) + vty_out(vty, " area %s filter-list prefix %s in\n", + oa->name, PREFIX_NAME_IN(oa)); + if (PREFIX_NAME_OUT(oa)) + vty_out(vty, " area %s filter-list prefix %s out\n", + oa->name, PREFIX_NAME_OUT(oa)); + if (IMPORT_NAME(oa)) + vty_out(vty, " area %s import-list %s\n", oa->name, + IMPORT_NAME(oa)); + if (EXPORT_NAME(oa)) + vty_out(vty, " area %s export-list %s\n", oa->name, + EXPORT_NAME(oa)); } - if (PREFIX_NAME_IN (oa)) - vty_out (vty, " area %s filter-list prefix %s in\n", - oa->name, PREFIX_NAME_IN (oa)); - if (PREFIX_NAME_OUT (oa)) - vty_out (vty, " area %s filter-list prefix %s out\n", - oa->name, PREFIX_NAME_OUT (oa)); - if (IMPORT_NAME (oa)) - vty_out (vty, " area %s import-list %s\n", - oa->name, IMPORT_NAME (oa)); - if (EXPORT_NAME (oa)) - vty_out (vty, " area %s export-list %s\n", - oa->name, EXPORT_NAME (oa)); - } } DEFUN (area_filter_list, @@ -619,38 +567,35 @@ DEFUN (area_filter_list, "Filter networks sent to this area\n" "Filter networks sent from this area\n") { - char *inout = argv[argc - 1]->text; - char *areaid = argv[1]->arg; - char *plistname = argv[4]->arg; - - struct ospf6_area *area; - struct prefix_list *plist; - - OSPF6_CMD_AREA_GET (areaid, area); - - plist = prefix_list_lookup (AFI_IP6, plistname); - if (strmatch (inout, "in")) - { - PREFIX_LIST_IN (area) = plist; - if (PREFIX_NAME_IN (area)) - free (PREFIX_NAME_IN (area)); - - PREFIX_NAME_IN (area) = strdup (plistname); - ospf6_abr_reimport (area); - } - else - { - PREFIX_LIST_OUT (area) = plist; - if (PREFIX_NAME_OUT (area)) - free (PREFIX_NAME_OUT (area)); - - PREFIX_NAME_OUT (area) = strdup (plistname); - ospf6_abr_enable_area (area); - } - - return CMD_SUCCESS; + char *inout = argv[argc - 1]->text; + char *areaid = argv[1]->arg; + char *plistname = argv[4]->arg; + + struct ospf6_area *area; + struct prefix_list *plist; + + OSPF6_CMD_AREA_GET(areaid, area); + + plist = prefix_list_lookup(AFI_IP6, plistname); + if (strmatch(inout, "in")) { + PREFIX_LIST_IN(area) = plist; + if (PREFIX_NAME_IN(area)) + free(PREFIX_NAME_IN(area)); + + PREFIX_NAME_IN(area) = strdup(plistname); + ospf6_abr_reimport(area); + } else { + PREFIX_LIST_OUT(area) = plist; + if (PREFIX_NAME_OUT(area)) + free(PREFIX_NAME_OUT(area)); + + PREFIX_NAME_OUT(area) = strdup(plistname); + ospf6_abr_enable_area(area); + } + + return CMD_SUCCESS; } - + DEFUN (no_area_filter_list, no_area_filter_list_cmd, "no area A.B.C.D filter-list prefix WORD <in|out>", @@ -663,42 +608,39 @@ DEFUN (no_area_filter_list, "Filter networks sent to this area\n" "Filter networks sent from this area\n") { - char *inout = argv[argc - 1]->text; - char *areaid = argv[2]->arg; - char *plistname = argv[5]->arg; - - struct ospf6_area *area; - - OSPF6_CMD_AREA_GET (areaid, area); - - if (strmatch (inout, "in")) - { - if (PREFIX_NAME_IN (area)) - if (!strmatch (PREFIX_NAME_IN (area), plistname)) - return CMD_SUCCESS; - - PREFIX_LIST_IN (area) = NULL; - if (PREFIX_NAME_IN (area)) - free (PREFIX_NAME_IN (area)); - - PREFIX_NAME_IN (area) = NULL; - ospf6_abr_reimport (area); - } - else - { - if (PREFIX_NAME_OUT (area)) - if (!strmatch (PREFIX_NAME_OUT (area), plistname)) - return CMD_SUCCESS; - - PREFIX_LIST_OUT (area) = NULL; - if (PREFIX_NAME_OUT (area)) - free (PREFIX_NAME_OUT (area)); - - PREFIX_NAME_OUT (area) = NULL; - ospf6_abr_enable_area (area); - } - - return CMD_SUCCESS; + char *inout = argv[argc - 1]->text; + char *areaid = argv[2]->arg; + char *plistname = argv[5]->arg; + + struct ospf6_area *area; + + OSPF6_CMD_AREA_GET(areaid, area); + + if (strmatch(inout, "in")) { + if (PREFIX_NAME_IN(area)) + if (!strmatch(PREFIX_NAME_IN(area), plistname)) + return CMD_SUCCESS; + + PREFIX_LIST_IN(area) = NULL; + if (PREFIX_NAME_IN(area)) + free(PREFIX_NAME_IN(area)); + + PREFIX_NAME_IN(area) = NULL; + ospf6_abr_reimport(area); + } else { + if (PREFIX_NAME_OUT(area)) + if (!strmatch(PREFIX_NAME_OUT(area), plistname)) + return CMD_SUCCESS; + + PREFIX_LIST_OUT(area) = NULL; + if (PREFIX_NAME_OUT(area)) + free(PREFIX_NAME_OUT(area)); + + PREFIX_NAME_OUT(area) = NULL; + ospf6_abr_enable_area(area); + } + + return CMD_SUCCESS; } DEFUN (area_import_list, @@ -709,24 +651,24 @@ DEFUN (area_import_list, "Set the filter for networks from other areas announced to the specified one\n" "Name of the acess-list\n") { - int idx_ipv4 = 1; - int idx_name = 3; - struct ospf6_area *area; - struct access_list *list; + int idx_ipv4 = 1; + int idx_name = 3; + struct ospf6_area *area; + struct access_list *list; - OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, area); + OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, area); - list = access_list_lookup (AFI_IP6, argv[idx_name]->arg); + list = access_list_lookup(AFI_IP6, argv[idx_name]->arg); - IMPORT_LIST (area) = list; + IMPORT_LIST(area) = list; - if (IMPORT_NAME (area)) - free (IMPORT_NAME (area)); + if (IMPORT_NAME(area)) + free(IMPORT_NAME(area)); - IMPORT_NAME (area) = strdup (argv[idx_name]->arg); - ospf6_abr_reimport (area); + IMPORT_NAME(area) = strdup(argv[idx_name]->arg); + ospf6_abr_reimport(area); - return CMD_SUCCESS; + return CMD_SUCCESS; } DEFUN (no_area_import_list, @@ -738,20 +680,20 @@ DEFUN (no_area_import_list, "Unset the filter for networks announced to other areas\n" "Name of the access-list\n") { - int idx_ipv4 = 2; - struct ospf6_area *area; + int idx_ipv4 = 2; + struct ospf6_area *area; - OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, area); + OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, area); - IMPORT_LIST (area) = 0; + IMPORT_LIST(area) = 0; - if (IMPORT_NAME (area)) - free (IMPORT_NAME (area)); + if (IMPORT_NAME(area)) + free(IMPORT_NAME(area)); - IMPORT_NAME (area) = NULL; - ospf6_abr_reimport (area); + IMPORT_NAME(area) = NULL; + ospf6_abr_reimport(area); - return CMD_SUCCESS; + return CMD_SUCCESS; } DEFUN (area_export_list, @@ -762,24 +704,24 @@ DEFUN (area_export_list, "Set the filter for networks announced to other areas\n" "Name of the acess-list\n") { - int idx_ipv4 = 1; - int idx_name = 3; - struct ospf6_area *area; - struct access_list *list; + int idx_ipv4 = 1; + int idx_name = 3; + struct ospf6_area *area; + struct access_list *list; - OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, area); + OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, area); - list = access_list_lookup (AFI_IP6, argv[idx_name]->arg); + list = access_list_lookup(AFI_IP6, argv[idx_name]->arg); - EXPORT_LIST (area) = list; + EXPORT_LIST(area) = list; - if (EXPORT_NAME (area)) - free (EXPORT_NAME (area)); + if (EXPORT_NAME(area)) + free(EXPORT_NAME(area)); - EXPORT_NAME (area) = strdup (argv[idx_name]->arg); - ospf6_abr_enable_area (area); + EXPORT_NAME(area) = strdup(argv[idx_name]->arg); + ospf6_abr_enable_area(area); - return CMD_SUCCESS; + return CMD_SUCCESS; } DEFUN (no_area_export_list, @@ -791,20 +733,20 @@ DEFUN (no_area_export_list, "Unset the filter for networks announced to other areas\n" "Name of the access-list\n") { - int idx_ipv4 = 2; - struct ospf6_area *area; + int idx_ipv4 = 2; + struct ospf6_area *area; - OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, area); + OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, area); - EXPORT_LIST (area) = 0; + EXPORT_LIST(area) = 0; - if (EXPORT_NAME (area)) - free (EXPORT_NAME (area)); + if (EXPORT_NAME(area)) + free(EXPORT_NAME(area)); - EXPORT_NAME (area) = NULL; - ospf6_abr_enable_area (area); + EXPORT_NAME(area) = NULL; + ospf6_abr_enable_area(area); - return CMD_SUCCESS; + return CMD_SUCCESS; } DEFUN (show_ipv6_ospf6_spf_tree, @@ -816,30 +758,28 @@ DEFUN (show_ipv6_ospf6_spf_tree, "Shortest Path First caculation\n" "Show SPF tree\n") { - struct listnode *node; - struct ospf6_area *oa; - struct ospf6_vertex *root; - struct ospf6_route *route; - struct prefix prefix; - - OSPF6_CMD_CHECK_RUNNING (); - - ospf6_linkstate_prefix (ospf6->router_id, htonl (0), &prefix); - - for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa)) - { - route = ospf6_route_lookup (&prefix, oa->spf_table); - if (route == NULL) - { - vty_out (vty, "LS entry for root not found in area %s\n", - oa->name); - continue; - } - root = (struct ospf6_vertex *) route->route_option; - ospf6_spf_display_subtree (vty, "", 0, root); - } - - return CMD_SUCCESS; + struct listnode *node; + struct ospf6_area *oa; + struct ospf6_vertex *root; + struct ospf6_route *route; + struct prefix prefix; + + OSPF6_CMD_CHECK_RUNNING(); + + ospf6_linkstate_prefix(ospf6->router_id, htonl(0), &prefix); + + for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, node, oa)) { + route = ospf6_route_lookup(&prefix, oa->spf_table); + if (route == NULL) { + vty_out(vty, "LS entry for root not found in area %s\n", + oa->name); + continue; + } + root = (struct ospf6_vertex *)route->route_option; + ospf6_spf_display_subtree(vty, "", 0, root); + } + + return CMD_SUCCESS; } DEFUN (show_ipv6_ospf6_area_spf_tree, @@ -853,40 +793,37 @@ DEFUN (show_ipv6_ospf6_area_spf_tree, "Shortest Path First caculation\n" "Show SPF tree\n") { - int idx_ipv4 = 4; - u_int32_t area_id; - struct ospf6_area *oa; - struct ospf6_vertex *root; - struct ospf6_route *route; - struct prefix prefix; - - OSPF6_CMD_CHECK_RUNNING (); - - ospf6_linkstate_prefix (ospf6->router_id, htonl (0), &prefix); - - if (inet_pton (AF_INET, argv[idx_ipv4]->arg, &area_id) != 1) - { - vty_out (vty, "Malformed Area-ID: %s\n", argv[idx_ipv4]->arg); - return CMD_SUCCESS; - } - oa = ospf6_area_lookup (area_id, ospf6); - if (oa == NULL) - { - vty_out (vty, "No such Area: %s\n", argv[idx_ipv4]->arg); - return CMD_SUCCESS; - } - - route = ospf6_route_lookup (&prefix, oa->spf_table); - if (route == NULL) - { - vty_out (vty, "LS entry for root not found in area %s\n", - oa->name); - return CMD_SUCCESS; - } - root = (struct ospf6_vertex *) route->route_option; - ospf6_spf_display_subtree (vty, "", 0, root); - - return CMD_SUCCESS; + int idx_ipv4 = 4; + u_int32_t area_id; + struct ospf6_area *oa; + struct ospf6_vertex *root; + struct ospf6_route *route; + struct prefix prefix; + + OSPF6_CMD_CHECK_RUNNING(); + + ospf6_linkstate_prefix(ospf6->router_id, htonl(0), &prefix); + + if (inet_pton(AF_INET, argv[idx_ipv4]->arg, &area_id) != 1) { + vty_out(vty, "Malformed Area-ID: %s\n", argv[idx_ipv4]->arg); + return CMD_SUCCESS; + } + oa = ospf6_area_lookup(area_id, ospf6); + if (oa == NULL) { + vty_out(vty, "No such Area: %s\n", argv[idx_ipv4]->arg); + return CMD_SUCCESS; + } + + route = ospf6_route_lookup(&prefix, oa->spf_table); + if (route == NULL) { + vty_out(vty, "LS entry for root not found in area %s\n", + oa->name); + return CMD_SUCCESS; + } + root = (struct ospf6_vertex *)route->route_option; + ospf6_spf_display_subtree(vty, "", 0, root); + + return CMD_SUCCESS; } DEFUN (show_ipv6_ospf6_simulate_spf_tree_root, @@ -901,56 +838,53 @@ DEFUN (show_ipv6_ospf6_simulate_spf_tree_root, "OSPF6 area parameters\n" OSPF6_AREA_ID_STR) { - int idx_ipv4 = 5; - int idx_ipv4_2 = 7; - u_int32_t area_id; - struct ospf6_area *oa; - struct ospf6_vertex *root; - struct ospf6_route *route; - struct prefix prefix; - u_int32_t router_id; - struct ospf6_route_table *spf_table; - unsigned char tmp_debug_ospf6_spf = 0; - - OSPF6_CMD_CHECK_RUNNING (); - - inet_pton (AF_INET, argv[idx_ipv4]->arg, &router_id); - ospf6_linkstate_prefix (router_id, htonl (0), &prefix); - - if (inet_pton (AF_INET, argv[idx_ipv4_2]->arg, &area_id) != 1) - { - vty_out (vty, "Malformed Area-ID: %s\n", argv[idx_ipv4_2]->arg); - return CMD_SUCCESS; - } - oa = ospf6_area_lookup (area_id, ospf6); - if (oa == NULL) - { - vty_out (vty, "No such Area: %s\n", argv[idx_ipv4_2]->arg); - return CMD_SUCCESS; - } - - tmp_debug_ospf6_spf = conf_debug_ospf6_spf; - conf_debug_ospf6_spf = 0; - - spf_table = OSPF6_ROUTE_TABLE_CREATE (NONE, SPF_RESULTS); - ospf6_spf_calculation (router_id, spf_table, oa); - - conf_debug_ospf6_spf = tmp_debug_ospf6_spf; - - route = ospf6_route_lookup (&prefix, spf_table); - if (route == NULL) - { - ospf6_spf_table_finish (spf_table); - ospf6_route_table_delete (spf_table); - return CMD_SUCCESS; - } - root = (struct ospf6_vertex *) route->route_option; - ospf6_spf_display_subtree (vty, "", 0, root); - - ospf6_spf_table_finish (spf_table); - ospf6_route_table_delete (spf_table); - - return CMD_SUCCESS; + int idx_ipv4 = 5; + int idx_ipv4_2 = 7; + u_int32_t area_id; + struct ospf6_area *oa; + struct ospf6_vertex *root; + struct ospf6_route *route; + struct prefix prefix; + u_int32_t router_id; + struct ospf6_route_table *spf_table; + unsigned char tmp_debug_ospf6_spf = 0; + + OSPF6_CMD_CHECK_RUNNING(); + + inet_pton(AF_INET, argv[idx_ipv4]->arg, &router_id); + ospf6_linkstate_prefix(router_id, htonl(0), &prefix); + + if (inet_pton(AF_INET, argv[idx_ipv4_2]->arg, &area_id) != 1) { + vty_out(vty, "Malformed Area-ID: %s\n", argv[idx_ipv4_2]->arg); + return CMD_SUCCESS; + } + oa = ospf6_area_lookup(area_id, ospf6); + if (oa == NULL) { + vty_out(vty, "No such Area: %s\n", argv[idx_ipv4_2]->arg); + return CMD_SUCCESS; + } + + tmp_debug_ospf6_spf = conf_debug_ospf6_spf; + conf_debug_ospf6_spf = 0; + + spf_table = OSPF6_ROUTE_TABLE_CREATE(NONE, SPF_RESULTS); + ospf6_spf_calculation(router_id, spf_table, oa); + + conf_debug_ospf6_spf = tmp_debug_ospf6_spf; + + route = ospf6_route_lookup(&prefix, spf_table); + if (route == NULL) { + ospf6_spf_table_finish(spf_table); + ospf6_route_table_delete(spf_table); + return CMD_SUCCESS; + } + root = (struct ospf6_vertex *)route->route_option; + ospf6_spf_display_subtree(vty, "", 0, root); + + ospf6_spf_table_finish(spf_table); + ospf6_route_table_delete(spf_table); + + return CMD_SUCCESS; } DEFUN (ospf6_area_stub, @@ -961,20 +895,20 @@ DEFUN (ospf6_area_stub, "OSPF6 area ID as a decimal value\n" "Configure OSPF6 area as stub\n") { - int idx_ipv4_number = 1; - struct ospf6_area *area; + int idx_ipv4_number = 1; + struct ospf6_area *area; - OSPF6_CMD_AREA_GET(argv[idx_ipv4_number]->arg, area); + OSPF6_CMD_AREA_GET(argv[idx_ipv4_number]->arg, area); - if (!ospf6_area_stub_set (ospf6, area)) - { - vty_out (vty,"First deconfigure all virtual link through this area\n"); - return CMD_WARNING_CONFIG_FAILED; - } + if (!ospf6_area_stub_set(ospf6, area)) { + vty_out(vty, + "First deconfigure all virtual link through this area\n"); + return CMD_WARNING_CONFIG_FAILED; + } - ospf6_area_no_summary_unset (ospf6, area); + ospf6_area_no_summary_unset(ospf6, area); - return CMD_SUCCESS; + return CMD_SUCCESS; } DEFUN (ospf6_area_stub_no_summary, @@ -986,20 +920,20 @@ DEFUN (ospf6_area_stub_no_summary, "Configure OSPF6 area as stub\n" "Do not inject inter-area routes into stub\n") { - int idx_ipv4_number = 1; - struct ospf6_area *area; + int idx_ipv4_number = 1; + struct ospf6_area *area; - OSPF6_CMD_AREA_GET(argv[idx_ipv4_number]->arg, area); + OSPF6_CMD_AREA_GET(argv[idx_ipv4_number]->arg, area); - if (!ospf6_area_stub_set (ospf6, area)) - { - vty_out (vty,"First deconfigure all virtual link through this area\n"); - return CMD_WARNING_CONFIG_FAILED; - } + if (!ospf6_area_stub_set(ospf6, area)) { + vty_out(vty, + "First deconfigure all virtual link through this area\n"); + return CMD_WARNING_CONFIG_FAILED; + } - ospf6_area_no_summary_set (ospf6, area); + ospf6_area_no_summary_set(ospf6, area); - return CMD_SUCCESS; + return CMD_SUCCESS; } DEFUN (no_ospf6_area_stub, @@ -1011,15 +945,15 @@ DEFUN (no_ospf6_area_stub, "OSPF6 area ID as a decimal value\n" "Configure OSPF6 area as stub\n") { - int idx_ipv4_number = 2; - struct ospf6_area *area; + int idx_ipv4_number = 2; + struct ospf6_area *area; - OSPF6_CMD_AREA_GET(argv[idx_ipv4_number]->arg, area); + OSPF6_CMD_AREA_GET(argv[idx_ipv4_number]->arg, area); - ospf6_area_stub_unset (ospf6, area); - ospf6_area_no_summary_unset (ospf6, area); + ospf6_area_stub_unset(ospf6, area); + ospf6_area_no_summary_unset(ospf6, area); - return CMD_SUCCESS; + return CMD_SUCCESS; } DEFUN (no_ospf6_area_stub_no_summary, @@ -1032,40 +966,36 @@ DEFUN (no_ospf6_area_stub_no_summary, "Configure OSPF6 area as stub\n" "Do not inject inter-area routes into area\n") { - int idx_ipv4_number = 2; - struct ospf6_area *area; + int idx_ipv4_number = 2; + struct ospf6_area *area; - OSPF6_CMD_AREA_GET(argv[idx_ipv4_number]->arg, area); + OSPF6_CMD_AREA_GET(argv[idx_ipv4_number]->arg, area); - ospf6_area_stub_unset (ospf6, area); - ospf6_area_no_summary_unset (ospf6, area); + ospf6_area_stub_unset(ospf6, area); + ospf6_area_no_summary_unset(ospf6, area); - return CMD_SUCCESS; + return CMD_SUCCESS; } -void -ospf6_area_init (void) +void ospf6_area_init(void) { - install_element (VIEW_NODE, &show_ipv6_ospf6_spf_tree_cmd); - install_element (VIEW_NODE, &show_ipv6_ospf6_area_spf_tree_cmd); - install_element (VIEW_NODE, &show_ipv6_ospf6_simulate_spf_tree_root_cmd); - - install_element (OSPF6_NODE, &area_range_cmd); - install_element (OSPF6_NODE, &no_area_range_cmd); - install_element (OSPF6_NODE, &ospf6_area_stub_no_summary_cmd); - install_element (OSPF6_NODE, &ospf6_area_stub_cmd); - install_element (OSPF6_NODE, &no_ospf6_area_stub_no_summary_cmd); - install_element (OSPF6_NODE, &no_ospf6_area_stub_cmd); + install_element(VIEW_NODE, &show_ipv6_ospf6_spf_tree_cmd); + install_element(VIEW_NODE, &show_ipv6_ospf6_area_spf_tree_cmd); + install_element(VIEW_NODE, &show_ipv6_ospf6_simulate_spf_tree_root_cmd); + install_element(OSPF6_NODE, &area_range_cmd); + install_element(OSPF6_NODE, &no_area_range_cmd); + install_element(OSPF6_NODE, &ospf6_area_stub_no_summary_cmd); + install_element(OSPF6_NODE, &ospf6_area_stub_cmd); + install_element(OSPF6_NODE, &no_ospf6_area_stub_no_summary_cmd); + install_element(OSPF6_NODE, &no_ospf6_area_stub_cmd); - install_element (OSPF6_NODE, &area_import_list_cmd); - install_element (OSPF6_NODE, &no_area_import_list_cmd); - install_element (OSPF6_NODE, &area_export_list_cmd); - install_element (OSPF6_NODE, &no_area_export_list_cmd); - install_element (OSPF6_NODE, &area_filter_list_cmd); - install_element (OSPF6_NODE, &no_area_filter_list_cmd); + install_element(OSPF6_NODE, &area_import_list_cmd); + install_element(OSPF6_NODE, &no_area_import_list_cmd); + install_element(OSPF6_NODE, &area_export_list_cmd); + install_element(OSPF6_NODE, &no_area_export_list_cmd); + install_element(OSPF6_NODE, &area_filter_list_cmd); + install_element(OSPF6_NODE, &no_area_filter_list_cmd); } - - |