package rings import "net/netip" // RingZeroPrefix represents the backbone that connects gateways // of the different Ring 1 networks. // // The ring 0 network corresponds to what would be ring 2 for region_id 0. // 10.0.0.0-10.0.255.255 func RingZeroPrefix(region RegionID, zone ZoneID) (cidr netip.Prefix, err error) { switch { case !region.Valid(): err = ErrOutOfRange(region, "region") case !zone.Valid(): err = ErrOutOfRange(zone, "zone") default: addr := AddrFrom4(10, 0, uint(region)<<4+uint(zone), 0) cidr = netip.PrefixFrom(addr, RingZeroBits) } return cidr, err } // RingZeroAddress returns a Ring 0 address for a particular node. // // A ring 0 address looks like 10.0.(region_id << 4 + zone_id).(node_id)/20 func RingZeroAddress(region RegionID, zone ZoneID, node NodeID) (addr netip.Addr, err error) { switch { case !region.Valid(): err = ErrOutOfRange(region, "region") case !zone.Valid(): err = ErrOutOfRange(zone, "zone") case !node.ValidZero(): err = ErrOutOfRange(node, "node") default: addr = AddrFrom4(10, 0, uint(region)<<4+uint(zone), uint(node)) } return addr, err }