4 unsigned int countTokens(char * data, char * deli) {
8 char * da = malloc(sizeof(char) * strlen(data));
11 lp = strtok(da, deli);
13 lp = strtok(NULL, deli);
20 unsigned int split(char *** _data, char * text, char * deli) {
24 unsigned int elements = countTokens(text, deli);
26 *_data = malloc( sizeof(char *) * (elements + 1));
28 char ** data = (char **)*_data;
30 char * lp = strtok(text, deli);
34 data[elements - 1] = NULL;
37 data[n] = (char*)malloc( sizeof(char *) * (strlen(lp) + 1));
39 data[n][strlen(lp)] = 0;
40 lp = strtok(NULL, deli);
46 void printIp(char * data) {
47 printf("\033[92m%u.%u.%u.%u\033[0m\n",data[0]&0xff, data[1]&0xff, data[2]&0xff, data[3]&0xff);
49 void printError(int errCode) {
52 printf("\033[92mSuccess!\033[0m\n");
56 printf("\033[91mSwitch does not answer!\033[0m\n");
59 printf("\033[91mWrong Password, try again!\033[0m\n");
60 settings.password = NULL;
63 printf("\033[91mUups, unknown Error!?\033[0m\n");
68 void shell_set(char ** argv, int elem) {
71 if (strncmp(argv[1], "name", 4) == 0) {
73 printf("set name [name]\n");
76 printError(gs105e_setName(argv[2]));
80 char * copyString(char * data) {
81 char * ret = (char * )malloc(strlen(data) + 1);
82 memcpy(ret, data, strlen(data) + 1);
83 ret[strlen(data)] = 0;
88 if (settings.password == NULL) {
89 printf("\033[91mWarning: As the protocol of the switch wants it that way, all configuration packets are send as broadcasts. Even though Netgear is 'encrypting' the password it, the encryption used, is one step away from plaintext.\033[0m\n");
90 settings.password = copyString((char *)getpass("Password: "));
104 struct gs105e_discovered * ddev;
106 char * dev = "nodev";
108 n = gs105e_discover();
109 printf("Discovered \033[92m%i\033[0m devices\n", n);
113 printf("ID\tName\t\tMAC\t\tIP\n");
115 while (ddev != NULL) {
116 printf("%i\t%s\t\t%X:%X:%X:%X:%X:%X\t%u.%u.%u.%u\n", ddev->id, ddev->name, ddev->mac[0]&0xff, ddev->mac[1]&0xff, ddev->mac[2]&0xff, ddev->mac[3]&0xff, ddev->mac[4]&0xff, ddev->mac[5]&0xff, ddev->ip[0]&0xff, ddev->ip[1]&0xff, ddev->ip[2]&0xff, ddev->ip[3]&0xff);
121 printf("only one switch, selecting 1\n");
123 memcpy(settings.mac, gs105e_devs->mac, 6);
125 dev = gs105e_devs->name;
129 printf("\033[96mgs (\033[93m%s\033[96m)# \033[0m", dev);
132 if (fgets(cmd, 300, stdin) == NULL) { //STRG + D
133 printf("\nExiting ...\n");
140 cmd[strlen(cmd) - 1] = 0;
142 //Check for an empty command line
143 if (strlen(cmd) == 0) {
148 //Check for the exit Command
149 if (strncmp(cmd, "exit", 4) == 0 && strlen(cmd) == 4)
152 elem = split(&argv, cmd, " ");
156 if (strncmp(argv[0], "discover", 8) == 0) {
157 n = gs105e_discover();
158 printf("Discovered \033[92m%i\033[0m devices\n", n);
162 printf("ID\tName\t\tMAC\t\tIP\n");
164 while (ddev != NULL) {
165 printf("%i\t%s\t\t%X:%X:%X:%X:%X:%X\t%u.%u.%u.%u\n", ddev->id, ddev->name, ddev->mac[0]&0xff, ddev->mac[1]&0xff, ddev->mac[2]&0xff, ddev->mac[3]&0xff, ddev->mac[4]&0xff, ddev->mac[5]&0xff, ddev->ip[0]&0xff, ddev->ip[1]&0xff, ddev->ip[2]&0xff, ddev->ip[3]&0xff);
170 printf("only one switch, selecting 1\n");
172 memcpy(settings.mac, gs105e_devs->mac, 6);
174 dev = gs105e_devs->name;
180 if (strncmp(argv[0], "select", 6) == 0 && elem == 2) {
183 printf("Please select a valid ID\n");
187 while (ddev != NULL) {
194 printf("Please select a valid ID\n");
198 memcpy(settings.mac, ddev->mac, 6);
204 if (strncmp(dev, "nodev", 6) == 0){
205 printf("Discover and select device first!\n");
209 if (strncmp(argv[0], "ip", 2) == 0) {
210 shell_ip(argv, elem);
212 if (strncmp(argv[0], "vlan", 4) == 0) {
213 shell_vlan(argv, elem);
215 if (strncmp(argv[0], "port", 4) == 0) {
216 shell_port(argv, elem);
219 if (strncmp(argv[0], "sys", 3) == 0) {
220 shell_sys(argv, elem);
223 if (strncmp(argv[0], "help", 4) == 0) {
224 printf("Available commands: \n");
225 printf("[discover|select|nodev|ip|vlan|port|sys] \n");