Tools/nativelib - Many features implimented
[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                                 }
59
60                                 NetTest_Suite_Netcat(argv[i+1], strtol(argv[i+2], NULL, 0));
61                                 i += 2;
62                         }
63                         else
64                         {
65                                 Log_Error("NetTest", "Unknown suite name '%s'", argv[i]);
66                                 PrintUsage(argv[0]);
67                         }
68                 }
69                 else
70                 {
71                         if( strcmp(argv[i], "-dev") == 0 )
72                         {
73                                 if( ++i == argc ) { PrintUsage(argv[0]); return 1; }
74                                 rv = NativeNic_AddDev(argv[i]);
75                                 if( rv ) {
76                                         Log_Error("NetTest", "Failed to add device %s", argv[i]);
77                                         return -1;
78                                 }
79                         }
80                         else if( strcmp(argv[i], "-ip") == 0 )
81                         {
82                                 if( ++i == argc ) { PrintUsage(argv[0]); return 1; }
83                                 // TODO: parse argument and poke ipstack
84                                 if( NetTest_AddAddress(argv[i]) ) {
85                                         return -1;
86                                 }
87                         }
88                         else
89                         {
90                                 Log_Error("NetTest", "Unknown argument '%s'", argv[i]);
91                                 PrintUsage(argv[0]);
92                                 return -1;
93                         }
94                 }
95         }
96
97         // Teardown
98         Log_Log("NetTest", "Shutting down");
99         fflush(stdout);
100         return 0;
101 }
102
103 size_t NetTest_WriteStdout(const void *Data, size_t Size)
104 {
105         return fwrite(Data, 1, Size, stdout);
106 }

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