Hello Haproxy ML, Here is a simple patch to add server ports to server state file.
Regards, Fred.
>From eff80e502338618ea991ecb0fac11fd25dec19b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= <flecai...@haproxy.com> Date: Tue, 1 Aug 2017 08:47:19 +0200 Subject: [PATCH] MINOR: Add server port field to server state file. This patch adds server ports to server state file at the end of each line for backward compatibility. --- doc/management.txt | 1 + include/types/server.h | 5 +++-- src/proxy.c | 4 ++-- src/server.c | 17 +++++++++++++++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/doc/management.txt b/doc/management.txt index dd604ae..c4e76ed 100644 --- a/doc/management.txt +++ b/doc/management.txt @@ -2042,6 +2042,7 @@ show servers state [<backend>] srv_f_forced_id: Flag to know if the server's ID is forced by configuration. srv_fqdn: Server FQDN. + srv_port: Server port. show sess Dump all known sessions. Avoid doing this on slow connections as this can diff --git a/include/types/server.h b/include/types/server.h index 8fb6f2e..724d496 100644 --- a/include/types/server.h +++ b/include/types/server.h @@ -123,9 +123,10 @@ enum srv_initaddr { "srv_agent_state " \ "bk_f_forced_id " \ "srv_f_forced_id " \ - "srv_fqdn" + "srv_fqdn " \ + "srv_port" -#define SRV_STATE_FILE_MAX_FIELDS 18 +#define SRV_STATE_FILE_MAX_FIELDS 19 #define SRV_STATE_FILE_NB_FIELDS_VERSION_1 18 #define SRV_STATE_LINE_MAXLEN 512 diff --git a/src/proxy.c b/src/proxy.c index 1481089..641d4fa 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -1458,13 +1458,13 @@ static int dump_servers_state(struct stream_interface *si, struct chunk *buf) "%d %s %s " "%d %d %d %d %ld " "%d %d %d %d %d " - "%d %d %s" + "%d %d %s %u" "\n", px->uuid, px->id, srv->puid, srv->id, srv_addr, srv->state, srv->admin, srv->uweight, srv->iweight, (long int)srv_time_since_last_change, srv->check.status, srv->check.result, srv->check.health, srv->check.state, srv->agent.state, - bk_f_forced_id, srv_f_forced_id, srv->hostname ? srv->hostname : "-"); + bk_f_forced_id, srv_f_forced_id, srv->hostname ? srv->hostname : "-", srv->svc_port); if (bi_putchk(si_ic(si), &trash) == -1) { si_applet_cant_put(si); return 0; diff --git a/src/server.c b/src/server.c index 008bafa..f457d55 100644 --- a/src/server.c +++ b/src/server.c @@ -2892,8 +2892,11 @@ static void srv_update_state(struct server *srv, int version, char **params) int srv_f_forced_id; int fqdn_set_by_cli; const char *fqdn; + const char *port_str; + unsigned int port; fqdn = NULL; + port = 0; msg = get_trash_chunk(); switch (version) { case 1: @@ -2913,6 +2916,7 @@ static void srv_update_state(struct server *srv, int version, char **params) * bk_f_forced_id: params[11] * srv_f_forced_id: params[12] * srv_fqdn: params[13] + * srv_port: params[14] */ /* validating srv_op_state */ @@ -3036,6 +3040,15 @@ static void srv_update_state(struct server *srv, int version, char **params) fqdn = NULL; } + port_str = params[14]; + if (port_str) { + port = strl2uic(port_str, strlen(port_str)); + if (port > USHRT_MAX) { + chunk_appendf(msg, ", invalid srv_port value '%s'", port_str); + port_str = NULL; + } + } + /* don't apply anything if one error has been detected */ if (msg->len) goto out; @@ -3167,6 +3180,9 @@ static void srv_update_state(struct server *srv, int version, char **params) } } + if (port_str) + srv->svc_port = port; + break; default: chunk_appendf(msg, ", version '%d' not supported", version); @@ -3416,6 +3432,7 @@ void apply_server_state(void) * bk_f_forced_id: params[15] => srv_params[11] * srv_f_forced_id: params[16] => srv_params[12] * srv_fqdn: params[17] => srv_params[13] + * srv_port: params[18] => srv_params[14] */ if (arg >= 4) { srv_params[srv_arg] = cur; -- 2.1.4