static int set_details() { int rand_port; unsigned int seed; struct timeval tp; /* generate a random port number for avoiding port conflicts */ gettimeofday(&tp, NULL); seed = tp.tv_usec; rand_port = (int) ((rand_r(&seed)/(RAND_MAX + 1.0))*512); clt_settings.rand_port_shifted = rand_port; /* set the ip port pair mapping according to settings */ if (retrieve_target_addresses(clt_settings.raw_transfer, &clt_settings.transfer) == -1) { return -1; } if (clt_settings.percentage < 0 && clt_settings.percentage >99) { clt_settings.percentage = 0; } #if (TCPCOPY_OFFLINE) if (clt_settings.pcap_file == NULL) { tc_log_info(LOG_ERR, 0, "it must have -i argument for offline"); fprintf(stderr, "no -i argument\n"); return -1; } #endif #if (TCPCOPY_MYSQL_ADVANCED) if (clt_settings.user_pwd != NULL) { if (retrieve_mysql_user_pwd_info(clt_settings.user_pwd) == -1) { return -1; } } else { tc_log_info(LOG_ERR, 0, "it must have -u argument"); fprintf(stderr, "no -u argument\n"); return -1; } #endif /* daemonize */ if (clt_settings.do_daemonize) { if (sigignore(SIGHUP) == -1) { tc_log_info(LOG_ERR, errno, "Failed to ignore SIGHUP"); } if (daemonize() == -1) { fprintf(stderr, "failed to daemon() in order to daemonize\n"); return -1; } } if (tc_time_set_timer(100) == TC_ERROR) { tc_log_info(LOG_ERR, 0, "set timer error"); return -1; } return 0; }
/* TODO It has to solve the sigignore warning problem */ static int sigignore(int sig) { struct sigaction sa = { .sa_handler = SIG_IGN, .sa_flags = 0 }; if (sigemptyset(&sa.sa_mask) == -1 || sigaction(sig, &sa, 0) == -1) { return -1; } return 0; } static int set_details() { int rand_port; unsigned int seed; struct timeval tp; /* Generate random port for avoiding port conflicts */ gettimeofday(&tp, NULL); seed = tp.tv_usec; rand_port = (int)((rand_r(&seed)/(RAND_MAX + 1.0))*512); clt_settings.rand_port_shifted = rand_port; /* Set signal handler */ set_signal_handler(); /* Set ip port pair mapping according to settings */ if (retrieve_target_addresses(clt_settings.raw_transfer, &clt_settings.transfer) == -1) { exit(EXIT_FAILURE); } #if (TCPCOPY_OFFLINE) if (NULL == clt_settings.pcap_file) { log_info(LOG_ERR, "it must have -i argument for offline"); fprintf(stderr, "no -i argument\n"); exit(EXIT_FAILURE); } #endif #if (TCPCOPY_MYSQL_ADVANCED) if (NULL != clt_settings.user_pwd) { retrieve_mysql_user_pwd_info(clt_settings.user_pwd); } else { log_info(LOG_ERR, "it must have -u argument"); fprintf(stderr, "no -u argument\n"); exit(EXIT_FAILURE); } #endif /* Daemonize */ if (clt_settings.do_daemonize) { if (sigignore(SIGHUP) == -1) { perror("Failed to ignore SIGHUP"); log_info(LOG_ERR, "Failed to ignore SIGHUP"); } if (daemonize() == -1) { fprintf(stderr, "failed to daemon() in order to daemonize\n"); exit(EXIT_FAILURE); } } return 0; }
static int set_details() { #if (!TCPCOPY_PCAP) int rand_port; #else int len, rand_port; #endif unsigned int seed; struct timeval tp; /* generate a random port number for avoiding port conflicts */ gettimeofday(&tp, NULL); seed = tp.tv_usec; rand_port = (int) ((rand_r(&seed)/(RAND_MAX + 1.0))*512); clt_settings.rand_port_shifted = rand_port; /* set the ip port pair mapping according to settings */ if (retrieve_target_addresses(clt_settings.raw_transfer, &clt_settings.transfer) == -1) { return -1; } if (clt_settings.percentage < 0 || clt_settings.percentage > 99) { clt_settings.percentage = 0; } if (clt_settings.par_connections <= 0) { clt_settings.par_connections = 1; } else if (clt_settings.par_connections > MAX_CONNECTION_NUM) { clt_settings.par_connections = MAX_CONNECTION_NUM; } tc_log_info(LOG_NOTICE, 0, "parallel connections per target:%d", clt_settings.par_connections); #if (TCPCOPY_OFFLINE) if (clt_settings.pcap_file == NULL) { tc_log_info(LOG_ERR, 0, "it must have -i argument for offline"); fprintf(stderr, "no -i argument\n"); return -1; } if (clt_settings.accelerated_times < 1) { clt_settings.accelerated_times = 1; } tc_log_info(LOG_NOTICE, 0, "accelerated %d times,interval:%llu ms", clt_settings.accelerated_times, clt_settings.interval); if (clt_settings.interval > 0) { clt_settings.interval = clt_settings.interval * 1000; } #endif #if (TCPCOPY_PCAP_SEND) if (clt_settings.output_if_name != NULL) { tc_log_info(LOG_NOTICE, 0, "output device:%s", clt_settings.output_if_name); } else { tc_log_info(LOG_ERR, 0, "output device is null"); return -1; } #endif #if (TCPCOPY_PCAP) if (clt_settings.raw_device != NULL) { tc_log_info(LOG_NOTICE, 0, "device:%s", clt_settings.raw_device); if (strcmp(clt_settings.raw_device, DEFAULT_DEVICE) == 0) { clt_settings.raw_device = NULL; } else { retrieve_devices(clt_settings.raw_device, &(clt_settings.devices)); } } if (clt_settings.user_filter != NULL) { tc_log_info(LOG_NOTICE, 0, "user filter:%s", clt_settings.user_filter); len = strlen(clt_settings.user_filter); if (len >= MAX_FILTER_LENGH) { tc_log_info(LOG_ERR, 0, "user filter is too long"); return -1; } memcpy(clt_settings.filter, clt_settings.user_filter, len); } else { extract_filter(); } #endif #if (TCPCOPY_MYSQL_ADVANCED) if (clt_settings.user_pwd != NULL) { tc_log_info(LOG_NOTICE, 0, "-u argument:%s",clt_settings.user_pwd); if (retrieve_mysql_user_pwd_info(clt_settings.user_pwd) == -1) { tc_log_info(LOG_ERR, 0, "wrong -u argument"); return -1; } } else { tc_log_info(LOG_ERR, 0, "it must have -u argument"); fprintf(stderr, "no -u argument\n"); return -1; } #endif #if (TCPCOPY_DR) /* retrieve real server ip addresses */ if (clt_settings.raw_rs_ip_list != NULL) { tc_log_info(LOG_NOTICE, 0, "s parameter:%s", clt_settings.raw_rs_ip_list); retrieve_real_servers(); } else { tc_log_info(LOG_WARN, 0, "no real server ip addresses"); return -1; } #endif /* daemonize */ if (clt_settings.do_daemonize) { if (sigignore(SIGHUP) == -1) { tc_log_info(LOG_ERR, errno, "Failed to ignore SIGHUP"); } if (daemonize() == -1) { fprintf(stderr, "failed to daemonize() in order to daemonize\n"); return -1; } } return 0; }
static int set_details() { int rand_port; unsigned int seed; struct timeval tp; /* generate a random port number for avoiding port conflicts */ gettimeofday(&tp, NULL); seed = tp.tv_usec; rand_port = (int) ((rand_r(&seed)/(RAND_MAX + 1.0))*512); clt_settings.rand_port_shifted = rand_port; /* set the ip port pair mapping according to settings */ if (retrieve_target_addresses(clt_settings.raw_transfer, &clt_settings.transfer) == -1) { return -1; } if (clt_settings.percentage < 0 && clt_settings.percentage >99) { clt_settings.percentage = 0; } #if (TCPCOPY_OFFLINE) if (clt_settings.pcap_file == NULL) { tc_log_info(LOG_ERR, 0, "it must have -i argument for offline"); fprintf(stderr, "no -i argument\n"); return -1; } #endif #if (TCPCOPY_PCAP) if (clt_settings.raw_device != NULL) { tc_log_info(LOG_NOTICE, 0, "device:%s", clt_settings.raw_device); if (strcmp(clt_settings.raw_device, DEFAULT_DEVICE) == 0) { clt_settings.raw_device = NULL; } else { retrieve_devices(); } } #endif #if (TCPCOPY_MYSQL_ADVANCED) if (clt_settings.user_pwd != NULL) { tc_log_info(LOG_NOTICE, 0, "-u argument:%s",clt_settings.user_pwd); if (retrieve_mysql_user_pwd_info(clt_settings.user_pwd) == -1) { tc_log_info(LOG_ERR, 0, "wrong -u argument"); return -1; } } else { tc_log_info(LOG_ERR, 0, "it must have -u argument"); fprintf(stderr, "no -u argument\n"); return -1; } #endif #if (TCPCOPY_DR) /* retrieve real server ip addresses */ if (clt_settings.raw_rs_ip_list != NULL) { tc_log_info(LOG_NOTICE, 0, "s parameter:%s", clt_settings.raw_rs_ip_list); retrieve_real_servers(); } else { tc_log_info(LOG_WARN, 0, "no real server ip addresses"); return -1; } #endif /* daemonize */ if (clt_settings.do_daemonize) { if (sigignore(SIGHUP) == -1) { tc_log_info(LOG_ERR, errno, "Failed to ignore SIGHUP"); } if (daemonize(clt_settings.pid_file) == -1) { fprintf(stderr, "failed to daemonize() in order to daemonize\n"); return -1; } } #if (TCPCOPY_OFFLINE) if (tc_time_set_timer(TIMER_INTERVAL) == TC_ERROR) { #else if (tc_time_set_timer(10) == TC_ERROR) { #endif tc_log_info(LOG_ERR, 0, "set timer error"); return -1; } return 0; } /* set default values for TCPCopy client */ static void settings_init() { /* init values */ clt_settings.mtu = DEFAULT_MTU; clt_settings.mss = DEFAULT_MSS; clt_settings.max_rss = MAX_MEMORY_SIZE; clt_settings.srv_port = SERVER_PORT; clt_settings.percentage = 0; clt_settings.session_timeout = DEFAULT_SESSION_TIMEOUT; tc_raw_socket_out = TC_INVALID_SOCKET; set_signal_handler(); }