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; |
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; |
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 | } |
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)){ */ |
| 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 */ |