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) {
70 if (strncmp(argv[1], "name", 4) == 0) {
72 printf("set name [name]\n");
75 printError(gs105e_setName(argv[2]));
79 char * copyString(char * data) {
80 char * ret = (char * )malloc(strlen(data) + 1);
81 memcpy(ret, data, strlen(data) + 1);
82 ret[strlen(data)] = 0;
87 if (settings.password == NULL) {
88 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");
89 settings.password = copyString((char *)getpass("Password: "));
103 struct gs105e_discovered * ddev;
105 char * dev = "nodev";
107 n = gs105e_discover();
108 printf("Discovered \033[92m%i\033[0m devices\n", n);
112 printf("ID\tName\t\tMAC\t\tIP\n");
114 while (ddev != NULL) {
115 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);
120 printf("only one switch, selecting 1\n");
122 memcpy(settings.mac, gs105e_devs->mac, 6);
124 dev = gs105e_devs->name;
128 printf("\033[96mgs (\033[93m%s\033[96m)# \033[0m", dev);
131 if (fgets(cmd, 300, stdin) == NULL) { //STRG + D
132 printf("\nExiting ...\n");
139 cmd[strlen(cmd) - 1] = 0;
141 //Check for an empty command line
142 if (strlen(cmd) == 0) {
147 //Check for the exit Command
148 if (strncmp(cmd, "exit", 4) == 0 && strlen(cmd) == 4)
151 elem = split(&argv, cmd, " ");
155 if (strncmp(argv[0], "discover", 8) == 0) {
156 n = gs105e_discover();
157 printf("Discovered \033[92m%i\033[0m devices\n", n);
161 printf("ID\tName\t\tMAC\t\tIP\n");
163 while (ddev != NULL) {
164 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);
169 printf("only one switch, selecting 1\n");
171 memcpy(settings.mac, gs105e_devs->mac, 6);
173 dev = gs105e_devs->name;
179 if (strncmp(argv[0], "select", 6) == 0 && elem == 2) {
182 printf("Please select a valid ID\n");
186 while (ddev != NULL) {
193 printf("Please select a valid ID\n");
197 memcpy(settings.mac, ddev->mac, 6);
203 if (strncmp(dev, "nodev", 6) == 0){
204 printf("Discover and select device first!\n");
208 if (strncmp(argv[0], "ip", 2) == 0) {
209 shell_ip(argv, elem);
211 if (strncmp(argv[0], "vlan", 4) == 0) {
212 shell_vlan(argv, elem);
214 if (strncmp(argv[0], "port", 4) == 0) {
215 shell_port(argv, elem);
218 if (strncmp(argv[0], "sys", 3) == 0) {
219 shell_sys(argv, elem);
222 if (strncmp(argv[0], "help", 4) == 0) {
223 printf("Available commands: \n");
224 printf("[discover|select|nodev|ip|vlan|port|sys] \n");