X-Git-Url: https://git.sur5r.net/?p=gsconf;a=blobdiff_plain;f=gs105e.c;h=a5b9aa60300345753050f02d0d3bcd3000ae9fae;hp=ccee5d759a646cd01891a1c4f79783441ccb3cc5;hb=11ae7c1958d87f75fb840c6556fa99abf85e6607;hpb=84795a4c9a792a8ab63f71174fef707a4776a078 diff --git a/gs105e.c b/gs105e.c index ccee5d7..a5b9aa6 100644 --- 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 @@ -220,12 +220,15 @@ 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; break; + case GS_VLANSETTING:; + settings.vlanType = data[0]; + break; } } @@ -289,13 +292,27 @@ 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]; } } int gs105e_act() { gs105e_query(); - return gs105e_actRecv(); + int n = gs105e_actRecv(); + if (n < 0){ + gs105e_query(); + n = gs105e_actRecv(); + } + return n; } @@ -342,17 +359,17 @@ 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(); } 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(); } @@ -364,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}; @@ -372,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; @@ -460,6 +493,7 @@ void gs105e_queryAll(void) { addQuery(ACT_DHCP); addQuery(GS_PORTSTATUS); addQuery(GS_VLAN); + addQuery(GS_VLANSETTING); gs105e_query (); gs105e_receive();