From fa6a1a00f9e240e72d40fe8de4d63cd80380e377 Mon Sep 17 00:00:00 2001 From: wujing Date: Wed, 5 Feb 2020 19:17:04 +0800 Subject: [PATCH] websocket server listening port configurable Signed-off-by: wujing --- src/cmd/isulad/arguments.c | 1 + src/cmd/isulad/arguments.h | 1 + src/cmd/isulad/commands.c | 26 +++++++++++++++++++ src/cmd/isulad/commands.h | 5 +++- src/config/isulad_config.c | 26 +++++++++++++++++++ src/config/isulad_config.h | 1 + src/constants.h | 2 ++ .../schema/schema/isulad-daemon-configs.json | 3 +++ src/websocket/service/ws_server.cc | 7 +++++ src/websocket/service/ws_server.h | 2 +- 10 files changed, 72 insertions(+), 2 deletions(-) diff --git a/src/cmd/isulad/arguments.c b/src/cmd/isulad/arguments.c index d4cab30..7381a87 100644 --- a/src/cmd/isulad/arguments.c +++ b/src/cmd/isulad/arguments.c @@ -156,6 +156,7 @@ int service_arguments_init(struct service_arguments *args) args->default_ulimit = NULL; args->default_ulimit_len = 0; + args->json_confs->websocket_server_listening_port = DEFAULT_WEBSOCKET_SERVER_LISTENING_PORT; ret = 0; diff --git a/src/cmd/isulad/arguments.h b/src/cmd/isulad/arguments.h index 9df04e7..0833457 100644 --- a/src/cmd/isulad/arguments.h +++ b/src/cmd/isulad/arguments.h @@ -57,6 +57,7 @@ struct service_arguments { /* default configs */ host_config_ulimits_element **default_ulimit; size_t default_ulimit_len; + unsigned int websocket_server_listening_port; // remaining arguments char * const *argv; diff --git a/src/cmd/isulad/commands.c b/src/cmd/isulad/commands.c index 6f72948..7873027 100644 --- a/src/cmd/isulad/commands.c +++ b/src/cmd/isulad/commands.c @@ -228,6 +228,27 @@ out: return ret; } +static int check_websocket_server_listening_port(const struct service_arguments *args) +{ +#define MIN_REGISTER_PORT 1024 +#define MAX_REGISTER_PORT 49151 + int ret = 0; + + if (args->json_confs->websocket_server_listening_port < MIN_REGISTER_PORT || + args->json_confs->websocket_server_listening_port > MAX_REGISTER_PORT) { + COMMAND_ERROR("Invalid websocket server listening port: '%d' (range: %d-%d)", + args->json_confs->websocket_server_listening_port, + MIN_REGISTER_PORT, MAX_REGISTER_PORT); + ERROR("Invalid websocket server listening port: '%d' (range: %d-%d)", + args->json_confs->websocket_server_listening_port, + MIN_REGISTER_PORT, MAX_REGISTER_PORT); + ret = -1; + goto out; + } +out: + return ret; +} + int check_args(struct service_arguments *args) { int ret = 0; @@ -291,6 +312,11 @@ int check_args(struct service_arguments *args) goto out; } + if (check_websocket_server_listening_port(args) != 0) { + ret = -1; + goto out; + } + out: return ret; } diff --git a/src/cmd/isulad/commands.h b/src/cmd/isulad/commands.h index ce1d203..d09037e 100644 --- a/src/cmd/isulad/commands.h +++ b/src/cmd/isulad/commands.h @@ -99,7 +99,10 @@ int update_default_ulimit(struct service_arguments *args); { CMD_OPT_TYPE_STRING_DUP, false, "tlskey", 0, &(cmdargs)->json_confs->tls_config->key_file, \ "Path to TLS key file (default \"/root/.iSulad/key.pem\")", NULL }, \ { CMD_OPT_TYPE_CALLBACK, false, "default-ulimit", 0, &(cmdargs)->default_ulimit, \ - "Default ulimits for containers (default [])", command_default_ulimit_append } + "Default ulimits for containers (default [])", command_default_ulimit_append }, \ + { CMD_OPT_TYPE_CALLBACK, false, "websocket-server-listening-port", 0, \ + &(cmdargs)->json_confs->websocket_server_listening_port, \ + "CRI websocket streaming service listening port (default 10350)", command_convert_uint } #endif /* __COMMAND_H */ diff --git a/src/config/isulad_config.c b/src/config/isulad_config.c index 47cf093..fbd0080 100644 --- a/src/config/isulad_config.c +++ b/src/config/isulad_config.c @@ -1256,6 +1256,28 @@ out: return plugins; } +/* conf get websocket server listening port */ +int32_t conf_get_websocket_server_listening_port() +{ + int32_t port = 0; + struct service_arguments *conf = NULL; + + if (isulad_server_conf_rdlock() != 0) { + return port; + } + + conf = conf_get_server_conf(); + if (conf == NULL) { + goto out; + } + + port = conf->json_confs->websocket_server_listening_port; + +out: + (void)isulad_server_conf_unlock(); + return port; +} + /* save args to conf */ int save_args_to_conf(struct service_arguments *args) { @@ -1794,6 +1816,10 @@ int merge_json_confs_into_global(struct service_arguments *args) args->json_confs->image_layer_check = tmp_json_confs->image_layer_check; } + if (tmp_json_confs->websocket_server_listening_port) { + args->json_confs->websocket_server_listening_port = tmp_json_confs->websocket_server_listening_port; + } + override_bool_pointer_value(&args->json_confs->use_decrypted_key, &tmp_json_confs->use_decrypted_key); if (tmp_json_confs->insecure_skip_verify_enforce) { diff --git a/src/config/isulad_config.h b/src/config/isulad_config.h index 492e730..58ce068 100644 --- a/src/config/isulad_config.h +++ b/src/config/isulad_config.h @@ -47,6 +47,7 @@ char *conf_get_isulad_log_gather_fifo_path(); char *conf_get_isulad_log_file(); char *conf_get_engine_log_file(); char *conf_get_enable_plugins(); +int32_t conf_get_websocket_server_listening_port(); int save_args_to_conf(struct service_arguments *args); diff --git a/src/constants.h b/src/constants.h index 624c1f9..bbc033d 100644 --- a/src/constants.h +++ b/src/constants.h @@ -59,5 +59,7 @@ #define MAX_MSG_BUFFER_SIZE (32 * 1024) +#define DEFAULT_WEBSOCKET_SERVER_LISTENING_PORT 10350 + #endif diff --git a/src/json/schema/schema/isulad-daemon-configs.json b/src/json/schema/schema/isulad-daemon-configs.json index ca04ffa..eb289c0 100644 --- a/src/json/schema/schema/isulad-daemon-configs.json +++ b/src/json/schema/schema/isulad-daemon-configs.json @@ -118,6 +118,9 @@ "cgroup-parent": { "type": "string" }, + "websocket-server-listening-port": { + "type": "int32" + }, "default-ulimits": { "type": "object", "patternProperties": { diff --git a/src/websocket/service/ws_server.cc b/src/websocket/service/ws_server.cc index 8c42aa8..8a3624f 100644 --- a/src/websocket/service/ws_server.cc +++ b/src/websocket/service/ws_server.cc @@ -24,6 +24,7 @@ #include "utils.h" #include "request_cache.h" #include "constants.h" +#include "isulad_config.h" struct lws_context *WebsocketServer::m_context = nullptr; std::atomic WebsocketServer::m_instance; @@ -385,6 +386,12 @@ void WebsocketServer::ServiceWorkThread(int threadid) void WebsocketServer::Start(Errors &err) { + m_listenPort = conf_get_websocket_server_listening_port(); + if (m_listenPort == 0) { + err.SetError("Failed to get websocket server listening port from daemon config"); + return; + } + if (CreateContext() < 0) { err.SetError("Websocket server start failed!, please check your network status" "(eg: port " + std::to_string(m_listenPort) + "is occupied)"); diff --git a/src/websocket/service/ws_server.h b/src/websocket/service/ws_server.h index 3b164cd..5a8d269 100644 --- a/src/websocket/service/ws_server.h +++ b/src/websocket/service/ws_server.h @@ -116,7 +116,7 @@ private: RouteCallbackRegister m_handler; static std::map m_wsis; url::URLDatum m_url; - int m_listenPort = 10251; + int m_listenPort; }; ssize_t WsWriteToClient(void *context, const void *data, size_t len); -- GitLab