]> git.sur5r.net Git - gsconf/blobdiff - gs105e.c
added sys [name|password|restart] and vlan enable
[gsconf] / gs105e.c
index bcd90080921b6882364ea5993c5a46071c8d11e2..a5b9aa60300345753050f02d0d3bcd3000ae9fae 100644 (file)
--- a/gs105e.c
+++ b/gs105e.c
@@ -90,7 +90,7 @@ void makeHeader(unsigned int queryType) {
         gs105e_queryData[1] = queryType % 256;
         
         memcpy(&gs105e_queryData[8], myMac, 6);
-        if (memcpy(settings.mac, "\x00\x00\x00\x00\x00\x00", 6))
+        if (memcmp(settings.mac, "\x00\x00\x00\x00\x00\x00", 6))
                 memcpy(&gs105e_queryData[14], settings.mac, 6);
         
         memcpy(&gs105e_queryData[24], "\x4e\x53\x44\x50", 4); //Magic!! :-O
@@ -226,6 +226,9 @@ void gs105e_interpret_slice(unsigned int ID, char * data, int len) {
                 case ACT_DHCP:;
                         settings.dhcp = data[1] & 0x03;
                         break;
+                case GS_VLANSETTING:;
+                        settings.vlanType = data[0];
+                        break;
         }
 }
 
@@ -304,7 +307,12 @@ int gs105e_actRecv(void) {
 }
 int gs105e_act() {
         gs105e_query();
-        return gs105e_actRecv();
+        int n = gs105e_actRecv();
+        if (n < 0){
+                gs105e_query();
+                n = gs105e_actRecv();
+        }
+        return n;
 }
 
 
@@ -351,7 +359,7 @@ int gs105e_restart(int vlanId) {
 
 int gs105e_mirrorPorts(int outputPort, int mirrorMask) {
         makeHeader(QR_EXEC);
-        char data[3] = {outputPort, 0,  mirrorMask};
+        char data[3] = {(char)outputPort, 0, (char) mirrorMask};
         
         addActData(ACT_PORTMIRROR, 3, data);
         return gs105e_act();
@@ -373,6 +381,14 @@ int gs105e_setName(char * data) {
         return gs105e_act();
 }
 
+int gs105e_setPassword(char * data) {
+        makeHeader(QR_EXEC);
+        
+        
+        addActData(GS_NEWPASSWORD, strlen(data), data);
+        return gs105e_act();
+}
+
 int gs105e_dhcpSettings(int action) {
         makeHeader(QR_EXEC);
         char data[1] = {(char)action};
@@ -381,6 +397,14 @@ int gs105e_dhcpSettings(int action) {
         return gs105e_act();
 }
 
+int gs105e_vlanEnable(void) {
+        makeHeader(QR_EXEC);
+        char data[1] = {4};
+        
+        addActData(GS_VLANSETTING, 1, data);
+        return gs105e_act();        
+}
+
 void addDiscoveredDevice(int id) {
         
         struct gs105e_discovered * ddev = gs105e_devs;
@@ -469,6 +493,7 @@ void gs105e_queryAll(void) {
         addQuery(ACT_DHCP);
         addQuery(GS_PORTSTATUS);        
         addQuery(GS_VLAN);
+        addQuery(GS_VLANSETTING);
         
         gs105e_query ();
          gs105e_receive();