Changeset 61 for trunk

Show
Ignore:
Timestamp:
10/26/07 10:25:49 (15 years ago)
Author:
andreu
Message:

tickets 12,19 & 20 closed

Location:
trunk/src
Files:
8 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/dataFlowSet.c

    r60 r61  
    3535                 int myQueue,  
    3636                 struct PrefixV4 *V4PTab,  
    37                  size_t nbPV4 
     37                 size_t nbPV4, 
     38                 struct PrefixV4 *V4STab, 
     39                 size_t nbSV4 
    3840                 ) 
    3941{ 
     
    6567 
    6668  unsigned short tplMsgType = 11; 
    67   struct PrefixV4 prefixKey, *res, *res2; /* for bsearch */ 
     69  struct PrefixV4 prefixKey, *res, *res2, *resSub; /* for bsearch */ 
    6870#if defined(IPV4AGGIDSNMP) 
    6971  struct PrefixV4 *res3; 
     
    636638                        sizeof(struct PrefixV4), prefGlobalCmp); 
    637639          if (res!=NULL){ 
     640            /* res is supernet or subnet ? */ 
     641            if (res->hasSubnet == 1) { 
     642              resSub = NULL; 
     643              resSub = bsearch(&prefixKey, V4STab, nbSV4,  
     644                               sizeof(struct PrefixV4), prefGlobalCmp); 
     645              if (resSub != NULL) { 
     646                res = resSub; 
     647                resSub = NULL; 
     648              } 
     649            } 
    638650#if defined(IPV4AGGIDR) 
    639             if ( myPtrs->routersID[res->routerNb] == agCache.routerAd  ) {  
     651            if ( myPtrs->routersID[res->routerNb] == agCache.routerAd  ) {  
    640652#elif defined(IPV4AGGIDSNMP) 
    641653            if ( myPtrs->currentRouterPtr->snmpIndexList[agCache.inputSnmp] == 1  ) {          
     
    656668                             sizeof(struct PrefixV4), prefGlobalCmp); 
    657669              if (res3!=NULL){ 
     670                /* res is supernet or subnet ? */ 
     671                if (res3->hasSubnet == 1) { 
     672                  resSub = NULL; 
     673                  resSub = bsearch(&prefixKey, V4STab, nbSV4,  
     674                                   sizeof(struct PrefixV4), prefGlobalCmp); 
     675                  if (resSub != NULL) { 
     676                    res3 = resSub; 
     677                    resSub = NULL; 
     678                  } 
     679                } 
    658680                if (myPtrs->currentRouterPtr->sampled != 0 ){ 
    659681                  /* IN ("traffic to the prefix/subnet")  */ 
     
    672694              prefixKey.beginning = agCache.v4AdD>>(32-agCache.maskD)<<(32-agCache.maskD); 
    673695              res2 = bsearch(&prefixKey, V4PTab, nbPV4,  
    674                             sizeof(struct PrefixV4), prefGlobalCmp); 
     696                             sizeof(struct PrefixV4), prefGlobalCmp); 
    675697              if (res2!=NULL){           
    676698                ((struct POP *)((myPtrs->matrixPOP) 
     
    686708                ( 
    687709                 ((struct POP *)(myPtrs->matrixPOP) 
    688                  +((res->routerNb)*ROUTER_INDEX_MAX) 
    689                  +((ROUTER_INDEX_MAX-1))))->pktsNb += agCache.pkts;  
     710                  +((res->routerNb)*ROUTER_INDEX_MAX) 
     711                  +((ROUTER_INDEX_MAX-1))))->pktsNb += agCache.pkts;  
    690712                ( 
    691713                 ((struct POP *)(myPtrs->matrixPOP) 
    692                  +((res->routerNb)*ROUTER_INDEX_MAX) 
    693                  +((ROUTER_INDEX_MAX-1))))->bytesNb += agCache.bytes;  
     714                  +((res->routerNb)*ROUTER_INDEX_MAX) 
     715                  +((ROUTER_INDEX_MAX-1))))->bytesNb += agCache.bytes;  
    694716                ( 
    695717                 ((struct POP *)(myPtrs->matrixPOP) 
    696                  +((res->routerNb)*ROUTER_INDEX_MAX) 
    697                  +((ROUTER_INDEX_MAX-1))))->flowNb++;  
     718                  +((res->routerNb)*ROUTER_INDEX_MAX) 
     719                  +((ROUTER_INDEX_MAX-1))))->flowNb++;  
    698720              } 
    699721              /* end interpop matrix accounting */ 
    700722#endif /* matrix */ 
    701723            } else { 
    702               /* doublon or bad reference in prefix list */ 
     724                /* doublon or bad reference in prefix list */ 
    703725            } 
    704           } else { /* the prefix in source don't exist in your prefix list */ 
     726          } else { /* res==NULL, the prefix in source don't exist in your prefix list */ 
    705727            prefixKey.beginning = agCache.v4AdD>>(32-agCache.maskD)<<(32-agCache.maskD); 
    706728            res = bsearch(&prefixKey, V4PTab, nbPV4,  
    707729                          sizeof(struct PrefixV4), prefGlobalCmp); 
    708730            if (res!=NULL){ 
     731              /* res is supernet or subnet ? */ 
     732              if (res->hasSubnet == 1) { 
     733                resSub = NULL; 
     734                resSub = bsearch(&prefixKey, V4STab, nbSV4,  
     735                                 sizeof(struct PrefixV4), prefGlobalCmp); 
     736                if (resSub != NULL) { 
     737                  res = resSub; 
     738                  resSub = NULL; 
     739                } 
     740              } 
    709741              if ( myPtrs->currentRouterPtr->snmpIndexList[agCache.inputSnmp] == 1  ) { 
    710742                if (myPtrs->currentRouterPtr->sampled != 0 ){ 
  • trunk/src/dataFlowSet.h

    r60 r61  
    9898                 struct MyPtrs *, 
    9999                 int, 
     100                 struct PrefixV4 *, size_t, 
    100101                 struct PrefixV4 *, size_t 
    101102                 ); 
  • trunk/src/get_conf.c

    r60 r61  
    133133 * read IPv4 prefix file and sort the list 
    134134 */ 
    135 unsigned short getPrefixV4(char *filename, struct PrefixV4 *pV4TabPtr) 
     135unsigned short getPrefixV4(char *filename,  
     136                           struct PrefixV4 *pV4TabPtr, 
     137                           struct PrefixV4 *pV4SubTabPtr, 
     138                           unsigned short *subnetNb) 
    136139{ 
    137140  FILE *prefixFile; 
     
    144147  unsigned char buffer4[4]; 
    145148  int i = 0; 
    146   char prefixStrTab[MAX_IPV4_PREFIX][50]; 
     149  char prefixStrTab[MAX_IPV4_PREFIX+MAX_IPV4_SUBNET][50]; 
     150  struct PrefixV4 lastSuperNet; 
     151  unsigned short lastSuperNetIndex = 0; 
     152  unsigned short superNetIndex = 0; 
     153  unsigned short subNetIndex = 0; 
    147154 
    148155  if (!(prefixFile = fopen(filename, "r"))) { 
     
    150157    exit(1); 
    151158  } 
     159   
     160  *subnetNb = 0; 
     161 
     162  lastSuperNet.beginning = 0; 
     163  lastSuperNet.end = 0; 
     164  lastSuperNet.mask = 0; 
     165  lastSuperNet.sampling = 0; 
     166#ifdef IPV4AGGIDR       
     167  lastSuperNet.routerNb = 0; 
     168#endif 
     169  lastSuperNet.flowNbIN = 0; 
     170  lastSuperNet.bytesNbIN = 0; 
     171  lastSuperNet.pktsNbIN = 0; 
     172  lastSuperNet.flowNbOUT = 0; 
     173  lastSuperNet.bytesNbOUT = 0; 
     174  lastSuperNet.pktsNbOUT = 0; 
     175  lastSuperNet.firstCoSIN = 0; 
     176  lastSuperNet.secondCoSIN = 0; 
     177  lastSuperNet.thirdCoSIN = 0; 
     178  lastSuperNet.fourthCoSIN = 0; 
     179  lastSuperNet.firstCoSOUT = 0; 
     180  lastSuperNet.secondCoSOUT = 0; 
     181  lastSuperNet.thirdCoSOUT = 0; 
     182  lastSuperNet.fourthCoSOUT = 0; 
     183 
    152184  for(i=0;i<MAX_IPV4_PREFIX;i++){ 
    153185    pV4TabPtr[i].beginning = 0; 
     
    173205    pV4TabPtr[i].fourthCoSOUT = 0; 
    174206  } 
     207  for(i=0;i<MAX_IPV4_SUBNET;i++){ 
     208    pV4SubTabPtr[i].beginning = 0; 
     209    pV4SubTabPtr[i].end = 0; 
     210    pV4SubTabPtr[i].mask = 0; 
     211    pV4SubTabPtr[i].sampling = 0; 
     212#ifdef IPV4AGGIDR       
     213    pV4SubTabPtr[i].routerNb = 0; 
     214#endif 
     215    pV4SubTabPtr[i].flowNbIN = 0; 
     216    pV4SubTabPtr[i].bytesNbIN = 0; 
     217    pV4SubTabPtr[i].pktsNbIN = 0; 
     218    pV4SubTabPtr[i].flowNbOUT = 0; 
     219    pV4SubTabPtr[i].bytesNbOUT = 0; 
     220    pV4SubTabPtr[i].pktsNbOUT = 0; 
     221    pV4SubTabPtr[i].firstCoSIN = 0; 
     222    pV4SubTabPtr[i].secondCoSIN = 0; 
     223    pV4SubTabPtr[i].thirdCoSIN = 0; 
     224    pV4SubTabPtr[i].fourthCoSIN = 0; 
     225    pV4SubTabPtr[i].firstCoSOUT = 0; 
     226    pV4SubTabPtr[i].secondCoSOUT = 0; 
     227    pV4SubTabPtr[i].thirdCoSOUT = 0; 
     228    pV4SubTabPtr[i].fourthCoSOUT = 0; 
     229  } 
    175230  while (fgets(line, 50, prefixFile) != 0) 
    176231    { 
    177232      strcpy(prefixStrTab[counter], line); 
    178233      counter++; 
    179       if (counter == MAX_IPV4_PREFIX) { 
     234      if (counter == MAX_IPV4_PREFIX+MAX_IPV4_SUBNET) { 
    180235        fprintf(stderr, "bufferoverflow in getPrefixV4 function (get_conf.c)\ 
    181236change the value of MAX_IPV4_PREFIX  declaration and recompile \n"); 
     
    197252      buffer4[2] = (unsigned char)n1; 
    198253      buffer4[3] = (unsigned char)n0; 
    199       pV4TabPtr[i].beginning =  
    200         *((unsigned long*)&buffer4[0]); 
    201       pV4TabPtr[i].end =  
    202         *((unsigned long*)&buffer4[0]) +~(~0<<(32-n4)); 
    203       pV4TabPtr[i].mask = n4; 
    204       pV4TabPtr[i].sampling = 0; 
    205 #ifdef IPV4AGGIDR       
    206       pV4TabPtr[i].routerNb = n5; 
    207 #endif 
    208       pV4TabPtr[i].flowNbIN = 0; 
    209       pV4TabPtr[i].bytesNbIN = 0; 
    210       pV4TabPtr[i].pktsNbIN = 0; 
    211       pV4TabPtr[i].flowNbOUT = 0; 
    212       pV4TabPtr[i].bytesNbOUT = 0; 
    213       pV4TabPtr[i].pktsNbOUT = 0; 
    214       pV4TabPtr[i].firstCoSIN = 0; 
    215       pV4TabPtr[i].secondCoSIN = 0; 
    216       pV4TabPtr[i].thirdCoSIN = 0; 
    217       pV4TabPtr[i].fourthCoSIN = 0; 
    218       pV4TabPtr[i].firstCoSOUT = 0; 
    219       pV4TabPtr[i].secondCoSOUT = 0; 
    220       pV4TabPtr[i].thirdCoSOUT = 0; 
    221       pV4TabPtr[i].fourthCoSOUT = 0; 
     254      /* we sort supernet and subnet */ 
     255      if (lastSuperNet.beginning == 0) { 
     256        /* case of first supernet */ 
     257        lastSuperNet.beginning = *((unsigned long*)&buffer4[0]); 
     258        lastSuperNet.end = *((unsigned long*)&buffer4[0]) +~(~0<<(32-n4)); 
     259        lastSuperNet.mask = n4; 
     260        lastSuperNetIndex = i; 
     261        superNetIndex++; 
     262        pV4TabPtr[i].beginning =  
     263          *((unsigned long*)&buffer4[0]); 
     264        pV4TabPtr[i].end =  
     265          *((unsigned long*)&buffer4[0]) +~(~0<<(32-n4)); 
     266        pV4TabPtr[i].mask = n4; 
     267        pV4TabPtr[i].sampling = 0; 
     268#ifdef IPV4AGGIDR       
     269        pV4TabPtr[i].routerNb = n5; 
     270#endif 
     271        pV4TabPtr[i].flowNbIN = 0; 
     272        pV4TabPtr[i].bytesNbIN = 0; 
     273        pV4TabPtr[i].pktsNbIN = 0; 
     274        pV4TabPtr[i].flowNbOUT = 0; 
     275        pV4TabPtr[i].bytesNbOUT = 0; 
     276        pV4TabPtr[i].pktsNbOUT = 0; 
     277        pV4TabPtr[i].firstCoSIN = 0; 
     278        pV4TabPtr[i].secondCoSIN = 0; 
     279        pV4TabPtr[i].thirdCoSIN = 0; 
     280        pV4TabPtr[i].fourthCoSIN = 0; 
     281        pV4TabPtr[i].firstCoSOUT = 0; 
     282        pV4TabPtr[i].secondCoSOUT = 0; 
     283        pV4TabPtr[i].thirdCoSOUT = 0; 
     284        pV4TabPtr[i].fourthCoSOUT = 0; 
     285         
     286      } else if ( (lastSuperNet.beginning <= *((unsigned long*)&buffer4[0])) 
     287                  && (lastSuperNet.end>=*((unsigned long*)&buffer4[0]) +~(~0<<(32-n4))) ) { 
     288        /* we are in the case of subnet */ 
     289        *subnetNb += 1; 
     290        fprintf(stderr,"SUBNET %lu SUPERNET %lu %lu, subnetnb : %hu\n", 
     291                *((unsigned long*)&buffer4[0]), 
     292                pV4TabPtr[lastSuperNetIndex].beginning, 
     293                pV4TabPtr[lastSuperNetIndex].end, 
     294                *subnetNb); 
     295         
     296        pV4TabPtr[lastSuperNetIndex].hasSubnet = 1; 
     297        pV4SubTabPtr[subNetIndex].beginning =  
     298          *((unsigned long*)&buffer4[0]); 
     299        pV4SubTabPtr[subNetIndex].end =  
     300          *((unsigned long*)&buffer4[0]) +~(~0<<(32-n4)); 
     301        pV4SubTabPtr[subNetIndex].mask = n4; 
     302        pV4SubTabPtr[subNetIndex].sampling = 0; 
     303#ifdef IPV4AGGIDR       
     304        pV4SubTabPtr[subNetIndex].routerNb = n5; 
     305#endif 
     306        pV4SubTabPtr[subNetIndex].flowNbIN = 0; 
     307        pV4SubTabPtr[subNetIndex].bytesNbIN = 0; 
     308        pV4SubTabPtr[subNetIndex].pktsNbIN = 0; 
     309        pV4SubTabPtr[subNetIndex].flowNbOUT = 0; 
     310        pV4SubTabPtr[subNetIndex].bytesNbOUT = 0; 
     311        pV4SubTabPtr[subNetIndex].pktsNbOUT = 0; 
     312        pV4SubTabPtr[subNetIndex].firstCoSIN = 0; 
     313        pV4SubTabPtr[subNetIndex].secondCoSIN = 0; 
     314        pV4SubTabPtr[subNetIndex].thirdCoSIN = 0; 
     315        pV4SubTabPtr[subNetIndex].fourthCoSIN = 0; 
     316        pV4SubTabPtr[subNetIndex].firstCoSOUT = 0; 
     317        pV4SubTabPtr[subNetIndex].secondCoSOUT = 0; 
     318        pV4SubTabPtr[subNetIndex].thirdCoSOUT = 0; 
     319        pV4SubTabPtr[subNetIndex].fourthCoSOUT = 0; 
     320        subNetIndex++; 
     321      } else { 
     322        /* we are in the supernet case */ 
     323        lastSuperNet.beginning = *((unsigned long*)&buffer4[0]); 
     324        lastSuperNet.end = *((unsigned long*)&buffer4[0]) +~(~0<<(32-n4)); 
     325        lastSuperNet.mask = n4; 
     326        lastSuperNetIndex = i; 
     327        pV4TabPtr[superNetIndex].beginning =  
     328          *((unsigned long*)&buffer4[0]); 
     329        pV4TabPtr[superNetIndex].end =  
     330          *((unsigned long*)&buffer4[0]) +~(~0<<(32-n4)); 
     331        pV4TabPtr[superNetIndex].mask = n4; 
     332        pV4TabPtr[superNetIndex].sampling = 0; 
     333#ifdef IPV4AGGIDR       
     334        pV4TabPtr[superNetIndex].routerNb = n5; 
     335#endif 
     336        pV4TabPtr[superNetIndex].flowNbIN = 0; 
     337        pV4TabPtr[superNetIndex].bytesNbIN = 0; 
     338        pV4TabPtr[superNetIndex].pktsNbIN = 0; 
     339        pV4TabPtr[superNetIndex].flowNbOUT = 0; 
     340        pV4TabPtr[superNetIndex].bytesNbOUT = 0; 
     341        pV4TabPtr[superNetIndex].pktsNbOUT = 0; 
     342        pV4TabPtr[superNetIndex].firstCoSIN = 0; 
     343        pV4TabPtr[superNetIndex].secondCoSIN = 0; 
     344        pV4TabPtr[superNetIndex].thirdCoSIN = 0; 
     345        pV4TabPtr[superNetIndex].fourthCoSIN = 0; 
     346        pV4TabPtr[superNetIndex].firstCoSOUT = 0; 
     347        pV4TabPtr[superNetIndex].secondCoSOUT = 0; 
     348        pV4TabPtr[superNetIndex].thirdCoSOUT = 0; 
     349        pV4TabPtr[superNetIndex].fourthCoSOUT = 0; 
     350        superNetIndex++; 
     351      } 
    222352    } 
    223353  if( fclose(prefixFile) == 0) { 
    224     return (counter); 
     354    return (superNetIndex); 
    225355  } else { 
    226356    fprintf(stderr,"%s not closed, \n", filename); 
    227357    exit(1); 
    228     return(counter); 
     358    return(superNetIndex); 
    229359  } 
    230360} 
  • trunk/src/get_conf.h

    r60 r61  
    5757int longCmp(const void *, const void *); 
    5858int getRegisteredRouters(char *, unsigned long *, unsigned long *); 
    59 unsigned short getPrefixV4(char *, struct PrefixV4 *); 
     59unsigned short getPrefixV4(char *, struct PrefixV4 *, struct PrefixV4 *, 
     60                           unsigned short *); 
    6061unsigned short getAS(char *, struct AS *); 
    6162 
  • trunk/src/renetcol.c

    r60 r61  
    121121  /* Create the list of routers */ 
    122122  for (i=0; i<routerNb; i++){ 
    123     fprintf(stderr, "add router : %lu\n", sortedRouterList[i]); 
    124123    routersListPtr = addRouter(routersListPtr, sortedRouterList[i]); 
    125124  } 
     
    136135  } 
    137136 
    138   if ( (shmForAgg->v4PrefixNb = getPrefixV4(SUBNETS_LIST, &(shmForAgg->prefixV4Tab[0][0]))) < 1){ 
     137  if ( (shmForAgg->v4PrefixNb =  
     138        getPrefixV4(SUBNETS_LIST,  
     139                    &(shmForAgg->prefixV4Tab[0][0]), 
     140                    &(shmForAgg->prefixV4SubnetTab[0][0]), 
     141                    &(shmForAgg->v4SubnetNb) 
     142                    )) < 1){ 
    139143    fprintf(stderr, "renetcol: Error in %s\n", SUBNETS_LIST); 
    140     exit(1); 
    141144  } else { 
    142     fprintf(stderr, "%hu prefix are readed from %s\n",  
     145    fprintf(stderr, "We have found %hu supernets from %s\n",  
    143146            shmForAgg->v4PrefixNb, 
    144147            SUBNETS_LIST); 
    145   } 
    146   if ( (shmForAgg->v4PrefixNb = getPrefixV4(SUBNETS_LIST, &(shmForAgg->prefixV4Tab[1][0]))) < 1){ 
     148    fprintf(stderr, "and %hu subnets\n",  
     149            shmForAgg->v4SubnetNb);     
     150  } 
     151  if ( (shmForAgg->v4PrefixNb =  
     152        getPrefixV4(SUBNETS_LIST,  
     153                    &(shmForAgg->prefixV4Tab[1][0]), 
     154                    &(shmForAgg->prefixV4SubnetTab[1][0]), 
     155                    &(shmForAgg->v4SubnetNb) 
     156                    )) < 1){ 
    147157    fprintf(stderr, "renetcol: Error in %s\n", SUBNETS_LIST); 
    148158    exit(1); 
    149159  } 
     160/*   for (i=0; i<shmForAgg->v4PrefixNb; i++){ */ 
     161/*    fprintf(stderr, "SUPERNET : %lu, %hu\n",shmForAgg->prefixV4Tab[0][i].beginning, shmForAgg->prefixV4Tab[0][i].hasSubnet); */ 
     162/*   } */ 
     163/*   for (i=0; i<shmForAgg->v4SubnetNb; i++){ */ 
     164/*    fprintf(stderr, "SUBNET : %lu, %hu\n",shmForAgg->prefixV4SubnetTab[0][i].beginning, shmForAgg->prefixV4SubnetTab[0][i].hasSubnet); */ 
     165/*   } */ 
    150166 
    151167  shmForAgg->currentTable = 0; 
     
    520536                                         myQueue,  
    521537                                         shmForAgg->prefixV4Tab[shmForAgg->currentTable], 
    522                                          (size_t) shmForAgg->v4PrefixNb 
    523                                          ) ) < 0 ) { 
     538                                         (size_t) shmForAgg->v4PrefixNb, 
     539                                         shmForAgg->prefixV4SubnetTab[shmForAgg->currentTable], 
     540                                         (size_t) shmForAgg->v4SubnetNb) ) < 0 ) { 
    524541#ifdef DEBUG     
    525542            fprintf (stderr, "wd>\n"); 
  • trunk/src/renetcol.h

    r60 r61  
    6868  unsigned short readed; 
    6969  unsigned short v4PrefixNb; 
     70  unsigned short v4SubnetNb; 
    7071#ifdef ASACC 
    7172  unsigned short ASNb; 
  • trunk/src/renetcolAgg.c

    r60 r61  
    5353  static char name[2048]; 
    5454  static char ipStr[24]; 
     55#if defined(MATRIX) && defined(IPV4AGGIDR) 
    5556  static char indexStr[24]; 
     57#endif 
    5658  static char asStr[7]; 
    5759  static char createstr[2048]; 
     
    233235        } 
    234236        /* ACCOUNTING for prefixV4SubnetTab */ 
    235         for (i=0; i<shmForAgg->v4PrefixNb; i++){ 
     237        for (i=0; i<shmForAgg->v4SubnetNb; i++){ 
    236238          /* HERE create or update RRD FILE */ 
    237239          if (shmForAgg->prefixV4SubnetTab[index][i].sampling != 0) { 
     
    630632          shmForAgg->prefixV4Tab[index][i].thirdCoSOUT = 0; 
    631633          shmForAgg->prefixV4Tab[index][i].fourthCoSOUT = 0;  
    632  
     634        } 
     635        for (i=0; i<shmForAgg->v4SubnetNb; i++){         
    633636          shmForAgg->prefixV4SubnetTab[index][i].flowNbIN = 0; 
    634637          shmForAgg->prefixV4SubnetTab[index][i].bytesNbIN = 0; 
  • trunk/src/renetcolAgg.h

    r60 r61  
    4949  unsigned short readed; 
    5050  unsigned short v4PrefixNb; 
     51  unsigned short v4SubnetNb; 
    5152#ifdef ASACC 
    5253  unsigned short ASNb;