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]));
81 if (settings.password == NULL) {
82 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");
83 settings.password = getpass("Password: ");
97 struct gs105e_discovered * ddev;
101 printf("\033[96mgs (\033[93m%s\033[96m)# \033[0m", dev);
104 if (fgets(cmd, 300, stdin) == NULL) { //STRG + D
105 printf("\nExiting ...\n");
112 cmd[strlen(cmd) - 1] = 0;
114 //Check for an empty command line
115 if (strlen(cmd) == 0) {
120 //Check for the exit Command
121 if (strncmp(cmd, "exit", 4) == 0 && strlen(cmd) == 4)
124 elem = split(&argv, cmd, " ");
128 if (strncmp(argv[0], "discover", 8) == 0) {
129 n = gs105e_discover();
130 printf("Discovered \033[92m%i\033[0m devices\n", n);
134 printf("ID\tName\t\tMAC\t\tIP\n");
136 while (ddev != NULL) {
137 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);
142 printf("only one switch, selecting 1\n");
144 memcpy(settings.mac, gs105e_devs->mac, 6);
146 dev = gs105e_devs->name;
152 if (strncmp(argv[0], "select", 6) == 0 && elem == 2) {
155 printf("Please select a valid ID\n");
159 while (ddev != NULL) {
166 printf("Please select a valid ID\n");
170 memcpy(settings.mac, ddev->mac, 6);
176 if (strncmp(dev, "nodev", 6) == 0){
177 printf("Discover and select device first!\n");
181 if (strncmp(argv[0], "ip", 2) == 0) {
182 shell_ip(argv, elem);
184 if (strncmp(argv[0], "vlan", 4) == 0) {
185 shell_vlan(argv, elem);
187 if (strncmp(argv[0], "port", 4) == 0) {
188 shell_port(argv, elem);