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/renetcolSMP3.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, SMP3_RECORD_FILE_1,sizeof(SMP3_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 
     
    568619        shmForAgg->currentTable = 1; 
    569620        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, SMP3_RECORD_FILE_2,sizeof(SMP3_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{ 
    571647        shmForAgg->currentTable = 0; 
    572648        shmForAgg->secondTable = 1; 
     649#if defined(RECORDFLOW) 
     650        /*free(bufRF2);*/ 
     651        fflush(fRECORDF2); 
     652        fclose(fRECORDF2); 
     653        strncpy(pathRF, RECORD_FILE_PATH,sizeof(RECORD_FILE_PATH)); 
     654        strncpy(nameRF, SMP3_RECORD_FILE_1,sizeof(SMP3_RECORD_FILE_1)); 
     655        errno = 0; 
     656        prepend_timestamp ( nameRF, sizeof nameRF ); 
     657        if ( errno != ERANGE ) 
     658          printf ( "Timestamped: %s\n", nameRF ); 
     659        else { 
     660          /* Handle the error */ 
     661        } 
     662        strncat(pathRF, nameRF, sizeof(nameRF)); 
     663        if ((fRECORDF1 = fopen(pathRF, "w")) == NULL) { 
     664          syslog(LOG_ERR,"Error in %s opening : %s", pathRF, strerror(errno)); 
     665        } else { 
     666          bufRF1 = (char *)malloc (262144); 
     667          setvbuf (fRECORDF1, bufRF1, _IOFBF, 262144); 
     668        } 
     669        currentRECORDFLOWFILE = fRECORDF1; 
     670#endif 
    573671      } 
    574672      shmForAgg->readed = 1; 
     
    702800          } 
    703801        } else if (currentFlowsetId > 255) { 
     802#if defined(RECORDFLOW) 
     803          if ( (shift = checkDataFlowSet(shift, 
     804                                         &myPtrs, 
     805                                         myQueue, 
     806                                         shmForAgg->prefixV4Tab[shmForAgg->currentTable], 
     807                                         (size_t) shmForAgg->v4PrefixNb, 
     808                                         shmForAgg->prefixV4SubnetTab[shmForAgg->currentTable], 
     809                                         (size_t) shmForAgg->v4SubnetNb, 
     810           currentRECORDFLOWFILE) ) < 0 ) { 
     811#else 
    704812          if ( (shift = checkDataFlowSet(shift, 
    705813                                         &myPtrs, 
     
    709817                                         shmForAgg->prefixV4SubnetTab[shmForAgg->currentTable], 
    710818                                         (size_t) shmForAgg->v4SubnetNb) ) < 0 ) { 
     819#endif 
    711820#ifdef DEBUG 
    712821            fprintf (stderr, "wd> ");