Changeset 95

Show
Ignore:
Timestamp:
02/09/09 17:55:11 (14 years ago)
Author:
andreu
Message:

IPv6 link aggregation mode (first step : identify flows)

Location:
trunk
Files:
10 modified

Legend:

Unmodified
Added
Removed
  • trunk/configure.in

    r94 r95  
    1414CFLAGS_IPV4AGGIDSNMP="-DIPV4AGGIDSNMP" 
    1515CFLAGS_IPV6AGGIDSNMP="-DIPV6AGGIDSNMP" 
     16CFLAGS_IPV6LINKAGG="-DIPV6LINKAGG" 
    1617CFLAGS_IPV4AGGIDR="-DIPV4AGGIDR" 
    1718CFLAGS_MATRIX="-DMATRIX" 
     
    6465fi 
    6566 
    66 AC_ARG_ENABLE(ipv6aggidsnmp,[  --enable-ipv6aggidsnmp aggregation for IPv6 prefix, localisation based on SNMP ID=yes], 
    67 ipv6aggidsnmp=$enableval,ipv6aggidsnmp=yes) 
     67AC_ARG_ENABLE(ipv6aggidsnmp,[  --enable-ipv6aggidsnmp aggregation for IPv6 prefix, localisation based on SNMP ID=no], 
     68ipv6aggidsnmp=$enableval,ipv6aggidsnmp=no) 
    6869if test $ipv6aggidsnmp = yes ; then 
    6970CFLAGS="$CFLAGS $CFLAGS_IPV6AGGIDSNMP" 
     71fi 
     72 
     73AC_ARG_ENABLE(ipv6linkagg,[  --enable-ipv6linkagg aggregation for IPv6 link agg (based on SNMP ID)=no], 
     74ipv6linkagg=$enableval,ipv6linkagg=no) 
     75if test $ipv6linkagg = yes ; then 
     76CFLAGS="$CFLAGS $CFLAGS_IPV6LINKAGG" 
    7077fi 
    7178 
  • trunk/src/dataFlowSet.c

    r94 r95  
    7676  struct AggCache agCache; 
    7777  int bool = 0; /* in IPV4 Agg mode enabled, we need to now if it's an IPv4 */ 
     78  int isIPv6 = 0; 
    7879  /* flow, we test on the field and then put bool at 1 */ 
    7980  int isMplsFlow = 0; 
     
    350351              break; 
    351352            case 16: 
    352               for (i=0; i<4; i++) { 
    353                 buffer4[3]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
    354                 (*myPtrs->offsetV9Ptr)++; 
    355                 buffer4[2]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
    356                 (*myPtrs->offsetV9Ptr)++; 
    357                 buffer4[1]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
    358                 (*myPtrs->offsetV9Ptr)++; 
    359                 buffer4[0]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
    360                 (*myPtrs->offsetV9Ptr)++; 
    361                 if (1==moreIsNecessary){ 
    362                   switch(i){ 
    363                   case 0: 
    364                     if (((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask <= 32){ 
    365                       if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
    366                           ==  
    367                           (*((unsigned long*)&buffer4))>>(32-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask)<<(32-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask) 
    368                           ) 
    369                         { 
    370                           ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 1; 
     353              if ((pftmp->fieldType==27)||(pftmp->fieldType==28)){ 
     354                isIPv6 = 1; 
     355                for (i=0; i<4; i++) { 
     356                  buffer4[3]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
     357                  (*myPtrs->offsetV9Ptr)++; 
     358                  buffer4[2]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
     359                  (*myPtrs->offsetV9Ptr)++; 
     360                  buffer4[1]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
     361                  (*myPtrs->offsetV9Ptr)++; 
     362                  buffer4[0]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
     363                  (*myPtrs->offsetV9Ptr)++; 
     364                  if (1==moreIsNecessary){ 
     365                    switch(i){ 
     366                    case 0: 
     367                      if (((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask <= 32){ 
     368                        if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
     369                            ==  
     370                            (*((unsigned long*)&buffer4))>>(32-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask)<<(32-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask) 
     371                            ) 
     372                          { 
     373                            ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 1; 
     374                            moreIsNecessary = 0; 
     375                          } else { 
     376                          ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
    371377                          moreIsNecessary = 0; 
    372                         } else { 
    373                         ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
     378                        } 
     379                      } else { 
     380                        if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
     381                            ==  
     382                            (*((unsigned long*)&buffer4)) 
     383                            ) 
     384                          { 
     385                            ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 1; 
     386                          } else { 
     387                          ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
     388                          moreIsNecessary = 0; 
     389                        } 
     390                      } 
     391                      break; 
     392                    case 1: 
     393                      if (((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask <= 64){ 
     394                        if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
     395                            ==  
     396                            (*((unsigned long*)&buffer4))>>(64-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask)<<(64-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask) 
     397                            ) 
     398                          { 
     399                            ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 
     400                              ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check && 1; 
     401                            moreIsNecessary = 0; 
     402                          } else { 
     403                          ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
     404                          moreIsNecessary = 0; 
     405                        } 
     406                      } else { 
     407                        if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
     408                            ==  
     409                            (*((unsigned long*)&buffer4)) 
     410                            ) 
     411                          { 
     412                            ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check =  
     413                              ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check && 1; 
     414                          } else { 
     415                          ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
     416                          moreIsNecessary = 0; 
     417                        } 
     418                      } 
     419                      break; 
     420                    case 2: 
     421                      if (((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask <= 96){ 
     422                        if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
     423                            ==  
     424                            (*((unsigned long*)&buffer4))>>(96-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask)<<(96-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask) 
     425                            ) 
     426                          { 
     427                            ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 
     428                              ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check && 1; 
     429                            moreIsNecessary = 0; 
     430                          } else { 
     431                          ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
    374432                        moreIsNecessary = 0; 
     433                        } 
     434                      } else { 
     435                        if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
     436                            ==  
     437                            (*((unsigned long*)&buffer4)) 
     438                            ) 
     439                          { 
     440                            ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check =  
     441                              ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check && 1; 
     442                          } else { 
     443                          ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
     444                          moreIsNecessary = 0; 
     445                        } 
    375446                      } 
    376                     } else { 
    377                       if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
    378                           ==  
    379                           (*((unsigned long*)&buffer4)) 
    380                           ) 
    381                         { 
    382                           ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 1; 
    383                         } else { 
    384                         ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
    385                         moreIsNecessary = 0; 
     447                      break; 
     448                    case 3: 
     449                      if (((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask <= 128){ 
     450                        if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
     451                            ==  
     452                            (*((unsigned long*)&buffer4))>>(128-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask)<<(128-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask) 
     453                            ) 
     454                          { 
     455                            ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 
     456                              ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check && 1; 
     457                          } else { 
     458                          ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
     459                          moreIsNecessary = 0; 
     460                        } 
     461                      } else { 
     462                        if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
     463                            ==  
     464                            (*((unsigned long*)&buffer4)) 
     465                            ) 
     466                          { 
     467                            ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check =  
     468                              ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check && 1; 
     469                          } else { 
     470                          ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
     471                          moreIsNecessary = 0; 
     472                        } 
    386473                      } 
    387                     } 
    388                     break; 
    389                   case 1: 
    390                     if (((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask <= 64){ 
    391                       if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
    392                           ==  
    393                           (*((unsigned long*)&buffer4))>>(64-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask)<<(64-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask) 
    394                           ) 
    395                         { 
    396                           ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 
    397                             ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check && 1; 
    398                           moreIsNecessary = 0; 
    399                         } else { 
    400                         ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
    401                         moreIsNecessary = 0; 
    402                       } 
    403                     } else { 
    404                       if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
    405                           ==  
    406                           (*((unsigned long*)&buffer4)) 
    407                           ) 
    408                         { 
    409                           ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check =  
    410                             ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check && 1; 
    411                         } else { 
    412                         ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
    413                         moreIsNecessary = 0; 
    414                       } 
    415                     } 
    416                     break; 
    417                   case 2: 
    418                     if (((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask <= 96){ 
    419                       if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
    420                           ==  
    421                           (*((unsigned long*)&buffer4))>>(96-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask)<<(96-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask) 
    422                           ) 
    423                         { 
    424                           ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 
    425                             ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check && 1; 
    426                           moreIsNecessary = 0; 
    427                         } else { 
    428                         ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
    429                         moreIsNecessary = 0; 
    430                       } 
    431                     } else { 
    432                       if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
    433                           ==  
    434                           (*((unsigned long*)&buffer4)) 
    435                           ) 
    436                         { 
    437                           ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check =  
    438                             ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check && 1; 
    439                         } else { 
    440                         ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
    441                         moreIsNecessary = 0; 
    442                       } 
    443                     } 
    444                     break; 
    445                   case 3: 
    446                     if (((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask <= 128){ 
    447                       if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
    448                           ==  
    449                           (*((unsigned long*)&buffer4))>>(128-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask)<<(128-((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->mask) 
    450                           ) 
    451                         { 
    452                           ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 
    453                             ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check && 1; 
    454                         } else { 
    455                         ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
    456                         moreIsNecessary = 0; 
    457                       } 
    458                     } else { 
    459                       if (ntohl(((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->value->stor.tabAdd6[i])  
    460                           ==  
    461                           (*((unsigned long*)&buffer4)) 
    462                           ) 
    463                         { 
    464                           ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check =  
    465                             ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check && 1; 
    466                         } else { 
    467                         ((RuleDefPtr)(*(myPtrs->rulesAddressPtr+pos)))->check = 0; 
    468                         moreIsNecessary = 0; 
    469                       } 
    470                     } 
    471                     break; 
    472                   default: 
    473                     break; 
    474                   } /* end of switch(i) */ 
    475                 } /* end of if moreIsNecessary */ 
    476               } 
    477               moreIsNecessary = 1; 
    478               /* aggregation for IPv6 flows */ 
    479  
    480               /* end aggregation */ 
     474                      break; 
     475                    default: 
     476                      break; 
     477                    } /* end of switch(i) */ 
     478                  } /* end of if moreIsNecessary */ 
     479#if defined IPV6AGGIDSNMP 
     480                  if ((pftmp->fieldType==27)){ 
     481                    agCache.tabAdd6S[i] = *((unsigned long*)&buffer4); 
     482                  } else if ((pftmp->fieldType==28)){ 
     483                    agCache.tabAdd6D[i] = *((unsigned long*)&buffer4); 
     484                  } 
     485#endif 
     486                } 
     487                moreIsNecessary = 1; 
     488                /* aggregation for IPv6 flows */ 
     489                 
     490                /* end aggregation */ 
     491              } /* end of : if ((pftmp->fieldType==27)||(pftmp->fieldType==28)){ */ 
    481492              break; 
    482493            default: 
     
    598609          break; 
    599610        case 16: 
     611          if ((pftmp->fieldType==27)||(pftmp->fieldType==28)){ 
     612            isIPv6 = 1; 
     613          } 
    600614          for (i=0; i<4; i++) { 
    601             buffer2[1]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
     615            buffer4[3]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
    602616            (*myPtrs->offsetV9Ptr)++; 
    603             buffer2[0]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
     617            buffer4[2]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
    604618            (*myPtrs->offsetV9Ptr)++; 
    605             buffer2[1]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
     619            buffer4[1]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
    606620            (*myPtrs->offsetV9Ptr)++; 
    607             buffer2[0]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
     621            buffer4[0]= *(myPtrs->ptr_buffer+(*myPtrs->offsetV9Ptr));  
    608622            (*myPtrs->offsetV9Ptr)++; 
    609           } 
    610           /* aggregation IPv6 */           
    611           /* end aggregation */ 
     623#if defined IPV6AGGIDSNMP 
     624            if ((pftmp->fieldType==27)){ 
     625              agCache.tabAdd6S[i] = *((unsigned long*)&buffer4); 
     626            } else if ((pftmp->fieldType==28)){ 
     627              agCache.tabAdd6D[i] = *((unsigned long*)&buffer4); 
     628            } 
     629#endif 
     630          } 
    612631          break; 
    613632        default: 
     
    10651084        } /* end of the prefix is in our list */ 
    10661085        bool = 0; 
     1086#endif /* (IPV4AGGIDR) || (IPV4AGGIDSNMP) */ 
     1087#ifdef IPV6LINKAGG 
     1088        if ( ( isIPv6 == 1 ) && (isMplsFlow == 0) ){ 
     1089          for (i=0; i<MAX_INDEX_BY_ROUTER; i++){ /* FIXME : to optimized */ 
     1090            if (agCache.inputSnmp == myPtrs->currentRouterPtr->snmpIndexID[i] ) { 
     1091              break; 
     1092            } 
     1093          } 
     1094          /* FIXME : here we need to make two case switch sampling values !!! */ 
     1095          ((struct IndexV6 *)((myPtrs->currentV6IndexTab) 
     1096                              +((myPtrs->currentRouterPtr->ID)*ROUTER_INDEX_MAX) 
     1097                              +(agCache.inputSnmp)))->bytesNbIN = agCache.bytes; 
     1098          for (i=0; i<MAX_INDEX_BY_ROUTER; i++){ /* FIXME : to optimized */ 
     1099            if (agCache.outputSnmp == myPtrs->currentRouterPtr->snmpIndexID[i] ) { 
     1100              break; 
     1101            } 
     1102          } 
     1103          ((struct IndexV6 *)((myPtrs->currentV6IndexTab) 
     1104                              +((myPtrs->currentRouterPtr->ID)*ROUTER_INDEX_MAX) 
     1105                              +(agCache.outputSnmp)))->bytesNbOUT = agCache.bytes; 
     1106          isIPv6 = 0; 
     1107          fprintf(stderr,"IPV6LINKAGG .%hu -> .%hu , router : %lu\n", 
     1108                 agCache.inputSnmp, 
     1109                 agCache.outputSnmp, 
     1110                 myPtrs->currentRouterPtr->IpAddress 
     1111                 ); 
     1112        } 
     1113#endif /* IPV6LINKAGG */ 
    10671114        isMplsFlow = 0; 
    1068 #endif /* (IPV4AGGIDR) || (IPV4AGGIDSNMP) */ 
    10691115        /*  
    10701116         * 
  • trunk/src/get_conf.c

    r94 r95  
    701701      } 
    702702    } 
    703   qsort(prefixStrTab, prefixIndex, sizeof(struct PrefixV6), prefixV6Cmp); 
     703  qsort(pV6TabPtr, prefixIndex, sizeof(struct PrefixV6), prefixV6Cmp); 
    704704  if( fclose(prefixFile) == 0) { 
    705705    return (prefixIndex); 
  • trunk/src/get_conf.h

    r94 r95  
    7676}; 
    7777 
     78struct IndexV6{ 
     79  unsigned long routerIPAddress; 
     80  unsigned short indexSNMP;  
     81  unsigned long long flowNbIN;  /* WARNING !!! */ 
     82  unsigned long long bytesNbIN; /* Here, IN means "IN the equipement" */ 
     83  unsigned long long pktsNbIN;  
     84  unsigned long long flowNbOUT; 
     85  unsigned long long bytesNbOUT; 
     86  unsigned long long pktsNbOUT; 
     87}; 
     88 
    7889void initConf(char *); 
    7990int longCmp(const void *, const void *); 
  • trunk/src/renetcol.c

    r94 r95  
    9898  int i,j; 
    9999  int k; 
     100  unsigned short routerIndex = 0; 
    100101 
    101102#if defined(IPV4AGGIDR) 
     
    108109#if defined(IPV6AGGIDSNMP) 
    109110  fprintf(stderr, "renetcol compilation and execution with IPv6 Aggregation feature enable based on SNMP ID in %s file.\n", INTERFACES_TYPE_LIST); 
     111#endif 
     112#if defined(IPV6LINKAGG) 
     113  fprintf(stderr, "renetcol compilation and execution with IPv6 Links Aggregation.\n"); 
    110114#endif 
    111115   
     
    123127  } 
    124128  /* Create the list of routers */ 
    125   for (i=0; i<routerNb; i++){ 
    126     routersListPtr = addRouter(routersListPtr, sortedRouterList[i]); 
     129  for (routerIndex=0; routerIndex<routerNb; routerIndex++){ 
     130    routersListPtr = addRouter(routersListPtr, sortedRouterList[routerIndex],routerIndex); 
    127131  } 
    128132   
     
    162166  } 
    163167#if defined(IPV6AGGIDSNMP) 
     168fprintf(stderr, "ci0\n"); 
    164169  if ( (shmForAgg->v6PrefixNb =  
    165170        getPrefixV6(SUBNETS_V6_LIST,  
     
    179184    exit(1); 
    180185  } 
     186fprintf(stderr, "ci00\n"); 
    181187#endif 
    182188 
     
    230236    exit(4); 
    231237  } 
    232  
     238fprintf(stderr, " handler, SIGUSR1 from renetcolSender\n"); 
    233239  /* handler, SIGUSR1 from renetcolSender */ 
    234240  myAction.sa_handler = sigusr1Mgmt; 
     
    238244  sigaction (SIGUSR1, &myAction, NULL); 
    239245 
     246fprintf(stderr, " Cache for fast rules access\n"); 
    240247  /* Cache for fast rules access */ 
    241248  setCache(myPtrs.rulesListPtr); 
    242249  myPtrs.rulesAddressPtr = (RuleDefPtr *)rulesAddress; 
    243  
     250fprintf(stderr, "IPC messages queue init\n"); 
    244251  /* IPC messages queue init */ 
    245252  myKey = createKey(argv[0]); 
    246253  myQueue = createQueue(myKey); 
    247254  sendMyPid(myQueue); 
    248  
     255fprintf(stderr, "get SNMP index information\n"); 
    249256  /* get SNMP index information */ 
    250257#ifdef IPV4AGGIDSNMP 
     
    264271  myPtrs.currentV4Tab = shmForAgg->prefixV4Tab[shmForAgg->currentTable]; 
    265272  myPtrs.secondV4Tab = shmForAgg->prefixV4Tab[shmForAgg->secondTable]; 
     273#ifdef IPV6AGGIDSNMP 
     274fprintf(stderr, "ci1\n"); 
     275  myPtrs.currentV6Tab = shmForAgg->prefixV6Tab[shmForAgg->currentTable]; 
     276  myPtrs.secondV6Tab = shmForAgg->prefixV6Tab[shmForAgg->secondTable]; 
     277#endif 
     278#ifdef IPV6LINKAGG 
     279fprintf(stderr, "ci2\n"); 
     280  myPtrs.currentV6IndexTab = shmForAgg->indexV6Tab[shmForAgg->currentTable]; 
     281  myPtrs.secondV6IndexTab = shmForAgg->indexV6Tab[shmForAgg->secondTable]; 
     282fprintf(stderr, "ci3\n"); 
     283#endif 
    266284#ifdef ASACC 
    267285  myPtrs.asNb = shmForAgg->ASNb; 
     
    285303    } 
    286304  } 
     305#endif 
     306  /* INIT IPV6 index TABLES */ 
     307#ifdef IPV6LINKAGG 
     308fprintf(stderr, "ci\n"); 
     309  for (i=0; i<ROUTER_INDEX_MAX; i++){ 
     310    for (j=0; j<MAX_INDEX_BY_ROUTER; j++) { 
     311      shmForAgg->indexV6Tab[0][i][j].bytesNbIN = 0; 
     312      shmForAgg->indexV6Tab[0][i][j].pktsNbIN = 0; 
     313      shmForAgg->indexV6Tab[0][i][j].flowNbIN = 0; 
     314      shmForAgg->indexV6Tab[1][i][j].bytesNbOUT = 0; 
     315      shmForAgg->indexV6Tab[1][i][j].pktsNbOUT = 0; 
     316      shmForAgg->indexV6Tab[1][i][j].flowNbOUT = 0; 
     317    } 
     318  } 
     319fprintf(stderr, "icci\n"); 
    287320#endif 
    288321 
  • trunk/src/renetcol.h

    r94 r95  
    8080#endif 
    8181  struct PrefixV6 prefixV6Tab[2][MAX_IPV6_PREFIX]; 
     82#if defined(IPV6LINKAGG) && defined(IPV6AGGIDSNMP) 
     83  struct IndexV6 indexV6Tab[2][ROUTER_INDEX_MAX][MAX_INDEX_BY_ROUTER]; 
     84#endif 
    8285}; 
    83  
    8486 
    8587void setCache(RulesPtr); 
  • trunk/src/renetcolAgg.h

    r94 r95  
    6161#endif 
    6262 struct PrefixV6 prefixV6Tab[2][MAX_IPV6_PREFIX]; 
     63#ifdef IPV6LINKAGG && IPV6AGGIDSNMP 
     64  struct IndexV6 indexV6Tab[2][ROUTER_INDEX_MAX][MAX_INDEX_BY_ROUTER]; 
     65#endif 
    6366};  
  • trunk/src/renetcolParam.h

    r94 r95  
    9090 
    9191/* 
     92 * maximum number of interfaces by router (one interface == one SNMP index) 
     93 */  
     94#define MAX_INDEX_BY_ROUTER 150  
     95 
     96/* 
    9297 * Path to the rrd file 
    9398 */ 
  • trunk/src/routers_mgmt.c

    r84 r95  
    3939} 
    4040 
    41 RouterPtr addRouter(RouterPtr routersList, unsigned long address)  
     41RouterPtr addRouter(RouterPtr routersList, unsigned long address, unsigned short id)  
    4242{ 
    4343  RouterPtr tmp = (RouterPtr) malloc(sizeof(struct Router)); 
    4444  if (tmp==NULL) { 
    45     syslog(LOG_ERR, "ERROR in malloc in add_routers function\n"); 
     45    syslog(LOG_ERR, "ERROR in malloc in addRouter function\n"); 
    4646    exit(1); 
    4747  } else { 
    4848    tmp->IpAddress = address; 
     49    tmp->ID = id; 
    4950    tmp->tplList = NULL; 
    5051    tmp->tplOptList = NULL; 
     
    167168  unsigned long ipAddress; 
    168169  RouterPtr routerTmp = NULL; 
     170  unsigned short snmpIndex = 0; 
     171  unsigned short snmpCpt = 0; 
    169172 
    170173  if (!(indexFile = fopen(filename, "r"))) { 
     
    198201        exit(1); 
    199202      } 
     203      snmpCpt = 0; 
    200204    }else{ 
    201205      if ( strspn(line, "I") == 1 ) { 
     
    211215        if ( strcmp(tid, "B") == 0 ) { 
    212216          routerTmp->snmpIndexList[index] = 0; 
     217          routerTmp->snmpIndexID[snmpCpt] = index; 
     218          routerTmp->snmpIndexType[snmpCpt] = 0; 
    213219        } else if ( strcmp(tid, "C") == 0 ) { 
    214220          routerTmp->snmpIndexList[index] = 1; 
     221          routerTmp->snmpIndexID[snmpCpt] = index; 
     222          routerTmp->snmpIndexType[snmpCpt] = 1; 
    215223        } else { 
    216224          fprintf(stderr, "Error in file %s, line %d : bad code B or C \n",  
  • trunk/src/routers_mgmt.h

    r60 r95  
    4848  TplOptionPtr tplOptList; /* list of the optional template definitions */ 
    4949  unsigned long sampled; /* sampling value: (one for) 10, 100 or 1(full mode)*/ 
     50  unsigned short ID;       /* internal ID */ 
    5051#ifdef IPV4AGGIDSNMP 
    5152  unsigned short snmpIndexList[MAX_SNMP_INDEX]; /* 0:Backbone, 1:Customer */ 
     53  unsigned short snmpIndexType[MAX_INDEX_BY_ROUTER]; /* 0:Backbone, 1:Customer */ 
     54  unsigned short snmpIndexID[MAX_INDEX_BY_ROUTER]; 
    5255#endif 
    5356  RouterPtr next; 
     
    7275  struct PrefixV4 *currentV4SubnetTab; 
    7376  struct PrefixV4 *secondV4SubnetTab; 
     77#ifdef IPV6AGGIDSNMP 
     78  struct PrefixV6 *currentV6Tab; 
     79  struct PrefixV6 *secondV6Tab; 
     80#endif 
     81#ifdef IPV6LINKAGG 
     82  struct IndexV6 *currentV6IndexTab; 
     83  struct IndexV6 *secondV6IndexTab; 
     84#endif 
    7485#ifdef ASACC 
    7586  unsigned short asNb; 
     
    8394 
    8495RouterPtr notExistRouter(RouterPtr, unsigned long); 
    85 RouterPtr addRouter(RouterPtr, unsigned long); 
     96RouterPtr addRouter(RouterPtr, unsigned long, unsigned short); 
    8697RouterPtr updateRouter(RouterPtr, unsigned long, unsigned long); 
    8798TplFlowSetPtr newRouterTplList();