Move options parse and setup functions above options rec struct initialization - eliminate prototyping, typedefs, etc.
Signed-off-by: Sasha Khapyorsky <sas...@voltaire.com> --- opensm/opensm/osm_subnet.c | 421 +++++++++++++++++++++----------------------- 1 files changed, 204 insertions(+), 217 deletions(-) diff --git a/opensm/opensm/osm_subnet.c b/opensm/opensm/osm_subnet.c index 69937c1..f12685e 100644 --- a/opensm/opensm/osm_subnet.c +++ b/opensm/opensm/osm_subnet.c @@ -73,25 +73,217 @@ static const char null_str[] = "(null)"; #define OPT_OFFSET(opt) offsetof(osm_subn_opt_t, opt) -typedef void (setup_fn_t)(osm_subn_t *p_subn, void *p_val); -typedef void (parse_fn_t)(osm_subn_t *p_subn, char *p_key, char *p_val_str, - void *p_val, setup_fn_t *f); - typedef struct opt_rec { const char *name; unsigned long opt_offset; - parse_fn_t *parse_fn; - setup_fn_t *setup_fn; + void (*parse_fn)(osm_subn_t *p_subn, char *p_key, char *p_val_str, + void *p_val, void (*)(osm_subn_t *, void *)); + void (*setup_fn)(osm_subn_t *p_subn, void *p_val); int can_update; } opt_rec_t; -static parse_fn_t opts_parse_uint8, opts_parse_uint16, opts_parse_net16, - opts_parse_uint32, opts_parse_int32, opts_parse_net64, - opts_parse_charp, opts_parse_boolean; +static void log_report(const char *fmt, ...) +{ + char buf[128]; + va_list args; + va_start(args, fmt); + vsnprintf(buf, sizeof(buf), fmt, args); + va_end(args); + printf("%s", buf); + cl_log_event("OpenSM", CL_LOG_INFO, buf, NULL, 0); +} + +static void log_config_value(char *name, const char *fmt, ...) +{ + char buf[128]; + va_list args; + unsigned n; + va_start(args, fmt); + n = snprintf(buf, sizeof(buf), " Loading Cached Option:%s = ", name); + if (n > sizeof(buf)) + n = sizeof(buf); + n += vsnprintf(buf + n, sizeof(buf) - n, fmt, args); + if (n > sizeof(buf)) + n = sizeof(buf); + snprintf(buf + n, sizeof(buf) - n, "\n"); + va_end(args); + printf("%s", buf); + cl_log_event("OpenSM", CL_LOG_INFO, buf, NULL, 0); +} + +static void opts_setup_log_flags(osm_subn_t *p_subn, void *p_val) +{ + p_subn->p_osm->log.level = *((uint8_t *) p_val); +} + +static void opts_setup_force_log_flush(osm_subn_t *p_subn, void *p_val) +{ + p_subn->p_osm->log.flush = *((boolean_t *) p_val); +} + +static void opts_setup_accum_log_file(osm_subn_t *p_subn, void *p_val) +{ + p_subn->p_osm->log.accum_log_file = *((boolean_t *) p_val); +} + +static void opts_setup_log_max_size(osm_subn_t *p_subn, void *p_val) +{ + uint32_t log_max_size = *((uint32_t *) p_val); + + p_subn->p_osm->log.max_size = log_max_size << 20; /* convert from MB to bytes */ +} + +static void opts_setup_sminfo_polling_timeout(osm_subn_t *p_subn, void *p_val) +{ + osm_sm_t *p_sm = &p_subn->p_osm->sm; + uint32_t sminfo_polling_timeout = *((uint32_t *) p_val); + + cl_timer_stop(&p_sm->polling_timer); + cl_timer_start(&p_sm->polling_timer, sminfo_polling_timeout); +} + +static void opts_setup_sm_priority(osm_subn_t *p_subn, void *p_val) +{ + osm_sm_t *p_sm = &p_subn->p_osm->sm; + uint8_t sm_priority = *((uint8_t *) p_val); + + osm_set_sm_priority(p_sm, sm_priority); +} + +static void opts_parse_net64(IN osm_subn_t *p_subn, IN char *p_key, + IN char *p_val_str, IN void *p_v, + void (*pfn)(osm_subn_t *, void *)) +{ + uint64_t *p_val = p_v; + uint64_t val = strtoull(p_val_str, NULL, 0); + + if (cl_hton64(val) != *p_val) { + log_config_value(p_key, "0x%016" PRIx64, val); + if (pfn) + pfn(p_subn, &val); + *p_val = cl_ntoh64(val); + } +} + +static void opts_parse_uint32(IN osm_subn_t *p_subn, IN char *p_key, + IN char *p_val_str, IN void *p_v, + void (*pfn)(osm_subn_t *, void *)) +{ + uint32_t *p_val = p_v; + uint32_t val = strtoul(p_val_str, NULL, 0); + + if (val != *p_val) { + log_config_value(p_key, "%u", val); + if (pfn) + pfn(p_subn, &val); + *p_val = val; + } +} + +static void opts_parse_int32(IN osm_subn_t *p_subn, IN char *p_key, + IN char *p_val_str, IN void *p_v, + void (*pfn)(osm_subn_t *, void *)) +{ + int32_t *p_val = p_v; + int32_t val = strtol(p_val_str, NULL, 0); + + if (val != *p_val) { + log_config_value(p_key, "%d", val); + if (pfn) + pfn(p_subn, &val); + *p_val = val; + } +} + +static void opts_parse_uint16(IN osm_subn_t *p_subn, IN char *p_key, + IN char *p_val_str, IN void *p_v, + void (*pfn)(osm_subn_t *, void *)) +{ + uint16_t *p_val = p_v; + uint16_t val = (uint16_t) strtoul(p_val_str, NULL, 0); + + if (val != *p_val) { + log_config_value(p_key, "%u", val); + if (pfn) + pfn(p_subn, &val); + *p_val = val; + } +} + +static void opts_parse_net16(IN osm_subn_t *p_subn, IN char *p_key, + IN char *p_val_str, IN void *p_v, + void (*pfn)(osm_subn_t *, void *)) +{ + uint16_t *p_val = p_v; + uint16_t val = strtoul(p_val_str, NULL, 0); + + CL_ASSERT(val < 0x10000); + if (cl_hton16(val) != *p_val) { + log_config_value(p_key, "0x%04x", val); + if (pfn) + pfn(p_subn, &val); + *p_val = cl_hton16(val); + } +} + +static void opts_parse_uint8(IN osm_subn_t *p_subn, IN char *p_key, + IN char *p_val_str, IN void *p_v, + void (*pfn)(osm_subn_t *, void *)) +{ + uint8_t *p_val = p_v; + uint8_t val = strtoul(p_val_str, NULL, 0); + + CL_ASSERT(val < 0x100); + if (val != *p_val) { + log_config_value(p_key, "%u", val); + if (pfn) + pfn(p_subn, &val); + *p_val = val; + } +} + +static void opts_parse_boolean(IN osm_subn_t *p_subn, IN char *p_key, + IN char *p_val_str, IN void *p_v, + void (*pfn)(osm_subn_t *, void *)) +{ + boolean_t *p_val = p_v; + boolean_t val; -static setup_fn_t opts_setup_log_flags, opts_setup_log_max_size, - opts_setup_force_log_flush, opts_setup_accum_log_file, - opts_setup_sminfo_polling_timeout, opts_setup_sm_priority; + if (!p_val_str) + return; + + if (strcmp("TRUE", p_val_str)) + val = FALSE; + else + val = TRUE; + + if (val != *p_val) { + log_config_value(p_key, "%s", p_val_str); + if (pfn) + pfn(p_subn, &val); + *p_val = val; + } +} + +static void opts_parse_charp(IN osm_subn_t *p_subn, IN char *p_key, + IN char *p_val_str, IN void *p_v, + void (*pfn)(osm_subn_t *, void *)) +{ + char **p_val = p_v; + const char *current_str = *p_val ? *p_val : null_str ; + + if (p_val_str && strcmp(p_val_str, current_str)) { + char *new; + log_config_value(p_key, "%s", p_val_str); + /* special case the "(null)" string */ + new = strcmp(null_str, p_val_str) ? strdup(p_val_str) : NULL; + if (pfn) + pfn(p_subn, new); + if (*p_val) + free(*p_val); + *p_val = new; + } +} static const opt_rec_t opt_tbl[] = { { "guid", OPT_OFFSET(guid), opts_parse_net64, NULL, 0 }, @@ -196,45 +388,6 @@ static const opt_rec_t opt_tbl[] = { {0} }; -static void opts_setup_log_flags(osm_subn_t *p_subn, void *p_val) -{ - p_subn->p_osm->log.level = *((uint8_t *) p_val); -} - -static void opts_setup_force_log_flush(osm_subn_t *p_subn, void *p_val) -{ - p_subn->p_osm->log.flush = *((boolean_t *) p_val); -} - -static void opts_setup_accum_log_file(osm_subn_t *p_subn, void *p_val) -{ - p_subn->p_osm->log.accum_log_file = *((boolean_t *) p_val); -} - -static void opts_setup_log_max_size(osm_subn_t *p_subn, void *p_val) -{ - uint32_t log_max_size = *((uint32_t *) p_val); - - p_subn->p_osm->log.max_size = log_max_size << 20; /* convert from MB to bytes */ -} - -static void opts_setup_sminfo_polling_timeout(osm_subn_t *p_subn, void *p_val) -{ - osm_sm_t *p_sm = &p_subn->p_osm->sm; - uint32_t sminfo_polling_timeout = *((uint32_t *) p_val); - - cl_timer_stop(&p_sm->polling_timer); - cl_timer_start(&p_sm->polling_timer, sminfo_polling_timeout); -} - -static void opts_setup_sm_priority(osm_subn_t *p_subn, void *p_val) -{ - osm_sm_t *p_sm = &p_subn->p_osm->sm; - uint8_t sm_priority = *((uint8_t *) p_val); - - osm_set_sm_priority(p_sm, sm_priority); -} - /********************************************************************** **********************************************************************/ void osm_subn_construct(IN osm_subn_t * const p_subn) @@ -596,172 +749,6 @@ void osm_subn_set_default_opt(IN osm_subn_opt_t * const p_opt) /********************************************************************** **********************************************************************/ -static void log_report(const char *fmt, ...) -{ - char buf[128]; - va_list args; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); - va_end(args); - printf("%s", buf); - cl_log_event("OpenSM", CL_LOG_INFO, buf, NULL, 0); -} - -static void log_config_value(char *name, const char *fmt, ...) -{ - char buf[128]; - va_list args; - unsigned n; - va_start(args, fmt); - n = snprintf(buf, sizeof(buf), " Loading Cached Option:%s = ", name); - if (n > sizeof(buf)) - n = sizeof(buf); - n += vsnprintf(buf + n, sizeof(buf) - n, fmt, args); - if (n > sizeof(buf)) - n = sizeof(buf); - snprintf(buf + n, sizeof(buf) - n, "\n"); - va_end(args); - printf("%s", buf); - cl_log_event("OpenSM", CL_LOG_INFO, buf, NULL, 0); -} - -static void opts_parse_net64(IN osm_subn_t *p_subn, IN char *p_key, - IN char *p_val_str, IN void *p_v, - IN setup_fn_t pfn) -{ - uint64_t *p_val = p_v; - uint64_t val = strtoull(p_val_str, NULL, 0); - - if (cl_hton64(val) != *p_val) { - log_config_value(p_key, "0x%016" PRIx64, val); - if (pfn) - pfn(p_subn, &val); - *p_val = cl_ntoh64(val); - } -} - -static void opts_parse_uint32(IN osm_subn_t *p_subn, IN char *p_key, - IN char *p_val_str, IN void *p_v, - IN setup_fn_t pfn) -{ - uint32_t *p_val = p_v; - uint32_t val = strtoul(p_val_str, NULL, 0); - - if (val != *p_val) { - log_config_value(p_key, "%u", val); - if (pfn) - pfn(p_subn, &val); - *p_val = val; - } -} - -static void opts_parse_int32(IN osm_subn_t *p_subn, IN char *p_key, - IN char *p_val_str, IN void *p_v, - IN setup_fn_t pfn) -{ - int32_t *p_val = p_v; - int32_t val = strtol(p_val_str, NULL, 0); - - if (val != *p_val) { - log_config_value(p_key, "%d", val); - if (pfn) - pfn(p_subn, &val); - *p_val = val; - } -} - -static void opts_parse_uint16(IN osm_subn_t *p_subn, IN char *p_key, - IN char *p_val_str, IN void *p_v, - IN setup_fn_t pfn) -{ - uint16_t *p_val = p_v; - uint16_t val = (uint16_t) strtoul(p_val_str, NULL, 0); - - if (val != *p_val) { - log_config_value(p_key, "%u", val); - if (pfn) - pfn(p_subn, &val); - *p_val = val; - } -} - -static void opts_parse_net16(IN osm_subn_t *p_subn, IN char *p_key, - IN char *p_val_str, IN void *p_v, - IN setup_fn_t pfn) -{ - uint16_t *p_val = p_v; - uint16_t val = strtoul(p_val_str, NULL, 0); - - CL_ASSERT(val < 0x10000); - if (cl_hton16(val) != *p_val) { - log_config_value(p_key, "0x%04x", val); - if (pfn) - pfn(p_subn, &val); - *p_val = cl_hton16(val); - } -} - -static void opts_parse_uint8(IN osm_subn_t *p_subn, IN char *p_key, - IN char *p_val_str, IN void *p_v, - IN setup_fn_t pfn) -{ - uint8_t *p_val = p_v; - uint8_t val = strtoul(p_val_str, NULL, 0); - - CL_ASSERT(val < 0x100); - if (val != *p_val) { - log_config_value(p_key, "%u", val); - if (pfn) - pfn(p_subn, &val); - *p_val = val; - } -} - -static void opts_parse_boolean(IN osm_subn_t *p_subn, IN char *p_key, - IN char *p_val_str, IN void *p_v, - IN setup_fn_t pfn) -{ - boolean_t *p_val = p_v; - boolean_t val; - - if (!p_val_str) - return; - - if (strcmp("TRUE", p_val_str)) - val = FALSE; - else - val = TRUE; - - if (val != *p_val) { - log_config_value(p_key, "%s", p_val_str); - if (pfn) - pfn(p_subn, &val); - *p_val = val; - } -} - -static void opts_parse_charp(IN osm_subn_t *p_subn, IN char *p_key, - IN char *p_val_str, IN void *p_v, - IN setup_fn_t pfn) -{ - char **p_val = p_v; - const char *current_str = *p_val ? *p_val : null_str ; - - if (p_val_str && strcmp(p_val_str, current_str)) { - char *new; - log_config_value(p_key, "%s", p_val_str); - /* special case the "(null)" string */ - new = strcmp(null_str, p_val_str) ? strdup(p_val_str) : NULL; - if (pfn) - pfn(p_subn, new); - if (*p_val) - free(*p_val); - *p_val = new; - } -} - -/********************************************************************** - **********************************************************************/ static char *clean_val(char *val) { char *p = val; -- 1.6.1.2.319.gbd9e _______________________________________________ general mailing list general@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general