From 049c62f2fd8a8b4e1a58a2ccf6af1da271fe63b6 Mon Sep 17 00:00:00 2001
From: Tim McMullan <mcmullan@schedmd.com>
Date: Thu, 15 Oct 2020 08:20:12 -0400
Subject: [PATCH] Add flags to support enabling/disabling IPv4 and IPv6.

Bug 8350
---
 slurm/slurm.h.in           |  2 ++
 src/common/read_config.c   | 14 ++++++++++++++
 src/slurmdbd/read_config.c | 15 +++++++++++++++
 3 files changed, 31 insertions(+)

diff --git a/slurm/slurm.h.in b/slurm/slurm.h.in
index 0e2e902e08e..b48f4260d54 100644
--- a/slurm/slurm.h.in
+++ b/slurm/slurm.h.in
@@ -2639,6 +2639,8 @@ typedef struct reservation_name_msg {
 #define CTL_CONF_ASRU           0x00000008 /* AllowSpecResourcesUsage */
 #define CTL_CONF_PAM            0x00000010 /* UsePam */
 #define CTL_CONF_WCKEY          0x00000020 /* TrackWCKey */
+#define CTL_CONF_IPV4_ENABLED	0x00000040 /* IPv4 is enabled */
+#define CTL_CONF_IPV6_ENABLED	0x00000080 /* IPv6 is enabled */
 
 #define LOG_FMT_ISO8601_MS      0
 #define LOG_FMT_ISO8601         1
diff --git a/src/common/read_config.c b/src/common/read_config.c
index 031bfac85dc..a73c07ed6fb 100644
--- a/src/common/read_config.c
+++ b/src/common/read_config.c
@@ -3586,6 +3586,20 @@ static int _validate_and_set_defaults(slurm_conf_t *conf,
 	(void) s_p_get_string(&conf->comm_params, "CommunicationParameters",
 			      hashtbl);
 
+	/*
+	 * IPv4 on by default, can be disabled.
+	 * IPv6 off by default, can be turned on.
+	 */
+	conf->conf_flags |= CTL_CONF_IPV4_ENABLED;
+	if (xstrcasestr(slurm_conf.comm_params, "EnableIPv6"))
+		conf->conf_flags |= CTL_CONF_IPV6_ENABLED;
+	if (xstrcasestr(slurm_conf.comm_params, "DisableIPv4"))
+		conf->conf_flags &= ~CTL_CONF_IPV4_ENABLED;
+
+	if (!(conf->conf_flags & CTL_CONF_IPV4_ENABLED) &&
+	    !(conf->conf_flags & CTL_CONF_IPV6_ENABLED))
+		fatal("Both IPv4 and IPv6 support disabled, cannot communicate");
+
 	if (!s_p_get_string(&conf->core_spec_plugin, "CoreSpecPlugin",
 	    hashtbl)) {
 		conf->core_spec_plugin =
diff --git a/src/slurmdbd/read_config.c b/src/slurmdbd/read_config.c
index a1d5da447cf..7c232b41b8a 100644
--- a/src/slurmdbd/read_config.c
+++ b/src/slurmdbd/read_config.c
@@ -240,6 +240,21 @@ extern int read_slurmdbd_conf(void)
 			       "CommitDelay", tbl);
 		s_p_get_string(&slurm_conf.comm_params,
 			       "CommunicationParameters", tbl);
+
+		/*
+		 * IPv4 on by default, can be disabled.
+		 * IPv6 off by default, can be turned on.
+		 */
+		slurm_conf.conf_flags |= CTL_CONF_IPV4_ENABLED;
+		if (xstrcasestr(slurm_conf.comm_params, "EnableIPv6"))
+			slurm_conf.conf_flags |= CTL_CONF_IPV6_ENABLED;
+		if (xstrcasestr(slurm_conf.comm_params, "DisableIPv4"))
+			slurm_conf.conf_flags &= ~CTL_CONF_IPV4_ENABLED;
+
+		if (!(slurm_conf.conf_flags & CTL_CONF_IPV4_ENABLED) &&
+		    !(slurm_conf.conf_flags & CTL_CONF_IPV6_ENABLED))
+			fatal("Both IPv4 and IPv6 support disabled, cannot communicate");
+
 		s_p_get_string(&slurmdbd_conf->dbd_backup,
 			       "DbdBackupHost", tbl);
 		s_p_get_string(&slurmdbd_conf->dbd_host, "DbdHost", tbl);
-- 
GitLab