mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-28 17:01:51 +00:00
tests: ospf6d: basic LSDB tests
Needed these while rewriting LSDB iteration. NB: this commit fails because of a bug in ospf_lsdb_get_next, which will SEGV when the LSDB is actually empty. Whooo... (this is fixed in the following commits.) Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
2e8a2df1fb
commit
f1c73d1495
1
tests/.gitignore
vendored
1
tests/.gitignore
vendored
@ -44,3 +44,4 @@ __pycache__
|
||||
/lib/test_timer_correctness
|
||||
/lib/test_timer_performance
|
||||
/lib/test_ttable
|
||||
/ospf6d/test_lsdb
|
||||
|
@ -24,6 +24,14 @@ else
|
||||
TESTS_BGPD =
|
||||
endif
|
||||
|
||||
if OSPF6D
|
||||
TESTS_OSPF6D = \
|
||||
ospf6d/test_lsdb \
|
||||
# end
|
||||
else
|
||||
TESTS_OSPF6D =
|
||||
endif
|
||||
|
||||
if ENABLE_BGP_VNC
|
||||
BGP_VNC_RFP_LIB=@top_builddir@/$(LIBRFP)/librfp.a
|
||||
else
|
||||
@ -31,6 +39,7 @@ BGP_VNC_RFP_LIB =
|
||||
endif
|
||||
|
||||
lib/cli/test_cli.o: lib/cli/test_cli_clippy.c
|
||||
ospf6d/test_lsdb.o: ospf6d/test_lsdb_clippy.c
|
||||
|
||||
check_PROGRAMS = \
|
||||
lib/test_buffer \
|
||||
@ -51,7 +60,9 @@ check_PROGRAMS = \
|
||||
lib/test_ttable \
|
||||
lib/cli/test_cli \
|
||||
lib/cli/test_commands \
|
||||
$(TESTS_BGPD)
|
||||
$(TESTS_BGPD) \
|
||||
$(TESTS_OSPF6D) \
|
||||
# end
|
||||
|
||||
../vtysh/vtysh_cmd.c:
|
||||
$(MAKE) -C ../vtysh vtysh_cmd.c
|
||||
@ -100,8 +111,11 @@ bgpd_test_ecommunity_SOURCES = bgpd/test_ecommunity.c
|
||||
bgpd_test_mp_attr_SOURCES = bgpd/test_mp_attr.c
|
||||
bgpd_test_mpath_SOURCES = bgpd/test_mpath.c
|
||||
|
||||
ospf6d_test_lsdb_SOURCES = ospf6d/test_lsdb.c lib/cli/common_cli.c
|
||||
|
||||
ALL_TESTS_LDADD = ../lib/libfrr.la @LIBCAP@
|
||||
BGP_TEST_LDADD = ../bgpd/libbgp.a $(BGP_VNC_RFP_LIB) $(ALL_TESTS_LDADD) -lm
|
||||
OSPF6_TEST_LDADD = ../ospf6d/libospf6.a $(ALL_TESTS_LDADD)
|
||||
|
||||
lib_test_buffer_LDADD = $(ALL_TESTS_LDADD)
|
||||
lib_test_checksum_LDADD = $(ALL_TESTS_LDADD)
|
||||
@ -126,6 +140,7 @@ bgpd_test_capability_LDADD = $(BGP_TEST_LDADD)
|
||||
bgpd_test_ecommunity_LDADD = $(BGP_TEST_LDADD)
|
||||
bgpd_test_mp_attr_LDADD = $(BGP_TEST_LDADD)
|
||||
bgpd_test_mpath_LDADD = $(BGP_TEST_LDADD)
|
||||
ospf6d_test_lsdb_LDADD = $(OSPF6_TEST_LDADD)
|
||||
|
||||
EXTRA_DIST = \
|
||||
runtests.py \
|
||||
@ -148,7 +163,11 @@ EXTRA_DIST = \
|
||||
lib/test_stream.refout \
|
||||
lib/test_table.py \
|
||||
lib/test_timer_correctness.py \
|
||||
lib/test_ttable.py
|
||||
lib/test_ttable.py \
|
||||
ospf6d/test_lsdb.py \
|
||||
ospf6d/test_lsdb.in \
|
||||
ospf6d/test_lsdb.refout \
|
||||
# end
|
||||
|
||||
.PHONY: tests.xml
|
||||
tests.xml: $(check_PROGRAMS)
|
||||
|
253
tests/ospf6d/test_lsdb.c
Normal file
253
tests/ospf6d/test_lsdb.c
Normal file
@ -0,0 +1,253 @@
|
||||
/*
|
||||
* CLI/command dummy handling tester
|
||||
*
|
||||
* Copyright (C) 2015 by David Lamparter,
|
||||
* for Open Source Routing / NetDEF, Inc.
|
||||
*
|
||||
* Quagga is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* Quagga is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; see the file COPYING; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <zebra.h>
|
||||
|
||||
#include "prefix.h"
|
||||
#include "vector.h"
|
||||
#include "vty.h"
|
||||
|
||||
#include "ospf6d/ospf6_lsa.h"
|
||||
#include "ospf6d/ospf6_lsdb.h"
|
||||
|
||||
#include "tests/lib/cli/common_cli.h"
|
||||
#include "tests/ospf6d/test_lsdb_clippy.c"
|
||||
|
||||
static struct ospf6_lsdb *lsdb;
|
||||
|
||||
static struct ospf6_lsa **lsas = NULL;
|
||||
static size_t lsa_count = 0;
|
||||
|
||||
static void lsa_check_resize(size_t len)
|
||||
{
|
||||
if (lsa_count >= len)
|
||||
return;
|
||||
lsas = realloc(lsas, len * sizeof(lsas[0]));
|
||||
memset(lsas + lsa_count, 0, sizeof(lsas[0]) * (len - lsa_count));
|
||||
|
||||
lsa_count = len;
|
||||
}
|
||||
|
||||
DEFPY(lsa_set, lsa_set_cmd,
|
||||
"lsa set (0-999999)$idx {type (0-65535)|id A.B.C.D|adv A.B.C.D}",
|
||||
"LSA\n"
|
||||
"set\n"
|
||||
"LSA index in array\n"
|
||||
"OSPF6 type code\n"
|
||||
"OSPF6 type code\n"
|
||||
"LS-ID\n"
|
||||
"LS-ID\n"
|
||||
"Advertising router\n"
|
||||
"Advertising router\n")
|
||||
{
|
||||
struct ospf6_lsa_header hdr;
|
||||
memset(&hdr, 0, sizeof(hdr));
|
||||
hdr.type = htons(type);
|
||||
hdr.id = id.s_addr;
|
||||
hdr.adv_router = adv.s_addr;
|
||||
|
||||
lsa_check_resize(idx + 1);
|
||||
if (lsas[idx])
|
||||
ospf6_lsa_unlock(lsas[idx]);
|
||||
lsas[idx] = ospf6_lsa_create_headeronly(&hdr);
|
||||
ospf6_lsa_lock(lsas[idx]);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFPY(lsa_drop, lsa_drop_cmd,
|
||||
"lsa drop (0-999999)$idx",
|
||||
"LSA\n"
|
||||
"drop reference\n"
|
||||
"LSA index in array\n")
|
||||
{
|
||||
if ((size_t)idx >= lsa_count)
|
||||
return CMD_SUCCESS;
|
||||
if (lsas[idx]->lock != 1)
|
||||
vty_outln(vty, "refcount at %u", lsas[idx]->lock);
|
||||
ospf6_lsa_unlock(lsas[idx]);
|
||||
lsas[idx] = NULL;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
DEFPY(lsdb_add, lsdb_add_cmd,
|
||||
"lsdb add (0-999999)$idx",
|
||||
"LSDB\n"
|
||||
"insert LSA into LSDB\n"
|
||||
"LSA index in array\n")
|
||||
{
|
||||
ospf6_lsdb_add(lsas[idx], lsdb);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFPY(lsdb_remove, lsdb_remove_cmd,
|
||||
"lsdb remove (0-999999)$idx",
|
||||
"LSDB\n"
|
||||
"remove LSA from LSDB\n"
|
||||
"LSA index in array\n")
|
||||
{
|
||||
ospf6_lsdb_remove(lsas[idx], lsdb);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
static void lsa_show_oneline(struct vty *vty, struct ospf6_lsa *lsa)
|
||||
{
|
||||
char adv_router[64], id[64];
|
||||
|
||||
if (!lsa) {
|
||||
vty_outln(vty, "lsa = NULL");
|
||||
return;
|
||||
}
|
||||
inet_ntop(AF_INET, &lsa->header->id,
|
||||
id, sizeof (id));
|
||||
inet_ntop(AF_INET, &lsa->header->adv_router,
|
||||
adv_router, sizeof (adv_router));
|
||||
vty_outln(vty, "type %u adv %s id %s",
|
||||
ntohs(lsa->header->type), adv_router, id);
|
||||
}
|
||||
|
||||
DEFPY(lsdb_walk, lsdb_walk_cmd,
|
||||
"lsdb walk",
|
||||
"LSDB\n"
|
||||
"walk entries\n")
|
||||
{
|
||||
struct ospf6_lsa *lsa;
|
||||
unsigned cnt = 0;
|
||||
for (ALL_LSDB(lsdb, lsa)) {
|
||||
lsa_show_oneline(vty, lsa);
|
||||
cnt++;
|
||||
}
|
||||
vty_outln(vty, "%u entries.", cnt);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFPY(lsdb_walk_type, lsdb_walk_type_cmd,
|
||||
"lsdb walk type (0-65535)",
|
||||
"LSDB\n"
|
||||
"walk entries\n"
|
||||
"entry type\n"
|
||||
"entry type\n")
|
||||
{
|
||||
struct ospf6_lsa *lsa;
|
||||
unsigned cnt = 0;
|
||||
type = htons(type);
|
||||
for (ALL_LSDB_TYPED(lsdb, type, lsa)) {
|
||||
lsa_show_oneline(vty, lsa);
|
||||
cnt++;
|
||||
}
|
||||
vty_outln(vty, "%u entries.", cnt);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFPY(lsdb_walk_type_adv, lsdb_walk_type_adv_cmd,
|
||||
"lsdb walk type (0-65535) adv A.B.C.D",
|
||||
"LSDB\n"
|
||||
"walk entries\n"
|
||||
"entry type\n"
|
||||
"entry type\n"
|
||||
"advertising router ID\n"
|
||||
"advertising router ID\n")
|
||||
{
|
||||
struct ospf6_lsa *lsa;
|
||||
unsigned cnt = 0;
|
||||
type = htons(type);
|
||||
for (ALL_LSDB_TYPED_ADVRTR(lsdb, type, adv.s_addr, lsa)) {
|
||||
lsa_show_oneline(vty, lsa);
|
||||
cnt++;
|
||||
}
|
||||
vty_outln(vty, "%u entries.", cnt);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFPY(lsdb_get, lsdb_get_cmd,
|
||||
"lsdb <get-next|get> type (0-65535) adv A.B.C.D id A.B.C.D",
|
||||
"LSDB\n"
|
||||
"get entry's successor\n"
|
||||
"entry type\n"
|
||||
"entry type\n"
|
||||
"advertising router ID\n"
|
||||
"advertising router ID\n"
|
||||
"LS-ID\n"
|
||||
"LS-ID\n")
|
||||
{
|
||||
struct ospf6_lsa *lsa;
|
||||
type = htons(type);
|
||||
if (!strcmp(argv[1]->text, "get-next"))
|
||||
lsa = ospf6_lsdb_lookup_next(type, id.s_addr, adv.s_addr, lsdb);
|
||||
else
|
||||
lsa = ospf6_lsdb_lookup(type, id.s_addr, adv.s_addr, lsdb);
|
||||
lsa_show_oneline(vty, lsa);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFPY(lsa_refcounts, lsa_refcounts_cmd,
|
||||
"lsa refcounts",
|
||||
"LSA\n"
|
||||
"show reference counts\n")
|
||||
{
|
||||
for (size_t i = 0; i < lsa_count; i++)
|
||||
if (lsas[i])
|
||||
vty_outln(vty, "[%zu] %u", i, lsas[i]->lock);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFPY(lsdb_create, lsdb_create_cmd,
|
||||
"lsdb create",
|
||||
"LSDB\n"
|
||||
"create LSDB\n")
|
||||
{
|
||||
if (lsdb)
|
||||
ospf6_lsdb_delete(lsdb);
|
||||
lsdb = ospf6_lsdb_create(NULL);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFPY(lsdb_delete, lsdb_delete_cmd,
|
||||
"lsdb delete",
|
||||
"LSDB\n"
|
||||
"delete LSDB\n")
|
||||
{
|
||||
ospf6_lsdb_delete(lsdb);
|
||||
lsdb = NULL;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
struct zebra_privs_t ospf6d_privs;
|
||||
|
||||
void test_init(int argc, char **argv)
|
||||
{
|
||||
ospf6_lsa_init();
|
||||
|
||||
install_element(ENABLE_NODE, &lsa_set_cmd);
|
||||
install_element(ENABLE_NODE, &lsa_refcounts_cmd);
|
||||
install_element(ENABLE_NODE, &lsa_drop_cmd);
|
||||
|
||||
install_element(ENABLE_NODE, &lsdb_create_cmd);
|
||||
install_element(ENABLE_NODE, &lsdb_delete_cmd);
|
||||
|
||||
install_element(ENABLE_NODE, &lsdb_add_cmd);
|
||||
install_element(ENABLE_NODE, &lsdb_remove_cmd);
|
||||
install_element(ENABLE_NODE, &lsdb_walk_cmd);
|
||||
install_element(ENABLE_NODE, &lsdb_walk_type_cmd);
|
||||
install_element(ENABLE_NODE, &lsdb_walk_type_adv_cmd);
|
||||
install_element(ENABLE_NODE, &lsdb_get_cmd);
|
||||
}
|
72
tests/ospf6d/test_lsdb.in
Normal file
72
tests/ospf6d/test_lsdb.in
Normal file
@ -0,0 +1,72 @@
|
||||
lsa set 0 type 1 adv 1.2.3.4 id 0.0.0.1
|
||||
lsa set 1 type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsa set 2 type 2 adv 1.2.3.4 id 0.0.0.3
|
||||
lsa set 3 type 2 adv 128.2.3.4 id 0.0.0.4
|
||||
lsa set 4 type 2 adv 128.2.3.4 id 0.0.0.5
|
||||
lsa set 5 type 3 adv 0.0.0.1 id 0.0.0.6
|
||||
lsa refcounts
|
||||
|
||||
lsdb create
|
||||
|
||||
lsdb walk
|
||||
lsdb walk type 1
|
||||
lsdb walk type 2
|
||||
lsdb get type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsdb get-next type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsa refcounts
|
||||
|
||||
lsdb add 0
|
||||
lsdb add 1
|
||||
lsa refcounts
|
||||
|
||||
lsdb walk
|
||||
lsdb walk type 1
|
||||
lsdb walk type 2
|
||||
lsdb get type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsdb get-next type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsa refcounts
|
||||
|
||||
lsdb remove 0
|
||||
lsdb add 2
|
||||
lsdb add 3
|
||||
lsdb add 4
|
||||
lsa refcounts
|
||||
|
||||
lsdb walk
|
||||
lsdb walk type 1
|
||||
lsdb walk type 2
|
||||
lsdb get type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsdb get-next type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsa refcounts
|
||||
|
||||
lsdb add 5
|
||||
lsa refcounts
|
||||
|
||||
lsdb walk
|
||||
lsdb walk type 1
|
||||
lsdb walk type 2
|
||||
lsdb get type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsdb get-next type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsa refcounts
|
||||
|
||||
lsdb remove 1
|
||||
lsdb remove 5
|
||||
lsa refcounts
|
||||
|
||||
lsdb walk
|
||||
lsdb walk type 1
|
||||
lsdb walk type 2
|
||||
lsdb get type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsdb get-next type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsa refcounts
|
||||
|
||||
lsdb delete
|
||||
|
||||
lsa refcounts
|
||||
lsa drop 0
|
||||
lsa drop 1
|
||||
lsa drop 2
|
||||
lsa drop 3
|
||||
lsa drop 4
|
||||
lsa drop 5
|
||||
|
4
tests/ospf6d/test_lsdb.py
Normal file
4
tests/ospf6d/test_lsdb.py
Normal file
@ -0,0 +1,4 @@
|
||||
import frrtest
|
||||
|
||||
class TestLSDB(frrtest.TestRefOut):
|
||||
program = './test_lsdb'
|
192
tests/ospf6d/test_lsdb.refout
Normal file
192
tests/ospf6d/test_lsdb.refout
Normal file
@ -0,0 +1,192 @@
|
||||
test# lsa set 0 type 1 adv 1.2.3.4 id 0.0.0.1
|
||||
test# lsa set 1 type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
test# lsa set 2 type 2 adv 1.2.3.4 id 0.0.0.3
|
||||
test# lsa set 3 type 2 adv 128.2.3.4 id 0.0.0.4
|
||||
test# lsa set 4 type 2 adv 128.2.3.4 id 0.0.0.5
|
||||
test# lsa set 5 type 3 adv 0.0.0.1 id 0.0.0.6
|
||||
test# lsa refcounts
|
||||
[0] 1
|
||||
[1] 1
|
||||
[2] 1
|
||||
[3] 1
|
||||
[4] 1
|
||||
[5] 1
|
||||
test#
|
||||
test# lsdb create
|
||||
test#
|
||||
test# lsdb walk
|
||||
0 entries.
|
||||
test# lsdb walk type 1
|
||||
0 entries.
|
||||
test# lsdb walk type 2
|
||||
0 entries.
|
||||
test# lsdb get type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsa = NULL
|
||||
test# lsdb get-next type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsa = NULL
|
||||
test# lsa refcounts
|
||||
[0] 1
|
||||
[1] 1
|
||||
[2] 1
|
||||
[3] 1
|
||||
[4] 1
|
||||
[5] 1
|
||||
test#
|
||||
test# lsdb add 0
|
||||
test# lsdb add 1
|
||||
test# lsa refcounts
|
||||
[0] 2
|
||||
[1] 2
|
||||
[2] 1
|
||||
[3] 1
|
||||
[4] 1
|
||||
[5] 1
|
||||
test#
|
||||
test# lsdb walk
|
||||
type 1 adv 1.2.3.4 id 0.0.0.1
|
||||
type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
2 entries.
|
||||
test# lsdb walk type 1
|
||||
type 1 adv 1.2.3.4 id 0.0.0.1
|
||||
type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
2 entries.
|
||||
test# lsdb walk type 2
|
||||
0 entries.
|
||||
test# lsdb get type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
test# lsdb get-next type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsa = NULL
|
||||
test# lsa refcounts
|
||||
[0] 2
|
||||
[1] 2
|
||||
[2] 1
|
||||
[3] 1
|
||||
[4] 1
|
||||
[5] 1
|
||||
test#
|
||||
test# lsdb remove 0
|
||||
test# lsdb add 2
|
||||
test# lsdb add 3
|
||||
test# lsdb add 4
|
||||
test# lsa refcounts
|
||||
[0] 1
|
||||
[1] 2
|
||||
[2] 2
|
||||
[3] 2
|
||||
[4] 2
|
||||
[5] 1
|
||||
test#
|
||||
test# lsdb walk
|
||||
type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
type 2 adv 1.2.3.4 id 0.0.0.3
|
||||
type 2 adv 128.2.3.4 id 0.0.0.4
|
||||
type 2 adv 128.2.3.4 id 0.0.0.5
|
||||
4 entries.
|
||||
test# lsdb walk type 1
|
||||
type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
1 entries.
|
||||
test# lsdb walk type 2
|
||||
type 2 adv 1.2.3.4 id 0.0.0.3
|
||||
type 2 adv 128.2.3.4 id 0.0.0.4
|
||||
type 2 adv 128.2.3.4 id 0.0.0.5
|
||||
3 entries.
|
||||
test# lsdb get type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
test# lsdb get-next type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
type 2 adv 1.2.3.4 id 0.0.0.3
|
||||
test# lsa refcounts
|
||||
[0] 1
|
||||
[1] 2
|
||||
[2] 2
|
||||
[3] 2
|
||||
[4] 2
|
||||
[5] 1
|
||||
test#
|
||||
test# lsdb add 5
|
||||
test# lsa refcounts
|
||||
[0] 1
|
||||
[1] 2
|
||||
[2] 2
|
||||
[3] 2
|
||||
[4] 2
|
||||
[5] 2
|
||||
test#
|
||||
test# lsdb walk
|
||||
type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
type 2 adv 1.2.3.4 id 0.0.0.3
|
||||
type 2 adv 128.2.3.4 id 0.0.0.4
|
||||
type 2 adv 128.2.3.4 id 0.0.0.5
|
||||
type 3 adv 0.0.0.1 id 0.0.0.6
|
||||
5 entries.
|
||||
test# lsdb walk type 1
|
||||
type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
1 entries.
|
||||
test# lsdb walk type 2
|
||||
type 2 adv 1.2.3.4 id 0.0.0.3
|
||||
type 2 adv 128.2.3.4 id 0.0.0.4
|
||||
type 2 adv 128.2.3.4 id 0.0.0.5
|
||||
3 entries.
|
||||
test# lsdb get type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
test# lsdb get-next type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
type 2 adv 1.2.3.4 id 0.0.0.3
|
||||
test# lsa refcounts
|
||||
[0] 1
|
||||
[1] 2
|
||||
[2] 2
|
||||
[3] 2
|
||||
[4] 2
|
||||
[5] 2
|
||||
test#
|
||||
test# lsdb remove 1
|
||||
test# lsdb remove 5
|
||||
test# lsa refcounts
|
||||
[0] 1
|
||||
[1] 1
|
||||
[2] 2
|
||||
[3] 2
|
||||
[4] 2
|
||||
[5] 1
|
||||
test#
|
||||
test# lsdb walk
|
||||
type 2 adv 1.2.3.4 id 0.0.0.3
|
||||
type 2 adv 128.2.3.4 id 0.0.0.4
|
||||
type 2 adv 128.2.3.4 id 0.0.0.5
|
||||
3 entries.
|
||||
test# lsdb walk type 1
|
||||
0 entries.
|
||||
test# lsdb walk type 2
|
||||
type 2 adv 1.2.3.4 id 0.0.0.3
|
||||
type 2 adv 128.2.3.4 id 0.0.0.4
|
||||
type 2 adv 128.2.3.4 id 0.0.0.5
|
||||
3 entries.
|
||||
test# lsdb get type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
lsa = NULL
|
||||
test# lsdb get-next type 1 adv 1.2.3.4 id 0.0.0.2
|
||||
type 2 adv 1.2.3.4 id 0.0.0.3
|
||||
test# lsa refcounts
|
||||
[0] 1
|
||||
[1] 1
|
||||
[2] 2
|
||||
[3] 2
|
||||
[4] 2
|
||||
[5] 1
|
||||
test#
|
||||
test# lsdb delete
|
||||
test#
|
||||
test# lsa refcounts
|
||||
[0] 1
|
||||
[1] 1
|
||||
[2] 1
|
||||
[3] 1
|
||||
[4] 1
|
||||
[5] 1
|
||||
test# lsa drop 0
|
||||
test# lsa drop 1
|
||||
test# lsa drop 2
|
||||
test# lsa drop 3
|
||||
test# lsa drop 4
|
||||
test# lsa drop 5
|
||||
test#
|
||||
test#
|
||||
end.
|
Loading…
Reference in New Issue
Block a user