|
|
|
@ -35,8 +35,8 @@ static void _fill_FIB_unique(size_t entries)
|
|
|
|
|
size_t add_buf_size = 16;
|
|
|
|
|
char addr_dst[add_buf_size];
|
|
|
|
|
char addr_nxt[add_buf_size];
|
|
|
|
|
uint32_t addr_dst_flags = 0x77777777;
|
|
|
|
|
uint32_t addr_nxt_flags = 0x77777777;
|
|
|
|
|
uint32_t addr_dst_flags = 0x00777777;
|
|
|
|
|
uint32_t addr_nxt_flags = 0x00777777;
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < entries; ++i) {
|
|
|
|
|
/* construct "addresses" for the FIB */
|
|
|
|
@ -59,8 +59,8 @@ static void _fill_FIB_multiple(size_t entries, size_t modulus)
|
|
|
|
|
size_t add_buf_size = 16;
|
|
|
|
|
char addr_dst[add_buf_size];
|
|
|
|
|
char addr_nxt[add_buf_size];
|
|
|
|
|
uint32_t addr_dst_flags = 0x33333333;
|
|
|
|
|
uint32_t addr_nxt_flags = 0x33333333;
|
|
|
|
|
uint32_t addr_dst_flags = 0x00333333;
|
|
|
|
|
uint32_t addr_nxt_flags = 0x00333333;
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < entries; ++i) {
|
|
|
|
|
/* construct "addresses" for the FIB */
|
|
|
|
@ -73,6 +73,29 @@ static void _fill_FIB_multiple(size_t entries, size_t modulus)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief helper to determine the prefix bits
|
|
|
|
|
*/
|
|
|
|
|
static size_t _get_prefix_bits_num(char* addr, size_t addr_len)
|
|
|
|
|
{
|
|
|
|
|
/* Get the index of the first trailing `0` */
|
|
|
|
|
int i = 0;
|
|
|
|
|
for (i = addr_len-1; i > 0; --i) {
|
|
|
|
|
if (addr[i] != 0) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* now we check the bits of the lowest byte */
|
|
|
|
|
uint8_t j = 0;
|
|
|
|
|
for ( ; j < 8; ++j) {
|
|
|
|
|
if ((addr[i] >> j) & 0x01) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return (i << 3) + (8 - j);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief filling the FIB with entries
|
|
|
|
|
* It is expected to have 20 FIB entries and 40 used universal address entries
|
|
|
|
@ -493,22 +516,27 @@ static void test_fib_14_exact_and_prefix_match(void)
|
|
|
|
|
snprintf(addr_dst, add_buf_size, "Test addr12");
|
|
|
|
|
snprintf(addr_nxt, add_buf_size, "Test address %02d", 12);
|
|
|
|
|
|
|
|
|
|
/* get the prefix in bits */
|
|
|
|
|
uint32_t prefix_len = _get_prefix_bits_num(addr_dst, strlen(addr_dst));
|
|
|
|
|
|
|
|
|
|
fib_add_entry(&test_fib_table, 42, (uint8_t *)addr_dst,
|
|
|
|
|
add_buf_size - 1, (FIB_FLAG_NET_PREFIX | 0x12),
|
|
|
|
|
add_buf_size - 1, ((prefix_len << FIB_FLAG_NET_PREFIX_SHIFT) | 0x12),
|
|
|
|
|
(uint8_t *)addr_nxt, add_buf_size - 1,
|
|
|
|
|
0x12, 100000);
|
|
|
|
|
|
|
|
|
|
snprintf(addr_dst, add_buf_size, "Test addr123");
|
|
|
|
|
snprintf(addr_nxt, add_buf_size, "Test address %02d", 23);
|
|
|
|
|
prefix_len = _get_prefix_bits_num(addr_dst, strlen(addr_dst));
|
|
|
|
|
fib_add_entry(&test_fib_table, 42, (uint8_t *)addr_dst,
|
|
|
|
|
add_buf_size - 1, (FIB_FLAG_NET_PREFIX | 0x123),
|
|
|
|
|
add_buf_size - 1, ((prefix_len << FIB_FLAG_NET_PREFIX_SHIFT) | 0x123),
|
|
|
|
|
(uint8_t *)addr_nxt, add_buf_size - 1,
|
|
|
|
|
0x23, 100000);
|
|
|
|
|
|
|
|
|
|
snprintf(addr_dst, add_buf_size, "Test addr1234");
|
|
|
|
|
snprintf(addr_nxt, add_buf_size, "Test address %02d", 34);
|
|
|
|
|
prefix_len = _get_prefix_bits_num(addr_dst, strlen(addr_dst));
|
|
|
|
|
fib_add_entry(&test_fib_table, 42, (uint8_t *)addr_dst,
|
|
|
|
|
add_buf_size - 1, (FIB_FLAG_NET_PREFIX | 0x1234),
|
|
|
|
|
add_buf_size - 1, ((prefix_len << FIB_FLAG_NET_PREFIX_SHIFT) | 0x1234),
|
|
|
|
|
(uint8_t *)addr_nxt, add_buf_size - 1,
|
|
|
|
|
0x34, 100000);
|
|
|
|
|
|
|
|
|
@ -612,14 +640,16 @@ static void test_fib_16_prefix_match(void)
|
|
|
|
|
addr_dst[14] = (char)0x80; /* 1000 0000 */
|
|
|
|
|
addr_lookup[14] = (char)0x87; /* 1000 0111 */
|
|
|
|
|
|
|
|
|
|
uint32_t prefix_len = _get_prefix_bits_num(addr_dst, strlen(addr_dst));
|
|
|
|
|
fib_add_entry(&test_fib_table, 42, (uint8_t *)addr_dst,
|
|
|
|
|
add_buf_size - 1, (FIB_FLAG_NET_PREFIX | 0x123),
|
|
|
|
|
add_buf_size - 1, ((prefix_len << FIB_FLAG_NET_PREFIX_SHIFT) | 0x123),
|
|
|
|
|
(uint8_t *)addr_nxt, add_buf_size - 1,
|
|
|
|
|
0x23, 100000);
|
|
|
|
|
|
|
|
|
|
addr_dst[14] = (char)0x3c; /* 0011 1100 */
|
|
|
|
|
prefix_len = _get_prefix_bits_num(addr_dst, strlen(addr_dst));
|
|
|
|
|
fib_add_entry(&test_fib_table, 42, (uint8_t *)addr_dst,
|
|
|
|
|
add_buf_size - 1, (FIB_FLAG_NET_PREFIX | 0x123),
|
|
|
|
|
add_buf_size - 1, ((prefix_len << FIB_FLAG_NET_PREFIX_SHIFT) | 0x123),
|
|
|
|
|
(uint8_t *)addr_nxt, add_buf_size - 1,
|
|
|
|
|
0x23, 100000);
|
|
|
|
|
|
|
|
|
@ -634,10 +664,12 @@ static void test_fib_16_prefix_match(void)
|
|
|
|
|
/* test fail */
|
|
|
|
|
addr_dst[14] = (char)0x3c; /* 0011 1100 */
|
|
|
|
|
addr_lookup[14] = (char)0x34; /* 0011 0100 */
|
|
|
|
|
addr_lookup[13] += 1;
|
|
|
|
|
add_buf_size = 16;
|
|
|
|
|
prefix_len = _get_prefix_bits_num(addr_dst, strlen(addr_dst));
|
|
|
|
|
|
|
|
|
|
fib_add_entry(&test_fib_table, 42, (uint8_t *)addr_dst,
|
|
|
|
|
add_buf_size - 1, (FIB_FLAG_NET_PREFIX | 0x123),
|
|
|
|
|
add_buf_size - 1, ((prefix_len << FIB_FLAG_NET_PREFIX_SHIFT) | 0x123),
|
|
|
|
|
(uint8_t *)addr_nxt, add_buf_size -
|
|
|
|
|
1, 0x23, 100000);
|
|
|
|
|
|
|
|
|
@ -651,6 +683,7 @@ static void test_fib_16_prefix_match(void)
|
|
|
|
|
|
|
|
|
|
/* test success (again) by adjusting the lsb */
|
|
|
|
|
addr_lookup[14] = (char)0x3e; /* 0011 1110 */
|
|
|
|
|
addr_lookup[13] -= 1;
|
|
|
|
|
add_buf_size = 16;
|
|
|
|
|
|
|
|
|
|
memset(addr_nxt, 0, add_buf_size);
|
|
|
|
@ -813,7 +846,7 @@ static void test_fib_19_default_gateway(void)
|
|
|
|
|
|
|
|
|
|
/* add a default gateway entry */
|
|
|
|
|
fib_add_entry(&test_fib_table, 42, (uint8_t *)addr_dst,
|
|
|
|
|
add_buf_size, (FIB_FLAG_NET_PREFIX | 0x123),
|
|
|
|
|
add_buf_size, 0x123,
|
|
|
|
|
(uint8_t *)addr_nxt, add_buf_size, 0x23,
|
|
|
|
|
100000);
|
|
|
|
|
|
|
|
|
@ -888,9 +921,10 @@ static void test_fib_20_replace_prefix(void)
|
|
|
|
|
addr_lookup[i] = i+1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uint32_t prefix_len = _get_prefix_bits_num(addr_dst, strlen(addr_dst));
|
|
|
|
|
/* add a prefix entry */
|
|
|
|
|
fib_add_entry(&test_fib_table, 42, (uint8_t *)addr_dst,
|
|
|
|
|
add_buf_size, (FIB_FLAG_NET_PREFIX | 0x123),
|
|
|
|
|
add_buf_size, ((prefix_len << FIB_FLAG_NET_PREFIX_SHIFT) | 0x123),
|
|
|
|
|
(uint8_t *)addr_nxt, add_buf_size, 0x23,
|
|
|
|
|
100000);
|
|
|
|
|
|
|
|
|
@ -918,9 +952,10 @@ static void test_fib_20_replace_prefix(void)
|
|
|
|
|
addr_dst[i] = i+1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
prefix_len = _get_prefix_bits_num(addr_dst, strlen(addr_dst));
|
|
|
|
|
/* change the prefix entry */
|
|
|
|
|
fib_add_entry(&test_fib_table, 42, (uint8_t *)addr_dst,
|
|
|
|
|
add_buf_size, (FIB_FLAG_NET_PREFIX | 0x123),
|
|
|
|
|
add_buf_size, ((prefix_len << FIB_FLAG_NET_PREFIX_SHIFT) | 0x123),
|
|
|
|
|
(uint8_t *)addr_nxt, add_buf_size, 0x24,
|
|
|
|
|
100000);
|
|
|
|
|
|
|
|
|
|