#[repr(transparent)]pub struct IpHint<T>(pub Vec<T>);
Expand description
RFC 9460 SVCB and HTTPS Resource Records, Nov 2023
7.3. "ipv4hint" and "ipv6hint"
The "ipv4hint" and "ipv6hint" keys convey IP addresses that clients
MAY use to reach the service. If A and AAAA records for TargetName
are locally available, the client SHOULD ignore these hints.
Otherwise, clients SHOULD perform A and/or AAAA queries for
TargetName as in Section 3, and clients SHOULD use the IP address in
those responses for future connections. Clients MAY opt to terminate
any connections using the addresses in hints and instead switch to
the addresses in response to the TargetName query. Failure to use A
and/or AAAA response addresses could negatively impact load balancing
or other geo-aware features and thereby degrade client performance.
The presentation value SHALL be a comma-separated list
(Appendix A.1) of one or more IP addresses of the appropriate family
in standard textual format [RFC5952]. To enable simpler parsing,
this SvcParamValue MUST NOT contain escape sequences.
The wire format for each parameter is a sequence of IP addresses in
network byte order (for the respective address family). Like an A or
AAAA RRSet, the list of addresses represents an unordered collection,
and clients SHOULD pick addresses to use in a random order. An empty
list of addresses is invalid.
When selecting between IPv4 and IPv6 addresses to use, clients may
use an approach such as Happy Eyeballs [HappyEyeballsV2]. When only
"ipv4hint" is present, NAT64 clients may synthesize IPv6 addresses
as specified in [RFC7050] or ignore the "ipv4hint" key and
wait for AAAA resolution (Section 3). For best performance, server
operators SHOULD include an "ipv6hint" parameter whenever they
include an "ipv4hint" parameter.
These parameters are intended to minimize additional connection
latency when a recursive resolver is not compliant with the
requirements in Section 4, and SHOULD NOT be included if most clients
are using compliant recursive resolvers. When TargetName is the
origin hostname or the owner name (which can be written as "."),
server operators SHOULD NOT include these hints, because they are
unlikely to convey any performance benefit.
Tuple Fields§
§0: Vec<T>
Trait Implementations§
source§impl<'r, T> BinDecodable<'r> for IpHint<T>where
T: BinDecodable<'r>,
impl<'r, T> BinDecodable<'r> for IpHint<T>where
T: BinDecodable<'r>,
source§fn read(decoder: &mut BinDecoder<'r>) -> ProtoResult<Self>
fn read(decoder: &mut BinDecoder<'r>) -> ProtoResult<Self>
The wire format for each parameter is a sequence of IP addresses in network byte order (for the respective address family). Like an A or AAAA RRSet, the list of addresses represents an unordered collection, and clients SHOULD pick addresses to use in a random order. An empty list of addresses is invalid.
source§fn from_bytes(bytes: &'r [u8]) -> ProtoResult<Self>
fn from_bytes(bytes: &'r [u8]) -> ProtoResult<Self>
source§impl<T> BinEncodable for IpHint<T>where
T: BinEncodable,
impl<T> BinEncodable for IpHint<T>where
T: BinEncodable,
source§fn emit(&self, encoder: &mut BinEncoder<'_>) -> ProtoResult<()>
fn emit(&self, encoder: &mut BinEncoder<'_>) -> ProtoResult<()>
The wire format for each parameter is a sequence of IP addresses in network byte order (for the respective address family). Like an A or AAAA RRSet, the list of addresses represents an unordered collection, and clients SHOULD pick addresses to use in a random order. An empty list of addresses is invalid.
source§impl<'de, T> Deserialize<'de> for IpHint<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for IpHint<T>where
T: Deserialize<'de>,
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl<T> Display for IpHint<T>where
T: Display,
impl<T> Display for IpHint<T>where
T: Display,
source§fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
The presentation value SHALL be a comma-separated list (Appendix A.1) of one or more IP addresses of the appropriate family in standard textual format RFC 5952. To enable simpler parsing, this SvcParamValue MUST NOT contain escape sequences.
impl<T: Eq> Eq for IpHint<T>
impl<T> StructuralPartialEq for IpHint<T>
Auto Trait Implementations§
impl<T> Freeze for IpHint<T>
impl<T> RefUnwindSafe for IpHint<T>where
T: RefUnwindSafe,
impl<T> Send for IpHint<T>where
T: Send,
impl<T> Sync for IpHint<T>where
T: Sync,
impl<T> Unpin for IpHint<T>where
T: Unpin,
impl<T> UnwindSafe for IpHint<T>where
T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.