source: genesis/tools/nodechk/nodechk.c@ 3166

Last change on this file since 3166 was 3166, checked in by rudolf, 20 years ago
  • Property svn:executable set to *
File size: 15.6 KB
Line 
1// (c) Copyright 2004 Stichting Wireless Leiden, all
2// rights reserved. More information can be found on
3// http://wwww.wirelessleiden.nl and the license is at:
4// http://wleiden.webweaving.org:8080/svn/node-config/LICENSE
5//
6// Nodechck - Programma om wleiden.conf files te lezen en te bewerken
7//
8// Rev.0.1 12/11/2004
9// dimensies van desc, point_to_point, ospfneighbors verhoogd
10// gegevens van hoofd interface in aliassen overgenomen
11// komma's uit velden geskipt ivm csv-lijst (3e regel node-som heeft ',' in desc-veld)
12//
13// Rev.0.0 10/11/2004 initial revision Rudolf Oosterhuis
14
15#include <stdio.h>
16#include <io.h>
17#include <time.h>
18#include <string.h>
19#include <ctype.h>
20#include <stdlib.h>
21
22#define BOOL unsigned int
23#define FALSE (0==1)
24#define TRUE (0==0)
25
26typedef struct
27{
28 char volgnr[4];
29 char location[100];
30 char master_ip[20];
31 char gw_open[10];
32 char nodetype[10];
33 char nodename[30];
34 char status[10];
35 char OS[20];
36 char labelpos[30];
37 char X[10];
38 char Y[10];
39 char N[10];
40 char E[10];
41 char ESSID[34];
42} CNODE;
43
44typedef struct
45{
46 char volgnr[4];
47 char nodenr[4];
48 char configname[10];
49 char sprintfname[10];
50 char type[10];
51 char ip[20];
52 char desc[46];
53 char sdesc[20];
54 char speed[20];
55
56 char pointtopoint[35];
57
58 char ospfbroadcast[6];
59 char ospfneighbors[35];
60
61 char mode[10];
62 char essid[34];
63 char channel[3];
64
65 char polar[6];
66 char antenna[10];
67 char gain[10];
68 char direction[6];
69 char beamwidth[6];
70 char cable[3];
71 char heigth[4];
72
73 char dhcp[8];
74} CARD;
75
76
77void LeesNode(void);
78void BehandelRegel(void);
79void FormatRegel(void);
80void MaakCSV(void);
81void AddKomma(void);
82void AddTekst(void);
83
84char fn[50];
85char buf[50];
86#define BUFLEN 1000
87char Tekstbuf[BUFLEN];
88char Regelbuf[BUFLEN];
89char Formatbuf[BUFLEN];
90FILE *hConf;
91size_t numread,toread;
92CNODE CNode[100];
93CARD Card[500];
94int NodeTeller;
95int CardTeller;
96BOOL bCardBezig;
97
98main()
99{
100 //doorzoek mappen
101 struct _finddata_t c_file;
102 long hFile;
103 NodeTeller=0;
104 CardTeller=0;
105
106 /* Find first CNode directory in current directory */
107 if( (hFile = _findfirst( "c:\\nodes\\CNode*.*", &c_file )) == -1L )
108 printf( "No CNode directories in current directory!\n" );
109 else do
110 {
111 sprintf(fn,"c:\\nodes\\%s\\wleiden.conf",c_file.name);
112 printf(fn);
113 printf("\n");
114
115 if (hConf=fopen(fn,"r"))
116 {
117 LeesNode();
118 fclose(hConf);
119 }
120 NodeTeller++;
121 /* Find the rest of the CNode directories */
122 }
123 while( _findnext( hFile, &c_file ) == 0 );
124 _findclose( hFile );
125 sprintf(buf,"\naantal nodes: %i\n\r",NodeTeller);
126 printf(buf);
127 MaakCSV();
128 return 0;
129}
130
131void LeesNode(void)
132{
133 char *pos;
134 int regels=0;
135 int rest;
136 bCardBezig=FALSE;
137
138 toread=BUFLEN;
139 numread=fread(Tekstbuf,sizeof(char),toread,hConf);
140
141 memset((char*)&(CNode[NodeTeller]),'\0',sizeof(CNode[NodeTeller]));
142 pos=strtok(Tekstbuf,"\n\r" );
143 while (pos)
144 {
145 unsigned j;
146 strcpy(Regelbuf,Tekstbuf);
147 rest=strlen(Regelbuf);
148 for (j=0;j<numread-rest-1;j++)
149 {
150 Tekstbuf[j]=Tekstbuf[j+rest+1]; //tekst naar links schuiven
151 }
152 if (numread==BUFLEN)
153 {
154 numread-=(rest+1);
155 numread+=fread(Tekstbuf+numread,sizeof(char),rest+1,hConf);
156 if (numread<BUFLEN) Tekstbuf[numread]='\0';
157 }
158 else
159 {
160 numread-=(rest+1);
161 Tekstbuf[numread]='\0';
162 }
163
164 BehandelRegel();
165 strcat(Formatbuf,"\n");
166 printf(Formatbuf);
167 regels++;
168 pos=strtok(Tekstbuf,"\n\r" );
169 }
170 sprintf(buf,"\naantal regels: %i\n\r",regels);
171 printf(buf);
172}
173
174void FormatRegel(void)
175{
176 char *pos=Regelbuf;
177 char *pose=Formatbuf;
178 BOOL bDescFlag;
179
180 {
181 //vervang # door \0
182 char *posd=pos;
183 while (*posd!='#'&&*posd!='\0') posd++;
184 *posd='\0';
185 }
186 {
187 //vervang /" door /'
188 char *posd=pos;
189 while (*posd!='\0')
190 {
191 if (*posd=='\"') *posd='\'';
192 posd++;
193 }
194 }
195 while (pos[strlen(pos)-1]==' ') //skip trailing spaces
196 {
197 pos[strlen(pos)-1]='\0';
198 }
199 if (pos[strlen(pos)-1]==';') //skip trailing ;
200 {
201 pos[strlen(pos)-1]='\0';
202 }
203 if (pos[strlen(pos)-1]=='\'') //skip trailing '
204 {
205 pos[strlen(pos)-1]='\0';
206 }
207 while (pos[strlen(pos)-1]==' ') //skip trailing spaces
208 {
209 pos[strlen(pos)-1]='\0';
210 }
211 while (*pos==' '||*pos=='\t'||*pos=='\n'||*pos=='\r') pos++;//skip leading spaces
212
213 bDescFlag=(!memicmp(pos,"DESC",4)); //bij DESC spaties laten
214 for (;*pos!='\0';pos++)
215 {
216 while (!bDescFlag&&(*pos==' '||*pos=='\t')) pos++;//skip spaces
217 if (*pos=='\'') //neem tekst tussen quotes letterlijk over
218 { //tot volgende quote of eind
219 *pose++=*pos++;
220 while (*pos!='\''&&*pos!='\0')
221 {
222 if (*pos==',') pos++; //geen komma's ivm csv-list
223 else *pose++=*pos++;
224 }
225 }
226 if (*pos==',') pos++; //geen komma's ivm csv-list
227 else *pose++=*pos;
228 }
229 *pose='\0';
230 strcpy(Regelbuf,Formatbuf);
231}
232
233void BehandelRegel(void)
234{
235 char *pos=Regelbuf;
236 CNODE *pCN=&CNode[NodeTeller];
237 CARD *pCd=&Card[CardTeller];
238 FormatRegel();
239
240 if (!bCardBezig)
241 {
242 if (!memicmp(pos,"$location='",11)) strncpy(pCN->location,pos+11,sizeof(pCN->location));
243 else if (!memicmp(pos,"$master_ip='",12))
244 {
245 sprintf(pCN->volgnr,"%3d",NodeTeller); //hier want t hoeft maar 1 keer
246 strncpy(pCN->master_ip,pos+12,sizeof(pCN->master_ip));
247 }
248 else if (!memicmp(pos,"$gw_open='",10)) strncpy(pCN->gw_open,pos+10,sizeof(pCN->gw_open));
249 else if (!memicmp(pos,"$nodetype='",11)) strncpy(pCN->nodetype,pos+11,sizeof(pCN->nodetype));
250 else if (!memicmp(pos,"$nodename='",11)) strncpy(pCN->nodename,pos+11,sizeof(pCN->nodename));
251 else if (!memicmp(pos,"$status='",9)) strncpy(pCN->status,pos+9,sizeof(pCN->status));
252 else if (!memicmp(pos,"$OS='",5)) strncpy(pCN->OS,pos+5,sizeof(pCN->OS));
253 else if (!memicmp(pos,"$labelpos='",11)) strncpy(pCN->labelpos,pos+11,sizeof(pCN->labelpos));
254 else if (!memicmp(pos,"$X='",4)) strncpy(pCN->X,pos+4,sizeof(pCN->X));
255 else if (!memicmp(pos,"$Y='",4)) strncpy(pCN->Y,pos+4,sizeof(pCN->Y));
256 else if (!memicmp(pos,"$N='",4)) strncpy(pCN->N,pos+4,sizeof(pCN->N));
257 else if (!memicmp(pos,"$E='",4)) strncpy(pCN->E,pos+4,sizeof(pCN->E));
258 else if (!memicmp(pos,"$ESSID='",8)) strncpy(pCN->ESSID,pos+8,sizeof(pCN->ESSID));
259
260 else if (!memicmp(pos,"$config{'",9))
261 {
262 unsigned int len;
263 char *pos1=pos+9;
264 while(*pos1++!='\'');
265 len=pos1-pos-10;
266 if (len>9) len=9;
267 memcpy(pCd->configname,pos+9,len);
268 pCd->configname[len]='\0';
269 sprintf(pCd->volgnr,"%3d",CardTeller); //hier want t hoeft maar 1 keer
270 sprintf(pCd->nodenr,"%3d",NodeTeller); //hier want t hoeft maar 1 keer
271 strncpy(pCd->sprintfname,pos+len+21,sizeof(pCd->sprintfname));
272 bCardBezig=TRUE;
273 if (*(pCd->configname+strlen(pCd->configname)-2)==':')
274 { //alias, dan hoofdgegevens overnemen, ga ervan uit dat hoofd-interface altijd direct aan aliassen voorafgaat
275 int j=0;
276 while (*((pCd-j)->configname+strlen((pCd-j)->configname)-2)==':'&&(j<=CardTeller)) j++;
277 if (j<=CardTeller)
278 {
279 strncpy(pCd->mode,(pCd-j)->mode,sizeof(pCd->mode));
280 strncpy(pCd->essid,(pCd-j)->essid,sizeof(pCd->essid));
281 strncpy(pCd->channel,(pCd-j)->channel,sizeof(pCd->channel));
282 strncpy(pCd->polar,(pCd-j)->polar,sizeof(pCd->polar));
283 strncpy(pCd->antenna,(pCd-j)->antenna,sizeof(pCd->antenna));
284 strncpy(pCd->gain,(pCd-j)->gain,sizeof(pCd->gain));
285 strncpy(pCd->direction,(pCd-j)->direction,sizeof(pCd->direction));
286 strncpy(pCd->beamwidth,(pCd-j)->beamwidth,sizeof(pCd->beamwidth));
287 strncpy(pCd->cable,(pCd-j)->cable,sizeof(pCd->cable));
288 strncpy(pCd->heigth,(pCd-j)->heigth,sizeof(pCd->heigth));
289 }
290 }
291 }
292 }
293 else /*if (bCardBezig)*/
294 {
295 if (!memicmp(pos,pCd->sprintfname,strlen(pCd->sprintfname)))
296 {
297 CardTeller++;
298 bCardBezig=FALSE;
299 }
300 else if (!memicmp(pos,"TYPE=",5)) strncpy(pCd->type,pos+5,sizeof(pCd->type));
301 else if (!memicmp(pos,"IP=",3)) strncpy(pCd->ip,pos+3,sizeof(pCd->ip));
302 else if (!memicmp(pos,"DESC=",5)) strncpy(pCd->desc,pos+5,sizeof(pCd->desc));
303 else if (!memicmp(pos,"SDESC=",6)) strncpy(pCd->sdesc,pos+6,sizeof(pCd->sdesc));
304 else if (!memicmp(pos,"SPEED=",6)) strncpy(pCd->speed,pos+6,sizeof(pCd->speed));
305 else if (!memicmp(pos,"POINT_TO_POINT=",15)) strncpy(pCd->pointtopoint,pos+15,sizeof(pCd->pointtopoint));
306 else if (!memicmp(pos,"OSPF_BROADCAST=",15)) strncpy(pCd->ospfbroadcast,pos+15,sizeof(pCd->ospfbroadcast));
307 else if (!memicmp(pos,"OSPF_NEIGHBORS=",15)) strncpy(pCd->ospfneighbors,pos+15,sizeof(pCd->ospfneighbors));
308 else if (!memicmp(pos,"DHCP=",5)) strncpy(pCd->dhcp,pos+5,sizeof(pCd->dhcp));
309 else if (!memicmp(pos,"MODE=",5)) strncpy(pCd->mode,pos+5,sizeof(pCd->mode));
310 else if (!memicmp(pos,"ESSID=",6)) strncpy(pCd->essid,pos+6,sizeof(pCd->essid));
311 else if (!memicmp(pos,"CHANNEL=",8)) strncpy(pCd->channel,pos+8,sizeof(pCd->channel));
312 else if (!memicmp(pos,"POLAR=",6)) strncpy(pCd->polar,pos+6,sizeof(pCd->polar));
313 else if (!memicmp(pos,"ANTENNA=",8)) strncpy(pCd->antenna,pos+8,sizeof(pCd->antenna));
314 else if (!memicmp(pos,"GAIN=",5)) strncpy(pCd->gain,pos+5,sizeof(pCd->gain));
315 else if (!memicmp(pos,"DIRECTION=",10)) strncpy(pCd->direction,pos+10,sizeof(pCd->direction));
316 else if (!memicmp(pos,"BEAMWIDTH=",10)) strncpy(pCd->beamwidth,pos+10,sizeof(pCd->beamwidth));
317 else if (!memicmp(pos,"CABLE=",6)) strncpy(pCd->cable,pos+6,sizeof(pCd->cable));
318 else if (!memicmp(pos,"HEIGTH=",7)) strncpy(pCd->heigth,pos+7,sizeof(pCd->heigth));
319 }
320}
321
322void MaakCSV(void)
323{
324 int i;
325 CNODE *pCN;
326 CARD *pCd;
327 if (hConf=fopen("c:\\nodes\\configs.csv","w"))
328 {
329// strcpy(buf,"Volgnr");AddTekst();AddKomma();
330 strcpy(buf,"location");AddTekst();AddKomma();
331 strcpy(buf,"master_ip");AddTekst();AddKomma();
332 strcpy(buf,"gw_open");AddTekst();AddKomma();
333 strcpy(buf,"nodetype");AddTekst();AddKomma();
334 strcpy(buf,"nodename");AddTekst();AddKomma();
335 strcpy(buf,"status");AddTekst();AddKomma();
336 strcpy(buf,"OS");AddTekst();AddKomma();
337 strcpy(buf,"labelpos");AddTekst();AddKomma();
338 strcpy(buf,"X");AddTekst();AddKomma();
339 strcpy(buf,"Y");AddTekst();AddKomma();
340 strcpy(buf,"N");AddTekst();AddKomma();
341 strcpy(buf,"E");AddTekst();AddKomma();
342 strcpy(buf,"ESSID");AddTekst();AddKomma();
343// strcpy(buf,"volgnr");AddTekst();AddKomma();
344 strcpy(buf,"configname");AddTekst();AddKomma();
345 strcpy(buf,"sprintfname");AddTekst();AddKomma();
346 strcpy(buf,"type");AddTekst();AddKomma();
347 strcpy(buf,"ip");AddTekst();AddKomma();
348 strcpy(buf,"desc");AddTekst();AddKomma();
349 strcpy(buf,"sdesc");AddTekst();AddKomma();
350 strcpy(buf,"speed");AddTekst();AddKomma();
351 strcpy(buf,"point_to_point");AddTekst();AddKomma();
352 strcpy(buf,"ospf_broadcast");AddTekst();AddKomma();
353 strcpy(buf,"ospf_neighbors");AddTekst();AddKomma();
354 strcpy(buf,"dhcp");AddTekst();AddKomma();
355 strcpy(buf,"mode");AddTekst();AddKomma();
356 strcpy(buf,"essid");AddTekst();AddKomma();
357 strcpy(buf,"channel");AddTekst();AddKomma();
358 strcpy(buf,"polar");AddTekst();AddKomma();
359 strcpy(buf,"antenna");AddTekst();AddKomma();
360 strcpy(buf,"gain");AddTekst();AddKomma();
361 strcpy(buf,"direction");AddTekst();AddKomma();
362 strcpy(buf,"beamwidth");AddTekst();AddKomma();
363 strcpy(buf,"cable");AddTekst();AddKomma();
364 strcpy(buf,"heigth");AddTekst();AddKomma();
365
366 fwrite( "\n", sizeof( char ), 1, hConf );
367
368 for (i=0;i<CardTeller;i++)
369 {
370 pCd=&Card[i];
371 pCN=&CNode[atoi(pCd->nodenr)];
372// fwrite( pCN->volgnr, sizeof( char ), strlen(pCN->volgnr), hConf );AddKomma();
373 fwrite( pCN->location, sizeof( char ), strlen(pCN->location), hConf );AddKomma();
374 fwrite( pCN->master_ip, sizeof( char ), strlen(pCN->master_ip), hConf );AddKomma();
375 fwrite( pCN->gw_open, sizeof( char ), strlen(pCN->gw_open), hConf );AddKomma();
376 fwrite( pCN->nodetype, sizeof( char ), strlen(pCN->nodetype), hConf );AddKomma();
377 fwrite( pCN->nodename, sizeof( char ), strlen(pCN->nodename), hConf );AddKomma();
378 fwrite( pCN->status, sizeof( char ), strlen(pCN->status), hConf );AddKomma();
379 fwrite( pCN->OS, sizeof( char ), strlen(pCN->OS), hConf );AddKomma();
380 fwrite( pCN->labelpos, sizeof( char ), strlen(pCN->labelpos), hConf );AddKomma();
381 fwrite( pCN->X, sizeof( char ), strlen(pCN->X), hConf );AddKomma();
382 fwrite( pCN->Y, sizeof( char ), strlen(pCN->Y), hConf );AddKomma();
383 fwrite( pCN->N, sizeof( char ), strlen(pCN->N), hConf );AddKomma();
384 fwrite( pCN->E, sizeof( char ), strlen(pCN->E), hConf );AddKomma();
385 fwrite( pCN->ESSID, sizeof( char ), strlen(pCN->ESSID), hConf );AddKomma();
386// fwrite( pCd->volgnr, sizeof( char ), strlen(pCd->volgnr), hConf );AddKomma();
387 fwrite( pCd->configname, sizeof( char ), strlen(pCd->configname), hConf );AddKomma();
388 fwrite( pCd->sprintfname, sizeof( char ), strlen(pCd->sprintfname), hConf );AddKomma();
389 fwrite( pCd->type, sizeof( char ), strlen(pCd->type), hConf );AddKomma();
390 fwrite( pCd->ip, sizeof( char ), strlen(pCd->ip), hConf );AddKomma();
391 fwrite( pCd->desc, sizeof( char ), strlen(pCd->desc), hConf );AddKomma();
392 fwrite( pCd->sdesc, sizeof( char ), strlen(pCd->sdesc), hConf );AddKomma();
393 fwrite( pCd->speed, sizeof( char ), strlen(pCd->speed), hConf );AddKomma();
394 fwrite( pCd->pointtopoint, sizeof( char ), strlen(pCd->pointtopoint), hConf );AddKomma();
395 fwrite( pCd->ospfbroadcast, sizeof( char ), strlen(pCd->ospfbroadcast), hConf );AddKomma();
396 fwrite( pCd->ospfneighbors, sizeof( char ), strlen(pCd->ospfneighbors), hConf );AddKomma();
397 fwrite( pCd->dhcp, sizeof( char ), strlen(pCd->dhcp), hConf );AddKomma();
398 fwrite( pCd->mode, sizeof( char ), strlen(pCd->mode), hConf );AddKomma();
399 fwrite( pCd->essid, sizeof( char ), strlen(pCd->essid), hConf );AddKomma();
400 fwrite( pCd->channel, sizeof( char ), strlen(pCd->channel), hConf );AddKomma();
401 fwrite( pCd->polar, sizeof( char ), strlen(pCd->polar), hConf );AddKomma();
402 fwrite( pCd->antenna, sizeof( char ), strlen(pCd->antenna), hConf );AddKomma();
403 fwrite( pCd->gain, sizeof( char ), strlen(pCd->gain), hConf );AddKomma();
404 fwrite( pCd->direction, sizeof( char ), strlen(pCd->direction), hConf );AddKomma();
405 fwrite( pCd->beamwidth, sizeof( char ), strlen(pCd->beamwidth), hConf );AddKomma();
406 fwrite( pCd->cable, sizeof( char ), strlen(pCd->cable), hConf );AddKomma();
407 fwrite( pCd->heigth, sizeof( char ), strlen(pCd->heigth), hConf );AddKomma();
408 fwrite( "\n", sizeof( char ), 1, hConf );
409 }
410 fclose(hConf);
411 }
412}
413
414void AddKomma(void)
415{
416 fwrite( ",", sizeof( char ), 1, hConf );
417}
418
419
420
421void AddTekst(void)
422{
423 fwrite( buf, sizeof( char ), strlen(buf), hConf );
424}
Note: See TracBrowser for help on using the repository browser.