static inline lagopus_result_t s_opt_parse_port(datastore_interp_state_t state, const char *const argv[], lagopus_dstring_t *result) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; uint16_t tmp = 0; if (IS_VALID_STRING(*argv) == true) { if ((ret = lagopus_str_parse_uint16(*argv, &tmp)) == LAGOPUS_RESULT_OK) { if (state != DATASTORE_INTERP_STATE_DRYRUN) { s_port = tmp; } ret = LAGOPUS_RESULT_OK; } else { ret = datastore_json_result_string_setf(result, LAGOPUS_RESULT_INVALID_ARGS, "\"can't parse '%s' as a " "uint16_t integer.\"", *argv); } } else { ret = datastore_json_result_string_setf(result, LAGOPUS_RESULT_INVALID_ARGS, "Bad opt value = %s", *argv); } return ret; }
static void s_once_proc(void) { char *dbg_lvl_str = getenv("LAGOPUS_LOG_DEBUGLEVEL"); char *logfile = getenv("LAGOPUS_LOG_FILE"); uint16_t d = 0; lagopus_log_destination_t log_dst = LAGOPUS_LOG_EMIT_TO_UNKNOWN; if (IS_VALID_STRING(dbg_lvl_str) == true) { uint16_t tmp = 0; if (lagopus_str_parse_uint16(dbg_lvl_str, &tmp) == LAGOPUS_RESULT_OK) { d = tmp; } } if ((logfile = s_validate_path(logfile, s_is_valid_path)) != NULL) { log_dst = LAGOPUS_LOG_EMIT_TO_FILE; } if (lagopus_log_initialize(log_dst, logfile, false, true, d) != LAGOPUS_RESULT_OK) { lagopus_exit_error(1, "logger initialization error.\n"); } if (d > 0) { lagopus_msg_debug(d, "Logger debug level is set to: %d.\n", d); } #ifdef HAVE_PROCFS_SELF_EXE if (readlink("/proc/self/exe", s_exefile, PATH_MAX) != -1) { (void)lagopus_set_command_name(s_exefile); lagopus_msg_debug(10, "set the command name '%s'.\n", lagopus_get_command_name()); } #endif /* HAVE_PROCFS_SELF_EXE */ }
static void s_once_proc(void) { char *dbg_lvl_str = getenv("LAGOPUS_LOG_DEBUGLEVEL"); char *logfile = getenv("LAGOPUS_LOG_FILE"); uint16_t d = 0; lagopus_log_destination_t log_dst = LAGOPUS_LOG_EMIT_TO_UNKNOWN; if (IS_VALID_STRING(dbg_lvl_str) == true) { uint16_t tmp = 0; if (lagopus_str_parse_uint16(dbg_lvl_str, &tmp) == LAGOPUS_RESULT_OK) { d = tmp; } } if ((logfile = s_validate_path(logfile, s_is_valid_path)) != NULL) { log_dst = LAGOPUS_LOG_EMIT_TO_FILE; } if (lagopus_log_initialize(log_dst, logfile, false, true, d) != LAGOPUS_RESULT_OK) { lagopus_exit_error(1, "logger initialization error.\n"); } if (d > 0) { lagopus_msg_debug(d, "Logger debug level is set to: %d.\n", d); } }
static lagopus_result_t check_ping_interval(const char *ping_interval, uint16_t *val) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; if (ping_interval != NULL && val != NULL) { if ((ret = lagopus_str_parse_uint16(ping_interval, val)) == LAGOPUS_RESULT_OK) { if (*val > 0) { ret = LAGOPUS_RESULT_OK; } else { ret = LAGOPUS_RESULT_OUT_OF_RANGE; } } } return ret; }
static inline lagopus_result_t s_parse_snmp_internal(const char *const argv[], lagopus_dstring_t *result) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; char *agentx_sock = NULL; char *esc_agentx = NULL; char *ping = NULL; while (IS_VALID_STRING(*argv) == true) { if (strcmp(*argv, "-master-agentx-socket") == 0) { if (IS_VALID_STRING(*(argv + 1)) == true) { argv++; if ((ret = lagopus_str_unescape(*argv, "\"'", &agentx_sock)) > 0) { if ((ret = lagopus_snmp_set_agentx_sock(agentx_sock)) != LAGOPUS_RESULT_OK) { ret = datastore_json_result_string_setf(result, ret, "Can't set %s.", agentx_sock); goto done; } } else if (ret == 0) { ret = datastore_json_result_string_setf(result, LAGOPUS_RESULT_INVALID_ARGS, "Bad opt val = %s ", *argv); goto done; } else { ret = datastore_json_result_string_setf(result, ret, "Can't convert to an " "unescaped strings."); goto done; } } else { if ((ret = lagopus_snmp_get_agentx_sock(&agentx_sock)) == LAGOPUS_RESULT_OK) { ret = datastore_json_string_escape(agentx_sock, (char **)&esc_agentx); if (ret == LAGOPUS_RESULT_OK) { ret = datastore_json_result_setf(result, ret, "[{" "\"master-agentx-socket\":\"%s\"" "}]", esc_agentx); goto done; } else { ret = datastore_json_result_string_setf(result, ret, "Can't convert to " "an escaped strings."); goto done; } } else { ret = datastore_json_result_string_setf(result, ret, "Can't get " "master-agentx-socket."); goto done; } } } else if (strcmp(*argv, "-ping-interval-second") == 0) { if (IS_VALID_STRING(*(argv + 1)) == true) { argv++; ret = lagopus_str_unescape(*argv, "\"'", &ping); if (ret > 0) { uint16_t new_ping; ret = lagopus_str_parse_uint16(ping, &new_ping); if (ret == LAGOPUS_RESULT_OK) { if ((ret = lagopus_snmp_set_ping_interval(new_ping)) != LAGOPUS_RESULT_OK) { ret = datastore_json_result_string_setf(result, ret, "Can't set " "ping-interval."); goto done; } } else { ret = datastore_json_result_string_setf(result, ret, "Can't parse string " "to uint16_t."); goto done; } } else if (ret == 0) { ret = datastore_json_result_string_setf(result, LAGOPUS_RESULT_INVALID_ARGS, "Bad opt val = %s ", *argv); goto done; } else { ret = datastore_json_result_string_setf(result, ret, "Can't convert to an " "unescaped strings."); goto done; } } else { uint16_t ping_interval; ret = lagopus_snmp_get_ping_interval(&ping_interval); if (ret == LAGOPUS_RESULT_OK) { ret = datastore_json_result_setf(result, ret, "[{" "\"ping-interval-second\":%d" "}]", ping_interval); goto done; } else { ret = datastore_json_result_string_setf(result, ret, "Can't get " "ping-interval-second."); goto done; } } } else if (strcmp(*argv, "enable") == 0) { if ((ret = lagopus_snmp_set_enable(true)) != LAGOPUS_RESULT_OK) { ret = datastore_json_result_string_setf(result, ret, "Can't set enable."); goto done; } } else { char *esc_str = NULL; ret = datastore_json_string_escape(*argv, (char **)&esc_str); if (ret == LAGOPUS_RESULT_OK) { ret = datastore_json_result_string_setf(result, LAGOPUS_RESULT_NOT_FOUND, "option = %s", esc_str); } free((void *)esc_str); } done: free((void *)agentx_sock); free((void *)esc_agentx); free((void *)ping); agentx_sock = NULL; esc_agentx = NULL; ping = NULL; if (ret != LAGOPUS_RESULT_OK) { break; } argv++; } if (ret == LAGOPUS_RESULT_OK && lagopus_dstring_empty(result)) { ret = lagopus_dstring_appendf(result, "{\"ret\":\"OK\"}"); if (ret != LAGOPUS_RESULT_OK) { ret = datastore_json_result_string_setf(result, ret, "Can't add strings " "to dstring."); } } return ret; }