]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
make dnsreplay and other pcap based tools work on systems with 64 bit gettimeofday
authorBert Hubert <bert.hubert@netherlabs.nl>
Sat, 29 Mar 2008 13:46:59 +0000 (13:46 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Sat, 29 Mar 2008 13:46:59 +0000 (13:46 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1175 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/dnspcap.hh
pdns/dnsreplay.cc

index 7440f9b29557c4934b2be041b38416bf6eb1395d..9594700d2f37393622defab34989ac91bb14e09d 100644 (file)
@@ -26,8 +26,14 @@ struct pdns_pcap_file_header {
 };
 
 
+struct pdns_timeval
+{
+  uint32_t tv_sec;
+  uint32_t tv_usec;
+};
+
 struct pdns_pcap_pkthdr {
-  struct timeval ts;      /* time stamp */
+  struct pdns_timeval ts;      /* time stamp */
   uint32_t caplen;     /* length of portion present */
   uint32_t len;        /* length this packet (off wire) */
 };
index 6791b36974d0088e913c44df0ebcc835d79935bd..e0c06a1d4de1f3524783cc47b90cf29259d1e59c 100644 (file)
@@ -397,7 +397,7 @@ void pruneQids()
   gettimeofday(&now, 0);
 
   for(qids_t::iterator i=qids.begin(); i!=qids.end(); ) {
-    if(DiffTime(i->d_resentTime, now) < 60)
+    if(DiffTime(i->d_resentTime, now) < 10)
       ++i;
     else {
       s_idmanager.releaseID(i->d_assignedID);
@@ -458,8 +458,6 @@ Orig    9           21      29     36         47        57       66    72
   cerr<<(datafmt % "Orig"   % s_questions % origWaitingFor  % s_orignever  % s_origanswers % 0 % s_origtimedout  % 0 % 0);
   cerr<<(datafmt % "Refer." % s_questions % weWaitingFor    % s_wenever    % s_weanswers   % 0 % s_wetimedout    % 0 % 0);
 
-
-
   cerr<<weWaitingFor<<" queries that could still come in on time, "<<qids.size()<<" outstanding"<<endl;
   
   cerr<<"we late: "<<s_wetimedout<<", orig late: "<< s_origtimedout<<", "<<s_questions<<" questions sent, "<<s_origanswers
@@ -529,7 +527,7 @@ bool sendPacketFromPR(PcapPacketReader& pr, const IPEndpoint& remote)
          s_norecursionavailable++;
          qd.d_norecursionavailable=true;
        }
-       qids.replace(i,qd);
+       qids.replace(i, qd);
 
        if(qd.d_newRcode!=-1) {
          //        cout<<"Removing entry "<<qi<<", is done [in main loop]"<<endl;
@@ -581,11 +579,9 @@ try
   p.add("target-ip", 1);
   p.add("target-port", 1);
 
-
   po::store(po::command_line_parser(argc, argv).options(alloptions).positional(p).run(), g_vm);
   po::notify(g_vm);
 
-
   reportAllTypes();
 
   if (g_vm.count("help")) {
@@ -630,18 +626,23 @@ try
     if(!((once++)%100)) 
       houseKeeping();
     
-    while(pr.d_pheader.ts < mental_time) {
+    struct timeval packet_ts;
+    packet_ts.tv_sec = 0; 
+    packet_ts.tv_usec = 0; 
+    while(packet_ts < mental_time) {
       if(!pr.getUDPPacket())
        goto out;
       
+      packet_ts.tv_sec = pr.d_pheader.ts.tv_sec;
+      packet_ts.tv_usec = pr.d_pheader.ts.tv_usec;
+
       if(sendPacketFromPR(pr, remote))
        count++;
     } 
-
     if(packetLimit && count > packetLimit) 
       break;
 
-    mental_time=pr.d_pheader.ts;
+    mental_time=packet_ts;
     struct timeval then, now;
     gettimeofday(&then,0);