6
6
7
7
#include "../kselftest_harness.h"
8
8
9
+ struct in6_addr in6addr_v4mapped_any = {
10
+ .s6_addr = {
11
+ 0 , 0 , 0 , 0 ,
12
+ 0 , 0 , 0 , 0 ,
13
+ 0 , 0 , 255 , 255 ,
14
+ 0 , 0 , 0 , 0
15
+ }
16
+ };
17
+
18
+ struct in6_addr in6addr_v4mapped_loopback = {
19
+ .s6_addr = {
20
+ 0 , 0 , 0 , 0 ,
21
+ 0 , 0 , 0 , 0 ,
22
+ 0 , 0 , 255 , 255 ,
23
+ 127 , 0 , 0 , 1
24
+ }
25
+ };
26
+
9
27
FIXTURE (bind_wildcard )
10
28
{
11
29
struct sockaddr_in addr4 ;
12
30
struct sockaddr_in6 addr6 ;
13
- int expected_errno ;
14
31
};
15
32
16
33
FIXTURE_VARIANT (bind_wildcard )
17
34
{
18
35
const __u32 addr4_const ;
19
36
const struct in6_addr * addr6_const ;
37
+ int expected_errno ;
20
38
};
21
39
22
40
FIXTURE_VARIANT_ADD (bind_wildcard , v4_any_v6_any )
23
41
{
24
42
.addr4_const = INADDR_ANY ,
25
43
.addr6_const = & in6addr_any ,
44
+ .expected_errno = EADDRINUSE ,
26
45
};
27
46
28
47
FIXTURE_VARIANT_ADD (bind_wildcard , v4_any_v6_local )
29
48
{
30
49
.addr4_const = INADDR_ANY ,
31
50
.addr6_const = & in6addr_loopback ,
51
+ .expected_errno = 0 ,
52
+ };
53
+
54
+ FIXTURE_VARIANT_ADD (bind_wildcard , v4_any_v6_v4mapped_any )
55
+ {
56
+ .addr4_const = INADDR_ANY ,
57
+ .addr6_const = & in6addr_v4mapped_any ,
58
+ .expected_errno = EADDRINUSE ,
59
+ };
60
+
61
+ FIXTURE_VARIANT_ADD (bind_wildcard , v4_any_v6_v4mapped_local )
62
+ {
63
+ .addr4_const = INADDR_ANY ,
64
+ .addr6_const = & in6addr_v4mapped_loopback ,
65
+ .expected_errno = EADDRINUSE ,
32
66
};
33
67
34
68
FIXTURE_VARIANT_ADD (bind_wildcard , v4_local_v6_any )
35
69
{
36
70
.addr4_const = INADDR_LOOPBACK ,
37
71
.addr6_const = & in6addr_any ,
72
+ .expected_errno = EADDRINUSE ,
38
73
};
39
74
40
75
FIXTURE_VARIANT_ADD (bind_wildcard , v4_local_v6_local )
41
76
{
42
77
.addr4_const = INADDR_LOOPBACK ,
43
78
.addr6_const = & in6addr_loopback ,
79
+ .expected_errno = 0 ,
80
+ };
81
+
82
+ FIXTURE_VARIANT_ADD (bind_wildcard , v4_local_v6_v4mapped_any )
83
+ {
84
+ .addr4_const = INADDR_LOOPBACK ,
85
+ .addr6_const = & in6addr_v4mapped_any ,
86
+ .expected_errno = EADDRINUSE ,
87
+ };
88
+
89
+ FIXTURE_VARIANT_ADD (bind_wildcard , v4_local_v6_v4mapped_local )
90
+ {
91
+ .addr4_const = INADDR_LOOPBACK ,
92
+ .addr6_const = & in6addr_v4mapped_loopback ,
93
+ .expected_errno = EADDRINUSE ,
44
94
};
45
95
46
96
FIXTURE_SETUP (bind_wildcard )
@@ -52,11 +102,6 @@ FIXTURE_SETUP(bind_wildcard)
52
102
self -> addr6 .sin6_family = AF_INET6 ;
53
103
self -> addr6 .sin6_port = htons (0 );
54
104
self -> addr6 .sin6_addr = * variant -> addr6_const ;
55
-
56
- if (variant -> addr6_const == & in6addr_any )
57
- self -> expected_errno = EADDRINUSE ;
58
- else
59
- self -> expected_errno = 0 ;
60
105
}
61
106
62
107
FIXTURE_TEARDOWN (bind_wildcard )
@@ -65,6 +110,7 @@ FIXTURE_TEARDOWN(bind_wildcard)
65
110
66
111
void bind_sockets (struct __test_metadata * _metadata ,
67
112
FIXTURE_DATA (bind_wildcard ) * self ,
113
+ int expected_errno ,
68
114
struct sockaddr * addr1 , socklen_t addrlen1 ,
69
115
struct sockaddr * addr2 , socklen_t addrlen2 )
70
116
{
@@ -86,9 +132,9 @@ void bind_sockets(struct __test_metadata *_metadata,
86
132
ASSERT_GT (fd [1 ], 0 );
87
133
88
134
ret = bind (fd [1 ], addr2 , addrlen2 );
89
- if (self -> expected_errno ) {
135
+ if (expected_errno ) {
90
136
ASSERT_EQ (ret , -1 );
91
- ASSERT_EQ (errno , self -> expected_errno );
137
+ ASSERT_EQ (errno , expected_errno );
92
138
} else {
93
139
ASSERT_EQ (ret , 0 );
94
140
}
@@ -99,14 +145,14 @@ void bind_sockets(struct __test_metadata *_metadata,
99
145
100
146
TEST_F (bind_wildcard , v4_v6 )
101
147
{
102
- bind_sockets (_metadata , self ,
103
- (struct sockaddr * )& self -> addr4 , sizeof (self -> addr6 ),
148
+ bind_sockets (_metadata , self , variant -> expected_errno ,
149
+ (struct sockaddr * )& self -> addr4 , sizeof (self -> addr4 ),
104
150
(struct sockaddr * )& self -> addr6 , sizeof (self -> addr6 ));
105
151
}
106
152
107
153
TEST_F (bind_wildcard , v6_v4 )
108
154
{
109
- bind_sockets (_metadata , self ,
155
+ bind_sockets (_metadata , self , variant -> expected_errno ,
110
156
(struct sockaddr * )& self -> addr6 , sizeof (self -> addr6 ),
111
157
(struct sockaddr * )& self -> addr4 , sizeof (self -> addr4 ));
112
158
}
0 commit comments