Changeset 111 for trunk/src/renetcol.c

Show
Ignore:
Timestamp:
06/17/09 14:44:04 (13 years ago)
Author:
andreu
Message:

ticket #41 Pcap file integration

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/renetcol.c

    r110 r111  
    8585static struct sockaddr_in name2; 
    8686static struct sockaddr_in fromName; 
     87#ifdef READFROMFILE 
     88  char *myPcapFileName, errBuffer[PCAP_ERRBUF_SIZE]; 
     89  pcap_t *myPcapHandle; 
     90#endif 
    8791 
    8892/*  
     
    100104  unsigned short routerIndex = 0; 
    101105 
     106#if defined(READFROMFILE) 
     107  if ( argc != 2) { 
     108    fprintf (stderr, 
     109             "%s: Usage: %s <pcap file>\n exp: %s /tmp/my_pcap_file.pcap\n",  
     110             argv[0], argv[0], argv[0]); 
     111    exit(1); 
     112  } 
     113  myPcapFileName = argv[1]; 
     114  if ((myPcapHandle = pcap_open_offline(myPcapFileName, errBuffer)) == NULL) { 
     115    fprintf(stderr, "Couldn't open PCAP file %s: %s\n", myPcapFileName, errBuffer); 
     116    exit(1); 
     117  } 
     118#endif 
     119 
    102120#if defined(IPV4AGGIDR) 
    103121  fprintf(stderr, "renetcol compilation and execution with IPv4 Prefixes Aggregation feature enable based on routers ID in %s file.\n", ROUTERS_LIST); 
     
    113131  fprintf(stderr, "renetcol compilation and execution with IPv6 Links Aggregation.\n"); 
    114132#endif 
    115    
     133 
    116134  openlog(argv[0], LOG_PID, LOG_USER); 
    117135 
     
    299317  for (i=0; i<ROUTER_INDEX_MAX; i++){ 
    300318    for (j=0; j<MAX_INDEX_BY_ROUTER; j++) { 
     319      shmForAgg->indexV6Tab[0][i][j].routerIPAddress = 0; 
     320      shmForAgg->indexV6Tab[0][i][j].indexSNMP = 0; 
    301321      shmForAgg->indexV6Tab[0][i][j].hasStats = 0; 
    302322      shmForAgg->indexV6Tab[0][i][j].sampling = 0; 
     
    307327      shmForAgg->indexV6Tab[0][i][j].pktsNbOUT = 0; 
    308328      shmForAgg->indexV6Tab[0][i][j].flowNbOUT = 0; 
     329      shmForAgg->indexV6Tab[1][i][j].routerIPAddress = 0; 
     330      shmForAgg->indexV6Tab[1][i][j].indexSNMP = 0; 
    309331      shmForAgg->indexV6Tab[1][i][j].hasStats = 0; 
    310332      shmForAgg->indexV6Tab[1][i][j].sampling = 0; 
     
    454476 
    455477#ifdef DEBUG 
    456   fprintf(stderr,"Cache for Rules\n"); 
     478  fprintf(stderr,"Cache for Rules: \n"); 
    457479#endif  
    458480  while (tmp) { 
     
    464486      } 
    465487      rulesAddress[def->fieldType][i] = def; 
     488#ifdef DEBUG 
     489      fprintf(stderr,"%d: %d \n", def->fieldType, i); 
     490#endif      
    466491      def = def->next; 
    467 #ifdef DEBUG 
    468       fprintf(stderr,"%d: %d ", def->fieldType, i); 
    469 #endif      
    470492    } 
    471493#ifdef DEBUG 
     
    474496    tmp = tmp->next; 
    475497  } 
     498#ifdef DEBUG 
     499  fprintf(stderr,"Cache for Rules: OK"); 
     500#endif  
    476501} 
    477502 
    478503/*  
    479504 * initStream() 
     505 * 
     506 * Stream can be a file (pcap format) or a socket 
    480507 */ 
    481508void  
     
    484511  static unsigned short n0, n1, n2, n3; 
    485512 
     513#ifdef READFROMFILE 
     514  initFile(); 
     515#else 
    486516  initSocket(); 
    487517  if (sscanf(receptAddress,"%hu.%hu.%hu.%hu",&n0,&n1,&n2,&n3)==0) { 
     
    492522  buffer4[2] = (unsigned char)n1; 
    493523  buffer4[3] = (unsigned char)n0; 
     524#endif 
    494525} 
    495526 
     
    572603      initRule(); 
    573604    }  
     605#ifdef READFROMFILE 
     606    fileReading(); 
     607#else 
    574608    socketReading(); 
     609#endif 
    575610    getIpHeader(myPtrs.pcktPtr, myPtrs.ptr_buffer); 
    576611    regRouter = checkIpHeader(myPtrs.pcktPtr, &sortedRouterList[0], routerNb); 
     
    584619                             myPtrs.currentHeaderV9Ptr, myPtrs.offsetV9Ptr)){ 
    585620    case 9: 
     621#ifdef DEBUG 
     622      fprintf (stderr, ", %d %hu %lu ,",  
     623               myPtrs.currentHeaderV9Ptr->version, 
     624               myPtrs.currentHeaderV9Ptr->count, 
     625               myPtrs.currentHeaderV9Ptr->package_sequence); 
     626#endif 
    586627      if ((myPtrs.currentRouterPtr=notExistRouter(routersListPtr,  
    587628                                                  myPtrs.pcktPtr->ipH->srcAdd))==NULL) { 
     
    591632      shift = 0; 
    592633      gardeFou=0; 
    593       while ((currentFlowsetNumber < myPtrs.currentHeaderV9Ptr->count)) { 
     634      while ((currentFlowsetNumber < myPtrs.currentHeaderV9Ptr->count) && (shift <= 1456)) { 
    594635        gardeFou++; 
    595636        curTplFlSetPtr = NULL; 
     
    605646                                             myQueue)) < 0 ) { 
    606647#ifdef DEBUG 
    607             fprintf (stderr, "w>\n"); 
     648            fprintf (stderr, "w> "); 
    608649#endif 
    609650            currentFlowsetNumber = myPtrs.currentHeaderV9Ptr->count + 1; 
     
    618659                                            myPtrs.currentFlowsetNumberPtr) ) < 0 ) { 
    619660#ifdef DEBUG 
    620             fprintf (stderr, "wo>\n"); 
     661            fprintf (stderr, "wo> "); 
    621662#endif  
    622663            currentFlowsetNumber = myPtrs.currentHeaderV9Ptr->count + 1; 
     
    631672                                         (size_t) shmForAgg->v4SubnetNb) ) < 0 ) { 
    632673#ifdef DEBUG     
    633             fprintf (stderr, "wd>\n"); 
     674            fprintf (stderr, "wd> "); 
    634675#endif 
    635676            currentFlowsetNumber = myPtrs.currentHeaderV9Ptr->count + 1; 
     
    637678        } else { 
    638679#ifdef DEBUG     
    639           fprintf (stderr, "1<<255\n"); 
     680          fprintf (stderr, " 1<<255 "); 
    640681#endif 
    641682          currentFlowsetNumber = myPtrs.currentHeaderV9Ptr->count + 1; 
     
    643684        if ( gardeFou > 200) { exit(-1); } 
    644685      } /* end while flowset exist */ 
     686#ifdef DEBUG 
     687      if (shift > 1456) { 
     688        fprintf(stderr," SHIT SHIFT > 1456 : %d \n", shift); 
     689      } 
     690#endif 
    645691      break; 
    646692    default: 
     
    735781} 
    736782 
     783/* 
     784 * initFile 
     785 */ 
     786short initFile() 
     787{ 
     788   
     789} 
    737790 
    738791/*  
    739  * init socket 
     792 * socketReading 
    740793 */ 
    741794short  
     
    758811  } 
    759812  return(0); 
     813} 
     814 
     815/* 
     816 * fileReading 
     817 */ 
     818short fileReading() 
     819{ 
     820#ifdef READFROMFILE 
     821  struct pcap_pkthdr myPcapHeader;   
     822  const u_char *ethernetPacket; 
     823 
     824  if ((ethernetPacket = pcap_next(myPcapHandle, &myPcapHeader)) == NULL) { 
     825    pcap_close(myPcapHandle); 
     826    exit(0); 
     827  } 
     828  myPtrs.ptr_buffer = (DatagramPtr) (ethernetPacket + 14); 
     829#ifdef DEBUG 
     830  fprintf(stderr,"P"); 
     831#endif 
     832#endif 
    760833} 
    761834