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/renetcolSMP2.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, SMP2_RECORD_FILE_1,sizeof(SMP2_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 
     427 
    381428/* 
    382429 * send his PID to another program via IPC message queue 
     
    553600  int dd = 0; 
    554601  FILE *TPLFILE; 
    555  
     602#if defined(RECORDFLOW) 
     603  FILE *currentRECORDFLOWFILE; 
     604#endif 
    556605  now = time((time_t *)NULL); 
    557606  tmPtr = localtime(&now); 
     
    559608  lastMPLSOutput = now; 
    560609  lastIPOutput = now; 
     610#if defined(RECORDFLOW)   
     611currentRECORDFLOWFILE = fRECORDF1; 
     612#endif 
    561613  do { 
    562614#ifdef DEBUG 
     
    568620        shmForAgg->currentTable = 1; 
    569621        shmForAgg->secondTable = 0; 
     622#if defined(RECORDFLOW) 
     623        /*free(bufRF1);*/ 
     624        fflush(fRECORDF1); 
     625        if (fclose(fRECORDF1) == NULL){ 
     626          fprintf(stderr,"error fclose : %s",strerror(errno)); 
     627        } 
     628        strncpy(pathRF, RECORD_FILE_PATH,sizeof(RECORD_FILE_PATH)); 
     629        strncpy(nameRF, SMP2_RECORD_FILE_2,sizeof(SMP2_RECORD_FILE_2)); 
     630        errno = 0; 
     631        prepend_timestamp ( nameRF, sizeof nameRF ); 
     632        if ( errno != ERANGE ) 
     633          printf ( "Timestamped: %s\n", nameRF ); 
     634        else { 
     635          /* Handle the error */ 
     636        } 
     637        strncat(pathRF, nameRF, sizeof(nameRF)); 
     638 
     639        if ((fRECORDF2 = fopen(pathRF, "w")) == NULL) { 
     640          syslog(LOG_ERR,"Error in %s opening : %s", pathRF, strerror(errno)); 
     641        } else { 
     642          bufRF2 = (char *)malloc (262144); 
     643          setvbuf (fRECORDF2, bufRF2, _IOFBF, 262144); 
     644        } 
     645        currentRECORDFLOWFILE = fRECORDF2; 
     646#endif 
    570647      }else{ 
    571648        shmForAgg->currentTable = 0; 
    572649        shmForAgg->secondTable = 1; 
     650#if defined(RECORDFLOW) 
     651        /*free(bufRF2);*/ 
     652        fflush(fRECORDF2); 
     653        fclose(fRECORDF2); 
     654        strncpy(pathRF, RECORD_FILE_PATH,sizeof(RECORD_FILE_PATH)); 
     655        strncpy(nameRF, SMP2_RECORD_FILE_1,sizeof(SMP2_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; 
     
    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> ");