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

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