- Timestamp:
- Oct 7, 2010, 11:16:52 PM (15 years ago)
- Location:
- trunk/AddOn/TAcq
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AddOn/TAcq/brparam.cc
r3899 r3901 137 137 ethr_nlink=0; 138 138 ethr_forcesamefc_=false; 139 ethr_sfc_maxdpc_= 50;140 ethr_sfc_maxresync_= 50;139 ethr_sfc_maxdpc_=0; 140 ethr_sfc_maxresync_=0; 141 141 ethr_waitendmsg_=false; 142 142 … … 262 262 if (conf.HasKey("ethrforcesamefc")) { 263 263 ethr_forcesamefc_=true; // force SAME FrameCounter on all links 264 ethr_sfc_maxdpc_=conf.IParam("ethrforcesamefc",0, 50);265 ethr_sfc_maxresync_=conf.IParam("ethrforcesamefc",1, 50);264 ethr_sfc_maxdpc_=conf.IParam("ethrforcesamefc",0,0); 265 ethr_sfc_maxresync_=conf.IParam("ethrforcesamefc",1,0); 266 266 } 267 267 if (conf.HasKey("ethrwaitendmsg")) ethr_waitendmsg_=true; -
trunk/AddOn/TAcq/racqueth.cc
r3900 r3901 466 466 bool fgok=true; 467 467 while (fgok&&(totnpaqrd_<par_.MaxNbPaquets())) { 468 if (stop_) break; 468 if (stop_) { 469 if (prtlev_>0) 470 cout << ">S>S>S> EthernetReader::run() / Stopping, through Stop() method" << endl; 471 stopreason_="EthernetReader::run() / Stopping, through Stop() method"; 472 break; 473 } 469 474 if ( MoveToNextTarget() ) { 470 475 cout << "EthernetReader::run()/Error-A- MoveToNextTarget() returned true ->STOP 9" << endl; … … 485 490 << totsamefc_ << " / NPaqFib0Read=" << totnpqrd_[0] 486 491 << " FracSameFC=" << 100*totsamefc_/totnpqrd_[0] << " %" << endl; 492 } 493 if (totnpaqrd_>=par_.MaxNbPaquets()) { 494 if (prtlev_>0) 495 cout << ">S>S>S> EthernetReader::run() / Stopping, totnpaqrd_>=par_.MaxNbPaquets()" << endl; 496 stopreason_="EthernetReader::run() / Stopping, totnpaqrd_>=par_.MaxNbPaquets()"; 487 497 } 488 498 } … … 537 547 bool EthernetReader::ReadNextAllFibers() 538 548 { 539 if (SkipAndSyncLinks()>8) return true; 540 549 if (sfc_maxresync_>0) return ReadNextAllFibersWithSync(); 550 551 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { 552 if (ReadNext(fib)) return true; // probleme 553 } 554 if (!rdsamefc_ || (memgr_.NbFibres()<2)) { 555 uint_8 cfc=curfc_[0]; 556 bool fgsamefc=true; 557 for(size_t fib=1; fib<memgr_.NbFibres(); fib++) { 558 if (curfc_[fib]!=cfc) fgsamefc=false; 559 } 560 if (fgsamefc) totsamefc_++; 561 return false; // c'est OK 562 } 563 // On va essayer de lire jusqu'a avoir same_frame_counter 564 uint_8 cfc=curfc_[0]; 565 bool fgsamefc=true; 566 for(size_t fib=1; fib<memgr_.NbFibres(); fib++) { 567 if (curfc_[fib]!=cfc) { 568 fgsamefc=false; 569 if (curfc_[fib] > cfc) cfc=curfc_[fib]; 570 } 571 } 572 if (fgsamefc) { 573 totsamefc_++; return false; // c'est OK , same framecounter 574 } 575 else { // else !fgsame 576 bool encorerd=true; 577 uint_4 ntrd=0; 578 while(encorerd) { 579 encorerd=false; 580 for(uint_4 fib=0; fib<memgr_.NbFibres(); fib++) { 581 if (curfc_[fib]>=cfc) continue; 582 if (ReadNext(fib)) return true; // probleme 583 encorerd=true; 584 } 585 ntrd++; 586 if (ntrd>sfc_maxdpc_) { 587 if (prtlev_>0) 588 cout << ">S>S>S> EthernetReader::ReadNextAllFibers(" << fib << ")/ Stopping, Nb_ReadNext=" 589 << ntrd << " > sfc_maxdpc_" << endl; 590 stopreason_="ReadNextAllFibers() StopReason: failed to get SameFC Nb_ReadNext>sfc_maxdpc_"; 591 return true; 592 } 593 } 594 } // fin de else !fgsame 595 596 return true; // probleme 597 } 598 599 /* --Methode-- */ 600 bool EthernetReader::ReadNext(int fib) 601 { 602 bool fggood=false; 603 while(!fggood) { 604 ReceiveFromSocket(fib, (char *)vpaq_[fib].Begin(), packsize_); 605 if (vec_fgsokend_[fib]) { // fin de reception sur le lien 606 if (prtlev_>0) 607 cout << ">S>S>S> EthernetReader::ReadNext(" << fib << ")/ Stopping, reason EndReceive fgsokend_=" 608 << vec_fgsokend_[fib] << endl; 609 stopreason_="ReadNext() StopReason: EndReceive signaled on link"; 610 return true; 611 } 612 totnbytesrd_+=packsize_; 613 totnpqrd_[fib]++; 614 fggood = vpchk_[fib].Check(vpaq_[fib],curfc_[fib]); 615 } 616 totnpqok_[fib]++; 617 return false; 618 } 619 620 /* --Methode-- */ 621 void EthernetReader::CleanUpAllSockets() 622 { 623 bool fgallfinished=false; 624 while (!fgallfinished) { 625 fgallfinished=true; 626 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { 627 if (vec_fgsokend_[fib]>0) continue; 628 ReceiveFromSocket(fib,dummybuff_,packsize_); 629 fgallfinished=false; 630 } 631 } 632 return; 633 } 634 635 /* --Methode-- */ 636 size_t EthernetReader::ReceiveFromSocket(int fib, char* data, size_t len) 637 { 638 size_t rc =0; 639 if (vec_fgsokend_[fib]) { // la lecture est finie 640 memset(data, 0, len); 641 return 0; 642 } 643 644 if (vec_cntpaq_[fib]%memgr_.NbPaquets() == 0) { 645 char msg[BRTCPMSGLEN2]; 646 msg[0]='\0'; 647 vsok_[fib].ReceiveAll(msg, BRTCPMSGLEN2); 648 // if (strncmp(msg,"PCIEToEthernet-SendCnt",22) != 0) 649 // cout << " EthernetReader::ReceiveFromSocket/ BAD HandShake message : " << msg << endl; 650 bool fgbadhsm=true; 651 if (strncmp(msg,"PCIEToEthernet-Send",19)==0) { 652 if (strncmp(msg+19,"Cnt",3)==0) fgbadhsm=false; 653 else if (strncmp(msg+19,"-END",4)==0) { 654 fgbadhsm=false; 655 vec_fgsokend_[fib]=1; gl_fgsokend=true; 656 //DBG cout << "ReceiveFromSocket/DEBUG -END msg received " << endl; 657 if (prtlev_>2) 658 cout << " EthernetReader::ReceiveFromSocket/ Receive on LinkNo" << fib << " Ended OK" << endl; 659 } 660 } 661 if (fgbadhsm) { 662 cout << " EthernetReader::ReceiveFromSocket/ BAD HandShake, LinkNo " << fib << " msg: " << msg << endl; 663 vec_fgsokend_[fib]=2; 664 } 665 } 666 667 if (vec_fgsokend_[fib]>0) { // la lecture est finie 668 memset(data, 0, len); 669 return 0; 670 } 671 672 rc += vsok_[fib].ReceiveAll(data, len); 673 vec_cntpaq_[fib]++; 674 675 #ifdef BR_DO_HANDSHAKE 676 // Envoi de message de hand-shake 677 if (vec_cntpaq_[fib]%memgr_.NbPaquets() == 0) { 678 char msg[BRTCPMSGLEN2]; 679 sprintf(msg,"EthernetReader-RecvCnt %d",vec_cntpaq_[fib]); 680 vsok_[fib].SendAll(msg, BRTCPMSGLEN2); 681 //DBG cout << " ReceiveFromSocket/DEBUG-B msg=" << msg << endl; 682 } 683 #endif 684 return rc; 685 } 686 687 /* --Methode-- */ 688 bool EthernetReader::ReadNextAllFibersWithSync() 689 { 690 if (rdsamefc_&&(sfc_maxresync_>0)) { 691 if (SkipAndSyncLinks()>8) return true; 692 } 541 693 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { 542 694 if (ReadNext(fib)) return true; // probleme … … 557 709 if (nbechec>sfc_maxresync_) { 558 710 if (prtlev_>0) 559 cout << ">S>S>S> EthernetReader::ReadNextAllFibers ()/ Stopping, reason NbEchec>(NbMax_Resync="711 cout << ">S>S>S> EthernetReader::ReadNextAllFibersWithSync()/ Stopping, reason NbEchec>(NbMax_Resync=" 560 712 << sfc_maxresync_ << ")" << endl; 561 stopreason_="ReadNextAllFibers () , StopReason: NbEchec>NbMax_Resyn";713 stopreason_="ReadNextAllFibersWithSync() , StopReason: NbEchec>NbMax_Resyn"; 562 714 return true; 563 715 } … … 574 726 } 575 727 else { // else !fgsame 576 if (nbechec>sfc_maxresync_) return true;577 728 if (nbechec>0) { 578 729 int rcres=SkipAndSyncLinks(); … … 596 747 597 748 if (prtlev_>5) 598 cout << " EthernetReader::ReadNextAllFibers ()/DEBUG NbEchec=" << nbechec749 cout << " EthernetReader::ReadNextAllFibersWithSync()/DEBUG NbEchec=" << nbechec 599 750 << " cfc=" << cfc << endl; 600 751 … … 605 756 } 606 757 } 758 607 759 nbechec++; 608 760 } // fin de else !fgsame … … 610 762 611 763 return true; // probleme 612 }613 614 /* --Methode-- */615 bool EthernetReader::ReadNext(int fib)616 {617 bool fggood=false;618 while(!fggood) {619 ReceiveFromSocket(fib, (char *)vpaq_[fib].Begin(), packsize_);620 if (vec_fgsokend_[fib]) { // fin de reception sur le lien621 if (prtlev_>0)622 cout << ">S>S>S> EthernetReader::ReadNext(" << fib << ")/ Stopping, reason EndReceive fgsokend_="623 << vec_fgsokend_[fib] << endl;624 stopreason_="ReadNext() StopReason: EndReceive signaled on link";625 return true;626 }627 totnbytesrd_+=packsize_;628 totnpqrd_[fib]++;629 fggood = vpchk_[fib].Check(vpaq_[fib],curfc_[fib]);630 }631 totnpqok_[fib]++;632 return false;633 }634 635 /* --Methode-- */636 void EthernetReader::CleanUpAllSockets()637 {638 bool fgallfinished=false;639 while (!fgallfinished) {640 fgallfinished=true;641 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {642 if (vec_fgsokend_[fib]>0) continue;643 ReceiveFromSocket(fib,dummybuff_,packsize_);644 fgallfinished=false;645 }646 }647 return;648 }649 650 /* --Methode-- */651 size_t EthernetReader::ReceiveFromSocket(int fib, char* data, size_t len)652 {653 size_t rc =0;654 if (vec_fgsokend_[fib]) { // la lecture est finie655 memset(data, 0, len);656 return 0;657 }658 659 if (vec_cntpaq_[fib]%memgr_.NbPaquets() == 0) {660 char msg[BRTCPMSGLEN2];661 msg[0]='\0';662 vsok_[fib].ReceiveAll(msg, BRTCPMSGLEN2);663 // if (strncmp(msg,"PCIEToEthernet-SendCnt",22) != 0)664 // cout << " EthernetReader::ReceiveFromSocket/ BAD HandShake message : " << msg << endl;665 bool fgbadhsm=true;666 if (strncmp(msg,"PCIEToEthernet-Send",19)==0) {667 if (strncmp(msg+19,"Cnt",3)==0) fgbadhsm=false;668 else if (strncmp(msg+19,"-END",4)==0) {669 fgbadhsm=false;670 vec_fgsokend_[fib]=1; gl_fgsokend=true;671 //DBG cout << "ReceiveFromSocket/DEBUG -END msg received " << endl;672 if (prtlev_>2)673 cout << " EthernetReader::ReceiveFromSocket/ Receive on LinkNo" << fib << " Ended OK" << endl;674 }675 }676 if (fgbadhsm) {677 cout << " EthernetReader::ReceiveFromSocket/ BAD HandShake, LinkNo " << fib << " msg: " << msg << endl;678 vec_fgsokend_[fib]=2;679 }680 }681 682 if (vec_fgsokend_[fib]>0) { // la lecture est finie683 memset(data, 0, len);684 return 0;685 }686 687 rc += vsok_[fib].ReceiveAll(data, len);688 vec_cntpaq_[fib]++;689 690 #ifdef BR_DO_HANDSHAKE691 // Envoi de message de hand-shake692 if (vec_cntpaq_[fib]%memgr_.NbPaquets() == 0) {693 char msg[BRTCPMSGLEN2];694 sprintf(msg,"EthernetReader-RecvCnt %d",vec_cntpaq_[fib]);695 vsok_[fib].SendAll(msg, BRTCPMSGLEN2);696 //DBG cout << " ReceiveFromSocket/DEBUG-B msg=" << msg << endl;697 }698 #endif699 return rc;700 764 } 701 765 -
trunk/AddOn/TAcq/racqueth.h
r3899 r3901 96 96 // Si force_samefc=true, on essaye de lire des paquets avec meme FrameCounter, sans depasser une 97 97 // difference maximum de maxdiff_paqnum entre nombre de paquets lus sur chaque fibre 98 inline void SetReadMode(bool force_samefc=false, uint_4 maxdiff_paqnum= 50, uint_4 maxresync=50)98 inline void SetReadMode(bool force_samefc=false, uint_4 maxdiff_paqnum=0, uint_4 maxresync=0) 99 99 { rdsamefc_=force_samefc; sfc_maxdpc_=maxdiff_paqnum; sfc_maxresync_=maxresync; } 100 100 // En activant le flag, le reader ne se termine qu'avec la reception des message END sur chaque lien … … 115 115 size_t ReceiveFromSocket(int fib, char* data, size_t len); 116 116 117 bool ReadNextAllFibersWithSync(); // Renvoie true si probleme 117 118 // recale les links en cas d'ecart important entre nb de paquets lu sur chaque lien 118 119 int SkipAndSyncLinks(); // Renvoie 0 si rien fait, 1 si skip fait, 9 si probleme -
trunk/AddOn/TAcq/swrapsock.h
r3897 r3901 44 44 size_t ReceiveAll(char * buff, size_t len); 45 45 46 /* Configuration nombre maxi de retry et temps d'attente (microsecondes) 47 pour SendAll et ReceiveAll 48 inline void SetSendRecvAllMaxNTry(int maxnt=20, int slus=100) 49 { maxntry_=maxnt; slus_retry_=slus; } 50 */ 51 46 52 virtual int Close(); 47 53 … … 69 75 long lstnbb; /* Nb bytes last send or receive */ 70 76 long errcnt; /* Total error count */ 77 // int maxntry_; int slus_retry_; 71 78 int prtlev; 72 79 };
Note:
See TracChangeset
for help on using the changeset viewer.