From a4a81fbe4dd9a22f24a6f9196336fea75e1465af Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Sat, 19 Jan 2019 21:23:46 -0500 Subject: [PATCH] add ifconfig --- ifconfig.c | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 ifconfig.c diff --git a/ifconfig.c b/ifconfig.c new file mode 100644 index 0000000..b2a134f --- /dev/null +++ b/ifconfig.c @@ -0,0 +1,130 @@ +#include +#include +#include + +#include + + +/* + * ifconfig [ up | down | status ] + * + */ + + +/* + * callback by Marinetti to display a connect message + * + */ +void display(const char *pstr) +{ + WriteLine(pstr); +} + +// todo - support flags +// -s: be silent (ie - no output, return value only +// -f: force disconnect +// + +int main(int argc, char **argv) +{ +LongWord address; +char buffer[16]; + + if (argc != 2) + { + WriteCString("Usage: ifconfig [ up | down | status ]\n\r"); + WriteCString(" up Connects to network\n\r"); + WriteCString(" down Disconnects from network\n\r"); + WriteCString(" status Queries status\n\r"); + exit(1); + } + + if (!strcmp(argv[1], "up")) + { + + TCPIPStatus(); + if (_toolErr) + { + LoadOneTool(54, 0x0200); + if (_toolErr) + { + ErrWriteCString("Unable to load Marinetti\r\n"); + exit(1); + } + } + // acedemic only - TCPStartup() just for show. + if (!TCPIPStatus()) + { + TCPIPStartUp(); + } + if (TCPIPGetConnectStatus()) + { + ErrWriteCString("Already connected to network\r\n"); + exit(0); + } + TCPIPConnect(display); + if (_toolErr) + { + ErrWriteCString("Error connecting to network\r\n"); + exit(1); + } + WriteCString("Connected to network\r\n"); + WriteCString("IP Address is: "); + address = TCPIPGetMyIPAddress(); + TCPIPConvertIPToCASCII(address, buffer, 0); + WriteCString(buffer); + WriteCString("\r\n"); + exit (0); + } + + if (!strcmp(argv[1], "down")) + { + // if tool isn't loaded, we're already down... + TCPIPStatus(); + if (_toolErr) + { + ErrWriteCString("Marinetti not loaded\r\n"); + exit(0); + } + if (!TCPIPGetConnectStatus()) + { + ErrWriteCString("Not connected to network\r\n"); + exit(0); + } + // todo - flag to force up & down + TCPIPDisconnect(true, display); + + WriteCString("Disconnected from network\r\n"); + //UnloadOneTool(54); + exit(0); + } + + if (!strcmp(argv[1], "status")) + { + // if tool isn't loaded, we're already down... + TCPIPStatus(); + if (_toolErr) + { + WriteCString("Network is down\r\n"); + exit(1); + } + if (!TCPIPGetConnectStatus()) + { + WriteCString("Network is down\r\n"); + exit(1); + } + WriteCString("Network is up\r\n"); + + WriteCString("IP Address is: "); + address = TCPIPGetMyIPAddress(); + TCPIPConvertIPToCASCII(address, buffer, 0); + WriteCString(buffer); + WriteCString("\r\n"); + exit (0); + } + + ErrWriteCString("illegal option -- "); + ErrWriteCString(argv[1]); + ErrWriteCString("\r\n"); + exit (1); +}