#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(Serialize, Deserialize)]
pub struct InternetProtocolVersion6NetworkAddress
{
network: InternetProtocolVersion6HostAddress,
mask_bits: InternetProtocolVersion6MaskBits,
}
impl Display for InternetProtocolVersion6NetworkAddress
{
#[inline(always)]
fn fmt(&self, f: &mut Formatter) -> fmt::Result
{
write!(f, "{}/{}", self.network, self.mask_bits)
}
}
impl InternetProtocolNetworkAddress for InternetProtocolVersion6NetworkAddress
{
type HostAddress = InternetProtocolVersion6HostAddress;
type MaskBits = InternetProtocolVersion6MaskBits;
#[inline(always)]
fn network(&self) -> &Self::HostAddress
{
&self.network
}
#[inline(always)]
fn mask_bits(&self) -> Self::MaskBits
{
self.mask_bits
}
#[inline(always)]
fn contains(&self, internet_protocol_host_address: Self::HostAddress) -> bool
{
internet_protocol_host_address.as_network_endian() & (self.mask_bits as u128) == self.network.as_network_endian()
}
#[inline(always)]
fn new(network: Self::HostAddress, mask_bits: <<InternetProtocolVersion6NetworkAddress as InternetProtocolNetworkAddress>::HostAddress as InternetProtocolHostAddress>::MaskBits) -> Self
{
Self
{
network,
mask_bits,
}
}
}
impl InternetProtocolVersion6NetworkAddress
{
pub const GloballyRoutablePrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_3,
};
pub const GloballyRoutableRfc8215InternetProtocolVersion4AddressPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x00, 0x64, 0xFF, 0x9B, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_96,
};
pub const GloballyRoutableRfc6052InternetProtocolVersion4AddressPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x00, 0x64, 0xFF, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_96,
};
pub const MappedInternetProtocolVersion4AddressPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_96,
};
pub const DeprecatedEmbeddedInternetProtocolVersion4AddressPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_96,
};
pub const _6to4Prefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_16,
};
pub const DirectDelegationAs112ServicePrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x26, 0x20, 0x4f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_48,
};
pub const DiscardOnlyPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_64,
};
pub const UniqueLocalUnicastPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_7,
};
#[inline(always)]
pub const LinkLocalUnicastPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0xFE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_10,
};
#[inline(always)]
pub const LinkLocalUnicastPragmaticPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0xFE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_64,
};
pub const AssignedIetfProtocolPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_23,
};
pub const TeredoPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_32,
};
pub const BenchmarkingPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x02, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_48,
};
pub const AmtPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x02, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_32,
};
pub const As112V6Prefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x02, 0x01, 0x00, 0x04, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_48,
};
pub const EidSpaceForLispPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_32,
};
pub const DeprecatedOrchidPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x02, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_28,
};
pub const OrchidV2Prefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x02, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_28,
};
pub const DeprecatedSiteLocalUnicastPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0xFE, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_10,
};
pub const MulticastPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_8,
};
pub const MulticastSolicitedNodePrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_104,
};
pub const DocumentationPrefix: Self = Self
{
network: InternetProtocolVersion6HostAddress([0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
mask_bits: InternetProtocolVersion6MaskBits::_16,
};
}