summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryangwei <[email protected]>2024-04-07 17:49:59 +0800
committeryangwei <[email protected]>2024-04-07 17:49:59 +0800
commit1e2e0d7afdc8682f3fa2926dfb245fce018ed098 (patch)
tree81aaf9575fa81b02eb14143612868e8c18f1541c
parent5aad95d4115764713f111bdc26e0890e05c750ed (diff)
✨ feat(sapp.toml): reorder_on_closing, default set 1Feature-tcp-unorder-free
-rw-r--r--bin/etc/sapp.toml1
-rw-r--r--include/private/sapp_global_val.h131
-rw-r--r--src/config/config_parse.cpp1
-rw-r--r--src/dealpkt/deal_tcp.c4
4 files changed, 70 insertions, 67 deletions
diff --git a/bin/etc/sapp.toml b/bin/etc/sapp.toml
index 97bad75..a6edfb9 100644
--- a/bin/etc/sapp.toml
+++ b/bin/etc/sapp.toml
@@ -146,6 +146,7 @@
analyse_option_enabled=1
tuple4_reuse_time_interval=30
+ #reorder_on_closing=1
#max_opening_per_sec=5000
#max_timeouts_per_sec=5000
diff --git a/include/private/sapp_global_val.h b/include/private/sapp_global_val.h
index c2044fe..0cf0da0 100644
--- a/include/private/sapp_global_val.h
+++ b/include/private/sapp_global_val.h
@@ -18,9 +18,9 @@ enum pkt_dump_mode{
/*
- vxlan��vlan_flipping�ǿ��Թ����,
- vxlan������������,
- vlan_flipping���ڱ����Լ�����,
+ vxlan��vlan_flipping�ǿ��Թ����,
+ vxlan������������,
+ vlan_flipping���ڱ����Լ�����,
*/
enum overlay_mode_config{
OVERLAY_MODE_NONE = 0,
@@ -42,10 +42,10 @@ typedef struct{
typedef struct{
int worker_threads;
- int send_only_threads_max_num; /* �������߳��������, �Dz����̬������, sapp�����޷�Ԥ֪, ֻ��������ֵ */
+ int send_only_threads_max_num; /* �������߳��������, �Dz����̬������, sapp�����޷�Ԥ֪, ֻ��������ֵ */
int bind_mask_array_num;
long bind_mask_array[SAPP_MAX_THREADS];
- long bind_mask; /* bind_mask_array�е�ÿ��������Ϊbit_indexת�ɵ�����ֵ */
+ long bind_mask; /* bind_mask_array�е�ÿ��������Ϊbit_indexת�ɵ�����ֵ */
}sapp_config_cpu_t;
@@ -65,8 +65,8 @@ typedef struct{
char *storge_path;
int dump_all_thread_enabled;
int dump_thread_id_array_num;
- int dump_thread_id_array[SAPP_MAX_THREADS]; /* �û������ļ�ԭʼ����, ��ʽ: [0,1,2,3], ��ʾ��0,1,2,3���߳����ò��� */
- unsigned char dump_thread_id_mask[SAPP_MAX_THREADS]; /* ����ԭʼ������������������, ���߳�id��Ϊ�±�, ֵ��Ϊ0��ʾ��ǰ�߳̿�������, ֵ:{1,1,1,1} */
+ int dump_thread_id_array[SAPP_MAX_THREADS]; /* �û������ļ�ԭʼ����, ��ʽ: [0,1,2,3], ��ʾ��0,1,2,3���߳����ò��� */
+ unsigned char dump_thread_id_mask[SAPP_MAX_THREADS]; /* ����ԭʼ������������������, ���߳�id��Ϊ�±�, ֵ��Ϊ0��ʾ��ǰ�߳̿�������, ֵ:{1,1,1,1} */
int pkt_dump_ratio; /* capture one packet every 'pkt_dump_ratio' packets */
}sapp_config_tools_pktdump_t;
@@ -81,13 +81,13 @@ typedef struct{
typedef struct{
- int auto_remedy; /* ƽ̨ȫ������, ����ÿ����, ��������auto_remedy_flag, ���ȼ�����ȫ��auto_remedy */
+ int auto_remedy; /* ƽ̨ȫ������, ����ÿ����, ��������auto_remedy_flag, ���ȼ�����ȫ��auto_remedy */
int rst_signature_enable;
int rst_num;
int rst_signature_seed1;
int rst_signature_seed2;
int link_mss;
- int remedy_kill_tcp_by_inline_device; /* ����FD����Чʱ, ����inline device�·�DROP���� */
+ int remedy_kill_tcp_by_inline_device; /* ����FD����Чʱ, ����inline device�·�DROP���� */
}sapp_config_stream_tcp_inject_t;
@@ -102,11 +102,12 @@ typedef struct{
int meaningful_statistics_minimum_byte;
sapp_config_stream_tcp_inject_t inject;
int well_known_ports_array_num;
- unsigned short *well_known_ports_array; /* ���ڰ�data������ȷ��server�� */
+ unsigned short *well_known_ports_array; /* ���ڰ�data������ȷ��server�� */
int closing_timeout;
int opening_timeout;
int max_timeouts_per_sec;
int max_opening_per_sec;
+ int reorder_on_closing;
}sapp_config_stream_tcp_t;
@@ -115,7 +116,7 @@ typedef struct{
int timeout;
int meaningful_statistics_minimum_pkt;
int meaningful_statistics_minimum_byte;
- unsigned short *well_known_ports_array; /* �����½�����ȷ��server��, ����4001->8000, ʵ������OICQ��C2S�������ݰ�,֮ǰ�İ汾�ᱻ��ʶ��ΪS2C����� */
+ unsigned short *well_known_ports_array; /* �����½�����ȷ��server��, ����4001->8000, ʵ������OICQ��C2S�������ݰ�,֮ǰ�İ汾�ᱻ��ʶ��ΪS2C����� */
int well_known_ports_array_num;
int max_timeouts_per_sec;
int max_opening_per_sec;
@@ -155,11 +156,11 @@ typedef struct{
int histogram_enabled;
char process_latency_local_file[NAME_MAX];
int process_latency_refresh_interval_s;
- int process_latency_threshold_in_us; /* �����ļ��ﵥλ��microsecond, ��Ҫ����1000 */
- /* ��ȷģʽ������, fs2����ͳ��Ҳ�dz���CPU, ÿ������Ҫ����FS_operate(),
- ���ͣ�þ�ȷģʽ, ����fs2���DZ������һ��ʱ������ֵ, ��Сֵ����һ��ʱ���ƽ��ֵ, ������FS_operate()����,
- ��ȷ�Ƚ�����һЩ, ���������˵���FS_operate()�Ĵ���.
- ����pkt_latency_accurate_enable��ƽ��ֵ�����ǶԵ�, ����׼��Ͳ�׼��.
+ int process_latency_threshold_in_us; /* �����ļ��ﵥλ��microsecond, ��Ҫ����1000 */
+ /* ��ȷģʽ������, fs2����ͳ��Ҳ�dz���CPU, ÿ������Ҫ����FS_operate(),
+ ���ͣ�þ�ȷģʽ, ����fs2���DZ������һ��ʱ������ֵ, ��Сֵ����һ��ʱ���ƽ��ֵ, ������FS_operate()����,
+ ��ȷ�Ƚ�����һЩ, ���������˵���FS_operate()�Ĵ���.
+ ����pkt_latency_accurate_enable��ƽ��ֵ�����ǶԵ�, ����׼��Ͳ�׼��.
*/
int process_latency_clock_id;
@@ -171,7 +172,7 @@ typedef struct{
typedef struct{
char type_str[NAME_MAX]; /* pag,pcap,marsio */
char name[NAME_MAX];
- enum cap_mode_t type_bin; /* ���ַ���typeת��Ϊ��������ֵ */
+ enum cap_mode_t type_bin; /* ���ַ���typeת��Ϊ��������ֵ */
}sapp_config_packet_io_interface_t;
@@ -187,10 +188,10 @@ enum __sapp_config_packet_io_deployment_mode{
SAPP_CFG_PKT_IO_DEPOLY_MODE_TRANSPARENT,
};
-#define MAX_VLAN_FLIPPING_MAP_NUM (4096) /* vlan_id���Χ��0~4095, ���鳤����4096 */
+#define MAX_VLAN_FLIPPING_MAP_NUM (4096) /* vlan_id���Χ��0~4095, ���鳤����4096 */
typedef struct{
- unsigned short couple_vlan_id; /* vlan flipping�dzɶԴ���, �����±��ʾһ��vlanid, Ԫ�ص�ֵ����һ��vlanid, host order */
+ unsigned short couple_vlan_id; /* vlan flipping�dzɶԴ���, �����±��ʾһ��vlanid, Ԫ�ص�ֵ����һ��vlanid, host order */
unsigned char this_vlan_route_location; // 'C' or 'I'
unsigned char mac_flipping_enable;
}sapp_vlan_flipping_map_t;
@@ -225,46 +226,46 @@ typedef struct{
typedef struct{
int enabled;
- int get_cpu_usage_interval; //��λ:����, milliseconds(ms)
- int smooth_avg_window; //�����N�ε�ƽ��ֵ����ʵʱֵ, ���ⶶ��
+ int get_cpu_usage_interval; //��λ:����, milliseconds(ms)
+ int smooth_avg_window; //�����N�ε�ƽ��ֵ����ʵʱֵ, ���ⶶ��
double bypass_trigger_cpu_usage;
double factor_decrease_ratio;
double factor_increase_ratio;
- int recovery_observe_time; //��λ:��, second(s)
+ int recovery_observe_time; //��λ:��, second(s)
}sapp_under_ddos_config_t;
typedef struct{
sapp_config_packet_io_tunnel_t packet_io_tunnel;
const char *input_bpf_filter;
char deployment_mode_str[NAME_MAX]; /* [mirror, inline, transparent, dumpfile] */
- enum sapp_deploment_mode_t deployment_mode_bin; /* ��������ڴ���, ת����ֵ��ʽ, ��1:mirror; 2:transparent; 3:inline��, ���: enum sapp_deploment_mode_t */
+ enum sapp_deploment_mode_t deployment_mode_bin; /* ��������ڴ���, ת����ֵ��ʽ, ��1:mirror; 2:transparent; 3:inline��, ���: enum sapp_deploment_mode_t */
sapp_config_packet_io_dev_t internal;
sapp_config_packet_io_dev_t external;
char pcap_dumpfile_name[NAME_MAX];
- int polling_priority; /* call sapp_recv_pkt every call polling_entry times, ���ö��ٴ�polling�����һ��recv pkt, 1��ʾ�������ȼ���ͬ */
+ int polling_priority; /* call sapp_recv_pkt every call polling_entry times, ���ö��ٴ�polling�����һ��recv pkt, 1��ʾ�������ȼ���ͬ */
int work_percent;
- int without_usleep; /* ���ܲ���ģʽ, �������usleep, CPU��100% */
- int inbound_route_dir; /* ��ʾ�뾳, I2C�����ֵ��0����1 */
+ int without_usleep; /* ���ܲ���ģʽ, �������usleep, CPU��100% */
+ int inbound_route_dir; /* ��ʾ�뾳, I2C�����ֵ��0����1 */
char pcap_capture_direction[NAME_MAX]; /* in, out, inout */
char inject_pkt_mode_string[NAME_MAX];
- int inject_pkt_mode; /* ��ע�뷽ʽ������ֵ, ���: enum send_fake_packet_mode */
+ int inject_pkt_mode; /* ��ע�뷽ʽ������ֵ, ���: enum send_fake_packet_mode */
int inject_pkt_prepend_segment_id;
- unsigned short inject_mode_inline_device_sport; /* udp socket�󶨵ı���Դ�˿�, host order, ������ */
+ unsigned short inject_mode_inline_device_sport; /* udp socket�󶨵ı���Դ�˿�, host order, ������ */
char inject_mode_single_gateway_device[NAME_MAX];
char inject_mode_single_gateway_src_mac_string[20];
char inject_mode_single_gateway_dst_mac_string[20];
- char inject_mode_single_gateway_dst_mac[6]; /* gateway��MAC */
- char inject_mode_single_gateway_src_mac[6]; /* inject_mode_single_gateway_device������MAC */
- int monitor_thread_enabled; /* ����ģʽ�˳�֮ǰ, Ϊ��ijЩ�߳��ܻ�д��־, �첽�������ݵȲ���, ��sleepһ�� */
- sapp_dup_pkt_t dup_pkt_para; /* �ظ�����ʶ�� */
+ char inject_mode_single_gateway_dst_mac[6]; /* gateway��MAC */
+ char inject_mode_single_gateway_src_mac[6]; /* inject_mode_single_gateway_device������MAC */
+ int monitor_thread_enabled; /* ����ģʽ�˳�֮ǰ, Ϊ��ijЩ�߳��ܻ�д��־, �첽�������ݵȲ���, ��sleepһ�� */
+ sapp_dup_pkt_t dup_pkt_para; /* �ظ�����ʶ�� */
char extract_linkdir_from_mac_sntax_raw_string[32];
char extract_linkdir_from_mac_enabled;
- unsigned char extract_linkdir_from_mac_byte_index; /* ��mac��ַ�ĵڼ����ֽڻ�ȡ��·����, ��0��ʼ��11����, �ܼ�12�ֽ� */
- unsigned char extract_linkdir_from_mac_bit_value; /* ��ij���ֽڻ�ȡ��·�����bitֵ, ������index, ����ֱ�ӽ���&���� */
+ unsigned char extract_linkdir_from_mac_byte_index; /* ��mac��ַ�ĵڼ����ֽڻ�ȡ��·����, ��0��ʼ��11����, �ܼ�12�ֽ� */
+ unsigned char extract_linkdir_from_mac_bit_value; /* ��ij���ֽڻ�ȡ��·�����bitֵ, ������index, ����ֱ�ӽ���&���� */
sapp_under_ddos_config_t under_ddos_config;
- short not_exit_for_dumpfile_mode; /* �����������˳�����, �������Բ���, ���ѭ����ȡ����� */
+ short not_exit_for_dumpfile_mode; /* �����������˳�����, �������Բ���, ���ѭ����ȡ����� */
short infinite_loop_enabled;
short destroy_all_plug_enabled;
short dlclose_all_plug_enabled;
@@ -277,7 +278,7 @@ typedef struct{
typedef struct{
const char *cfg_files_root_dir;
- const char *cfg_main_entry_relative; /* �������ļ�, �̶���sapp.toml, ·�����Կ�-c����ָ�� */
+ const char *cfg_main_entry_relative; /* �������ļ�, �̶���sapp.toml, ·�����Կ�-c����ָ�� */
const char *cfg_main_entry_absolute; /* /home/project_xxx/sapp/sapp.toml */
const char *cfg_sapp_log_relative;
@@ -301,7 +302,7 @@ typedef struct{
const char *cfg_file_inline_dev_relative;
const char *cfg_file_inline_dev_absolute;
- const char *cfg_file_necessary_plug_relative; /* ��Ҫ����б�, �������ʧ��sapp���˳� */
+ const char *cfg_file_necessary_plug_relative; /* ��Ҫ����б�, �������ʧ��sapp���˳� */
const char *cfg_file_necessary_plug_absolute;
const char *cfg_file_stream_compare_layer_relative;
@@ -347,17 +348,17 @@ typedef struct{
}sapp_data_file_link_t;
typedef struct{
- const char *libmarsio_file_path; /* libmarsio.so�Ƕ�̬dlopen��, ��sapp���Ȳ�һ��֪�����ĸ�·��, �������ļ���ȡ */
+ const char *libmarsio_file_path; /* libmarsio.so�Ƕ�̬dlopen��, ��sapp���Ȳ�һ��֪�����ĸ�·��, �������ļ���ȡ */
}sapp_library_file_link_t;
typedef struct{
- int ipv6_decapsulation_enabled; /* �Ƿ����ipv6���ݰ� */
- int ipv6_send_packet_enabled; /* �Ƿ�֧�ַ���ipv6���ݰ�, ��������ϵͳipv6�ں�ģ���Ƿ���� */
- int tcp_drop_pure_ack_pkt; /* ����û�и��صĴ�ack��, ���Խ�Լһ��������ѯ, ����ҵ���������� */
- int tcp_syn_option_parse_enabled; /* �Ƿ����tcp syn��ͷ��ѡ�� */
- int skip_not_ip_layer_over_eth; /* ������ip��, ��֤�ڲ���ģʽ��, ����ͨ��ϵͳ·�ɷ���rst�� */
- int reverse_ethernet_addr_enabled; /* smac��ַ�а���������Ϣʱ���跭ת */
- int skip_gtp_S_PN_E_field_for_inject; /* GTP����ע�����ݰ�ʱ������չ�ֶ�:sequence,N-PDU, extension */
+ int ipv6_decapsulation_enabled; /* �Ƿ����ipv6���ݰ� */
+ int ipv6_send_packet_enabled; /* �Ƿ�֧�ַ���ipv6���ݰ�, ��������ϵͳipv6�ں�ģ���Ƿ���� */
+ int tcp_drop_pure_ack_pkt; /* ����û�и��صĴ�ack��, ���Խ�Լһ��������ѯ, ����ҵ���������� */
+ int tcp_syn_option_parse_enabled; /* �Ƿ����tcp syn��ͷ��ѡ�� */
+ int skip_not_ip_layer_over_eth; /* ������ip��, ��֤�ڲ���ģʽ��, ����ͨ��ϵͳ·�ɷ���rst�� */
+ int reverse_ethernet_addr_enabled; /* smac��ַ�а���������Ϣʱ���跭ת */
+ int skip_gtp_S_PN_E_field_for_inject; /* GTP����ע�����ݰ�ʱ������չ�ֶ�:sequence,N-PDU, extension */
int ipv4_reassembly_enabled;
int ipv6_reassembly_enabled;
}sapp_protocol_feature_t;
@@ -404,29 +405,29 @@ typedef struct{
void *sapp_timer_handle[SAPP_MAX_THREADS];
void *sapp_standalone_timer;
time_t sapp_start_time;
- int deployment_mode_private; /* ��������sapp_global_val->config.packet_io.deployment_mode_binת���õ����ڲ�ֵ,����:NET_CONN_PARALLEL */
- unsigned char create_stream_mode; /* ����ԭ�����߼�, ֵ������stream.tcp.syn_mandatoryת���õ� */
+ int deployment_mode_private; /* ��������sapp_global_val->config.packet_io.deployment_mode_binת���õ����ڲ�ֵ,����:NET_CONN_PARALLEL */
+ unsigned char create_stream_mode; /* ����ԭ�����߼�, ֵ������stream.tcp.syn_mandatoryת���õ� */
int packet_io_cap_level;
sapp_gval_individual_fixed_fs2_t fs2_runtime;
sapp_gval_individual_fixed_fs3_t fs3_runtime;
- pthread_t thread_obtain_id[SAPP_MAX_THREADS]; /* pthread_create���ص�id */
- pid_t thread_tid[SAPP_MAX_THREADS]; /* gdb �� top �鿴��id */
+ pthread_t thread_obtain_id[SAPP_MAX_THREADS]; /* pthread_create���ص�id */
+ pid_t thread_tid[SAPP_MAX_THREADS]; /* gdb �� top �鿴��id */
pthread_t thread_timer_event_id;
pthread_t thread_timer_loop_id;
- int cpu_bind_core_id_per_thread[SAPP_MAX_THREADS]; /* ���������bind_mask, ��¼ÿ��IO�����̰߳󶨵�cpu core id */
+ int cpu_bind_core_id_per_thread[SAPP_MAX_THREADS]; /* ���������bind_mask, ��¼ÿ��IO�����̰߳󶨵�cpu core id */
void *breakpad;
- char overlay_layer_def[__ADDR_TYPE_MAX][SAPP_SUPPORT_LAYER_NUM_MAX]; /* ��ʾ��ԭʼ���Ļ����Ϸ�װ������, ��vxlan, ��Щ�㲻Ӧ�õ��ò��, ��עʱ��Ҫ���⴦�� */
- char prune_layer_def[__ADDR_TYPE_MAX][SAPP_SUPPORT_LAYER_NUM_MAX]; /* ��ʾע���ʱ��Ҫ�����IJ�, ���ڴ�������������ļ�: skip_not_iop_layer, ����vlan, mpls��, ����mirrorģʽ��, ������ע��㲻һ�������绷�� */
+ char overlay_layer_def[__ADDR_TYPE_MAX][SAPP_SUPPORT_LAYER_NUM_MAX]; /* ��ʾ��ԭʼ���Ļ����Ϸ�װ������, ��vxlan, ��Щ�㲻Ӧ�õ��ò��, ��עʱ��Ҫ���⴦�� */
+ char prune_layer_def[__ADDR_TYPE_MAX][SAPP_SUPPORT_LAYER_NUM_MAX]; /* ��ʾע���ʱ��Ҫ�����IJ�, ���ڴ�������������ļ�: skip_not_iop_layer, ����vlan, mpls��, ����mirrorģʽ��, ������ע��㲻һ�������绷�� */
void *under_ddos_handle;
pthread_t gdev_keepalive_log_thread_id;
}sapp_gval_individual_fixed_t;
typedef struct{
- unsigned long long count[SAPP_STAT_NUM_MAX]; /* ������, �����, �½�������, ������������ */
- unsigned long long length[SAPP_STAT_NUM_MAX]; /* ������, �����ݰ����ֽ��� */
+ unsigned long long count[SAPP_STAT_NUM_MAX]; /* ������, �����, �½�������, ������������ */
+ unsigned long long length[SAPP_STAT_NUM_MAX]; /* ������, �����ݰ����ֽ��� */
unsigned long long count_per_layer[__ADDR_TYPE_MAX][SAPP_SUPPORT_LAYER_NUM_MAX];
unsigned long long length_per_layer[__ADDR_TYPE_MAX][SAPP_SUPPORT_LAYER_NUM_MAX];
unsigned long long count_project_in_use[PROJECT_REQ_MAX_PLUG_NUM];
@@ -435,7 +436,7 @@ typedef struct{
typedef struct{
- int stat_count; /* һ��ʱ����, ��¼�����ݰ���ʱ����, time_cost_sum/stat_count��ƽ����ʱ */
+ int stat_count; /* һ��ʱ����, ��¼�����ݰ���ʱ����, time_cost_sum/stat_count��ƽ����ʱ */
int min_time_cost;
int max_time_cost;
long long time_cost_sum;
@@ -448,11 +449,11 @@ typedef struct{
struct __sapp_gval_mthread{
sapp_gval_mthread_sys_stat_t sys_stat;
- unsigned short stream_seq_per_thread; /* ���ڼ���ȫ����ID */
+ unsigned short stream_seq_per_thread; /* ���ڼ���ȫ����ID */
sapp_fuzzy_latency_stat_t fuzzy_pkt_latency_stat_per_thread;
sapp_fuzzy_latency_stat_t fuzzy_pkt_latency_stat_per_entry_per_thread[SAPP_MAX_PLUG_ENTRY_NUM];
- const raw_pkt_t *raw_pkt; /* ��ΪMESA_fakepacket_send_xxxϵ�к���û��raw_pkt����, Ҳû��stream_info, Ϊ����ǰ����, �����޸Ľӿ�, ����ȫ�ֱ������ڴ洢��ǰ�� */
- void *dup_pkt_distinguish_handle; /* ����������ڿ���, inject, ipv4_tcp, ipv4_udp, ��ͬʹ��һ��bloom��� */
+ const raw_pkt_t *raw_pkt; /* ��ΪMESA_fakepacket_send_xxxϵ�к���û��raw_pkt����, Ҳû��stream_info, Ϊ����ǰ����, �����޸Ľӿ�, ����ȫ�ֱ������ڴ洢��ǰ�� */
+ void *dup_pkt_distinguish_handle; /* ����������ڿ���, inject, ipv4_tcp, ipv4_udp, ��ͬʹ��һ��bloom��� */
volatile int destory_env_done; //0:do nothing; 1:doing; 2:done
sapp_mem_used_stat_t mem_used_stat;
}__attribute__ ((aligned (64))); /* for multi-thread, must 64byte alignment */
@@ -461,8 +462,8 @@ typedef struct __sapp_gval_mthread sapp_gval_mthread_t;
struct __sapp_gval_individual_volatile{
volatile int current_state; /* refer to enum sapp_state_t */
- volatile int recv_signal_SIGTERM; /* �յ�SIGTERM�ź�, ���ŵ��˳� */
- sapp_mem_used_stat_t mem_used_stat; /* ȫ�ֱ������ʼ���Ͳ�����ڴ� */
+ volatile int recv_signal_SIGTERM; /* �յ�SIGTERM�ź�, ���ŵ��˳� */
+ sapp_mem_used_stat_t mem_used_stat; /* ȫ�ֱ������ʼ���Ͳ�����ڴ� */
}__attribute__ ((aligned (64)));
typedef struct __sapp_gval_individual_volatile sapp_gval_individual_volatile_t;
@@ -470,17 +471,17 @@ typedef struct __sapp_gval_individual_volatile sapp_gval_individual_volatile_t;
typedef struct{
sapp_cmd_args_val_t **cmd_args_array;
int cmd_args_num;
- char **dumpfie_list_array; /* ����--dumpfile-list����ִ�к�, �õ����ļ��б�, �ַ���ָ������ */
- int slient_mode; /* ��Ĭģʽ, ǰ̨������κ���Ϣ */
+ char **dumpfie_list_array; /* ����--dumpfile-list����ִ�к�, �õ����ļ��б�, �ַ���ָ������ */
+ int slient_mode; /* ��Ĭģʽ, ǰ̨������κ���Ϣ */
}sapp_cla_t;
typedef struct{
sapp_cla_t cla;
sapp_config_t config;
- sapp_gval_individual_fixed_t individual_fixed; /* ��ʼ�����ٸı�ı��� */
- sapp_gval_individual_volatile_t *individual_volatile; /* �����������ʵʱ���µĶ������� */
- sapp_gval_mthread_t *mthread_volatile[SAPP_MAX_THREADS]; /* �����������ʵʱ���µĶ��̱߳��� */
+ sapp_gval_individual_fixed_t individual_fixed; /* ��ʼ�����ٸı�ı��� */
+ sapp_gval_individual_volatile_t *individual_volatile; /* �����������ʵʱ���µĶ������� */
+ sapp_gval_mthread_t *mthread_volatile[SAPP_MAX_THREADS]; /* �����������ʵʱ���µĶ��̱߳��� */
}sapp_global_t;
extern embed_layer_t g_stream_compare_layer_set;
diff --git a/src/config/config_parse.cpp b/src/config/config_parse.cpp
index 6977080..5b7d0f4 100644
--- a/src/config/config_parse.cpp
+++ b/src/config/config_parse.cpp
@@ -1766,6 +1766,7 @@ int sapp_parse_config(void)
tomlc99_wrap_load_int_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"stream.tcp", (char *)"timeout", (int *)&pconfig->stream.tcp.timeout, 180);
tomlc99_wrap_load_int_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"stream.tcp", (char *)"syn_mandatory", (int *)&pconfig->stream.tcp.syn_mandatory, 1);
tomlc99_wrap_load_int_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"stream.tcp", (char *)"reorder_pkt_max", (int *)&pconfig->stream.tcp.reorder_pkt_max, 5);
+ tomlc99_wrap_load_int_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"stream.tcp", (char *)"reorder_on_closing", (int *)&pconfig->stream.tcp.reorder_on_closing, 1);
tomlc99_wrap_load_int_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"stream.tcp", (char *)"analyse_option_enabled", (int *)&pconfig->stream.tcp.analyse_option_enabled, 1);
tomlc99_wrap_load_int_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"stream.tcp", (char *)"tuple4_reuse_time_interval", (int *)&pconfig->stream.tcp.tuple4_reuse_time_interval, 30);
tomlc99_wrap_load_int_def(ABBR_CFG_FILE_MAIN_ENTRY, (char *)"stream.tcp", (char *)"meaningful_statistics_minimum_pkt", (int *)&pconfig->stream.tcp.meaningful_statistics_minimum_pkt, 3);
diff --git a/src/dealpkt/deal_tcp.c b/src/dealpkt/deal_tcp.c
index 1ef5b48..5a4b72a 100644
--- a/src/dealpkt/deal_tcp.c
+++ b/src/dealpkt/deal_tcp.c
@@ -2201,7 +2201,7 @@ static int tcp_deal_unorder(struct streamindex *pindex,struct streaminfo *a_tcp,
{
pdetail_pr->flow_stat->S2C_ooorder_pkt++;
}
- if(orderflag==CHECK_ORDER_DATA)
+ if(orderflag==CHECK_ORDER_DATA || sapp_global_val->config.stream.tcp.reorder_on_closing == 1)
{
stream_process_tcp(a_tcp,unorder_packet->this_ip_hdr, unorder_packet->this_tcp_hdr, &(unorder_packet->raw_pkt),&(pdetail_pr->apme),&(a_tcp->opstate));
}
@@ -2249,7 +2249,7 @@ static int tcp_deal_unorder(struct streamindex *pindex,struct streaminfo *a_tcp,
{
pdetail_pr->flow_stat->S2C_ooorder_pkt++;
}
- if(orderflag==CHECK_ORDER_DATA)
+ if(orderflag==CHECK_ORDER_DATA || sapp_global_val->config.stream.tcp.reorder_on_closing == 1)
{
ret=stream_process_tcp(a_tcp,unorder_packet->this_ip_hdr,unorder_packet->this_tcp_hdr,&(unorder_packet->raw_pkt),&(pdetail_pr->apme),&(a_tcp->opstate));
}