adds const SOCKET_ADDR_UNSPECIFIED (#32102)
const socket-addr is stable since rust 1.69.0
This commit is contained in:
parent
0762e69863
commit
3ddb8babc8
|
@ -22,6 +22,9 @@ pub use {
|
||||||
crate::legacy_contact_info::LegacyContactInfo, solana_client::connection_cache::Protocol,
|
crate::legacy_contact_info::LegacyContactInfo, solana_client::connection_cache::Protocol,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub const SOCKET_ADDR_UNSPECIFIED: SocketAddr =
|
||||||
|
SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), /*port:*/ 0u16);
|
||||||
|
|
||||||
const SOCKET_TAG_GOSSIP: u8 = 0;
|
const SOCKET_TAG_GOSSIP: u8 = 0;
|
||||||
const SOCKET_TAG_REPAIR: u8 = 1;
|
const SOCKET_TAG_REPAIR: u8 = 1;
|
||||||
const SOCKET_TAG_RPC: u8 = 2;
|
const SOCKET_TAG_RPC: u8 = 2;
|
||||||
|
@ -181,7 +184,7 @@ impl ContactInfo {
|
||||||
version: solana_version::Version::default(),
|
version: solana_version::Version::default(),
|
||||||
addrs: Vec::<IpAddr>::default(),
|
addrs: Vec::<IpAddr>::default(),
|
||||||
sockets: Vec::<SocketEntry>::default(),
|
sockets: Vec::<SocketEntry>::default(),
|
||||||
cache: [socket_addr_unspecified(); SOCKET_CACHE_SIZE],
|
cache: [SOCKET_ADDR_UNSPECIFIED; SOCKET_CACHE_SIZE],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -329,7 +332,7 @@ impl ContactInfo {
|
||||||
}
|
}
|
||||||
self.maybe_remove_addr(entry.index);
|
self.maybe_remove_addr(entry.index);
|
||||||
if let Some(entry) = self.cache.get_mut(usize::from(key)) {
|
if let Some(entry) = self.cache.get_mut(usize::from(key)) {
|
||||||
*entry = socket_addr_unspecified();
|
*entry = SOCKET_ADDR_UNSPECIFIED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -425,7 +428,7 @@ impl TryFrom<ContactInfoLite> for ContactInfo {
|
||||||
version,
|
version,
|
||||||
addrs,
|
addrs,
|
||||||
sockets,
|
sockets,
|
||||||
cache: [socket_addr_unspecified(); SOCKET_CACHE_SIZE],
|
cache: [SOCKET_ADDR_UNSPECIFIED; SOCKET_CACHE_SIZE],
|
||||||
};
|
};
|
||||||
// Populate node.cache.
|
// Populate node.cache.
|
||||||
let mut port = 0u16;
|
let mut port = 0u16;
|
||||||
|
@ -457,11 +460,6 @@ impl Sanitize for ContactInfo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Workaround until feature(const_socketaddr) is stable.
|
|
||||||
pub(crate) fn socket_addr_unspecified() -> SocketAddr {
|
|
||||||
SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), /*port:*/ 0u16)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn sanitize_socket(socket: &SocketAddr) -> Result<(), Error> {
|
pub(crate) fn sanitize_socket(socket: &SocketAddr) -> Result<(), Error> {
|
||||||
if socket.port() == 0u16 {
|
if socket.port() == 0u16 {
|
||||||
return Err(Error::InvalidPort(socket.port()));
|
return Err(Error::InvalidPort(socket.port()));
|
||||||
|
@ -686,7 +684,7 @@ mod tests {
|
||||||
version: solana_version::Version::default(),
|
version: solana_version::Version::default(),
|
||||||
addrs: Vec::default(),
|
addrs: Vec::default(),
|
||||||
sockets: Vec::default(),
|
sockets: Vec::default(),
|
||||||
cache: [socket_addr_unspecified(); SOCKET_CACHE_SIZE],
|
cache: [SOCKET_ADDR_UNSPECIFIED; SOCKET_CACHE_SIZE],
|
||||||
};
|
};
|
||||||
let mut sockets = HashMap::<u8, SocketAddr>::new();
|
let mut sockets = HashMap::<u8, SocketAddr>::new();
|
||||||
for _ in 0..1 << 14 {
|
for _ in 0..1 << 14 {
|
||||||
|
@ -706,7 +704,7 @@ mod tests {
|
||||||
if usize::from(key) < SOCKET_CACHE_SIZE {
|
if usize::from(key) < SOCKET_CACHE_SIZE {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
&node.cache[usize::from(key)],
|
&node.cache[usize::from(key)],
|
||||||
socket.unwrap_or(&socket_addr_unspecified())
|
socket.unwrap_or(&SOCKET_ADDR_UNSPECIFIED)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
use {
|
use {
|
||||||
crate::{
|
crate::{
|
||||||
contact_info::{
|
contact_info::{
|
||||||
get_quic_socket, sanitize_quic_offset, sanitize_socket, socket_addr_unspecified,
|
get_quic_socket, sanitize_quic_offset, sanitize_socket, ContactInfo, Error, Protocol,
|
||||||
ContactInfo, Error, Protocol,
|
SOCKET_ADDR_UNSPECIFIED,
|
||||||
},
|
},
|
||||||
crds_value::MAX_WALLCLOCK,
|
crds_value::MAX_WALLCLOCK,
|
||||||
},
|
},
|
||||||
|
@ -244,12 +244,12 @@ impl TryFrom<&ContactInfo> for LegacyContactInfo {
|
||||||
fn try_from(node: &ContactInfo) -> Result<Self, Self::Error> {
|
fn try_from(node: &ContactInfo) -> Result<Self, Self::Error> {
|
||||||
macro_rules! unwrap_socket {
|
macro_rules! unwrap_socket {
|
||||||
($name:ident) => {
|
($name:ident) => {
|
||||||
node.$name().ok().unwrap_or_else(socket_addr_unspecified)
|
node.$name().ok().unwrap_or(SOCKET_ADDR_UNSPECIFIED)
|
||||||
};
|
};
|
||||||
($name:ident, $protocol:expr) => {
|
($name:ident, $protocol:expr) => {
|
||||||
node.$name($protocol)
|
node.$name($protocol)
|
||||||
.ok()
|
.ok()
|
||||||
.unwrap_or_else(socket_addr_unspecified)
|
.unwrap_or(SOCKET_ADDR_UNSPECIFIED)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
sanitize_quic_offset(
|
sanitize_quic_offset(
|
||||||
|
|
|
@ -14,7 +14,7 @@ use {
|
||||||
tower_storage::TowerStorage, validator::ValidatorStartProgress,
|
tower_storage::TowerStorage, validator::ValidatorStartProgress,
|
||||||
},
|
},
|
||||||
solana_geyser_plugin_manager::GeyserPluginManagerRequest,
|
solana_geyser_plugin_manager::GeyserPluginManagerRequest,
|
||||||
solana_gossip::contact_info::{ContactInfo, Protocol},
|
solana_gossip::contact_info::{ContactInfo, Protocol, SOCKET_ADDR_UNSPECIFIED},
|
||||||
solana_rpc::rpc::verify_pubkey,
|
solana_rpc::rpc::verify_pubkey,
|
||||||
solana_rpc_client_api::{config::RpcAccountIndex, custom_error::RpcCustomError},
|
solana_rpc_client_api::{config::RpcAccountIndex, custom_error::RpcCustomError},
|
||||||
solana_runtime::accounts_index::AccountIndex,
|
solana_runtime::accounts_index::AccountIndex,
|
||||||
|
@ -27,7 +27,7 @@ use {
|
||||||
collections::{HashMap, HashSet},
|
collections::{HashMap, HashSet},
|
||||||
error,
|
error,
|
||||||
fmt::{self, Display},
|
fmt::{self, Display},
|
||||||
net::{IpAddr, Ipv4Addr, SocketAddr},
|
net::SocketAddr,
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
sync::{Arc, RwLock},
|
sync::{Arc, RwLock},
|
||||||
thread::{self, Builder},
|
thread::{self, Builder},
|
||||||
|
@ -91,14 +91,10 @@ impl From<ContactInfo> for AdminRpcContactInfo {
|
||||||
fn from(node: ContactInfo) -> Self {
|
fn from(node: ContactInfo) -> Self {
|
||||||
macro_rules! unwrap_socket {
|
macro_rules! unwrap_socket {
|
||||||
($name:ident) => {
|
($name:ident) => {
|
||||||
node.$name().unwrap_or_else(|_| {
|
node.$name().unwrap_or(SOCKET_ADDR_UNSPECIFIED)
|
||||||
SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), /*port:*/ 0u16)
|
|
||||||
})
|
|
||||||
};
|
};
|
||||||
($name:ident, $protocol:expr) => {
|
($name:ident, $protocol:expr) => {
|
||||||
node.$name($protocol).unwrap_or_else(|_| {
|
node.$name($protocol).unwrap_or(SOCKET_ADDR_UNSPECIFIED)
|
||||||
SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), /*port:*/ 0u16)
|
|
||||||
})
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
Self {
|
Self {
|
||||||
|
|
Loading…
Reference in New Issue