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/renetcolSMP4.c

    r165 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, SMP4_RECORD_FILE_1,sizeof(SMP4_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 
     
    377406} 
    378407 
     408char *prepend_timestamp ( char s[], size_t capacity ) 
     409{ 
     410    const char fmt[] = "%y-%m-%d_%H-%M"; 
     411    size_t n = sizeof ( fmt ); 
     412    size_t len = strlen ( s ); 
     413    if ( len + n < capacity ) { 
     414        time_t init = time ( NULL ); 
     415        memmove ( s + n, s, len + 1 ); 
     416        strftime ( s, n, fmt, localtime ( &init ) ); 
     417        s[n - 1] = '_'; 
     418    } 
     419    else 
     420        errno = ERANGE; 
     421 
     422    return s; 
     423} 
     424 
     425 
    379426/* 
    380427 * send his PID to another program via IPC message queue 
     
    551598  int dd = 0; 
    552599  FILE *TPLFILE; 
    553  
     600#if defined(RECORDFLOW) 
     601  FILE *currentRECORDFLOWFILE; 
     602#endif 
    554603  now = time((time_t *)NULL); 
    555604  tmPtr = localtime(&now); 
     
    557606  lastMPLSOutput = now; 
    558607  lastIPOutput = now; 
     608#if defined(RECORDFLOW)   
     609currentRECORDFLOWFILE = fRECORDF1; 
     610#endif 
    559611  do { 
    560612#ifdef DEBUG 
     
    566618        shmForAgg->currentTable = 1; 
    567619        shmForAgg->secondTable = 0; 
     620#if defined(RECORDFLOW) 
     621        /*free(bufRF1);*/ 
     622        fflush(fRECORDF1); 
     623        if (fclose(fRECORDF1) == NULL){ 
     624          fprintf(stderr,"error fclose : %s",strerror(errno)); 
     625        } 
     626        strncpy(pathRF, RECORD_FILE_PATH,sizeof(RECORD_FILE_PATH)); 
     627        strncpy(nameRF, SMP4_RECORD_FILE_2,sizeof(SMP4_RECORD_FILE_2)); 
     628        errno = 0; 
     629        prepend_timestamp ( nameRF, sizeof nameRF ); 
     630        if ( errno != ERANGE ) 
     631          printf ( "Timestamped: %s\n", nameRF ); 
     632        else { 
     633          /* Handle the error */ 
     634        } 
     635        strncat(pathRF, nameRF, sizeof(nameRF)); 
     636 
     637        if ((fRECORDF2 = fopen(pathRF, "w")) == NULL) { 
     638          syslog(LOG_ERR,"Error in %s opening : %s", pathRF, strerror(errno)); 
     639        } else { 
     640          bufRF2 = (char *)malloc (262144); 
     641          setvbuf (fRECORDF2, bufRF2, _IOFBF, 262144); 
     642        } 
     643        currentRECORDFLOWFILE = fRECORDF2; 
     644#endif 
    568645      }else{ 
    569646        shmForAgg->currentTable = 0; 
    570647        shmForAgg->secondTable = 1; 
     648#if defined(RECORDFLOW) 
     649        /*free(bufRF2);*/ 
     650        fflush(fRECORDF2); 
     651        fclose(fRECORDF2); 
     652        strncpy(pathRF, RECORD_FILE_PATH,sizeof(RECORD_FILE_PATH)); 
     653        strncpy(nameRF, SMP4_RECORD_FILE_1,sizeof(SMP4_RECORD_FILE_1)); 
     654        errno = 0; 
     655        prepend_timestamp ( nameRF, sizeof nameRF ); 
     656        if ( errno != ERANGE ) 
     657          printf ( "Timestamped: %s\n", nameRF ); 
     658        else { 
     659          /* Handle the error */ 
     660        } 
     661        strncat(pathRF, nameRF, sizeof(nameRF)); 
     662        if ((fRECORDF1 = fopen(pathRF, "w")) == NULL) { 
     663          syslog(LOG_ERR,"Error in %s opening : %s", pathRF, strerror(errno)); 
     664        } else { 
     665          bufRF1 = (char *)malloc (262144); 
     666          setvbuf (fRECORDF1, bufRF1, _IOFBF, 262144); 
     667        } 
     668        currentRECORDFLOWFILE = fRECORDF1; 
     669#endif 
    571670      } 
    572671      shmForAgg->readed = 1; 
     
    700799          } 
    701800        } else if (currentFlowsetId > 255) { 
     801#if defined(RECORDFLOW) 
     802          if ( (shift = checkDataFlowSet(shift, 
     803                                         &myPtrs, 
     804                                         myQueue, 
     805                                         shmForAgg->prefixV4Tab[shmForAgg->currentTable], 
     806                                         (size_t) shmForAgg->v4PrefixNb, 
     807                                         shmForAgg->prefixV4SubnetTab[shmForAgg->currentTable], 
     808                                         (size_t) shmForAgg->v4SubnetNb, 
     809           currentRECORDFLOWFILE) ) < 0 ) { 
     810#else 
    702811          if ( (shift = checkDataFlowSet(shift, 
    703812                                         &myPtrs, 
     
    707816                                         shmForAgg->prefixV4SubnetTab[shmForAgg->currentTable], 
    708817                                         (size_t) shmForAgg->v4SubnetNb) ) < 0 ) { 
     818#endif 
    709819#ifdef DEBUG 
    710820            fprintf (stderr, "wd> ");