aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport/libp2p/config.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-31 21:58:21 +0100
committertv <tv@krebsco.de>2026-10-31 21:58:21 +0100
commit0277b27b678cfbb86ccf72da583503621c6142e6 (patch)
tree9203f7bce3e46a60202e3421fbaa78d1f50ece72 /src/transport/libp2p/config.rs
parent9517904f7925125df17b581132f6065477ff9439 (diff)
libp2p: warn/refuse bad prefer/ignore combos
Diffstat (limited to 'src/transport/libp2p/config.rs')
-rw-r--r--src/transport/libp2p/config.rs37
1 files changed, 35 insertions, 2 deletions
diff --git a/src/transport/libp2p/config.rs b/src/transport/libp2p/config.rs
index 8b172ba..4db8444 100644
--- a/src/transport/libp2p/config.rs
+++ b/src/transport/libp2p/config.rs
@@ -59,8 +59,14 @@ pub(crate) fn check(settings: &crate::config::Settings) -> Result<()> {
parse_addresses("libp2p-listen", &settings.libp2p_listen)?;
parse_addresses("libp2p-announce", &settings.libp2p_announce)?;
parse_addresses("libp2p-relays", &settings.libp2p_relays)?;
- parse_ranges("libp2p-ignore", &settings.libp2p_ignore)?;
- parse_ranges("libp2p-prefer", &settings.libp2p_prefer)?;
+ let ignore = parse_ranges("libp2p-ignore", &settings.libp2p_ignore)?;
+ let prefer = parse_ranges("libp2p-prefer", &settings.libp2p_prefer)?;
+ check_preferred(
+ &ignore,
+ &prefer,
+ &settings.libp2p_ignore,
+ &settings.libp2p_prefer,
+ )?;
if settings.relay_only {
if settings.libp2p_listen.is_empty() {
bail!("relay-only needs libp2p-listen: where nodes reach the relay");
@@ -74,6 +80,33 @@ pub(crate) fn check(settings: &crate::config::Settings) -> Result<()> {
Ok(())
}
+/// A range both ignored and preferred: refused where all of the preferred one is
+/// ignored (it would name nothing usable), a warning where only part of it is (the
+/// ignored part stays left out). `ignore_given` and `prefer_given`: as written, for
+/// the messages. Ranges nest or are apart, so there's nothing in between.
+pub(super) fn check_preferred(
+ ignore: &[IpRange],
+ prefer: &[IpRange],
+ ignore_given: &[String],
+ prefer_given: &[String],
+) -> Result<()> {
+ for (preferred, preferred_given) in prefer.iter().zip(prefer_given) {
+ for (ignored, ignored_given) in ignore.iter().zip(ignore_given) {
+ if ignored.covers(preferred) {
+ bail!(
+ "libp2p-prefer {preferred_given:?} is all in libp2p-ignore {ignored_given:?}: nothing there is used"
+ );
+ }
+ if preferred.covers(ignored) {
+ warn!(
+ "libp2p-prefer {preferred_given:?} has libp2p-ignore {ignored_given:?} in it: addresses there stay left out"
+ );
+ }
+ }
+ }
+ Ok(())
+}
+
impl Libp2pConfig {
/// The configuration `settings` give; `relay_only`: a relay that is no node
/// (`--relay-only`).