]> sjero.net Git - dccp2tcp/commitdiff
Option to only show Ack Vectors/SACKS with loss
authorSamuel Jero <sj323707@ohio.edu>
Wed, 25 May 2011 04:48:35 +0000 (00:48 -0400)
committerSamuel Jero <sj323707@ohio.edu>
Wed, 25 May 2011 04:48:35 +0000 (00:48 -0400)
Binding is double -s command line option.
Useful to see loss events

ChangeLog
README
dccp2tcp.c

index 4341700e36efd351c03055e83bfb1865484b6860..85137824a287637d124f7619fb4069fcdda0cf07 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+05/25/2011:
+       Release 1.4:
+       Improvements:
+       1)Add double -s option to only show Ack Vectors/SACKS with loss events
+
+
 05/15/2011:
        Release 1.3
        Improvements:
                 +Ethernet
                 +Linux Cooked Capture (SLL)
                 +IPv4
+
        
 02/01/2011:
        Release 1.2
        Bug Fixes:
        1)Sequence number adjustments so that Tcptrace RTT graphing/statistics now work
 
+
 01/19/2011:
        Release 1.1
        Bug Fixes:
diff --git a/README b/README
index 2001e5c8137c29538698b3534e251c12058bb3fd..4364d412ac05d37971adac9904554ac7edcd6982 100644 (file)
--- a/README
+++ b/README
@@ -20,7 +20,7 @@ dccp2tcp dccp_file tcp_file [-d] [-y] [-g] [-s]
        -d is debug
        -y shifts the window line in tcptrace (yellow) to the highest received acknowledgment. Normally this line is just a constant amount more than the ack number(i.e. useless).
        -g shifts the ack line in tcptrace (green) to the highest received acknowledgment. Normally this line is the standard TCP ack number, which, for DCCP, translates to the highest contiguous acknowledgement in the ack vector.
-       -s converts the DCCP ack vector to TCP SACKS.
+       -s converts the DCCP ack vector to TCP SACKS. Specify -s twice to only see those Ack vectors with a loss interval in them. This is convenient way to see loss events.
 
 For typical usage, you probably just want -s.
 
index 94bc7dd7bd1be7e78189cd978394a1124f6c7558..0ed79a50fed94afe1ef42c6929ea5701ace9d266 100644 (file)
@@ -80,7 +80,7 @@ int main(int argc, char *argv[])
                                green=1;
                        }
                        if(argv[i][1]=='s' && strlen(argv[i])==2){ /*sack option*/
-                               sack=1;
+                               sack++;
                        }
                }
        }
@@ -293,7 +293,9 @@ int convert_packet(struct pcap_pkthdr *h, u_char **nptr, int *nlength, const u_c
                                tcph->window=htons(-interp_ack_vect((u_char*)dccph)*acked_packet_size(s2, ntohl(dccphack->dccph_ack_nr_low)));
                        }
                        if(sack){
-                               ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               if(sack!=2 || interp_ack_vect((u_char*)dccph)){
+                                       ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               }
                        }
                }else if(s1 && s2 && dccph->dccph_sport==s2->addr){
                        if(green){
@@ -306,7 +308,10 @@ int convert_packet(struct pcap_pkthdr *h, u_char **nptr, int *nlength, const u_c
                                tcph->window=htons(-interp_ack_vect((u_char*)dccph)*acked_packet_size(s1, ntohl(dccphack->dccph_ack_nr_low)));
                        }
                        if(sack){
-                               ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               if(sack!=2 || interp_ack_vect((u_char*)dccph)){
+                                       ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+
+                               }
                        }
                }
 
@@ -339,7 +344,9 @@ int convert_packet(struct pcap_pkthdr *h, u_char **nptr, int *nlength, const u_c
                                }
                        }
                        if(sack){
-                               ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               if(sack!=2 || interp_ack_vect((u_char*)dccph)){
+                                       ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               }
                        }
                }else if(s1 && s2 && dccph->dccph_sport==s2->addr){
                        if(green){
@@ -355,7 +362,9 @@ int convert_packet(struct pcap_pkthdr *h, u_char **nptr, int *nlength, const u_c
                                }
                        }
                        if(sack){
-                               ack_vect2sack(s1, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               if(sack!=2 || interp_ack_vect((u_char*)dccph)){
+                                       ack_vect2sack(s1, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               }
                        }
                }
 
@@ -386,7 +395,9 @@ int convert_packet(struct pcap_pkthdr *h, u_char **nptr, int *nlength, const u_c
                                tcph->window=htons(-interp_ack_vect((u_char*)dccph)*acked_packet_size(s2, ntohl(dccphack->dccph_ack_nr_low)));
                        }
                        if(sack){
-                               ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               if(sack!=2 || interp_ack_vect((u_char*)dccph)){
+                                       ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               }
                        }
                }else if(s1 && s2 && dccph->dccph_sport==s2->addr){
                        if(green){
@@ -399,7 +410,9 @@ int convert_packet(struct pcap_pkthdr *h, u_char **nptr, int *nlength, const u_c
                                tcph->window=htons(-interp_ack_vect((u_char*)dccph)*acked_packet_size(s1, ntohl(dccphack->dccph_ack_nr_low)));
                        }
                        if(sack){
-                               ack_vect2sack(s1, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               if(sack!=2 || interp_ack_vect((u_char*)dccph)){
+                                       ack_vect2sack(s1, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               }
                        }
                }
 
@@ -425,7 +438,9 @@ int convert_packet(struct pcap_pkthdr *h, u_char **nptr, int *nlength, const u_c
                                tcph->window=htons(-interp_ack_vect((u_char*)dccph)*acked_packet_size(s2, ntohl(dccphack->dccph_ack_nr_low)));
                        }
                        if(sack){
-                               ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               if(sack!=2 || interp_ack_vect((u_char*)dccph)){
+                                       ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               }
                        }
                }else if(s1 && s2 && dccph->dccph_sport==s2->addr){
                        if(green){
@@ -438,7 +453,9 @@ int convert_packet(struct pcap_pkthdr *h, u_char **nptr, int *nlength, const u_c
                                tcph->window=htons(-interp_ack_vect((u_char*)dccph)*acked_packet_size(s1, ntohl(dccphack->dccph_ack_nr_low)));
                        }
                        if(sack){
-                               ack_vect2sack(s1, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               if(sack!=2 || interp_ack_vect((u_char*)dccph)){
+                                       ack_vect2sack(s1, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               }
                        }
                }
 
@@ -466,7 +483,9 @@ int convert_packet(struct pcap_pkthdr *h, u_char **nptr, int *nlength, const u_c
                                tcph->window=htons(0);
                        }
                        if(sack){
-                               ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               if(sack!=2 || interp_ack_vect((u_char*)dccph)){
+                                       ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               }
                        }
                }else if(s1 && s2 && dccph->dccph_sport==s2->addr){
                        if(green){
@@ -481,7 +500,9 @@ int convert_packet(struct pcap_pkthdr *h, u_char **nptr, int *nlength, const u_c
                                tcph->window=htons(0);
                        }
                        if(sack){
-                               ack_vect2sack(s1, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               if(sack!=2 || interp_ack_vect((u_char*)dccph)){
+                                       ack_vect2sack(s1, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               }
                        }
                }
 
@@ -509,7 +530,9 @@ int convert_packet(struct pcap_pkthdr *h, u_char **nptr, int *nlength, const u_c
                                tcph->window=htons(0);
                        }
                        if(sack){
-                               ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low));
+                               if(sack!=2 || interp_ack_vect((u_char*)dccph)){
+                                       ack_vect2sack(s2, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low));
+                               }
                        }
                }else if(s1 && s2 && dccph->dccph_sport==s2->addr){
                        if(green){
@@ -524,7 +547,9 @@ int convert_packet(struct pcap_pkthdr *h, u_char **nptr, int *nlength, const u_c
                                tcph->window=htons(0);
                        }
                        if(sack){
-                               ack_vect2sack(s1, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               if(sack!=2 || interp_ack_vect((u_char*)dccph)){
+                                       ack_vect2sack(s1, tcph, tcpopt, (u_char*)dccph, ntohl(dccphack->dccph_ack_nr_low) );
+                               }
                        }
                }
 
@@ -547,7 +572,8 @@ return 1;
 }
 
 
-/*Parse Ack Vector Options*/
+/*Parse Ack Vector Options
+ * Returns the Number of packets since last recorded loss*/
 unsigned int interp_ack_vect(u_char* hdr)
 {
        int hdrlen=((struct dccp_hdr*)hdr)->dccph_doff*4;