diff options
| -rw-r--r-- | .gitignore | 3 | ||||
| -rwxr-xr-x | clean.sh | 2 | ||||
| -rw-r--r-- | src/tcpreplay.c | 24 | ||||
| -rw-r--r-- | src/tcpreplay.h | 2 |
4 files changed, 27 insertions, 4 deletions
@@ -1,3 +1,6 @@ tcpburst .vscode .DS_Store +GPATH +GRTAGS +GTAGS @@ -1,3 +1,3 @@ make clean make distclean -rm tcpburst clean +rm clean diff --git a/src/tcpreplay.c b/src/tcpreplay.c index d457cd1..000e631 100644 --- a/src/tcpreplay.c +++ b/src/tcpreplay.c @@ -1565,7 +1565,7 @@ static const u_char *find_iphdr(const u_char *pkt, size_t pktlen, const u_char * return -1; } - if(pktlen > TCP_BURST_MTU){ + if(pktlen > TCP_BURST_MTU || pktlen > options.max_burst_pkt_len || pktlen < options.min_burst_pkt_len){ //fprintf(stderr, "Tcpburst error! Packet too long:%d, current MTU is:%d\n", pktlen, TCP_BURST_MTU); return -1; } @@ -1960,10 +1960,28 @@ init(void) options.pkt_distance = 0; options.driver_mode = "pcap"; /* default mode is pcap */ options.encap_cfg_file = NULL; + char *env_var = getenv("MAX_BURST_PKTLEN"); + if(env_var != NULL) + { + options.max_burst_pkt_len = atoi(env_var); + } + else + { + options.max_burst_pkt_len = TCP_BURST_MTU; + } + env_var = getenv("MIN_BURST_PKTLEN"); + if(env_var != NULL) + { + options.min_burst_pkt_len = atoi(env_var); + } + else + { + options.min_burst_pkt_len = 0; + } #endif - if (fcntl(STDERR_FILENO, F_SETFL, O_NONBLOCK) < 0) - warnx("Unable to set STDERR to non-blocking: %s", strerror(errno)); + if (fcntl(STDERR_FILENO, F_SETFL, O_NONBLOCK) < 0) + warnx("Unable to set STDERR to non-blocking: %s", strerror(errno)); } /** diff --git a/src/tcpreplay.h b/src/tcpreplay.h index 86a5c53..a2e46d0 100644 --- a/src/tcpreplay.h +++ b/src/tcpreplay.h @@ -120,6 +120,8 @@ struct tcpreplay_opt_s { long cpu_mask; char *encap_cfg_file; /* �ײ��װģʽ */ + int max_burst_pkt_len; + int min_burst_pkt_len; #endif }; |
