summaryrefslogtreecommitdiff
path: root/src/sapp_dev
diff options
context:
space:
mode:
authorlijia <[email protected]>2021-09-09 17:19:51 +0800
committerlijia <[email protected]>2021-09-09 17:19:51 +0800
commit00afae66aa07534518ccf452fcff7ba2d1b10cb9 (patch)
tree60abb8391523adbc6ce92bc78d4a79b8ee4fe5ea /src/sapp_dev
parent908cda2ef90d92d15d89b2b1fb659296e736b9f1 (diff)
TSG-7425, sapp支持释放所有资源而不退出当前进程, 便于做单元测试.
Diffstat (limited to 'src/sapp_dev')
-rw-r--r--src/sapp_dev/sapp_global_val.c90
-rw-r--r--src/sapp_dev/sapp_init.c14
-rw-r--r--src/sapp_dev/sapp_plug.c31
3 files changed, 130 insertions, 5 deletions
diff --git a/src/sapp_dev/sapp_global_val.c b/src/sapp_dev/sapp_global_val.c
index 717bb6d..37013ba 100644
--- a/src/sapp_dev/sapp_global_val.c
+++ b/src/sapp_dev/sapp_global_val.c
@@ -215,6 +215,96 @@ void sapp_global_val_sanity_check(void)
}
+void sapp_gval_init(void)
+{
+ int tseq;
+
+ sapp_global_val = (sapp_global_t *)calloc(1, sizeof(sapp_global_t));
+ sapp_global_val->individual_volatile = (sapp_gval_individual_volatile_t *)calloc(1, sizeof(sapp_gval_individual_volatile_t));
+
+ for(tseq = 0; tseq < SAPP_MAX_THREADS; tseq++){
+ sapp_global_val->mthread_volatile[tseq] = (sapp_gval_mthread_t *)calloc(1, sizeof(sapp_gval_mthread_t));
+ sapp_global_val->individual_fixed.cpu_bind_core_id_per_thread[tseq] = -1; /* ��ʼ������Ϊ-1, ��ʾû�󶨵��κ�һ��cpu core */
+ }
+
+ /* set default value, maybe not input by user or config file */
+ snprintf(sapp_global_val->config.packet_io.pcap_dumpfile_name, NAME_MAX, "dumpfile");
+
+ ABBR_CURRENT_TIME = time(NULL);
+}
+
+void sapp_gval_destroy(void)
+{
+ int tseq;
+
+ if(sapp_global_val->individual_volatile){
+ SAPP_FREE(sapp_global_val->individual_volatile);
+ }
+
+ for(tseq = 0; tseq < SAPP_MAX_THREADS; tseq++){
+ SAPP_FREE(sapp_global_val->mthread_volatile[tseq]);
+ }
+
+ if(sapp_global_val->cla.cmd_args_array){
+ int i, args_num = sapp_global_val->cla.cmd_args_num;
+ sapp_cmd_args_val_t *free_opt;
+
+ for(i = 0; i < args_num; i++){
+ free_opt = sapp_global_val->cla.cmd_args_array[i];
+ SAPP_FREE(free_opt->long_opt_name);
+ SAPP_FREE(free_opt->arg_val.string_value);
+ }
+
+ sapp_mem_free(sapp_global_val->cla.cmd_args_array);//�˴�ʹ����realloc׷��, Ҫ��sapp_mem_free()
+ sapp_global_val->cla.cmd_args_array = NULL;
+ }
+
+ sapp_config_file_link_t *pconfig = &sapp_global_val->config.cfg_file_path;
+ SAPP_FREE(pconfig->cfg_files_root_dir);
+ SAPP_FREE(pconfig->cfg_main_entry_relative);
+ SAPP_FREE(pconfig->cfg_main_entry_absolute);
+ SAPP_FREE(pconfig->cfg_sapp_log_relative);
+ SAPP_FREE(pconfig->cfg_sapp_log_absolute);
+ SAPP_FREE(pconfig->cfg_plug_list_relative);
+ SAPP_FREE(pconfig->cfg_plug_list_absolute);
+ SAPP_FREE(pconfig->cfg_project_list_relative);
+ SAPP_FREE(pconfig->cfg_project_list_absolute);
+ SAPP_FREE(pconfig->cfg_file_send_raw_pkt_relative);
+ SAPP_FREE(pconfig->cfg_file_send_raw_pkt_absolute);
+ SAPP_FREE(pconfig->cfg_file_vxlan_sport_map_relative);
+ SAPP_FREE(pconfig->cfg_file_vxlan_sport_map_absolute);
+ SAPP_FREE(pconfig->cfg_file_inline_dev_relative);
+ SAPP_FREE(pconfig->cfg_file_inline_dev_absolute);
+ SAPP_FREE(pconfig->cfg_file_necessary_plug_relative);
+ SAPP_FREE(pconfig->cfg_file_necessary_plug_absolute);
+ SAPP_FREE(pconfig->cfg_file_stream_compare_layer_relative);
+ SAPP_FREE(pconfig->cfg_file_stream_compare_layer_absolute);
+ SAPP_FREE(pconfig->cfg_file_vlan_flipping_relative);
+ SAPP_FREE(pconfig->cfg_file_vlan_flipping_absolute);
+ SAPP_FREE(pconfig->cfg_file_asymmetric_addr_layer_relative);
+ SAPP_FREE(pconfig->cfg_file_asymmetric_addr_layer_absolute);
+ SAPP_FREE(pconfig->cfg_file_well_known_port_relative);
+ SAPP_FREE(pconfig->cfg_file_well_known_port_absolute);
+
+ sapp_data_file_link_t *pdata = &sapp_global_val->config.data_file_path;
+ SAPP_FREE(pdata->data_files_root_dir);
+ SAPP_FREE(pdata->data_sapp_sysinfo_log_relative);
+ SAPP_FREE(pdata->data_sapp_sysinfo_log_absolute);
+ SAPP_FREE(pdata->data_sapp_fs2_log_relative);
+ SAPP_FREE(pdata->data_sapp_fs2_log_absolute);
+ SAPP_FREE(pdata->data_inline_keepalive_log_relative);
+ SAPP_FREE(pdata->data_inline_keepalive_log_absolute);
+ SAPP_FREE(pdata->data_load_plugin_stat_log_relative);
+ SAPP_FREE(pdata->data_load_plugin_stat_log_absolute);
+ SAPP_FREE(pdata->data_under_ddos_stat_log_relative);
+ SAPP_FREE(pdata->data_under_ddos_stat_log_absolute);
+
+ SAPP_FREE(sapp_global_val->config.library_file_path.libmarsio_file_path);
+
+ memset((void *)sapp_global_val, 0, sizeof(sapp_global_t));
+ SAPP_FREE(sapp_global_val);
+}
+
#ifdef __cplusplus
}
diff --git a/src/sapp_dev/sapp_init.c b/src/sapp_dev/sapp_init.c
index 0220e81..cca84b9 100644
--- a/src/sapp_dev/sapp_init.c
+++ b/src/sapp_dev/sapp_init.c
@@ -56,9 +56,10 @@ extern int sapp_assistant_init(void);
extern char gdev_keepalive_ip_entry(const struct streaminfo *pstream,unsigned char routedir,int thread_seq, const struct mesa_ip4_hdr *ipv4_hdr);
extern char gdev_keepalive_udp_entry(const struct streaminfo *a_udp, void **pme, int thread_seq, const void *ip_hdr);
+static int _check_exit_cap_mode;
static void forbid_call_exit_in_running_state(void)
{
- if(g_packet_io_cap_mode != CAP_MODEL_PCAP_DUMPFILE){
+ if(_check_exit_cap_mode != CAP_MODEL_PCAP_DUMPFILE){
printf("\033[41mCall exit() in running state is forbidden!!\033[0m\n");
abort();
}
@@ -346,7 +347,10 @@ void MESA_platform_run(void)
/*
ʹ��atexit()ע��ĺ���, ������ע�ắ���෴, ���Ծ������Ӻ�atexit()ע��λ��,
�������г�ʼ�����֮��, packet_io_run()֮ǰ��
+
+ ������sapp_gval_destroy()֮��, ȫ�ֱ���sapp_global_val����free��, �˴���ʱ��һ��.
*/
+ _check_exit_cap_mode = g_packet_io_cap_mode;
atexit(forbid_call_exit_in_running_state);
__sapp_timer_platform_run();
@@ -354,10 +358,10 @@ void MESA_platform_run(void)
packet_io_run();
sapp_set_current_state(SAPP_STATE_PROCESSING);
- /* If TFE is run by systemd's notify, then tell the systemd our tfe is ready.
- * and disable the stderr log, only print logs into files */
- if (check_is_started_by_notify())
- {
+ /*
+ If sapp is started by systemd with notify, then tell the systemd sapp is ready.
+ */
+ if (check_is_started_by_notify()){
sd_notify(0, "READY=1");
sleep(1);
}
diff --git a/src/sapp_dev/sapp_plug.c b/src/sapp_dev/sapp_plug.c
index 50abf92..20df1ab 100644
--- a/src/sapp_dev/sapp_plug.c
+++ b/src/sapp_dev/sapp_plug.c
@@ -122,6 +122,37 @@ int libsapp_setup_env(int argc, char *argv[])
}
+static void wait_for_all_io_threads(void)
+{
+ int tseq;
+
+ for(tseq = 0; tseq < g_packet_io_thread_num; tseq++){
+ pthread_join(sapp_global_val->individual_fixed.thread_obtain_id[tseq], NULL);
+ }
+
+ pthread_join(sapp_global_val->individual_fixed.thread_timer_event_id, NULL);
+}
+
+
+
+void libsapp_destroy_env_per_thread(int tseq)
+{
+
+}
+
+
+
+
+void libsapp_destroy_env(void)
+{
+ sapp_set_current_state(SAPP_STATE_READY_TO_EXIT);
+
+ wait_for_all_io_threads();
+
+ packet_io_exit();
+}
+
+
#ifdef __cplusplus
}
#endif