1 From c0f3a65582497526bcbfba62d4c86c55b35c3559 Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>
3 Date: Wed, 22 Mar 2017 16:13:50 +0100
4 Subject: [PATCH 5/5] use sockaddr_storage for IPv6 compat
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
9 Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
11 src/include/ipaddr.h | 2 +-
12 src/common/ipaddr.cc | 6 +++---
13 src/common/pick_address.cc | 4 ++--
14 src/test/test_ipaddr.cc | 44 ++++++++++++++++++++++----------------------
15 4 files changed, 28 insertions(+), 28 deletions(-)
17 diff --git a/src/include/ipaddr.h b/src/include/ipaddr.h
18 index cac13d6..bf1a083 100644
19 --- a/src/include/ipaddr.h
20 +++ b/src/include/ipaddr.h
21 @@ -16,6 +16,6 @@ const struct sockaddr *find_ip_in_subnet(const struct ifaddrs *addrs,
22 unsigned int prefix_len);
25 -bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix_len);
26 +bool parse_network(const char *s, struct sockaddr_storage *network, unsigned int *prefix_len);
29 diff --git a/src/common/ipaddr.cc b/src/common/ipaddr.cc
30 index 72fe7de..a7dedf2 100644
31 --- a/src/common/ipaddr.cc
32 +++ b/src/common/ipaddr.cc
33 @@ -110,7 +110,7 @@ const struct sockaddr *find_ip_in_subnet(const struct ifaddrs *addrs,
37 -bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix_len) {
38 +bool parse_network(const char *s, struct sockaddr_storage *network, unsigned int *prefix_len) {
39 char *slash = strchr((char*)s, '/');
42 @@ -144,14 +144,14 @@ bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix
44 ok = inet_pton(AF_INET, addr, &((struct sockaddr_in*)network)->sin_addr);
46 - network->sa_family = AF_INET;
47 + network->ss_family = AF_INET;
51 // try parsing as ipv6
52 ok = inet_pton(AF_INET6, addr, &((struct sockaddr_in6*)network)->sin6_addr);
54 - network->sa_family = AF_INET6;
55 + network->ss_family = AF_INET6;
59 diff --git a/src/common/pick_address.cc b/src/common/pick_address.cc
60 index ebce2d5..460168f 100644
61 --- a/src/common/pick_address.cc
62 +++ b/src/common/pick_address.cc
63 @@ -32,7 +32,7 @@ static const struct sockaddr *find_ip_in_subnet_list(CephContext *cct,
64 get_str_list(networks, nets);
66 for(std::list<string>::iterator s = nets.begin(); s != nets.end(); ++s) {
67 - struct sockaddr net;
68 + struct sockaddr_storage net;
69 unsigned int prefix_len;
71 if (!parse_network(s->c_str(), &net, &prefix_len)) {
72 @@ -40,7 +40,7 @@ static const struct sockaddr *find_ip_in_subnet_list(CephContext *cct,
76 - const struct sockaddr *found = find_ip_in_subnet(ifa, &net, prefix_len);
77 + const struct sockaddr *found = find_ip_in_subnet(ifa, (struct sockaddr *) &net, prefix_len);
81 diff --git a/src/test/test_ipaddr.cc b/src/test/test_ipaddr.cc
82 index 9a3d43e..5d3b76e 100644
83 --- a/src/test/test_ipaddr.cc
84 +++ b/src/test/test_ipaddr.cc
85 @@ -256,7 +256,7 @@ TEST(CommonIPAddr, TestV6_PrefixZero)
87 TEST(CommonIPAddr, ParseNetwork_Empty)
89 - struct sockaddr network;
90 + struct sockaddr_storage network;
91 unsigned int prefix_len;
94 @@ -266,7 +266,7 @@ TEST(CommonIPAddr, ParseNetwork_Empty)
96 TEST(CommonIPAddr, ParseNetwork_Bad_Junk)
98 - struct sockaddr network;
99 + struct sockaddr_storage network;
100 unsigned int prefix_len;
103 @@ -276,27 +276,27 @@ TEST(CommonIPAddr, ParseNetwork_Bad_Junk)
105 TEST(CommonIPAddr, ParseNetwork_Bad_SlashNum)
107 - struct sockaddr network;
108 + struct sockaddr_storage network;
109 unsigned int prefix_len;
112 - ok = parse_network("/24", (struct sockaddr*)&network, &prefix_len);
113 + ok = parse_network("/24", &network, &prefix_len);
114 ASSERT_EQ(ok, false);
117 TEST(CommonIPAddr, ParseNetwork_Bad_Slash)
119 - struct sockaddr network;
120 + struct sockaddr_storage network;
121 unsigned int prefix_len;
124 - ok = parse_network("/", (struct sockaddr*)&network, &prefix_len);
125 + ok = parse_network("/", &network, &prefix_len);
126 ASSERT_EQ(ok, false);
129 TEST(CommonIPAddr, ParseNetwork_Bad_IPv4)
131 - struct sockaddr network;
132 + struct sockaddr_storage network;
133 unsigned int prefix_len;
136 @@ -306,7 +306,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4)
138 TEST(CommonIPAddr, ParseNetwork_Bad_IPv4Slash)
140 - struct sockaddr network;
141 + struct sockaddr_storage network;
142 unsigned int prefix_len;
145 @@ -316,7 +316,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4Slash)
147 TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashNegative)
149 - struct sockaddr network;
150 + struct sockaddr_storage network;
151 unsigned int prefix_len;
154 @@ -326,7 +326,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashNegative)
156 TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashJunk)
158 - struct sockaddr network;
159 + struct sockaddr_storage network;
160 unsigned int prefix_len;
163 @@ -336,7 +336,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashJunk)
165 TEST(CommonIPAddr, ParseNetwork_Bad_IPv6)
167 - struct sockaddr network;
168 + struct sockaddr_storage network;
169 unsigned int prefix_len;
172 @@ -346,7 +346,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6)
174 TEST(CommonIPAddr, ParseNetwork_Bad_IPv6Slash)
176 - struct sockaddr network;
177 + struct sockaddr_storage network;
178 unsigned int prefix_len;
181 @@ -356,7 +356,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6Slash)
183 TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashNegative)
185 - struct sockaddr network;
186 + struct sockaddr_storage network;
187 unsigned int prefix_len;
190 @@ -366,7 +366,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashNegative)
192 TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashJunk)
194 - struct sockaddr network;
195 + struct sockaddr_storage network;
196 unsigned int prefix_len;
199 @@ -380,7 +380,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_0)
200 unsigned int prefix_len;
203 - ok = parse_network("123.123.123.123/0", (struct sockaddr*)&network, &prefix_len);
204 + ok = parse_network("123.123.123.123/0", (struct sockaddr_storage*)&network, &prefix_len);
206 ASSERT_EQ(0U, prefix_len);
207 ASSERT_EQ(AF_INET, network.sin_family);
208 @@ -396,7 +396,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_13)
209 unsigned int prefix_len;
212 - ok = parse_network("123.123.123.123/13", (struct sockaddr*)&network, &prefix_len);
213 + ok = parse_network("123.123.123.123/13", (struct sockaddr_storage*)&network, &prefix_len);
215 ASSERT_EQ(13U, prefix_len);
216 ASSERT_EQ(AF_INET, network.sin_family);
217 @@ -412,7 +412,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_32)
218 unsigned int prefix_len;
221 - ok = parse_network("123.123.123.123/32", (struct sockaddr*)&network, &prefix_len);
222 + ok = parse_network("123.123.123.123/32", (struct sockaddr_storage*)&network, &prefix_len);
224 ASSERT_EQ(32U, prefix_len);
225 ASSERT_EQ(AF_INET, network.sin_family);
226 @@ -428,7 +428,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_42)
227 unsigned int prefix_len;
230 - ok = parse_network("123.123.123.123/42", (struct sockaddr*)&network, &prefix_len);
231 + ok = parse_network("123.123.123.123/42", (struct sockaddr_storage*)&network, &prefix_len);
233 ASSERT_EQ(42U, prefix_len);
234 ASSERT_EQ(AF_INET, network.sin_family);
235 @@ -444,7 +444,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_0)
236 unsigned int prefix_len;
239 - ok = parse_network("2001:1234:5678:90ab::dead:beef/0", (struct sockaddr*)&network, &prefix_len);
240 + ok = parse_network("2001:1234:5678:90ab::dead:beef/0", (struct sockaddr_storage*)&network, &prefix_len);
242 ASSERT_EQ(0U, prefix_len);
243 ASSERT_EQ(AF_INET6, network.sin6_family);
244 @@ -460,7 +460,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_67)
245 unsigned int prefix_len;
248 - ok = parse_network("2001:1234:5678:90ab::dead:beef/67", (struct sockaddr*)&network, &prefix_len);
249 + ok = parse_network("2001:1234:5678:90ab::dead:beef/67", (struct sockaddr_storage*)&network, &prefix_len);
251 ASSERT_EQ(67U, prefix_len);
252 ASSERT_EQ(AF_INET6, network.sin6_family);
253 @@ -476,7 +476,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_128)
254 unsigned int prefix_len;
257 - ok = parse_network("2001:1234:5678:90ab::dead:beef/128", (struct sockaddr*)&network, &prefix_len);
258 + ok = parse_network("2001:1234:5678:90ab::dead:beef/128", (struct sockaddr_storage*)&network, &prefix_len);
260 ASSERT_EQ(128U, prefix_len);
261 ASSERT_EQ(AF_INET6, network.sin6_family);
262 @@ -492,7 +492,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_9000)
263 unsigned int prefix_len;
266 - ok = parse_network("2001:1234:5678:90ab::dead:beef/9000", (struct sockaddr*)&network, &prefix_len);
267 + ok = parse_network("2001:1234:5678:90ab::dead:beef/9000", (struct sockaddr_storage*)&network, &prefix_len);
269 ASSERT_EQ(9000U, prefix_len);
270 ASSERT_EQ(AF_INET6, network.sin6_family);