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_lsdb.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_lsdb.c')
-rw-r--r-- | ospf6d/ospf6_lsdb.c | 694 |
1 files changed, 325 insertions, 369 deletions
diff --git a/ospf6d/ospf6_lsdb.c b/ospf6d/ospf6_lsdb.c index ed0180065..23a33d312 100644 --- a/ospf6d/ospf6_lsdb.c +++ b/ospf6d/ospf6_lsdb.c @@ -34,454 +34,410 @@ #include "ospf6d.h" #include "bitfield.h" -struct ospf6_lsdb * -ospf6_lsdb_create (void *data) +struct ospf6_lsdb *ospf6_lsdb_create(void *data) { - struct ospf6_lsdb *lsdb; - - lsdb = XCALLOC (MTYPE_OSPF6_LSDB, sizeof (struct ospf6_lsdb)); - if (lsdb == NULL) - { - zlog_warn ("Can't malloc lsdb"); - return NULL; - } - memset (lsdb, 0, sizeof (struct ospf6_lsdb)); - - lsdb->data = data; - lsdb->table = route_table_init (); - return lsdb; + struct ospf6_lsdb *lsdb; + + lsdb = XCALLOC(MTYPE_OSPF6_LSDB, sizeof(struct ospf6_lsdb)); + if (lsdb == NULL) { + zlog_warn("Can't malloc lsdb"); + return NULL; + } + memset(lsdb, 0, sizeof(struct ospf6_lsdb)); + + lsdb->data = data; + lsdb->table = route_table_init(); + return lsdb; } -void -ospf6_lsdb_delete (struct ospf6_lsdb *lsdb) +void ospf6_lsdb_delete(struct ospf6_lsdb *lsdb) { - if (lsdb != NULL) - { - ospf6_lsdb_remove_all (lsdb); - route_table_finish (lsdb->table); - XFREE (MTYPE_OSPF6_LSDB, lsdb); - } + if (lsdb != NULL) { + ospf6_lsdb_remove_all(lsdb); + route_table_finish(lsdb->table); + XFREE(MTYPE_OSPF6_LSDB, lsdb); + } } -static void -ospf6_lsdb_set_key (struct prefix_ipv6 *key, const void *value, int len) +static void ospf6_lsdb_set_key(struct prefix_ipv6 *key, const void *value, + int len) { - assert (key->prefixlen % 8 == 0); + assert(key->prefixlen % 8 == 0); - memcpy ((caddr_t) &key->prefix + key->prefixlen / 8, - (caddr_t) value, len); - key->family = AF_INET6; - key->prefixlen += len * 8; + memcpy((caddr_t)&key->prefix + key->prefixlen / 8, (caddr_t)value, len); + key->family = AF_INET6; + key->prefixlen += len * 8; } #ifdef DEBUG -static void -_lsdb_count_assert (struct ospf6_lsdb *lsdb) +static void _lsdb_count_assert(struct ospf6_lsdb *lsdb) { - struct ospf6_lsa *debug; - unsigned int num = 0; - for (ALL_LSDB(lsdb, debug)) - num++; - - if (num == lsdb->count) - return; - - zlog_debug ("PANIC !! lsdb[%p]->count = %d, real = %d", - lsdb, lsdb->count, num); - for (ALL_LSDB(lsdb, debug)) - zlog_debug ("%p %p %s lsdb[%p]", debug->prev, debug->next, debug->name, - debug->lsdb); - zlog_debug ("DUMP END"); - - assert (num == lsdb->count); + struct ospf6_lsa *debug; + unsigned int num = 0; + for (ALL_LSDB(lsdb, debug)) + num++; + + if (num == lsdb->count) + return; + + zlog_debug("PANIC !! lsdb[%p]->count = %d, real = %d", lsdb, + lsdb->count, num); + for (ALL_LSDB(lsdb, debug)) + zlog_debug("%p %p %s lsdb[%p]", debug->prev, debug->next, + debug->name, debug->lsdb); + zlog_debug("DUMP END"); + + assert(num == lsdb->count); } #define ospf6_lsdb_count_assert(t) (_lsdb_count_assert (t)) -#else /*DEBUG*/ +#else /*DEBUG*/ #define ospf6_lsdb_count_assert(t) ((void) 0) #endif /*DEBUG*/ -void -ospf6_lsdb_add (struct ospf6_lsa *lsa, struct ospf6_lsdb *lsdb) +void ospf6_lsdb_add(struct ospf6_lsa *lsa, struct ospf6_lsdb *lsdb) { - struct prefix_ipv6 key; - struct route_node *current; - struct ospf6_lsa *old = NULL; - - memset (&key, 0, sizeof (key)); - ospf6_lsdb_set_key (&key, &lsa->header->type, sizeof (lsa->header->type)); - ospf6_lsdb_set_key (&key, &lsa->header->adv_router, - sizeof (lsa->header->adv_router)); - ospf6_lsdb_set_key (&key, &lsa->header->id, sizeof (lsa->header->id)); - - current = route_node_get (lsdb->table, (struct prefix *) &key); - old = current->info; - current->info = lsa; - lsa->rn = current; - ospf6_lsa_lock (lsa); - - if (!old) - { - lsdb->count++; - - if (OSPF6_LSA_IS_MAXAGE (lsa)) - { - if (lsdb->hook_remove) - (*lsdb->hook_remove) (lsa); + struct prefix_ipv6 key; + struct route_node *current; + struct ospf6_lsa *old = NULL; + + memset(&key, 0, sizeof(key)); + ospf6_lsdb_set_key(&key, &lsa->header->type, sizeof(lsa->header->type)); + ospf6_lsdb_set_key(&key, &lsa->header->adv_router, + sizeof(lsa->header->adv_router)); + ospf6_lsdb_set_key(&key, &lsa->header->id, sizeof(lsa->header->id)); + + current = route_node_get(lsdb->table, (struct prefix *)&key); + old = current->info; + current->info = lsa; + lsa->rn = current; + ospf6_lsa_lock(lsa); + + if (!old) { + lsdb->count++; + + if (OSPF6_LSA_IS_MAXAGE(lsa)) { + if (lsdb->hook_remove) + (*lsdb->hook_remove)(lsa); + } else { + if (lsdb->hook_add) + (*lsdb->hook_add)(lsa); + } + } else { + if (OSPF6_LSA_IS_CHANGED(old, lsa)) { + if (OSPF6_LSA_IS_MAXAGE(lsa)) { + if (lsdb->hook_remove) { + (*lsdb->hook_remove)(old); + (*lsdb->hook_remove)(lsa); + } + } else if (OSPF6_LSA_IS_MAXAGE(old)) { + if (lsdb->hook_add) + (*lsdb->hook_add)(lsa); + } else { + if (lsdb->hook_remove) + (*lsdb->hook_remove)(old); + if (lsdb->hook_add) + (*lsdb->hook_add)(lsa); + } + } + ospf6_lsa_unlock(old); } - else - { - if (lsdb->hook_add) - (*lsdb->hook_add) (lsa); - } - } - else - { - if (OSPF6_LSA_IS_CHANGED (old, lsa)) - { - if (OSPF6_LSA_IS_MAXAGE (lsa)) - { - if (lsdb->hook_remove) - { - (*lsdb->hook_remove) (old); - (*lsdb->hook_remove) (lsa); - } - } - else if (OSPF6_LSA_IS_MAXAGE (old)) - { - if (lsdb->hook_add) - (*lsdb->hook_add) (lsa); - } - else - { - if (lsdb->hook_remove) - (*lsdb->hook_remove) (old); - if (lsdb->hook_add) - (*lsdb->hook_add) (lsa); - } - } - ospf6_lsa_unlock (old); - } - - ospf6_lsdb_count_assert (lsdb); + + ospf6_lsdb_count_assert(lsdb); } -void -ospf6_lsdb_remove (struct ospf6_lsa *lsa, struct ospf6_lsdb *lsdb) +void ospf6_lsdb_remove(struct ospf6_lsa *lsa, struct ospf6_lsdb *lsdb) { - struct route_node *node; - struct prefix_ipv6 key; + struct route_node *node; + struct prefix_ipv6 key; - memset (&key, 0, sizeof (key)); - ospf6_lsdb_set_key (&key, &lsa->header->type, sizeof (lsa->header->type)); - ospf6_lsdb_set_key (&key, &lsa->header->adv_router, - sizeof (lsa->header->adv_router)); - ospf6_lsdb_set_key (&key, &lsa->header->id, sizeof (lsa->header->id)); + memset(&key, 0, sizeof(key)); + ospf6_lsdb_set_key(&key, &lsa->header->type, sizeof(lsa->header->type)); + ospf6_lsdb_set_key(&key, &lsa->header->adv_router, + sizeof(lsa->header->adv_router)); + ospf6_lsdb_set_key(&key, &lsa->header->id, sizeof(lsa->header->id)); - node = route_node_lookup (lsdb->table, (struct prefix *) &key); - assert (node && node->info == lsa); + node = route_node_lookup(lsdb->table, (struct prefix *)&key); + assert(node && node->info == lsa); - node->info = NULL; - lsdb->count--; + node->info = NULL; + lsdb->count--; - if (lsdb->hook_remove) - (*lsdb->hook_remove) (lsa); + if (lsdb->hook_remove) + (*lsdb->hook_remove)(lsa); - route_unlock_node (node); /* to free the lookup lock */ - route_unlock_node (node); /* to free the original lock */ - ospf6_lsa_unlock (lsa); + route_unlock_node(node); /* to free the lookup lock */ + route_unlock_node(node); /* to free the original lock */ + ospf6_lsa_unlock(lsa); - ospf6_lsdb_count_assert (lsdb); + ospf6_lsdb_count_assert(lsdb); } -struct ospf6_lsa * -ospf6_lsdb_lookup (u_int16_t type, u_int32_t id, u_int32_t adv_router, - struct ospf6_lsdb *lsdb) +struct ospf6_lsa *ospf6_lsdb_lookup(u_int16_t type, u_int32_t id, + u_int32_t adv_router, + struct ospf6_lsdb *lsdb) { - struct route_node *node; - struct prefix_ipv6 key; + struct route_node *node; + struct prefix_ipv6 key; - if (lsdb == NULL) - return NULL; + if (lsdb == NULL) + return NULL; - memset (&key, 0, sizeof (key)); - ospf6_lsdb_set_key (&key, &type, sizeof (type)); - ospf6_lsdb_set_key (&key, &adv_router, sizeof (adv_router)); - ospf6_lsdb_set_key (&key, &id, sizeof (id)); + memset(&key, 0, sizeof(key)); + ospf6_lsdb_set_key(&key, &type, sizeof(type)); + ospf6_lsdb_set_key(&key, &adv_router, sizeof(adv_router)); + ospf6_lsdb_set_key(&key, &id, sizeof(id)); - node = route_node_lookup (lsdb->table, (struct prefix *) &key); - if (node == NULL || node->info == NULL) - return NULL; + node = route_node_lookup(lsdb->table, (struct prefix *)&key); + if (node == NULL || node->info == NULL) + return NULL; - route_unlock_node (node); - return (struct ospf6_lsa *) node->info; + route_unlock_node(node); + return (struct ospf6_lsa *)node->info; } -struct ospf6_lsa * -ospf6_lsdb_lookup_next (u_int16_t type, u_int32_t id, u_int32_t adv_router, - struct ospf6_lsdb *lsdb) +struct ospf6_lsa *ospf6_lsdb_lookup_next(u_int16_t type, u_int32_t id, + u_int32_t adv_router, + struct ospf6_lsdb *lsdb) { - struct route_node *node; - struct prefix_ipv6 key; + struct route_node *node; + struct prefix_ipv6 key; - if (lsdb == NULL) - return NULL; + if (lsdb == NULL) + return NULL; - memset (&key, 0, sizeof (key)); - ospf6_lsdb_set_key (&key, &type, sizeof (type)); - ospf6_lsdb_set_key (&key, &adv_router, sizeof (adv_router)); - ospf6_lsdb_set_key (&key, &id, sizeof (id)); + memset(&key, 0, sizeof(key)); + ospf6_lsdb_set_key(&key, &type, sizeof(type)); + ospf6_lsdb_set_key(&key, &adv_router, sizeof(adv_router)); + ospf6_lsdb_set_key(&key, &id, sizeof(id)); - { - char buf[PREFIX2STR_BUFFER]; - prefix2str (&key, buf, sizeof (buf)); - zlog_debug ("lsdb_lookup_next: key: %s", buf); - } + { + char buf[PREFIX2STR_BUFFER]; + prefix2str(&key, buf, sizeof(buf)); + zlog_debug("lsdb_lookup_next: key: %s", buf); + } - node = route_table_get_next (lsdb->table, &key); + node = route_table_get_next(lsdb->table, &key); - /* skip to real existing entry */ - while (node && node->info == NULL) - node = route_next (node); + /* skip to real existing entry */ + while (node && node->info == NULL) + node = route_next(node); - if (! node) - return NULL; + if (!node) + return NULL; - route_unlock_node (node); - if (! node->info) - return NULL; + route_unlock_node(node); + if (!node->info) + return NULL; - return (struct ospf6_lsa *) node->info; + return (struct ospf6_lsa *)node->info; } -const struct route_node * -ospf6_lsdb_head (struct ospf6_lsdb *lsdb, - int argmode, uint16_t type, uint32_t adv_router, - struct ospf6_lsa **lsa) +const struct route_node *ospf6_lsdb_head(struct ospf6_lsdb *lsdb, int argmode, + uint16_t type, uint32_t adv_router, + struct ospf6_lsa **lsa) { - struct route_node *node, *end; - - *lsa = NULL; - - if (argmode > 0) - { - struct prefix_ipv6 key = { .family = AF_INET6, .prefixlen = 0 }; - - ospf6_lsdb_set_key (&key, &type, sizeof (type)); - if (argmode > 1) - ospf6_lsdb_set_key (&key, &adv_router, sizeof (adv_router)); - - node = route_table_get_next (lsdb->table, &key); - if (!node || !prefix_match((struct prefix *)&key, &node->p)) - return NULL; - - for (end = node; - end && end->parent && end->parent->p.prefixlen >= key.prefixlen; - end = end->parent) - ; - } - else - { - node = route_top (lsdb->table); - end = NULL; - } - - while (node && !node->info) - node = route_next_until(node, end); - - if (!node) - return NULL; - if (!node->info) - { - route_unlock_node(node); - return NULL; - } - - *lsa = node->info; - ospf6_lsa_lock (*lsa); - - return end; + struct route_node *node, *end; + + *lsa = NULL; + + if (argmode > 0) { + struct prefix_ipv6 key = {.family = AF_INET6, .prefixlen = 0}; + + ospf6_lsdb_set_key(&key, &type, sizeof(type)); + if (argmode > 1) + ospf6_lsdb_set_key(&key, &adv_router, + sizeof(adv_router)); + + node = route_table_get_next(lsdb->table, &key); + if (!node || !prefix_match((struct prefix *)&key, &node->p)) + return NULL; + + for (end = node; end && end->parent + && end->parent->p.prefixlen >= key.prefixlen; + end = end->parent) + ; + } else { + node = route_top(lsdb->table); + end = NULL; + } + + while (node && !node->info) + node = route_next_until(node, end); + + if (!node) + return NULL; + if (!node->info) { + route_unlock_node(node); + return NULL; + } + + *lsa = node->info; + ospf6_lsa_lock(*lsa); + + return end; } -struct ospf6_lsa * -ospf6_lsdb_next (const struct route_node *iterend, - struct ospf6_lsa *lsa) +struct ospf6_lsa *ospf6_lsdb_next(const struct route_node *iterend, + struct ospf6_lsa *lsa) { - struct route_node *node = lsa->rn; + struct route_node *node = lsa->rn; - ospf6_lsa_unlock(lsa); + ospf6_lsa_unlock(lsa); - do - node = route_next_until(node, iterend); - while (node && !node->info); + do + node = route_next_until(node, iterend); + while (node && !node->info); - if (node && node->info) - { - struct ospf6_lsa *next = node->info; - ospf6_lsa_lock (next); - return next; - } + if (node && node->info) { + struct ospf6_lsa *next = node->info; + ospf6_lsa_lock(next); + return next; + } - if (node) - route_unlock_node (node); - return NULL; + if (node) + route_unlock_node(node); + return NULL; } -void -ospf6_lsdb_remove_all (struct ospf6_lsdb *lsdb) +void ospf6_lsdb_remove_all(struct ospf6_lsdb *lsdb) { - struct ospf6_lsa *lsa; + struct ospf6_lsa *lsa; - if (lsdb == NULL) - return; + if (lsdb == NULL) + return; - for (ALL_LSDB(lsdb, lsa)) - ospf6_lsdb_remove (lsa, lsdb); + for (ALL_LSDB(lsdb, lsa)) + ospf6_lsdb_remove(lsa, lsdb); } -void -ospf6_lsdb_lsa_unlock (struct ospf6_lsa *lsa) +void ospf6_lsdb_lsa_unlock(struct ospf6_lsa *lsa) { - if (lsa != NULL) - { - if (lsa->rn != NULL) - route_unlock_node (lsa->rn); - ospf6_lsa_unlock (lsa); - } + if (lsa != NULL) { + if (lsa->rn != NULL) + route_unlock_node(lsa->rn); + ospf6_lsa_unlock(lsa); + } } -int -ospf6_lsdb_maxage_remover (struct ospf6_lsdb *lsdb) +int ospf6_lsdb_maxage_remover(struct ospf6_lsdb *lsdb) { - int reschedule = 0; - struct ospf6_lsa *lsa; - - for (ALL_LSDB(lsdb, lsa)) - { - if (! OSPF6_LSA_IS_MAXAGE (lsa)) - continue; - if (lsa->retrans_count != 0) - { - reschedule = 1; - continue; + int reschedule = 0; + struct ospf6_lsa *lsa; + + for (ALL_LSDB(lsdb, lsa)) { + if (!OSPF6_LSA_IS_MAXAGE(lsa)) + continue; + if (lsa->retrans_count != 0) { + reschedule = 1; + continue; + } + if (IS_OSPF6_DEBUG_LSA_TYPE(lsa->header->type)) + zlog_debug("Remove MaxAge %s", lsa->name); + if (CHECK_FLAG(lsa->flag, OSPF6_LSA_SEQWRAPPED)) { + UNSET_FLAG(lsa->flag, OSPF6_LSA_SEQWRAPPED); + /* + * lsa->header->age = 0; + */ + lsa->header->seqnum = + htonl(OSPF_MAX_SEQUENCE_NUMBER + 1); + ospf6_lsa_checksum(lsa->header); + + THREAD_OFF(lsa->refresh); + thread_execute(master, ospf6_lsa_refresh, lsa, 0); + } else { + ospf6_lsdb_remove(lsa, lsdb); + } } - if (IS_OSPF6_DEBUG_LSA_TYPE (lsa->header->type)) - zlog_debug ("Remove MaxAge %s", lsa->name); - if (CHECK_FLAG(lsa->flag, OSPF6_LSA_SEQWRAPPED)) - { - UNSET_FLAG(lsa->flag, OSPF6_LSA_SEQWRAPPED); - /* - * lsa->header->age = 0; - */ - lsa->header->seqnum = htonl(OSPF_MAX_SEQUENCE_NUMBER + 1); - ospf6_lsa_checksum (lsa->header); - - THREAD_OFF(lsa->refresh); - thread_execute (master, ospf6_lsa_refresh, lsa, 0); - } else { - ospf6_lsdb_remove (lsa, lsdb); - } - } - - return (reschedule); + + return (reschedule); } -void -ospf6_lsdb_show (struct vty *vty, enum ospf_lsdb_show_level level, - u_int16_t *type, u_int32_t *id, u_int32_t *adv_router, - struct ospf6_lsdb *lsdb) +void ospf6_lsdb_show(struct vty *vty, enum ospf_lsdb_show_level level, + u_int16_t *type, u_int32_t *id, u_int32_t *adv_router, + struct ospf6_lsdb *lsdb) { - struct ospf6_lsa *lsa; - const struct route_node *end = NULL; - void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL; - - switch (level) - { - case OSPF6_LSDB_SHOW_LEVEL_DETAIL: - showfunc = ospf6_lsa_show; - break; - case OSPF6_LSDB_SHOW_LEVEL_INTERNAL: - showfunc = ospf6_lsa_show_internal; - break; - case OSPF6_LSDB_SHOW_LEVEL_DUMP: - showfunc = ospf6_lsa_show_dump; - break; - case OSPF6_LSDB_SHOW_LEVEL_NORMAL: - default: - showfunc = ospf6_lsa_show_summary; - } - - if (type && id && adv_router) - { - lsa = ospf6_lsdb_lookup (*type, *id, *adv_router, lsdb); - if (lsa) - { - if (level == OSPF6_LSDB_SHOW_LEVEL_NORMAL) - ospf6_lsa_show (vty, lsa); - else - (*showfunc) (vty, lsa); - } - return; - } - - if (level == OSPF6_LSDB_SHOW_LEVEL_NORMAL) - ospf6_lsa_show_summary_header (vty); - - end = ospf6_lsdb_head(lsdb, !!type + !!(type && adv_router), - *type, *adv_router, &lsa); - while (lsa) - { - if ((! adv_router || lsa->header->adv_router == *adv_router) && - (! id || lsa->header->id == *id)) - (*showfunc) (vty, lsa); - - lsa = ospf6_lsdb_next (end, lsa); - } + struct ospf6_lsa *lsa; + const struct route_node *end = NULL; + void (*showfunc)(struct vty *, struct ospf6_lsa *) = NULL; + + switch (level) { + case OSPF6_LSDB_SHOW_LEVEL_DETAIL: + showfunc = ospf6_lsa_show; + break; + case OSPF6_LSDB_SHOW_LEVEL_INTERNAL: + showfunc = ospf6_lsa_show_internal; + break; + case OSPF6_LSDB_SHOW_LEVEL_DUMP: + showfunc = ospf6_lsa_show_dump; + break; + case OSPF6_LSDB_SHOW_LEVEL_NORMAL: + default: + showfunc = ospf6_lsa_show_summary; + } + + if (type && id && adv_router) { + lsa = ospf6_lsdb_lookup(*type, *id, *adv_router, lsdb); + if (lsa) { + if (level == OSPF6_LSDB_SHOW_LEVEL_NORMAL) + ospf6_lsa_show(vty, lsa); + else + (*showfunc)(vty, lsa); + } + return; + } + + if (level == OSPF6_LSDB_SHOW_LEVEL_NORMAL) + ospf6_lsa_show_summary_header(vty); + + end = ospf6_lsdb_head(lsdb, !!type + !!(type && adv_router), *type, + *adv_router, &lsa); + while (lsa) { + if ((!adv_router || lsa->header->adv_router == *adv_router) + && (!id || lsa->header->id == *id)) + (*showfunc)(vty, lsa); + + lsa = ospf6_lsdb_next(end, lsa); + } } -u_int32_t -ospf6_new_ls_id (u_int16_t type, u_int32_t adv_router, - struct ospf6_lsdb *lsdb) +u_int32_t ospf6_new_ls_id(u_int16_t type, u_int32_t adv_router, + struct ospf6_lsdb *lsdb) { - struct ospf6_lsa *lsa; - u_int32_t id = 1, tmp_id; - - /* This routine is curently invoked only for Inter-Prefix LSAs for - * non-summarized routes (no area/range). - */ - for (ALL_LSDB_TYPED_ADVRTR(lsdb, type, adv_router, lsa)) - { - tmp_id = ntohl (lsa->header->id); - if (tmp_id < id) - continue; - - if (tmp_id > id) - { - ospf6_lsdb_lsa_unlock (lsa); - break; - } - id++; - } - - return ((u_int32_t) htonl (id)); + struct ospf6_lsa *lsa; + u_int32_t id = 1, tmp_id; + + /* This routine is curently invoked only for Inter-Prefix LSAs for + * non-summarized routes (no area/range). + */ + for (ALL_LSDB_TYPED_ADVRTR(lsdb, type, adv_router, lsa)) { + tmp_id = ntohl(lsa->header->id); + if (tmp_id < id) + continue; + + if (tmp_id > id) { + ospf6_lsdb_lsa_unlock(lsa); + break; + } + id++; + } + + return ((u_int32_t)htonl(id)); } /* Decide new LS sequence number to originate. note return value is network byte order */ -u_int32_t -ospf6_new_ls_seqnum (u_int16_t type, u_int32_t id, u_int32_t adv_router, - struct ospf6_lsdb *lsdb) +u_int32_t ospf6_new_ls_seqnum(u_int16_t type, u_int32_t id, + u_int32_t adv_router, struct ospf6_lsdb *lsdb) { - struct ospf6_lsa *lsa; - signed long seqnum = 0; + struct ospf6_lsa *lsa; + signed long seqnum = 0; - /* if current database copy not found, return InitialSequenceNumber */ - lsa = ospf6_lsdb_lookup (type, id, adv_router, lsdb); - if (lsa == NULL) - seqnum = OSPF_INITIAL_SEQUENCE_NUMBER; - else - seqnum = (signed long) ntohl (lsa->header->seqnum) + 1; + /* if current database copy not found, return InitialSequenceNumber */ + lsa = ospf6_lsdb_lookup(type, id, adv_router, lsdb); + if (lsa == NULL) + seqnum = OSPF_INITIAL_SEQUENCE_NUMBER; + else + seqnum = (signed long)ntohl(lsa->header->seqnum) + 1; - return ((u_int32_t) htonl (seqnum)); + return ((u_int32_t)htonl(seqnum)); } - - |