Changeset 95 for trunk/src/dataFlowSet.c

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

IPv6 link aggregation mode (first step : identify flows)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • 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         *