From 4175d5b8d5c89a0617c0686c3e18d81286a43471 Mon Sep 17 00:00:00 2001 From: Bertrand Jacquin Date: Thu, 4 Apr 2024 22:33:16 +0100 Subject: [PATCH] net: add retro compatibility with legacy IPv4 options To ensure retro compatibility, legacy IPv4 daemon arguments and configuration settings changes are marked as deprecated, but can still be used falling back to new option name when new options are not used. Raise warning in case legacy option are used. * --p2p-bind-ip is an alias to --p2p-bind-ipv4-address * --p2p-bind-port is an alias to --p2p-bind-ipv4-port * --p2p-bind-port-ipv6 is an alias to --p2p-bind-ipv6-port * --rpc-bind-ip is an alias to --rpc-bind-ipv4-address * --rpc-restricted-bind-ip is an alias to --rpc-restricted-bind-ipv4-address --- src/p2p/net_node.cpp | 3 +++ src/p2p/net_node.h | 3 +++ src/p2p/net_node.inl | 22 ++++++++++++++++++++++ src/rpc/rpc_args.cpp | 17 +++++++++++++++++ src/rpc/rpc_args.h | 2 ++ 5 files changed, 47 insertions(+) diff --git a/src/p2p/net_node.cpp b/src/p2p/net_node.cpp index bb7965817dee..4d5ba6e38268 100644 --- a/src/p2p/net_node.cpp +++ b/src/p2p/net_node.cpp @@ -113,6 +113,7 @@ namespace nodetool { const command_line::arg_descriptor arg_p2p_bind_ipv4_address = {"p2p-bind-ipv4-address", "Interface for p2p network protocol (IPv4)", "0.0.0.0"}; const command_line::arg_descriptor arg_p2p_bind_ipv6_address = {"p2p-bind-ipv6-address", "Interface for p2p network protocol (IPv6)", "::"}; + const command_line::arg_descriptor arg_p2p_bind_ip = {"p2p-bind-ip", "DEPRECATED: replaced with --p2p-bind-ipv4-address", ""}; const command_line::arg_descriptor arg_p2p_bind_ipv4_port = { "p2p-bind-ipv4-port" , "Port for p2p network protocol (IPv4)" @@ -139,6 +140,8 @@ namespace nodetool return val; } }; + const command_line::arg_descriptor arg_p2p_bind_port = {"p2p-bind-port", "DEPRECATED: replaced with --p2p-bind-ipv4-port", ""}; + const command_line::arg_descriptor arg_p2p_bind_port_ipv6 = {"p2p-bind-port-ipv6", "DEPRECATED: replaced with --p2p-bind-ipv6-port", ""}; const command_line::arg_descriptor arg_p2p_external_port = {"p2p-external-port", "External port for p2p network protocol (if port forwarding used with NAT)", 0}; const command_line::arg_descriptor arg_p2p_allow_local_ip = {"allow-local-ip", "Allow local ip add to peer list, mostly in debug purposes"}; diff --git a/src/p2p/net_node.h b/src/p2p/net_node.h index a373c80a3575..4db6a107ca0a 100644 --- a/src/p2p/net_node.h +++ b/src/p2p/net_node.h @@ -522,8 +522,11 @@ namespace nodetool const int64_t default_limit_down = P2P_DEFAULT_LIMIT_RATE_DOWN; // kB/s extern const command_line::arg_descriptor arg_p2p_bind_ipv4_address; extern const command_line::arg_descriptor arg_p2p_bind_ipv6_address; + extern const command_line::arg_descriptor arg_p2p_bind_ip; // DEPRECATED extern const command_line::arg_descriptor arg_p2p_bind_ipv4_port; extern const command_line::arg_descriptor arg_p2p_bind_ipv6_port; + extern const command_line::arg_descriptor arg_p2p_bind_port; // DEPRECATED + extern const command_line::arg_descriptor arg_p2p_bind_port_ipv6; // DEPRECATED extern const command_line::arg_descriptor arg_p2p_use_ipv6; extern const command_line::arg_descriptor arg_p2p_ignore_ipv4; extern const command_line::arg_descriptor arg_p2p_external_port; diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index f50ac8ea22d5..1a43c8ac2ad1 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -101,8 +101,11 @@ namespace nodetool { command_line::add_arg(desc, arg_p2p_bind_ipv4_address); command_line::add_arg(desc, arg_p2p_bind_ipv6_address); + command_line::add_arg(desc, arg_p2p_bind_ip); // DEPRECATED command_line::add_arg(desc, arg_p2p_bind_ipv4_port, false); command_line::add_arg(desc, arg_p2p_bind_ipv6_port, false); + command_line::add_arg(desc, arg_p2p_bind_port, false); // DEPRECATED + command_line::add_arg(desc, arg_p2p_bind_port_ipv6, false); // DEPRECATED command_line::add_arg(desc, arg_p2p_use_ipv6); command_line::add_arg(desc, arg_p2p_ignore_ipv4); command_line::add_arg(desc, arg_p2p_external_port); @@ -416,6 +419,25 @@ namespace nodetool public_zone.m_bind_ipv6_address = command_line::get_arg(vm, arg_p2p_bind_ipv6_address); public_zone.m_port_ipv4 = command_line::get_arg(vm, arg_p2p_bind_ipv4_port); public_zone.m_port_ipv6 = command_line::get_arg(vm, arg_p2p_bind_ipv6_port); + + // DEPRECATED --p2p-bind-ip + if (!command_line::get_arg(vm, arg_p2p_bind_ip).empty()) + MWARNING("--p2p-bind-ip is now DEPRECATED, replace with --p2p-bind-ipv4-address"); + if (public_zone.m_bind_ipv4_address.empty()) + public_zone.m_bind_ipv4_address = command_line::get_arg(vm, arg_p2p_bind_ip); + + // DEPRECATED --p2p-bind-port + if (!command_line::get_arg(vm, arg_p2p_bind_port).empty()) + MWARNING("--p2p-bind-port is now DEPRECATED, replace with --p2p-bind-ipv4-port"); + if (public_zone.m_port_ipv4.empty()) + public_zone.m_port_ipv4 = command_line::get_arg(vm, arg_p2p_bind_port); + + // DEPRECATED --p2p-bind-port-ipv6 + if (!command_line::get_arg(vm, arg_p2p_bind_port_ipv6).empty()) + MWARNING("--p2p-bind-port-ipv6 is now DEPRECATED, replace with --p2p-bind-ipv6-port"); + if (public_zone.m_port_ipv6.empty()) + public_zone.m_port_ipv6 = command_line::get_arg(vm, arg_p2p_bind_ipv6_port); + public_zone.m_can_pingback = true; m_external_port = command_line::get_arg(vm, arg_p2p_external_port); m_allow_local_ip = command_line::get_arg(vm, arg_p2p_allow_local_ip); diff --git a/src/rpc/rpc_args.cpp b/src/rpc/rpc_args.cpp index 3e4503b20678..4d0411b503d5 100644 --- a/src/rpc/rpc_args.cpp +++ b/src/rpc/rpc_args.cpp @@ -91,8 +91,10 @@ namespace cryptonote rpc_args::descriptors::descriptors() : rpc_bind_ipv4_address({"rpc-bind-ipv4-address", rpc_args::tr("Specify IPv4 address to bind RPC server"), "127.0.0.1"}) , rpc_bind_ipv6_address({"rpc-bind-ipv6-address", rpc_args::tr("Specify IPv6 address to bind RPC server"), "::1"}) + , rpc_bind_ip({"rpc-bind-ip", rpc_args::tr("DEPRECATED: replaced with --rpc-bind-ipv4-address"), ""}) , rpc_restricted_bind_ipv4_address({"rpc-restricted-bind-ipv4-address", rpc_args::tr("Specify IPv4 address to bind restricted RPC server"), "127.0.0.1"}) , rpc_restricted_bind_ipv6_address({"rpc-restricted-bind-ipv6-address", rpc_args::tr("Specify IPv6 address to bind restricted RPC server"), "::1"}) + , rpc_restricted_bind_ip({"rpc-restricted-bind-ip", rpc_args::tr("DEPRECATED: replaced with --rpc-restricted-bind-ipv4-address"), ""}) , rpc_use_ipv6({"rpc-use-ipv6", rpc_args::tr("Allow IPv6 for RPC"), false}) , rpc_ignore_ipv4({"rpc-ignore-ipv4", rpc_args::tr("Ignore unsuccessful IPv4 bind for RPC"), false}) , rpc_login({"rpc-login", rpc_args::tr("Specify username[:password] required for RPC server"), "", true}) @@ -115,8 +117,10 @@ namespace cryptonote const descriptors arg{}; command_line::add_arg(desc, arg.rpc_bind_ipv4_address); command_line::add_arg(desc, arg.rpc_bind_ipv6_address); + command_line::add_arg(desc, arg.rpc_bind_ip); // DEPRECATED command_line::add_arg(desc, arg.rpc_restricted_bind_ipv4_address); command_line::add_arg(desc, arg.rpc_restricted_bind_ipv6_address); + command_line::add_arg(desc, arg.rpc_restricted_bind_ip); // DEPRECATED command_line::add_arg(desc, arg.rpc_use_ipv6); command_line::add_arg(desc, arg.rpc_ignore_ipv4); command_line::add_arg(desc, arg.rpc_login); @@ -142,6 +146,19 @@ namespace cryptonote config.bind_ipv6_address = command_line::get_arg(vm, arg.rpc_bind_ipv6_address); config.restricted_bind_ipv4_address = command_line::get_arg(vm, arg.rpc_restricted_bind_ipv4_address); config.restricted_bind_ipv6_address = command_line::get_arg(vm, arg.rpc_restricted_bind_ipv6_address); + + // DEPRECATED --rpc-bind-ip + if (!command_line::get_arg(vm, arg.rpc_bind_ip).empty()) + MWARNING("--rpc-bind-ip is now DEPRECATED, replace with --rpc-bind-ipv4-address"); + if (config.bind_ipv4_address.empty()) + config.bind_ipv4_address = command_line::get_arg(vm, arg.rpc_bind_ip); + + // DEPRECATED --rpc-restricted-bind-ip + if (!command_line::get_arg(vm, arg.rpc_restricted_bind_ip).empty()) + MWARNING("--rpc-restricted-bind-ip is now DEPRECATED, replace with --rpc-restricted-bind-ipv4-address"); + if (config.restricted_bind_ipv4_address.empty()) + config.restricted_bind_ipv4_address = command_line::get_arg(vm, arg.rpc_restricted_bind_ip); + config.use_ipv6 = command_line::get_arg(vm, arg.rpc_use_ipv6); config.require_ipv4 = !command_line::get_arg(vm, arg.rpc_ignore_ipv4); config.disable_rpc_ban = command_line::get_arg(vm, arg.disable_rpc_ban); diff --git a/src/rpc/rpc_args.h b/src/rpc/rpc_args.h index b4fa3ced09a4..392e78703839 100644 --- a/src/rpc/rpc_args.h +++ b/src/rpc/rpc_args.h @@ -53,8 +53,10 @@ namespace cryptonote const command_line::arg_descriptor rpc_bind_ipv4_address; const command_line::arg_descriptor rpc_bind_ipv6_address; + const command_line::arg_descriptor rpc_bind_ip; // DEPRECATED const command_line::arg_descriptor rpc_restricted_bind_ipv4_address; const command_line::arg_descriptor rpc_restricted_bind_ipv6_address; + const command_line::arg_descriptor rpc_restricted_bind_ip; // DEPRECATED const command_line::arg_descriptor rpc_use_ipv6; const command_line::arg_descriptor rpc_ignore_ipv4; const command_line::arg_descriptor rpc_login;