From f051d2fe2932d81ef82d0080fdcd8d16e1b1a178 Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Fri, 17 Sep 2004 16:51:11 +0000 Subject: [PATCH] Add logic for scontrol change of BGL-specific parameters. --- src/scontrol/scontrol.c | 68 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/scontrol/scontrol.c b/src/scontrol/scontrol.c index 2b55e717d12..dbf544d419c 100644 --- a/src/scontrol/scontrol.c +++ b/src/scontrol/scontrol.c @@ -1518,6 +1518,74 @@ _update_job (int argc, char *argv[]) job_msg.dependency = (uint32_t) strtol(&argv[i][11], (char **) NULL, 10); +#ifdef HAVE_BGL + else if (strncasecmp(argv[i], "Geometry=", 9) == 0) { + char* token, *delimiter = ",x", *next_ptr; + int j, rc = 0; + char* geometry_tmp = xstrdup(&argv[i][9]); + char* original_ptr = geometry_tmp; + token = strtok_r(geometry_tmp, delimiter, &next_ptr); + for (j=0; j<SYSTEM_DIMENSIONS; j++) { + if (token == NULL) { + error("insufficient dimensions in Geometry"); + rc = -1; + break; + } + job_msg.geometry[j] = atoi(token); + if (job_msg.geometry[j] <= 0) { + error("invalid --geometry argument"); + rc = -1; + break; + } + geometry_tmp = next_ptr; + token = strtok_r(geometry_tmp, delimiter, &next_ptr); + } + if (token != NULL) { + error("too many dimensions in Geometry"); + rc = -1; + } + + if (original_ptr) + xfree(original_ptr); + if (rc != 0) { + for (j=0; j<SYSTEM_DIMENSIONS; j++) + job_msg.geometry[j] = (uint16_t) NO_VAL; + exit_code = 1; + } + } + else if (strncasecmp(argv[i], "Rotate=", 7) == 0) { + if (strcasecmp(&argv[i][7], "yes") == 0) + job_msg.rotate = 1; + else if (strcasecmp(&argv[i][7], "no") == 0) + job_msg.rotate = 0; + else + job_msg.rotate = + (uint32_t) strtol(&argv[i][7], + (char **) NULL, 10); + } + else if (strncasecmp(argv[i], "Connection=", 11) == 0) { + if (strcasecmp(&argv[i][11], "torus") == 0) + job_msg.conn_type = RM_TORUS; + else if (strcasecmp(&argv[i][11], "mesh") == 0) + job_msg.conn_type = RM_MESH; + else if (strcasecmp(&argv[i][11], "nav") == 0) + job_msg.conn_type = RM_NAV; + else + job_msg.conn_type = + (uint16_t) strtol(&argv[i][11], + (char **) NULL, 10); + } + else if (strncasecmp(argv[i], "NodeUse=", 8) == 0) { + if (strcasecmp(&argv[i][8], "virtual") == 0) + job_msg.node_use = RM_VIRTUAL; + else if (strcasecmp(&argv[i][8], "coprocessor") == 0) + job_msg.node_use = RM_COPROCESSOR; + else + job_msg.node_use = + (uint16_t) strtol(&argv[i][8], + (char **) NULL, 10); + } +#endif else { exit_code = 1; fprintf (stderr, "Invalid input: %s\n", argv[i]); -- GitLab