add netsimpcap, a network simulation device
[olsrd.git] / contrib / netsimpcap / src / config.c
1 /*
2  * NetsimPcap - a userspace network bridge with simulated packet loss
3  *             Copyright 2008 H. Rogge (rogge@fgan.de)
4  * 
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #include <stdio.h>
20 #include <stdlib.h>
21 #include <string.h>
22
23 #include "config.h"
24 #include "debug.h"
25
26 /*
27  * stripString
28  * 
29  * this function strips leading and trailing whitespaces from a string
30  * 
31  * @param string to strip
32  * @return stripped string
33  */
34 char *
35 stripString (char *str)
36 {
37
38   /* strip left whitespaces */
39   while (*str == ' ' || *str == '\t') {
40     str++;
41   }
42         
43   /* strip right whitespaces */
44   int i = strlen(str);
45   while (--i >= 0) {
46     if(str[i]==' ' || str[i]=='\r' || str[i]=='\n' || str[i]=='\t') {
47       str[i] = 0;
48       break;
49     }
50   }
51         
52   return str;
53 }
54
55 /*
56  * readConnectionMatrix
57  * 
58  * This function reads the network settings and place them in the
59  * connection matrix (float array with size "len" x "len".
60  * 
61  * @param pointer to begin of connection matrix
62  * @param pointer to filename
63  * @param number of elements in each connection matrix line
64  * @return 0 if function was successfull, 1 if an error happened
65  */
66 int
67 readConnectionMatrix (float *connectionMatrix, char *filename, int len)
68 {
69   FILE *file = fopen(filename, "r");
70   if (!file) {
71     return 1;
72   }
73         
74   char buffer[1024];
75   while (fgets(buffer, 1024, file)) {
76     int from, to;
77     float propability;
78     
79     char *line = stripString(buffer);
80     DPRINT("%s\n", line);
81                 
82     if (line[0] == '#' || line[0] == 0) {
83       continue;
84     }
85                 
86     if(sscanf(line, "%d %d %f", &from, &to, &propability) != 3) {
87       continue;
88     }
89                 
90     if (from < 0 || from >= len || to < 0 || to >= len || from == to) {
91       continue;
92     }
93                 
94     connectionMatrix[GRID(from, to, len)] = propability;
95     if (connectionMatrix[GRID(to, from, len)] == 0) {
96       connectionMatrix[GRID(to, from, len)] = propability;
97     }
98   }
99   fclose(file);
100   return 0;
101 }
102
103 /*
104  * Local Variables:
105  * c-basic-offset: 2
106  * End:
107  */