]> git.sur5r.net Git - gsconf/blobdiff - gs105e.c
added port diag command
[gsconf] / gs105e.c
index ccee5d759a646cd01891a1c4f79783441ccb3cc5..bcd90080921b6882364ea5993c5a46071c8d11e2 100644 (file)
--- a/gs105e.c
+++ b/gs105e.c
@@ -220,8 +220,8 @@ void gs105e_interpret_slice(unsigned int ID, char * data, int len) {
                         break;
                 case GS_PORTDIAG:;
                         p = &settings.portStatistics[data[0]];
-                        p->cableError = toUInt4(&data[1]);
-                        p->errorDist = toUInt4(&data[5]);
+                        p->cableError = (char)toUInt4(&data[1]);
+                        p->errorDist = (char)toUInt4(&data[5]);
                         break;
                 case ACT_DHCP:;
                         settings.dhcp = data[1] & 0x03;
@@ -289,7 +289,16 @@ int gs105e_actRecv(void) {
                 return -1;
         }
         
+        
+        
         if (data[2] == 0) {
+                for (n = 32; n < len; ) {
+                        id = (data[n] * 256)  + data[n + 1];
+                        slLen = (data[n+2] * 256)  + data[n + 3];
+
+                        gs105e_interpret_slice(id, &data[n + 4], slLen);
+                        n += slLen + 4;
+                }
                 return data[2];
         }
 }
@@ -349,10 +358,10 @@ int gs105e_mirrorPorts(int outputPort, int mirrorMask) {
 }
 
 int gs105e_cableDiagnostics(int port) {
-        makeHeader(QR_EXEC);
+        makeHeader(QR_REQ);
         char data[1] = {port};
         
-        addActData(ACT_PORTMIRROR, 3, data);
+        addActData(GS_PORTDIAG, 1, data);
         return gs105e_act();
 }