Changeset 96 for trunk/src/renetcolAgg.c

Show
Ignore:
Timestamp:
02/12/09 17:54:45 (14 years ago)
Author:
andreu
Message:

IPV6 links aggregation UP

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/renetcolAgg.c

    r75 r96  
    44 * Authors: ANDREU Francois-Xavier  
    55 * 
    6  * Copyright (C) 2007 GIP RENATER  
     6 * Copyright (C) 2007 - 2009 GIP RENATER  
    77 */ 
    88 
     
    5353  static char name[2048]; 
    5454  static char ipStr[24]; 
     55#ifdef IPV6LINKAGG 
     56  static char ipv6LinkStr[40]; /* 10_0_0_1_20_136 <router address> + <sampling> + <SNMP index> */ 
     57#endif 
    5558#if defined(MATRIX) && defined(IPV4AGGIDR) 
    5659  static char indexStr[24]; 
     
    596599          } 
    597600        } 
     601#ifdef IPV6LINKAGG 
     602        /*  
     603         * 
     604         * IPv6 Links ACCOUNTING  
     605         * 
     606         */ 
     607        for (i=0; i<ROUTER_INDEX_MAX; i++){ 
     608          for (j=0; j<MAX_INDEX_BY_ROUTER; j++) { 
     609          /* HERE create or update RRD FILE for IPV6 LINKs AGGregation */ 
     610            if (shmForAgg->indexV6Tab[index][i][j].hasStats == 1) { 
     611              for (k=0; k<strlen(name); k++) {name[k] = '\0';} 
     612              for (k=0; k<strlen(createstr); k++) {createstr[k] = '\0';} 
     613              for (k=0; k<strlen(ipv6LinkStr); k++) {ipv6LinkStr[k] = '\0';} 
     614              for (k=0; k<strlen(buf); k++) {buf[k] = '\0';} 
     615              strcat(name, SNMP_INDEX_RRD_LOCATION); 
     616              sprintf(ipv6LinkStr, "%lu_%lu_%lu_%lu_%hu_%hu",  
     617                      shmForAgg->indexV6Tab[index][i][j].routerIPAddress>>24, 
     618                      shmForAgg->indexV6Tab[index][i][j].routerIPAddress<<8>>24, 
     619                      shmForAgg->indexV6Tab[index][i][j].routerIPAddress<<16>>24, 
     620                      shmForAgg->indexV6Tab[index][i][j].routerIPAddress<<24>>24, 
     621                      (unsigned short) 1, 
     622                      shmForAgg->indexV6Tab[index][i][j].indexSNMP 
     623                      ); 
     624              strcat(name, ipv6LinkStr); 
     625              strcat(name, RRD_EXTENSION); 
     626              if ( (fp=fopen(name,"r")) == NULL ){ 
     627                opt[0]= (char *) malloc((strlen(RRD_PARAM_INDEX_0) + 1) * sizeof(char)); 
     628                strcpy(opt[0], RRD_PARAM_INDEX_0); 
     629                opt[1]= (char *) malloc((strlen(name) + 1) * sizeof(char)); 
     630                strcpy(opt[1], name); 
     631                opt[2]= (char *) malloc((strlen(RRD_PARAM_INDEX_1) + 1) * sizeof(char)); 
     632                strcpy(opt[2], RRD_PARAM_INDEX_1); 
     633                opt[3]= (char *) malloc((strlen(RRD_PARAM_INDEX_2) + 1) * sizeof(char)); 
     634                strcpy(opt[3], RRD_PARAM_INDEX_2); 
     635                opt[4]= (char *) malloc((strlen(RRD_PARAM_INDEX_3) + 1) * sizeof(char)); 
     636                strcpy(opt[4], RRD_PARAM_INDEX_3); 
     637                opt[5]= (char *) malloc((strlen(RRD_PARAM_INDEX_4) + 1) * sizeof(char)); 
     638                strcpy(opt[5], RRD_PARAM_INDEX_4); 
     639                opt[6]= (char *) malloc((strlen(RRD_PARAM_INDEX_5) + 1) * sizeof(char)); 
     640                strcpy(opt[6], RRD_PARAM_INDEX_5); 
     641                opt[7]= (char *) malloc((strlen(RRD_PARAM_INDEX_6) + 1) * sizeof(char)); 
     642                strcpy(opt[7], RRD_PARAM_INDEX_6); 
     643                opt[8]= (char *) malloc((strlen(RRD_PARAM_INDEX_7) + 1) * sizeof(char)); 
     644                strcpy(opt[8], RRD_PARAM_INDEX_7); 
     645                opt[9]= (char *) malloc((strlen(RRD_PARAM_INDEX_8) + 1) * sizeof(char)); 
     646                strcpy(opt[9], RRD_PARAM_INDEX_8); 
     647                opt[10]= (char *) malloc((strlen(RRD_PARAM_INDEX_9) + 1) * sizeof(char)); 
     648                strcpy(opt[10], RRD_PARAM_INDEX_9); 
     649                opt[11]= (char *) malloc((strlen(RRD_PARAM_INDEX_10) + 1) * sizeof(char)); 
     650                strcpy(opt[11], RRD_PARAM_INDEX_10); 
     651                opt[12]= (char *) malloc((strlen(RRD_PARAM_INDEX_11) + 1) * sizeof(char)); 
     652                strcpy(opt[12], RRD_PARAM_INDEX_11); 
     653                opt[13]= (char *) malloc((strlen(RRD_PARAM_INDEX_12) + 1) * sizeof(char)); 
     654                strcpy(opt[13], RRD_PARAM_INDEX_12); 
     655                opt[14]= (char *) malloc((strlen(RRD_PARAM_INDEX_13) + 1) * sizeof(char)); 
     656                strcpy(opt[14], RRD_PARAM_INDEX_13); 
     657                opt[15]= (char *) malloc((strlen(RRD_PARAM_INDEX_14) + 1) * sizeof(char)); 
     658                strcpy(opt[15], RRD_PARAM_INDEX_14); 
     659                opt[16]= (char *) malloc((strlen(RRD_PARAM_INDEX_15) + 1) * sizeof(char)); 
     660                strcpy(opt[16], RRD_PARAM_INDEX_15); 
     661                opt[17]= (char *) malloc((strlen(RRD_PARAM_INDEX_16) + 1) * sizeof(char)); 
     662                strcpy(opt[17], RRD_PARAM_INDEX_16); 
     663                opt[18]= (char *) malloc((strlen(RRD_PARAM_INDEX_17) + 1) * sizeof(char)); 
     664                strcpy(opt[18], RRD_PARAM_INDEX_17); 
     665                optind = opterr = 0; 
     666                rrd_clear_error(); 
     667                if ( rrd_create(19,opt) < 0) { 
     668                  syslog(LOG_ERR, "RRD create file %s, error: %s\n", name, rrd_get_error()); 
     669                  rrd_create_er_ct++; 
     670                } else { 
     671                  rrd_create_ok_ct++; 
     672                } 
     673                for ( k=0; k<19; k++) { 
     674                  free(opt[k]); 
     675                  opt[k] = NULL; 
     676                } 
     677              }else{  
     678                fclose(fp); 
     679                rrd_already_created_ct++; 
     680                snprintf(buf,  
     681                         2048,  
     682                         "%lu:%llu:%llu:%llu:%llu:%llu:%llu",   
     683                         now-300,  /* or ctime(&now) with %s */ 
     684                         shmForAgg->indexV6Tab[index][i][j].flowNbIN,  /* 1 */ 
     685                         shmForAgg->indexV6Tab[index][i][j].flowNbOUT, 
     686                         shmForAgg->indexV6Tab[index][i][j].bytesNbIN, 
     687                         shmForAgg->indexV6Tab[index][i][j].bytesNbOUT, 
     688                         shmForAgg->indexV6Tab[index][i][j].pktsNbIN,  /* 5 */ 
     689                         shmForAgg->indexV6Tab[index][i][j].pktsNbOUT 
     690                         ); 
     691                optUpdate[0]= (char *) malloc((strlen(RRD_UPDATE_0) + 1) * sizeof(char)); 
     692                strcpy(optUpdate[0], RRD_UPDATE_0); 
     693                optUpdate[1]= (char *) malloc((strlen(name) + 1) * sizeof(char)); 
     694                strcpy(optUpdate[1], name); 
     695                optUpdate[2]= (char *) malloc((strlen(buf) + 1) * sizeof(char)); 
     696                strcpy(optUpdate[2], buf); 
     697                optind = opterr = 0;  
     698                rrd_clear_error(); 
     699                if ( rrd_update(3, optUpdate) < 0 ) {  
     700                  syslog(LOG_ERR, "RRD update file %s, error: %s\n", name, rrd_get_error()); 
     701                  rrd_update_er_ct++; 
     702                } else { 
     703                  rrd_update_ok_ct++; 
     704                } 
     705                for ( k=0; k<3; k++) { 
     706                  free(optUpdate[k]); 
     707                  optUpdate[k] = NULL; 
     708                } 
     709              } 
     710              shmForAgg->indexV6Tab[index][i][j].bytesNbIN = 0; 
     711              shmForAgg->indexV6Tab[index][i][j].pktsNbIN = 0; 
     712              shmForAgg->indexV6Tab[index][i][j].flowNbIN = 0; 
     713              shmForAgg->indexV6Tab[index][i][j].bytesNbOUT = 0; 
     714              shmForAgg->indexV6Tab[index][i][j].pktsNbOUT = 0; 
     715              shmForAgg->indexV6Tab[index][i][j].flowNbOUT = 0; 
     716            } 
     717          } 
     718        } 
     719#endif 
    598720#endif /* AS */ 
    599721        now2 = time((time_t *)NULL); 
     
    669791        } 
    670792#endif 
     793#ifdef IPV6LINKAGG 
     794        for (i=0; i<ROUTER_INDEX_MAX; i++){ 
     795          for (j=0; j<MAX_INDEX_BY_ROUTER; j++) { 
     796            shmForAgg->indexV6Tab[index][i][j].bytesNbIN = 0; 
     797            shmForAgg->indexV6Tab[index][i][j].pktsNbIN = 0; 
     798            shmForAgg->indexV6Tab[index][i][j].flowNbIN = 0; 
     799            shmForAgg->indexV6Tab[index][i][j].bytesNbOUT = 0; 
     800            shmForAgg->indexV6Tab[index][i][j].pktsNbOUT = 0; 
     801            shmForAgg->indexV6Tab[index][i][j].flowNbOUT = 0; 
     802          } 
     803        } 
     804#endif 
    671805      } /* end is first update */  
    672806    } /* end read ok */