]> git.proxmox.com Git - ceph.git/commitdiff
fix IPv6 monitor creation bug
authorFabian Grünbichler <f.gruenbichler@proxmox.com>
Thu, 23 Mar 2017 08:51:22 +0000 (09:51 +0100)
committerFabian Grünbichler <f.gruenbichler@proxmox.com>
Thu, 23 Mar 2017 09:27:41 +0000 (10:27 +0100)
patches/0001-update-changelog.patch
patches/0002-build-with-system-boost.patch
patches/0003-ceph-detect-init-support-Debian-Stretch.patch
patches/0005-use-sockaddr_storage-for-IPv6-compat.patch [new file with mode: 0644]
patches/series

index c7d2ac09cad015b046d4997a868d88dca7e992a2..ce4b0ac9e82927ee627c1ee935e8fe73478baaa4 100644 (file)
@@ -1,7 +1,7 @@
-From 41a07622e9a2cef8225cef36c04861d6de869e42 Mon Sep 17 00:00:00 2001
+From 2287b08bc8770ded5d63312b7bbf4104d2627b07 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>
 Date: Mon, 20 Mar 2017 09:12:50 +0100
-Subject: [PATCH 1/4] update changelog
+Subject: [PATCH 1/5] update changelog
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
index aab01cf6ea3750d0a5ee1bc70471dc39590d8f17..709d9fc5209bd5d39d03cdabae2bec9828529bf1 100644 (file)
@@ -1,7 +1,7 @@
 From 97f2e218d7978619617563afe313d5db717b63fd Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>
 Date: Mon, 20 Mar 2017 09:16:06 +0100
-Subject: [PATCH 2/4] build with system boost
+Subject: [PATCH 2/5] build with system boost
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
index 2b221ca084d345af1e13e30e096c2df44de503c6..d89a501a82502e44bb1733bb17275106d3561169 100644 (file)
@@ -1,7 +1,7 @@
 From 0b89f3a4f811281c7fbc76cdfc86c0e66cb65b90 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>
 Date: Tue, 21 Mar 2017 07:47:08 +0100
-Subject: [PATCH 3/4] ceph-detect-init: support Debian Stretch
+Subject: [PATCH 3/5] ceph-detect-init: support Debian Stretch
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
diff --git a/patches/0005-use-sockaddr_storage-for-IPv6-compat.patch b/patches/0005-use-sockaddr_storage-for-IPv6-compat.patch
new file mode 100644 (file)
index 0000000..c6da52e
--- /dev/null
@@ -0,0 +1,273 @@
+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
+
index 3bd0619a1a74e3ba67303f2c4c6ba53478463d03..2fd7705fd6b2751b599140f134f36bffa68fe9d0 100644 (file)
@@ -2,3 +2,4 @@
 0002-build-with-system-boost.patch
 0003-ceph-detect-init-support-Debian-Stretch.patch
 0004-enable-systemd-targets-by-default.patch
+0005-use-sockaddr_storage-for-IPv6-compat.patch