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, meaning everyone on this net can sniff your password!\033[0m\n");
90 settings.password = copyString(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");