ibid. for the gateway

This commit is contained in:
Jędrzej Stuczyński
2023-10-27 12:17:17 +01:00
parent 667d8d34eb
commit d9f88ca515
9 changed files with 84 additions and 25 deletions
+5
View File
@@ -38,6 +38,7 @@ pub(crate) struct OverrideConfig {
pub(crate) statistics_service_url: Option<url::Url>,
pub(crate) nym_apis: Option<Vec<url::Url>>,
pub(crate) mnemonic: Option<bip39::Mnemonic>,
pub(crate) enforce_forward_travel: Option<bool>,
pub(crate) nyxd_urls: Option<Vec<url::Url>>,
pub(crate) only_coconut_credentials: Option<bool>,
pub(crate) with_network_requester: Option<bool>,
@@ -52,6 +53,10 @@ impl OverrideConfig {
.with_optional(Config::with_listening_address, self.listening_address)
.with_optional(Config::with_mix_port, self.mix_port)
.with_optional(Config::with_clients_port, self.clients_port)
.with_optional(
Config::with_enforce_forward_travel,
self.enforce_forward_travel,
)
.with_optional_custom_env(
Config::with_custom_nym_apis,
self.nym_apis,
+29 -23
View File
@@ -20,41 +20,41 @@ use super::helpers::OverrideIpPacketRouterConfig;
#[derive(Args, Clone)]
pub struct Init {
/// Id of the gateway we want to create config for
#[clap(long)]
#[arg(long)]
id: String,
/// The listening address on which the gateway will be receiving sphinx packets and listening for client data
#[clap(long, alias = "host")]
#[arg(long, alias = "host")]
listening_address: IpAddr,
/// Comma separated list of public ip addresses that will announced to the nym-api and subsequently to the clients.
/// In nearly all circumstances, it's going to be identical to the address you're going to use for bonding.
#[clap(long, value_delimiter = ',')]
#[arg(long, value_delimiter = ',')]
public_ips: Option<Vec<IpAddr>>,
/// Optional hostname associated with this gateway that will announced to the nym-api and subsequently to the clients
#[clap(long)]
#[arg(long)]
hostname: Option<String>,
/// The port on which the gateway will be listening for sphinx packets
#[clap(long)]
#[arg(long)]
mix_port: Option<u16>,
/// The port on which the gateway will be listening for clients gateway-requests
#[clap(long)]
#[arg(long)]
clients_port: Option<u16>,
/// Path to sqlite database containing all gateway persistent data
#[clap(long)]
#[arg(long)]
datastore: Option<PathBuf>,
/// Comma separated list of endpoints of nym APIs
#[clap(long, alias = "validator_apis", value_delimiter = ',')]
#[arg(long, alias = "validator_apis", value_delimiter = ',')]
// the alias here is included for backwards compatibility (1.1.4 and before)
nym_apis: Option<Vec<url::Url>>,
/// Comma separated list of endpoints of the validator
#[clap(
#[arg(
long,
alias = "validators",
alias = "nyxd_validators",
@@ -65,47 +65,52 @@ pub struct Init {
nyxd_urls: Option<Vec<url::Url>>,
/// Cosmos wallet mnemonic needed for double spending protection
#[clap(long)]
#[arg(long)]
mnemonic: Option<bip39::Mnemonic>,
/// Set this gateway to work only with coconut credentials; that would disallow clients to
/// bypass bandwidth credential requirement
#[clap(long, hide = true)]
#[arg(long, hide = true)]
only_coconut_credentials: Option<bool>,
/// Enable/disable gateway anonymized statistics that get sent to a statistics aggregator server
#[clap(long)]
#[arg(long)]
enabled_statistics: Option<bool>,
/// URL where a statistics aggregator is running. The default value is a Nym aggregator server
#[clap(long)]
#[arg(long)]
statistics_service_url: Option<url::Url>,
/// Specifies whether this node should accepts and send out packets that would only go to nodes
/// on the next mix layer
#[arg(long)]
enforce_forward_travel: bool,
/// Allows this gateway to run an embedded network requester for minimal network overhead
#[clap(long, conflicts_with = "with_ip_packet_router")]
#[arg(long, conflicts_with = "with_ip_packet_router")]
with_network_requester: bool,
/// Allows this gateway to run an embedded network requester for minimal network overhead
#[clap(long, hide = true, conflicts_with = "with_network_requester")]
#[arg(long, hide = true, conflicts_with = "with_network_requester")]
with_ip_packet_router: bool,
// ##### NETWORK REQUESTER FLAGS #####
/// Specifies whether this network requester should run in 'open-proxy' mode
#[clap(long, requires = "with_network_requester")]
#[arg(long, requires = "with_network_requester")]
open_proxy: Option<bool>,
/// Enable service anonymized statistics that get sent to a statistics aggregator server
#[clap(long, requires = "with_network_requester")]
#[arg(long, requires = "with_network_requester")]
enable_statistics: Option<bool>,
/// Mixnet client address where a statistics aggregator is running. The default value is a Nym
/// aggregator client
#[clap(long, requires = "with_network_requester")]
#[arg(long, requires = "with_network_requester")]
statistics_recipient: Option<String>,
/// Mostly debug-related option to increase default traffic rate so that you would not need to
/// modify config post init
#[clap(
#[arg(
long,
hide = true,
conflicts_with = "medium_toggle",
@@ -114,7 +119,7 @@ pub struct Init {
fastmode: bool,
/// Disable loop cover traffic and the Poisson rate limiter (for debugging only)
#[clap(
#[arg(
long,
hide = true,
conflicts_with = "medium_toggle",
@@ -124,7 +129,7 @@ pub struct Init {
/// Enable medium mixnet traffic, for experiments only.
/// This includes things like disabling cover traffic, no per hop delays, etc.
#[clap(
#[arg(
long,
hide = true,
conflicts_with = "no_cover",
@@ -136,10 +141,10 @@ pub struct Init {
/// Specifies whether this network requester will run using the default ExitPolicy
/// as opposed to the allow list.
/// Note: this setting will become the default in the future releases.
#[clap(long)]
#[arg(long)]
with_exit_policy: Option<bool>,
#[clap(short, long, default_value_t = OutputFormat::default())]
#[arg(short, long, default_value_t = OutputFormat::default())]
output: OutputFormat,
}
@@ -154,6 +159,7 @@ impl From<Init> for OverrideConfig {
datastore: init_config.datastore,
nym_apis: init_config.nym_apis,
mnemonic: init_config.mnemonic,
enforce_forward_travel: Some(init_config.enforce_forward_travel),
enabled_statistics: init_config.enabled_statistics,
statistics_service_url: init_config.statistics_service_url,
+6
View File
@@ -108,6 +108,11 @@ pub struct Run {
#[arg(long)]
statistics_recipient: Option<String>,
/// Specifies whether this node should accepts and send out packets that would only go to nodes
/// on the next mix layer
#[arg(long)]
enforce_forward_travel: Option<bool>,
/// Mostly debug-related option to increase default traffic rate so that you would not need to
/// modify config post init
#[arg(long, hide = true, conflicts_with = "medium_toggle")]
@@ -157,6 +162,7 @@ impl From<Run> for OverrideConfig {
datastore: run_config.datastore,
nym_apis: run_config.nym_apis,
mnemonic: run_config.mnemonic,
enforce_forward_travel: run_config.enforce_forward_travel,
enabled_statistics: run_config.enabled_statistics,
statistics_service_url: run_config.statistics_service_url,
+25
View File
@@ -188,11 +188,13 @@ impl Config {
self
}
#[must_use]
pub fn with_enabled_network_requester(mut self, enabled_network_requester: bool) -> Self {
self.network_requester.enabled = enabled_network_requester;
self
}
#[must_use]
pub fn with_default_network_requester_config_path(mut self) -> Self {
self.storage_paths = self
.storage_paths
@@ -212,36 +214,43 @@ impl Config {
self
}
#[must_use]
pub fn with_only_coconut_credentials(mut self, only_coconut_credentials: bool) -> Self {
self.gateway.only_coconut_credentials = only_coconut_credentials;
self
}
#[must_use]
pub fn with_enabled_statistics(mut self, enabled_statistics: bool) -> Self {
self.gateway.enabled_statistics = enabled_statistics;
self
}
#[must_use]
pub fn with_custom_statistics_service_url(mut self, statistics_service_url: Url) -> Self {
self.gateway.statistics_service_url = statistics_service_url;
self
}
#[must_use]
pub fn with_custom_nym_apis(mut self, nym_api_urls: Vec<Url>) -> Self {
self.gateway.nym_api_urls = nym_api_urls;
self
}
#[must_use]
pub fn with_custom_validator_nyxd(mut self, validator_nyxd_urls: Vec<Url>) -> Self {
self.gateway.nyxd_urls = validator_nyxd_urls;
self
}
#[must_use]
pub fn with_cosmos_mnemonic(mut self, cosmos_mnemonic: bip39::Mnemonic) -> Self {
self.gateway.cosmos_mnemonic = cosmos_mnemonic;
self
}
#[must_use]
pub fn with_listening_address(mut self, listening_address: IpAddr) -> Self {
self.gateway.listening_address = listening_address;
@@ -253,16 +262,25 @@ impl Config {
self
}
#[must_use]
pub fn with_mix_port(mut self, port: u16) -> Self {
self.gateway.mix_port = port;
self
}
#[must_use]
pub fn with_clients_port(mut self, port: u16) -> Self {
self.gateway.clients_port = port;
self
}
#[must_use]
pub fn with_enforce_forward_travel(mut self, forward_travel: bool) -> Self {
self.debug.enforce_forward_travel = forward_travel;
self
}
#[must_use]
pub fn with_custom_persistent_store(mut self, store_dir: PathBuf) -> Self {
self.storage_paths.clients_storage = store_dir;
self
@@ -422,6 +440,10 @@ pub struct Debug {
/// Number of messages from offline client that can be pulled at once from the storage.
pub message_retrieval_limit: i64,
/// Specifies whether this node should accepts and send out packets that would only go to nodes
/// on the next mix layer.
pub enforce_forward_travel: bool,
/// Specifies whether the mixnode should be using the legacy framing for the sphinx packets.
// it's set to true by default. The reason for that decision is to preserve compatibility with the
// existing nodes whilst everyone else is upgrading and getting the code for handling the new field.
@@ -439,6 +461,9 @@ impl Default for Debug {
maximum_connection_buffer_size: DEFAULT_MAXIMUM_CONNECTION_BUFFER_SIZE,
stored_messages_filename_length: DEFAULT_STORED_MESSAGE_FILENAME_LENGTH,
message_retrieval_limit: DEFAULT_MESSAGE_RETRIEVAL_LIMIT,
// let's keep it disabled for now to not surprise operators/users
enforce_forward_travel: false,
use_legacy_framed_packet_version: false,
}
}
+4
View File
@@ -166,6 +166,10 @@ impl From<ConfigV1_1_29> for ConfigV1_1_31 {
stored_messages_filename_length: value.debug.stored_messages_filename_length,
message_retrieval_limit: value.debug.message_retrieval_limit,
use_legacy_framed_packet_version: value.debug.use_legacy_framed_packet_version,
// \/ ADDED
// enforce forward travel, et al.
..Default::default() // /\ ADDED
},
}
}
+1
View File
@@ -163,6 +163,7 @@ impl From<ConfigV1_1_31> for Config {
presence_sending_delay: value.debug.presence_sending_delay,
stored_messages_filename_length: value.debug.stored_messages_filename_length,
message_retrieval_limit: value.debug.message_retrieval_limit,
enforce_forward_travel: false,
use_legacy_framed_packet_version: value.debug.use_legacy_framed_packet_version,
},
}
+6
View File
@@ -116,4 +116,10 @@ ip_packet_router_config = '{{ storage_paths.ip_packet_router_config }}'
# TODO
[debug]
# Specifies whether this node should accepts and send out packets that would only go to nodes
# on the next mix layer.
enforce_forward_travel = {{ debug.enforce_forward_travel }}
"#;
+7 -2
View File
@@ -253,8 +253,13 @@ impl<St> Gateway<St> {
let nyxd_endpoints = self.config.gateway.nyxd_urls.clone();
let network = NymNetworkDetails::new_from_env();
let mut provider =
AllowedAddressesProvider::new(identity, nyxd_endpoints, Some(network)).await?;
let mut provider = AllowedAddressesProvider::new(
identity,
nyxd_endpoints,
!self.config.debug.enforce_forward_travel,
Some(network),
)
.await?;
let filters = (provider.ingress(), provider.egress());
+1
View File
@@ -257,6 +257,7 @@ impl From<DebugV1_1_32> for Debug {
packet_forwarding_maximum_backoff: value.packet_forwarding_maximum_backoff,
initial_connection_timeout: value.initial_connection_timeout,
maximum_connection_buffer_size: value.maximum_connection_buffer_size,
enforce_forward_travel: false,
use_legacy_framed_packet_version: value.use_legacy_framed_packet_version,
}
}