Show
Ignore:
Timestamp:
07/23/14 15:16:06 (8 years ago)
Author:
andreu
Message:

RECORDFLOW option

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/renetcolSMP/src/renetcolSMP1.c

    r163 r166  
    3737FILE *fIP;                                 /* pointer on the IP output file */ 
    3838FILE *fMPLS;                              /* pointer on the MPLS output file */ 
     39 
     40#if defined(RECORDFLOW) 
     41FILE *fRECORDF1; 
     42FILE *fRECORDF2; 
     43char    *bufRF1 = NULL; 
     44char    *bufRF2 = NULL; 
     45char *nameRF[128]; 
     46char *pathRF[256]; 
     47#endif 
    3948 
    4049struct sigaction myAction; /* handler for renetcolSender communication */ 
     
    118127    fprintf(stderr, "Couldn't open PCAP file %s: %s\n", myPcapFileName, errBuffer); 
    119128    exit(1); 
     129  } 
     130#endif 
     131 
     132#if defined(RECORDFLOW) 
     133  strncpy(pathRF, RECORD_FILE_PATH,sizeof(RECORD_FILE_PATH)); 
     134  strncpy(nameRF, SMP1_RECORD_FILE_1,sizeof(SMP1_RECORD_FILE_1)); 
     135  errno = 0; 
     136  prepend_timestamp ( nameRF, sizeof nameRF ); 
     137  if ( errno != ERANGE ) 
     138    printf ( "Timestamped: %s\n", nameRF ); 
     139  else { 
     140      /* Handle the error */ 
     141  } 
     142  strncat(pathRF,nameRF, sizeof(nameRF)); 
     143  if ((fRECORDF1 = fopen(pathRF, "w")) == NULL) { 
     144    syslog(LOG_ERR,"Error in %s opening : %s", pathRF, strerror(errno)); 
     145  } else { 
     146    fprintf(stderr,"fRECORDF1 %d",fRECORDF1); 
     147    bufRF1 = (char *)malloc (262144); 
     148    setvbuf (fRECORDF1, bufRF1, _IOFBF, 262144); 
    120149  } 
    121150#endif 
     
    379408} 
    380409 
     410char *prepend_timestamp ( char s[], size_t capacity ) 
     411{ 
     412    const char fmt[] = "%y-%m-%d_%H-%M"; 
     413    size_t n = sizeof ( fmt ); 
     414    size_t len = strlen ( s ); 
     415    if ( len + n < capacity ) { 
     416        time_t init = time ( NULL ); 
     417        memmove ( s + n, s, len + 1 ); 
     418        strftime ( s, n, fmt, localtime ( &init ) ); 
     419        s[n - 1] = '_'; 
     420    } 
     421    else 
     422        errno = ERANGE; 
     423 
     424    return s; 
     425} 
     426 
    381427/* 
    382428 * send his PID to another program via IPC message queue 
     
    553599  int dd = 0; 
    554600  FILE *TPLFILE; 
    555  
     601#if defined(RECORDFLOW) 
     602  FILE *currentRECORDFLOWFILE; 
     603#endif 
    556604  now = time((time_t *)NULL); 
    557605  tmPtr = localtime(&now); 
     
    559607  lastMPLSOutput = now; 
    560608  lastIPOutput = now; 
     609#if defined(RECORDFLOW)   
     610currentRECORDFLOWFILE = fRECORDF1; 
     611#endif 
    561612  do { 
    562613#ifdef DEBUG 
     
    566617      currentIntervalle = tmPtr->tm_min; 
    567618      if (shmForAgg->currentTable == 0) { 
    568         shmForAgg->currentTable = 1; 
    569         shmForAgg->secondTable = 0; 
     619              shmForAgg->currentTable = 1; 
     620              shmForAgg->secondTable = 0; 
     621#if defined(RECORDFLOW) 
     622        /*free(bufRF1);*/ 
     623        fflush(fRECORDF1); 
     624        if (fclose(fRECORDF1) == NULL){ 
     625          fprintf(stderr,"error fclose : %s",strerror(errno)); 
     626        } 
     627        strncpy(pathRF, RECORD_FILE_PATH,sizeof(RECORD_FILE_PATH)); 
     628        strncpy(nameRF, SMP1_RECORD_FILE_2,sizeof(SMP1_RECORD_FILE_2)); 
     629        errno = 0; 
     630        prepend_timestamp ( nameRF, sizeof nameRF ); 
     631        if ( errno != ERANGE ) 
     632          printf ( "Timestamped: %s\n", nameRF ); 
     633        else { 
     634          /* Handle the error */ 
     635        } 
     636        strncat(pathRF, nameRF, sizeof(nameRF)); 
     637 
     638        if ((fRECORDF2 = fopen(pathRF, "w")) == NULL) { 
     639          syslog(LOG_ERR,"Error in %s opening : %s", pathRF, strerror(errno)); 
     640        } else { 
     641          bufRF2 = (char *)malloc (262144); 
     642          setvbuf (fRECORDF2, bufRF2, _IOFBF, 262144); 
     643        } 
     644        currentRECORDFLOWFILE = fRECORDF2; 
     645#endif 
    570646      }else{ 
    571         shmForAgg->currentTable = 0; 
    572         shmForAgg->secondTable = 1; 
     647              shmForAgg->currentTable = 0; 
     648        shmForAgg->secondTable = 1; 
     649#if defined(RECORDFLOW) 
     650    fprintf (stderr, "AVANT free(bufRF 2 ) *****************************************************"); 
     651        /*free(bufRF2);*/ 
     652        fflush(fRECORDF2); 
     653        fclose(fRECORDF2); 
     654        strncpy(pathRF, RECORD_FILE_PATH,sizeof(RECORD_FILE_PATH)); 
     655        strncpy(nameRF, SMP1_RECORD_FILE_1,sizeof(SMP1_RECORD_FILE_1)); 
     656        errno = 0; 
     657        prepend_timestamp ( nameRF, sizeof nameRF ); 
     658        if ( errno != ERANGE ) 
     659          printf ( "Timestamped: %s\n", nameRF ); 
     660        else { 
     661          /* Handle the error */ 
     662        } 
     663        strncat(pathRF, nameRF, sizeof(nameRF)); 
     664        if ((fRECORDF1 = fopen(pathRF, "w")) == NULL) { 
     665          syslog(LOG_ERR,"Error in %s opening : %s", pathRF, strerror(errno)); 
     666        } else { 
     667          bufRF1 = (char *)malloc (262144); 
     668          setvbuf (fRECORDF1, bufRF1, _IOFBF, 262144); 
     669        } 
     670        currentRECORDFLOWFILE = fRECORDF1; 
     671#endif 
    573672      } 
    574673      shmForAgg->readed = 1; 
     
    586685      /* FIXME : to delete : */ 
    587686      if (!(TPLFILE = fopen("/tmp/IPV6LINKAGGSMP1.txt", "w"))) { 
    588         syslog (LOG_ERR, "error during %s opening", "/tmp/IPV6LINKAGGSMP1.txt"); 
     687              syslog (LOG_ERR, "error during %s opening", "/tmp/IPV6LINKAGGSMP1.txt"); 
    589688      } 
    590689      tmp = routersListPtr; 
    591690      for (; tmp; tmp=tmp->next) { 
    592         for (dd=0;dd<MAX_INDEX_BY_ROUTER;dd++) { 
    593           if ( tmp->snmpIndexType[dd] != 2) { 
    594             fprintf(TPLFILE, 
    595                     "router: %lu.%lu.%lu.%lu dd: %hu , indexSNMP : %hu , type : %hu ,total bytes IN : %llu, OUT : %llu\n", 
    596                     (tmp->IpAddress>>24), 
    597                     (tmp->IpAddress<<8>>24), 
    598                     (tmp->IpAddress<<16>>24), 
    599                     (tmp->IpAddress<<24>>24), 
    600                     dd, 
    601                     tmp->snmpIndexID[dd], 
    602                     tmp->snmpIndexType[dd], 
    603                     ((struct IndexV6 *)((myPtrs.secondV6IndexTab) 
    604                                         +((tmp->ID)*MAX_INDEX_BY_ROUTER) 
    605                                         +(tmp->snmpIndexID[dd])))->bytesNbIN, 
    606                     ((struct IndexV6 *)((myPtrs.secondV6IndexTab) 
    607                                         +((tmp->ID)*MAX_INDEX_BY_ROUTER) 
    608                                         +(tmp->snmpIndexID[dd])))->bytesNbOUT 
    609                     ); 
    610           } 
    611         } 
     691              for (dd=0;dd<MAX_INDEX_BY_ROUTER;dd++) { 
     692                if ( tmp->snmpIndexType[dd] != 2) { 
     693                  fprintf(TPLFILE, 
     694              "router: %lu.%lu.%lu.%lu dd: %hu , indexSNMP : %hu , type : %hu ,total bytes IN : %llu, OUT : %llu\n", 
     695              (tmp->IpAddress>>24), 
     696                          (tmp->IpAddress<<8>>24), 
     697                          (tmp->IpAddress<<16>>24), 
     698              (tmp->IpAddress<<24>>24), 
     699                          dd, 
     700                          tmp->snmpIndexID[dd], 
     701                          tmp->snmpIndexType[dd], 
     702                          ((struct IndexV6 *)((myPtrs.secondV6IndexTab) 
     703                                              +((tmp->ID)*MAX_INDEX_BY_ROUTER) 
     704                +(tmp->snmpIndexID[dd])))->bytesNbIN, 
     705              ((struct IndexV6 *)((myPtrs.secondV6IndexTab) 
     706                                              +((tmp->ID)*MAX_INDEX_BY_ROUTER) 
     707                                              +(tmp->snmpIndexID[dd])))->bytesNbOUT 
     708                        ); 
     709                } 
     710              } 
    612711      } 
    613712      fclose(TPLFILE); /* <-- */ 
     
    702801          } 
    703802        } else if (currentFlowsetId > 255) { 
     803#if defined(RECORDFLOW) 
     804          if ( (shift = checkDataFlowSet(shift, 
     805                                         &myPtrs, 
     806                                         myQueue, 
     807                                         shmForAgg->prefixV4Tab[shmForAgg->currentTable], 
     808                                         (size_t) shmForAgg->v4PrefixNb, 
     809                                         shmForAgg->prefixV4SubnetTab[shmForAgg->currentTable], 
     810                                         (size_t) shmForAgg->v4SubnetNb, 
     811                                         currentRECORDFLOWFILE) ) < 0 ) { 
     812#else 
    704813          if ( (shift = checkDataFlowSet(shift, 
    705814                                         &myPtrs, 
     
    709818                                         shmForAgg->prefixV4SubnetTab[shmForAgg->currentTable], 
    710819                                         (size_t) shmForAgg->v4SubnetNb) ) < 0 ) { 
     820#endif 
    711821#ifdef DEBUG 
    712822            fprintf (stderr, "wd> ");