forked from cilium/cilium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathipv6_test.h
92 lines (79 loc) · 2.75 KB
/
ipv6_test.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2018-2020 Authors of Cilium */
#include "lib/ipv6.h"
#define SKIP_UNDEF_LPM_LOOKUP_FN
#include "lib/maps.h"
static void test_ipv6_addr_clear_suffix(void)
{
union v6addr v6;
memset(&v6, 0xff, sizeof(v6));
ipv6_addr_clear_suffix(&v6, 128);
assert(ntohl(v6.p1) == 0xffffffff);
assert(ntohl(v6.p2) == 0xffffffff);
assert(ntohl(v6.p3) == 0xffffffff);
assert(ntohl(v6.p4) == 0xffffffff);
memset(&v6, 0xff, sizeof(v6));
ipv6_addr_clear_suffix(&v6, 127);
assert(ntohl(v6.p1) == 0xffffffff);
assert(ntohl(v6.p2) == 0xffffffff);
assert(ntohl(v6.p3) == 0xffffffff);
assert(ntohl(v6.p4) == 0xfffffffe);
memset(&v6, 0xff, sizeof(v6));
ipv6_addr_clear_suffix(&v6, 95);
assert(ntohl(v6.p1) == 0xffffffff);
assert(ntohl(v6.p2) == 0xffffffff);
assert(ntohl(v6.p3) == 0xfffffffe);
assert(ntohl(v6.p4) == 0x00000000);
memset(&v6, 0xff, sizeof(v6));
ipv6_addr_clear_suffix(&v6, 1);
assert(ntohl(v6.p1) == 0x80000000);
assert(ntohl(v6.p2) == 0x00000000);
assert(ntohl(v6.p3) == 0x00000000);
assert(ntohl(v6.p4) == 0x00000000);
memset(&v6, 0xff, sizeof(v6));
ipv6_addr_clear_suffix(&v6, -1);
assert(ntohl(v6.p1) == 0x00000000);
assert(ntohl(v6.p2) == 0x00000000);
assert(ntohl(v6.p3) == 0x00000000);
assert(ntohl(v6.p4) == 0x00000000);
}
static __be32 *dummy_map;
static __be32 match_dummy_prefix(const void *map, __be32 addr, __u32 prefix)
{
return (addr & GET_PREFIX(prefix)) == *dummy_map;
}
#define PREFIX32 32,
#define PREFIX31 31,
#define PREFIX22 22,
#define PREFIX11 11,
#define PREFIX0 0,
LPM_LOOKUP_FN(lpm4_lookup32, __be32, PREFIX32, dummy_map, match_dummy_prefix)
LPM_LOOKUP_FN(lpm4_lookup31, __be32, PREFIX31, dummy_map, match_dummy_prefix)
LPM_LOOKUP_FN(lpm4_lookup22, __be32, PREFIX22, dummy_map, match_dummy_prefix)
LPM_LOOKUP_FN(lpm4_lookup11, __be32, PREFIX11, dummy_map, match_dummy_prefix)
LPM_LOOKUP_FN(lpm4_lookup0, __be32, PREFIX0, dummy_map, match_dummy_prefix)
static void test_lpm_lookup(void)
{
__be32 addr;
dummy_map = &addr;
addr = htonl(0xFFFFFFFF);
assert(__lpm4_lookup32(htonl(0xFFFFFFFF)));
assert(!__lpm4_lookup32(htonl(0xFFF00000)));
addr = htonl(0xFFFFFFFE);
assert(__lpm4_lookup31(htonl(0xFFFFFFFE)));
assert(__lpm4_lookup31(htonl(0xFFFFFFFF)));
assert(!__lpm4_lookup31(htonl(0xFFF00000)));
addr = htonl(0xFFFFFC00);
assert(__lpm4_lookup22(htonl(0xFFFFFC00)));
assert(__lpm4_lookup22(htonl(0xFFFFFFFF)));
assert(!__lpm4_lookup22(htonl(0xFFF00000)));
addr = htonl(0xFFE00000);
assert(__lpm4_lookup11(htonl(0xFFE00000)));
assert(__lpm4_lookup11(htonl(0xFFFFFFFF)));
assert(__lpm4_lookup11(htonl(0xFFF00000)));
addr = htonl(0xF0000000);
assert(__lpm4_lookup11(htonl(0xF0000000)));
addr = htonl(0x00000000);
assert(__lpm4_lookup0(addr));
assert(__lpm4_lookup0(htonl(0xFFFFFFFF)));
}