root/trunk/src/get_conf.c @ 29

Revision 29, 5.0 KB (checked in by andreu, 16 years ago)

sampling information in rrd filename - optional template first step

  • Property svn:eol-style set to native
Line 
1/*
2 * File: get_conf.c
3 *
4 * Authors: ANDREU Francois-Xavier
5 *
6 * Copyright (C) 2005 2006 2007 GIP RENATER
7 */
8
9/*  This file is part of renetcol.
10 *
11 *  renetcol is free software; you can redistribute it and/or modify
12 *  it under the terms of the GNU General Public License as published by
13 *  the Free Software Foundation; either version 2 of the License, or
14 *  (at your option) any later version.
15 *
16 *  renetcol is distributed in the hope that it will be useful,
17 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
18 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 *  GNU General Public License for more details.
20 *
21 *  You should have received a copy of the GNU General Public License
22 *  along with renetcol; if not, write to the Free Software
23 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
24 */
25
26#include <stdio.h>
27#include <string.h>
28#include <stdlib.h>
29
30#include "get_conf.h"
31
32/*
33 * initConf()
34 */
35void initConf(char *routersfile)
36
37  /* getRegisteredRouters(routersfile); */
38}
39
40/*
41 * longCmp()
42 */
43int
44longCmp(const void *elem1, const void *elem2){
45  return (*((unsigned long*)elem1) - *((unsigned long*)elem2));
46}
47
48/*
49 * getRegisteredRouters
50 */
51int
52getRegisteredRouters(char *filename, unsigned long *sortedRLPtr,
53                          unsigned long *indexedRLPtr)
54{
55  FILE *routerFile;
56  char line[200];
57  int cptLine;
58  int nbR = 0;
59  char tindex[5];
60  char tname[20];
61  char tad[15];
62  char tad2[15];
63  int ind=0;
64  unsigned short n0, n1, n2, n3;
65  unsigned char buffer4[4];
66
67  if (!(routerFile = fopen(filename, "r"))) {
68    fprintf (stderr, "error during %s opening\n", filename);
69    exit(1);
70  }
71  cptLine=0;
72  while ( fgets(line, 200, routerFile) != 0) {   
73    if ( strspn(line, "#") == 0 ) {
74      if (sscanf(line, "%s %s %s %s\n",
75                 tindex,       
76                 tname,
77                 tad,
78                 tad2) == 0) {
79        fprintf(stderr, "Error in file %s, line %d\n",
80                filename, cptLine);
81        exit(1);
82      }
83      cptLine++;
84      ind = atoi(tindex);
85      if (sscanf(tad,"%hu.%hu.%hu.%hu\n",&n0,&n1,&n2,&n3) == 0){
86        fprintf(stderr, "Address error in file %s, line %d\n",
87                filename, cptLine);
88        exit(1);
89      }
90      buffer4[3] = (unsigned char)n0;
91      buffer4[2] = (unsigned char)n1;
92      buffer4[1] = (unsigned char)n2;
93      buffer4[0] = (unsigned char)n3;   
94      sortedRLPtr[ind] = *((unsigned long*)(&buffer4));
95      if (sortedRLPtr[ind] != 0){
96        nbR++;
97      }
98      indexedRLPtr[ind] = *((unsigned long*)(&buffer4));
99    }
100  }
101  qsort(sortedRLPtr, cptLine, sizeof(unsigned long), longCmp);
102  if( fclose(routerFile) != 0) {
103    return (-1);
104  } else {
105    return nbR;
106  }
107}
108
109
110/*
111 *
112 */
113int compStr(a,b)
114{
115  static unsigned short a0,a1,a2,a3,a4,a5;
116  static unsigned short b0,b1,b2,b3,b4,b5;
117  sscanf((char *)a,"%hu.%hu.%hu.%hu/%hu-%hu\n",&a0,&a1,&a2,&a3,&a4,&a5);
118  sscanf((char *)b,"%hu.%hu.%hu.%hu/%hu-%hu\n",&b0,&b1,&b2,&b3,&b4,&b5);
119  if (a0 > b0) return(1);
120  if (a0 < b0) return(-1);
121  if (a1 > b1) return(1);
122  if (a1 < b1) return(-1);
123  if (a2 > b2) return(1);
124  if (a2 < b2) return(-1);
125  if (a3 > b3) return(1);
126  if (a3 < b3) return(-1);
127  return(0);
128}
129
130/*
131 * getPrefixV4()
132 *
133 * read IPv4 prefix file and sort the list
134 */
135unsigned short getPrefixV4(char *filename, struct PrefixV4 *pV4TabPtr)
136{
137  FILE *prefixFile;
138  char line[200];
139  unsigned short counter = 0;
140  unsigned short n0, n1, n2, n3, n4, n5;
141  unsigned char buffer4[4];
142  int i = 0;
143  char prefixStrTab[MAX_IPV4_PREFIX][50];
144
145  if (!(prefixFile = fopen(filename, "r"))) {
146    fprintf (stderr, "error during %s opening\n", filename);
147    exit(1);
148  }
149  while (fgets(line, 50, prefixFile) != 0)
150    {
151      strcpy(prefixStrTab[counter], line);
152      counter++;
153      if (counter == MAX_IPV4_PREFIX) {
154        fprintf(stderr, "bufferoverflow in getPrefixV4 function (get_conf.c)\
155change the value of MAX_IPV4_PREFIX  declaration and recompile \n");
156        exit(1);
157      }
158    }
159  qsort(prefixStrTab, counter, 50, compStr);
160  for(i=0;i<counter;i++)
161    {
162      sscanf(prefixStrTab[i],"%hu.%hu.%hu.%hu/%hu-%hu\n",
163             &n0,&n1,&n2,&n3,&n4,&n5);         
164      buffer4[0] = (unsigned char)n3;
165      buffer4[1] = (unsigned char)n2;
166      buffer4[2] = (unsigned char)n1;
167      buffer4[3] = (unsigned char)n0;
168      pV4TabPtr[i].beginning =
169        *((unsigned long*)&buffer4[0]);
170      pV4TabPtr[i].end =
171        *((unsigned long*)&buffer4[0]) +~(~0<<(32-n4));
172      pV4TabPtr[i].mask = n4;
173      pV4TabPtr[i].sampling = 0;     
174      pV4TabPtr[i].routerNb = n5;
175      pV4TabPtr[i].flowNbIN = 0;
176      pV4TabPtr[i].bytesNbIN = 0;
177      pV4TabPtr[i].pktsNbIN = 0;
178      pV4TabPtr[i].flowNbOUT = 0;
179      pV4TabPtr[i].bytesNbOUT = 0;
180      pV4TabPtr[i].pktsNbOUT = 0;
181      pV4TabPtr[i].firstCoSIN = 0;
182      pV4TabPtr[i].secondCoSIN = 0;
183      pV4TabPtr[i].thirdCoSIN = 0;
184      pV4TabPtr[i].fourthCoSIN = 0;
185      pV4TabPtr[i].firstCoSOUT = 0;
186      pV4TabPtr[i].secondCoSOUT = 0;
187      pV4TabPtr[i].thirdCoSOUT = 0;
188      pV4TabPtr[i].fourthCoSOUT = 0;
189    }
190  if( fclose(prefixFile) == 0) {
191    return (counter);
192  } else {
193    fprintf(stderr,"%s not closed, \n", filename);
194    exit(1);
195    return(counter);
196  }
197}
Note: See TracBrowser for help on using the browser.