This is an automated email from the ASF dual-hosted git repository. bneradt pushed a commit to branch blend-fix in repository https://gitbox.apache.org/repos/asf/trafficserver-libswoc.git
commit e67581c6c4022bd299790e37944855d98de2eb7f Author: Alan M. Carroll <[email protected]> AuthorDate: Wed May 27 17:31:57 2020 -0500 IPSpace: fix for blend problem. --- code/include/swoc/DiscreteRange.h | 2 +- example/ex_netcompact.cc | 47 +++ example/ex_netdb.cc | 4 +- unit_tests/ex_ipspace_properties.cc | 2 +- unit_tests/test_ip.cc | 621 +++++++++++++++++++++++++++++++++++- 5 files changed, 671 insertions(+), 5 deletions(-) diff --git a/code/include/swoc/DiscreteRange.h b/code/include/swoc/DiscreteRange.h index 56e8e68..280e836 100644 --- a/code/include/swoc/DiscreteRange.h +++ b/code/include/swoc/DiscreteRange.h @@ -1307,12 +1307,12 @@ DiscreteSpace<METRIC, PAYLOAD>::blend(DiscreteSpace::range_type const& range, U if (same_color_p && n->max() >= remaining.max()) { return *this; // incoming range is completely covered by @a n in the same color, done. } - remaining.assign_min(++metric_type(n->max())); // going to fill up n->max(), clip target. if (!same_color_p) { n->assign_max(--metric_type(remaining.min())); // clip @a n down. this->insert_after(n, fill.get()); // add intersection node in different color. n = fill.release(); // skip to use new node as current node. } + remaining.assign_min(++metric_type(n->max())); // going to fill up n->max(), clip target. } else { // clear, don't fill. auto n_r = n->range(); // cache to avoid ordering requirements. if (n_r.max() > remaining.max()) { // overhang on the right, must split. diff --git a/example/ex_netcompact.cc b/example/ex_netcompact.cc index 6e62d60..0114df9 100644 --- a/example/ex_netcompact.cc +++ b/example/ex_netcompact.cc @@ -38,6 +38,8 @@ using W = swoc::LocalBufferWriter<512>; /// IPSpace for mapping address. Treating it as a set so use a no-data payload. using Space = swoc::IPSpace<std::monostate>; +void post_processing_performance_test(Space & space); + /// Process the @a content of a file in to @a space. unsigned process(Space& space, TextView content) { int line_no = 0; /// Track for error reporting. @@ -99,5 +101,50 @@ int main(int argc, char *argv[]) { , n_ranges, space.count(), n_nets , std::chrono::duration_cast<std::chrono::milliseconds>(delta).count()); + post_processing_performance_test(space); return 0; } + +void post_processing_performance_test(Space & space) { + using swoc::IP4Addr; + using swoc::IP6Addr; + + std::vector<IP4Addr> a4; + std::vector<IP6Addr> a6; + for ( auto && [ r, p] : space) { + if (r.is_ip4()) { + IP4Addr a = r.min().ip4(); + a4.push_back(a); + a4.push_back(--IP4Addr(a)); + a4.push_back(++IP4Addr(a)); + a = r.max().ip4(); + a4.push_back(a); + a4.push_back(--IP4Addr(a)); + a4.push_back(++IP4Addr(a)); + } else if (r.is_ip6()) { + IP6Addr a = r.min().ip6(); + a6.push_back(a); + a6.push_back(--IP6Addr(a)); + a6.push_back(++IP6Addr(a)); + a = r.max().ip6(); + a6.push_back(a); + a6.push_back(--IP6Addr(a)); + a6.push_back(++IP6Addr(a)); + } + } + auto t0 = std::chrono::system_clock::now(); + for ( auto const& addr : a4) { + [[maybe_unused]] auto spot = space.find(addr); + } + auto delta = std::chrono::system_clock::now() - t0; + std::cout << W().print("IPv4 time - {} addresses, {} ns total, {} ns per lookup\n", + a4.size(), delta.count(), delta.count() / a4.size()); + + t0 = std::chrono::system_clock::now(); + for ( auto const& addr : a6) { + [[maybe_unused]] auto spot = space.find(addr); + } + delta = std::chrono::system_clock::now() - t0; + std::cout << W().print("IPv6 time - {} addresses, {} ns total, {} ns per lookup\n", + a6.size(), delta.count(), delta.count() / a6.size()); +} diff --git a/example/ex_netdb.cc b/example/ex_netdb.cc index ffb563f..fc02e30 100644 --- a/example/ex_netdb.cc +++ b/example/ex_netdb.cc @@ -338,7 +338,7 @@ void post_processing_performance_test(Space & old_space) { } vz_delta = std::chrono::system_clock::now() - t0; std::cout << W().print("IPv6 time - {} addresses, {} ns total, {} ns per lookup\n", - a4.size(), vz_delta.count(), vz_delta.count() / a4.size()); + a6.size(), vz_delta.count(), vz_delta.count() / a6.size()); t0 = std::chrono::system_clock::now(); for ( auto const& addr : a4) { @@ -354,7 +354,7 @@ void post_processing_performance_test(Space & old_space) { } vz_delta = std::chrono::system_clock::now() - t0; std::cout << W().print("IPv6 time (pre-cleaning) - {} addresses, {} ns total, {} ns per lookup\n", - a4.size(), vz_delta.count(), vz_delta.count() / a4.size()); + a6.size(), vz_delta.count(), vz_delta.count() / a6.size()); } int main(int argc, char *argv[]) { diff --git a/unit_tests/ex_ipspace_properties.cc b/unit_tests/ex_ipspace_properties.cc index 327662e..d26eadb 100644 --- a/unit_tests/ex_ipspace_properties.cc +++ b/unit_tests/ex_ipspace_properties.cc @@ -499,7 +499,7 @@ public: protected: size_t size() const override { return SIZE; } bool parse(TextView token, MemSpan<std::byte> span) override; - bool needs_localized_token() const { return true; } + bool needs_localized_token() const override { return true; } }; // --- diff --git a/unit_tests/test_ip.cc b/unit_tests/test_ip.cc index 25f9384..c1f1480 100644 --- a/unit_tests/test_ip.cc +++ b/unit_tests/test_ip.cc @@ -317,7 +317,7 @@ TEST_CASE("IP ranges and networks", "[libswoc][ip][net][range]") { , "10.33.45.76/32"_tv }}; auto r4_net = r_4_nets.begin(); - for (auto const &net : r_4.networks()) { + for (auto net : r_4.networks()) { REQUIRE(r4_net != r_4_nets.end()); CHECK(*r4_net == net); ++r4_net; @@ -853,3 +853,622 @@ TEST_CASE("IPSpace docJJ", "[libswoc][ipspace][docJJ]") { ++idx; } } + +TEST_CASE("IPSpace Uthira", "[libswoc][ipspace][uthira]") { + struct Data { + TextView _pod; + int _rack = 0; + int _code = 0; + + bool operator== (Data const& that) const { + return _pod == that._pod && _rack == that._rack && _code == that._code; + } + }; + auto pod_blender = [] (Data &data, TextView const& p) { data._pod = p; return true; }; + auto rack_blender = [] (Data &data, int r) { data._rack = r; return true; }; + auto code_blender = [] (Data &data, int c) { data._code = c; return true; }; + swoc::IPSpace<Data> space; + // This is overkill, but no reason to not slam the code a lot. + // For the original bug that triggered this testing, only the first line is actually necessary + // to cause the problem. + TextView content = R"(10.215.88.12-10.215.88.12,pdb,9 + 10.215.88.13-10.215.88.13,pdb,9 + 10.215.88.0-10.215.88.1,pdb,9 + 10.215.88.2-10.215.88.3,pdb,9 + 10.215.88.4-10.215.88.5,pdb,9 + 10.215.88.6-10.215.88.7,pdb,9 + 10.215.88.8-10.215.88.9,pdb,9 + 10.215.88.10-10.215.88.11,pdb,9 + 10.214.128.0-10.214.128.63,pda,1 + 10.214.128.64-10.214.128.127,pda,1 + 10.214.128.128-10.214.128.191,pda,1 + 10.214.128.192-10.214.128.255,pda,1 + 10.214.129.0-10.214.129.63,pda,1 + 10.214.129.64-10.214.129.127,pda,1 + 10.214.129.128-10.214.129.191,pda,1 + 10.214.129.192-10.214.129.255,pda,1 + 10.214.130.0-10.214.130.63,pda,1 + 10.214.130.64-10.214.130.127,pda,1 + 10.214.130.128-10.214.130.191,pda,1 + 10.214.130.192-10.214.130.255,pda,1 + 10.214.131.0-10.214.131.63,pda,1 + 10.214.131.64-10.214.131.127,pda,1 + 10.214.131.128-10.214.131.191,pda,1 + 10.214.131.192-10.214.131.255,pda,1 + 10.214.132.0-10.214.132.63,pda,1 + 10.214.132.64-10.214.132.127,pda,1 + 10.214.132.128-10.214.132.191,pda,1 + 10.214.132.192-10.214.132.255,pda,1 + 10.214.133.0-10.214.133.63,pda,1 + 10.214.133.64-10.214.133.127,pda,1 + 10.214.133.128-10.214.133.191,pda,1 + 10.214.133.192-10.214.133.255,pda,1 + 10.214.134.0-10.214.134.63,pda,1 + 10.214.134.64-10.214.134.127,pda,1 + 10.214.134.128-10.214.134.191,pda,1 + 10.214.134.192-10.214.134.255,pda,1 + 10.214.135.0-10.214.135.63,pda,1 + 10.214.135.64-10.214.135.127,pda,1 + 10.214.135.128-10.214.135.191,pda,1 + 10.214.135.192-10.214.135.255,pda,1 + 10.214.140.0-10.214.140.63,pda,1 + 10.214.140.64-10.214.140.127,pda,1 + 10.214.140.128-10.214.140.191,pda,1 + 10.214.140.192-10.214.140.255,pda,1 + 10.214.141.0-10.214.141.63,pda,1 + 10.214.141.64-10.214.141.127,pda,1 + 10.214.141.128-10.214.141.191,pda,1 + 10.214.141.192-10.214.141.255,pda,1 + 10.214.145.0-10.214.145.63,pda,1 + 10.214.145.64-10.214.145.127,pda,1 + 10.214.145.128-10.214.145.191,pda,1 + 10.214.145.192-10.214.145.255,pda,1 + 10.214.146.0-10.214.146.63,pda,1 + 10.214.146.64-10.214.146.127,pda,1 + 10.214.146.128-10.214.146.191,pda,1 + 10.214.146.192-10.214.146.255,pda,1 + 10.214.147.0-10.214.147.63,pda,1 + 10.214.147.64-10.214.147.127,pda,1 + 10.214.147.128-10.214.147.191,pda,1 + 10.214.147.192-10.214.147.255,pda,1 + 10.214.152.0-10.214.152.63,pda,1 + 10.214.152.64-10.214.152.127,pda,1 + 10.214.152.128-10.214.152.191,pda,1 + 10.214.152.192-10.214.152.255,pda,1 + 10.214.153.0-10.214.153.63,pda,1 + 10.214.153.64-10.214.153.127,pda,1 + 10.214.153.128-10.214.153.191,pda,1 + 10.214.153.192-10.214.153.255,pda,1 + 10.214.154.0-10.214.154.63,pda,1 + 10.214.154.64-10.214.154.127,pda,1 + 10.214.154.128-10.214.154.191,pda,1 + 10.214.154.192-10.214.154.255,pda,1 + 10.214.155.0-10.214.155.63,pda,1 + 10.214.155.64-10.214.155.127,pda,1 + 10.214.155.128-10.214.155.191,pda,1 + 10.214.155.192-10.214.155.255,pda,1 + 10.214.156.0-10.214.156.63,pda,1 + 10.214.156.64-10.214.156.127,pda,1 + 10.214.156.128-10.214.156.191,pda,1 + 10.214.156.192-10.214.156.255,pda,1 + 10.214.157.0-10.214.157.63,pda,1 + 10.214.157.64-10.214.157.127,pda,1 + 10.214.157.128-10.214.157.191,pda,1 + 10.214.157.192-10.214.157.255,pda,1 + 10.214.158.0-10.214.158.63,pda,1 + 10.214.158.64-10.214.158.127,pda,1 + 10.214.158.128-10.214.158.191,pda,1 + 10.214.158.192-10.214.158.255,pda,1 + 10.214.164.0-10.214.164.63,pda,1 + 10.214.164.64-10.214.164.127,pda,1 + 10.214.167.0-10.214.167.63,pda,1 + 10.214.167.64-10.214.167.127,pda,1 + 10.214.167.128-10.214.167.191,pda,1 + 10.214.167.192-10.214.167.255,pda,1 + 10.214.168.0-10.214.168.63,pda,1 + 10.214.168.64-10.214.168.127,pda,1 + 10.214.168.128-10.214.168.191,pda,1 + 10.214.168.192-10.214.168.255,pda,1 + 10.214.169.0-10.214.169.63,pda,1 + 10.214.169.64-10.214.169.127,pda,1 + 10.214.169.128-10.214.169.191,pda,1 + 10.214.169.192-10.214.169.255,pda,1 + 10.214.172.0-10.214.172.63,pda,1 + 10.214.172.64-10.214.172.127,pda,1 + 10.214.172.128-10.214.172.191,pda,1 + 10.214.172.192-10.214.172.255,pda,1 + 10.214.173.0-10.214.173.63,pda,1 + 10.214.173.64-10.214.173.127,pda,1 + 10.214.173.128-10.214.173.191,pda,1 + 10.214.173.192-10.214.173.255,pda,1 + 10.214.219.128-10.214.219.191,pda,1 + 10.214.219.192-10.214.219.255,pda,1 + 10.214.245.0-10.214.245.63,pda,1 + 10.214.245.64-10.214.245.127,pda,1 + 10.215.64.0-10.215.64.63,pda,1 + 10.215.64.64-10.215.64.127,pda,1 + 10.215.64.128-10.215.64.191,pda,1 + 10.215.64.192-10.215.64.255,pda,1 + 10.215.65.128-10.215.65.191,pda,1 + 10.215.65.192-10.215.65.255,pda,1 + 10.215.66.0-10.215.66.63,pda,1 + 10.215.66.64-10.215.66.127,pda,1 + 10.215.66.128-10.215.66.191,pda,1 + 10.215.66.192-10.215.66.255,pda,1 + 10.215.67.0-10.215.67.63,pda,1 + 10.215.67.64-10.215.67.127,pda,1 + 10.215.71.0-10.215.71.63,pda,1 + 10.215.71.64-10.215.71.127,pda,1 + 10.215.71.128-10.215.71.191,pda,1 + 10.215.71.192-10.215.71.255,pda,1 + 10.215.72.0-10.215.72.63,pda,1 + 10.215.72.64-10.215.72.127,pda,1 + 10.215.72.128-10.215.72.191,pda,1 + 10.215.72.192-10.215.72.255,pda,1 + 10.215.80.0-10.215.80.63,pda,1 + 10.215.80.64-10.215.80.127,pda,1 + 10.215.80.128-10.215.80.191,pda,1 + 10.215.80.192-10.215.80.255,pda,1 + 10.215.81.0-10.215.81.63,pda,1 + 10.215.81.64-10.215.81.127,pda,1 + 10.215.81.128-10.215.81.191,pda,1 + 10.215.81.192-10.215.81.255,pda,1 + 10.215.82.0-10.215.82.63,pda,1 + 10.215.82.64-10.215.82.127,pda,1 + 10.215.82.128-10.215.82.191,pda,1 + 10.215.82.192-10.215.82.255,pda,1 + 10.215.84.0-10.215.84.63,pda,1 + 10.215.84.64-10.215.84.127,pda,1 + 10.215.84.128-10.215.84.191,pda,1 + 10.215.84.192-10.215.84.255,pda,1 + 10.215.88.64-10.215.88.127,pdb,1 + 10.215.88.128-10.215.88.191,pdb,1 + 10.215.88.192-10.215.88.255,pdb,1 + 10.215.89.0-10.215.89.63,pdb,1 + 10.215.89.64-10.215.89.127,pdb,1 + 10.215.89.128-10.215.89.191,pdb,1 + 10.215.89.192-10.215.89.255,pdb,1 + 10.215.90.0-10.215.90.63,pdb,1 + 10.215.90.64-10.215.90.127,pdb,1 + 10.215.90.128-10.215.90.191,pdb,1 + 10.215.100.0-10.215.100.63,pda,1 + 10.215.132.0-10.215.132.63,pda,1 + 10.215.132.64-10.215.132.127,pda,1 + 10.215.132.128-10.215.132.191,pda,1 + 10.215.132.192-10.215.132.255,pda,1 + 10.215.133.0-10.215.133.63,pda,1 + 10.215.133.64-10.215.133.127,pda,1 + 10.215.133.128-10.215.133.191,pda,1 + 10.215.133.192-10.215.133.255,pda,1 + 10.215.134.0-10.215.134.63,pda,1 + 10.215.134.64-10.215.134.127,pda,1 + 10.215.134.128-10.215.134.191,pda,1 + 10.215.134.192-10.215.134.255,pda,1 + 10.215.135.0-10.215.135.63,pda,1 + 10.215.135.64-10.215.135.127,pda,1 + 10.215.135.128-10.215.135.191,pda,1 + 10.215.135.192-10.215.135.255,pda,1 + 10.215.136.0-10.215.136.63,pda,1 + 10.215.136.64-10.215.136.127,pda,1 + 10.215.136.128-10.215.136.191,pda,1 + 10.215.136.192-10.215.136.255,pda,1 + 10.215.137.0-10.215.137.63,pda,1 + 10.215.137.64-10.215.137.127,pda,1 + 10.215.137.128-10.215.137.191,pda,1 + 10.215.137.192-10.215.137.255,pda,1 + 10.215.138.0-10.215.138.63,pda,1 + 10.215.138.64-10.215.138.127,pda,1 + 10.215.138.128-10.215.138.191,pda,1 + 10.215.138.192-10.215.138.255,pda,1 + 10.215.139.0-10.215.139.63,pda,1 + 10.215.139.64-10.215.139.127,pda,1 + 10.215.139.128-10.215.139.191,pda,1 + 10.215.139.192-10.215.139.255,pda,1 + 10.215.144.0-10.215.144.63,pda,1 + 10.215.144.64-10.215.144.127,pda,1 + 10.215.144.128-10.215.144.191,pda,1 + 10.215.144.192-10.215.144.255,pda,1 + 10.215.145.0-10.215.145.63,pda,1 + 10.215.145.64-10.215.145.127,pda,1 + 10.215.145.128-10.215.145.191,pda,1 + 10.215.145.192-10.215.145.255,pda,1 + 10.215.146.0-10.215.146.63,pda,1 + 10.215.146.64-10.215.146.127,pda,1 + 10.215.146.128-10.215.146.191,pda,1 + 10.215.146.192-10.215.146.255,pda,1 + 10.215.147.0-10.215.147.63,pda,1 + 10.215.147.64-10.215.147.127,pda,1 + 10.215.147.128-10.215.147.191,pda,1 + 10.215.147.192-10.215.147.255,pda,1 + 10.215.166.0-10.215.166.63,pda,1 + 10.215.166.64-10.215.166.127,pda,1 + 10.215.166.128-10.215.166.191,pda,1 + 10.215.166.192-10.215.166.255,pda,1 + 10.215.167.0-10.215.167.63,pda,1 + 10.215.167.64-10.215.167.127,pda,1 + 10.215.167.128-10.215.167.191,pda,1 + 10.215.167.192-10.215.167.255,pda,1 + 10.215.170.0-10.215.170.63,pda,1 + 10.215.170.64-10.215.170.127,pda,1 + 10.215.170.128-10.215.170.191,pda,1 + 10.215.170.192-10.215.170.255,pda,1 + 10.215.171.0-10.215.171.63,pda,1 + 10.215.171.64-10.215.171.127,pda,1 + 10.215.171.128-10.215.171.191,pda,1 + 10.215.171.192-10.215.171.255,pda,1 + 10.215.172.0-10.215.172.63,pda,1 + 10.215.172.64-10.215.172.127,pda,1 + 10.215.172.128-10.215.172.191,pda,1 + 10.215.172.192-10.215.172.255,pda,1 + 10.215.173.0-10.215.173.63,pda,1 + 10.215.173.64-10.215.173.127,pda,1 + 10.215.173.128-10.215.173.191,pda,1 + 10.215.173.192-10.215.173.255,pda,1 + 10.215.174.0-10.215.174.63,pda,1 + 10.215.174.64-10.215.174.127,pda,1 + 10.215.174.128-10.215.174.191,pda,1 + 10.215.174.192-10.215.174.255,pda,1 + 10.215.178.0-10.215.178.63,pda,1 + 10.215.178.64-10.215.178.127,pda,1 + 10.215.178.128-10.215.178.191,pda,1 + 10.215.178.192-10.215.178.255,pda,1 + 10.215.179.0-10.215.179.63,pda,1 + 10.215.179.64-10.215.179.127,pda,1 + 10.215.179.128-10.215.179.191,pda,1 + 10.215.179.192-10.215.179.255,pda,1 + 10.215.192.0-10.215.192.63,pda,1 + 10.215.192.64-10.215.192.127,pda,1 + 10.215.192.128-10.215.192.191,pda,1 + 10.215.192.192-10.215.192.255,pda,1 + 10.215.193.0-10.215.193.63,pda,1 + 10.215.193.64-10.215.193.127,pda,1 + 10.215.193.128-10.215.193.191,pda,1 + 10.215.193.192-10.215.193.255,pda,1 + 10.215.194.0-10.215.194.63,pda,1 + 10.215.194.64-10.215.194.127,pda,1 + 10.215.194.128-10.215.194.191,pda,1 + 10.215.194.192-10.215.194.255,pda,1 + 10.215.195.0-10.215.195.63,pda,1 + 10.215.195.64-10.215.195.127,pda,1 + 10.215.195.128-10.215.195.191,pda,1 + 10.215.195.192-10.215.195.255,pda,1 + 10.215.196.0-10.215.196.63,pda,1 + 10.215.196.64-10.215.196.127,pda,1 + 10.215.196.128-10.215.196.191,pda,1 + 10.215.196.192-10.215.196.255,pda,1 + 10.215.197.0-10.215.197.63,pda,1 + 10.215.197.64-10.215.197.127,pda,1 + 10.215.197.128-10.215.197.191,pda,1 + 10.215.197.192-10.215.197.255,pda,1 + 10.215.198.0-10.215.198.63,pda,1 + 10.215.198.64-10.215.198.127,pda,1 + 10.215.198.128-10.215.198.191,pda,1 + 10.215.198.192-10.215.198.255,pda,1 + 10.215.199.0-10.215.199.63,pda,1 + 10.215.199.64-10.215.199.127,pda,1 + 10.215.199.128-10.215.199.191,pda,1 + 10.215.199.192-10.215.199.255,pda,1 + 10.215.200.0-10.215.200.63,pda,1 + 10.215.200.64-10.215.200.127,pda,1 + 10.215.200.128-10.215.200.191,pda,1 + 10.215.200.192-10.215.200.255,pda,1 + 10.215.201.0-10.215.201.63,pda,1 + 10.215.201.64-10.215.201.127,pda,1 + 10.215.201.128-10.215.201.191,pda,1 + 10.215.201.192-10.215.201.255,pda,1 + 10.215.202.0-10.215.202.63,pda,1 + 10.215.202.64-10.215.202.127,pda,1 + 10.215.202.128-10.215.202.191,pda,1 + 10.215.202.192-10.215.202.255,pda,1 + 10.215.203.0-10.215.203.63,pda,1 + 10.215.203.64-10.215.203.127,pda,1 + 10.215.203.128-10.215.203.191,pda,1 + 10.215.203.192-10.215.203.255,pda,1 + 10.215.204.0-10.215.204.63,pda,1 + 10.215.204.64-10.215.204.127,pda,1 + 10.215.204.128-10.215.204.191,pda,1 + 10.215.204.192-10.215.204.255,pda,1 + 10.215.205.0-10.215.205.63,pda,1 + 10.215.205.64-10.215.205.127,pda,1 + 10.215.205.128-10.215.205.191,pda,1 + 10.215.205.192-10.215.205.255,pda,1 + 10.215.206.0-10.215.206.63,pda,1 + 10.215.206.64-10.215.206.127,pda,1 + 10.215.206.128-10.215.206.191,pda,1 + 10.215.206.192-10.215.206.255,pda,1 + 10.215.207.0-10.215.207.63,pda,1 + 10.215.207.64-10.215.207.127,pda,1 + 10.215.207.128-10.215.207.191,pda,1 + 10.215.207.192-10.215.207.255,pda,1 + 10.215.208.0-10.215.208.63,pda,1 + 10.215.208.64-10.215.208.127,pda,1 + 10.215.208.128-10.215.208.191,pda,1 + 10.215.208.192-10.215.208.255,pda,1 + 10.215.209.0-10.215.209.63,pda,1 + 10.215.209.64-10.215.209.127,pda,1 + 10.215.209.128-10.215.209.191,pda,1 + 10.215.209.192-10.215.209.255,pda,1 + 10.215.210.0-10.215.210.63,pda,1 + 10.215.210.64-10.215.210.127,pda,1 + 10.215.210.128-10.215.210.191,pda,1 + 10.215.210.192-10.215.210.255,pda,1 + 10.215.211.0-10.215.211.63,pda,1 + 10.215.211.64-10.215.211.127,pda,1 + 10.215.211.128-10.215.211.191,pda,1 + 10.215.211.192-10.215.211.255,pda,1 + 10.215.212.0-10.215.212.63,pda,1 + 10.215.212.64-10.215.212.127,pda,1 + 10.215.212.128-10.215.212.191,pda,1 + 10.215.212.192-10.215.212.255,pda,1 + 10.215.213.0-10.215.213.63,pda,1 + 10.215.213.64-10.215.213.127,pda,1 + 10.215.213.128-10.215.213.191,pda,1 + 10.215.213.192-10.215.213.255,pda,1 + 10.215.214.0-10.215.214.63,pda,1 + 10.215.214.64-10.215.214.127,pda,1 + 10.215.214.128-10.215.214.191,pda,1 + 10.215.214.192-10.215.214.255,pda,1 + 10.215.215.0-10.215.215.63,pda,1 + 10.215.215.64-10.215.215.127,pda,1 + 10.215.215.128-10.215.215.191,pda,1 + 10.215.215.192-10.215.215.255,pda,1 + 10.215.216.0-10.215.216.63,pda,1 + 10.215.216.64-10.215.216.127,pda,1 + 10.215.216.128-10.215.216.191,pda,1 + 10.215.216.192-10.215.216.255,pda,1 + 10.215.217.0-10.215.217.63,pda,1 + 10.215.217.64-10.215.217.127,pda,1 + 10.215.217.128-10.215.217.191,pda,1 + 10.215.217.192-10.215.217.255,pda,1 + 10.215.218.0-10.215.218.63,pda,1 + 10.215.218.64-10.215.218.127,pda,1 + 10.215.218.128-10.215.218.191,pda,1 + 10.215.218.192-10.215.218.255,pda,1 + 10.215.219.0-10.215.219.63,pda,1 + 10.215.219.64-10.215.219.127,pda,1 + 10.215.219.128-10.215.219.191,pda,1 + 10.215.219.192-10.215.219.255,pda,1 + 10.215.220.0-10.215.220.63,pda,1 + 10.215.220.64-10.215.220.127,pda,1 + 10.215.220.128-10.215.220.191,pda,1 + 10.215.220.192-10.215.220.255,pda,1 + 10.215.221.0-10.215.221.63,pda,1 + 10.215.221.64-10.215.221.127,pda,1 + 10.215.221.128-10.215.221.191,pda,1 + 10.215.221.192-10.215.221.255,pda,1 + 10.215.222.0-10.215.222.63,pda,1 + 10.215.222.64-10.215.222.127,pda,1 + 10.215.222.128-10.215.222.191,pda,1 + 10.215.222.192-10.215.222.255,pda,1 + 10.215.223.0-10.215.223.63,pda,1 + 10.215.223.64-10.215.223.127,pda,1 + 10.215.223.128-10.215.223.191,pda,1 + 10.215.223.192-10.215.223.255,pda,1 + 10.215.224.0-10.215.224.63,pda,1 + 10.215.224.64-10.215.224.127,pda,1 + 10.215.224.128-10.215.224.191,pda,1 + 10.215.224.192-10.215.224.255,pda,1 + 10.215.225.0-10.215.225.63,pda,1 + 10.215.225.64-10.215.225.127,pda,1 + 10.215.225.128-10.215.225.191,pda,1 + 10.215.225.192-10.215.225.255,pda,1 + 10.215.226.0-10.215.226.63,pda,1 + 10.215.226.64-10.215.226.127,pda,1 + 10.215.226.128-10.215.226.191,pda,1 + 10.215.226.192-10.215.226.255,pda,1 + 10.215.227.0-10.215.227.63,pda,1 + 10.215.227.64-10.215.227.127,pda,1 + 10.215.227.128-10.215.227.191,pda,1 + 10.215.227.192-10.215.227.255,pda,1 + 10.215.228.0-10.215.228.63,pda,1 + 10.215.228.64-10.215.228.127,pda,1 + 10.215.228.128-10.215.228.191,pda,1 + 10.215.228.192-10.215.228.255,pda,1 + 10.215.229.0-10.215.229.63,pda,1 + 10.215.229.64-10.215.229.127,pda,1 + 10.215.229.128-10.215.229.191,pda,1 + 10.215.229.192-10.215.229.255,pda,1 + 10.215.230.0-10.215.230.63,pda,1 + 10.215.230.64-10.215.230.127,pda,1 + 10.215.230.128-10.215.230.191,pda,1 + 10.215.230.192-10.215.230.255,pda,1 + 10.215.231.0-10.215.231.63,pda,1 + 10.215.231.64-10.215.231.127,pda,1 + 10.215.231.128-10.215.231.191,pda,1 + 10.215.231.192-10.215.231.255,pda,1 + 10.215.232.0-10.215.232.63,pda,1 + 10.215.232.64-10.215.232.127,pda,1 + 10.215.232.128-10.215.232.191,pda,1 + 10.215.232.192-10.215.232.255,pda,1 + 10.215.233.0-10.215.233.63,pda,1 + 10.215.233.64-10.215.233.127,pda,1 + 10.215.233.128-10.215.233.191,pda,1 + 10.215.233.192-10.215.233.255,pda,1 + 10.215.234.0-10.215.234.63,pda,1 + 10.215.234.64-10.215.234.127,pda,1 + 10.215.234.128-10.215.234.191,pda,1 + 10.215.234.192-10.215.234.255,pda,1 + 10.215.235.0-10.215.235.63,pda,1 + 10.215.235.64-10.215.235.127,pda,1 + 10.215.235.128-10.215.235.191,pda,1 + 10.215.235.192-10.215.235.255,pda,1 + 10.215.236.0-10.215.236.63,pda,1 + 10.215.236.64-10.215.236.127,pda,1 + 10.215.236.128-10.215.236.191,pda,1 + 10.215.236.192-10.215.236.255,pda,1 + 10.215.237.0-10.215.237.63,pda,1 + 10.215.237.64-10.215.237.127,pda,1 + 10.215.237.128-10.215.237.191,pda,1 + 10.215.237.192-10.215.237.255,pda,1 + 10.215.238.0-10.215.238.63,pda,1 + 10.215.238.64-10.215.238.127,pda,1 + 10.215.238.128-10.215.238.191,pda,1 + 10.215.238.192-10.215.238.255,pda,1 + 10.215.239.0-10.215.239.63,pda,1 + 10.215.239.64-10.215.239.127,pda,1 + 10.215.239.128-10.215.239.191,pda,1 + 10.215.239.192-10.215.239.255,pda,1 + 10.215.240.0-10.215.240.63,pda,1 + 10.215.240.64-10.215.240.127,pda,1 + 10.215.240.128-10.215.240.191,pda,1 + 10.215.240.192-10.215.240.255,pda,1 + 10.215.241.0-10.215.241.63,pda,1 + 10.215.241.64-10.215.241.127,pda,1 + 10.215.241.128-10.215.241.191,pda,1 + 10.215.241.192-10.215.241.255,pda,1 + 10.215.242.0-10.215.242.63,pda,1 + 10.215.242.64-10.215.242.127,pda,1 + 10.215.242.128-10.215.242.191,pda,1 + 10.215.242.192-10.215.242.255,pda,1 + 10.215.243.0-10.215.243.63,pda,1 + 10.215.243.64-10.215.243.127,pda,1 + 10.215.243.128-10.215.243.191,pda,1 + 10.215.243.192-10.215.243.255,pda,1 + 10.215.244.0-10.215.244.63,pda,1 + 10.215.244.64-10.215.244.127,pda,1 + 10.215.244.128-10.215.244.191,pda,1 + 10.215.244.192-10.215.244.255,pda,1 + 10.215.245.0-10.215.245.63,pda,1 + 10.215.245.64-10.215.245.127,pda,1 + 10.215.245.128-10.215.245.191,pda,1 + 10.215.245.192-10.215.245.255,pda,1 + 10.215.246.0-10.215.246.63,pda,1 + 10.215.246.64-10.215.246.127,pda,1 + 10.215.246.128-10.215.246.191,pda,1 + 10.215.246.192-10.215.246.255,pda,1 + 10.215.247.0-10.215.247.63,pda,1 + 10.215.247.64-10.215.247.127,pda,1 + 10.215.247.128-10.215.247.191,pda,1 + 10.215.247.192-10.215.247.255,pda,1 + 10.215.248.0-10.215.248.63,pda,1 + 10.215.248.64-10.215.248.127,pda,1 + 10.215.248.128-10.215.248.191,pda,1 + 10.215.248.192-10.215.248.255,pda,1 + 10.215.249.0-10.215.249.63,pda,1 + 10.215.249.64-10.215.249.127,pda,1 + 10.215.249.128-10.215.249.191,pda,1 + 10.215.249.192-10.215.249.255,pda,1 + 10.215.250.0-10.215.250.63,pda,1 + 10.215.250.64-10.215.250.127,pda,1 + 10.215.250.128-10.215.250.191,pda,1 + 10.215.250.192-10.215.250.255,pda,1 + 10.215.251.0-10.215.251.63,pda,1 + 10.215.251.64-10.215.251.127,pda,1 + 10.215.251.128-10.215.251.191,pda,1 + 10.215.251.192-10.215.251.255,pda,1 + 10.215.252.0-10.215.252.63,pda,1 + 10.215.252.64-10.215.252.127,pda,1 + 10.215.252.128-10.215.252.191,pda,1 + 10.215.252.192-10.215.252.255,pda,1 + 10.215.253.0-10.215.253.63,pda,1 + 10.215.253.64-10.215.253.127,pda,1 + 10.215.253.128-10.215.253.191,pda,1 + 10.215.253.192-10.215.253.255,pda,1 + 10.215.254.0-10.215.254.63,pda,1 + 10.215.254.64-10.215.254.127,pda,1 + 10.215.254.128-10.215.254.191,pda,1 + 10.215.254.192-10.215.254.255,pda,1 + 10.215.255.0-10.215.255.63,pda,1 + 10.215.255.64-10.215.255.127,pda,1 + 10.215.255.128-10.215.255.191,pda,1 + 10.215.255.192-10.215.255.255,pda,1 + 10.214.164.128-10.214.164.255,pda,1 + 10.214.219.0-10.214.219.127,pda,1 + 10.214.245.128-10.214.245.255,pda,1 + 10.215.65.0-10.215.65.127,pda,1 + 10.215.67.128-10.215.67.255,pda,1 + 10.215.73.0-10.215.73.127,pda,1 + 10.215.73.128-10.215.73.255,pda,1 + 10.215.78.0-10.215.78.127,pda,1 + 10.215.78.128-10.215.78.255,pda,1 + 10.215.79.0-10.215.79.127,pda,1 + 10.215.79.128-10.215.79.255,pda,1 + 10.214.136.0-10.214.136.255,pda,1 + 10.214.137.0-10.214.137.255,pda,1 + 10.214.138.0-10.214.138.255,pda,1 + 10.214.139.0-10.214.139.255,pda,1 + 10.214.142.0-10.214.142.255,pda,1 + 10.214.143.0-10.214.143.255,pda,1 + 10.214.144.0-10.214.144.255,pda,1 + 10.214.159.0-10.214.159.255,pda,1 + 10.214.160.0-10.214.160.255,pda,1 + 10.214.161.0-10.214.161.255,pda,1 + 10.214.162.0-10.214.162.255,pda,1 + 10.214.163.0-10.214.163.255,pda,1 + 10.214.165.0-10.214.165.255,pda,1 + 10.214.166.0-10.214.166.255,pda,1 + 10.214.170.0-10.214.170.255,pda,1 + 10.214.171.0-10.214.171.255,pda,1 + 10.214.218.0-10.214.218.255,pda,1 + 10.214.244.0-10.214.244.255,pda,1 + 10.215.70.0-10.215.70.255,pda,1 + 10.215.83.0-10.215.83.255,pda,1 + 10.215.85.0-10.215.85.255,pda,1 + 10.215.101.0-10.215.101.255,pda,1 + 10.215.104.0-10.215.104.255,pda,1 + 10.215.164.0-10.215.164.255,pda,1 + 10.215.165.0-10.215.165.255,pda,1 + 10.215.175.0-10.215.175.255,pda,1 + 10.214.148.0-10.214.149.255,pda,1 + 10.214.150.0-10.214.151.255,pda,1 + 10.214.174.0-10.214.175.255,pda,1 + 10.214.216.0-10.214.217.255,pda,1 + 10.214.246.0-10.214.247.255,pda,1 + 10.215.68.0-10.215.69.255,pda,1 + 10.215.74.0-10.215.75.255,pda,1 + 10.215.76.0-10.215.77.255,pda,1 + 10.215.96.0-10.215.97.255,pda,1 + 10.215.98.0-10.215.99.255,pda,1 + 10.215.102.0-10.215.103.255,pda,1 + 10.215.140.0-10.215.141.255,pda,1 + 10.215.142.0-10.215.143.255,pda,1 + 10.215.148.0-10.215.149.255,pda,1 + 10.215.150.0-10.215.151.255,pda,1 + 10.215.152.0-10.215.153.255,pda,1 + 10.215.154.0-10.215.155.255,pda,1 + 10.215.168.0-10.215.169.255,pda,1 + 10.215.176.0-10.215.177.255,pda,1 + 10.214.220.0-10.214.223.255,pda,1 + 10.214.240.0-10.214.243.255,pda,1 + 10.215.108.0-10.215.111.255,pda,1 + 10.215.128.0-10.215.131.255,pda,1 + 10.215.156.0-10.215.159.255,pda,1 + 10.215.160.0-10.215.163.255,pda,1 + 10.215.180.0-10.215.183.255,pda,1 + 10.214.208.0-10.214.215.255,pda,1 + 10.214.248.0-10.214.255.255,pda,1 + 10.215.184.0-10.215.191.255,pda,1 + 10.214.176.0-10.214.191.255,pda,1 + 10.214.192.0-10.214.207.255,pda,1 + 10.214.224.0-10.214.239.255,pda,1 + 10.215.112.0-10.215.127.255,pda,1 + 10.215.32.0-10.215.63.255,pda,9 + 10.214.0.0-10.214.127.255,pda,9 + )"; + + // Need to have the working ranges covered first, before they're blended. + space.blend(IP4Range{"10.214.0.0/15"}, 1, code_blender); + // Now blend the working ranges over the base range. + while (content) { + auto line = content.take_prefix_at('\n').trim_if(&isspace); + if (line.empty()) { + continue; + } + IP4Range range{line.take_prefix_at(',')}; + auto pod = line.take_prefix_at(','); + int r = swoc::svtoi(line.take_prefix_at(',')); + space.blend(range, pod, pod_blender); + space.blend(range, r, rack_blender); + if (space.count() > 2) { + auto spot = space.begin(); + auto [ r1, p1 ] = *++spot; + auto [ r2, p2 ] = *++spot; + REQUIRE(r1.max() < r2.min()); // This is supposed to be an invariant! Make sure. + auto back = space.end(); + auto [ br1, bp1 ] = *--back; + auto [ br2, bp2 ] = *--back; + REQUIRE(br2.max() < br1.min()); // This is supposed to be an invariant! Make sure. + } + } +} +
