#[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 per 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] [RFC4001]. 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
service name 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>) -> Result<Self, ProtoError>
fn read(decoder: &mut BinDecoder<'r>) -> Result<Self, ProtoError>
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]) -> Result<Self, ProtoError>
fn from_bytes(bytes: &'r [u8]) -> Result<Self, ProtoError>
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<'_>) -> Result<(), ProtoError>
fn emit(&self, encoder: &mut BinEncoder<'_>) -> Result<(), ProtoError>
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<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§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§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.