]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test: osd: add a /0 cidr test for 32-bit... 44151/head
authorGreg Farnum <gfarnum@redhat.com>
Thu, 21 Apr 2022 00:16:22 +0000 (00:16 +0000)
committerGreg Farnum <gfarnum@redhat.com>
Thu, 21 Apr 2022 00:26:17 +0000 (00:26 +0000)
...and make the OSDMap handle it.

Signed-off-by: Greg Farnum <gfarnum@redhat.com>
src/osd/OSDMap.cc
src/test/osd/TestOSDMap.cc

index 992871e9c8c30c9d9c62edf39c44a375e6b84d3b..f5a19f9656c3344ab3be22997834e9a25822a238 100644 (file)
@@ -1398,7 +1398,11 @@ void OSDMap::range_bits::parse(const entity_addr_t& addr) {
     ipv6 = true;
   } else if (addr.is_ipv4()) {
     bits.ipv4.ip_32_bits = ntohl(addr.in4_addr().sin_addr.s_addr);
-    bits.ipv4.mask = UINT32_MAX << (32-addr.get_nonce());
+    if (addr.get_nonce() > 0) {
+      bits.ipv4.mask = UINT32_MAX << (32-addr.get_nonce());
+    } else {
+      bits.ipv4.mask = 0;
+    }
   } else {
     // uh...
   }
index d3733672ac7f9f4af22c8de0da1f645ff28e6eff..5435cefb5af8e18c2a1bf6e3223072e39a5f986a 100644 (file)
@@ -2215,7 +2215,7 @@ TEST_F(OSDMapTest, blocklisting_ranges) {
   }
 }
 
-TEST_F(OSDMapTest, blocklisting_weirder) {
+TEST_F(OSDMapTest, blocklisting_everything) {
   set_up_map(6); //whatever
   OSDMap::Incremental range_blocklist_inc(osdmap.get_epoch() + 1);
   entity_addr_t baddr;
@@ -2246,6 +2246,38 @@ TEST_F(OSDMapTest, blocklisting_weirder) {
     }
     ASSERT_TRUE(blocklisted);
   }
+
+  OSDMap::Incremental swap_blocklist_inc(osdmap.get_epoch()+1);
+  swap_blocklist_inc.old_range_blocklist.push_back(baddr);
+
+  entity_addr_t caddr;
+  caddr.parse("1.1.1.1/0");
+  caddr.type = entity_addr_t::TYPE_CIDR;
+  swap_blocklist_inc.new_range_blocklist[caddr] = ceph_clock_now();
+  osdmap.apply_incremental(swap_blocklist_inc);
+
+  for (const auto& a: ip_addrs) {
+    entity_addr_t addr;
+    addr.parse(a);
+    addr.set_type(entity_addr_t::TYPE_LEGACY);
+    if (!addr.is_ipv4()) continue;
+    bool blocklisted = osdmap.is_blocklisted(addr, g_ceph_context);
+    if (!blocklisted) {
+      cout << "erroneously not  blocklisted " << addr << std::endl;
+    }
+    ASSERT_TRUE(blocklisted);
+  }
+  for (const auto& a: unblocked_ip_addrs) {
+    entity_addr_t addr;
+    addr.parse(a);
+    addr.set_type(entity_addr_t::TYPE_LEGACY);
+    if (!addr.is_ipv4()) continue;
+    bool blocklisted = osdmap.is_blocklisted(addr, g_ceph_context);
+    if (!blocklisted) {
+      cout << "erroneously not  blocklisted " << addr << std::endl;
+    }
+    ASSERT_TRUE(blocklisted);
+  }
 }
 
 INSTANTIATE_TEST_SUITE_P(