|
|
@ -76,6 +76,22 @@ func RingOneAddress(region RegionID, zone ZoneID, node NodeID) (addr netip.Addr, |
|
|
|
return addr, err |
|
|
|
return addr, err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// RingTwoPrefix represents the services of a cluster
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// Ring 2 subnets are of the form `10.(region_id).0.0/20`,
|
|
|
|
|
|
|
|
// using the address space that would belong to the ring 3
|
|
|
|
|
|
|
|
// region_id 0.
|
|
|
|
|
|
|
|
func RingTwoPrefix(region RegionID) (cidr netip.Prefix, err error) { |
|
|
|
|
|
|
|
switch { |
|
|
|
|
|
|
|
case !region.Valid(): |
|
|
|
|
|
|
|
err = ErrOutOfRange(region, "region") |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
addr := unsafeRingTwoAddress(region, 0) |
|
|
|
|
|
|
|
cidr = netip.PrefixFrom(addr, RingTwoBits) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return cidr, err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// RingThreePrefix returns the subnet corresponding to
|
|
|
|
// RingThreePrefix returns the subnet corresponding to
|
|
|
|
// the pods of a cluster.
|
|
|
|
// the pods of a cluster.
|
|
|
|
//
|
|
|
|
//
|
|
|
@ -109,6 +125,15 @@ func unsafeRingOneAddress(region RegionID, zone ZoneID, node NodeID) netip.Addr |
|
|
|
return AddrFrom4(10, r, z<<4+n1, n0) |
|
|
|
return AddrFrom4(10, r, z<<4+n1, n0) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func unsafeRingTwoAddress(region RegionID, n uint) netip.Addr { |
|
|
|
|
|
|
|
r := uint(region) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
n1 := n >> 8 |
|
|
|
|
|
|
|
n0 := n >> 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return AddrFrom4(10, r, n1, n0) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func unsafeRingThreeAddress(region RegionID, n uint) netip.Addr { |
|
|
|
func unsafeRingThreeAddress(region RegionID, n uint) netip.Addr { |
|
|
|
r := uint(region) |
|
|
|
r := uint(region) |
|
|
|
|
|
|
|
|
|
|
|