Tools/NetTest - Seed RNG, tcpclient logging
[tpg/acess2.git] / Tools / NetTest / main.c
1 /*
2  * Acess2 Networking Test Suite (NetTest)
3  * - By John Hodge (thePowersGang)
4  *
5  * main.c
6  * - Program Core
7  */
8 #include <stdio.h>
9 #include <acess_logging.h>
10 #include <nettest.h>
11 #include <string.h>
12 #include <stdlib.h>
13 #include <time.h>
14
15 extern int      VFS_Init(void);
16 extern int      IPStack_Install(char **Args);
17
18 // === CODE ===
19 void PrintUsage(const char *ProgramName)
20 {
21         fprintf(stderr, "Usage: %s <commands...>\n", ProgramName);
22         fprintf(stderr, "\n");
23         fprintf(stderr,
24                 "Options:\n"
25                 "-dev <mac>:<tapdev>\n"
26                 "-ip <dev>,<addr>/<mask>\n"
27                 "-route <net>,<mask>,<nexthop>\n"
28                 "\n"
29                 "Suites:\n"
30                 "netcat <addr> <port>\n"
31                 );
32 }
33
34 int main(int argc, char *argv[])
35 {
36          int    rv;
37         
38         if( argc <= 1 ) {
39                 PrintUsage(argv[0]);
40                 return 1;
41         }
42
43         srand(time(NULL));      
44
45         // Startup
46         VFS_Init();
47         {
48                 char    *ipstack_args[] = {NULL};
49                 IPStack_Install( ipstack_args );
50         }
51         
52         for( int i = 1; i < argc; i ++ )
53         {
54                 if( argv[i][0] != '-' )
55                 {
56                         if( strcmp(argv[i], "netcat") == 0 )
57                         {
58                                 if( argc-i != 3 ) {
59                                         Log_Error("NetTest", "'netcat' <addr> <port>");
60                                         PrintUsage(argv[0]);
61                                         return -1;
62                                 }
63
64                                 NetTest_Suite_Netcat(argv[i+1], strtol(argv[i+2], NULL, 0));
65                                 i += 2;
66                         }
67                         else
68                         {
69                                 Log_Error("NetTest", "Unknown suite name '%s'", argv[i]);
70                                 PrintUsage(argv[0]);
71                         }
72                 }
73                 else
74                 {
75                         if( strcmp(argv[i], "-dev") == 0 )
76                         {
77                                 if( ++i == argc ) { PrintUsage(argv[0]); return 1; }
78                                 rv = NativeNic_AddDev(argv[i]);
79                                 if( rv ) {
80                                         Log_Error("NetTest", "Failed to add device %s", argv[i]);
81                                         return -1;
82                                 }
83                         }
84                         else if( strcmp(argv[i], "-ip") == 0 )
85                         {
86                                 if( ++i == argc ) { PrintUsage(argv[0]); return 1; }
87                                 // TODO: parse argument and poke ipstack
88                                 if( NetTest_AddAddress(argv[i]) ) {
89                                         return -1;
90                                 }
91                         }
92                         else
93                         {
94                                 Log_Error("NetTest", "Unknown argument '%s'", argv[i]);
95                                 PrintUsage(argv[0]);
96                                 return -1;
97                         }
98                 }
99         }
100
101         // Teardown
102         Log_Log("NetTest", "Shutting down");
103         fflush(stdout);
104         return 0;
105 }
106
107 size_t NetTest_WriteStdout(const void *Data, size_t Size)
108 {
109         return fwrite(Data, 1, Size, stdout);
110 }

UCC git Repository :: git.ucc.asn.au