From 4472159e1375fc3d4d60c6ee09cc6ec3386b7a1d Mon Sep 17 00:00:00 2001 From: Morris Jette <jette@schedmd.com> Date: Fri, 26 Jul 2013 16:14:28 -0700 Subject: [PATCH] Start to flesh out switch/generic --- src/plugins/switch/generic/switch_generic.c | 51 +++++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/src/plugins/switch/generic/switch_generic.c b/src/plugins/switch/generic/switch_generic.c index 701fe04e05d..6ebe1e1ade1 100644 --- a/src/plugins/switch/generic/switch_generic.c +++ b/src/plugins/switch/generic/switch_generic.c @@ -36,12 +36,20 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. \*****************************************************************************/ -#if HAVE_CONFIG_H +#if HAVE_CONFIG_H # include "config.h" #endif +#include <arpa/inet.h> +#include <ifaddrs.h> +#include <netinet/in.h> +#include <net/if.h> #include <signal.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> #include <sys/types.h> +#include <sys/socket.h> #include "slurm/slurm_errno.h" #include "src/common/slurm_xlator.h" @@ -77,6 +85,8 @@ const char plugin_name[] = "switch generic plugin"; const char plugin_type[] = "switch/generic"; const uint32_t plugin_version = 110; +uint32_t debug_flags = 0; + /* * init() is called when the plugin is loaded, before any other functions * are called. Put global initialization here. @@ -84,6 +94,7 @@ const uint32_t plugin_version = 110; int init(void) { verbose("%s loaded", plugin_name); + debug_flags = slurm_get_debug_flags(); return SLURM_SUCCESS; } @@ -94,6 +105,7 @@ int fini(void) extern int switch_p_reconfig(void) { + debug_flags = slurm_get_debug_flags(); return SLURM_SUCCESS; } @@ -291,6 +303,39 @@ extern int switch_p_alloc_node_info(switch_node_info_t **switch_node) extern int switch_p_build_node_info(switch_node_info_t *switch_node) { + struct ifaddrs *if_array = NULL, *if_rec; + void *addr_ptr = NULL; + char addr_str[INET6_ADDRSTRLEN], *ip_vers; + + if (getifaddrs(&if_array) == 0) { + for (if_rec = if_array; if_rec; if_rec = if_rec->ifa_next) { + if (!if_rec->ifa_addr->sa_data) + continue; + if (if_rec->ifa_flags & IFF_LOOPBACK) + continue; + if (if_rec->ifa_addr->sa_family == AF_INET) { + addr_ptr = &((struct sockaddr_in *) + if_rec->ifa_addr)->sin_addr; + ip_vers = "IP_V4"; + } else if (if_rec->ifa_addr->sa_family == AF_INET6) { + addr_ptr = &((struct sockaddr_in6 *) + if_rec->ifa_addr)->sin6_addr; + ip_vers = "IP_V6"; + } else { + /* AF_PACKET (statistics) and others ignored */ + continue; + } + (void) inet_ntop(if_rec->ifa_addr->sa_family, + addr_ptr, addr_str, sizeof(addr_str)); + if (debug_flags & DEBUG_FLAG_SWITCH) { + info("%s name=%s ip_version=%s address=%s", + plugin_type, if_rec->ifa_name, ip_vers, + addr_str); + } + } + } + freeifaddrs(if_array); + return SLURM_SUCCESS; } @@ -301,7 +346,7 @@ extern int switch_p_pack_node_info(switch_node_info_t *switch_node, } extern int switch_p_unpack_node_info(switch_node_info_t *switch_node, - Buf buffer) + Buf buffer) { return SLURM_SUCCESS; } @@ -323,7 +368,7 @@ extern char*switch_p_sprintf_node_info(switch_node_info_t *switch_node, } extern int switch_p_job_step_complete(switch_jobinfo_t *jobinfo, - char *nodelist) + char *nodelist) { return SLURM_SUCCESS; } -- GitLab