]> git.proxmox.com Git - ceph.git/blob - patches/0005-use-sockaddr_storage-for-IPv6-compat.patch
fix IPv6 monitor creation bug
[ceph.git] / patches / 0005-use-sockaddr_storage-for-IPv6-compat.patch
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
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
10 ---
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(-)
16
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);
23
24
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);
27
28 #endif
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,
34 }
35
36
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, '/');
40 if (!slash) {
41 // no slash
42 @@ -144,14 +144,14 @@ bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix
43 int ok;
44 ok = inet_pton(AF_INET, addr, &((struct sockaddr_in*)network)->sin_addr);
45 if (ok) {
46 - network->sa_family = AF_INET;
47 + network->ss_family = AF_INET;
48 return true;
49 }
50
51 // try parsing as ipv6
52 ok = inet_pton(AF_INET6, addr, &((struct sockaddr_in6*)network)->sin6_addr);
53 if (ok) {
54 - network->sa_family = AF_INET6;
55 + network->ss_family = AF_INET6;
56 return true;
57 }
58
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);
65
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;
70
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,
73 exit(1);
74 }
75
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);
78 if (found)
79 return found;
80 }
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)
86
87 TEST(CommonIPAddr, ParseNetwork_Empty)
88 {
89 - struct sockaddr network;
90 + struct sockaddr_storage network;
91 unsigned int prefix_len;
92 bool ok;
93
94 @@ -266,7 +266,7 @@ TEST(CommonIPAddr, ParseNetwork_Empty)
95
96 TEST(CommonIPAddr, ParseNetwork_Bad_Junk)
97 {
98 - struct sockaddr network;
99 + struct sockaddr_storage network;
100 unsigned int prefix_len;
101 bool ok;
102
103 @@ -276,27 +276,27 @@ TEST(CommonIPAddr, ParseNetwork_Bad_Junk)
104
105 TEST(CommonIPAddr, ParseNetwork_Bad_SlashNum)
106 {
107 - struct sockaddr network;
108 + struct sockaddr_storage network;
109 unsigned int prefix_len;
110 bool ok;
111
112 - ok = parse_network("/24", (struct sockaddr*)&network, &prefix_len);
113 + ok = parse_network("/24", &network, &prefix_len);
114 ASSERT_EQ(ok, false);
115 }
116
117 TEST(CommonIPAddr, ParseNetwork_Bad_Slash)
118 {
119 - struct sockaddr network;
120 + struct sockaddr_storage network;
121 unsigned int prefix_len;
122 bool ok;
123
124 - ok = parse_network("/", (struct sockaddr*)&network, &prefix_len);
125 + ok = parse_network("/", &network, &prefix_len);
126 ASSERT_EQ(ok, false);
127 }
128
129 TEST(CommonIPAddr, ParseNetwork_Bad_IPv4)
130 {
131 - struct sockaddr network;
132 + struct sockaddr_storage network;
133 unsigned int prefix_len;
134 bool ok;
135
136 @@ -306,7 +306,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4)
137
138 TEST(CommonIPAddr, ParseNetwork_Bad_IPv4Slash)
139 {
140 - struct sockaddr network;
141 + struct sockaddr_storage network;
142 unsigned int prefix_len;
143 bool ok;
144
145 @@ -316,7 +316,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4Slash)
146
147 TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashNegative)
148 {
149 - struct sockaddr network;
150 + struct sockaddr_storage network;
151 unsigned int prefix_len;
152 bool ok;
153
154 @@ -326,7 +326,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashNegative)
155
156 TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashJunk)
157 {
158 - struct sockaddr network;
159 + struct sockaddr_storage network;
160 unsigned int prefix_len;
161 bool ok;
162
163 @@ -336,7 +336,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashJunk)
164
165 TEST(CommonIPAddr, ParseNetwork_Bad_IPv6)
166 {
167 - struct sockaddr network;
168 + struct sockaddr_storage network;
169 unsigned int prefix_len;
170 bool ok;
171
172 @@ -346,7 +346,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6)
173
174 TEST(CommonIPAddr, ParseNetwork_Bad_IPv6Slash)
175 {
176 - struct sockaddr network;
177 + struct sockaddr_storage network;
178 unsigned int prefix_len;
179 bool ok;
180
181 @@ -356,7 +356,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6Slash)
182
183 TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashNegative)
184 {
185 - struct sockaddr network;
186 + struct sockaddr_storage network;
187 unsigned int prefix_len;
188 bool ok;
189
190 @@ -366,7 +366,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashNegative)
191
192 TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashJunk)
193 {
194 - struct sockaddr network;
195 + struct sockaddr_storage network;
196 unsigned int prefix_len;
197 bool ok;
198
199 @@ -380,7 +380,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_0)
200 unsigned int prefix_len;
201 bool ok;
202
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);
205 ASSERT_EQ(ok, true);
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;
210 bool ok;
211
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);
214 ASSERT_EQ(ok, true);
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;
219 bool ok;
220
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);
223 ASSERT_EQ(ok, true);
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;
228 bool ok;
229
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);
232 ASSERT_EQ(ok, true);
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;
237 bool ok;
238
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);
241 ASSERT_EQ(ok, true);
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;
246 bool ok;
247
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);
250 ASSERT_EQ(ok, true);
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;
255 bool ok;
256
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);
259 ASSERT_EQ(ok, true);
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;
264 bool ok;
265
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);
268 ASSERT_EQ(ok, true);
269 ASSERT_EQ(9000U, prefix_len);
270 ASSERT_EQ(AF_INET6, network.sin6_family);
271 --
272 2.1.4
273