--- /dev/null
+From c0f3a65582497526bcbfba62d4c86c55b35c3559 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>
+Date: Wed, 22 Mar 2017 16:13:50 +0100
+Subject: [PATCH 5/5] use sockaddr_storage for IPv6 compat
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
+---
+ src/include/ipaddr.h | 2 +-
+ src/common/ipaddr.cc | 6 +++---
+ src/common/pick_address.cc | 4 ++--
+ src/test/test_ipaddr.cc | 44 ++++++++++++++++++++++----------------------
+ 4 files changed, 28 insertions(+), 28 deletions(-)
+
+diff --git a/src/include/ipaddr.h b/src/include/ipaddr.h
+index cac13d6..bf1a083 100644
+--- a/src/include/ipaddr.h
++++ b/src/include/ipaddr.h
+@@ -16,6 +16,6 @@ const struct sockaddr *find_ip_in_subnet(const struct ifaddrs *addrs,
+ unsigned int prefix_len);
+
+
+-bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix_len);
++bool parse_network(const char *s, struct sockaddr_storage *network, unsigned int *prefix_len);
+
+ #endif
+diff --git a/src/common/ipaddr.cc b/src/common/ipaddr.cc
+index 72fe7de..a7dedf2 100644
+--- a/src/common/ipaddr.cc
++++ b/src/common/ipaddr.cc
+@@ -110,7 +110,7 @@ const struct sockaddr *find_ip_in_subnet(const struct ifaddrs *addrs,
+ }
+
+
+-bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix_len) {
++bool parse_network(const char *s, struct sockaddr_storage *network, unsigned int *prefix_len) {
+ char *slash = strchr((char*)s, '/');
+ if (!slash) {
+ // no slash
+@@ -144,14 +144,14 @@ bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix
+ int ok;
+ ok = inet_pton(AF_INET, addr, &((struct sockaddr_in*)network)->sin_addr);
+ if (ok) {
+- network->sa_family = AF_INET;
++ network->ss_family = AF_INET;
+ return true;
+ }
+
+ // try parsing as ipv6
+ ok = inet_pton(AF_INET6, addr, &((struct sockaddr_in6*)network)->sin6_addr);
+ if (ok) {
+- network->sa_family = AF_INET6;
++ network->ss_family = AF_INET6;
+ return true;
+ }
+
+diff --git a/src/common/pick_address.cc b/src/common/pick_address.cc
+index ebce2d5..460168f 100644
+--- a/src/common/pick_address.cc
++++ b/src/common/pick_address.cc
+@@ -32,7 +32,7 @@ static const struct sockaddr *find_ip_in_subnet_list(CephContext *cct,
+ get_str_list(networks, nets);
+
+ for(std::list<string>::iterator s = nets.begin(); s != nets.end(); ++s) {
+- struct sockaddr net;
++ struct sockaddr_storage net;
+ unsigned int prefix_len;
+
+ if (!parse_network(s->c_str(), &net, &prefix_len)) {
+@@ -40,7 +40,7 @@ static const struct sockaddr *find_ip_in_subnet_list(CephContext *cct,
+ exit(1);
+ }
+
+- const struct sockaddr *found = find_ip_in_subnet(ifa, &net, prefix_len);
++ const struct sockaddr *found = find_ip_in_subnet(ifa, (struct sockaddr *) &net, prefix_len);
+ if (found)
+ return found;
+ }
+diff --git a/src/test/test_ipaddr.cc b/src/test/test_ipaddr.cc
+index 9a3d43e..5d3b76e 100644
+--- a/src/test/test_ipaddr.cc
++++ b/src/test/test_ipaddr.cc
+@@ -256,7 +256,7 @@ TEST(CommonIPAddr, TestV6_PrefixZero)
+
+ TEST(CommonIPAddr, ParseNetwork_Empty)
+ {
+- struct sockaddr network;
++ struct sockaddr_storage network;
+ unsigned int prefix_len;
+ bool ok;
+
+@@ -266,7 +266,7 @@ TEST(CommonIPAddr, ParseNetwork_Empty)
+
+ TEST(CommonIPAddr, ParseNetwork_Bad_Junk)
+ {
+- struct sockaddr network;
++ struct sockaddr_storage network;
+ unsigned int prefix_len;
+ bool ok;
+
+@@ -276,27 +276,27 @@ TEST(CommonIPAddr, ParseNetwork_Bad_Junk)
+
+ TEST(CommonIPAddr, ParseNetwork_Bad_SlashNum)
+ {
+- struct sockaddr network;
++ struct sockaddr_storage network;
+ unsigned int prefix_len;
+ bool ok;
+
+- ok = parse_network("/24", (struct sockaddr*)&network, &prefix_len);
++ ok = parse_network("/24", &network, &prefix_len);
+ ASSERT_EQ(ok, false);
+ }
+
+ TEST(CommonIPAddr, ParseNetwork_Bad_Slash)
+ {
+- struct sockaddr network;
++ struct sockaddr_storage network;
+ unsigned int prefix_len;
+ bool ok;
+
+- ok = parse_network("/", (struct sockaddr*)&network, &prefix_len);
++ ok = parse_network("/", &network, &prefix_len);
+ ASSERT_EQ(ok, false);
+ }
+
+ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4)
+ {
+- struct sockaddr network;
++ struct sockaddr_storage network;
+ unsigned int prefix_len;
+ bool ok;
+
+@@ -306,7 +306,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4)
+
+ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4Slash)
+ {
+- struct sockaddr network;
++ struct sockaddr_storage network;
+ unsigned int prefix_len;
+ bool ok;
+
+@@ -316,7 +316,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4Slash)
+
+ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashNegative)
+ {
+- struct sockaddr network;
++ struct sockaddr_storage network;
+ unsigned int prefix_len;
+ bool ok;
+
+@@ -326,7 +326,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashNegative)
+
+ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashJunk)
+ {
+- struct sockaddr network;
++ struct sockaddr_storage network;
+ unsigned int prefix_len;
+ bool ok;
+
+@@ -336,7 +336,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashJunk)
+
+ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6)
+ {
+- struct sockaddr network;
++ struct sockaddr_storage network;
+ unsigned int prefix_len;
+ bool ok;
+
+@@ -346,7 +346,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6)
+
+ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6Slash)
+ {
+- struct sockaddr network;
++ struct sockaddr_storage network;
+ unsigned int prefix_len;
+ bool ok;
+
+@@ -356,7 +356,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6Slash)
+
+ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashNegative)
+ {
+- struct sockaddr network;
++ struct sockaddr_storage network;
+ unsigned int prefix_len;
+ bool ok;
+
+@@ -366,7 +366,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashNegative)
+
+ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashJunk)
+ {
+- struct sockaddr network;
++ struct sockaddr_storage network;
+ unsigned int prefix_len;
+ bool ok;
+
+@@ -380,7 +380,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_0)
+ unsigned int prefix_len;
+ bool ok;
+
+- ok = parse_network("123.123.123.123/0", (struct sockaddr*)&network, &prefix_len);
++ ok = parse_network("123.123.123.123/0", (struct sockaddr_storage*)&network, &prefix_len);
+ ASSERT_EQ(ok, true);
+ ASSERT_EQ(0U, prefix_len);
+ ASSERT_EQ(AF_INET, network.sin_family);
+@@ -396,7 +396,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_13)
+ unsigned int prefix_len;
+ bool ok;
+
+- ok = parse_network("123.123.123.123/13", (struct sockaddr*)&network, &prefix_len);
++ ok = parse_network("123.123.123.123/13", (struct sockaddr_storage*)&network, &prefix_len);
+ ASSERT_EQ(ok, true);
+ ASSERT_EQ(13U, prefix_len);
+ ASSERT_EQ(AF_INET, network.sin_family);
+@@ -412,7 +412,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_32)
+ unsigned int prefix_len;
+ bool ok;
+
+- ok = parse_network("123.123.123.123/32", (struct sockaddr*)&network, &prefix_len);
++ ok = parse_network("123.123.123.123/32", (struct sockaddr_storage*)&network, &prefix_len);
+ ASSERT_EQ(ok, true);
+ ASSERT_EQ(32U, prefix_len);
+ ASSERT_EQ(AF_INET, network.sin_family);
+@@ -428,7 +428,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_42)
+ unsigned int prefix_len;
+ bool ok;
+
+- ok = parse_network("123.123.123.123/42", (struct sockaddr*)&network, &prefix_len);
++ ok = parse_network("123.123.123.123/42", (struct sockaddr_storage*)&network, &prefix_len);
+ ASSERT_EQ(ok, true);
+ ASSERT_EQ(42U, prefix_len);
+ ASSERT_EQ(AF_INET, network.sin_family);
+@@ -444,7 +444,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_0)
+ unsigned int prefix_len;
+ bool ok;
+
+- ok = parse_network("2001:1234:5678:90ab::dead:beef/0", (struct sockaddr*)&network, &prefix_len);
++ ok = parse_network("2001:1234:5678:90ab::dead:beef/0", (struct sockaddr_storage*)&network, &prefix_len);
+ ASSERT_EQ(ok, true);
+ ASSERT_EQ(0U, prefix_len);
+ ASSERT_EQ(AF_INET6, network.sin6_family);
+@@ -460,7 +460,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_67)
+ unsigned int prefix_len;
+ bool ok;
+
+- ok = parse_network("2001:1234:5678:90ab::dead:beef/67", (struct sockaddr*)&network, &prefix_len);
++ ok = parse_network("2001:1234:5678:90ab::dead:beef/67", (struct sockaddr_storage*)&network, &prefix_len);
+ ASSERT_EQ(ok, true);
+ ASSERT_EQ(67U, prefix_len);
+ ASSERT_EQ(AF_INET6, network.sin6_family);
+@@ -476,7 +476,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_128)
+ unsigned int prefix_len;
+ bool ok;
+
+- ok = parse_network("2001:1234:5678:90ab::dead:beef/128", (struct sockaddr*)&network, &prefix_len);
++ ok = parse_network("2001:1234:5678:90ab::dead:beef/128", (struct sockaddr_storage*)&network, &prefix_len);
+ ASSERT_EQ(ok, true);
+ ASSERT_EQ(128U, prefix_len);
+ ASSERT_EQ(AF_INET6, network.sin6_family);
+@@ -492,7 +492,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_9000)
+ unsigned int prefix_len;
+ bool ok;
+
+- ok = parse_network("2001:1234:5678:90ab::dead:beef/9000", (struct sockaddr*)&network, &prefix_len);
++ ok = parse_network("2001:1234:5678:90ab::dead:beef/9000", (struct sockaddr_storage*)&network, &prefix_len);
+ ASSERT_EQ(ok, true);
+ ASSERT_EQ(9000U, prefix_len);
+ ASSERT_EQ(AF_INET6, network.sin6_family);
+--
+2.1.4
+