Changeset 59 for trunk/src

Show
Ignore:
Timestamp:
10/18/07 11:41:05 (15 years ago)
Author:
andreu
Message:

new aggregation method, based on SNMP index. New parameters in renetcolParam.h and new compilation options in configure.in.

Location:
trunk/src
Files:
10 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/dataFlowSet.c

    r58 r59  
    132132      return (-1); 
    133133    } 
    134 #ifdef IPV4AGG 
     134#if defined(IPV4AGGIDR) || defined(IPV4AGGIDSNMP) 
    135135    agCache.routerAd = myPtrs->pcktPtr->ipH->srcAdd;  
    136136#endif 
     
    192192              } 
    193193              /* end rule check */ 
    194 #ifdef IPV4AGG 
     194#if defined(IPV4AGGIDR) || defined(IPV4AGGIDSNMP) 
    195195              if ((pftmp->fieldType==9)||(pftmp->fieldType==29)){ 
    196196                agCache.maskS = *((unsigned char*)&buffer1); 
     
    221221                  == *((unsigned short*)&buffer2)) 
    222222                ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 1; 
    223 #ifdef IPV4AGG 
     223#if defined(IPV4AGGIDR) || defined(IPV4AGGIDSNMP) 
    224224              if (pftmp->fieldType==10){ 
    225225                agCache.inputSnmp = *((unsigned short*)&buffer2); 
     
    277277                  } 
    278278              } 
    279 #ifdef IPV4AGG 
     279#if defined(IPV4AGGIDR) || defined(IPV4AGGIDSNMP) 
    280280              if ((pftmp->fieldType==8)){ 
    281281                bool = 1; /* very important, test if we have an IPv4 flow for Agg */ 
     
    448448          buffer1 = *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
    449449          (*myPtrs->offsetV9Ptr)++; 
    450 #ifdef IPV4AGG 
     450#if defined(IPV4AGGIDR) || defined(IPV4AGGIDSNMP) 
    451451          if ((pftmp->fieldType==9)||(pftmp->fieldType==29)){ 
    452452            agCache.maskS = *((unsigned char*)&buffer1); 
     
    474474          buffer2[0]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
    475475          (*myPtrs->offsetV9Ptr)++; 
    476 #ifdef IPV4AGG 
     476#if defined(IPV4AGGIDR) || defined(IPV4AGGIDSNMP) 
    477477          if (pftmp->fieldType==10){ 
    478478            agCache.inputSnmp = *((unsigned short*)&buffer2); 
     
    506506          buffer4[0]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
    507507          (*myPtrs->offsetV9Ptr)++; 
    508 #ifdef IPV4AGG 
     508#if defined(IPV4AGGIDR) || defined(IPV4AGGIDSNMP) 
    509509          if ((pftmp->fieldType==8)){ 
    510510            bool = 1; 
     
    548548        /* Aggregation mode must be enable in ./configure options   */ 
    549549        /* first we must know if the address belong to our prefix   */ 
    550 #ifdef IPV4AGG 
     550#if defined(IPV4AGGIDR) || defined(IPV4AGGIDSNMP) 
    551551        if ( (bool == 1) && (isMplsFlow == 0) ){ 
    552552          prefixKey.beginning = agCache.v4AdS>>(32-agCache.maskS)<<(32-agCache.maskS); 
     
    554554                        sizeof(struct PrefixV4), prefGlobalCmp); 
    555555          if (res!=NULL){ 
    556 /*          if ( myPtrs->routersID[res->routerNb] == agCache.routerAd  ) { */ 
     556#if defined(IPV4AGGIDR) 
     557            if ( myPtrs->routersID[res->routerNb] == agCache.routerAd  ) {  
     558#elif defined(IPV4AGGIDSNMP) 
    557559            if ( myPtrs->currentRouterPtr->snmpIndexList[agCache.inputSnmp] == 1  ) {          
    558               /* OUT ("traffic from the prefix/subnet")  */ 
    559               res->bytesNbOUT += agCache.bytes; 
    560               res->pktsNbOUT += agCache.pkts; 
    561               (res->flowNbOUT)++; 
    562               if (res->sampling == 0) { 
     560#endif 
     561              if (myPtrs->currentRouterPtr->sampled != 0 ){ 
     562                /* OUT ("traffic from the prefix/subnet")  */ 
     563                res->bytesNbOUT += agCache.bytes; 
     564                res->pktsNbOUT += agCache.pkts; 
     565                (res->flowNbOUT)++; 
     566              } 
     567              if (res->sampling == 0  
     568                  && myPtrs->currentRouterPtr->sampled != 0){ 
    563569                res->sampling = myPtrs->currentRouterPtr->sampled; 
    564               } else if (res->sampling != myPtrs->currentRouterPtr->sampled) { 
    565                 syslog(LOG_INFO, 
    566                        "2 sampling values for 1 subnet: %lu.%lu.%lu.%lu % from router %lu.%lu.%lu.%lu", 
    567                        agCache.v4AdS>>24, 
    568                        agCache.v4AdS<<8>>24, 
    569                        agCache.v4AdS<<16>>24, 
    570                        agCache.v4AdS<<24>>24, 
    571                        (myPtrs->pcktPtr->ipH->srcAdd>>24), 
    572                        (myPtrs->pcktPtr->ipH->srcAdd<<8>>24), 
    573                        (myPtrs->pcktPtr->ipH->srcAdd<<16>>24), 
    574                        (myPtrs->pcktPtr->ipH->srcAdd<<24>>24)); 
    575               } 
     570              } 
     571#if defined(MATRIX) && defined(IPV4AGGIDR) 
    576572              /* inter-pop matrix Accounting */ 
    577573              prefixKey.beginning = agCache.v4AdD>>(32-agCache.maskD)<<(32-agCache.maskD); 
     
    603599              } 
    604600              /* end interpop matrix accounting */ 
     601#endif /* matrix */ 
    605602            } else { 
    606603              /* doublon or bad reference in prefix list */ 
     
    612609            if (res!=NULL){ 
    613610              if ( myPtrs->currentRouterPtr->snmpIndexList[agCache.inputSnmp] == 1  ) {        
    614                 /* IN ("traffic to the prefix/subnet")  */ 
    615                 res->bytesNbIN += agCache.bytes; 
    616                 res->pktsNbIN += agCache.pkts; 
    617                 (res->flowNbIN)++;       
    618 /*            if ( myPtrs->routersID[res->routerNb] == agCache.routerAd  ) { */ 
    619 /*               IN ("traffic to the prefix")  */  
    620 /*              res->bytesNbIN += agCache.bytes; */ 
    621 /*              res->pktsNbIN += agCache.pkts; */ 
    622 /*              (res->flowNbIN)++; */ 
    623 /*              if (res->sampling == 0) { */ 
    624 /*                res->sampling = myPtrs->currentRouterPtr->sampled; */ 
    625 /*              } else if (res->sampling !=  myPtrs->currentRouterPtr->sampled) { */ 
    626 /*                syslog(LOG_INFO, */ 
    627 /*                       "2 sampling values for 1 /: %lu.%lu.%lu.%lu % from router %lu.%lu.%lu.%lu", */ 
    628 /*                       agCache.v4AdS>>24, */ 
    629 /*                       agCache.v4AdS<<8>>24, */ 
    630 /*                       agCache.v4AdS<<16>>24, */ 
    631 /*                       agCache.v4AdS<<24>>24, */ 
    632 /*                       (myPtrs->pcktPtr->ipH->srcAdd>>24), */ 
    633 /*                       (myPtrs->pcktPtr->ipH->srcAdd<<8>>24), */ 
    634 /*                       (myPtrs->pcktPtr->ipH->srcAdd<<16>>24), */ 
    635 /*                       (myPtrs->pcktPtr->ipH->srcAdd<<24>>24)); */ 
    636 /*              } */ 
     611                if (myPtrs->currentRouterPtr->sampled != 0 ){ 
     612                  /* IN ("traffic to the prefix/subnet")  */ 
     613                  res->bytesNbIN += agCache.bytes; 
     614                  res->pktsNbIN += agCache.pkts; 
     615                  (res->flowNbIN)++; 
     616                } 
     617#if defined(IPV4AGGIDR)  
     618              if ( myPtrs->routersID[res->routerNb] == agCache.routerAd  ) { 
     619                if (myPtrs->currentRouterPtr->sampled != 0 ){ 
     620                  /* IN ("traffic to the prefix")  */ 
     621                  res->bytesNbIN += agCache.bytes; 
     622                  res->pktsNbIN += agCache.pkts; 
     623                  (res->flowNbIN)++; 
     624                } 
     625#endif 
     626                if (res->sampling == 0  
     627                    && myPtrs->currentRouterPtr->sampled != 0 ){ 
     628                  res->sampling = myPtrs->currentRouterPtr->sampled; 
     629                } 
    637630/*            } else { */ 
    638631                /* doublon or bad reference in prefix list */ 
     
    662655                      (myPtrs->pcktPtr->ipH->srcAdd<<24>>24) 
    663656                      ); 
    664 #endif 
     657#endif /* PRINTUNKNOWNSUBNET */ 
    665658            } 
    666659          } 
     
    668661        bool = 0; 
    669662        isMplsFlow = 0; 
    670 #endif 
     663#endif /* (IPV4AGGIDR) || (IPV4AGGIDSNMP) */ 
    671664        /*  
    672665         * Redirection if needed  
     
    831824              } 
    832825            }else{ 
    833               syslog(LOG_INFO,"Sampling value not standard for router : %lu.%lu.%lu.%lu", 
     826              syslog(LOG_INFO,"Sampling value not standard for router : %lu.%lu.%lu.%lu, value : %lu", 
    834827                     (myPtrs->pcktPtr->ipH->srcAdd>>24), 
    835828                     (myPtrs->pcktPtr->ipH->srcAdd<<8>>24), 
    836829                     (myPtrs->pcktPtr->ipH->srcAdd<<16>>24), 
    837                      (myPtrs->pcktPtr->ipH->srcAdd<<24>>24) 
     830                     (myPtrs->pcktPtr->ipH->srcAdd<<24>>24), 
     831                     *((unsigned long*)&buffer4) 
    838832                     ); 
    839833            } 
  • trunk/src/get_conf.c

    r34 r59  
    138138  char line[200]; 
    139139  unsigned short counter = 0; 
    140   unsigned short n0, n1, n2, n3, n4, n5; 
     140  unsigned short n0, n1, n2, n3, n4; 
     141#if defined(IPV4AGGIDR) 
     142  unsigned short n5; 
     143#endif 
    141144  unsigned char buffer4[4]; 
    142145  int i = 0; 
     
    146149    fprintf (stderr, "error during %s opening\n", filename); 
    147150    exit(1); 
     151  } 
     152  for(i=0;i<MAX_IPV4_PREFIX;i++){ 
     153    pV4TabPtr[i].beginning = 0; 
     154    pV4TabPtr[i].end = 0; 
     155    pV4TabPtr[i].mask = 0; 
     156    pV4TabPtr[i].sampling = 0; 
     157#ifdef IPV4AGGIDR       
     158    pV4TabPtr[i].routerNb = 0; 
     159#endif 
     160    pV4TabPtr[i].flowNbIN = 0; 
     161    pV4TabPtr[i].bytesNbIN = 0; 
     162    pV4TabPtr[i].pktsNbIN = 0; 
     163    pV4TabPtr[i].flowNbOUT = 0; 
     164    pV4TabPtr[i].bytesNbOUT = 0; 
     165    pV4TabPtr[i].pktsNbOUT = 0; 
     166    pV4TabPtr[i].firstCoSIN = 0; 
     167    pV4TabPtr[i].secondCoSIN = 0; 
     168    pV4TabPtr[i].thirdCoSIN = 0; 
     169    pV4TabPtr[i].fourthCoSIN = 0; 
     170    pV4TabPtr[i].firstCoSOUT = 0; 
     171    pV4TabPtr[i].secondCoSOUT = 0; 
     172    pV4TabPtr[i].thirdCoSOUT = 0; 
     173    pV4TabPtr[i].fourthCoSOUT = 0; 
    148174  } 
    149175  while (fgets(line, 50, prefixFile) != 0) 
     
    160186  for(i=0;i<counter;i++) 
    161187    { 
     188#if defined(IPV4AGGIDR) 
    162189      sscanf(prefixStrTab[i],"%hu.%hu.%hu.%hu/%hu-%hu\n", 
    163              &n0,&n1,&n2,&n3,&n4,&n5);           
     190             &n0,&n1,&n2,&n3,&n4,&n5); 
     191#else 
     192      sscanf(prefixStrTab[i],"%hu.%hu.%hu.%hu %hu\n", 
     193             &n0,&n1,&n2,&n3,&n4); 
     194#endif 
    164195      buffer4[0] = (unsigned char)n3; 
    165196      buffer4[1] = (unsigned char)n2; 
     
    171202        *((unsigned long*)&buffer4[0]) +~(~0<<(32-n4)); 
    172203      pV4TabPtr[i].mask = n4; 
    173       pV4TabPtr[i].sampling = 0;       
     204      pV4TabPtr[i].sampling = 0; 
     205#ifdef IPV4AGGIDR       
    174206      pV4TabPtr[i].routerNb = n5; 
     207#endif 
    175208      pV4TabPtr[i].flowNbIN = 0; 
    176209      pV4TabPtr[i].bytesNbIN = 0; 
  • trunk/src/get_conf.h

    r29 r59  
    2626#define GET_CONF_H 
    2727 
    28 #define MAX_IPV4_PREFIX 10000 
     28#include "renetcolParam.h" 
    2929 
    3030struct PrefixV4{ 
     
    3232  unsigned long end; 
    3333  unsigned short mask;     /* prefix mask  */ 
     34  unsigned short hasSubnet; /* to know if we need to read the prefixV4SubnetTab */ 
     35#ifdef IPV4AGGIDR 
    3436  unsigned short routerNb; /* router ID */ 
     37#endif 
    3538  unsigned long sampling; /* Sampling value */ 
    3639  unsigned long long flowNbIN;  /* WARNING !!! */ 
  • trunk/src/renetcol.c

    r58 r59  
    9999  int k; 
    100100 
    101 #ifdef IPV4AGG 
    102   fprintf(stderr, "renetcol compilation and execution with IPv4 Aggregation feature enable\n"); 
     101#ifdef IPV4AGGIDR 
     102  fprintf(stderr, "renetcol compilation and execution with IPv4 Aggregation feature enable based on routers ID in %s file.\n", ROUTERS_LIST); 
     103#endif 
     104 
     105#ifdef IPV4AGGIDSNMP 
     106  fprintf(stderr, "renetcol compilation and execution with IPv4 Aggregation feature enable based on SNMP ID in %s file.\n", INTERFACES_TYPE_LIST); 
    103107#endif 
    104108   
     
    133137 
    134138  if ( (shmForAgg->v4PrefixNb = getPrefixV4(SUBNETS_LIST, &(shmForAgg->prefixV4Tab[0][0]))) < 1){ 
    135     fprintf(stderr, "renetcol: Error \n"); 
    136     exit(1); 
     139    fprintf(stderr, "renetcol: Error in %s\n", SUBNETS_LIST); 
     140    exit(1); 
     141  } else { 
     142    fprintf(stderr, "%hu prefix are readed from %s\n",  
     143            shmForAgg->v4PrefixNb, 
     144            SUBNETS_LIST); 
    137145  } 
    138146  if ( (shmForAgg->v4PrefixNb = getPrefixV4(SUBNETS_LIST, &(shmForAgg->prefixV4Tab[1][0]))) < 1){ 
    139     fprintf(stderr, "renetcol:  Error \n"); 
     147    fprintf(stderr, "renetcol: Error in %s\n", SUBNETS_LIST); 
    140148    exit(1); 
    141149  } 
     
    194202  myPtrs.pcktPtr = (DatagramPtr) malloc(sizeof(struct Datagram)); 
    195203  myPtrs.currentFlowsetNumberPtr = &currentFlowsetNumber; 
     204#ifdef IPV4AGGIDR 
    196205  myPtrs.routersID = &indexedRouterList; 
     206#endif 
    197207  myPtrs.currentV4Tab = shmForAgg->prefixV4Tab[shmForAgg->currentTable]; 
    198208  myPtrs.secondV4Tab = shmForAgg->prefixV4Tab[shmForAgg->secondTable]; 
     209#ifdef MATRIX 
    199210  myPtrs.matrixPOP = &(shmForAgg->matrixPOP[shmForAgg->currentTable][0][0]); 
     211#endif 
    200212 
    201213  /* INIT MATRIX TABLES */ 
     214#ifdef MATRIX 
    202215  for (i=0; i<ROUTER_INDEX_MAX; i++){ 
    203216    for (j=0; j<ROUTER_INDEX_MAX; j++) { 
     
    210223    } 
    211224  } 
     225#endif 
    212226 
    213227  /* Checkup */ 
     
    419433      } 
    420434      shmForAgg->readed = 1; 
     435#ifdef MATRIX 
    421436      myPtrs.matrixPOP = &(shmForAgg->matrixPOP[shmForAgg->currentTable][0][0]); 
     437#endif 
    422438    } 
    423439    if (sigusr1Up == 1){ 
  • trunk/src/renetcol.h

    r36 r59  
    7070  unsigned short v4PrefixNb; 
    7171  struct PrefixV4 prefixV4Tab[2][MAX_IPV4_PREFIX]; 
     72  struct PrefixV4 prefixV4SubnetTab[2][MAX_IPV4_SUBNET]; 
     73#ifdef MATRIX 
    7274  struct POP matrixPOP[2][ROUTER_INDEX_MAX][ROUTER_INDEX_MAX]; 
     75#endif 
    7376  /*  struct PrefixV6 ; */ 
    7477}; /* if you change it, you must change renetcolAgg.h structure */ 
  • trunk/src/renetcolAgg.c

    r58 r59  
    8787      now = time((time_t *)NULL); 
    8888      if (isFirstUpdate == 0) { 
    89         /* SUBNET ACCOUNTING */ 
     89        /* RRD ACCOUNTING for prefixV4Tab */ 
    9090        for (i=0; i<shmForAgg->v4PrefixNb; i++){ 
    9191          /* HERE create or update RRD FILE */ 
     
    214214              } 
    215215            } 
    216             /* Reinit the shared table */ 
     216            /* Reinit the shared tables */ 
    217217            shmForAgg->prefixV4Tab[index][i].flowNbIN = 0; 
    218218            shmForAgg->prefixV4Tab[index][i].bytesNbIN = 0; 
     
    228228            shmForAgg->prefixV4Tab[index][i].secondCoSOUT = 0; 
    229229            shmForAgg->prefixV4Tab[index][i].thirdCoSOUT = 0; 
    230             shmForAgg->prefixV4Tab[index][i].fourthCoSOUT = 0;  
     230            shmForAgg->prefixV4Tab[index][i].fourthCoSOUT = 0; 
    231231          } 
    232232        } 
     233        /* ACCOUNTING for prefixV4SubnetTab */ 
     234        for (i=0; i<shmForAgg->v4PrefixNb; i++){ 
     235          /* HERE create or update RRD FILE */ 
     236          if (shmForAgg->prefixV4SubnetTab[index][i].sampling != 0) { 
     237            for (j=0; j<strlen(name); j++) {name[j] = '\0';} 
     238            for (j=0; j<strlen(createstr); j++) {createstr[j] = '\0';} 
     239            for (j=0; j<strlen(ipStr); j++) {ipStr[j] = '\0';} 
     240            for (j=0; j<strlen(buf); j++) {buf[j] = '\0';} 
     241            strcat(name, PREFIX_RRD_LOCATION); 
     242            sprintf(ipStr, "%lu_%lu_%lu_%lu_%hu_%lu",  
     243                    shmForAgg->prefixV4SubnetTab[index][i].beginning>>24, 
     244                    shmForAgg->prefixV4SubnetTab[index][i].beginning<<8>>24, 
     245                    shmForAgg->prefixV4SubnetTab[index][i].beginning<<16>>24, 
     246                    shmForAgg->prefixV4SubnetTab[index][i].beginning<<24>>24, 
     247                    shmForAgg->prefixV4SubnetTab[index][i].mask, 
     248                    shmForAgg->prefixV4SubnetTab[index][i].sampling 
     249                    );  
     250            strcat(name, ipStr); 
     251            strcat(name, RRD_EXTENSION); 
     252            if ( (fp=fopen(name,"r")) == NULL ){ 
     253              opt[0]= (char *) malloc((strlen(RRD_PARAM_PREFIX_0) + 1) * sizeof(char)); 
     254              strcpy(opt[0], RRD_PARAM_PREFIX_0); 
     255              opt[1]= (char *) malloc((strlen(name) + 1) * sizeof(char)); 
     256              strcpy(opt[1], name); 
     257              opt[2]= (char *) malloc((strlen(RRD_PARAM_PREFIX_1) + 1) * sizeof(char)); 
     258              strcpy(opt[2], RRD_PARAM_PREFIX_1); 
     259              opt[3]= (char *) malloc((strlen(RRD_PARAM_PREFIX_2) + 1) * sizeof(char)); 
     260              strcpy(opt[3], RRD_PARAM_PREFIX_2); 
     261              opt[4]= (char *) malloc((strlen(RRD_PARAM_PREFIX_3) + 1) * sizeof(char)); 
     262              strcpy(opt[4], RRD_PARAM_PREFIX_3); 
     263              opt[5]= (char *) malloc((strlen(RRD_PARAM_PREFIX_4) + 1) * sizeof(char)); 
     264              strcpy(opt[5], RRD_PARAM_PREFIX_4); 
     265              opt[6]= (char *) malloc((strlen(RRD_PARAM_PREFIX_5) + 1) * sizeof(char)); 
     266              strcpy(opt[6], RRD_PARAM_PREFIX_5); 
     267              opt[7]= (char *) malloc((strlen(RRD_PARAM_PREFIX_6) + 1) * sizeof(char)); 
     268              strcpy(opt[7], RRD_PARAM_PREFIX_6); 
     269              opt[8]= (char *) malloc((strlen(RRD_PARAM_PREFIX_7) + 1) * sizeof(char)); 
     270              strcpy(opt[8], RRD_PARAM_PREFIX_7); 
     271              opt[9]= (char *) malloc((strlen(RRD_PARAM_PREFIX_8) + 1) * sizeof(char)); 
     272              strcpy(opt[9], RRD_PARAM_PREFIX_8); 
     273              opt[10]= (char *) malloc((strlen(RRD_PARAM_PREFIX_9) + 1) * sizeof(char)); 
     274              strcpy(opt[10], RRD_PARAM_PREFIX_9); 
     275              opt[11]= (char *) malloc((strlen(RRD_PARAM_PREFIX_10) + 1) * sizeof(char)); 
     276              strcpy(opt[11], RRD_PARAM_PREFIX_10); 
     277              opt[12]= (char *) malloc((strlen(RRD_PARAM_PREFIX_11) + 1) * sizeof(char)); 
     278              strcpy(opt[12], RRD_PARAM_PREFIX_11); 
     279              opt[13]= (char *) malloc((strlen(RRD_PARAM_PREFIX_12) + 1) * sizeof(char)); 
     280              strcpy(opt[13], RRD_PARAM_PREFIX_12); 
     281              opt[14]= (char *) malloc((strlen(RRD_PARAM_PREFIX_13) + 1) * sizeof(char)); 
     282              strcpy(opt[14], RRD_PARAM_PREFIX_13); 
     283              opt[15]= (char *) malloc((strlen(RRD_PARAM_PREFIX_14) + 1) * sizeof(char)); 
     284              strcpy(opt[15], RRD_PARAM_PREFIX_14); 
     285              opt[16]= (char *) malloc((strlen(RRD_PARAM_PREFIX_15) + 1) * sizeof(char)); 
     286              strcpy(opt[16], RRD_PARAM_PREFIX_15); 
     287              opt[17]= (char *) malloc((strlen(RRD_PARAM_PREFIX_16) + 1) * sizeof(char)); 
     288              strcpy(opt[17], RRD_PARAM_PREFIX_16); 
     289              opt[18]= (char *) malloc((strlen(RRD_PARAM_PREFIX_17) + 1) * sizeof(char)); 
     290              strcpy(opt[18], RRD_PARAM_PREFIX_17); 
     291              opt[19]= (char *) malloc((strlen(RRD_PARAM_PREFIX_18) + 1) * sizeof(char)); 
     292              strcpy(opt[19], RRD_PARAM_PREFIX_18); 
     293              opt[20]= (char *) malloc((strlen(RRD_PARAM_PREFIX_19) + 1) * sizeof(char)); 
     294              strcpy(opt[20], RRD_PARAM_PREFIX_19); 
     295              opt[21]= (char *) malloc((strlen(RRD_PARAM_PREFIX_20) + 1) * sizeof(char)); 
     296              strcpy(opt[21], RRD_PARAM_PREFIX_20); 
     297              opt[22]= (char *) malloc((strlen(RRD_PARAM_PREFIX_21) + 1) * sizeof(char)); 
     298              strcpy(opt[22], RRD_PARAM_PREFIX_21); 
     299              opt[23]= (char *) malloc((strlen(RRD_PARAM_PREFIX_22) + 1) * sizeof(char)); 
     300              strcpy(opt[23], RRD_PARAM_PREFIX_22); 
     301              opt[24]= (char *) malloc((strlen(RRD_PARAM_PREFIX_23) + 1) * sizeof(char)); 
     302              strcpy(opt[24], RRD_PARAM_PREFIX_23); 
     303              opt[25]= (char *) malloc((strlen(RRD_PARAM_PREFIX_24) + 1) * sizeof(char)); 
     304              strcpy(opt[25], RRD_PARAM_PREFIX_24); 
     305              opt[26]= (char *) malloc((strlen(RRD_PARAM_PREFIX_25) + 1) * sizeof(char)); 
     306              strcpy(opt[26], RRD_PARAM_PREFIX_25); 
     307              optind = opterr = 0; 
     308              rrd_clear_error(); 
     309              if ( rrd_create(27,opt) < 0) { 
     310                syslog(LOG_ERR, "RRD create file %s, error: %s\n", name, rrd_get_error()); 
     311                rrd_create_er_ct++; 
     312              } else { 
     313                rrd_create_ok_ct++; 
     314              } 
     315              for ( j=0; j<27; j++) { 
     316                free(opt[j]); 
     317                opt[j] = NULL; 
     318              } 
     319            }else{  
     320              fclose(fp); 
     321              rrd_already_created_ct++; 
     322              snprintf(buf,  
     323                       2048,  
     324                       "%lu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu",   
     325                       now-300,  /* or ctime(&now) with %s */ 
     326                       shmForAgg->prefixV4SubnetTab[index][i].flowNbIN,  /* 1 */ 
     327                       shmForAgg->prefixV4SubnetTab[index][i].flowNbOUT, 
     328                       shmForAgg->prefixV4SubnetTab[index][i].bytesNbIN, 
     329                       shmForAgg->prefixV4SubnetTab[index][i].bytesNbOUT, 
     330                       shmForAgg->prefixV4SubnetTab[index][i].pktsNbIN,  /* 5 */ 
     331                       shmForAgg->prefixV4SubnetTab[index][i].pktsNbOUT, 
     332                       shmForAgg->prefixV4SubnetTab[index][i].firstCoSIN, 
     333                       shmForAgg->prefixV4SubnetTab[index][i].firstCoSOUT, 
     334                       shmForAgg->prefixV4SubnetTab[index][i].secondCoSIN, 
     335                       shmForAgg->prefixV4SubnetTab[index][i].secondCoSOUT, 
     336                       shmForAgg->prefixV4SubnetTab[index][i].thirdCoSIN, 
     337                       shmForAgg->prefixV4SubnetTab[index][i].thirdCoSOUT, 
     338                       shmForAgg->prefixV4SubnetTab[index][i].fourthCoSIN, 
     339                       shmForAgg->prefixV4SubnetTab[index][i].fourthCoSOUT 
     340                       ); 
     341              optUpdate[0]= (char *) malloc((strlen(RRD_UPDATE_0) + 1) * sizeof(char)); 
     342              strcpy(optUpdate[0], RRD_UPDATE_0); 
     343              optUpdate[1]= (char *) malloc((strlen(name) + 1) * sizeof(char)); 
     344              strcpy(optUpdate[1], name); 
     345              optUpdate[2]= (char *) malloc((strlen(buf) + 1) * sizeof(char)); 
     346              strcpy(optUpdate[2], buf); 
     347              optind = opterr = 0;  
     348              rrd_clear_error(); 
     349              if ( rrd_update(3, optUpdate) < 0 ) {  
     350                syslog(LOG_ERR, "RRD update file %s, error: %s\n", name, rrd_get_error()); 
     351                rrd_update_er_ct++; 
     352              } else { 
     353                rrd_update_ok_ct++; 
     354              } 
     355              for ( j=0; j<3; j++) { 
     356                free(optUpdate[j]); 
     357                optUpdate[j] = NULL; 
     358              } 
     359            } 
     360            /* Reinit the shared tables */ 
     361            shmForAgg->prefixV4SubnetTab[index][i].flowNbIN = 0; 
     362            shmForAgg->prefixV4SubnetTab[index][i].bytesNbIN = 0; 
     363            shmForAgg->prefixV4SubnetTab[index][i].pktsNbIN = 0; 
     364            shmForAgg->prefixV4SubnetTab[index][i].flowNbOUT = 0; 
     365            shmForAgg->prefixV4SubnetTab[index][i].bytesNbOUT = 0; 
     366            shmForAgg->prefixV4SubnetTab[index][i].pktsNbOUT = 0; 
     367            shmForAgg->prefixV4SubnetTab[index][i].firstCoSIN = 0; 
     368            shmForAgg->prefixV4SubnetTab[index][i].secondCoSIN = 0; 
     369            shmForAgg->prefixV4SubnetTab[index][i].thirdCoSIN = 0; 
     370            shmForAgg->prefixV4SubnetTab[index][i].fourthCoSIN = 0; 
     371            shmForAgg->prefixV4SubnetTab[index][i].firstCoSOUT = 0; 
     372            shmForAgg->prefixV4SubnetTab[index][i].secondCoSOUT = 0; 
     373            shmForAgg->prefixV4SubnetTab[index][i].thirdCoSOUT = 0; 
     374            shmForAgg->prefixV4SubnetTab[index][i].fourthCoSOUT = 0; 
     375          } 
     376        } 
     377#if defined(MATRIX) && defined(IPV4AGGIDR) 
    233378        /* MATRIX INTER POP ACCOUNTING */ 
    234379        /* rrd */ 
     
    334479        } 
    335480        /* END MATRIX INTER POP ACC */ 
     481#endif /* MATRIX */ 
    336482        now2 = time((time_t *)NULL); 
    337483#ifdef DEBUGAGG 
     
    369515          shmForAgg->prefixV4Tab[index][i].thirdCoSOUT = 0; 
    370516          shmForAgg->prefixV4Tab[index][i].fourthCoSOUT = 0;  
     517 
     518          shmForAgg->prefixV4SubnetTab[index][i].flowNbIN = 0; 
     519          shmForAgg->prefixV4SubnetTab[index][i].bytesNbIN = 0; 
     520          shmForAgg->prefixV4SubnetTab[index][i].pktsNbIN = 0; 
     521          shmForAgg->prefixV4SubnetTab[index][i].flowNbOUT = 0; 
     522          shmForAgg->prefixV4SubnetTab[index][i].bytesNbOUT = 0; 
     523          shmForAgg->prefixV4SubnetTab[index][i].pktsNbOUT = 0; 
     524          shmForAgg->prefixV4SubnetTab[index][i].firstCoSIN = 0; 
     525          shmForAgg->prefixV4SubnetTab[index][i].secondCoSIN = 0; 
     526          shmForAgg->prefixV4SubnetTab[index][i].thirdCoSIN = 0; 
     527          shmForAgg->prefixV4SubnetTab[index][i].fourthCoSIN = 0; 
     528          shmForAgg->prefixV4SubnetTab[index][i].firstCoSOUT = 0; 
     529          shmForAgg->prefixV4SubnetTab[index][i].secondCoSOUT = 0; 
     530          shmForAgg->prefixV4SubnetTab[index][i].thirdCoSOUT = 0; 
     531          shmForAgg->prefixV4SubnetTab[index][i].fourthCoSOUT = 0;  
    371532        } 
    372533        /* reinit */ 
     534#ifdef MATRIX 
    373535        for (i=0; i<ROUTER_INDEX_MAX; i++){ 
    374536          for (j=0; j<ROUTER_INDEX_MAX; j++) { 
     
    378540          } 
    379541        } 
     542#endif 
    380543      } /* end is first update */  
    381544    } /* end read ok */ 
  • trunk/src/renetcolAgg.h

    r50 r59  
    4949  unsigned short v4PrefixNb; 
    5050  struct PrefixV4 prefixV4Tab[2][MAX_IPV4_PREFIX]; 
     51  struct PrefixV4 prefixV4SubnetTab[2][MAX_IPV4_SUBNET]; 
     52#ifdef MATRIX 
    5153  struct POP matrixPOP[2][ROUTER_INDEX_MAX][ROUTER_INDEX_MAX]; 
     54#endif 
    5255  /*  struct PrefixV6 ; */ 
    5356}; /* if you change it, you must change renetcol.h structure */ 
  • trunk/src/renetcolParam.h

    r58 r59  
    2626#define RENETCOLPARAM_H 
    2727 
     28/************************************** 
     29 * Parameters which MUST be changed: 
     30 **************************************/  
     31/*  
     32 * your collector address - syntax: 10.0.0.90  
     33*/ 
     34#define RECEPTION_ADDRESS "" 
     35/*  
     36 * your collector port to recept netflow export  
     37 */  
     38#define RECEPTION_PORT 9999 
     39/*  
     40 * routers number + 1  
     41 */ 
     42#define ROUTER_INDEX_MAX 55 
     43/*  
     44 * FILE with your routers IP address  
     45*/  
     46#define ROUTERS_LIST "/home/andreu/renetcol-0.0.12beta/src/routers.txt" 
     47/*  
     48 * FILE with your prefix/subnet  
     49 */ 
     50#define SUBNETS_LIST "/home/andreu/renetcol-0.0.12beta/src/IPv4_prefix.txt" 
     51/*  
     52 * two constants, here a subnet is include in a prefix  
     53 */ 
     54#define MAX_IPV4_PREFIX 4000 
     55#define MAX_IPV4_SUBNET 1000 
     56/*  
     57 * FILE for the rules  
     58 */ 
     59#define RULES_FILE "/home/andreu/renetcol-0.0.12beta/src/rules.txt" 
     60/*  
     61 * FILE with SNMP index of the interfaces  
     62 * tagged "C"ustomers or "B"ackbone  
     63 */ 
     64#define INTERFACES_TYPE_LIST ""  
     65/*  
     66 * maximum SNMP index  
     67 */ 
     68#define MAX_SNMP_INDEX 900 
    2869/* 
    29  * renetcol param 
    30  */  
     70 * Path to the rrd file 
     71 */ 
     72#define PREFIX_RRD_LOCATION "/mnt/data/RRD/RENATER/IPv4_SUBNET/" 
     73#define MATRIX_RRD_LOCATION "/mnt/data/RRD/RENATER/MATRIX/" 
    3174 
    32 #define RECEPTION_ADDRESS "" /* your collector address - syntax: 10.0.0.90 */ 
    33 #define RECEPTION_PORT 9999 /* your collector port to recept netflow export */ 
    34 #define ROUTER_INDEX_MAX 55 /* routers number + 1 */ 
    35 #define ROUTERS_LIST "/home/andreu/renetcol-0.0.12beta/src/routers.txt"     /* FILE with your routers IP address */  
    36 #define SUBNETS_LIST "/home/andreu/renetcol-0.0.12beta/src/IPv4_prefix.txt"     /* FILE with your subnets */ 
    37 #define RULES_FILE "/home/andreu/renetcol-0.0.12beta/src/rules.txt"       /* FILE for the rules */ 
    38 #define INTERFACES_TYPE_LIST "" /* FILE with SNMP index of the interfaces */ 
    39                                 /* tagged "C"ustomers or "B"ackbone */ 
    40 #define MAX_SNMP_INDEX 900 /* maximum SNMP index for interfaces */ 
    4175 
    42 #define STEP 5  /* interval - in min */ 
     76/**************************************************************** 
     77 * the following parameters CAN be changed but it's NOT REQUIRED 
     78 ***************************************************************/ 
     79#define STEP 5 
    4380#define FIELD_TYPE_NUMBER 89 
    44 #define MAX_RULES_PER_FIELD 10 /* maximum rules number for one field */ 
     81#define MAX_RULES_PER_FIELD 10 
    4582#define SHMSIZE 33554432 
    4683#define SOCKET_BUFFER_SIZE 1500 
    4784#define TIME_OUT 300 
    48  
    49 /* 
    50  * renetcolAgg param 
    51  */ 
    52  
    53 #define PREFIX_RRD_LOCATION "/mnt/data/RRD/RENATER/IPv4_SUBNET/" 
    54 #define MATRIX_RRD_LOCATION "/mnt/data/RRD/RENATER/MATRIX/" 
    5585#define RRD_EXTENSION ".rrd" 
    56  
    5786#define RRD_PARAM_PREFIX_0 "rrdcreate" 
    5887#define RRD_PARAM_PREFIX_1 "--start" 
     
    81110#define RRD_PARAM_PREFIX_24 "RRA:MAX:0.5:24:1550" 
    82111#define RRD_PARAM_PREFIX_25 "RRA:MAX:0.5:288:1594" 
    83  
    84112#define RRD_PARAM_MATRIX_0 "rrdcreate" 
    85113#define RRD_PARAM_MATRIX_1 "--start" 
     
    97125#define RRD_PARAM_MATRIX_13 "RRA:MAX:0.5:24:1550" 
    98126#define RRD_PARAM_MATRIX_14 "RRA:MAX:0.5:288:1594" 
    99  
    100127#define RRD_UPDATE_0 "rrdupdate" 
    101  
    102 /* 
    103  * renetcolSender param 
    104  */ 
    105  
    106128#define RECEPT_PORT "52571" 
    107129#define VAR_SHARED_SIZE 4 
  • trunk/src/routers_mgmt.c

    r58 r59  
    4949    tmp->tplList = NULL; 
    5050    tmp->tplOptList = NULL; 
    51     tmp->sampled = 1; /* ==1 required in case of no sampling configured */ 
     51    tmp->sampled = 0; 
    5252    tmp->next = routersList; 
    5353    if (routersList!=NULL) { routersList->prev = tmp;} 
     
    7070    return routersList; 
    7171  } else { 
    72     fprintf(stderr, "\nSAMPLED VALUE: %lu\n", spled); 
    7372    tmp->sampled = spled;  
    7473    return tmp; 
  • trunk/src/routers_mgmt.h

    r58 r59  
    4848  TplOptionPtr tplOptList; /* list of the optional template definitions */ 
    4949  unsigned long sampled; /* sampling value: (one for) 10, 100 or 1(full mode)*/ 
     50#ifdef IPV4AGGIDSNMP 
    5051  unsigned short snmpIndexList[MAX_SNMP_INDEX]; /* 0:Backbone, 1:Customer */ 
     52#endif 
    5153  RouterPtr next; 
    5254  RouterPtr prev; 
     
    6365  RuleDefPtr *rulesAddressPtr; 
    6466  RulesPtr rulesListPtr;                             /* Rules list */ 
     67#ifdef IPV4AGGIDR 
    6568  unsigned long *routersID; 
     69#endif 
    6670  struct PrefixV4 *currentV4Tab; 
    6771  struct PrefixV4 *secondV4Tab; 
     72  struct PrefixV4 *currentV4SubnetTab; 
     73  struct PrefixV4 *secondV4SubnetTab; 
     74#ifdef MATRIX 
    6875  struct POP *matrixPOP; 
     76#endif 
    6977}; 
    7078