update cloudcidrs API to be multicloud

This commit is contained in:
Benjamin Elder 2023-02-07 18:05:22 -08:00
parent 5b92dce6f2
commit 4ffa1a4f7a
9 changed files with 91 additions and 120 deletions

View File

@ -23,6 +23,7 @@ import (
)
func TestRegionToAWSRegionToS3URL(t *testing.T) {
// TODO: replace / fix this
// ensure all known regions return a configured bucket
regions := cloudcidrs.Regions()
for region := range regions {

View File

@ -73,7 +73,7 @@ func makeV2Handler(rc RegistryConfig, blobs blobChecker) func(w http.ResponseWri
// matches blob requests, captures the requested blob hash
reBlob := regexp.MustCompile("^/v2/.*/blobs/sha256:([0-9a-f]{64})$")
// initialize map of clientIP to AWS region
regionMapper := cloudcidrs.NewAWSRegionMapper()
regionMapper := cloudcidrs.NewIPMapper()
// capture these in a http handler lambda
return func(w http.ResponseWriter, r *http.Request) {
rPath := r.URL.Path
@ -121,9 +121,9 @@ func makeV2Handler(rc RegistryConfig, blobs blobChecker) func(w http.ResponseWri
}
// check if client is known to be coming from an AWS region
awsRegion, ipIsKnown := regionMapper.GetIP(clientIP)
if !ipIsKnown {
// no region match, redirect to main upstream registry
ipInfo, ipIsKnown := regionMapper.GetIP(clientIP)
if !ipIsKnown || ipInfo.Cloud != cloudcidrs.AWS {
// no AWS region match, redirect to main upstream registry
redirectURL := upstreamRedirectURL(rc, rPath)
klog.V(2).InfoS("redirecting blob request to upstream registry", "path", rPath, "redirect", redirectURL)
http.Redirect(w, r, redirectURL, http.StatusTemporaryRedirect)
@ -131,7 +131,7 @@ func makeV2Handler(rc RegistryConfig, blobs blobChecker) func(w http.ResponseWri
}
// check if blob is available in our S3 bucket for the region
bucketURL := awsRegionToS3URL(awsRegion)
bucketURL := awsRegionToS3URL(ipInfo.Region)
// this matches GCR's GCS layout, which we will use for other buckets
blobURL := bucketURL + "/containers/images/sha256%3A" + hash
if blobs.BlobExists(blobURL, bucketURL, hash) {

View File

@ -46,8 +46,10 @@ import (
"net/netip"
)
const AWS = "AWS"
// regionToRanges contains a preparsed map of AWS regions to netip.Prefix
var regionToRanges = map[string][]netip.Prefix{
var regionToRanges = map[IPInfo][]netip.Prefix{
`
func generateRangesGo(w io.Writer, rtp regionsToPrefixes) error {
@ -64,7 +66,7 @@ func generateRangesGo(w io.Writer, rtp regionsToPrefixes) error {
sort.Strings(regions)
for _, region := range regions {
prefixes := rtp[region]
if _, err := fmt.Fprintf(w, "\t%q: {\n", region); err != nil {
if _, err := fmt.Fprintf(w, "\t{Cloud: AWS, Region: %q}: {\n", region); err != nil {
return err
}
for _, prefix := range prefixes {

View File

@ -104,23 +104,25 @@ limitations under the License.
// File generated by ranges2go DO NOT EDIT
package aws
package cloudcidrs
import (
"net/netip"
)
const AWS = "AWS"
// regionToRanges contains a preparsed map of AWS regions to netip.Prefix
var regionToRanges = map[string][]netip.Prefix{
"ap-northeast-2": {
var regionToRanges = map[IPInfo][]netip.Prefix{
{Cloud: AWS, Region: "ap-northeast-2"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{3, 5, 140, 0}), 22),
},
"eu-south-1": {
{Cloud: AWS, Region: "eu-south-1"}: {
netip.PrefixFrom(netip.AddrFrom16([16]byte{42, 5, 208, 58, 160, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0}), 56),
netip.PrefixFrom(netip.AddrFrom16([16]byte{42, 5, 208, 58, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}), 56),
netip.PrefixFrom(netip.AddrFrom16([16]byte{42, 5, 208, 122, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}), 40),
},
"me-south-1": {
{Cloud: AWS, Region: "me-south-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{52, 95, 174, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{69, 107, 7, 136}), 29),
},

View File

@ -1,5 +1,5 @@
/*
Copyright 2022 The Kubernetes Authors.
Copyright 2023 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,12 +16,7 @@ limitations under the License.
package cloudcidrs
// Regions returns a set-like map of all known AWS regions
// based on the same underlying data as the rest of this package
func Regions() map[string]bool {
regions := map[string]bool{}
for region := range regionToRanges {
regions[region] = true
}
return regions
type IPInfo struct {
Cloud string
Region string
}

View File

@ -18,13 +18,13 @@ package cloudcidrs
import "k8s.io/registry.k8s.io/pkg/net/cidrs"
// NewAWSRegionMapper returns a new cidrs.IPMapper[string] mapping from
// IP to AWS regions
func NewAWSRegionMapper() cidrs.IPMapper[string] {
t := cidrs.NewTrieMap[string]()
for prefix, cidrs := range regionToRanges {
// NewIPMapper returns cidrs.IPMapper populated with cloud region info
// for the clouds we have resources for, currently GCP and AWS
func NewIPMapper() cidrs.IPMapper[IPInfo] {
t := cidrs.NewTrieMap[IPInfo]()
for info, cidrs := range regionToRanges {
for _, cidr := range cidrs {
t.Insert(cidr, prefix)
t.Insert(cidr, info)
}
}
return t

View File

@ -50,17 +50,17 @@ var testCasesIPv6 = []testCase{
// append may re-use the first existing slice ...
var allTestCases = append(append([]testCase{}, testCasesIPv4...), testCasesIPv6...)
func TestNewAWSRegionMapper(t *testing.T) {
mapper := NewAWSRegionMapper()
func TestNewIPMapper(t *testing.T) {
mapper := NewIPMapper()
for i := range allTestCases {
tc := allTestCases[i]
t.Run(tc.Addr.String(), func(t *testing.T) {
region, matched := mapper.GetIP(tc.Addr)
r, matched := mapper.GetIP(tc.Addr)
expectMatched := tc.ExpectedRegion != ""
if matched != expectMatched || region != tc.ExpectedRegion {
if matched != expectMatched || r.Region != tc.ExpectedRegion {
t.Fatalf(
"result does not match for %v, got: (%q, %t) expected: (%q, %t)",
tc.Addr, region, matched, tc.ExpectedRegion, expectMatched,
tc.Addr, r.Region, matched, tc.ExpectedRegion, expectMatched,
)
}
})
@ -69,15 +69,15 @@ func TestNewAWSRegionMapper(t *testing.T) {
/* for benchmarking memory / init time */
func BenchmarkNewAWSRegionMapper(b *testing.B) {
func BenchmarkNewIPMapper(b *testing.B) {
for n := 0; n < b.N; n++ {
mapper := NewAWSRegionMapper()
mapper := NewIPMapper()
// get any address just to prevent mapper being optimized out
mapper.GetIP(allTestCases[0].Addr)
}
}
func BenchmarkNewAWSegionBruteForce(b *testing.B) {
func BenchmarkNewegionBruteForce(b *testing.B) {
for n := 0; n < b.N; n++ {
mapper := cidrs.NewBruteForceMapper(regionToRanges)
// get any address just to prevent mapper being optimized out
@ -87,61 +87,61 @@ func BenchmarkNewAWSegionBruteForce(b *testing.B) {
/* for benchmarking matching time */
func BenchmarkAWSRegionTrieMapIPv4(b *testing.B) {
mapper := NewAWSRegionMapper()
func BenchmarkRegionTrieMapIPv4(b *testing.B) {
mapper := NewIPMapper()
for n := 0; n < b.N; n++ {
tc := testCasesIPv4[n%len(testCasesIPv4)]
region, matched := mapper.GetIP(tc.Addr)
r, matched := mapper.GetIP(tc.Addr)
expectMatched := tc.ExpectedRegion != ""
if matched != expectMatched || region != tc.ExpectedRegion {
if matched != expectMatched || r.Region != tc.ExpectedRegion {
b.Fatalf(
"result does not match for %v, got: (%q, %t) expected: (%q, %t)",
tc.Addr, region, matched, tc.ExpectedRegion, expectMatched,
tc.Addr, r.Region, matched, tc.ExpectedRegion, expectMatched,
)
}
}
}
func BenchmarkAWSRegionTrieMapIPv6(b *testing.B) {
mapper := NewAWSRegionMapper()
func BenchmarkRegionTrieMapIPv6(b *testing.B) {
mapper := NewIPMapper()
for n := 0; n < b.N; n++ {
tc := testCasesIPv6[n%len(testCasesIPv6)]
region, matched := mapper.GetIP(tc.Addr)
r, matched := mapper.GetIP(tc.Addr)
expectMatched := tc.ExpectedRegion != ""
if matched != expectMatched || region != tc.ExpectedRegion {
if matched != expectMatched || r.Region != tc.ExpectedRegion {
b.Fatalf(
"result does not match for %v, got: (%q, %t) expected: (%q, %t)",
tc.Addr, region, matched, tc.ExpectedRegion, expectMatched,
tc.Addr, r.Region, matched, tc.ExpectedRegion, expectMatched,
)
}
}
}
func BenchmarkAWSRegionBruteForceIPv4(b *testing.B) {
func BenchmarkRegionBruteForceIPv4(b *testing.B) {
mapper := cidrs.NewBruteForceMapper(regionToRanges)
for n := 0; n < b.N; n++ {
tc := testCasesIPv4[n%len(testCasesIPv4)]
region, matched := mapper.GetIP(tc.Addr)
r, matched := mapper.GetIP(tc.Addr)
expectMatched := tc.ExpectedRegion != ""
if matched != expectMatched || region != tc.ExpectedRegion {
if matched != expectMatched || r.Region != tc.ExpectedRegion {
b.Fatalf(
"result does not match for %v, got: (%q, %t) expected: (%q, %t)",
tc.Addr, region, matched, tc.ExpectedRegion, expectMatched,
tc.Addr, r.Region, matched, tc.ExpectedRegion, expectMatched,
)
}
}
}
func BenchmarkAWSRegionBruteForceIPv6(b *testing.B) {
func BenchmarkRegionBruteForceIPv6(b *testing.B) {
mapper := cidrs.NewBruteForceMapper(regionToRanges)
for n := 0; n < b.N; n++ {
tc := testCasesIPv6[n%len(testCasesIPv6)]
region, matched := mapper.GetIP(tc.Addr)
r, matched := mapper.GetIP(tc.Addr)
expectMatched := tc.ExpectedRegion != ""
if matched != expectMatched || region != tc.ExpectedRegion {
if matched != expectMatched || r.Region != tc.ExpectedRegion {
b.Fatalf(
"result does not match for %v, got: (%q, %t) expected: (%q, %t)",
tc.Addr, region, matched, tc.ExpectedRegion, expectMatched,
tc.Addr, r.Region, matched, tc.ExpectedRegion, expectMatched,
)
}
}

View File

@ -1,31 +0,0 @@
/*
Copyright 2022 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cloudcidrs
import "testing"
func TestRegions(t *testing.T) {
someWellKnownRegions := []string{
"us-east-1",
}
regions := Regions()
for _, region := range someWellKnownRegions {
if !regions[region] {
t.Fatalf("expected well-known region %q to be in regions but it was not", region)
}
}
}

View File

@ -22,9 +22,11 @@ import (
"net/netip"
)
const AWS = "AWS"
// regionToRanges contains a preparsed map of AWS regions to netip.Prefix
var regionToRanges = map[string][]netip.Prefix{
"GLOBAL": {
var regionToRanges = map[IPInfo][]netip.Prefix{
{Cloud: AWS, Region: "GLOBAL"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{108, 156, 0, 0}), 14),
netip.PrefixFrom(netip.AddrFrom4([4]byte{116, 129, 226, 0}), 25),
netip.PrefixFrom(netip.AddrFrom4([4]byte{116, 129, 226, 128}), 26),
@ -267,7 +269,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 84, 0, 0}), 16),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 86, 0, 0}), 16),
},
"af-south-1": {
{Cloud: AWS, Region: "af-south-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 244, 121, 0}), 26),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 244, 121, 196}), 30),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 244, 122, 0}), 24),
@ -379,7 +381,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 78, 144, 0}), 21),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 78, 152, 0}), 22),
},
"ap-east-1": {
{Cloud: AWS, Region: "ap-east-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 248, 48, 0}), 21),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 248, 56, 0}), 22),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 248, 60, 0}), 22),
@ -491,7 +493,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 241, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 96, 0}), 24),
},
"ap-northeast-1": {
{Cloud: AWS, Region: "ap-northeast-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{103, 4, 8, 0}), 21),
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 136}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 137}), 32),
@ -777,7 +779,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 82, 170, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 84, 0}), 22),
},
"ap-northeast-2": {
{Cloud: AWS, Region: "ap-northeast-2"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 119}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 124, 0, 0}), 16),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 124, 145, 104}), 29),
@ -942,7 +944,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 78, 188, 0}), 22),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 82, 168, 0}), 24),
},
"ap-northeast-3": {
{Cloud: AWS, Region: "ap-northeast-3"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 115}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 208, 0, 0}), 16),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 208, 131, 0}), 29),
@ -1054,7 +1056,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 243, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 100, 0}), 24),
},
"ap-south-1": {
{Cloud: AWS, Region: "ap-south-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 86}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 91}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 126, 0, 0}), 15),
@ -1284,7 +1286,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 72, 0}), 22),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 76, 0}), 22),
},
"ap-south-2": {
{Cloud: AWS, Region: "ap-south-2"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 123}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 124}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 125}), 32),
@ -1353,7 +1355,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 87, 4, 0}), 22),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 87, 8, 0}), 21),
},
"ap-southeast-1": {
{Cloud: AWS, Region: "ap-southeast-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{122, 248, 192, 0}), 18),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 212, 0, 0}), 15),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 212, 132, 0}), 22),
@ -1659,7 +1661,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 102, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 87, 0, 0}), 22),
},
"ap-southeast-2": {
{Cloud: AWS, Region: "ap-southeast-2"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 87}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 88}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 210, 0, 0}), 15),
@ -1862,7 +1864,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 120, 0}), 22),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 80, 0}), 22),
},
"ap-southeast-3": {
{Cloud: AWS, Region: "ap-southeast-3"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 102}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 103}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 104}), 32),
@ -1958,7 +1960,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 78, 238, 255}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 78, 240, 0}), 20),
},
"ap-southeast-4": {
{Cloud: AWS, Region: "ap-southeast-4"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 131}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 132}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 59, 133}), 32),
@ -2023,11 +2025,11 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{70, 232, 88, 0}), 22),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 151, 72, 0}), 21),
},
"ap-southeast-6": {
{Cloud: AWS, Region: "ap-southeast-6"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{43, 208, 0, 0}), 15),
netip.PrefixFrom(netip.AddrFrom4([4]byte{43, 210, 0, 0}), 15),
},
"ca-central-1": {
{Cloud: AWS, Region: "ca-central-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 78, 128}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 78, 160}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 81, 0}), 27),
@ -2188,7 +2190,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 79, 34, 0}), 23),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 82, 174, 0}), 24),
},
"ca-west-1": {
{Cloud: AWS, Region: "ca-west-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{15, 177, 100, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{15, 190, 48, 0}), 20),
netip.PrefixFrom(netip.AddrFrom4([4]byte{15, 190, 8, 0}), 22),
@ -2199,7 +2201,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{40, 178, 0, 0}), 15),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 151, 168, 0}), 21),
},
"cn-north-1": {
{Cloud: AWS, Region: "cn-north-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{140, 179, 0, 0}), 16),
netip.PrefixFrom(netip.AddrFrom4([4]byte{140, 179, 1, 64}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{140, 179, 1, 96}), 27),
@ -2312,7 +2314,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{71, 136, 64, 0}), 18),
netip.PrefixFrom(netip.AddrFrom4([4]byte{71, 137, 0, 0}), 18),
},
"cn-northwest-1": {
{Cloud: AWS, Region: "cn-northwest-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{161, 189, 148, 0}), 23),
netip.PrefixFrom(netip.AddrFrom4([4]byte{161, 189, 23, 0}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{161, 189, 23, 32}), 27),
@ -2423,7 +2425,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{69, 235, 162, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{69, 235, 170, 0}), 23),
},
"eu-central-1": {
{Cloud: AWS, Region: "eu-central-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 248, 97, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 33, 0}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 33, 128}), 27),
@ -2747,7 +2749,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 82, 163, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 99, 0}), 24),
},
"eu-central-2": {
{Cloud: AWS, Region: "eu-central-2"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 39, 0}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 39, 128}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 39, 160}), 27),
@ -2808,7 +2810,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{70, 232, 96, 0}), 20),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 151, 80, 0}), 21),
},
"eu-north-1": {
{Cloud: AWS, Region: "eu-north-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 248, 122, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 26, 128}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 26, 160}), 27),
@ -2942,7 +2944,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 137, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 246, 0}), 24),
},
"eu-south-1": {
{Cloud: AWS, Region: "eu-south-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 21, 160}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 46, 64}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 46, 96}), 27),
@ -3112,7 +3114,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 159, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 245, 0}), 24),
},
"eu-south-2": {
{Cloud: AWS, Region: "eu-south-2"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 38, 0}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 38, 128}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 38, 160}), 27),
@ -3178,7 +3180,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 55, 27}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 55, 3}), 32),
},
"eu-west-1": {
{Cloud: AWS, Region: "eu-west-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{108, 128, 160, 0}), 23),
netip.PrefixFrom(netip.AddrFrom4([4]byte{108, 128, 162, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 248, 113, 0}), 24),
@ -3552,7 +3554,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 82, 162, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 87, 32, 0}), 22),
},
"eu-west-2": {
{Cloud: AWS, Region: "eu-west-2"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 248, 120, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 18, 128}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 18, 160}), 27),
@ -3864,7 +3866,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 249, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 82, 169, 0}), 24),
},
"eu-west-3": {
{Cloud: AWS, Region: "eu-west-3"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 36, 160}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 36, 64}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 36, 96}), 27),
@ -3998,7 +4000,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 248, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 82, 161, 0}), 24),
},
"il-central-1": {
{Cloud: AWS, Region: "il-central-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 64, 192}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 64, 224}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 65, 0}), 27),
@ -4055,7 +4057,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{54, 239, 1, 240}), 28),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 151, 152, 0}), 21),
},
"me-central-1": {
{Cloud: AWS, Region: "me-central-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 34, 128}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 34, 160}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 35, 0}), 27),
@ -4117,7 +4119,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 16, 0}), 21),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 24, 0}), 22),
},
"me-south-1": {
{Cloud: AWS, Region: "me-south-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 15, 128}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 15, 160}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 20, 0}), 27),
@ -4222,7 +4224,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 82, 144, 0}), 21),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 82, 152, 0}), 22),
},
"sa-east-1": {
{Cloud: AWS, Region: "sa-east-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 248, 114, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 14, 192}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 14, 224}), 27),
@ -4453,7 +4455,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 234, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 82, 164, 0}), 24),
},
"us-east-1": {
{Cloud: AWS, Region: "us-east-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 56, 11}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{104, 255, 56, 12}), 32),
netip.PrefixFrom(netip.AddrFrom4([4]byte{107, 20, 0, 0}), 14),
@ -5605,7 +5607,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 64, 0}), 21),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 88, 0}), 21),
},
"us-east-2": {
{Cloud: AWS, Region: "us-east-2"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{108, 166, 248, 0}), 21),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 184, 0, 0}), 13),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 248, 111, 0}), 24),
@ -5939,7 +5941,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 78, 176, 0}), 21),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 78, 216, 0}), 22),
},
"us-gov-east-1": {
{Cloud: AWS, Region: "us-gov-east-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{108, 175, 60, 0}), 22),
netip.PrefixFrom(netip.AddrFrom4([4]byte{157, 152, 0, 0}), 16),
netip.PrefixFrom(netip.AddrFrom4([4]byte{18, 252, 0, 0}), 16),
@ -5995,7 +5997,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 151, 96, 0}), 21),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 183, 0}), 24),
},
"us-gov-west-1": {
{Cloud: AWS, Region: "us-gov-west-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{108, 175, 56, 0}), 22),
netip.PrefixFrom(netip.AddrFrom4([4]byte{15, 200, 0, 0}), 16),
netip.PrefixFrom(netip.AddrFrom4([4]byte{15, 200, 141, 0}), 25),
@ -6070,7 +6072,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{96, 127, 0, 0}), 17),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 77, 184, 0}), 24),
},
"us-west-1": {
{Cloud: AWS, Region: "us-west-1"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 21, 64}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 21, 96}), 27),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 34, 32, 0}), 27),
@ -6583,7 +6585,7 @@ var regionToRanges = map[string][]netip.Prefix{
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 97, 0}), 24),
netip.PrefixFrom(netip.AddrFrom4([4]byte{99, 83, 98, 0}), 24),
},
"us-west-2": {
{Cloud: AWS, Region: "us-west-2"}: {
netip.PrefixFrom(netip.AddrFrom4([4]byte{108, 166, 224, 0}), 21),
netip.PrefixFrom(netip.AddrFrom4([4]byte{108, 166, 240, 0}), 21),
netip.PrefixFrom(netip.AddrFrom4([4]byte{13, 248, 112, 0}), 24),