Changeset 1063

Show
Ignore:
Timestamp:
06/26/07 14:46:33 (6 years ago)
Author:
ahu
Message:

make dnsreplay work on non-recursive packets, plus make it recognize root-referrals

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/pdns/pdns/dnsreplay-mindex.cc

    r895 r1063  
    7878    d-=(int)d; 
    7979 
    80     ret.tv_usec=1000000*d; 
     80    ret.tv_usec=(unsigned int)(1000000*d); 
    8181    normalizeTV(ret); 
    8282     
     
    245245 
    246246set<pair<string,uint16_t> > s_origbetterset; 
     247 
     248bool isRootReferral(const MOADNSParser::answers_t& answers) 
     249{ 
     250  if(answers.empty()) 
     251    return false; 
     252 
     253  bool ok=true; 
     254  for(MOADNSParser::answers_t::const_iterator iter = answers.begin(); iter != answers.end(); ++iter) { 
     255    //    cerr<<(int)iter->first.d_place<<", "<<iter->first.d_label<<" "<<iter->first.d_type<<", # "<<answers.size()<<endl; 
     256    if(iter->first.d_place!=2) 
     257      ok=false; 
     258    if(iter->first.d_label!="." || iter->first.d_type!=QType::NS) 
     259      ok=false; 
     260  } 
     261  return ok; 
     262} 
    247263 
    248264void measureResultAndClean(const QuestionIdentifier& qi) 
     
    282298      s_webetter++; 
    283299    } 
    284     if(isRcodeOk(qd.d_origRcode) && !isRcodeOk(qd.d_newRcode)) { 
     300    if(isRcodeOk(qd.d_origRcode) && !isRcodeOk(qd.d_newRcode) && !isRootReferral(qd.d_origAnswers)) { 
    285301      if(!s_quiet) 
    286302        cout<<"\t* orig better *"<<endl; 
    287303      s_origbetter++; 
    288       s_origbetterset.insert(make_pair(qi.d_qname, qi.d_qtype)); 
     304      if(s_origbetterset.insert(make_pair(qi.d_qname, qi.d_qtype)).second) { 
     305        cout<<"orig better: " << qi.d_qname<<" "<< qi.d_qtype<<endl; 
     306      } 
    289307    } 
    290308 
     
    452470void sendPacketFromPR(PcapPacketReader& pr, const IPEndpoint& remote) 
    453471{ 
    454   static struct timeval lastsent; 
     472  //  static struct timeval lastsent; 
    455473 
    456474  dnsheader* dh=(dnsheader*)pr.d_payload; 
    457475  //                                                             non-recursive   
    458   if((ntohs(pr.d_udp->uh_dport)!=53 && ntohs(pr.d_udp->uh_sport)!=53) || !dh->rd || (unsigned int)pr.d_len <= sizeof(dnsheader)) 
     476  if((ntohs(pr.d_udp->uh_dport)!=53 && ntohs(pr.d_udp->uh_sport)!=53) || dh->rd || (unsigned int)pr.d_len <= sizeof(dnsheader)) 
    459477    return; 
     478 
    460479  QuestionData qd; 
    461480  try { 
     
    576595    gettimeofday(&now, 0); 
    577596 
    578     mental_time= mental_time + 1*(now-then); 
     597    mental_time= mental_time + 1 * (now-then); 
    579598  } 
    580599 out:;