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

Reply via email to