3 * @brief the main module of l7vsadm
4 * @brief it interrupts command line option
5 * @brief and communucate with l7vsd
7 * L7VSADM: Virtual Server Administration Program for L7vsd
8 * Copyright (C) 2005 NTT COMWARE Corporation.
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25 **********************************************************************/
33 #include <sys/types.h>
40 #include "l7vs_config.h"
41 #include "l7vs_replication.h"
42 #include "l7vs_module.h"
43 #include "l7vs_service.h"
44 #include "l7vs_dest.h"
45 #include "l7vs_conn.h"
49 //! Prototype of functions.
50 static int parse_command(int argc, char *argv[]);
52 static int parse_option_list(int argc, char *argv[]);
53 static int parse_option_vs(int argc, char *argv[]);
54 static int parse_option_rs(int argc, char *argv[]);
55 static int parse_option_replication(int argc, char *argv[]);
56 static int parse_option_log(int argc, char *argv[]);
57 static int parse_option_snmp(int argc, char *argv[]);
58 static int parse_option_parameter(int argc, char *argv[]);
59 static int parse_option_help(int argc, char *argv[]);
61 static int parse_endpoint(struct sockaddr_in *addr, const char *endpoint_str, int allow_inaddr_any);
62 static int parse_digit(const char *digit_str);
63 static long long parse_qos(const char *qos_str);
64 static int parse_option_protomod(int argc, char *argv[], int m_idx_begin, int m_idx_end);
66 static int operate_list(void);
67 static int operate_add_vs(void);
68 static int operate_edit_vs(void);
69 static int operate_del_vs(void);
70 static int operate_flush_vs(void);
71 static int operate_add_rs(void);
72 static int operate_edit_rs(void);
73 static int operate_del_rs(void);
74 static int operate_replication(void);
75 static int operate_log(void);
76 static int operate_snmp(void);
77 static int operate_parameter(void);
78 static int operate_help(void);
80 static int list_replication_info(void);
81 static int list_log_info(void);
82 static int list_snmp_info(void);
84 static int get_vs(void *vs_buffer, int vs_bufsize);
85 static int get_rs(struct l7vs_dest_arg *darg_buffer, int rs_num, struct l7vs_service_arg *sarg);
86 static int list_vs(struct l7vs_service_arg *sarg);
87 static int list_rs(struct l7vs_dest_arg *darg);
89 static char *get_endpoint_name(struct sockaddr_storage *addr);
91 static int create_socket(void);
92 static void destroy_socket(void);
93 static int communicate_to_l7vsd(struct l7vsadm_iov_data *iov_data);
94 static int send_request(struct iovec *req_iov, int req_cnt);
95 static int recv_response(struct iovec *rsp_iov, int rsp_cnt);
97 static void usage(FILE *fp);
99 static void set_parameter(void);
100 static char *config_strerror(int rsp_code);
101 static void sig_exit_handler(int sig);
102 static int set_signal(void);
104 //! L7vsadm option data that has been parsed.
105 static struct l7vsadm_option_data l7vsadm_option_data;
106 static char tmp_endpoint_name[NI_MAXHOST + NI_MAXSERV + 2];
108 //! Table for command argument check.
109 static struct l7vsadm_command_list l7vsadm_command_table[] = {
110 {CMD_LIST, "-l", "--list", parse_option_list, operate_list},
111 {CMD_LIST_VERBOSE, "-V", "--verbose", parse_option_list, operate_list},
112 {CMD_LIST_KEY, "-K", "--key", parse_option_list, operate_list},
113 {CMD_ADD_VS, "-A", "--add-service", parse_option_vs, operate_add_vs},
114 {CMD_DEL_VS, "-D", "--delete-service", parse_option_vs, operate_del_vs},
115 {CMD_EDIT_VS, "-E", "--edit-service", parse_option_vs, operate_edit_vs},
116 {CMD_FLUSH_VS, "-C", "--flush", parse_option_vs, operate_flush_vs},
117 {CMD_ADD_RS, "-a", "--add-server", parse_option_rs, operate_add_rs},
118 {CMD_DEL_RS, "-d", "--delete-server", parse_option_rs, operate_del_rs},
119 {CMD_EDIT_RS, "-e", "--edit-server", parse_option_rs, operate_edit_rs},
120 {CMD_REPLICATION, "-R", "--replication", parse_option_replication, operate_replication},
121 {CMD_LOG, "-L", "--log", parse_option_log, operate_log},
122 {CMD_SNMP, "-S", "--snmp", parse_option_snmp, operate_snmp},
123 {CMD_PARAMETER, "-P", "--parameter", parse_option_parameter, operate_parameter},
124 {CMD_HELP, "-h", "--help", parse_option_help, operate_help},
125 {CMD_NONE, NULL, NULL, NULL, NULL}
128 //! Table for List command argument check.(optional argument)
129 static struct l7vsadm_option_list l7vsadm_option_table_list[] = {
130 {OPT_NUMERIC, "-n", "--numeric", 0},
131 {OPT_NONE, NULL, NULL, 0}
134 //! Table for VirtualService command argument check.(optional argument)
135 static struct l7vsadm_option_list l7vsadm_option_table_vs[] = {
136 {OPT_SCHEDULER, "-s", "--scheduler", 0},
137 {OPT_UPPER, "-u", "--upper", 0},
138 {OPT_BYPASS, "-b", "--bypass", 0},
139 {OPT_FLAG, "-f", "--flag", 0},
140 {OPT_QOS_UP, "-Q", "--qos-up", 0},
141 {OPT_QOS_DOWN, "-q", "--qos-down", 0},
142 {OPT_NONE, NULL, NULL, 0}
145 //! Table for RealServer command argument check.(optional argument)
146 static struct l7vsadm_option_list l7vsadm_option_table_rs[] = {
147 {OPT_WEIGHT, "-w", "--weight", 0},
148 {OPT_NONE, NULL, NULL, 0}
151 //! Table for Replication command argument check.
152 static struct l7vsadm_option_list l7vsadm_option_table_replication[] = {
153 {OPT_SWITCH, "-s", "--switch", 0},
154 {OPT_FORCE, "-f", "--force", 0},
155 {OPT_DUMP, "-d", "--dump", 0},
156 {OPT_NONE, NULL, NULL, 0}
159 //! Table for Logger command argument check.
160 static struct l7vsadm_option_list l7vsadm_option_table_log[] = {
161 {OPT_CATEGORY, "-c", "--category", 0},
162 {OPT_LEVEL, "-l", "--level", 0},
163 {OPT_NONE, NULL, NULL, 0}
166 //! Table for SNMPAgent command argument check.
167 static struct l7vsadm_option_list l7vsadm_option_table_snmp[] = {
168 {OPT_CATEGORY, "-c", "--category", 0},
169 {OPT_LEVEL, "-l", "--level", 0},
170 {OPT_NONE, NULL, NULL, 0}
173 //! Table for Parameter command argument check.
174 static struct l7vsadm_option_list l7vsadm_option_table_parameter[] = {
175 {OPT_RELOAD, "-r", "--reload", 0},
176 {OPT_NONE, NULL, NULL, 0}
179 //! Table for L7vsd Log-Category string check.
180 static struct l7vsadm_category_name_list l7vsd_category_name_table[] = {
181 {LOG_CAT_L7VSD_NETWORK, "l7vsd_network", "nw"},
182 {LOG_CAT_L7VSD_NETWORK_BANDWIDTH, "l7vsd_network.bandwidth", "nw.bw"},
183 {LOG_CAT_L7VSD_NETWORK_NUM_CONNECTION, "l7vsd_network.num_connection", "nw.conn"},
184 {LOG_CAT_L7VSD_NETWORK_QOS, "l7vsd_network.qos", "nw.qos"},
185 {LOG_CAT_L7VSD_VIRTUAL_SERVICE, "l7vsd_virtual_service", "vs"},
186 {LOG_CAT_L7VSD_REAL_SERVER, "l7vsd_real_server", "rs"},
187 {LOG_CAT_L7VSD_SORRY_SERVER, "l7vsd_sorry_server", "sorry"},
188 {LOG_CAT_L7VSD_REAL_SERVER_BALANCING, "l7vsd_real_server.balancing", "rs.bal"},
189 {LOG_CAT_L7VSD_REPLICATION, "l7vsd_replication", "rep"},
190 {LOG_CAT_L7VSD_START_STOP, "l7vsd_start_stop", "stastp"},
191 {LOG_CAT_L7VSD_SYSTEM, "l7vsd_system", "sys"},
192 {LOG_CAT_L7VSD_SYSTEM_MEMORY, "l7vsd_system.memory", "sys.mem"},
193 {LOG_CAT_L7VSD_SYSTEM_SOCKET, "l7vsd_system.socket", "sys.sock"},
194 {LOG_CAT_L7VSD_SYSTEM_SIGNAL, "l7vsd_system.signal", "sys.sig"},
195 {LOG_CAT_L7VSD_ENVIRONMENT, "l7vsd_environment", "env"},
196 {LOG_CAT_L7VSD_ENVIRONMENT_PARAMETER, "l7vsd_environment.parameter", "env.para"},
197 {LOG_CAT_L7VSD_LOGGER, "l7vsd_logger", "logger"},
198 {LOG_CAT_L7VSD_PARAMETER, "l7vsd_parameter", "para"},
199 {LOG_CAT_L7VSD_EVENT, "l7vsd_event", "event"},
200 {LOG_CAT_L7VSD_SCHEDULE, "l7vsd_schedule", "sched"},
201 {LOG_CAT_L7VSD_PROGRAM, "l7vsd_program", "prog"},
202 {LOG_CAT_L7VSD_PROTOCOL, "l7vsd_protocol", "prot"},
203 {LOG_CAT_L7VSD_MODULE, "l7vsd_module", "mod"},
204 {(enum LOG_CATEGORY_TAG)0, NULL, NULL}
207 //! Table for SNMPAgent Log-Category string check.
208 static struct l7vsadm_category_name_list snmp_category_name_table[] = {
209 {LOG_CAT_SNMPAGENT_START_STOP, "snmpagent_start_stop", "snmp_stastp"},
210 {LOG_CAT_SNMPAGENT_MANAGER_RECEIVE, "snmpagent_manager_receive", "snmp_mngrcv"},
211 {LOG_CAT_SNMPAGENT_MANAGER_SEND, "snmpagent_manager_send", "snmp_mngsnd"},
212 {LOG_CAT_SNMPAGENT_L7VSD_RECEIVE, "snmpagent_l7vsd_receive", "snmp_vsdrcv"},
213 {LOG_CAT_SNMPAGENT_L7VSD_SEND, "snmpagent_l7vsd_send", "snmp_vsdsnd"},
214 {LOG_CAT_SNMPAGENT_LOGGER, "snmpagent_logger", "snmp_logger"},
215 {LOG_CAT_SNMPAGENT_PARAMETER, "snmpagent_parameter", "snmp_para"},
216 {(enum LOG_CATEGORY_TAG)0, NULL, NULL}
219 //! Table for Log-Level string check.
220 static struct l7vsadm_level_name_list level_name_table[] = {
221 {LOG_LV_DEBUG, "debug"},
222 {LOG_LV_INFO, "info"},
223 {LOG_LV_WARN, "warn"},
224 {LOG_LV_ERROR, "error"},
225 {LOG_LV_FATAL, "fatal"},
229 //! Interval of l7vsadm command conflict check.
230 static int command_wait_interval = L7VSADM_DEFAULT_WAIT_INTERVAL;
231 //! Number of times of l7vsadm command conflict check.
232 static int command_wait_count = L7VSADM_DEFAULT_WAIT_COUNT;
234 //! Interval of connected check to l7vsd.
235 static int connect_wait_interval = L7VSADM_DEFAULT_WAIT_INTERVAL;
236 //! Number of times of connected check to l7vsd.
237 static int connect_wait_count = L7VSADM_DEFAULT_WAIT_COUNT;
239 //! Log-Level of Parse-Category.
240 static int log_level_parse;
241 //! Log-Level of Operate-Category.
242 static int log_level_operate;
243 //! Log-Level of Communicate-Category.
244 static int log_level_communicate;
245 //! Log-Level of Config_Result-Category.
246 static int log_level_config_result;
247 //! Log-Level of Common-Category.
248 static int log_level_common;
250 //! Received signal count.
251 static int signal_flg = 0;
252 //! Received signal number.
253 static int received_sig = 0;
255 //! Local socket name.
256 static char local_sockname[sizeof(L7VS_CONFIG_SOCK_PATH) + sizeof(L7VSADM_NAME) + 10];
257 //! Local socket file discripter.
258 static int local_sock_fd = -1;
261 * Parse command option.
263 * @param[in] argc number of argument
264 * @param[in] *argv[] array of argument string
265 * @retval 0 parse result OK
266 * @retval -1 parse result NG
269 parse_command(int argc, char *argv[])
271 struct l7vsadm_command_list *list;
273 /*-------- DEBUG LOG --------*/
274 if (log_level_parse == LOG_LV_DEBUG) {
275 char arg_str[DEBUG_STR_LEN] = {0};
276 argc_argv_c_str(arg_str, argc, argv);
277 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,1,
278 "in_function : static int parse_command(int argc, char *argv[]) : "
283 /*------ DEBUG LOG END ------*/
287 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,1, "Argument argc is illegal.");
288 fprintf(stderr, "PARSE ERROR : Argument argc is illegal.\n");
290 /*-------- DEBUG LOG --------*/
291 if (log_level_parse == LOG_LV_DEBUG) {
292 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,2,
293 "out_function : static int parse_command(int argc, char *argv[]) : "
296 /*------ DEBUG LOG END ------*/
301 // Search command option on l7vsadm_command_table.
302 l7vsadm_option_data.command_code = CMD_NONE;
303 for (list = l7vsadm_command_table; list->command_name != NULL; list++) {
304 if (strcmp(argv[1], list->command_name) == 0 ||
305 strcmp(argv[1], list->command_name_long) == 0) {
306 l7vsadm_option_data.command_code = list->command_code;
307 l7vsadm_option_data.parse_func = list->parse_func;
308 l7vsadm_option_data.operate_func = list->operate_func;
312 if (l7vsadm_option_data.command_code == CMD_NONE) {
313 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,2,
314 "No such command option %s.", argv[1]);
315 fprintf(stderr, "PARSE ERROR : "
316 "No such command option %s.\n", argv[1]);
318 /*-------- DEBUG LOG --------*/
319 if (log_level_parse == LOG_LV_DEBUG) {
320 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,3,
321 "out_function : static int parse_command(int argc, char *argv[]) : "
324 /*------ DEBUG LOG END ------*/
329 /*-------- DEBUG LOG --------*/
330 if (log_level_parse == LOG_LV_DEBUG) {
331 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,4,
332 "out_function : static int parse_command(int argc, char *argv[]) : "
333 "return = 0 : result l7vsadm_option_data.command_code = %d",
334 l7vsadm_option_data.command_code);
336 /*------ DEBUG LOG END ------*/
342 * Parse list command option.
343 * Check 2nd argument and later of list command
344 * @param[in] argc number of argument
345 * @param[in] *argv[] array of argument string
346 * @return int parse result OK=0, NG=-1
349 parse_option_list(int argc, char *argv[])
351 struct l7vsadm_option_list *list;
355 /*-------- DEBUG LOG --------*/
356 if (log_level_parse == LOG_LV_DEBUG) {
357 char arg_str[DEBUG_STR_LEN] = {0};
358 argc_argv_c_str(arg_str, argc, argv);
359 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,5,
360 "in_function : static int parse_option_list(int argc, char *argv[]) : "
365 /*------ DEBUG LOG END ------*/
369 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,3,
370 "Argument argc is illegal for %s command.", argv[1]);
371 fprintf(stderr, "PARSE ERROR : "
372 "Argument argc is illegal for %s command.\n", argv[1]);
374 /*-------- DEBUG LOG --------*/
375 if (log_level_parse == LOG_LV_DEBUG) {
376 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,6,
377 "out_function : static int "
378 "parse_option_list(int argc, char *argv[]) : "
381 /*------ DEBUG LOG END ------*/
388 // Search optional option on l7vsadm_option_table_list.
389 for (list = l7vsadm_option_table_list; list->option_name != NULL; list++) {
390 if (strcmp(argv[idx], list->option_name) == 0 ||
391 strcmp(argv[idx], list->option_name_long) == 0) {
393 // Set each option value.
394 switch (list->option_code) {
396 l7vsadm_option_data.isnumeric = 1;
403 if (!match_option_f) {
404 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,4,
405 "Invalid option for %s command.", argv[1]);
406 fprintf(stderr, "PARSE ERROR : "
407 "Invalid option for %s command.\n", argv[1]);
409 /*-------- DEBUG LOG --------*/
410 if (log_level_parse == LOG_LV_DEBUG) {
411 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,7,
412 "out_function : static int "
413 "parse_option_list(int argc, char *argv[]) : "
416 /*------ DEBUG LOG END ------*/
423 /*-------- DEBUG LOG --------*/
424 if (log_level_parse == LOG_LV_DEBUG) {
425 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,8,
426 "out_function : static int parse_option_list(int argc, char *argv[]) : "
427 "return = 0 : result l7vsadm_option_data.isnumeric = %d",
428 l7vsadm_option_data.isnumeric);
430 /*------ DEBUG LOG END ------*/
436 * Parse virtual service command option.
437 * Check 2nd argument and later of vs command
438 * @param[in] argc number of argument
439 * @param[in] *argv[] array of argument string
440 * @return int parse result OK=0, NG=-1
443 parse_option_vs(int argc, char *argv[])
445 struct l7vsadm_option_list *list;
449 int m_idx_begin,m_idx_end;
453 /*-------- DEBUG LOG --------*/
454 if (log_level_parse == LOG_LV_DEBUG) {
455 char arg_str[DEBUG_STR_LEN] = {0};
456 argc_argv_c_str(arg_str, argc, argv);
457 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,9,
458 "in_function : static int parse_option_vs(int argc, char *argv[]) : "
463 /*------ DEBUG LOG END ------*/
465 // Argument check for flush_vs command.
466 if (l7vsadm_option_data.command_code == CMD_FLUSH_VS) {
468 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,5,
469 "Argument argc is illegal for -C command.");
470 fprintf(stderr, "PARSE ERROR : "
471 "Argument argc is illegal for -C command.\n");
473 /*-------- DEBUG LOG --------*/
474 if (log_level_parse == LOG_LV_DEBUG) {
475 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,10,
476 "out_function : static int "
477 "parse_option_vs(int argc, char *argv[]) : "
480 /*------ DEBUG LOG END ------*/
485 /*-------- DEBUG LOG --------*/
486 if (log_level_parse == LOG_LV_DEBUG) {
487 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,11,
488 "out_function : static int "
489 "parse_option_vs(int argc, char *argv[]) : "
490 "return = 0 : result -C");
492 /*------ DEBUG LOG END ------*/
497 // Argument check for add_vs/edit_vs/delete_vs command.
499 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,6,
500 "Argument argc is illegal for (%s) command.", argv[1]);
501 fprintf(stderr, "PARSE ERROR : "
502 "Argument argc is illegal for (%s) command.\n", argv[1]);
504 /*-------- DEBUG LOG --------*/
505 if (log_level_parse == LOG_LV_DEBUG) {
506 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,12,
507 "out_function : static int "
508 "parse_option_vs(int argc, char *argv[]) : "
511 /*------ DEBUG LOG END ------*/
516 if (strcmp(argv[idx], "-t") == 0 || strcmp(argv[idx], "--tcp-service") == 0) {
518 ret = parse_endpoint(&l7vsadm_option_data.vs_addr,
521 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,7,
522 "Parse VirtualService endpoint error.");
524 /*-------- DEBUG LOG --------*/
525 if (log_level_parse == LOG_LV_DEBUG) {
526 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,13,
527 "out_function : static int "
528 "parse_option_vs(int argc, char *argv[]) : "
531 /*------ DEBUG LOG END ------*/
537 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,8,
538 "Invalid option %s. Need -t option for %s command.",
541 fprintf(stderr, "PARSE ERROR : "
542 "Invalid option %s. Need -t option for %s command.\n",
546 /*-------- DEBUG LOG --------*/
547 if (log_level_parse == LOG_LV_DEBUG) {
548 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,14,
549 "out_function : static int "
550 "parse_option_vs(int argc, char *argv[]) : "
553 /*------ DEBUG LOG END ------*/
558 if (strcmp(argv[idx], "-m") == 0 || strcmp(argv[idx], "--proto-module") == 0) {
560 if (strlen(argv[idx]) >= L7VS_MODNAME_LEN - 1) {
561 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,9,
562 "ProtocolModule name too long. (max %d)", L7VS_MODNAME_LEN);
563 fprintf(stderr, "PARSE ERROR : "
564 "ProtocolModule name too long. (max %d)\n", L7VS_MODNAME_LEN);
566 /*-------- DEBUG LOG --------*/
567 if (log_level_parse == LOG_LV_DEBUG) {
568 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,15,
569 "out_function : static int "
570 "parse_option_vs(int argc, char *argv[]) : "
573 /*------ DEBUG LOG END ------*/
577 strncpy(l7vsadm_option_data.protomod_name, argv[idx], strlen(argv[idx]));
580 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,10,
581 "Invalid option %s. Need -m option for %s command.",
584 fprintf(stderr, "PARSE ERROR : "
585 "Invalid option %s. Need -m option for %s command.\n",
589 /*-------- DEBUG LOG --------*/
590 if (log_level_parse == LOG_LV_DEBUG) {
591 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,16,
592 "out_function : static int "
593 "parse_option_vs(int argc, char *argv[]) : "
596 /*------ DEBUG LOG END ------*/
601 // Search begin and end of ProtocolModule option.
605 // End of ProtocolModule option is next valid option or end of argument.
606 for (list = l7vsadm_option_table_vs; list->option_name != NULL; list++) {
607 if (strcmp(argv[idx], list->option_name) == 0 ||
608 strcmp(argv[idx], list->option_name_long) == 0) {
619 ret = parse_option_protomod(argc, argv, m_idx_begin, m_idx_end);
621 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,11,
622 "Parse ProtocolModule option error.");
624 /*-------- DEBUG LOG --------*/
625 if (log_level_parse == LOG_LV_DEBUG) {
626 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,17,
627 "out_function : static int "
628 "parse_option_vs(int argc, char *argv[]) : "
631 /*------ DEBUG LOG END ------*/
636 // Argument check for delete_vs command.
637 if (l7vsadm_option_data.command_code == CMD_DEL_VS) {
639 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,12,
640 "Argument argc is illegal for -D command.");
641 fprintf(stderr, "PARSE ERROR : "
642 "Argument argc is illegal for -D command.\n");
644 /*-------- DEBUG LOG --------*/
645 if (log_level_parse == LOG_LV_DEBUG) {
646 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,18,
647 "out_function : static int "
648 "parse_option_vs(int argc, char *argv[]) : "
651 /*------ DEBUG LOG END ------*/
656 /*-------- DEBUG LOG --------*/
657 if (log_level_parse == LOG_LV_DEBUG) {
658 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,19,
659 "out_function : static int "
660 "parse_option_vs(int argc, char *argv[]) : "
661 "return = 0 : result -D");
663 /*------ DEBUG LOG END ------*/
668 // Set default ScheduleModule "rr".
669 strncpy(l7vsadm_option_data.schedmod_name,
670 L7VSADM_DEFAULT_SCHEDULER,
671 strlen(L7VSADM_DEFAULT_SCHEDULER));
675 // Search optional option on l7vsadm_option_table_vs.
676 for (list = l7vsadm_option_table_vs; list->option_name != NULL; list++) {
677 if (strcmp(argv[idx], list->option_name) == 0 ||
678 strcmp(argv[idx], list->option_name_long) == 0) {
680 if (list->check_flag) {
681 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,13,
682 "Option %s is conflict.",
684 fprintf(stderr, "PARSE ERROR : "
685 "Option %s is conflict.\n",
688 /*-------- DEBUG LOG --------*/
689 if (log_level_parse == LOG_LV_DEBUG) {
690 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,20,
691 "out_function : static int "
692 "parse_option_vs(int argc, char *argv[]) : "
695 /*------ DEBUG LOG END ------*/
699 list->check_flag = 1;
700 // Check and Set each option value.
701 switch (list->option_code) {
705 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,14,
706 "Need option value for -s option.");
707 fprintf(stderr, "PARSE ERROR : "
708 "Need option value for -s option.\n");
710 /*-------- DEBUG LOG --------*/
711 if (log_level_parse == LOG_LV_DEBUG) {
712 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,21,
713 "out_function : static int "
714 "parse_option_vs(int argc, char *argv[]) : "
717 /*------ DEBUG LOG END ------*/
721 if (strlen(argv[idx]) >= L7VS_MODNAME_LEN - 1) {
722 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,15,
723 "ScheduleModule name too long. (max %d)",
725 fprintf(stderr, "PARSE ERROR : "
726 "ScheduleModule name too long. (max %d)\n",
729 /*-------- DEBUG LOG --------*/
730 if (log_level_parse == LOG_LV_DEBUG) {
731 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,22,
732 "out_function : static int "
733 "parse_option_vs(int argc, char *argv[]) : "
736 /*------ DEBUG LOG END ------*/
740 strncpy(l7vsadm_option_data.schedmod_name,
747 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,16,
748 "Need option value for -u option.");
749 fprintf(stderr, "PARSE ERROR : "
750 "Need option value for -u option.\n");
752 /*-------- DEBUG LOG --------*/
753 if (log_level_parse == LOG_LV_DEBUG) {
754 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,23,
755 "out_function : static int "
756 "parse_option_vs(int argc, char *argv[]) : "
759 /*------ DEBUG LOG END ------*/
763 ret = parse_digit(argv[idx]);
765 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,17,
766 "-u option value is only digit.");
769 sscanf(argv[idx], "%d", &l7vsadm_option_data.max_connection);
770 if (l7vsadm_option_data.max_connection < 0 ||
771 l7vsadm_option_data.max_connection > 100000) {
772 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,18,
773 "Invalid option value for -u option.");
774 fprintf(stderr, "PARSE ERROR : "
775 "Invalid option value for -u option.\n");
777 /*-------- DEBUG LOG --------*/
778 if (log_level_parse == LOG_LV_DEBUG) {
779 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,24,
780 "out_function : static int "
781 "parse_option_vs(int argc, char *argv[]) : "
784 /*------ DEBUG LOG END ------*/
792 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,19,
793 "Need option value for -b option.");
794 fprintf(stderr, "PARSE ERROR : "
795 "Need option value for -b option.\n");
797 /*-------- DEBUG LOG --------*/
798 if (log_level_parse == LOG_LV_DEBUG) {
799 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,25,
800 "out_function : static int "
801 "parse_option_vs(int argc, char *argv[]) : "
804 /*------ DEBUG LOG END ------*/
808 // When specify the initialization of the sorry endpoint.
809 if (strncmp(L7VSADM_INIT_ENDPOINT_STR, argv[idx],
810 strlen(L7VSADM_INIT_ENDPOINT_STR)) == 0) {
811 // Sorry endpoint is 0 clear data.
814 ret = parse_endpoint(
815 (struct sockaddr_in *)(&l7vsadm_option_data.sorry_addr),
818 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,20,
819 "Parse SorryServer endpoint error.");
821 /*-------- DEBUG LOG --------*/
822 if (log_level_parse == LOG_LV_DEBUG) {
823 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,26,
824 "out_function : static int "
825 "parse_option_vs(int argc, char *argv[]) : "
828 /*------ DEBUG LOG END ------*/
836 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,21,
837 "Need option value for -f option.");
838 fprintf(stderr, "PARSE ERROR : "
839 "Need option value for -f option.\n");
841 /*-------- DEBUG LOG --------*/
842 if (log_level_parse == LOG_LV_DEBUG) {
843 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,27,
844 "out_function : static int "
845 "parse_option_vs(int argc, char *argv[]) : "
848 /*------ DEBUG LOG END ------*/
852 ret = parse_digit(argv[idx]);
854 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,22,
855 "-f option value is only digit.");
857 /*-------- DEBUG LOG --------*/
858 if (log_level_parse == LOG_LV_DEBUG) {
859 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,28,
860 "out_function : static int "
861 "parse_option_vs(int argc, char *argv[]) : "
864 /*------ DEBUG LOG END ------*/
868 sscanf(argv[idx], "%d", &l7vsadm_option_data.sorry_flag);
869 if (l7vsadm_option_data.sorry_flag < 0 ||
870 l7vsadm_option_data.sorry_flag > 1) {
871 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,23,
872 "Invalid option value for -f option.");
873 fprintf(stderr, "PARSE ERROR : "
874 "Invalid option value for -f option.\n");
876 /*-------- DEBUG LOG --------*/
877 if (log_level_parse == LOG_LV_DEBUG) {
878 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,29,
879 "out_function : static int "
880 "parse_option_vs(int argc, char *argv[]) : "
883 /*------ DEBUG LOG END ------*/
891 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,24,
892 "Need option value for -Q option.");
893 fprintf(stderr, "PARSE ERROR : "
894 "Need option value for -Q option.\n");
896 /*-------- DEBUG LOG --------*/
897 if (log_level_parse == LOG_LV_DEBUG) {
898 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,30,
899 "out_function : static int "
900 "parse_option_vs(int argc, char *argv[]) : "
903 /*------ DEBUG LOG END ------*/
907 ret_ll = parse_qos(argv[idx]);
909 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,25,
910 "Parse QoS-up value error.");
912 /*-------- DEBUG LOG --------*/
913 if (log_level_parse == LOG_LV_DEBUG) {
914 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,31,
915 "out_function : static int "
916 "parse_option_vs(int argc, char *argv[]) : "
919 /*------ DEBUG LOG END ------*/
923 l7vsadm_option_data.qos_threshold_up = (unsigned long long)ret_ll;
928 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,26,
929 "Need option value for -q option.");
930 fprintf(stderr, "PARSE ERROR : "
931 "Need option value for -q option.\n");
933 /*-------- DEBUG LOG --------*/
934 if (log_level_parse == LOG_LV_DEBUG) {
935 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,32,
936 "out_function : static int "
937 "parse_option_vs(int argc, char *argv[]) : "
940 /*------ DEBUG LOG END ------*/
944 ret_ll = parse_qos(argv[idx]);
946 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,27,
947 "Parse QoS-down value error.");
949 /*-------- DEBUG LOG --------*/
950 if (log_level_parse == LOG_LV_DEBUG) {
951 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,33,
952 "out_function : static int "
953 "parse_option_vs(int argc, char *argv[]) : "
956 /*------ DEBUG LOG END ------*/
960 l7vsadm_option_data.qos_threshold_down = (unsigned long long)ret_ll;
968 if (!match_option_f) {
969 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,28,
970 "Invalid option for %s command.", argv[1]);
971 fprintf(stderr, "PARSE ERROR : "
972 "Invalid option for %s command.\n", argv[1]);
974 /*-------- DEBUG LOG --------*/
975 if (log_level_parse == LOG_LV_DEBUG) {
976 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,34,
977 "out_function : static int "
978 "parse_option_vs(int argc, char *argv[]) : "
981 /*------ DEBUG LOG END ------*/
988 /*-------- DEBUG LOG --------*/
989 if (log_level_parse == LOG_LV_DEBUG) {
990 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,35,
991 "out_function : static int "
992 "parse_option_vs(int argc, char *argv[]) : "
993 "return = 0 : result -A or -E");
995 /*------ DEBUG LOG END ------*/
1001 * Parse real server command option.
1002 * Check 2nd argument and later of rs command
1003 * @param[in] argc number of argument
1004 * @param[in] *argv[] array of argument string
1005 * @return int parse result OK=0, NG=-1
1008 parse_option_rs(int argc, char *argv[])
1010 struct l7vsadm_option_list *list;
1013 int m_idx_begin,m_idx_end;
1017 /*-------- DEBUG LOG --------*/
1018 if (log_level_parse == LOG_LV_DEBUG) {
1019 char arg_str[DEBUG_STR_LEN] = {0};
1020 argc_argv_c_str(arg_str, argc, argv);
1021 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,36,
1022 "in_function : static int parse_option_rs(int argc, char *argv[]) : "
1027 /*------ DEBUG LOG END ------*/
1029 // Argument check for add_rs/edit_rs/delete_rs command.
1031 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,29,
1032 "Argument argc is illegal for %s command.", argv[1]);
1033 fprintf(stderr, "PARSE ERROR : "
1034 "Argument argc is illegal for %s command.\n", argv[1]);
1036 /*-------- DEBUG LOG --------*/
1037 if (log_level_parse == LOG_LV_DEBUG) {
1038 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,37,
1039 "out_function : static int "
1040 "parse_option_rs(int argc, char *argv[]) : "
1043 /*------ DEBUG LOG END ------*/
1048 if (strcmp(argv[idx], "-t") == 0 || strcmp(argv[idx], "--tcp-service") == 0) {
1050 ret = parse_endpoint(&l7vsadm_option_data.vs_addr,
1053 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,30,
1054 "Parse VirtualService endpoint error.");
1056 /*-------- DEBUG LOG --------*/
1057 if (log_level_parse == LOG_LV_DEBUG) {
1058 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,38,
1059 "out_function : static int "
1060 "parse_option_rs(int argc, char *argv[]) : "
1063 /*------ DEBUG LOG END ------*/
1069 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,31,
1070 "Invalid option %s. Need -t option for %s command.",
1073 fprintf(stderr, "PARSE ERROR : "
1074 "Invalid option %s. Need -t option for %s command.\n",
1078 /*-------- DEBUG LOG --------*/
1079 if (log_level_parse == LOG_LV_DEBUG) {
1080 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,39,
1081 "out_function : static int "
1082 "parse_option_rs(int argc, char *argv[]) : "
1085 /*------ DEBUG LOG END ------*/
1090 if (strcmp(argv[idx], "-m") == 0 || strcmp(argv[idx], "--proto-module") == 0) {
1092 if (strlen(argv[idx]) >= L7VS_MODNAME_LEN - 1) {
1093 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,32,
1094 "ProtocolModule name too long. (max %d)", L7VS_MODNAME_LEN);
1095 fprintf(stderr, "PARSE ERROR : "
1096 "ProtocolModule name too long. (max %d)\n", L7VS_MODNAME_LEN);
1098 /*-------- DEBUG LOG --------*/
1099 if (log_level_parse == LOG_LV_DEBUG) {
1100 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,40,
1101 "out_function : static int "
1102 "parse_option_rs(int argc, char *argv[]) : "
1105 /*------ DEBUG LOG END ------*/
1109 strncpy(l7vsadm_option_data.protomod_name, argv[idx], strlen(argv[idx]));
1112 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,33,
1113 "Invalid option %s. Need -m option for %s command.",
1116 fprintf(stderr, "PARSE ERROR : "
1117 "Invalid option %s. Need -m option for %s command.\n",
1121 /*-------- DEBUG LOG --------*/
1122 if (log_level_parse == LOG_LV_DEBUG) {
1123 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,41,
1124 "out_function : static int "
1125 "parse_option_rs(int argc, char *argv[]) : "
1128 /*------ DEBUG LOG END ------*/
1133 // Search begin and end of ProtocolModule option.
1136 while (idx < argc) {
1137 // End of ProtocolModule option is -r option.
1138 if (strcmp(argv[idx], "-r") == 0 || strcmp(argv[idx], "--real-server") == 0) {
1145 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,34,
1146 "Invalid option %s. Need -r option for %s command.",
1149 fprintf(stderr, "PARSE ERROR : "
1150 "Invalid option %s. Need -r option for %s command.\n",
1154 /*-------- DEBUG LOG --------*/
1155 if (log_level_parse == LOG_LV_DEBUG) {
1156 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,42,
1157 "out_function : static int "
1158 "parse_option_rs(int argc, char *argv[]) : "
1161 /*------ DEBUG LOG END ------*/
1166 ret = parse_option_protomod(argc, argv, m_idx_begin, m_idx_end);
1168 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,35,
1169 "Parse ProtocolModule option error.");
1171 /*-------- DEBUG LOG --------*/
1172 if (log_level_parse == LOG_LV_DEBUG) {
1173 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,43,
1174 "out_function : static int "
1175 "parse_option_rs(int argc, char *argv[]) : "
1178 /*------ DEBUG LOG END ------*/
1184 ret = parse_endpoint(&l7vsadm_option_data.rs_addr, argv[idx], FALSE);
1186 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,36,
1187 "Parse RealServer endpoint error.");
1189 /*-------- DEBUG LOG --------*/
1190 if (log_level_parse == LOG_LV_DEBUG) {
1191 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,44,
1192 "out_function : static int "
1193 "parse_option_rs(int argc, char *argv[]) : "
1196 /*------ DEBUG LOG END ------*/
1202 // Argument check for delete_rs command.
1203 if (l7vsadm_option_data.command_code == CMD_DEL_RS) {
1205 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,37,
1206 "Argument argc is illegal for -d command.");
1207 fprintf(stderr, "PARSE ERROR : "
1208 "Argument argc is illegal for -d command.\n");
1210 /*-------- DEBUG LOG --------*/
1211 if (log_level_parse == LOG_LV_DEBUG) {
1212 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,45,
1213 "out_function : static int "
1214 "parse_option_rs(int argc, char *argv[]) : "
1217 /*------ DEBUG LOG END ------*/
1222 /*-------- DEBUG LOG --------*/
1223 if (log_level_parse == LOG_LV_DEBUG) {
1224 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,46,
1225 "out_function : static int "
1226 "parse_option_rs(int argc, char *argv[]) : "
1227 "return = 0 : result -d");
1229 /*------ DEBUG LOG END ------*/
1234 // Set default RealServer weight = 1.
1235 l7vsadm_option_data.weight = 1;
1237 while (idx < argc) {
1239 // Search optional option on l7vsadm_option_table_rs.
1240 for (list = l7vsadm_option_table_rs; list->option_name != NULL; list++) {
1241 if (strcmp(argv[idx], list->option_name) == 0 ||
1242 strcmp(argv[idx], list->option_name_long) == 0) {
1244 if (list->check_flag) {
1245 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,38,
1246 "Option %s is conflict.",
1248 fprintf(stderr, "PARSE ERROR : "
1249 "Option %s is conflict.\n",
1252 /*-------- DEBUG LOG --------*/
1253 if (log_level_parse == LOG_LV_DEBUG) {
1254 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,47,
1255 "out_function : static int "
1256 "parse_option_rs(int argc, char *argv[]) : "
1259 /*------ DEBUG LOG END ------*/
1263 list->check_flag = 1;
1264 // Check and Set each option value.
1265 switch (list->option_code) {
1269 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,39,
1270 "Need option value for -w option.");
1271 fprintf(stderr, "PARSE ERROR : "
1272 "Need option value for -w option.\n");
1274 /*-------- DEBUG LOG --------*/
1275 if (log_level_parse == LOG_LV_DEBUG) {
1276 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,48,
1277 "out_function : static int "
1278 "parse_option_rs(int argc, char *argv[]) : "
1281 /*------ DEBUG LOG END ------*/
1285 ret = parse_digit(argv[idx]);
1287 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,40,
1288 "-w option value is only digit.");
1290 /*-------- DEBUG LOG --------*/
1291 if (log_level_parse == LOG_LV_DEBUG) {
1292 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,49,
1293 "out_function : static int "
1294 "parse_option_rs(int argc, char *argv[]) : "
1297 /*------ DEBUG LOG END ------*/
1301 sscanf(argv[idx], "%d", &l7vsadm_option_data.weight);
1302 if (l7vsadm_option_data.weight < 0 ||
1303 l7vsadm_option_data.weight > 100) {
1304 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,41,
1305 "Invalid option value for -w option.");
1306 fprintf(stderr, "PARSE ERROR : "
1307 "Invalid option value for -w option.\n");
1309 /*-------- DEBUG LOG --------*/
1310 if (log_level_parse == LOG_LV_DEBUG) {
1311 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,50,
1312 "out_function : static int "
1313 "parse_option_rs(int argc, char *argv[]) : "
1316 /*------ DEBUG LOG END ------*/
1327 if (!match_option_f) {
1328 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,42,
1329 "Invalid option for %s command.", argv[1]);
1330 fprintf(stderr, "PARSE ERROR : "
1331 "Invalid option for %s command.\n", argv[1]);
1333 /*-------- DEBUG LOG --------*/
1334 if (log_level_parse == LOG_LV_DEBUG) {
1335 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,51,
1336 "out_function : static int "
1337 "parse_option_rs(int argc, char *argv[]) : "
1340 /*------ DEBUG LOG END ------*/
1347 /*-------- DEBUG LOG --------*/
1348 if (log_level_parse == LOG_LV_DEBUG) {
1349 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,52,
1350 "out_function : static int "
1351 "parse_option_rs(int argc, char *argv[]) : "
1352 "return = 0 : result -a or -e");
1354 /*------ DEBUG LOG END ------*/
1360 * Parse replication command option.
1361 * Check 2nd argument and later of replication command
1362 * @param[in] argc number of argument
1363 * @param[in] *argv[] array of argument string
1364 * @return int parse result OK=0, NG=-1
1367 parse_option_replication(int argc, char *argv[])
1369 struct l7vsadm_option_list *list;
1373 /*-------- DEBUG LOG --------*/
1374 if (log_level_parse == LOG_LV_DEBUG) {
1375 char arg_str[DEBUG_STR_LEN] = {0};
1376 argc_argv_c_str(arg_str, argc, argv);
1377 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,53,
1378 "in_function : static int parse_option_replication(int argc, char *argv[]) : "
1383 /*------ DEBUG LOG END ------*/
1385 // Argument check for replication command.
1386 if (argc < 3 || argc > 4) {
1387 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,43,
1388 "Argument argc is illegal for -R command.");
1389 fprintf(stderr, "PARSE ERROR : "
1390 "Argument argc is illegal for -R command.\n");
1392 /*-------- DEBUG LOG --------*/
1393 if (log_level_parse == LOG_LV_DEBUG) {
1394 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,54,
1395 "out_function : static int "
1396 "parse_option_replication(int argc, char *argv[]) : "
1399 /*------ DEBUG LOG END ------*/
1405 // Search option on l7vsadm_option_table_replication.
1406 for (list = l7vsadm_option_table_replication; list->option_name != NULL; list++) {
1407 if (strcmp(argv[idx], list->option_name) == 0 ||
1408 strcmp(argv[idx], list->option_name_long) == 0) {
1410 if (list->check_flag) {
1411 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,44,
1412 "Option %s is conflict.",
1414 fprintf(stderr, "PARSE ERROR : "
1415 "Option %s is conflict.\n",
1418 /*-------- DEBUG LOG --------*/
1419 if (log_level_parse == LOG_LV_DEBUG) {
1420 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,55,
1421 "out_function : static int "
1422 "parse_option_replication(int argc, char *argv[]) : "
1425 /*------ DEBUG LOG END ------*/
1429 list->check_flag = 1;
1430 // Check and Set each option value.
1431 switch (list->option_code) {
1435 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,45,
1436 "Need option value for -s option.");
1437 fprintf(stderr, "PARSE ERROR : "
1438 "Need option value for -s option.\n");
1440 /*-------- DEBUG LOG --------*/
1441 if (log_level_parse == LOG_LV_DEBUG) {
1442 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,56,
1443 "out_function : static int "
1444 "parse_option_replication(int argc, char *argv[]) : "
1447 /*------ DEBUG LOG END ------*/
1451 l7vsadm_option_data.control_code = list->option_code;
1452 if (strcmp(argv[idx], "start") == 0) {
1453 l7vsadm_option_data.replication_start_flag = 1;
1454 } else if (strcmp(argv[idx], "stop") == 0) {
1455 l7vsadm_option_data.replication_start_flag = 0;
1457 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,46,
1458 "Invalid option value for -s option.");
1459 fprintf(stderr, "PARSE ERROR : "
1460 "Invalid option value for -s option.\n");
1462 /*-------- DEBUG LOG --------*/
1463 if (log_level_parse == LOG_LV_DEBUG) {
1464 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,57,
1465 "out_function : static int "
1466 "parse_option_replication(int argc, char *argv[]) : "
1469 /*------ DEBUG LOG END ------*/
1475 if (idx + 1 < argc) {
1476 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,47,
1477 "-f option is no argument option.");
1478 fprintf(stderr, "PARSE ERROR : "
1479 "-f option is no argument option.\n");
1481 /*-------- DEBUG LOG --------*/
1482 if (log_level_parse == LOG_LV_DEBUG) {
1483 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,58,
1484 "out_function : static int "
1485 "parse_option_replication(int argc, char *argv[]) : "
1488 /*------ DEBUG LOG END ------*/
1492 l7vsadm_option_data.control_code = list->option_code;
1495 if (idx + 1 < argc) {
1496 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,48,
1497 "-d option is no argument option.");
1498 fprintf(stderr, "PARSE ERROR : "
1499 "-d option is no argument option.\n");
1501 /*-------- DEBUG LOG --------*/
1502 if (log_level_parse == LOG_LV_DEBUG) {
1503 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,59,
1504 "out_function : static int "
1505 "parse_option_replication(int argc, char *argv[]) : "
1508 /*------ DEBUG LOG END ------*/
1512 l7vsadm_option_data.control_code = list->option_code;
1520 if (!match_option_f) {
1521 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,49,
1522 "Invalid option for -R command.");
1523 fprintf(stderr, "PARSE ERROR : "
1524 "Invalid option for -R command.\n");
1526 /*-------- DEBUG LOG --------*/
1527 if (log_level_parse == LOG_LV_DEBUG) {
1528 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,60,
1529 "out_function : static int "
1530 "parse_option_replication(int argc, char *argv[]) : "
1533 /*------ DEBUG LOG END ------*/
1538 /*-------- DEBUG LOG --------*/
1539 if (log_level_parse == LOG_LV_DEBUG) {
1540 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,61,
1541 "out_function : static int "
1542 "parse_option_replication(int argc, char *argv[]) : "
1543 "return = 0 : result "
1544 "l7vsadm_option_data.control_code = %d "
1545 "l7vsadm_option_data.replication_start_flag = %d",
1546 l7vsadm_option_data.control_code,
1547 l7vsadm_option_data.replication_start_flag);
1549 /*------ DEBUG LOG END ------*/
1555 * Parse logger command option.
1556 * Check 2nd argument and later of logger command
1557 * @param[in] argc number of argument
1558 * @param[in] *argv[] array of argument string
1559 * @return int parse result OK=0, NG=-1
1562 parse_option_log(int argc, char *argv[])
1564 struct l7vsadm_option_list *op_list;
1565 struct l7vsadm_category_name_list *cat_list;
1566 struct l7vsadm_level_name_list *lv_list;
1571 /*-------- DEBUG LOG --------*/
1572 if (log_level_parse == LOG_LV_DEBUG) {
1573 char arg_str[DEBUG_STR_LEN] = {0};
1574 argc_argv_c_str(arg_str, argc, argv);
1575 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,62,
1576 "in_function : static int parse_option_log(int argc, char *argv[]) : "
1581 /*------ DEBUG LOG END ------*/
1583 // Argument check for logger command.
1585 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,50,
1586 "Argument argc is illegal for -L command.");
1587 fprintf(stderr, "PARSE ERROR : "
1588 "Argument argc is illegal for -L command.\n");
1590 /*-------- DEBUG LOG --------*/
1591 if (log_level_parse == LOG_LV_DEBUG) {
1592 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,63,
1593 "out_function : static int "
1594 "parse_option_log(int argc, char *argv[]) : "
1597 /*------ DEBUG LOG END ------*/
1602 while (idx < argc) {
1604 // Search option on l7vsadm_option_table_log.
1605 for (op_list = l7vsadm_option_table_log; op_list->option_name != NULL; op_list++) {
1606 if (strcmp(argv[idx], op_list->option_name) == 0 ||
1607 strcmp(argv[idx], op_list->option_name_long) == 0) {
1609 if (op_list->check_flag) {
1610 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,51,
1611 "Option %s is conflict.",
1613 fprintf(stderr, "PARSE ERROR : "
1614 "Option %s is conflict.\n",
1617 /*-------- DEBUG LOG --------*/
1618 if (log_level_parse == LOG_LV_DEBUG) {
1619 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,64,
1620 "out_function : static int "
1621 "parse_option_log(int argc, char *argv[]) : "
1624 /*------ DEBUG LOG END ------*/
1628 op_list->check_flag = 1;
1629 // Check and Set each option value.
1630 switch (op_list->option_code) {
1634 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,52,
1635 "Need option value for -c option.");
1636 fprintf(stderr, "PARSE ERROR : "
1637 "Need option value for -c option.\n");
1639 /*-------- DEBUG LOG --------*/
1640 if (log_level_parse == LOG_LV_DEBUG) {
1641 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,65,
1642 "out_function : static int "
1643 "parse_option_log(int argc, char *argv[]) : "
1646 /*------ DEBUG LOG END ------*/
1650 // Check option value "all".
1651 if (strcmp(argv[idx], "all") == 0) {
1652 l7vsadm_option_data.category_all_flag = 1;
1656 // Search category name on l7vsd_category_name_table
1657 // and Convert category name to category code.
1658 for (cat_list = l7vsd_category_name_table;
1659 cat_list->category_name != NULL;
1661 if (strcmp(argv[idx],
1662 cat_list->category_name) == 0 ||
1664 cat_list->category_name_short) == 0) {
1665 l7vsadm_option_data.log_category =
1666 cat_list->category_code;
1671 if (!match_value_f) {
1672 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,53,
1673 "No such Log-Category %s.", argv[idx]);
1674 fprintf(stderr, "PARSE ERROR : "
1675 "No such Log-Category %s.\n", argv[idx]);
1677 /*-------- DEBUG LOG --------*/
1678 if (log_level_parse == LOG_LV_DEBUG) {
1679 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,66,
1680 "out_function : static int "
1681 "parse_option_log(int argc, char *argv[]) : "
1684 /*------ DEBUG LOG END ------*/
1692 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,54,
1693 "Need option value for -l option.");
1694 fprintf(stderr, "PARSE ERROR : "
1695 "Need option value for -l option.\n");
1697 /*-------- DEBUG LOG --------*/
1698 if (log_level_parse == LOG_LV_DEBUG) {
1699 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,67,
1700 "out_function : static int "
1701 "parse_option_log(int argc, char *argv[]) : "
1704 /*------ DEBUG LOG END ------*/
1709 // Search level name on level_name_table
1710 // and Convert level name to level code.
1711 for (lv_list = level_name_table;
1712 lv_list->level_name != NULL;
1714 if (strcmp(argv[idx], lv_list->level_name) == 0) {
1715 l7vsadm_option_data.log_level =
1716 lv_list->level_code;
1721 if (!match_value_f) {
1722 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,55,
1723 "No such Log-Level %s.", argv[idx]);
1724 fprintf(stderr, "PARSE ERROR : "
1725 "No such Log-Level %s.\n", argv[idx]);
1727 /*-------- DEBUG LOG --------*/
1728 if (log_level_parse == LOG_LV_DEBUG) {
1729 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,68,
1730 "out_function : static int "
1731 "parse_option_log(int argc, char *argv[]) : "
1734 /*------ DEBUG LOG END ------*/
1745 if (!match_option_f) {
1746 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,56,
1747 "Invalid option for -L command.");
1748 fprintf(stderr, "PARSE ERROR : "
1749 "Invalid option for -L command.\n");
1751 /*-------- DEBUG LOG --------*/
1752 if (log_level_parse == LOG_LV_DEBUG) {
1753 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,69,
1754 "out_function : static int "
1755 "parse_option_log(int argc, char *argv[]) : "
1758 /*------ DEBUG LOG END ------*/
1765 /*-------- DEBUG LOG --------*/
1766 if (log_level_parse == LOG_LV_DEBUG) {
1767 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,70,
1768 "out_function : static int "
1769 "parse_option_log(int argc, char *argv[]) : "
1770 "return = 0 : result "
1771 "l7vsadm_option_data.category_all_flag = %d "
1772 "l7vsadm_option_data.log_category = %d "
1773 "l7vsadm_option_data.log_level = %d",
1774 l7vsadm_option_data.category_all_flag,
1775 l7vsadm_option_data.log_category,
1776 l7vsadm_option_data.log_level);
1778 /*------ DEBUG LOG END ------*/
1784 * Parse SNMPAgent command option.
1785 * Check 2nd argument and later of SNMPAgent command
1786 * @param[in] argc number of argument
1787 * @param[in] *argv[] array of argument string
1788 * @return int parse result OK=0, NG=-1
1791 parse_option_snmp(int argc, char *argv[])
1793 struct l7vsadm_option_list *op_list;
1794 struct l7vsadm_category_name_list *cat_list;
1795 struct l7vsadm_level_name_list *lv_list;
1800 /*-------- DEBUG LOG --------*/
1801 if (log_level_parse == LOG_LV_DEBUG) {
1802 char arg_str[DEBUG_STR_LEN] = {0};
1803 argc_argv_c_str(arg_str, argc, argv);
1804 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,71,
1805 "in_function : static int parse_option_snmp(int argc, char *argv[]) : "
1810 /*------ DEBUG LOG END ------*/
1812 // Argument check for SNMPAgent command.
1814 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,57,
1815 "Argument argc is illegal for -S command.");
1816 fprintf(stderr, "PARSE ERROR : "
1817 "Argument argc is illegal for -S command.\n");
1819 /*-------- DEBUG LOG --------*/
1820 if (log_level_parse == LOG_LV_DEBUG) {
1821 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,72,
1822 "out_function : static int "
1823 "parse_option_snmp(int argc, char *argv[]) : "
1826 /*------ DEBUG LOG END ------*/
1831 while (idx < argc) {
1833 // Search option on l7vsadm_option_table_snmp.
1834 for (op_list = l7vsadm_option_table_snmp;
1835 op_list->option_name != NULL;
1837 if (strcmp(argv[idx], op_list->option_name) == 0 ||
1838 strcmp(argv[idx], op_list->option_name_long) == 0) {
1840 if (op_list->check_flag) {
1841 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,58,
1842 "Option %s is conflict.",
1844 fprintf(stderr, "PARSE ERROR : "
1845 "Option %s is conflict.\n",
1848 /*-------- DEBUG LOG --------*/
1849 if (log_level_parse == LOG_LV_DEBUG) {
1850 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,73,
1851 "out_function : static int "
1852 "parse_option_snmp(int argc, char *argv[]) : "
1855 /*------ DEBUG LOG END ------*/
1859 op_list->check_flag = 1;
1860 // Check and Set each option value.
1861 switch (op_list->option_code) {
1865 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,59,
1866 "Need option value for -c option.");
1867 fprintf(stderr, "PARSE ERROR : "
1868 "Need option value for -c option.\n");
1870 /*-------- DEBUG LOG --------*/
1871 if (log_level_parse == LOG_LV_DEBUG) {
1872 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,74,
1873 "out_function : static int "
1874 "parse_option_snmp(int argc, char *argv[]) : "
1877 /*------ DEBUG LOG END ------*/
1881 // Check option value "all".
1882 if (strcmp(argv[idx], "all") == 0) {
1883 l7vsadm_option_data.category_all_flag = 1;
1887 // Search category name on snmp_category_name_table
1888 // and Convert category name to category code.
1889 for (cat_list = snmp_category_name_table;
1890 cat_list->category_name != NULL;
1892 if (strcmp(argv[idx],
1893 cat_list->category_name) == 0 ||
1895 cat_list->category_name_short) == 0) {
1896 l7vsadm_option_data.log_category =
1897 cat_list->category_code;
1902 if (!match_value_f) {
1903 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,60,
1904 "No such Log-Category %s.", argv[idx]);
1905 fprintf(stderr, "PARSE ERROR : "
1906 "No such Log-Category %s.\n", argv[idx]);
1908 /*-------- DEBUG LOG --------*/
1909 if (log_level_parse == LOG_LV_DEBUG) {
1910 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,75,
1911 "out_function : static int "
1912 "parse_option_snmp(int argc, char *argv[]) : "
1915 /*------ DEBUG LOG END ------*/
1923 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,61,
1924 "Need option value for -l option.");
1925 fprintf(stderr, "PARSE ERROR : "
1926 "Need option value for -l option.\n");
1928 /*-------- DEBUG LOG --------*/
1929 if (log_level_parse == LOG_LV_DEBUG) {
1930 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,76,
1931 "out_function : static int "
1932 "parse_option_snmp(int argc, char *argv[]) : "
1935 /*------ DEBUG LOG END ------*/
1940 // Search level name on level_name_table
1941 // and Convert level name to level code.
1942 for (lv_list = level_name_table;
1943 lv_list->level_name != NULL;
1945 if (strcmp(argv[idx],
1946 lv_list->level_name) == 0) {
1947 l7vsadm_option_data.log_level =
1948 lv_list->level_code;
1953 if (!match_value_f) {
1954 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,62,
1955 "No such Log-Level %s.", argv[idx]);
1956 fprintf(stderr, "PARSE ERROR : "
1957 "No such Log-Level %s.\n", argv[idx]);
1959 /*-------- DEBUG LOG --------*/
1960 if (log_level_parse == LOG_LV_DEBUG) {
1961 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,77,
1962 "out_function : static int "
1963 "parse_option_snmp(int argc, char *argv[]) : "
1966 /*------ DEBUG LOG END ------*/
1977 if (!match_option_f) {
1978 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,63,
1979 "Invalid option for -S command.");
1980 fprintf(stderr, "PARSE ERROR : "
1981 "Invalid option for -S command.\n");
1983 /*-------- DEBUG LOG --------*/
1984 if (log_level_parse == LOG_LV_DEBUG) {
1985 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,78,
1986 "out_function : static int "
1987 "parse_option_snmp(int argc, char *argv[]) : "
1990 /*------ DEBUG LOG END ------*/
1997 /*-------- DEBUG LOG --------*/
1998 if (log_level_parse == LOG_LV_DEBUG) {
1999 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,79,
2000 "out_function : static int "
2001 "parse_option_snmp(int argc, char *argv[]) : "
2002 "return = 0 : result "
2003 "l7vsadm_option_data.category_all_flag = %d "
2004 "l7vsadm_option_data.log_category = %d "
2005 "l7vsadm_option_data.log_level = %d",
2006 l7vsadm_option_data.category_all_flag,
2007 l7vsadm_option_data.log_category,
2008 l7vsadm_option_data.log_level);
2010 /*------ DEBUG LOG END ------*/
2016 * Parse parameter command option.
2017 * Check 2nd argument and later of parameter command
2018 * @param[in] argc number of argument
2019 * @param[in] *argv[] array of argument string
2020 * @return int parse result OK=0, NG=-1
2023 parse_option_parameter(int argc, char *argv[])
2025 struct l7vsadm_option_list *op_list;
2026 static struct l7vsadm_component_name_list component_name_table[] = {
2027 {PARAM_COMP_ALL, "all"},
2028 {PARAM_COMP_L7VSD, "l7vsd"},
2029 {PARAM_COMP_IOMUX, "iomux"},
2030 {PARAM_COMP_LSOCK, "lsock"},
2031 {PARAM_COMP_CONN, "conn"},
2032 {PARAM_COMP_DEST, "dest"},
2033 {PARAM_COMP_SERVICE, "service"},
2034 {PARAM_COMP_MODULE, "module"},
2035 {PARAM_COMP_REPLICATION, "replication"},
2036 {PARAM_COMP_LOGGER, "logger"},
2037 {PARAM_COMP_L7VSADM, "l7vsadm"},
2038 {PARAM_COMP_SNMPAGENT, "snmpagent"},
2039 {(enum PARAMETER_COMPONENT_TAG)0, NULL}
2041 struct l7vsadm_component_name_list *cmp_list;
2046 /*-------- DEBUG LOG --------*/
2047 if (log_level_parse == LOG_LV_DEBUG) {
2048 char arg_str[DEBUG_STR_LEN] = {0};
2049 argc_argv_c_str(arg_str, argc, argv);
2050 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,80,
2051 "in_function : static int parse_option_parameter(int argc, char *argv[]) : "
2056 /*------ DEBUG LOG END ------*/
2058 // Argument check for parameter command.
2060 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,64,
2061 "Argument argc is illegal for -P command.");
2062 fprintf(stderr, "PARSE ERROR : "
2063 "Argument argc is illegal for -P command.\n");
2065 /*-------- DEBUG LOG --------*/
2066 if (log_level_parse == LOG_LV_DEBUG) {
2067 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,81,
2068 "out_function : static int "
2069 "parse_option_parameter(int argc, char *argv[]) : "
2072 /*------ DEBUG LOG END ------*/
2077 while (idx < argc) {
2079 // Search option on l7vsadm_option_table_snmp.
2080 for (op_list = l7vsadm_option_table_parameter;
2081 op_list->option_name != NULL;
2083 if (strcmp(argv[idx], op_list->option_name) == 0 ||
2084 strcmp(argv[idx], op_list->option_name_long) == 0) {
2086 if (op_list->check_flag) {
2087 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,65,
2088 "Option %s is conflict.",
2090 fprintf(stderr, "PARSE ERROR : "
2091 "Option %s is conflict.\n",
2094 /*-------- DEBUG LOG --------*/
2095 if (log_level_parse == LOG_LV_DEBUG) {
2096 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,82,
2097 "out_function : static int "
2098 "parse_option_parameter(int argc, char *argv[]) : "
2101 /*------ DEBUG LOG END ------*/
2105 op_list->check_flag = 1;
2106 // Check and Set each option value.
2107 switch (op_list->option_code) {
2111 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,66,
2112 "Need option value for -r option.");
2113 fprintf(stderr, "PARSE ERROR : "
2114 "Need option value for -r option.\n");
2116 /*-------- DEBUG LOG --------*/
2117 if (log_level_parse == LOG_LV_DEBUG) {
2118 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,83,
2119 "out_function : static int "
2120 "parse_option_parameter("
2121 "int argc, char *argv[]) : "
2124 /*------ DEBUG LOG END ------*/
2129 // Search component name on component_name_table
2130 // and Convert component name to component code.
2131 for (cmp_list = component_name_table;
2132 cmp_list->component_name != NULL;
2134 if (strcmp(argv[idx],
2135 cmp_list->component_name) == 0) {
2136 l7vsadm_option_data.reload_param =
2137 cmp_list->component_code;
2142 if (!match_value_f) {
2143 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,67,
2144 "No such Component %s.", argv[idx]);
2145 fprintf(stderr, "PARSE ERROR : "
2146 "No such Component %s.\n", argv[idx]);
2148 /*-------- DEBUG LOG --------*/
2149 if (log_level_parse == LOG_LV_DEBUG) {
2150 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,84,
2151 "out_function : static int "
2152 "parse_option_parameter("
2153 "int argc, char *argv[]) : "
2156 /*------ DEBUG LOG END ------*/
2168 if (!match_option_f) {
2169 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,68,
2170 "Invalid option for -P command.");
2171 fprintf(stderr, "PARSE ERROR : "
2172 "Invalid option for -P command.\n");
2174 /*-------- DEBUG LOG --------*/
2175 if (log_level_parse == LOG_LV_DEBUG) {
2176 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,85,
2177 "out_function : static int "
2178 "parse_option_parameter(int argc, char *argv[]) : "
2181 /*------ DEBUG LOG END ------*/
2188 /*-------- DEBUG LOG --------*/
2189 if (log_level_parse == LOG_LV_DEBUG) {
2190 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,86,
2191 "out_function : static int "
2192 "parse_option_parameter(int argc, char *argv[]) : "
2193 "return = 0 : result "
2194 "l7vsadm_option_data.reload_param = %d",
2195 l7vsadm_option_data.reload_param);
2197 /*------ DEBUG LOG END ------*/
2203 * Parse help command option.
2204 * Check 2nd argument and later of help command
2205 * @param[in] argc number of argument
2206 * @param[in] *argv[] array of argument string
2207 * @return int parse result OK=0, NG=-1
2210 parse_option_help(int argc, char *argv[])
2212 /*-------- DEBUG LOG --------*/
2213 if (log_level_parse == LOG_LV_DEBUG) {
2214 char arg_str[DEBUG_STR_LEN] = {0};
2215 argc_argv_c_str(arg_str, argc, argv);
2216 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,87,
2217 "in_function : static int parse_option_help(int argc, char *argv[]) : "
2222 /*------ DEBUG LOG END ------*/
2224 // Argument check for help command.
2226 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,69,
2227 "Argument argc is illegal for -h command.");
2228 fprintf(stderr, "PARSE ERROR : "
2229 "Argument argc is illegal for -h command.\n");
2231 /*-------- DEBUG LOG --------*/
2232 if (log_level_parse == LOG_LV_DEBUG) {
2233 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,88,
2234 "out_function : static int "
2235 "parse_option_help(int argc, char *argv[]) : "
2238 /*------ DEBUG LOG END ------*/
2243 /*-------- DEBUG LOG --------*/
2244 if (log_level_parse == LOG_LV_DEBUG) {
2245 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,89,
2246 "out_function : static int "
2247 "parse_option_help(int argc, char *argv[]) : "
2250 /*------ DEBUG LOG END ------*/
2256 * Parse endpoint option.
2257 * Check endpoint(IP-Address:port) data
2258 * @param[out] *addr socket address struct
2259 * @param[in] *endpoint_str endpoint data string
2260 * @return int parse result OK=0, NG=-1
2263 parse_endpoint(struct sockaddr_in *addr, const char *endpoint_str, int allow_inaddr_any)
2265 struct addrinfo *res, hints;
2266 struct sockaddr_in *sin;
2267 char s[NI_MAXHOST + NI_MAXSERV], *t;
2271 if (endpoint_str == NULL) {
2272 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,70,
2273 "Argument endpoint_str is NULL.");
2274 fprintf(stderr, "PARSE ERROR : "
2275 "Argument endpoint_str is NULL.\n");
2277 /*-------- DEBUG LOG --------*/
2278 if (log_level_parse == LOG_LV_DEBUG) {
2279 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,90,
2280 "out_function : static int parse_endpoint"
2281 "(struct sockaddr_in *addr, const char *endpoint_str) : "
2284 /*------ DEBUG LOG END ------*/
2289 /*-------- DEBUG LOG --------*/
2290 if (log_level_parse == LOG_LV_DEBUG) {
2291 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,91,
2292 "in_function : static int parse_endpoint"
2293 "(struct sockaddr_in *addr, const char *endpoint_str) : "
2294 "addr = \"\" endpoint_str = %s",
2297 /*------ DEBUG LOG END ------*/
2299 // Separate host and port string.
2300 strncpy(s, endpoint_str, strlen(endpoint_str));
2301 s[strlen(endpoint_str)] = '\0';
2302 t = strrchr(s, ':');
2304 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,71,
2305 "Endpoint string is illegal. (':' not found)");
2306 fprintf(stderr, "PARSE ERROR : "
2307 "Endpoint string is illegal. (':' not found)\n");
2309 /*-------- DEBUG LOG --------*/
2310 if (log_level_parse == LOG_LV_DEBUG) {
2311 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,92,
2312 "out_function : static int parse_endpoint"
2313 "(struct sockaddr_in *addr, const char *endpoint_str) : "
2316 /*------ DEBUG LOG END ------*/
2322 memset(&hints, 0, sizeof(hints));
2323 hints.ai_family = PF_INET; /* inet only. no support for inet6 (yet) */
2324 hints.ai_socktype = SOCK_STREAM;
2325 ret = getaddrinfo(s, t, &hints, &res);
2327 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,72,
2328 "getaddrinfo() error. %s:%s: %s", s, t, gai_strerror(ret));
2329 fprintf(stderr, "PARSE ERROR : "
2330 "getaddrinfo() error. %s:%s: %s\n", s, t, gai_strerror(ret));
2332 /*-------- DEBUG LOG --------*/
2333 if (log_level_parse == LOG_LV_DEBUG) {
2334 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,93,
2335 "out_function : static int parse_endpoint"
2336 "(struct sockaddr_in *addr, const char *endpoint_str) : "
2339 /*------ DEBUG LOG END ------*/
2345 * We always use the first entry, because we can't distinguish
2346 * which entry you want to specify if we have multiple entries.
2348 sin = (struct sockaddr_in *)res->ai_addr;
2349 if (!allow_inaddr_any && sin->sin_addr.s_addr == htonl(INADDR_ANY)) {
2350 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,73,
2351 "You can't specify INADDR_ANY for endpoint.");
2352 fprintf(stderr, "PARSE ERROR : "
2353 "You can't specify INADDR_ANY for endpoint.\n");
2356 /*-------- DEBUG LOG --------*/
2357 if (log_level_parse == LOG_LV_DEBUG) {
2358 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,94,
2359 "out_function : static int parse_endpoint"
2360 "(struct sockaddr_in *addr, const char *endpoint_str) : "
2363 /*------ DEBUG LOG END ------*/
2368 if (sin->sin_port == htons(0)) {
2369 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,74,
2370 "You can't specify port number 0.");
2371 fprintf(stderr, "PARSE ERROR : "
2372 "You can't specify port number 0.\n");
2375 /*-------- DEBUG LOG --------*/
2376 if (log_level_parse == LOG_LV_DEBUG) {
2377 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,95,
2378 "out_function : static int parse_endpoint"
2379 "(struct sockaddr_in *addr, const char *endpoint_str) : "
2382 /*------ DEBUG LOG END ------*/
2390 /*-------- DEBUG LOG --------*/
2391 if (log_level_parse == LOG_LV_DEBUG) {
2392 char ep_str[DEBUG_STR_LEN] = {0};
2393 endpoint_c_str(ep_str, (void *)addr);
2394 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,96,
2395 "out_function : static int parse_endpoint"
2396 "(struct sockaddr_in *addr, const char *endpoint_str) : "
2397 "return = 0 : result "
2401 /*------ DEBUG LOG END ------*/
2407 * Parse digit option.
2409 * @param[in] *digit_str digit data string
2410 * @return int parse result OK=0, NG=-1
2413 parse_digit(const char *digit_str)
2418 if (digit_str == NULL) {
2419 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,75,
2420 "Argument digit_str is NULL.");
2421 fprintf(stderr, "PARSE ERROR : "
2422 "Argument digit_str is NULL.\n");
2424 /*-------- DEBUG LOG --------*/
2425 if (log_level_parse == LOG_LV_DEBUG) {
2426 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,97,
2427 "out_function : static int parse_digit"
2428 "(const char *digit_str) : "
2431 /*------ DEBUG LOG END ------*/
2436 /*-------- DEBUG LOG --------*/
2437 if (log_level_parse == LOG_LV_DEBUG) {
2438 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,98,
2439 "in_function : static int parse_digit(const char *digit_str) : "
2443 /*------ DEBUG LOG END ------*/
2445 for (i = 0; i < (int)strlen(digit_str); i++) {
2447 if (isdigit(digit_str[i]) == 0) {
2448 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,76,
2449 "Non digit character is included.");
2450 fprintf(stderr, "PARSE ERROR : "
2451 "Non digit character is included.\n");
2453 /*-------- DEBUG LOG --------*/
2454 if (log_level_parse == LOG_LV_DEBUG) {
2455 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,99,
2456 "out_function : static int parse_digit"
2457 "(const char *digit_str) : "
2460 /*------ DEBUG LOG END ------*/
2466 /*-------- DEBUG LOG --------*/
2467 if (log_level_parse == LOG_LV_DEBUG) {
2468 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,100,
2469 "out_function : static int parse_digit"
2470 "(const char *digit_str) : "
2473 /*------ DEBUG LOG END ------*/
2480 * Check qos data (xxx,xxxK,xxxM,xxxG)
2481 * @param[in] *qos_str qos data string
2482 * @return long long qos value, parse result NG=-1
2485 parse_qos(const char *qos_str)
2490 long long qos_value = 0;
2491 long long multiply_value = 0;
2494 if (qos_str == NULL) {
2495 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,77,
2496 "Argument qos_str is NULL.");
2497 fprintf(stderr, "PARSE ERROR : "
2498 "Argument qos_str is NULL.\n");
2500 /*-------- DEBUG LOG --------*/
2501 if (log_level_parse == LOG_LV_DEBUG) {
2502 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,101,
2503 "out_function : static long long parse_qos"
2504 "(const char *qos_str) : "
2507 /*------ DEBUG LOG END ------*/
2511 if ((int)strlen(qos_str) > 4) {
2512 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,78,
2513 "Argument qos_str is too long.");
2514 fprintf(stderr, "PARSE ERROR : "
2515 "Argument qos_str is too long.\n");
2517 /*-------- DEBUG LOG --------*/
2518 if (log_level_parse == LOG_LV_DEBUG) {
2519 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,102,
2520 "out_function : static long long parse_qos"
2521 "(const char *qos_str) : "
2524 /*------ DEBUG LOG END ------*/
2529 /*-------- DEBUG LOG --------*/
2530 if (log_level_parse == LOG_LV_DEBUG) {
2531 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,103,
2532 "in_function : static long long parse_qos"
2533 "(const char *qos_str) : "
2537 /*------ DEBUG LOG END ------*/
2540 for (i = 0; i < (int)strlen(qos_str); i++) {
2541 // Check QoS data format. (xxx or xxx + one alphabet)
2542 if (isdigit(qos_str[i]) == 0) {
2543 if ((int)strlen(qos_str) > 1 &&
2544 i == (int)strlen(qos_str) -1 &&
2545 isalpha(qos_str[i]) != 0) {
2546 // xxx + one alphabet (len > 1)
2549 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,79,
2550 "Wrong QoS value format.");
2551 fprintf(stderr, "PARSE ERROR : "
2552 "Wrong QoS value format.\n");
2554 /*-------- DEBUG LOG --------*/
2555 if (log_level_parse == LOG_LV_DEBUG) {
2556 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,104,
2557 "out_function : static long long parse_qos"
2558 "(const char *qos_str) : "
2561 /*------ DEBUG LOG END ------*/
2568 // Format xxxK,xxxM,xxxG,xxxk,xxxm,xxxg
2569 strncpy(numstr, qos_str, strlen(qos_str) - 1);
2570 numstr[strlen(qos_str) - 1] = '\0';
2571 sscanf(numstr, "%lld", &qos_value);
2572 if (qos_value < 0LL || qos_value > 999LL) {
2573 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,80,
2574 "Invalid QoS value.");
2575 fprintf(stderr, "PARSE ERROR : "
2576 "Invalid QoS value.\n");
2578 /*-------- DEBUG LOG --------*/
2579 if (log_level_parse == LOG_LV_DEBUG) {
2580 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,105,
2581 "out_function : static long long parse_qos"
2582 "(const char *qos_str) : "
2585 /*------ DEBUG LOG END ------*/
2589 if (qos_str[strlen(qos_str) - 1] == 'K' ||
2590 qos_str[strlen(qos_str) - 1] == 'k') {
2591 multiply_value = 1000LL;
2592 } else if (qos_str[strlen(qos_str) - 1] == 'M' ||
2593 qos_str[strlen(qos_str) - 1] == 'm') {
2594 multiply_value = 1000LL * 1000LL;
2595 } else if (qos_str[strlen(qos_str) - 1] == 'G' ||
2596 qos_str[strlen(qos_str) - 1] == 'g') {
2597 multiply_value = 1000LL * 1000LL * 1000LL;
2599 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,81,
2600 "Invalid QoS value unit character.");
2601 fprintf(stderr, "PARSE ERROR : "
2602 "Invalid QoS value character.\n");
2604 /*-------- DEBUG LOG --------*/
2605 if (log_level_parse == LOG_LV_DEBUG) {
2606 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,106,
2607 "out_function : static long long parse_qos"
2608 "(const char *qos_str) : "
2611 /*------ DEBUG LOG END ------*/
2615 // Convert from bps to byte/s.
2616 //qos_value = qos_value * multiply_value / 8LL;
2617 qos_value = qos_value * multiply_value;
2620 sscanf(qos_str, "%lld", &qos_value);
2621 if (qos_value < 0LL || qos_value > 999LL) {
2622 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,82,
2623 "Invalid QoS value.");
2624 fprintf(stderr, "PARSE ERROR : "
2625 "Invalid QoS value.\n");
2627 /*-------- DEBUG LOG --------*/
2628 if (log_level_parse == LOG_LV_DEBUG) {
2629 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,107,
2630 "out_function : static long long parse_qos"
2631 "(const char *qos_str) : "
2634 /*------ DEBUG LOG END ------*/
2638 // Convert from bps to byte/s.
2639 // qos_value = qos_value / 8LL;
2642 // compare l7vs_conn_read_bufsize <= qos_value by bps
2643 if (qos_value != 0) {
2644 int l7vs_conn_read_bufsize_bps = 20480 * 8; //! conn read buffer size
2645 int ret = parameter_is_int_exist( PARAM_COMP_CONN, "read_bufsize" );
2647 int bufsize = parameter_get_int_value( PARAM_COMP_CONN, "read_bufsize" );
2648 if (bufsize >= L7VS_CONN_READ_BUFSIZE_MIN && bufsize <= L7VS_CONN_READ_BUFSIZE_MAX)
2649 l7vs_conn_read_bufsize_bps = bufsize * 8;
2650 else if (bufsize > L7VS_CONN_READ_BUFSIZE_MAX) {
2651 l7vs_conn_read_bufsize_bps = L7VS_CONN_READ_BUFSIZE_MAX * 8;
2654 l7vs_conn_read_bufsize_bps = L7VS_CONN_READ_BUFSIZE_MIN * 8;
2657 if (l7vs_conn_read_bufsize_bps > qos_value) {
2658 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,86,
2659 "Invalid QoS value. qos >= read_bufsize is must");
2660 fprintf(stderr, "PARSE ERROR : "
2661 "Invalid QoS value. qos >= read_bufsize is must\n");
2667 // Convert from bps to byte/s.
2668 qos_value = qos_value / 8LL;
2670 /*-------- DEBUG LOG --------*/
2671 if (log_level_parse == LOG_LV_DEBUG) {
2672 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,108,
2673 "out_function : static long long parse_qos"
2674 "(const char *qos_str) : "
2678 /*------ DEBUG LOG END ------*/
2684 * Parse protocol module option.
2685 * Check protocol module option data
2686 * @param[in] argc number of argument
2687 * @param[in] *argv[] array of argument string
2688 * @param[in] m_idx_begin start of module option
2689 * @param[in] m_idx_end end of module option
2690 * @return int parse result OK=0, NG=-1
2693 parse_option_protomod(int argc, char *argv[], int m_idx_begin, int m_idx_end)
2695 struct l7vs_service_arg_multi sarg;
2696 void *protomod_service_arg;
2700 /*-------- DEBUG LOG --------*/
2701 if (log_level_parse == LOG_LV_DEBUG) {
2702 char arg_str[DEBUG_STR_LEN] = {0};
2703 argc_argv_c_str(arg_str, argc, argv);
2704 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,109,
2705 "in_function : static int parse_option_protomod"
2706 "(int argc, char *argv[], int m_idx_begin, int m_idx_end) : "
2707 "argc = %d, %s, m_idx_begin = %d, m_idx_end = %d",
2713 /*------ DEBUG LOG END ------*/
2716 if (signal_flg > 0) {
2717 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,1,
2718 "Signal (%d) Received.", received_sig);
2719 fprintf(stderr, "COMMON ERROR : "
2720 "Signal (%d) Received.\n", received_sig);
2722 /*-------- DEBUG LOG --------*/
2723 if (log_level_parse == LOG_LV_DEBUG) {
2724 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,110,
2725 "out_function : static int parse_option_protomod"
2726 "(int argc, char *argv[], int m_idx_begin, int m_idx_end) : "
2729 /*------ DEBUG LOG END ------*/
2735 memset(&sarg, 0, sizeof(l7vs_service_arg_multi));
2738 l7vsadm_option_data.protomod_options = g_array_new(FALSE, TRUE, sizeof(char*));
2739 if (l7vsadm_option_data.protomod_options == NULL) {
2740 LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSADM_COMMON,1,
2741 " GArray create error. (Could not allocate memory)");
2742 fprintf(stderr, "COMMON ERROR : "
2743 " GArray create error. (Could not allocate memory)\n");
2748 /* Add argv[0] first because getopt_long() skip argv[0]... */
2749 if (g_array_append_val(l7vsadm_option_data.protomod_options, argv[0]) == NULL) {
2750 LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSADM_COMMON,2,
2751 "Add to GArray error. (Could not allocate memory)");
2752 fprintf(stderr, "COMMON ERROR : "
2753 "Add to GArray error. (Could not allocate memory)\n");
2757 // Add Protocol Module option to GArray. (from m_idx_begin to m_idx_end)
2758 for (i = m_idx_begin; i < m_idx_end; i++) {
2759 if (g_array_append_val(l7vsadm_option_data.protomod_options, argv[i]) == NULL) {
2760 LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSADM_COMMON,3,
2761 "Add to GArray error. (Could not allocate memory)");
2762 fprintf(stderr, "COMMON ERROR : "
2763 "Add to GArray error. (Could not allocate memory)\n");
2769 // Protocol Module Initialize.
2770 ret = l7vs_module_init(NULL);
2772 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_PARSE,1,
2773 "Protocol Module Initialize error.");
2774 fprintf(stderr, "PARSE ERROR : "
2775 "Protocol Module Initialize error.\n");
2779 // Protocol Module Load.
2780 l7vsadm_option_data.protomod =
2781 (struct l7vs_protomod *)l7vs_protomod_get(l7vsadm_option_data.protomod_name);
2782 if (l7vsadm_option_data.protomod == NULL) {
2783 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_PARSE,2,
2784 "Protocol Module Load error.");
2785 fprintf(stderr, "PARSE ERROR : "
2786 "Protocol Module Load error.\n");
2791 // Check Protocol Module function pointer
2792 if (l7vsadm_option_data.protomod->create_sa == NULL) {
2793 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_PARSE,3,
2794 "create_sa() function pointer is NULL.");
2795 fprintf(stderr, "PARSE ERROR : "
2796 "create_sa() function pointer is NULL.\n");
2800 if (l7vsadm_option_data.protomod->destroy_sa == NULL) {
2801 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_PARSE,4,
2802 "destroy_sa() function pointer is NULL.");
2803 fprintf(stderr, "PARSE ERROR : "
2804 "destroy_sa() function pointer is NULL.\n");
2808 if (l7vsadm_option_data.protomod->parse == NULL) {
2809 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_PARSE,5,
2810 "parse() function pointer is NULL.");
2811 fprintf(stderr, "PARSE ERROR : "
2812 "parse() function pointer is NULL.\n");
2817 // Create Protocol Module service_arg
2818 protomod_service_arg = l7vsadm_option_data.protomod->create_sa(&sarg.srv_arg);
2819 if (protomod_service_arg == NULL) {
2820 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_PARSE,6,
2821 "Create Protocol Module service_arg error.");
2822 fprintf(stderr, "PARSE ERROR : "
2823 "Create Protocol Module service_arg error.\n");
2827 // Copy protomod_service_arg to sarg.protomod_arg
2828 memcpy(&sarg.protomod_arg, protomod_service_arg, sizeof(sarg.protomod_arg));
2830 // Destroy protomod_service_arg. (because copy end)
2831 l7vsadm_option_data.protomod->destroy_sa(&protomod_service_arg);
2833 // Parse Protocol Module option. (parse result saved sarg.protomod_arg)
2834 ret = l7vsadm_option_data.protomod->parse(sarg.protomod_arg,
2835 l7vsadm_option_data.protomod_options->len,
2836 (char **)l7vsadm_option_data.protomod_options->data);
2838 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,83,
2839 "Parse %s Protocol Module option error.",
2840 l7vsadm_option_data.protomod_name);
2841 fprintf(stderr, "PARSE ERROR : "
2842 "Parse %s Protocol Module option error.\n",
2843 l7vsadm_option_data.protomod_name);
2847 // Copy sarg.protomod_arg to l7vsadm_option_data. (for operate)
2848 memcpy(&l7vsadm_option_data.protomod_sarg,
2850 sizeof(struct l7vs_service_arg_multi));
2855 if (l7vsadm_option_data.protomod_options != NULL) {
2856 g_array_free(l7vsadm_option_data.protomod_options, TRUE);
2859 if (l7vsadm_option_data.protomod != NULL) {
2860 l7vs_protomod_put(l7vsadm_option_data.protomod);
2865 /*-------- DEBUG LOG --------*/
2866 if (log_level_parse == LOG_LV_DEBUG) {
2867 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,111,
2868 "out_function : static int parse_option_protomod"
2869 "(int argc, char *argv[], int m_idx_begin, int m_idx_end) : "
2873 /*------ DEBUG LOG END ------*/
2879 * Operate List command.
2880 * @return int result OK=0, NG=<0
2885 struct l7vs_service_arg *sarg;
2886 void *vs_buffer = NULL;
2887 int vs_bufsize = L7VSADM_DEFAULT_LIST_VS_BUFSIZE;
2894 /*-------- DEBUG LOG --------*/
2895 if (log_level_operate == LOG_LV_DEBUG) {
2896 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,1,
2897 "in_function : static int operate_list(void) : ");
2899 /*------ DEBUG LOG END ------*/
2901 ret = create_socket();
2903 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,1,
2904 "Create socket error.");
2906 /*-------- DEBUG LOG --------*/
2907 if (log_level_operate == LOG_LV_DEBUG) {
2908 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,2,
2909 "out_function : static int operate_list"
2913 /*------ DEBUG LOG END ------*/
2919 printf("Layer-7 Virtual Server version %s\n", L7VS_VERSION_STRING);
2921 if (l7vsadm_option_data.command_code == CMD_LIST_VERBOSE) {
2923 ret = list_log_info();
2925 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,2,
2926 "List logger info error.");
2930 // Replication info.
2931 ret = list_replication_info();
2933 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,3,
2934 "List replication info error.");
2939 ret = list_snmp_info();
2941 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,4,
2942 "List SNMPAgent info error.");
2947 // Display VS header.
2948 if (l7vsadm_option_data.command_code == CMD_LIST_VERBOSE) {
2949 printf("Prot LocalAddress:Port ProtoMod Scheduler Reschedule "
2950 "Protomod_opt_string\n");
2951 printf(" SorryAddress:Port Sorry_cc Sorry_flag\n");
2952 printf(" QoS-up Throughput-up\n");
2953 printf(" QoS-down Throughput-down\n");
2954 } else if (l7vsadm_option_data.command_code == CMD_LIST_KEY) {
2955 printf("Prot LocalAddress:Port ProtoMod Scheduler Reschedule "
2956 "Protomod_key_string\n");
2958 printf("Prot LocalAddress:Port ProtoMod Scheduler\n");
2960 printf(" -> RemoteAddress:Port Forward Weight ActiveConn InactConn\n");
2963 // Alloc VirtualService list memory.
2964 vs_buffer = malloc(vs_bufsize);
2966 /*-------- DEBUG LOG --------*/
2967 if (log_level_common == LOG_LV_DEBUG) {
2968 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,1,
2969 "malloc vs_buffer : "
2970 "allocate address = %p "
2971 "allocate size = %d",
2975 /*------ DEBUG LOG END ------*/
2977 if (vs_buffer == NULL) {
2978 LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSADM_COMMON,4,
2979 "Could not allocate vs_buffer memory.");
2980 fprintf(stderr, "COMMON ERROR : "
2981 "Could not allocate vs_buffer memory.\n");
2985 // Get all VirtualService list.
2986 ret_num = get_vs(vs_buffer, vs_bufsize);
2987 // If return L7VSADM_RECV_TOO_LARGE (-2) when extend vs_buffer size and retry.
2991 /*-------- DEBUG LOG --------*/
2992 if (log_level_common == LOG_LV_DEBUG) {
2993 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,2,
2995 "free address = %p",
2998 /*------ DEBUG LOG END ------*/
3001 if (ret_num == L7VSADM_RECV_TOO_LARGE) {
3002 vs_bufsize += L7VSADM_DEFAULT_LIST_VS_BUFSIZE;
3003 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_OPERATE,1,
3004 "Receive VirtualService data too large. retrying.");
3007 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,5,
3008 "Get VirtualService data error.");
3009 fprintf(stderr, "OPERATE ERROR : "
3010 "Get VirtualService data error.\n");
3015 // List all VirtualService.
3016 sarg = (struct l7vs_service_arg *)vs_buffer;
3018 for (i = 0; i < vs_num; i++) {
3019 ret = list_vs(sarg);
3021 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,6,
3022 "List VirtualService data error.");
3023 fprintf(stderr, "OPERATE ERROR : "
3024 "List VirtualService data error.\n");
3027 vs_offset += sarg->len;
3028 if (vs_offset >= vs_bufsize) {
3029 // Message size did not match.
3030 // Version mismatch between l7vsd and l7vsadm?
3031 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,7,
3032 "VirtualService message size did not match.");
3033 fprintf(stderr, "OPERATE ERROR : "
3034 "VirtualService message size did not match.\n");
3038 sarg = (struct l7vs_service_arg *)((char *)vs_buffer + vs_offset);
3043 if (vs_buffer != NULL) {
3046 /*-------- DEBUG LOG --------*/
3047 if (log_level_common == LOG_LV_DEBUG) {
3048 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,3,
3050 "free address = %p",
3053 /*------ DEBUG LOG END ------*/
3059 /*-------- DEBUG LOG --------*/
3060 if (log_level_operate == LOG_LV_DEBUG) {
3061 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,3,
3062 "out_function : static int operate_list"
3067 /*------ DEBUG LOG END ------*/
3073 * Operate Add-VirtualService command.
3074 * @return int result OK=0, NG=<0
3077 operate_add_vs(void)
3079 struct l7vs_config_req_operate_vs req;
3080 struct l7vs_config_rsp_operate_vs rsp;
3081 struct l7vsadm_iov_data iov_data;
3084 /*-------- DEBUG LOG --------*/
3085 if (log_level_operate == LOG_LV_DEBUG) {
3086 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,4,
3087 "in_function : static int operate_add_vs(void) : ");
3089 /*------ DEBUG LOG END ------*/
3091 ret = create_socket();
3093 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,8,
3094 "Create socket error.");
3096 /*-------- DEBUG LOG --------*/
3097 if (log_level_operate == LOG_LV_DEBUG) {
3098 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,5,
3099 "out_function : static int operate_add_vs"
3103 /*------ DEBUG LOG END ------*/
3108 memset(&req, 0, sizeof(struct l7vs_config_req_operate_vs));
3109 memset(&rsp, 0, sizeof(struct l7vs_config_rsp_operate_vs));
3110 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
3112 req.cmd = L7VS_CONFIG_ADD_VS;
3114 l7vsadm_option_data.protomod_sarg.srv_arg.addr = l7vsadm_option_data.vs_addr;
3115 l7vsadm_option_data.protomod_sarg.srv_arg.proto = IPPROTO_TCP;
3116 l7vsadm_option_data.protomod_sarg.srv_arg.backlog = L7VSADM_DEFAULT_BACKLOG;
3118 strncpy(l7vsadm_option_data.protomod_sarg.srv_arg.schedmod,
3119 l7vsadm_option_data.schedmod_name,
3120 strlen(l7vsadm_option_data.schedmod_name));
3123 l7vsadm_option_data.protomod_sarg.srv_arg.sorry_cc = l7vsadm_option_data.max_connection;
3124 l7vsadm_option_data.protomod_sarg.srv_arg.sorry_addr = l7vsadm_option_data.sorry_addr;
3125 l7vsadm_option_data.protomod_sarg.srv_arg.sorry_flag = l7vsadm_option_data.sorry_flag;
3127 // QoS Threshold data
3128 l7vsadm_option_data.protomod_sarg.srv_arg.qos_threshold_up = l7vsadm_option_data.qos_threshold_up;
3129 l7vsadm_option_data.protomod_sarg.srv_arg.qos_threshold_down = l7vsadm_option_data.qos_threshold_down;
3131 // Set data for request
3132 iov_data.req_iov[0].iov_base = &req;
3133 iov_data.req_iov[0].iov_len = sizeof(req);
3134 iov_data.req_iov[1].iov_base = &l7vsadm_option_data.protomod_sarg;
3135 iov_data.req_iov[1].iov_len = sizeof(struct l7vs_service_arg_multi);
3136 iov_data.req_cnt = 2;
3138 // Set data for response
3139 iov_data.rsp_iov[0].iov_base = &rsp;
3140 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
3141 iov_data.rsp_cnt = 1;
3143 ret = communicate_to_l7vsd(&iov_data);
3145 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,9,
3146 "Communicate to l7vsd error.");
3150 if (rsp.code != 0) {
3151 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,1,
3152 "%s.", config_strerror(rsp.code));
3153 fprintf(stderr, "CONFIG ERROR : "
3154 "%s.\n", config_strerror(rsp.code));
3163 /*-------- DEBUG LOG --------*/
3164 if (log_level_operate == LOG_LV_DEBUG) {
3165 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,6,
3166 "out_function : static int operate_add_vs"
3171 /*------ DEBUG LOG END ------*/
3177 * Operate Edit-VirtualService command.
3178 * @return int result OK=0, NG=<0
3181 operate_edit_vs(void)
3183 struct l7vs_config_req_operate_vs req;
3184 struct l7vs_config_rsp_operate_vs rsp;
3185 struct l7vsadm_iov_data iov_data;
3187 struct l7vsadm_option_list *list;
3188 int specified_f = 0;
3190 /*-------- DEBUG LOG --------*/
3191 if (log_level_operate == LOG_LV_DEBUG) {
3192 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,7,
3193 "in_function : static int operate_edit_vs(void) : ");
3195 /*------ DEBUG LOG END ------*/
3197 ret = create_socket();
3199 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,10,
3200 "Create socket error.");
3202 /*-------- DEBUG LOG --------*/
3203 if (log_level_operate == LOG_LV_DEBUG) {
3204 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,8,
3205 "out_function : static int operate_edit_vs"
3209 /*------ DEBUG LOG END ------*/
3214 memset(&req, 0, sizeof(struct l7vs_config_req_operate_vs));
3215 memset(&rsp, 0, sizeof(struct l7vs_config_rsp_operate_vs));
3216 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
3218 req.cmd = L7VS_CONFIG_EDIT_VS;
3220 l7vsadm_option_data.protomod_sarg.srv_arg.addr = l7vsadm_option_data.vs_addr;
3221 l7vsadm_option_data.protomod_sarg.srv_arg.proto = IPPROTO_TCP;
3222 l7vsadm_option_data.protomod_sarg.srv_arg.backlog = L7VSADM_DEFAULT_BACKLOG;
3224 // Check Specified option for edit. Set -1 or NULL or etc. to omitted option.
3225 for (list = l7vsadm_option_table_vs; list->option_name != NULL; list++) {
3226 switch (list->option_code) {
3228 if (list->check_flag) {
3229 // Option specified.
3230 strncpy(l7vsadm_option_data.protomod_sarg.srv_arg.schedmod,
3231 l7vsadm_option_data.schedmod_name,
3232 strlen(l7vsadm_option_data.schedmod_name));
3234 // Option omitted. Set all "0x00".
3235 memset(&l7vsadm_option_data.protomod_sarg.srv_arg.schedmod, 0,
3236 sizeof(l7vsadm_option_data.protomod_sarg.srv_arg.schedmod));
3240 if (list->check_flag) {
3241 // Option specified.
3242 l7vsadm_option_data.protomod_sarg.srv_arg.sorry_cc =
3243 l7vsadm_option_data.max_connection;
3246 l7vsadm_option_data.protomod_sarg.srv_arg.sorry_cc = -1;
3250 if (list->check_flag) {
3251 // Option specified.
3252 l7vsadm_option_data.protomod_sarg.srv_arg.sorry_addr =
3253 l7vsadm_option_data.sorry_addr;
3255 // Option omitted. Set all "0xff".
3256 memset(&l7vsadm_option_data.protomod_sarg.srv_arg.sorry_addr, 0xff,
3257 sizeof(struct sockaddr_storage));
3261 if (list->check_flag) {
3262 // Option specified.
3263 l7vsadm_option_data.protomod_sarg.srv_arg.sorry_flag =
3264 l7vsadm_option_data.sorry_flag;
3266 // Option omitted. Set -1.
3267 l7vsadm_option_data.protomod_sarg.srv_arg.sorry_flag = -1;
3271 if (list->check_flag) {
3272 // Option specified.
3273 l7vsadm_option_data.protomod_sarg.srv_arg.qos_threshold_up =
3274 l7vsadm_option_data.qos_threshold_up;
3276 // Option omitted. Set ULLONG_MAX.
3277 l7vsadm_option_data.protomod_sarg.srv_arg.qos_threshold_up = ULLONG_MAX;
3281 if (list->check_flag) {
3282 // Option specified.
3283 l7vsadm_option_data.protomod_sarg.srv_arg.qos_threshold_down =
3284 l7vsadm_option_data.qos_threshold_down;
3286 // Option omitted. Set ULLONG_MAX.
3287 l7vsadm_option_data.protomod_sarg.srv_arg.qos_threshold_down = ULLONG_MAX;
3293 specified_f += list->check_flag;
3296 // All option omitted.
3297 if (specified_f == 0) {
3298 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,11,
3299 "All option omitted for edit vs command.");
3300 fprintf(stderr, "OPERATE ERROR : "
3301 "All option omitted for edit vs command.\n");
3306 // Set data for request
3307 iov_data.req_iov[0].iov_base = &req;
3308 iov_data.req_iov[0].iov_len = sizeof(req);
3309 iov_data.req_iov[1].iov_base = &l7vsadm_option_data.protomod_sarg;
3310 iov_data.req_iov[1].iov_len = sizeof(struct l7vs_service_arg_multi);
3311 iov_data.req_cnt = 2;
3313 // Set data for response
3314 iov_data.rsp_iov[0].iov_base = &rsp;
3315 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
3316 iov_data.rsp_cnt = 1;
3318 ret = communicate_to_l7vsd(&iov_data);
3320 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,12,
3321 "Communicate to l7vsd error.");
3325 if (rsp.code != 0) {
3326 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,2,
3327 "%s.", config_strerror(rsp.code));
3328 fprintf(stderr, "CONFIG ERROR : "
3329 "%s.\n", config_strerror(rsp.code));
3338 /*-------- DEBUG LOG --------*/
3339 if (log_level_operate == LOG_LV_DEBUG) {
3340 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,9,
3341 "out_function : static int operate_edit_vs"
3346 /*------ DEBUG LOG END ------*/
3352 * Operate Delete-VirtualService command.
3353 * @return int result OK=0, NG=<0
3356 operate_del_vs(void)
3358 struct l7vs_config_req_operate_vs req;
3359 struct l7vs_config_rsp_operate_vs rsp;
3360 struct l7vsadm_iov_data iov_data;
3363 /*-------- DEBUG LOG --------*/
3364 if (log_level_operate == LOG_LV_DEBUG) {
3365 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,10,
3366 "in_function : static int operate_del_vs(void) : ");
3368 /*------ DEBUG LOG END ------*/
3370 ret = create_socket();
3372 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,13,
3373 "Create socket error.");
3375 /*-------- DEBUG LOG --------*/
3376 if (log_level_operate == LOG_LV_DEBUG) {
3377 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,11,
3378 "out_function : static int operate_del_vs"
3382 /*------ DEBUG LOG END ------*/
3387 memset(&req, 0, sizeof(struct l7vs_config_req_operate_vs));
3388 memset(&rsp, 0, sizeof(struct l7vs_config_rsp_operate_vs));
3389 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
3391 req.cmd = L7VS_CONFIG_DEL_VS;
3393 l7vsadm_option_data.protomod_sarg.srv_arg.addr = l7vsadm_option_data.vs_addr;
3394 l7vsadm_option_data.protomod_sarg.srv_arg.proto = IPPROTO_TCP;
3395 l7vsadm_option_data.protomod_sarg.srv_arg.backlog = L7VSADM_DEFAULT_BACKLOG;
3397 // Set data for request
3398 iov_data.req_iov[0].iov_base = &req;
3399 iov_data.req_iov[0].iov_len = sizeof(req);
3400 iov_data.req_iov[1].iov_base = &l7vsadm_option_data.protomod_sarg;
3401 iov_data.req_iov[1].iov_len = sizeof(struct l7vs_service_arg_multi);
3402 iov_data.req_cnt = 2;
3404 // Set data for response
3405 iov_data.rsp_iov[0].iov_base = &rsp;
3406 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
3407 iov_data.rsp_cnt = 1;
3409 ret = communicate_to_l7vsd(&iov_data);
3411 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,14,
3412 "Communicate to l7vsd error.");
3416 if (rsp.code != 0) {
3417 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,3,
3418 "%s.", config_strerror(rsp.code));
3419 fprintf(stderr, "CONFIG ERROR : "
3420 "%s.\n", config_strerror(rsp.code));
3429 /*-------- DEBUG LOG --------*/
3430 if (log_level_operate == LOG_LV_DEBUG) {
3431 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,12,
3432 "out_function : static int operate_del_vs"
3437 /*------ DEBUG LOG END ------*/
3443 * Operate Flush-VirtualService command.
3444 * @return int result OK=0, NG=<0
3447 operate_flush_vs(void)
3449 struct l7vs_config_req_flush_vs req;
3450 struct l7vs_config_rsp_flush_vs rsp;
3451 struct l7vsadm_iov_data iov_data;
3454 /*-------- DEBUG LOG --------*/
3455 if (log_level_operate == LOG_LV_DEBUG) {
3456 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,13,
3457 "in_function : static int operate_flush_vs(void) : ");
3459 /*------ DEBUG LOG END ------*/
3461 ret = create_socket();
3463 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,15,
3464 "Create socket error.");
3466 /*-------- DEBUG LOG --------*/
3467 if (log_level_operate == LOG_LV_DEBUG) {
3468 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,14,
3469 "out_function : static int operate_flush_vs"
3473 /*------ DEBUG LOG END ------*/
3478 memset(&req, 0, sizeof(struct l7vs_config_req_flush_vs));
3479 memset(&rsp, 0, sizeof(struct l7vs_config_rsp_flush_vs));
3480 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
3482 req.cmd = L7VS_CONFIG_FLUSH_VS;
3484 // Set data for request
3485 iov_data.req_iov[0].iov_base = &req;
3486 iov_data.req_iov[0].iov_len = sizeof(req);
3487 iov_data.req_cnt = 1;
3489 // Set data for response
3490 iov_data.rsp_iov[0].iov_base = &rsp;
3491 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
3492 iov_data.rsp_cnt = 1;
3494 ret = communicate_to_l7vsd(&iov_data);
3496 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,16,
3497 "Communicate to l7vsd error.");
3501 if (rsp.code != 0) {
3502 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,4,
3503 "%s.", config_strerror(rsp.code));
3504 fprintf(stderr, "CONFIG ERROR : "
3505 "%s.\n", config_strerror(rsp.code));
3514 /*-------- DEBUG LOG --------*/
3515 if (log_level_operate == LOG_LV_DEBUG) {
3516 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,15,
3517 "out_function : static int operate_flush_vs"
3522 /*------ DEBUG LOG END ------*/
3528 * Operate Add-RealServer command.
3529 * @return int result OK=0, NG=<0
3532 operate_add_rs(void)
3534 struct l7vs_config_req_operate_rs req;
3535 struct l7vs_config_rsp_operate_rs rsp;
3536 struct l7vsadm_iov_data iov_data;
3539 /*-------- DEBUG LOG --------*/
3540 if (log_level_operate == LOG_LV_DEBUG) {
3541 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,16,
3542 "in_function : static int operate_add_rs(void) : ");
3544 /*------ DEBUG LOG END ------*/
3546 ret = create_socket();
3548 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,17,
3549 "Create socket error.");
3551 /*-------- DEBUG LOG --------*/
3552 if (log_level_operate == LOG_LV_DEBUG) {
3553 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,17,
3554 "out_function : static int operate_add_rs"
3558 /*------ DEBUG LOG END ------*/
3563 memset(&req, 0, sizeof(struct l7vs_config_req_operate_rs));
3564 memset(&rsp, 0, sizeof(struct l7vs_config_rsp_operate_rs));
3565 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
3567 req.cmd = L7VS_CONFIG_ADD_RS;
3569 l7vsadm_option_data.protomod_sarg.srv_arg.addr = l7vsadm_option_data.vs_addr;
3570 l7vsadm_option_data.protomod_sarg.srv_arg.proto = IPPROTO_TCP;
3572 req.darg.addr = l7vsadm_option_data.rs_addr;
3573 req.darg.weight = l7vsadm_option_data.weight;
3575 // Set data for request
3576 iov_data.req_iov[0].iov_base = &req;
3577 iov_data.req_iov[0].iov_len = sizeof(req);
3578 iov_data.req_iov[1].iov_base = &l7vsadm_option_data.protomod_sarg;
3579 iov_data.req_iov[1].iov_len = sizeof(struct l7vs_service_arg_multi);
3580 iov_data.req_cnt = 2;
3582 // Set data for response
3583 iov_data.rsp_iov[0].iov_base = &rsp;
3584 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
3585 iov_data.rsp_cnt = 1;
3587 ret = communicate_to_l7vsd(&iov_data);
3589 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,18,
3590 "Communicate to l7vsd error.");
3594 if (rsp.code != 0) {
3595 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,5,
3596 "%s.", config_strerror(rsp.code));
3597 fprintf(stderr, "CONFIG ERROR : "
3598 "%s.\n", config_strerror(rsp.code));
3607 /*-------- DEBUG LOG --------*/
3608 if (log_level_operate == LOG_LV_DEBUG) {
3609 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,18,
3610 "out_function : static int operate_add_rs"
3615 /*------ DEBUG LOG END ------*/
3621 * Operate Edit-RealServer command.
3622 * @return int result OK=0, NG=<0
3625 operate_edit_rs(void)
3627 struct l7vs_config_req_operate_rs req;
3628 struct l7vs_config_rsp_operate_rs rsp;
3629 struct l7vsadm_iov_data iov_data;
3631 struct l7vsadm_option_list *list;
3632 int specified_f = 0;
3634 /*-------- DEBUG LOG --------*/
3635 if (log_level_operate == LOG_LV_DEBUG) {
3636 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,19,
3637 "in_function : static int operate_edit_rs(void) : ");
3639 /*------ DEBUG LOG END ------*/
3641 ret = create_socket();
3643 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,19,
3644 "Create socket error.");
3646 /*-------- DEBUG LOG --------*/
3647 if (log_level_operate == LOG_LV_DEBUG) {
3648 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,20,
3649 "out_function : static int operate_edit_rs"
3653 /*------ DEBUG LOG END ------*/
3658 memset(&req, 0, sizeof(struct l7vs_config_req_operate_rs));
3659 memset(&rsp, 0, sizeof(struct l7vs_config_rsp_operate_rs));
3660 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
3662 req.cmd = L7VS_CONFIG_EDIT_RS;
3664 l7vsadm_option_data.protomod_sarg.srv_arg.addr = l7vsadm_option_data.vs_addr;
3665 l7vsadm_option_data.protomod_sarg.srv_arg.proto = IPPROTO_TCP;
3667 req.darg.addr = l7vsadm_option_data.rs_addr;
3669 // Check Specified option for edit. Set -1 or NULL or etc. to omitted option.
3670 for (list = l7vsadm_option_table_rs; list->option_name != NULL; list++) {
3671 switch (list->option_code) {
3673 if (list->check_flag) {
3674 // Option specified.
3675 req.darg.weight = l7vsadm_option_data.weight;
3677 // Option omitted. Set -1.
3678 req.darg.weight = -1;
3684 specified_f += list->check_flag;
3687 // All option omitted.
3688 if (specified_f == 0) {
3689 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,20,
3690 "All option omitted for edit rs command.");
3691 fprintf(stderr, "OPERATE ERROR : "
3692 "All option omitted for edit rs command.\n");
3697 // Set data for request
3698 iov_data.req_iov[0].iov_base = &req;
3699 iov_data.req_iov[0].iov_len = sizeof(req);
3700 iov_data.req_iov[1].iov_base = &l7vsadm_option_data.protomod_sarg;
3701 iov_data.req_iov[1].iov_len = sizeof(struct l7vs_service_arg_multi);
3702 iov_data.req_cnt = 2;
3704 // Set data for response
3705 iov_data.rsp_iov[0].iov_base = &rsp;
3706 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
3707 iov_data.rsp_cnt = 1;
3709 ret = communicate_to_l7vsd(&iov_data);
3711 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,21,
3712 "Communicate to l7vsd error.");
3716 if (rsp.code != 0) {
3717 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,6,
3718 "%s.", config_strerror(rsp.code));
3719 fprintf(stderr, "CONFIG ERROR : "
3720 "%s.\n", config_strerror(rsp.code));
3729 /*-------- DEBUG LOG --------*/
3730 if (log_level_operate == LOG_LV_DEBUG) {
3731 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,21,
3732 "out_function : static int operate_edit_rs"
3737 /*------ DEBUG LOG END ------*/
3743 * Operate Delete-RealServer command.
3744 * @return int result OK=0, NG=<0
3747 operate_del_rs(void)
3749 struct l7vs_config_req_operate_rs req;
3750 struct l7vs_config_rsp_operate_rs rsp;
3751 struct l7vsadm_iov_data iov_data;
3754 /*-------- DEBUG LOG --------*/
3755 if (log_level_operate == LOG_LV_DEBUG) {
3756 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,22,
3757 "in_function : static int operate_del_rs(void) : ");
3759 /*------ DEBUG LOG END ------*/
3761 ret = create_socket();
3763 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,22,
3764 "Create socket error.");
3766 /*-------- DEBUG LOG --------*/
3767 if (log_level_operate == LOG_LV_DEBUG) {
3768 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,23,
3769 "out_function : static int operate_del_rs"
3773 /*------ DEBUG LOG END ------*/
3778 memset(&req, 0, sizeof(struct l7vs_config_req_operate_rs));
3779 memset(&rsp, 0, sizeof(struct l7vs_config_rsp_operate_rs));
3780 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
3782 req.cmd = L7VS_CONFIG_DEL_RS;
3784 l7vsadm_option_data.protomod_sarg.srv_arg.addr = l7vsadm_option_data.vs_addr;
3785 l7vsadm_option_data.protomod_sarg.srv_arg.proto = IPPROTO_TCP;
3787 req.darg.addr = l7vsadm_option_data.rs_addr;
3789 // Set data for request
3790 iov_data.req_iov[0].iov_base = &req;
3791 iov_data.req_iov[0].iov_len = sizeof(req);
3792 iov_data.req_iov[1].iov_base = &l7vsadm_option_data.protomod_sarg;
3793 iov_data.req_iov[1].iov_len = sizeof(struct l7vs_service_arg_multi);
3794 iov_data.req_cnt = 2;
3796 // Set data for response
3797 iov_data.rsp_iov[0].iov_base = &rsp;
3798 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
3799 iov_data.rsp_cnt = 1;
3801 ret = communicate_to_l7vsd(&iov_data);
3803 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,23,
3804 "Communicate to l7vsd error.");
3808 if (rsp.code != 0) {
3809 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,7,
3810 "%s.", config_strerror(rsp.code));
3811 fprintf(stderr, "CONFIG ERROR : "
3812 "%s.\n", config_strerror(rsp.code));
3821 /*-------- DEBUG LOG --------*/
3822 if (log_level_operate == LOG_LV_DEBUG) {
3823 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,24,
3824 "out_function : static int operate_del_rs"
3829 /*------ DEBUG LOG END ------*/
3835 * Operate Replication command.
3836 * @return int result OK=0, NG=<0
3839 operate_replication(void)
3841 struct l7vs_config_msg_replication req;
3842 struct l7vs_config_msg_replication rsp;
3843 struct l7vsadm_iov_data iov_data;
3846 /*-------- DEBUG LOG --------*/
3847 if (log_level_operate == LOG_LV_DEBUG) {
3848 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,25,
3849 "in_function : static int operate_replication(void) : ");
3851 /*------ DEBUG LOG END ------*/
3853 ret = create_socket();
3855 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,24,
3856 "Create socket error.");
3858 /*-------- DEBUG LOG --------*/
3859 if (log_level_operate == LOG_LV_DEBUG) {
3860 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,26,
3861 "out_function : static int operate_replication"
3865 /*------ DEBUG LOG END ------*/
3870 memset(&req, 0, sizeof(struct l7vs_config_msg_replication));
3871 memset(&rsp, 0, sizeof(struct l7vs_config_msg_replication));
3872 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
3874 req.cmd = L7VS_CONFIG_REPLICATION;
3876 switch (l7vsadm_option_data.control_code) {
3878 if (l7vsadm_option_data.replication_start_flag == 1) {
3879 req.kind = L7VS_CONFIG_REPLICATION_START;
3881 req.kind = L7VS_CONFIG_REPLICATION_STOP;
3885 req.kind = L7VS_CONFIG_REPLICATION_COMPULSORILY;
3888 req.kind = L7VS_CONFIG_REPLICATION_DUMP;
3894 // Set data for request
3895 iov_data.req_iov[0].iov_base = &req;
3896 iov_data.req_iov[0].iov_len = sizeof(req);
3897 iov_data.req_cnt = 1;
3899 // Set data for response
3900 iov_data.rsp_iov[0].iov_base = &rsp;
3901 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
3902 iov_data.rsp_cnt = 1;
3904 ret = communicate_to_l7vsd(&iov_data);
3906 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,25,
3907 "Communicate to l7vsd error.");
3911 if (rsp.code != 0) {
3912 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,8,
3913 "%s.", config_strerror(rsp.code));
3914 fprintf(stderr, "CONFIG ERROR : "
3915 "%s.\n", config_strerror(rsp.code));
3924 /*-------- DEBUG LOG --------*/
3925 if (log_level_operate == LOG_LV_DEBUG) {
3926 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,27,
3927 "out_function : static int operate_replication"
3932 /*------ DEBUG LOG END ------*/
3938 * Operate Logger command.
3939 * @return int result OK=0, NG=<0
3944 struct l7vs_config_msg_log req;
3945 struct l7vs_config_msg_log rsp;
3946 struct l7vsadm_iov_data iov_data;
3949 /*-------- DEBUG LOG --------*/
3950 if (log_level_operate == LOG_LV_DEBUG) {
3951 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,28,
3952 "in_function : static int operate_log(void) : ");
3954 /*------ DEBUG LOG END ------*/
3956 ret = create_socket();
3958 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,26,
3959 "Create socket error.");
3961 /*-------- DEBUG LOG --------*/
3962 if (log_level_operate == LOG_LV_DEBUG) {
3963 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,29,
3964 "out_function : static int operate_log"
3968 /*------ DEBUG LOG END ------*/
3973 memset(&req, 0, sizeof(struct l7vs_config_msg_log));
3974 memset(&rsp, 0, sizeof(struct l7vs_config_msg_log));
3975 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
3977 if (l7vsadm_option_data.category_all_flag == 1) {
3978 req.cmd = L7VS_CONFIG_SET_LOG_LEVEL_ALL;
3980 req.cmd = L7VS_CONFIG_SET_LOG_LEVEL;
3982 req.kind = l7vsadm_option_data.log_category;
3983 req.vsd_log_level = l7vsadm_option_data.log_level;
3985 // Set data for request
3986 iov_data.req_iov[0].iov_base = &req;
3987 iov_data.req_iov[0].iov_len = sizeof(req);
3988 iov_data.req_cnt = 1;
3990 // Set data for response
3991 iov_data.rsp_iov[0].iov_base = &rsp;
3992 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
3993 iov_data.rsp_cnt = 1;
3995 ret = communicate_to_l7vsd(&iov_data);
3997 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,27,
3998 "Communicate to l7vsd error.");
4002 if (rsp.code != 0) {
4003 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,9,
4004 "%s.", config_strerror(rsp.code));
4005 fprintf(stderr, "CONFIG ERROR : "
4006 "%s.\n", config_strerror(rsp.code));
4015 /*-------- DEBUG LOG --------*/
4016 if (log_level_operate == LOG_LV_DEBUG) {
4017 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,30,
4018 "out_function : static int operate_log"
4023 /*------ DEBUG LOG END ------*/
4029 * Operate SNMPAgent command.
4030 * @return int result OK=0, NG=<0
4035 struct l7vs_config_msg_snmp req;
4036 struct l7vs_config_msg_snmp rsp;
4037 struct l7vsadm_iov_data iov_data;
4040 /*-------- DEBUG LOG --------*/
4041 if (log_level_operate == LOG_LV_DEBUG) {
4042 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,31,
4043 "in_function : static int operate_snmp(void) : ");
4045 /*------ DEBUG LOG END ------*/
4047 ret = create_socket();
4049 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,28,
4050 "Create socket error.");
4052 /*-------- DEBUG LOG --------*/
4053 if (log_level_operate == LOG_LV_DEBUG) {
4054 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,32,
4055 "out_function : static int operate_snmp"
4059 /*------ DEBUG LOG END ------*/
4064 memset(&req, 0, sizeof(struct l7vs_config_msg_snmp));
4065 memset(&rsp, 0, sizeof(struct l7vs_config_msg_snmp));
4066 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
4068 if (l7vsadm_option_data.category_all_flag == 1) {
4069 req.cmd = L7VS_CONFIG_SET_SNMP_LOG_LEVEL_ALL;
4071 req.cmd = L7VS_CONFIG_SET_SNMP_LOG_LEVEL;
4073 req.kind = l7vsadm_option_data.log_category;
4074 req.snmp_log_level = l7vsadm_option_data.log_level;
4076 // Set data for request
4077 iov_data.req_iov[0].iov_base = &req;
4078 iov_data.req_iov[0].iov_len = sizeof(req);
4079 iov_data.req_cnt = 1;
4081 // Set data for response
4082 iov_data.rsp_iov[0].iov_base = &rsp;
4083 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
4084 iov_data.rsp_cnt = 1;
4086 ret = communicate_to_l7vsd(&iov_data);
4088 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,29,
4089 "Communicate to l7vsd error.");
4093 if (rsp.code != 0) {
4094 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,10,
4095 "%s.", config_strerror(rsp.code));
4096 fprintf(stderr, "CONFIG ERROR : "
4097 "%s.\n", config_strerror(rsp.code));
4106 /*-------- DEBUG LOG --------*/
4107 if (log_level_operate == LOG_LV_DEBUG) {
4108 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,33,
4109 "out_function : static int operate_snmp"
4114 /*------ DEBUG LOG END ------*/
4120 * Operate Parameter command.
4121 * @return int result OK=0, NG=<0
4124 operate_parameter(void)
4126 struct l7vs_config_msg_parameter req;
4127 struct l7vs_config_msg_parameter rsp;
4128 struct l7vsadm_iov_data iov_data;
4131 /*-------- DEBUG LOG --------*/
4132 if (log_level_operate == LOG_LV_DEBUG) {
4133 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,34,
4134 "in_function : static int operate_parameter(void) : ");
4136 /*------ DEBUG LOG END ------*/
4138 ret = create_socket();
4140 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,30,
4141 "Create socket error.");
4143 /*-------- DEBUG LOG --------*/
4144 if (log_level_operate == LOG_LV_DEBUG) {
4145 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,35,
4146 "out_function : static int operate_parameter"
4150 /*------ DEBUG LOG END ------*/
4155 memset(&req, 0, sizeof(struct l7vs_config_msg_parameter));
4156 memset(&rsp, 0, sizeof(struct l7vs_config_msg_parameter));
4157 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
4159 req.cmd = L7VS_CONFIG_PARAMETER;
4160 req.category = l7vsadm_option_data.reload_param;
4162 // Set data for request
4163 iov_data.req_iov[0].iov_base = &req;
4164 iov_data.req_iov[0].iov_len = sizeof(req);
4165 iov_data.req_cnt = 1;
4167 // Set data for response
4168 iov_data.rsp_iov[0].iov_base = &rsp;
4169 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
4170 iov_data.rsp_cnt = 1;
4172 ret = communicate_to_l7vsd(&iov_data);
4174 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,31,
4175 "Communicate to l7vsd error.");
4179 if (rsp.code != 0) {
4180 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,11,
4181 "%s.", config_strerror(rsp.code));
4182 fprintf(stderr, "CONFIG ERROR : "
4183 "%s.\n", config_strerror(rsp.code));
4192 /*-------- DEBUG LOG --------*/
4193 if (log_level_operate == LOG_LV_DEBUG) {
4194 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,36,
4195 "out_function : static int operate_parameter"
4200 /*------ DEBUG LOG END ------*/
4206 * Operate help command.
4207 * @return int result OK=0
4212 /*-------- DEBUG LOG --------*/
4213 if (log_level_operate == LOG_LV_DEBUG) {
4214 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,37,
4215 "in_function : static int operate_help(void) : ");
4217 /*------ DEBUG LOG END ------*/
4223 " --add-service -A add virtual service with options\n"
4224 " --edit-service -E edit virtual service with options\n"
4225 " --delete-service -D delete virtual service with options\n"
4226 " --flush -C flush virtual service\n"
4227 " --add-server -a add real server with options\n"
4228 " --edit-server -e edit real server with options\n"
4229 " --delete-server -d delete real server with options\n"
4230 " --replication -R control replication-function\n"
4231 " --log -L control logger-function\n"
4232 " --snmp -S control SNMP Agent-function\n"
4233 " --parameter -P control parameter-function\n"
4234 " --list -l list the table\n"
4235 " --verbose -V list the table in verbose format\n"
4236 " --key -K list the table in key setting format\n"
4237 " --help -h show usage\n"
4242 " --tcp-service -t service-address service-address is host:port\n"
4243 " --proto-module -m proto-module protocol module name and module argment\n"
4245 " --scheduler -s scheduler one of rr,lc,wrr\n"
4246 " --upper -u connection-count maximum number of connections\n"
4247 " --bypass -b sorry-server sorry server address is host:port\n"
4248 " --flag -f sorry-flag sorry status set to virtual service\n"
4249 " --qos-up -Q QoSval-up QoS Threshold(bps) set to real server direction\n"
4250 " --qos-down -q QoSval-down QoS Threshold(bps) set to client direction\n"
4251 " --real-server -r server-address server-address is host:port\n"
4252 " --weight -w weight scheduling weight set to real server\n"
4253 " --switch -s replication-switch start or stop replication\n"
4254 " --force -f force replication start\n"
4255 " --dump -d dump replication memory\n"
4256 " --category -c log-category set log category for l7vsd or SNMP Agent\n"
4257 " --level -l log-level set log level for l7vsd or SNMP Agent\n"
4258 " --reload -r reload-parameter reload specified config parameter\n"
4259 " --numeric -n list the table in numeric\n"
4262 /*-------- DEBUG LOG --------*/
4263 if (log_level_operate == LOG_LV_DEBUG) {
4264 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,38,
4265 "out_function : static int operate_help"
4269 /*------ DEBUG LOG END ------*/
4275 * List Replication information.
4276 * @return int list result OK=0, NG=-1
4279 list_replication_info(void)
4281 struct l7vs_config_msg_replication req;
4282 struct l7vs_config_msg_replication rsp;
4283 struct l7vsadm_iov_data iov_data;
4287 /*-------- DEBUG LOG --------*/
4288 if (log_level_operate == LOG_LV_DEBUG) {
4289 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,39,
4290 "in_function : static int list_replication_info(void) : ");
4292 /*------ DEBUG LOG END ------*/
4294 memset(&req, 0, sizeof(struct l7vs_config_msg_replication));
4295 memset(&rsp, 0, sizeof(struct l7vs_config_msg_replication));
4296 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
4298 req.cmd = L7VS_CONFIG_GET_REPLICATION_INFO;
4300 // Set data for request
4301 iov_data.req_iov[0].iov_base = &req;
4302 iov_data.req_iov[0].iov_len = sizeof(req);
4303 iov_data.req_cnt = 1;
4305 // Set data for response
4306 iov_data.rsp_iov[0].iov_base = &rsp;
4307 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
4308 iov_data.rsp_cnt = 1;
4310 ret = communicate_to_l7vsd(&iov_data);
4312 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,32,
4313 "Communicate to l7vsd error.");
4317 if (rsp.code != 0) {
4318 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,12,
4319 "%s.", config_strerror(rsp.code));
4320 fprintf(stderr, "CONFIG ERROR : "
4321 "%s.\n", config_strerror(rsp.code));
4326 // Convert Replication mode to string.
4327 switch (rsp.replication_mode) {
4328 case REPLICATION_OUT:
4331 case REPLICATION_SINGLE:
4334 case REPLICATION_MASTER:
4337 case REPLICATION_SLAVE:
4340 case REPLICATION_MASTER_STOP:
4341 mode = "MASTER_STOP";
4343 case REPLICATION_SLAVE_STOP:
4344 mode = "SLAVE_STOP";
4350 // Print Replication info.
4351 printf("Replication Mode:\n");
4353 printf("%s\n", mode);
4356 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_OPERATE,2,
4357 "Invalid Replication Mode.");
4364 /*-------- DEBUG LOG --------*/
4365 if (log_level_operate == LOG_LV_DEBUG) {
4366 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,40,
4367 "out_function : static int list_replication_info"
4372 /*------ DEBUG LOG END ------*/
4378 * List Logger information.
4379 * @return int list result OK=0, NG=-1
4384 struct l7vs_config_msg_log req;
4385 struct l7vs_config_msg_log rsp;
4386 struct l7vsadm_iov_data iov_data;
4388 struct l7vsadm_category_name_list *cat_list;
4389 struct l7vsadm_level_name_list *lv_list;
4391 /*-------- DEBUG LOG --------*/
4392 if (log_level_operate == LOG_LV_DEBUG) {
4393 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,41,
4394 "in_function : static int list_log_info(void) : ");
4396 /*------ DEBUG LOG END ------*/
4398 // Print Logger info header.
4399 printf("L7vsd Log Level:\n");
4400 printf("Category Level\n");
4402 // Get and List all category log level.
4403 for (cat_list = l7vsd_category_name_table;
4404 cat_list->category_name != NULL;
4406 memset(&req, 0, sizeof(struct l7vs_config_msg_log));
4407 memset(&rsp, 0, sizeof(struct l7vs_config_msg_log));
4408 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
4410 req.cmd = L7VS_CONFIG_GET_LOG_INFO;
4411 req.kind = cat_list->category_code;
4413 // Set data for request
4414 iov_data.req_iov[0].iov_base = &req;
4415 iov_data.req_iov[0].iov_len = sizeof(req);
4416 iov_data.req_cnt = 1;
4418 // Set data for response
4419 iov_data.rsp_iov[0].iov_base = &rsp;
4420 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
4421 iov_data.rsp_cnt = 1;
4423 ret = communicate_to_l7vsd(&iov_data);
4425 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,33,
4426 "Communicate to l7vsd error.");
4430 if (rsp.code != 0) {
4431 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,13,
4432 "%s.", config_strerror(rsp.code));
4433 fprintf(stderr, "CONFIG ERROR : "
4434 "%s.\n", config_strerror(rsp.code));
4439 // Convert log level to string.
4440 for (lv_list = level_name_table;
4441 lv_list->level_name != NULL;
4443 if (rsp.vsd_log_level == lv_list->level_code) {
4444 printf("%-30s %s\n",
4445 cat_list->category_name,
4446 lv_list->level_name);
4456 /*-------- DEBUG LOG --------*/
4457 if (log_level_operate == LOG_LV_DEBUG) {
4458 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,42,
4459 "out_function : static int list_log_info"
4464 /*------ DEBUG LOG END ------*/
4470 * List SNMPAgent information.
4471 * @return int list result OK=0, NG=-1
4474 list_snmp_info(void)
4476 struct l7vs_config_msg_snmp req;
4477 struct l7vs_config_msg_snmp rsp;
4478 struct l7vsadm_iov_data iov_data;
4480 struct l7vsadm_category_name_list *cat_list;
4481 struct l7vsadm_level_name_list *lv_list;
4483 /*-------- DEBUG LOG --------*/
4484 if (log_level_operate == LOG_LV_DEBUG) {
4485 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,43,
4486 "in_function : static int list_snmp_info(void) : ");
4488 /*------ DEBUG LOG END ------*/
4490 memset(&req, 0, sizeof(struct l7vs_config_msg_snmp));
4491 memset(&rsp, 0, sizeof(struct l7vs_config_msg_snmp));
4492 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
4494 req.cmd = L7VS_CONFIG_GET_SNMP_CONNECT_STATUS;
4496 // Set data for request
4497 iov_data.req_iov[0].iov_base = &req;
4498 iov_data.req_iov[0].iov_len = sizeof(req);
4499 iov_data.req_cnt = 1;
4501 // Set data for response
4502 iov_data.rsp_iov[0].iov_base = &rsp;
4503 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
4504 iov_data.rsp_cnt = 1;
4506 ret = communicate_to_l7vsd(&iov_data);
4508 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,34,
4509 "Communicate to l7vsd error.");
4513 if (rsp.code != 0) {
4514 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,14,
4515 "%s.", config_strerror(rsp.code));
4516 fprintf(stderr, "CONFIG ERROR : "
4517 "%s.\n", config_strerror(rsp.code));
4522 // Print SNMP connection status header.
4523 printf("SNMPAgent Connection Status:\n");
4524 // Print SNMP connection status.
4525 if (rsp.connection_status == 1) {
4526 printf("connecting\n");
4528 printf("non-connecting\n");
4532 // Print SNMPAgent Log header.
4533 printf("SNMPAgent Log Level:\n");
4534 printf("Category Level\n");
4536 // Get and List all category SNMPAgent log level.
4537 for (cat_list = snmp_category_name_table;
4538 cat_list->category_name != NULL;
4540 memset(&req, 0, sizeof(struct l7vs_config_msg_snmp));
4541 memset(&rsp, 0, sizeof(struct l7vs_config_msg_snmp));
4542 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
4544 req.cmd = L7VS_CONFIG_GET_SNMP_LOG_INFO;
4545 req.kind = cat_list->category_code;
4547 // Set data for request
4548 iov_data.req_iov[0].iov_base = &req;
4549 iov_data.req_iov[0].iov_len = sizeof(req);
4550 iov_data.req_cnt = 1;
4552 // Set data for response
4553 iov_data.rsp_iov[0].iov_base = &rsp;
4554 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
4555 iov_data.rsp_cnt = 1;
4557 ret = communicate_to_l7vsd(&iov_data);
4559 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,35,
4560 "Communicate to l7vsd error.");
4564 if (rsp.code != 0) {
4565 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,15,
4566 "%s.", config_strerror(rsp.code));
4567 fprintf(stderr, "CONFIG ERROR : "
4568 "%s.\n", config_strerror(rsp.code));
4573 // Convert log level to string.
4574 for (lv_list = level_name_table;
4575 lv_list->level_name != NULL;
4577 if (rsp.snmp_log_level == lv_list->level_code) {
4578 printf("%-30s %s\n",
4579 cat_list->category_name,
4580 lv_list->level_name);
4590 /*-------- DEBUG LOG --------*/
4591 if (log_level_operate == LOG_LV_DEBUG) {
4592 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,44,
4593 "out_function : static int list_snmp_info"
4598 /*------ DEBUG LOG END ------*/
4604 * Get list of VirtualService information.
4605 * @param[in,out] *vs_buffer VirtualService list buffer pointer
4606 * @param[in] vs_bufsize size of vs_buffer
4607 * @return int number of VirtualService, NG<0
4610 get_vs(void *vs_buffer, int vs_bufsize)
4612 struct l7vs_config_req_list_vs req;
4613 struct l7vs_config_rsp_list_vs rsp;
4614 struct l7vsadm_iov_data iov_data;
4618 if (vs_buffer == NULL) {
4619 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,36,
4620 "Argument vs_buffer is NULL.");
4621 fprintf(stderr, "OPERATE ERROR : "
4622 "Argument vs_buffer is NULL.\n");
4624 /*-------- DEBUG LOG --------*/
4625 if (log_level_operate == LOG_LV_DEBUG) {
4626 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,45,
4627 "out_function : static int get_vs"
4628 "(void *vs_buffer, int vs_bufsize) : "
4631 /*------ DEBUG LOG END ------*/
4636 /*-------- DEBUG LOG --------*/
4637 if (log_level_operate == LOG_LV_DEBUG) {
4638 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,46,
4639 "in_function : static int get_vs"
4640 "(void *vs_buffer, int vs_bufsize) : "
4641 "vs_buffer = %p, vs_bufsize = %d",
4645 /*------ DEBUG LOG END ------*/
4647 memset(&req, 0, sizeof(struct l7vs_config_req_list_vs));
4648 memset(&rsp, 0, sizeof(struct l7vs_config_rsp_list_vs));
4649 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
4651 req.cmd = L7VS_CONFIG_LIST_VS;
4653 // Set data for request
4654 iov_data.req_iov[0].iov_base = &req;
4655 iov_data.req_iov[0].iov_len = sizeof(req);
4656 iov_data.req_cnt = 1;
4658 // Set data for response
4659 iov_data.rsp_iov[0].iov_base = &rsp;
4660 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
4661 iov_data.rsp_iov[1].iov_base = vs_buffer;
4662 iov_data.rsp_iov[1].iov_len = vs_bufsize;
4663 iov_data.rsp_cnt = 2;
4665 ret = communicate_to_l7vsd(&iov_data);
4667 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,37,
4668 "Communicate to l7vsd error.");
4672 if (rsp.code != 0) {
4673 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,16,
4674 "%s.", config_strerror(rsp.code));
4675 fprintf(stderr, "CONFIG ERROR : "
4676 "%s.\n", config_strerror(rsp.code));
4683 /*-------- DEBUG LOG --------*/
4684 if (log_level_operate == LOG_LV_DEBUG) {
4685 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,47,
4686 "out_function : static int get_vs"
4687 "(void *vs_buffer, int vs_bufsize) : "
4691 /*------ DEBUG LOG END ------*/
4697 * Get list of RealServer information in the VirtualService.
4698 * @param[in,out] *darg_buffer l7vs_dest_arg list pointer
4699 * @param[in] rs_num number of l7vs_dest_arg
4700 * @param[in] *sarg l7vs_service_arg pointer
4701 * @return int number of RealServer, NG<0
4704 get_rs(struct l7vs_dest_arg *darg_buffer, int rs_num, struct l7vs_service_arg *sarg)
4706 struct l7vs_config_req_list_rs req;
4707 struct l7vs_config_rsp_list_rs rsp;
4708 struct l7vsadm_iov_data iov_data;
4712 if (darg_buffer == NULL) {
4713 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,38,
4714 "Argument darg_buffer is NULL.");
4715 fprintf(stderr, "OPERATE ERROR : "
4716 "Argument darg_buffer is NULL.\n");
4718 /*-------- DEBUG LOG --------*/
4719 if (log_level_operate == LOG_LV_DEBUG) {
4720 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,48,
4721 "out_function : static int get_rs"
4722 "(struct l7vs_dest_arg *darg_buffer, "
4723 "int rs_num, struct l7vs_service_arg *sarg) : "
4726 /*------ DEBUG LOG END ------*/
4731 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,39,
4732 "Argument sarg is NULL.");
4733 fprintf(stderr, "OPERATE ERROR : "
4734 "Argument sarg is NULL.\n");
4736 /*-------- DEBUG LOG --------*/
4737 if (log_level_operate == LOG_LV_DEBUG) {
4738 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,49,
4739 "out_function : static int get_rs"
4740 "(struct l7vs_dest_arg *darg_buffer, "
4741 "int rs_num, struct l7vs_service_arg *sarg) : "
4744 /*------ DEBUG LOG END ------*/
4749 /*-------- DEBUG LOG --------*/
4750 if (log_level_operate == LOG_LV_DEBUG) {
4751 char sarg_str[DEBUG_STR_LEN] = {0};
4752 l7vs_service_arg_c_str(sarg_str, sarg);
4753 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,50,
4754 "in_function : static int get_rs"
4755 "(struct l7vs_dest_arg *darg_buffer, "
4757 "struct l7vs_service_arg *sarg) : "
4758 "darg_buffer = %p, "
4765 /*------ DEBUG LOG END ------*/
4767 memset(&req, 0, sizeof(struct l7vs_config_req_list_rs));
4768 memset(&rsp, 0, sizeof(struct l7vs_config_rsp_list_rs));
4769 memset(&iov_data, 0, sizeof(struct l7vsadm_iov_data));
4771 req.cmd = L7VS_CONFIG_LIST_RS;
4773 // Set data for request
4774 iov_data.req_iov[0].iov_base = &req;
4775 iov_data.req_iov[0].iov_len = sizeof(req);
4776 iov_data.req_iov[1].iov_base = sarg;
4777 iov_data.req_iov[1].iov_len = sizeof(struct l7vs_service_arg_multi);
4778 iov_data.req_cnt = 2;
4780 // Set data for response
4781 iov_data.rsp_iov[0].iov_base = &rsp;
4782 iov_data.rsp_iov[0].iov_len = sizeof(rsp);
4783 iov_data.rsp_iov[1].iov_base = darg_buffer;
4784 iov_data.rsp_iov[1].iov_len = rs_num * sizeof(struct l7vs_dest_arg);
4785 iov_data.rsp_cnt = 2;
4787 ret = communicate_to_l7vsd(&iov_data);
4789 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,40,
4790 "Communicate to l7vsd error.");
4794 if (rsp.code != 0) {
4795 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_CONFIG_RESULT,17,
4796 "%s.", config_strerror(rsp.code));
4797 fprintf(stderr, "CONFIG ERROR : "
4798 "%s.\n", config_strerror(rsp.code));
4805 /*-------- DEBUG LOG --------*/
4806 if (log_level_operate == LOG_LV_DEBUG) {
4807 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,51,
4808 "out_function : static int get_rs"
4809 "(struct l7vs_dest_arg *darg_buffer, "
4810 "int rs_num, struct l7vs_service_arg *sarg) : "
4814 /*------ DEBUG LOG END ------*/
4820 * List one of VirtualService information.
4821 * @param[in] *sarg l7vs_service_arg pointer
4822 * @return int list result OK=0, NG=-1
4825 list_vs(struct l7vs_service_arg *sarg)
4827 struct sockaddr_in vs_addr_0;
4828 struct sockaddr_in sorry_addr_in_0;
4829 struct l7vs_dest_arg *darg_buffer;
4830 char *endpoint_name;
4831 int rs_num = L7VSADM_DEFAULT_LIST_RS_RSNUM;
4838 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,41,
4839 "Argument sarg is NULL.");
4840 fprintf(stderr, "OPERATE ERROR : "
4841 "Argument sarg is NULL.\n");
4843 /*-------- DEBUG LOG --------*/
4844 if (log_level_operate == LOG_LV_DEBUG) {
4845 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,52,
4846 "out_function : static int list_vs"
4847 "(struct l7vs_service_arg *sarg) : "
4850 /*------ DEBUG LOG END ------*/
4855 /*-------- DEBUG LOG --------*/
4856 if (log_level_operate == LOG_LV_DEBUG) {
4857 char sarg_str[DEBUG_STR_LEN] = {0};
4858 l7vs_service_arg_c_str(sarg_str, sarg);
4859 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,53,
4860 "in_function : static int list_vs"
4861 "(struct l7vs_service_arg *sarg) : "
4865 /*------ DEBUG LOG END ------*/
4867 // Check VirtualService address.(Compare vs_addr_0)
4868 memset(&vs_addr_0, 0, sizeof(struct sockaddr_in));
4869 if (memcmp(&sarg->addr, &vs_addr_0, sizeof(struct sockaddr_in)) == 0) {
4870 // sarg->addr not set.
4871 endpoint_name = NULL;
4874 get_endpoint_name((struct sockaddr_storage *)(&sarg->addr));
4876 if (endpoint_name == NULL) {
4877 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_OPERATE,3,
4878 "Invalid VirtualService address for list_vs.");
4880 /*-------- DEBUG LOG --------*/
4881 if (log_level_operate == LOG_LV_DEBUG) {
4882 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,54,
4883 "out_function : static int list_vs"
4884 "(struct l7vs_service_arg *sarg) : "
4887 /*------ DEBUG LOG END ------*/
4892 // If it ie verbose, display more details else simple details.
4893 if (l7vsadm_option_data.command_code == CMD_LIST_VERBOSE) {
4894 printf("TCP %s %s %s %d %s\n",
4899 sarg->protomod_opt_string);
4900 } else if (l7vsadm_option_data.command_code == CMD_LIST_KEY) {
4901 printf("TCP %s %s %s %d %s\n",
4906 sarg->protomod_key_string);
4908 printf("TCP %s %s %s\n",
4914 // Print sorry and QoS information when L7VSADM_OP_VERBOSE.
4915 if (l7vsadm_option_data.command_code == CMD_LIST_VERBOSE) {
4916 // Check sorry address.(Compare sorry_addr_0)
4917 memset(&sorry_addr_in_0, 0, sizeof(struct sockaddr_in));
4918 if (memcmp(&sarg->sorry_addr,
4920 sizeof(struct sockaddr_in)) == 0) {
4921 // sarg->sorry_addr not set.
4922 endpoint_name = NULL;
4925 get_endpoint_name((struct sockaddr_storage *)(&sarg->sorry_addr));
4927 // If endpoint_name is NULL then string is "none".
4928 if (endpoint_name == NULL) {
4929 endpoint_name = "none";
4931 printf(" %s %d %d\n",
4935 // QoS value and throughput convert from byte/s to bps.
4936 printf(" %lld %lld\n",
4937 sarg->qos_threshold_up * 8,
4938 sarg->throughput_to_server * 8);
4939 printf(" %lld %lld\n",
4940 sarg->qos_threshold_down * 8,
4941 sarg->throughput_to_client * 8);
4945 // Alloc RealServer list memory.
4946 darg_buffer = (struct l7vs_dest_arg *)malloc(rs_num * sizeof(struct l7vs_dest_arg));
4948 /*-------- DEBUG LOG --------*/
4949 if (log_level_common == LOG_LV_DEBUG) {
4950 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,4,
4951 "malloc darg_buffer : "
4952 "allocate address = %p "
4953 "allocate size = %d",
4955 int(rs_num * sizeof(struct l7vs_dest_arg)));
4957 /*------ DEBUG LOG END ------*/
4959 if (darg_buffer == NULL) {
4960 LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSADM_COMMON,5,
4961 "Could not allocate darg_buffer memory.");
4962 fprintf(stderr, "COMMON ERROR : "
4963 "Could not allocate darg_buffer memory.\n");
4965 /*-------- DEBUG LOG --------*/
4966 if (log_level_operate == LOG_LV_DEBUG) {
4967 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,55,
4968 "out_function : static int list_vs"
4969 "(struct l7vs_service_arg *sarg) : "
4972 /*------ DEBUG LOG END ------*/
4976 // Get all RealServer list on VirtualService.
4977 ret_num = get_rs(darg_buffer, rs_num, sarg);
4978 // If return L7VSADM_RECV_TOO_LARGE (-2) when extend darg_buffer size and retry.
4982 /*-------- DEBUG LOG --------*/
4983 if (log_level_common == LOG_LV_DEBUG) {
4984 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,5,
4985 "free darg_buffer : "
4986 "free address = %p",
4989 /*------ DEBUG LOG END ------*/
4991 if (ret_num == L7VSADM_RECV_TOO_LARGE) {
4992 rs_num += L7VSADM_DEFAULT_LIST_RS_RSNUM;
4993 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_OPERATE,4,
4994 "Receive RealServer data too large. retrying.");
4997 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,42,
4998 "Get RealServer data error.");
4999 fprintf(stderr, "OPERATE ERROR : "
5000 "Get RealServer data error.\n");
5002 /*-------- DEBUG LOG --------*/
5003 if (log_level_operate == LOG_LV_DEBUG) {
5004 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,56,
5005 "out_function : static int list_vs"
5006 "(struct l7vs_service_arg *sarg) : "
5009 /*------ DEBUG LOG END ------*/
5013 // List all RealServer.
5014 for (i = 0; i < ret_num; i++) {
5015 ret = list_rs(&darg_buffer[i]);
5017 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,43,
5018 "List RealServer data error.");
5019 fprintf(stderr, "OPERATE ERROR : "
5020 "List RealServer data error.\n");
5023 /*-------- DEBUG LOG --------*/
5024 if (log_level_common == LOG_LV_DEBUG) {
5025 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,6,
5026 "free darg_buffer : "
5027 "free address = %p",
5030 /*------ DEBUG LOG END ------*/
5032 /*-------- DEBUG LOG --------*/
5033 if (log_level_operate == LOG_LV_DEBUG) {
5034 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,57,
5035 "out_function : static int list_vs"
5036 "(struct l7vs_service_arg *sarg) : "
5039 /*------ DEBUG LOG END ------*/
5047 /*-------- DEBUG LOG --------*/
5048 if (log_level_common == LOG_LV_DEBUG) {
5049 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,7,
5050 "free darg_buffer : "
5051 "free address = %p",
5054 /*------ DEBUG LOG END ------*/
5056 /*-------- DEBUG LOG --------*/
5057 if (log_level_operate == LOG_LV_DEBUG) {
5058 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,58,
5059 "out_function : static int list_vs"
5060 "(struct l7vs_service_arg *sarg) : "
5063 /*------ DEBUG LOG END ------*/
5069 * List one of RealServer information.
5070 * @param[in] *darg l7vs_dest_arg pointer
5071 * @return int list result OK=0, NG=-1
5074 list_rs(struct l7vs_dest_arg *darg)
5076 struct sockaddr_in rs_addr_0;
5077 char *endpoint_name;
5081 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,44,
5082 "Argument darg is NULL.");
5083 fprintf(stderr, "OPERATE ERROR : "
5084 "Argument darg is NULL.\n");
5086 /*-------- DEBUG LOG --------*/
5087 if (log_level_operate == LOG_LV_DEBUG) {
5088 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,59,
5089 "out_function : static int list_rs"
5090 "(struct l7vs_dest_arg *darg) : "
5093 /*------ DEBUG LOG END ------*/
5098 /*-------- DEBUG LOG --------*/
5099 if (log_level_operate == LOG_LV_DEBUG) {
5100 char darg_str[DEBUG_STR_LEN] = {0};
5101 l7vs_darg_c_str(darg_str, darg);
5102 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,60,
5103 "in_function : static int list_rs"
5104 "(struct l7vs_dest_arg *darg) : "
5108 /*------ DEBUG LOG END ------*/
5110 // Check RealServer address.(Compare rs_addr_0)
5111 memset(&rs_addr_0, 0, sizeof(struct sockaddr_in));
5112 if (memcmp(&darg->addr, &rs_addr_0, sizeof(struct sockaddr_in)) == 0) {
5113 // darg.addr not set.
5114 endpoint_name = NULL;
5117 get_endpoint_name((struct sockaddr_storage *)(&darg->addr));
5119 if (endpoint_name == NULL) {
5120 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_OPERATE,5,
5121 "Invalid RealServer address for list_rs.");
5123 /*-------- DEBUG LOG --------*/
5124 if (log_level_operate == LOG_LV_DEBUG) {
5125 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,61,
5126 "out_function : static int list_rs"
5127 "(struct l7vs_dest_arg *darg) : "
5130 /*------ DEBUG LOG END ------*/
5135 // Display RealServer.
5136 printf(" -> %-28s %-7s %-6d %-10d %-10d\n",
5137 endpoint_name, "Masq", darg->weight, darg->nactive, darg->ninact);
5139 /*-------- DEBUG LOG --------*/
5140 if (log_level_operate == LOG_LV_DEBUG) {
5141 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,62,
5142 "out_function : static int list_rs"
5143 "(struct l7vs_dest_arg *darg) : "
5146 /*------ DEBUG LOG END ------*/
5152 * Get endpoint name string.
5153 * Translate form address to endpoint string(hostname:portname)
5154 * @param[in] *addr endpoint data
5155 * @return char * endpoint string, NG=NULL
5158 get_endpoint_name(struct sockaddr_storage *addr)
5160 char hostname[NI_MAXHOST], portname[NI_MAXSERV];
5166 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,45,
5167 "Argument addr is NULL.");
5168 fprintf(stderr, "OPERATE ERROR : "
5169 "Argument addr is NULL.\n");
5171 /*-------- DEBUG LOG --------*/
5172 if (log_level_operate == LOG_LV_DEBUG) {
5173 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,63,
5174 "out_function : static char *get_endpoint_name"
5175 "(struct sockaddr_storage *addr) : "
5178 /*------ DEBUG LOG END ------*/
5183 /*-------- DEBUG LOG --------*/
5184 if (log_level_operate == LOG_LV_DEBUG) {
5185 char ep_str[DEBUG_STR_LEN] = {0};
5186 endpoint_c_str(ep_str, (void *)addr);
5187 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,64,
5188 "in_function : static char *get_endpoint_name"
5189 "(struct sockaddr_storage *addr) : "
5193 /*------ DEBUG LOG END ------*/
5196 if (l7vsadm_option_data.isnumeric != 0 &&
5197 l7vsadm_option_data.isnumeric != 1) {
5198 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,46,
5199 "Invalid isnumeric value.");
5200 fprintf(stderr, "OPERATE ERROR : "
5201 "Invalid isnumeric value.\n");
5203 /*-------- DEBUG LOG --------*/
5204 if (log_level_operate == LOG_LV_DEBUG) {
5205 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,65,
5206 "out_function : static char *get_endpoint_name"
5207 "(struct sockaddr_storage *addr) : "
5210 /*------ DEBUG LOG END ------*/
5216 if (l7vsadm_option_data.isnumeric) {
5217 flags = NI_NUMERICHOST | NI_NUMERICSERV;
5220 ret = getnameinfo((struct sockaddr *)addr, sizeof(*addr),
5221 hostname, sizeof(hostname),
5222 portname, sizeof(portname), flags);
5223 if (ret == EAI_AGAIN) {
5224 flags = flags | NI_NUMERICHOST;
5225 ret = getnameinfo((struct sockaddr *)addr, sizeof(*addr),
5226 hostname, sizeof(hostname),
5227 portname, sizeof(portname), flags);
5229 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,2,
5230 "getnameinfo() error: %s.", gai_strerror(ret));
5231 fprintf(stderr, "COMMON ERROR : "
5232 "getnameinfo() error: %s.\n", gai_strerror(ret));
5234 /*-------- DEBUG LOG --------*/
5235 if (log_level_operate == LOG_LV_DEBUG) {
5236 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,66,
5237 "out_function : static char *get_endpoint_name"
5238 "(struct sockaddr_storage *addr) : "
5241 /*------ DEBUG LOG END ------*/
5245 } else if (ret != 0) {
5246 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,3,
5247 "getnameinfo() error: %s.", gai_strerror(ret));
5248 fprintf(stderr, "COMMON ERROR : "
5249 "getnameinfo() error: %s.\n", gai_strerror(ret));
5251 /*-------- DEBUG LOG --------*/
5252 if (log_level_operate == LOG_LV_DEBUG) {
5253 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,67,
5254 "out_function : static char *get_endpoint_name"
5255 "(struct sockaddr_storage *addr) : "
5258 /*------ DEBUG LOG END ------*/
5262 memset(tmp_endpoint_name,0x00,sizeof(tmp_endpoint_name));
5263 sprintf(tmp_endpoint_name, "%s:%s", hostname, portname);
5265 /*-------- DEBUG LOG --------*/
5266 if (log_level_operate == LOG_LV_DEBUG) {
5267 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,68,
5268 "out_function : static char *get_endpoint_name"
5269 "(struct sockaddr_storage *addr) : "
5273 /*------ DEBUG LOG END ------*/
5275 return tmp_endpoint_name;
5279 * Create socket file for communicate.
5280 * @return int create result OK=0, NG=-1
5285 struct sockaddr_un addr;
5286 char sockname[sizeof(L7VS_CONFIG_SOCK_PATH) + sizeof(L7VSADM_NAME) + 10];
5290 int retry_count = 0;
5292 /*-------- DEBUG LOG --------*/
5293 if (log_level_operate == LOG_LV_DEBUG) {
5294 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,69,
5295 "in_function : static int create_socket(void) : ");
5297 /*------ DEBUG LOG END ------*/
5299 sprintf(sockname, "%s/%s-%d", L7VS_CONFIG_SOCK_PATH, L7VSADM_NAME, getpid());
5302 if (sizeof(sockname) > sizeof(addr.sun_path)) {
5303 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,47,
5304 "Internal error. socket name too long.");
5305 fprintf(stderr, "OPERATE ERROR : "
5306 "Internal error. socket name too long.\n");
5311 memset(&addr, 0, sizeof(addr));
5312 memcpy(addr.sun_path, sockname, sizeof(sockname));
5313 addr.sun_family = AF_LOCAL;
5315 sock_fd = socket(PF_LOCAL, SOCK_DGRAM, 0);
5317 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,4,
5318 "socket() error: %s.", strerror(errno));
5319 fprintf(stderr, "COMMON ERROR : "
5320 "socket() error: %s.\n", strerror(errno));
5326 ret = setsockopt(sock_fd, SOL_SOCKET, SO_PASSCRED, &opt, sizeof(opt));
5328 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,5,
5329 "setsockopt() SO_PASSCRED error: %s.", strerror(errno));
5330 fprintf(stderr, "COMMON ERROR : "
5331 "setsockopt() SO_PASSCRED error: %s.\n", strerror(errno));
5335 ret = bind(sock_fd, (struct sockaddr *)&addr, SUN_LEN(&addr));
5337 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,6,
5338 "bind() on %s error: %s.", sockname, strerror(errno));
5339 fprintf(stderr, "COMMON ERROR : "
5340 "bind() on %s error: %s.\n", sockname, strerror(errno));
5344 strcpy(local_sockname, sockname);
5346 memset(&addr, 0, sizeof(addr));
5347 addr.sun_family = AF_LOCAL;
5348 strcpy(addr.sun_path, L7VS_CONFIG_SOCKNAME);
5352 if (signal_flg > 0) {
5353 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,7,
5354 "Signal (%d) Received.", received_sig);
5355 fprintf(stderr, "COMMON ERROR : "
5356 "Signal (%d) Received.\n", received_sig);
5361 // Try connect to config socket.
5362 ret = connect(sock_fd, (struct sockaddr *)&addr, SUN_LEN(&addr));
5368 if (retry_count > connect_wait_count) {
5369 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,8,
5370 "connect() to daemon timeout: %s.", strerror(errno));
5371 fprintf(stderr, "COMMON ERROR : "
5372 "connect() to daemon timeout: %s.\n", strerror(errno));
5375 // Connect retrying.
5376 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_COMMON,1,
5377 "connect() to daemon error (retry %d): %s.",
5378 retry_count, strerror(errno));
5379 sleep(connect_wait_interval);
5382 // Save socket file discripter.
5383 local_sock_fd = sock_fd;
5388 if (sock_fd != -1) {
5393 /*-------- DEBUG LOG --------*/
5394 if (log_level_operate == LOG_LV_DEBUG) {
5395 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,70,
5396 "out_function : static int create_socket"
5401 /*------ DEBUG LOG END ------*/
5407 * Destroy socket file for communicate.
5410 destroy_socket(void)
5412 /*-------- DEBUG LOG --------*/
5413 if (log_level_operate == LOG_LV_DEBUG) {
5414 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,71,
5415 "in_function : static void destroy_socket(void) : ");
5417 /*------ DEBUG LOG END ------*/
5419 unlink(local_sockname);
5421 /*-------- DEBUG LOG --------*/
5422 if (log_level_operate == LOG_LV_DEBUG) {
5423 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,72,
5424 "out_function : static void destroy_socket(void) : ");
5426 /*------ DEBUG LOG END ------*/
5430 * Communicate to l7vsd daemon.
5431 * Send request and receive response between l7vsd daemon
5432 * @param[in,out] *iov_data io-vector data pointer
5433 * @return int communicate result OK=byte, NG=-1
5436 communicate_to_l7vsd(struct l7vsadm_iov_data *iov_data)
5441 if (iov_data == NULL) {
5442 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,1,
5443 "Argument iov_data is NULL.");
5444 fprintf(stderr, "COMMUNICATE ERROR : "
5445 "Argument iov_data is NULL.\n");
5447 /*-------- DEBUG LOG --------*/
5448 if (log_level_communicate == LOG_LV_DEBUG) {
5449 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,1,
5450 "out_function : static int communicate_to_l7vsd"
5451 "(struct l7vsadm_iov_data *iov_data) : "
5454 /*------ DEBUG LOG END ------*/
5459 /*-------- DEBUG LOG --------*/
5460 if (log_level_communicate == LOG_LV_DEBUG) {
5461 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,2,
5462 "in_function : static int communicate_to_l7vsd"
5463 "(struct l7vsadm_iov_data *iov_data) : "
5467 /*------ DEBUG LOG END ------*/
5470 if (signal_flg > 0) {
5471 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,9,
5472 "Signal (%d) Received.", received_sig);
5473 fprintf(stderr, "COMMON ERROR : "
5474 "Signal (%d) Received.\n", received_sig);
5476 /*-------- DEBUG LOG --------*/
5477 if (log_level_communicate == LOG_LV_DEBUG) {
5478 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,3,
5479 "out_function : static int communicate_to_l7vsd"
5480 "(struct l7vsadm_iov_data *iov_data) : "
5483 /*------ DEBUG LOG END ------*/
5488 ret = send_request(iov_data->req_iov, iov_data->req_cnt);
5490 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,2,
5491 "Send Request error.");
5493 /*-------- DEBUG LOG --------*/
5494 if (log_level_communicate == LOG_LV_DEBUG) {
5495 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,4,
5496 "out_function : static int communicate_to_l7vsd"
5497 "(struct l7vsadm_iov_data *iov_data) : "
5501 /*------ DEBUG LOG END ------*/
5506 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSADM_COMMUNICATE,1,
5507 "Send Request success.");
5510 if (signal_flg > 0) {
5511 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,10,
5512 "Signal (%d) Received.", received_sig);
5513 fprintf(stderr, "COMMON ERROR : "
5514 "Signal (%d) Received.\n", received_sig);
5516 /*-------- DEBUG LOG --------*/
5517 if (log_level_communicate == LOG_LV_DEBUG) {
5518 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,5,
5519 "out_function : static int communicate_to_l7vsd"
5520 "(struct l7vsadm_iov_data *iov_data) : "
5523 /*------ DEBUG LOG END ------*/
5528 ret = recv_response(iov_data->rsp_iov, iov_data->rsp_cnt);
5530 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,3,
5531 "Receive Response error.");
5533 /*-------- DEBUG LOG --------*/
5534 if (log_level_communicate == LOG_LV_DEBUG) {
5535 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,6,
5536 "out_function : static int communicate_to_l7vsd"
5537 "(struct l7vsadm_iov_data *iov_data) : "
5541 /*------ DEBUG LOG END ------*/
5546 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSADM_COMMUNICATE,2,
5547 "Receive Response success.");
5549 /*-------- DEBUG LOG --------*/
5550 if (log_level_communicate == LOG_LV_DEBUG) {
5551 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,7,
5552 "out_function : static int communicate_to_l7vsd"
5553 "(struct l7vsadm_iov_data *iov_data) : "
5557 /*------ DEBUG LOG END ------*/
5563 * Send config request message.
5564 * @param[in] *req_iov request io-vector pointer
5565 * @param[in] req_cnt request io-vector count
5566 * @return int send result OK=byte, NG<0
5569 send_request(struct iovec *req_iov, int req_cnt)
5574 if (req_iov == NULL) {
5575 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,4,
5576 "Argument req_iov is NULL.");
5577 fprintf(stderr, "COMMUNICATE ERROR : "
5578 "Argument req_iov is NULL.\n");
5580 /*-------- DEBUG LOG --------*/
5581 if (log_level_communicate == LOG_LV_DEBUG) {
5582 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,8,
5583 "out_function : static int send_request"
5584 "(struct iovec *req_iov, int req_cnt) : "
5587 /*------ DEBUG LOG END ------*/
5592 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,5,
5593 "Invalid req_cnt argument.");
5594 fprintf(stderr, "COMMUNICATE ERROR : "
5595 "Invalid req_cnt argument.\n");
5597 /*-------- DEBUG LOG --------*/
5598 if (log_level_communicate == LOG_LV_DEBUG) {
5599 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,9,
5600 "out_function : static int send_request"
5601 "(struct iovec *req_iov, int req_cnt) : "
5604 /*------ DEBUG LOG END ------*/
5609 /*-------- DEBUG LOG --------*/
5610 if (log_level_communicate == LOG_LV_DEBUG) {
5611 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,10,
5612 "in_function : static int send_request"
5613 "(struct iovec *req_iov, int req_cnt) : "
5619 /*------ DEBUG LOG END ------*/
5622 if (req_iov->iov_base == NULL) {
5623 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,6,
5624 "iov_base is NULL.");
5626 /*-------- DEBUG LOG --------*/
5627 if (log_level_communicate == LOG_LV_DEBUG) {
5628 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,11,
5629 "out_function : static int send_request"
5630 "(struct iovec *req_iov, int req_cnt) : "
5633 /*------ DEBUG LOG END ------*/
5637 ret = send(local_sock_fd,
5642 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,7,
5643 "send() to daemon error: %s.", strerror(errno));
5644 fprintf(stderr, "COMMUNICATE ERROR : "
5645 "send() to daemon error: %s.\n", strerror(errno));
5648 ret = writev(local_sock_fd, req_iov, req_cnt);
5650 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,8,
5651 "writev() to daemon error: %s.", strerror(errno));
5652 fprintf(stderr, "COMMUNICATE ERROR : "
5653 "writev() to daemon error: %s.\n", strerror(errno));
5657 /*-------- DEBUG LOG --------*/
5658 if (log_level_communicate == LOG_LV_DEBUG) {
5659 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,12,
5660 "out_function : static int send_request"
5661 "(struct iovec *req_iov, int req_cnt) : "
5665 /*------ DEBUG LOG END ------*/
5671 * Receive config response message.
5672 * @param[in,out] *rsp_iov response io-vector pointer
5673 * @param[in] rsp_cnt response io-vector count
5674 * @return int receive result OK=byte, NG<0
5677 recv_response(struct iovec *rsp_iov, int rsp_cnt)
5681 struct cmsghdr *cmsg;
5682 unsigned char cbuf[CMSG_LEN(sizeof(struct ucred))];
5686 if (rsp_iov == NULL) {
5687 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,9,
5688 "Argument rsp_iov is NULL.");
5689 fprintf(stderr, "COMMUNICATE ERROR : "
5690 "Argument rsp_iov is NULL.\n");
5692 /*-------- DEBUG LOG --------*/
5693 if (log_level_communicate == LOG_LV_DEBUG) {
5694 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,13,
5695 "out_function : static int recv_response"
5696 "(struct iovec *rsp_iov, int rsp_cnt) : "
5699 /*------ DEBUG LOG END ------*/
5704 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,10,
5705 "Invalid rsp_cnt argument.");
5706 fprintf(stderr, "COMMUNICATE ERROR : "
5707 "Invalid rsp_cnt argument.\n");
5709 /*-------- DEBUG LOG --------*/
5710 if (log_level_communicate == LOG_LV_DEBUG) {
5711 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,14,
5712 "out_function : static int recv_response"
5713 "(struct iovec *rsp_iov, int rsp_cnt) : "
5716 /*------ DEBUG LOG END ------*/
5721 /*-------- DEBUG LOG --------*/
5722 if (log_level_communicate == LOG_LV_DEBUG) {
5723 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,15,
5724 "in_function : static int recv_response"
5725 "(struct iovec *rsp_iov, int rsp_cnt) : "
5731 /*------ DEBUG LOG END ------*/
5733 memset(&msg, 0, sizeof(msg));
5734 msg.msg_control = cbuf;
5735 msg.msg_controllen = sizeof(cbuf);
5736 msg.msg_iov = rsp_iov;
5737 msg.msg_iovlen = (size_t)rsp_cnt;
5738 cmsg = (struct cmsghdr *)cbuf;
5740 ret = recvmsg(local_sock_fd, &msg, 0);
5742 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,11,
5743 "recvmsg() to daemon error: %s.", strerror(errno));
5744 fprintf(stderr, "COMMUNICATE ERROR : "
5745 "recvmsg() to daemon error: %s.\n", strerror(errno));
5747 /*-------- DEBUG LOG --------*/
5748 if (log_level_communicate == LOG_LV_DEBUG) {
5749 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,16,
5750 "out_function : static int recv_response"
5751 "(struct iovec *rsp_iov, int rsp_cnt) : "
5752 "return = L7VSADM_RECV_FAILED(-1)");
5754 /*------ DEBUG LOG END ------*/
5756 return L7VSADM_RECV_FAILED;
5759 if (msg.msg_flags & MSG_CTRUNC) {
5760 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,12,
5761 "Invalid response from l7vsd.");
5762 fprintf(stderr, "COMMUNICATE ERROR : "
5763 "Invalid response from l7vsd.\n");
5765 /*-------- DEBUG LOG --------*/
5766 if (log_level_communicate == LOG_LV_DEBUG) {
5767 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,17,
5768 "out_function : static int recv_response"
5769 "(struct iovec *rsp_iov, int rsp_cnt) : "
5770 "return = L7VSADM_RECV_FAILED(-1)");
5772 /*------ DEBUG LOG END ------*/
5774 return L7VSADM_RECV_FAILED;
5777 if (msg.msg_flags & MSG_TRUNC) {
5778 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_COMMUNICATE,1,
5779 "Too large response from l7vsd.");
5781 /*-------- DEBUG LOG --------*/
5782 if (log_level_communicate == LOG_LV_DEBUG) {
5783 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,18,
5784 "out_function : static int recv_response"
5785 "(struct iovec *rsp_iov, int rsp_cnt) : "
5786 "return = L7VSADM_RECV_TOO_LARGE(-2)");
5788 /*------ DEBUG LOG END ------*/
5790 return L7VSADM_RECV_TOO_LARGE;
5793 if (! (cmsg->cmsg_level == SOL_SOCKET &&
5794 cmsg->cmsg_type == SCM_CREDENTIALS)) {
5795 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,13,
5796 "Could not receive a remote credential.");
5797 fprintf(stderr, "COMMUNICATE ERROR : "
5798 "Could not receive a remote credential.\n");
5800 /*-------- DEBUG LOG --------*/
5801 if (log_level_communicate == LOG_LV_DEBUG) {
5802 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,19,
5803 "out_function : static int recv_response"
5804 "(struct iovec *rsp_iov, int rsp_cnt) : "
5805 "return = L7VSADM_RECV_FAILED(-1)");
5807 /*------ DEBUG LOG END ------*/
5809 return L7VSADM_RECV_FAILED;
5812 cred = (struct ucred *)CMSG_DATA(cmsg);
5813 if (cred->uid != 0) {
5814 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMUNICATE,14,
5815 "Response from unprivileged user.");
5816 fprintf(stderr, "COMMUNICATE ERROR : "
5817 "Response from unprivileged user.\n");
5818 return L7VSADM_RECV_FAILED;
5820 /*-------- DEBUG LOG --------*/
5821 if (log_level_communicate == LOG_LV_DEBUG) {
5822 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,20,
5823 "out_function : static int recv_response"
5824 "(struct iovec *rsp_iov, int rsp_cnt) : "
5825 "return = L7VSADM_RECV_FAILED(-1)");
5827 /*------ DEBUG LOG END ------*/
5831 /*-------- DEBUG LOG --------*/
5832 if (log_level_communicate == LOG_LV_DEBUG) {
5833 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMUNICATE,21,
5834 "out_function : static int recv_response"
5835 "(struct iovec *rsp_iov, int rsp_cnt) : "
5839 /*------ DEBUG LOG END ------*/
5845 * Print l7vsadm command usage.
5846 * @param[in] *fp outoput file pointer
5853 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,48,
5854 "Argument fp is NULL.");
5855 fprintf(stderr, "OPERATE ERROR : "
5856 "Argument fp is NULL.\n");
5858 /*-------- DEBUG LOG --------*/
5859 if (log_level_operate == LOG_LV_DEBUG) {
5860 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,73,
5861 "out_function : static void usage(FILE *fp) : ");
5863 /*------ DEBUG LOG END ------*/
5868 /*-------- DEBUG LOG --------*/
5869 if (log_level_operate == LOG_LV_DEBUG) {
5870 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,74,
5871 "in_function : static void usage(FILE *fp) : "
5875 /*------ DEBUG LOG END ------*/
5879 " l7vsadm -A|E -t service-address -m proto-module [module-args]\n"
5880 " [-s scheduler] [-u connection-count] [-b sorry-server]\n"
5881 " [-f sorry-flag] [-Q QoSval-up] [-q QoSval-down]\n"
5882 " l7vsadm -D -t service-address -m proto-module [module-args]\n"
5884 " l7vsadm -a|e -t service-address -m proto-module [module-args]\n"
5885 " -r server-address [-w weight]\n"
5886 " l7vsadm -d -t service-address -m proto-module [module-args]\n"
5887 " -r server-address\n"
5888 " l7vsadm -R -s replication-switch\n"
5891 " l7vsadm -L -c log-category -l log-level\n"
5892 " l7vsadm -S -c log-category -l log-level\n"
5893 " l7vsadm -P -r reload-parameter\n"
5894 " l7vsadm -l [-n]\n"
5895 " l7vsadm -V [-n]\n"
5896 " l7vsadm -K [-n]\n"
5900 /*-------- DEBUG LOG --------*/
5901 if (log_level_operate == LOG_LV_DEBUG) {
5902 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_OPERATE,75,
5903 "out_function : static void usage(FILE *fp) : ");
5905 /*------ DEBUG LOG END ------*/
5910 * Set l7vsadm parameter data.
5911 * Get l7vsadm parameter data and set to global data
5916 static struct l7vsadm_parameter_list l7vsadm_parameter_table[] = {
5917 {PARA_CMD_INTERVAL, "cmd_interval"},
5918 {PARA_CMD_COUNT, "cmd_count"},
5919 {PARA_CON_INTERVAL, "con_interval"},
5920 {PARA_CON_COUNT, "con_count"},
5923 struct l7vsadm_parameter_list *list;
5924 int parameter_value = 0;
5926 /*-------- DEBUG LOG --------*/
5927 if (log_level_common == LOG_LV_DEBUG) {
5928 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,8,
5929 "in_function : static void set_parameter(void) : ");
5931 /*------ DEBUG LOG END ------*/
5933 // Get and Set l7vsadm all parameter value.
5934 for (list = l7vsadm_parameter_table; list->parameter_name != NULL; list++) {
5935 parameter_value = 0;
5936 if (parameter_is_int_exist(L7VSADM_COMPONENT, list->parameter_name)) {
5938 parameter_get_int_value(L7VSADM_COMPONENT, list->parameter_name);
5940 // When parameter not exist, use default parameter value.
5941 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_COMMON,2,
5942 "Get %s parameter error. Use default value.",
5943 list->parameter_name);
5946 switch (list->parameter_code) {
5947 case PARA_CMD_INTERVAL:
5948 command_wait_interval = parameter_value;
5949 if (command_wait_interval < 0 ||
5950 command_wait_interval > L7VSADM_MAX_WAIT) {
5951 // When illegal parameter value, use default parameter value.
5952 command_wait_interval = L7VSADM_DEFAULT_WAIT_INTERVAL;
5953 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_COMMON,3,
5954 "Illegal %s parameter value. Use default value.",
5955 list->parameter_name);
5958 case PARA_CMD_COUNT:
5959 command_wait_count = parameter_value;
5960 if (command_wait_count < 0 ||
5961 command_wait_count > L7VSADM_MAX_WAIT) {
5962 // When illegal parameter value, use default parameter value.
5963 command_wait_count = L7VSADM_DEFAULT_WAIT_COUNT;
5964 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_COMMON,4,
5965 "Illegal %s parameter value. Use default value.",
5966 list->parameter_name);
5969 case PARA_CON_INTERVAL:
5970 connect_wait_interval = parameter_value;
5971 if (connect_wait_interval < 0 ||
5972 connect_wait_interval > L7VSADM_MAX_WAIT) {
5973 // When illegal parameter value, use default parameter value.
5974 connect_wait_interval = L7VSADM_DEFAULT_WAIT_INTERVAL;
5975 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_COMMON,5,
5976 "Illegal %s parameter value. Use default value.",
5977 list->parameter_name);
5980 case PARA_CON_COUNT:
5981 connect_wait_count = parameter_value;
5982 if (connect_wait_count < 0 ||
5983 connect_wait_count > L7VSADM_MAX_WAIT) {
5984 // When illegal parameter value, use default parameter value.
5985 connect_wait_count = L7VSADM_DEFAULT_WAIT_COUNT;
5986 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_COMMON,6,
5987 "Illegal %s parameter value. Use default value.",
5988 list->parameter_name);
5997 if ((command_wait_interval * command_wait_count) > L7VSADM_MAX_WAIT) {
5998 // When wait value too long, use default parameter value.
5999 command_wait_interval = L7VSADM_DEFAULT_WAIT_INTERVAL;
6000 command_wait_count = L7VSADM_DEFAULT_WAIT_COUNT;
6001 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_COMMON,7,
6002 "Command wait value too long. Use default value.");
6004 if ((connect_wait_interval * connect_wait_count) > L7VSADM_MAX_WAIT) {
6005 // When wait value too long, use default parameter value.
6006 connect_wait_interval = L7VSADM_DEFAULT_WAIT_INTERVAL;
6007 connect_wait_count = L7VSADM_DEFAULT_WAIT_COUNT;
6008 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_COMMON,8,
6009 "Connect wait value too long. Use default value.");
6012 /*-------- DEBUG LOG --------*/
6013 if (log_level_common == LOG_LV_DEBUG) {
6014 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,9,
6015 "out_function : static void set_parameter(void) : "
6017 "command_wait_interval = %d "
6018 "command_wait_count = %d "
6019 "connect_wait_interval = %d "
6020 "connect_wait_count = %d",
6021 command_wait_interval,
6023 connect_wait_interval,
6024 connect_wait_count);
6026 /*------ DEBUG LOG END ------*/
6030 * Create config error string.
6031 * Translate from esponse code to error string
6032 * @param[in] rsp_code response code
6033 * @param[in] *argv[] array of argument string
6034 * @return char * error string
6037 config_strerror(int rsp_code)
6039 /*-------- DEBUG LOG --------*/
6040 if (log_level_common == LOG_LV_DEBUG) {
6041 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,10,
6042 "in_function : static char *config_strerror(int rsp_code) : "
6046 /*------ DEBUG LOG END ------*/
6049 case L7VS_CONFIG_NOERR:
6050 /*-------- DEBUG LOG --------*/
6051 if (log_level_common == LOG_LV_DEBUG) {
6052 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,11,
6053 "out_function : static char *config_strerror(int rsp_code) : "
6054 "return = No error");
6056 /*------ DEBUG LOG END ------*/
6059 case L7VS_CONFIG_ERR_INVALID_COMMAND:
6060 /*-------- DEBUG LOG --------*/
6061 if (log_level_common == LOG_LV_DEBUG) {
6062 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,12,
6063 "out_function : static char *config_strerror(int rsp_code) : "
6064 "return = Invalid command");
6066 /*------ DEBUG LOG END ------*/
6068 return "Invalid command";
6069 case L7VS_CONFIG_ERR_NOMEM:
6070 /*-------- DEBUG LOG --------*/
6071 if (log_level_common == LOG_LV_DEBUG) {
6072 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,13,
6073 "out_function : static char *config_strerror(int rsp_code) : "
6074 "return = Could not allocate memory");
6076 /*------ DEBUG LOG END ------*/
6078 return "Could not allocate memory";
6079 case L7VS_CONFIG_ERR_VS_EXISTS:
6080 /*-------- DEBUG LOG --------*/
6081 if (log_level_common == LOG_LV_DEBUG) {
6082 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,14,
6083 "out_function : static char *config_strerror(int rsp_code) : "
6084 "return = Virtual service already exists");
6086 /*------ DEBUG LOG END ------*/
6088 return "Virtual service already exists";
6089 case L7VS_CONFIG_ERR_RS_EXISTS:
6090 /*-------- DEBUG LOG --------*/
6091 if (log_level_common == LOG_LV_DEBUG) {
6092 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,15,
6093 "out_function : static char *config_strerror(int rsp_code) : "
6094 "return = Real server already exists");
6096 /*------ DEBUG LOG END ------*/
6098 return "Real server already exists";
6099 case L7VS_CONFIG_ERR_NOVS:
6100 /*-------- DEBUG LOG --------*/
6101 if (log_level_common == LOG_LV_DEBUG) {
6102 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,16,
6103 "out_function : static char *config_strerror(int rsp_code) : "
6104 "return = No such virtual service");
6106 /*------ DEBUG LOG END ------*/
6108 return "No such virtual service";
6109 case L7VS_CONFIG_ERR_NORS:
6110 /*-------- DEBUG LOG --------*/
6111 if (log_level_common == LOG_LV_DEBUG) {
6112 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,17,
6113 "out_function : static char *config_strerror(int rsp_code) : "
6114 "return = No such real server");
6116 /*------ DEBUG LOG END ------*/
6118 return "No such real server";
6119 case L7VS_CONFIG_ERR_NOSCHED:
6120 /*-------- DEBUG LOG --------*/
6121 if (log_level_common == LOG_LV_DEBUG) {
6122 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,18,
6123 "out_function : static char *config_strerror(int rsp_code) : "
6124 "return = No such scheduler");
6126 /*------ DEBUG LOG END ------*/
6128 return "No such scheduler";
6129 case L7VS_CONFIG_ERR_NOSOCK:
6130 /*-------- DEBUG LOG --------*/
6131 if (log_level_common == LOG_LV_DEBUG) {
6132 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,19,
6133 "out_function : static char *config_strerror(int rsp_code) : "
6134 "return = Could not create a service socket");
6136 /*------ DEBUG LOG END ------*/
6138 return "Could not create a service socket";
6139 case L7VS_CONFIG_ERR_QOSSET:
6140 /*-------- DEBUG LOG --------*/
6141 if (log_level_common == LOG_LV_DEBUG) {
6142 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,20,
6143 "out_function : static char *config_strerror(int rsp_code) : "
6144 "return = QoS threshold setting failure");
6146 /*------ DEBUG LOG END ------*/
6148 return "QoS threshold setting failure";
6149 case L7VS_CONFIG_ERR_SORRYSET:
6150 /*-------- DEBUG LOG --------*/
6151 if (log_level_common == LOG_LV_DEBUG) {
6152 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,21,
6153 "out_function : static char *config_strerror(int rsp_code) : "
6154 "return = Sorry-Server modification failure");
6156 /*------ DEBUG LOG END ------*/
6158 return "Sorry-Server modification failure";
6159 case L7VS_CONFIG_ERR_SENDMSG:
6160 /*-------- DEBUG LOG --------*/
6161 if (log_level_common == LOG_LV_DEBUG) {
6162 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,22,
6163 "out_function : static char *config_strerror(int rsp_code) : "
6164 "return = Could not send response to l7vsadm");
6166 /*------ DEBUG LOG END ------*/
6168 return "Could not send response to l7vsadm";
6169 case L7VS_CONFIG_ERR_MAXVS_EXISTS:
6170 /*------ DEBUG LOG -------*/
6171 if (log_level_common == LOG_LV_DEBUG) {
6172 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,23,
6173 "out_function : static char *config_strerror(int rep_code) : "
6174 "return = l7vsd is created max virtual service" );
6176 /*------ DEBUG LOG END ------*/
6178 return "Could not create virtual service to l7vsd because max limit it.";
6180 /*-------- DEBUG LOG --------*/
6181 if (log_level_common == LOG_LV_DEBUG) {
6182 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,24,
6183 "out_function : static char *config_strerror(int rsp_code) : "
6184 "return = Unknown error");
6186 /*------ DEBUG LOG END ------*/
6188 return "Unknown error";
6194 * Signal handling function.
6195 * @param[in] sig signal number
6198 sig_exit_handler(int sig)
6205 * Set signal handler.
6206 * @param[in] argc number of argument
6207 * @param[in] *argv[] array of argument string
6208 * @return int set result OK=0, NG=-1
6213 static struct l7vsadm_sig_list sigs[] = {
6214 {SIGHUP, sig_exit_handler},
6215 {SIGINT, sig_exit_handler},
6216 {SIGQUIT, sig_exit_handler},
6217 {SIGPIPE, sig_exit_handler},
6218 {SIGTERM, sig_exit_handler},
6219 {SIGUSR1, sig_exit_handler},
6220 {SIGUSR2, sig_exit_handler},
6223 struct l7vsadm_sig_list *s;
6224 struct sigaction act, oact;
6227 /*-------- DEBUG LOG --------*/
6228 if (log_level_common == LOG_LV_DEBUG) {
6229 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,25,
6230 "in_function : static int set_signal(void) : ");
6232 /*------ DEBUG LOG END ------*/
6234 memset(&act, 0x00, sizeof(struct sigaction));
6235 memset(&oact, 0x00, sizeof(struct sigaction));
6237 for (s = sigs; s->sig != 0; s++) {
6238 ret = sigaction(s->sig, NULL, &oact);
6240 LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSADM_COMMON,6,
6241 "sigaction() error: %s.", strerror(errno));
6242 fprintf(stderr, "COMMON ERROR : "
6243 "sigaction() error: %s.\n", strerror(errno));
6245 /*-------- DEBUG LOG --------*/
6246 if (log_level_common == LOG_LV_DEBUG) {
6247 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,26,
6248 "out_function : static int set_signal(void) : "
6252 /*------ DEBUG LOG END ------*/
6258 act.sa_handler = s->sig_func;
6259 ret = sigaction(s->sig, &act, NULL);
6261 LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSADM_COMMON,7,
6262 "sigaction() error: %s.", strerror(errno));
6263 fprintf(stderr, "COMMON ERROR : "
6264 "sigaction() error: %s.\n", strerror(errno));
6266 /*-------- DEBUG LOG --------*/
6267 if (log_level_common == LOG_LV_DEBUG) {
6268 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,27,
6269 "out_function : static int set_signal(void) : "
6273 /*------ DEBUG LOG END ------*/
6279 /*-------- DEBUG LOG --------*/
6280 if (log_level_common == LOG_LV_DEBUG) {
6281 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,28,
6282 "out_function : static int set_signal(void) : "
6285 /*------ DEBUG LOG END ------*/
6291 * L7vsadm command main function.
6292 * Parse argument and execute command
6293 * @param[in] argc number of argument
6294 * @param[in] *argv[] array of argument string
6297 l7vsadm_main(int argc, char *argv[])
6299 char l7vsadm_file_path[256];
6300 int l7vsadm_fd = -1;
6301 int l7vsadm_lock = -1;
6302 int retry_count = 0;
6306 // Get and Set l7vsadm all log level value.
6307 log_level_parse = logger_get_log_level(LOG_CAT_L7VSADM_PARSE);
6308 log_level_operate = logger_get_log_level(LOG_CAT_L7VSADM_OPERATE);
6309 log_level_communicate = logger_get_log_level(LOG_CAT_L7VSADM_COMMUNICATE);
6310 log_level_config_result = logger_get_log_level(LOG_CAT_L7VSADM_CONFIG_RESULT);
6311 log_level_common = logger_get_log_level(LOG_CAT_L7VSADM_COMMON);
6313 // L7vsadm command start.
6314 char arg_str[DEBUG_STR_LEN] = {0};
6315 argc_argv_c_str(arg_str, argc, argv);
6316 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSADM_COMMON,1,
6317 "l7vsadm command start. : "
6322 // Set signal handler.
6325 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,11,
6326 "Set signal handler error.");
6331 // l7vsadm_option_data initialize.
6332 memset(&l7vsadm_option_data, 0, sizeof(struct l7vsadm_option_data));
6335 if (signal_flg > 0) {
6336 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,12,
6337 "Signal (%d) Received.", received_sig);
6338 fprintf(stderr, "COMMON ERROR : "
6339 "Signal (%d) Received.\n", received_sig);
6344 // Set l7vsadm parameter.
6347 // Get l7vsadm execute file path from /proc/(pid)/exe (symbolic link)
6348 memset(l7vsadm_file_path, 0, sizeof(l7vsadm_file_path));
6349 readlink("/proc/self/exe", l7vsadm_file_path, sizeof(l7vsadm_file_path));
6351 // L7vsadm command conflict check. (Try l7vsadm execute file lock)
6352 l7vsadm_fd = open(l7vsadm_file_path, O_RDONLY);
6353 if (l7vsadm_fd == -1) {
6354 LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSADM_COMMON,8,
6355 "L7vsadm execute file open error. file:%s", l7vsadm_file_path);
6356 fprintf(stderr, "COMMON ERROR : "
6357 "L7vsadm execute file open error. file:%s\n", l7vsadm_file_path);
6363 if (signal_flg > 0) {
6364 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,13,
6365 "Signal (%d) Received.", received_sig);
6366 fprintf(stderr, "COMMON ERROR : "
6367 "Signal (%d) Received.\n", received_sig);
6372 // Try lock l7vsadm file.
6373 l7vsadm_lock = flock(l7vsadm_fd, LOCK_EX | LOCK_NB);
6374 if (l7vsadm_lock == 0) {
6375 // l7vsadm file lock OK.
6379 if (retry_count > command_wait_count) {
6380 // L7vsadm file lock error. (l7vsadm is executing)
6381 LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSADM_COMMON,9,
6382 "L7vsadm file lock timeout. (l7vsadm is already executing)");
6383 fprintf(stderr, "COMMON ERROR : "
6384 "L7vsadm file lock timeout. (l7vsadm is already executing)\n");
6389 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_COMMON,9,
6390 "L7vsadm file lock error. (l7vsadm is already executing) (retry %d)",
6392 sleep(command_wait_interval);
6397 if (signal_flg > 0) {
6398 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,14,
6399 "Signal (%d) Received.", received_sig);
6400 fprintf(stderr, "COMMON ERROR : "
6401 "Signal (%d) Received.\n", received_sig);
6406 // Parse command option. (1st argument)
6407 ret = parse_command(argc, argv);
6409 // Command option parse NG.
6410 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,84,
6411 "Command option parse error.");
6417 /*-------- DEBUG LOG --------*/
6418 if (log_level_parse == LOG_LV_DEBUG) {
6419 char parse_str[DEBUG_STR_LEN] = {0};
6420 l7vsadm_option_data_c_str(parse_str);
6421 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,112,
6422 "function : void l7vsadm_main(int argc, char *argv[]) : "
6423 "parse_command result (%s)",
6426 /*------ DEBUG LOG END ------*/
6429 if (signal_flg > 0) {
6430 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,15,
6431 "Signal (%d) Received.", received_sig);
6432 fprintf(stderr, "COMMON ERROR : "
6433 "Signal (%d) Received.\n", received_sig);
6438 // Check parse function pointer.
6439 if (l7vsadm_option_data.parse_func == NULL) {
6440 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_PARSE,7,
6441 "Parse function pointer is NULL.");
6446 // Parse xxx command option. (2nd argument and later)
6447 ret = l7vsadm_option_data.parse_func(argc, argv);
6449 // xxx command option parse NG.
6450 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSADM_PARSE,85,
6451 "(%s) command option parse error.", argv[1]);
6457 /*-------- DEBUG LOG --------*/
6458 if (log_level_parse == LOG_LV_DEBUG) {
6459 char parse_str[DEBUG_STR_LEN] = {0};
6460 l7vsadm_option_data_c_str(parse_str);
6461 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,113,
6462 "function : void l7vsadm_main(int argc, char *argv[]) : "
6463 "parse_option result (%s)",
6466 /*------ DEBUG LOG END ------*/
6469 // No argument. Set default command (-l).
6470 l7vsadm_option_data.command_code = CMD_LIST;
6471 l7vsadm_option_data.operate_func = operate_list;
6473 /*-------- DEBUG LOG --------*/
6474 if (log_level_parse == LOG_LV_DEBUG) {
6475 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_PARSE,114,
6476 "function : void l7vsadm_main(int argc, char *argv[]) : "
6479 /*------ DEBUG LOG END ------*/
6484 if (signal_flg > 0) {
6485 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_COMMON,16,
6486 "Signal (%d) Received.", received_sig);
6487 fprintf(stderr, "COMMON ERROR : "
6488 "Signal (%d) Received.\n", received_sig);
6494 // Check operate function pointer.
6495 if (l7vsadm_option_data.operate_func == NULL) {
6496 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,49,
6497 "Operate function pointer is NULL.");
6502 // Operate l7vsadm command.
6503 ret = l7vsadm_option_data.operate_func();
6505 // xxx command operate NG.
6507 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,50,
6508 "(%s) command operate error.", argv[1]);
6510 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSADM_OPERATE,51,
6511 "(-l) command operate error.");
6518 if (l7vsadm_lock != -1) {
6519 // L7vsadm fd unlock.
6520 flock(l7vsadm_fd, LOCK_UN);
6523 if (l7vsadm_fd != -1) {
6524 // L7vsadm fd close.
6532 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSADM_COMMON,2,
6533 "L7vsadm command (%s) is failure.", argv[1]);
6535 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSADM_COMMON,3,
6536 "L7vsadm command (-l) is failure.");
6539 /*-------- DEBUG LOG --------*/
6540 if (log_level_common == LOG_LV_DEBUG) {
6541 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,29,
6542 "out_function : void l7vsadm_main(int argc, char *argv[]) : "
6546 /*------ DEBUG LOG END ------*/
6550 _exit(EXIT_FAILURE);
6554 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSADM_COMMON,4,
6555 "L7vsadm command (%s) is successful.", argv[1]);
6557 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSADM_COMMON,5,
6558 "L7vsadm command (-l) is successful.");
6561 /*-------- DEBUG LOG --------*/
6562 if (log_level_common == LOG_LV_DEBUG) {
6563 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSADM_COMMON,30,
6564 "out_function : void l7vsadm_main(int argc, char *argv[]) : "
6568 /*------ DEBUG LOG END ------*/
6572 _exit(EXIT_SUCCESS);
6577 * Serialize endpoint for debug log.
6578 * @param[out] *ep_str endpoint string
6579 * @param[in] *addr endpoint structure
6582 endpoint_c_str(char* ep_str, void *addr)
6584 struct sockaddr_in *p;
6586 p = (struct sockaddr_in *)addr;
6588 sprintf(ep_str, "NULL");
6590 sprintf(ep_str, "sin_family = %d", p->sin_family);
6591 sprintf(ep_str, "%s sin_port = %d", ep_str, p->sin_port);
6592 if (memcmp(&p->sin_addr, "", 1) == 0) {
6593 sprintf(ep_str, "%s sin_addr = (NULL)", ep_str);
6595 sprintf(ep_str, "%s sin_addr = (s_addr = %d)", ep_str, p->sin_addr.s_addr);
6597 if (p->sin_zero == NULL) {
6598 sprintf(ep_str, "%s sin_zero = NULL", ep_str);
6600 sprintf(ep_str, "%s sin_zero = %s", ep_str, p->sin_zero);
6606 * Serialize argc *argv[] for debug log.
6607 * @param[out] *arg_str serialized string
6608 * @param[in] argc argument count
6609 * @param[in] *argv[] argument string array
6612 argc_argv_c_str(char* arg_str, int argc, char *argv[])
6616 for (i = 0; i < argc; i++) {
6618 if (strlen(arg_str) + 20 > DEBUG_STR_LEN) {
6621 sprintf(arg_str, "%s argv[%d] = NULL", arg_str, i);
6623 if (strlen(arg_str) + strlen(argv[i]) + 16 > DEBUG_STR_LEN) {
6626 sprintf(arg_str, "%s argv[%d] = %s", arg_str, i, argv[i]);
6632 * Serialize l7vsadm_option_data (global data) for debug log.
6633 * @param[out] *parse_str serialized string
6636 l7vsadm_option_data_c_str(char* parse_str)
6638 sprintf(parse_str, "command_code = %d",
6639 l7vsadm_option_data.command_code);
6640 sprintf(parse_str, "%s parse_func = %p", parse_str,
6641 l7vsadm_option_data.parse_func);
6642 sprintf(parse_str, "%s operate_func = %p", parse_str,
6643 l7vsadm_option_data.operate_func);
6644 if (memcmp(&l7vsadm_option_data.vs_addr, "", 1) == 0) {
6645 sprintf(parse_str, "%s vs_addr = NULL", parse_str);
6647 sprintf(parse_str, "%s vs_addr = %s", parse_str,
6648 get_endpoint_name((struct sockaddr_storage *)(&l7vsadm_option_data.vs_addr)));
6650 if (memcmp(&l7vsadm_option_data.rs_addr, "", 1) == 0) {
6651 sprintf(parse_str, "%s rs_addr = NULL", parse_str);
6653 sprintf(parse_str, "%s rs_addr = %s", parse_str,
6654 get_endpoint_name((struct sockaddr_storage *)(&l7vsadm_option_data.rs_addr)));
6656 if (memcmp(&l7vsadm_option_data.protomod_name, "", 1) == 0) {
6657 sprintf(parse_str, "%s protomod_name = NULL", parse_str);
6659 sprintf(parse_str, "%s protomod_name = %s", parse_str,
6660 l7vsadm_option_data.protomod_name);
6662 if (memcmp(&l7vsadm_option_data.schedmod_name, "", 1) == 0) {
6663 sprintf(parse_str, "%s schedmod_name = NULL", parse_str);
6665 sprintf(parse_str, "%s schedmod_name = %s", parse_str,
6666 l7vsadm_option_data.schedmod_name);
6668 sprintf(parse_str, "%s protomod = %p", parse_str,
6669 l7vsadm_option_data.protomod);
6670 sprintf(parse_str, "%s persist = %d", parse_str,
6671 l7vsadm_option_data.persist);
6672 sprintf(parse_str, "%s backlog = %d", parse_str,
6673 l7vsadm_option_data.backlog);
6674 sprintf(parse_str, "%s weight = %d", parse_str,
6675 l7vsadm_option_data.weight);
6676 sprintf(parse_str, "%s isnumeric = %d", parse_str,
6677 l7vsadm_option_data.isnumeric);
6678 if (l7vsadm_option_data.protomod_options == NULL) {
6679 sprintf(parse_str, "%s protomod_options = %p", parse_str,
6680 l7vsadm_option_data.protomod_options);
6682 char arg_str[DEBUG_STR_LEN] = {0};
6683 argc_argv_c_str(arg_str,
6684 l7vsadm_option_data.protomod_options->len,
6685 (char **)l7vsadm_option_data.protomod_options->data);
6686 sprintf(parse_str, "%s protomod_options = %s", parse_str,
6689 sprintf(parse_str, "%s protomod_sarg = %p", parse_str,
6690 &l7vsadm_option_data.protomod_sarg);
6691 sprintf(parse_str, "%s max_connection = %d", parse_str,
6692 l7vsadm_option_data.max_connection);
6693 if (memcmp(&l7vsadm_option_data.sorry_addr, "", 1) == 0) {
6694 sprintf(parse_str, "%s sorry_addr = NULL", parse_str);
6696 sprintf(parse_str, "%s sorry_addr = %s", parse_str,
6697 get_endpoint_name(&l7vsadm_option_data.sorry_addr));
6699 sprintf(parse_str, "%s sorry_flag = %d", parse_str,
6700 l7vsadm_option_data.sorry_flag);
6701 sprintf(parse_str, "%s QoS_to_server = %lld", parse_str,
6702 l7vsadm_option_data.qos_threshold_up);
6703 sprintf(parse_str, "%s QoS_to_client = %lld", parse_str,
6704 l7vsadm_option_data.qos_threshold_down);
6705 sprintf(parse_str, "%s control_code = %d", parse_str,
6706 l7vsadm_option_data.control_code);
6707 sprintf(parse_str, "%s log_category = %d", parse_str,
6708 l7vsadm_option_data.log_category);
6709 sprintf(parse_str, "%s log_level = %d", parse_str,
6710 l7vsadm_option_data.log_level);
6711 sprintf(parse_str, "%s category_all_flag = %d", parse_str,
6712 l7vsadm_option_data.category_all_flag);
6713 sprintf(parse_str, "%s replication_start_flag = %d", parse_str,
6714 l7vsadm_option_data.replication_start_flag);
6715 sprintf(parse_str, "%s reload_param = %d", parse_str,
6716 l7vsadm_option_data.reload_param);