fixed clear bug,add option random-drop

This commit is contained in:
wangyu- 2017-10-11 09:10:38 -05:00
parent dcde8828c4
commit 54f32f0611
4 changed files with 23 additions and 0 deletions

@ -219,6 +219,7 @@ conv_manager_t::~conv_manager_t()
} }
cnt++; cnt++;
} }
clear_it=it;
return 0; return 0;
} }
@ -451,6 +452,7 @@ int conn_manager_t::clear_inactive0()
} }
cnt++; cnt++;
} }
clear_it=it;
return 0; return 0;
} }

@ -236,6 +236,7 @@ void process_arg(int argc, char *argv[]) //process all options
{"seq-mode", required_argument, 0, 1}, {"seq-mode", required_argument, 0, 1},
{"conf-file", required_argument, 0, 1}, {"conf-file", required_argument, 0, 1},
{"force-sock-buf", no_argument, 0, 1}, {"force-sock-buf", no_argument, 0, 1},
{"random-drop", required_argument, 0, 1},
{NULL, 0, 0, 0} {NULL, 0, 0, 0}
}; };
@ -558,10 +559,21 @@ void process_arg(int argc, char *argv[]) //process all options
myexit(-1); myexit(-1);
} }
} }
else if(strcmp(long_options[option_index].name,"random-drop")==0)
{
sscanf(optarg,"%d",&random_drop);
if(random_drop<0||random_drop>10000)
{
mylog(log_fatal,"random_drop must be between 0 10000 \n");
myexit(-1);
}
mylog(log_info,"random_drop =%d \n",random_drop);
}
else if(strcmp(long_options[option_index].name,"conf-file")==0) else if(strcmp(long_options[option_index].name,"conf-file")==0)
{ {
mylog(log_info,"configuration loaded from %s\n",optarg); mylog(log_info,"configuration loaded from %s\n",optarg);
} }
else else
{ {
mylog(log_warn,"ignored unknown long option ,option_index:%d code:<%x>\n",option_index, optopt); mylog(log_warn,"ignored unknown long option ,option_index:%d code:<%x>\n",option_index, optopt);

@ -15,6 +15,7 @@ u32_t link_level_header_len=0;//set it to 14 if SOCK_RAW is used in socket(PF_PA
int seq_mode=3; int seq_mode=3;
int max_seq_mode=4; int max_seq_mode=4;
int random_drop=0;
int filter_port=-1; int filter_port=-1;
@ -1623,6 +1624,12 @@ int recv_raw_tcp_deprecated(packet_info_t &info,char * &payload,int &payloadlen)
}*/ }*/
int send_raw0(raw_info_t &raw_info,const char * payload,int payloadlen) int send_raw0(raw_info_t &raw_info,const char * payload,int payloadlen)
{ {
if (random_drop != 0) {
if (get_true_random_number() % 10000 < (u32_t) random_drop) {
return 0;
}
}
packet_info_t &send_info=raw_info.send_info; packet_info_t &send_info=raw_info.send_info;
packet_info_t &recv_info=raw_info.recv_info; packet_info_t &recv_info=raw_info.recv_info;
mylog(log_trace,"send_raw : from %x %d to %x %d\n",send_info.src_ip,send_info.src_port,send_info.dst_ip,send_info.dst_port); mylog(log_trace,"send_raw : from %x %d to %x %d\n",send_info.src_ip,send_info.src_port,send_info.dst_ip,send_info.dst_port);

@ -21,6 +21,8 @@ extern int lower_level_manual;
extern char if_name[100]; extern char if_name[100];
extern unsigned char dest_hw_addr[]; extern unsigned char dest_hw_addr[];
extern int random_drop;
extern int ifindex; extern int ifindex;
struct icmphdr struct icmphdr