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...
}
}
}
-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;
}
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(