소스 검색

fixed clear bug,add option random-drop

wangyu- 8 년 전
부모
커밋
54f32f0611
4개의 변경된 파일23개의 추가작업 그리고 0개의 파일을 삭제
  1. 2 0
      connection.cpp
  2. 12 0
      misc.cpp
  3. 7 0
      network.cpp
  4. 2 0
      network.h

+ 2 - 0
connection.cpp

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

+ 12 - 0
misc.cpp

@@ -236,6 +236,7 @@ void process_arg(int argc, char *argv[])  //process all options
 		{"seq-mode", required_argument,    0, 1},
 		{"conf-file", required_argument,   0, 1},
 		{"force-sock-buf", no_argument,   0, 1},
+		{"random-drop", required_argument,    0, 1},
 		{NULL, 0, 0, 0}
 	  };
 
@@ -558,10 +559,21 @@ void process_arg(int argc, char *argv[])  //process all options
 					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)
 			{
 				mylog(log_info,"configuration loaded from %s\n",optarg);
 			}
+
 			else
 			{
 				mylog(log_warn,"ignored unknown long option ,option_index:%d code:<%x>\n",option_index, optopt);

+ 7 - 0
network.cpp

@@ -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 max_seq_mode=4;
+int random_drop=0;
 
 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)
 {
+	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 &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);

+ 2 - 0
network.h

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