X-Git-Url: https://git.sur5r.net/?p=gsconf;a=blobdiff_plain;f=shell_port.c;h=9ac059d262ef0412c2256b9e01fbd28b59d46330;hp=258d966a37a0db7363d0e30d1e42f025e2c3ff7d;hb=HEAD;hpb=84795a4c9a792a8ab63f71174fef707a4776a078 diff --git a/shell_port.c b/shell_port.c index 258d966..9ac059d 100644 --- a/shell_port.c +++ b/shell_port.c @@ -2,20 +2,93 @@ void shell_port(char ** argv, int elem) { - int n; + int n, i, m, o; if (elem == 1) { - + printf(" port [show|diag|mirror] \n"); return; } if (strncmp(argv[1], "show", 4) == 0) { printf("Port\tSpeed\t\tBytes In\t\tBytes Out\n"); for (n = 0; n< 5; n++) { - printf("%i\t%s\t% 8lu\t\t% 8lu\n", n, + printf("%i\t%s\t%8lu\t\t%8lu\n", n, (settings.portStatistics[n].state == 0x05 ? "1000 Mbit/s" : (settings.portStatistics[n].state == 0x04 ? "100 Mbit/s" : (settings.portStatistics[n].state == 0x03 ? "10 Mbit/s": (settings.portStatistics[n].state == 0x00 ? "No Cable": "???")))), settings.portStatistics[n].bytesIn, settings.portStatistics[n].bytesOut ); } + } else if (strncmp(argv[1], "diag", 4) == 0) { + if (elem != 3) { + printf("Port needed\n"); + return; + } + + n = atoi(argv[2]); + + if ((n < 1) | (n > 5)) { + printf("Invalid Port\n"); + return; + } + + password(); + i = gs105e_cableDiagnostics((char) n); + + printError(i); + if (i != 0) + return; + if (settings.portStatistics[n].cableError) { + printf("\033[91mError detected: %s in %i m\033[0m\n", + (settings.portStatistics[n].cableError == 0x03 ? "short circuit" : (settings.portStatistics[n].cableError == 0x02 ? "Only one pair Connected!": "damaged")), + settings.portStatistics[n].errorDist + ); + + }else{ + if (settings.portStatistics[n].errorDist == 0 ) + printf("\033[92mSeems no Cable is connected!?\033[0m\n"); + else + printf("\033[92mCable is fine!\033[0m\n", settings.portStatistics[n].errorDist); + } + } else if (strncmp(argv[1], "mirror", 6) == 0) { + + if (elem == 3) { + if (strncmp(argv[2], "off", 3) == 0) { + password(); + printError(gs105e_mirrorPorts(0, 0)); + return; + + } + } + + if (elem < 4) { + printf("port mirror output input [input.....]\n"); + return; + } + + n = atoi(argv[2]); + + if ((n < 1) | (n > 5)) { + printf("Invalid Port %i\n", n); + return; + } + + o = 0; + + for (m = 3; m < elem; m++) { + i = atoi(argv[m]); + if ((i < 1) | (i > 5)) { + printf("Invalid Port %i\n", i); + return; + } + + if (i == n) { + printf("Output can't be input port!\n"); + return; + } + + o |= (0x80 >> (i - 1)); + } + password(); + printError(gs105e_mirrorPorts(n, o)); + } }