charon-cmd: Make local host configurable

This allows preferring a particular address family (via 0.0.0.0 or ::)
or even a specific local address.
This commit is contained in:
Tobias Brunner
2026-06-01 09:03:02 +02:00
parent 64e01e2812
commit 74fd2593a7
3 changed files with 13 additions and 2 deletions
+10 -2
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2013 Tobias Brunner * Copyright (C) 2013-2026 Tobias Brunner
* Copyright (C) 2013 Martin Willi * Copyright (C) 2013 Martin Willi
* *
* Copyright (C) secunet Security Networks AG * Copyright (C) secunet Security Networks AG
@@ -102,6 +102,11 @@ struct private_cmd_connection_t {
*/ */
char *host; char *host;
/**
* Hostname to connect from
*/
char *host_local;
/** /**
* Server identity, or NULL to use host * Server identity, or NULL to use host
*/ */
@@ -150,7 +155,7 @@ static peer_cfg_t* create_peer_cfg(private_cmd_connection_t *this)
peer_cfg_t *peer_cfg; peer_cfg_t *peer_cfg;
proposal_t *proposal; proposal_t *proposal;
ike_cfg_create_t ike = { ike_cfg_create_t ike = {
.local = "%any", .local = this->host_local ?: "%any",
.remote = this->host, .remote = this->host,
.remote_port = IKEV2_UDP_PORT, .remote_port = IKEV2_UDP_PORT,
.fragmentation = FRAGMENTATION_YES, .fragmentation = FRAGMENTATION_YES,
@@ -502,6 +507,9 @@ METHOD(cmd_connection_t, handle, bool,
case CMD_OPT_HOST: case CMD_OPT_HOST:
this->host = arg; this->host = arg;
break; break;
case CMD_OPT_HOST_LOCAL:
this->host_local = arg;
break;
case CMD_OPT_REMOTE_IDENTITY: case CMD_OPT_REMOTE_IDENTITY:
this->server = arg; this->server = arg;
break; break;
+2
View File
@@ -31,6 +31,8 @@ cmd_option_t cmd_options[CMD_OPT_COUNT] = {
"set the default log level (-1..4, default: 1)", {}}, "set the default log level (-1..4, default: 1)", {}},
{ CMD_OPT_HOST, "host", required_argument, "hostname", { CMD_OPT_HOST, "host", required_argument, "hostname",
"DNS name or address to connect to", {}}, "DNS name or address to connect to", {}},
{ CMD_OPT_HOST_LOCAL, "host-local", required_argument, "hostname",
"DNS name or address to connect from (default: %any)", {}},
{ CMD_OPT_IDENTITY, "identity", required_argument, "identity", { CMD_OPT_IDENTITY, "identity", required_argument, "identity",
"identity the client uses for the IKE exchange", {}}, "identity the client uses for the IKE exchange", {}},
{ CMD_OPT_EAP_IDENTITY, "eap-identity", required_argument, "eap-identity", { CMD_OPT_EAP_IDENTITY, "eap-identity", required_argument, "eap-identity",
+1
View File
@@ -34,6 +34,7 @@ enum cmd_option_type_t {
CMD_OPT_VERSION, CMD_OPT_VERSION,
CMD_OPT_DEBUG, CMD_OPT_DEBUG,
CMD_OPT_HOST, CMD_OPT_HOST,
CMD_OPT_HOST_LOCAL,
CMD_OPT_IDENTITY, CMD_OPT_IDENTITY,
CMD_OPT_EAP_IDENTITY, CMD_OPT_EAP_IDENTITY,
CMD_OPT_XAUTH_USER, CMD_OPT_XAUTH_USER,