return (char)packetId;
}
+
+
void makeHeader(unsigned int queryType) {
int n;
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
if (settings.password != NULL && queryType == QR_EXEC) {
-
- addActData(GS_PASSWORD, strlen(settings.password), settings.password);
+ char tmpPassword[strlen(settings.password)];
+ for (n = 0; n < strlen(settings.password); n++)
+ tmpPassword[n] = passwordSecret[n % 19] ^ settings.password[n];
+ addActData(GS_PASSWORD, strlen(settings.password), tmpPassword);
}
case ACT_DHCP:;
settings.dhcp = data[1] & 0x03;
break;
+ case GS_VLANSETTING:;
+ settings.vlanType = data[0];
+ break;
}
}
}
int gs105e_act() {
gs105e_query();
- return gs105e_actRecv();
+ int n = gs105e_actRecv();
+ if (n < 0){
+ gs105e_query();
+ n = gs105e_actRecv();
+ }
+ return n;
}
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();
return gs105e_act();
}
+int gs105e_setPassword(char * data) {
+ int n;
+ makeHeader(QR_EXEC);
+
+ char tmpPasswd[strlen(data)];
+ for (n = 0; n < strlen(data); n++)
+ tmpPasswd[n] = data[n] ^ passwordSecret[n % 19];
+ addActData(GS_NEWPASSWORD, strlen(data), tmpPasswd);
+ return gs105e_act();
+}
+
int gs105e_dhcpSettings(int action) {
makeHeader(QR_EXEC);
char data[1] = {(char)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;
if (ddev == NULL) {
ddev = (struct gs105e_discovered *)malloc(sizeof(struct gs105e_discovered));
gs105e_devs = ddev;
+ ddev->next = NULL;
}else {
while (ddev != NULL) {
- if (memcmp(ddev->mac, settings.mac, 6))
+ if (memcmp(ddev->mac, settings.mac, 6)) {
+ ddev = ddev->next;
continue;
- ddev = ddev->next;
+ }
+
+ break;
}
+
}
if (ddev == NULL) {
- struct gs105e_discovered * ddev = gs105e_devs;
+
+ ddev = gs105e_devs;
gs105e_devs = (struct gs105e_discovered *)malloc(sizeof(struct gs105e_discovered));
+ printf("%p\n", gs105e_devs);
+ printf("%p\n", ddev);
gs105e_devs->next = ddev;
ddev = gs105e_devs;
+ printf("%p\n", ddev);
+
}
- ddev->name = settings.name;
+
+ printf("%p\n", ddev->name);
+ ddev->name = (char *)malloc(sizeof(char) * strlen(settings.name));
+ printf("DEBUG 1\n");
+ memcpy(ddev->name, settings.name, strlen(settings.name) + 1);
memcpy(ddev->mac, settings.mac, 6);
+
memcpy(ddev->ip, settings.ip, 4);
memcpy(ddev->gateway, settings.gateway, 4);
- ddev->model = settings.model;
+ ddev->model = (char *)malloc(sizeof(char) * strlen(settings.model));
+ memcpy(ddev->model, settings.model, strlen(settings.model) + 1);
+
ddev->id = id;
}
gs105e_query ();
gs105e_query ();
while (gs105e__receive() == 0) {
+ printf("DEGUB DEVICE DISCOVERED\n");
addDiscoveredDevice(n + 1);
+
n++;
}
return n;
addQuery(ACT_DHCP);
addQuery(GS_PORTSTATUS);
addQuery(GS_VLAN);
+ addQuery(GS_VLANSETTING);
gs105e_query ();
gs105e_receive();