]> git.sur5r.net Git - gsconf/blob - shell.c
added sys [name|password|restart] and vlan enable
[gsconf] / shell.c
1 #include "shell.h"
2
3
4 unsigned int countTokens(char * data, char * deli) {
5         unsigned int n = 0;
6         char * lp;
7         
8         char * da = malloc(sizeof(char) * strlen(data));
9         strcpy(da, data);
10         
11         lp = strtok(da, deli);
12         while (lp != NULL) {
13                 lp = strtok(NULL, deli);
14                 n++;
15         }
16         
17         return n;
18 }
19
20 unsigned int split(char *** _data, char * text, char * deli) {
21
22         
23         
24         unsigned int elements = countTokens(text, deli);
25         
26         *_data = malloc( sizeof(char *) * (elements + 1));
27         
28         char ** data = (char **)*_data;
29         
30         char * lp = strtok(text, deli);
31         
32         unsigned int n = 0;
33         
34         data[elements - 1] = NULL;
35         
36         while (lp != NULL) {
37                 data[n] = (char*)malloc( sizeof(char *) * (strlen(lp) + 1));
38                 strcpy(data[n], lp);
39                 data[n][strlen(lp)] = 0;
40                 lp = strtok(NULL, deli);
41                 n++;
42         }
43         return elements;
44 }
45
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);
48 }
49 void printError(int errCode) {
50         switch (errCode) {
51                 case 0x00:;
52                         printf("\033[92mSuccess!\033[0m\n");
53                         gs105e_queryAll();
54                         break;
55                 case -1:;
56                         printf("\033[91mSwitch does not answer!\033[0m\n");
57                         break;
58                 case 0x07:;
59                         printf("\033[91mWrong Password, try again!\033[0m\n");
60                         settings.password = NULL;
61                         break;
62                 default:;
63                         printf("\033[91mUups, unknown Error!?\033[0m\n");
64                         break;
65         }
66 }
67
68 void shell_set(char ** argv, int elem) {
69
70         int n;
71         if (strncmp(argv[1], "name", 4) == 0) {
72                 if (elem != 3) {
73                         printf("set name [name]\n");
74                         return;
75                 }
76                 printError(gs105e_setName(argv[2]));
77         }
78 }
79
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;
84         return ret;
85 }
86
87 void password(void) {
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: "));
91         }
92 }
93
94
95
96
97 int shell (void) {
98
99         char cmd[300];
100         int elem = 0;
101         char **argv;
102         int n;
103         
104         struct gs105e_discovered * ddev;
105         
106         char * dev = "nodev";
107         
108         n = gs105e_discover();
109         printf("Discovered \033[92m%i\033[0m devices\n", n);
110
111         ddev = gs105e_devs;
112
113         printf("ID\tName\t\tMAC\t\tIP\n");
114
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);
117                 ddev = ddev->next;
118         }
119
120         if (n == 1) {
121                 printf("only one switch, selecting 1\n");
122
123                 memcpy(settings.mac, gs105e_devs->mac, 6);
124                 gs105e_queryAll();
125                 dev = gs105e_devs->name;
126         }
127         
128         while (1) {
129                 printf("\033[96mgs (\033[93m%s\033[96m)# \033[0m", dev);
130                 cmd[0] = 0;
131                 fflush(0);
132                 if (fgets(cmd, 300, stdin) == NULL) {   //STRG + D
133                                 printf("\nExiting ...\n");
134                                 return 0;
135                         
136                 }
137                 
138                 
139                 
140                 cmd[strlen(cmd) - 1] = 0;
141                 
142                 //Check for an empty command line
143                 if (strlen(cmd) == 0) {
144                         continue;
145                 }
146                 
147                 
148                 //Check for the exit Command
149                 if (strncmp(cmd, "exit", 4) == 0 && strlen(cmd) == 4)
150                         return 0;
151                 
152                 elem = split(&argv, cmd, " ");
153                 
154
155                 
156                 if (strncmp(argv[0], "discover", 8) == 0) {
157                         n = gs105e_discover();
158                         printf("Discovered \033[92m%i\033[0m devices\n", n);
159                         
160                         ddev = gs105e_devs;
161                         
162                         printf("ID\tName\t\tMAC\t\tIP\n");
163                         
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);
166                                 ddev = ddev->next;
167                         }
168                         
169                         if (n == 1) {
170                                 printf("only one switch, selecting 1\n");
171                                 
172                                 memcpy(settings.mac, gs105e_devs->mac, 6);
173                                 gs105e_queryAll();
174                                 dev = gs105e_devs->name;
175                         }
176                 }
177                 
178
179                 
180                 if (strncmp(argv[0], "select", 6) == 0 && elem == 2) {
181                         n = atoi(argv[1]);
182                         if (n == 0){
183                                 printf("Please select a valid ID\n");
184                                 continue;
185                         }
186                         ddev = gs105e_devs;
187                         while (ddev != NULL) {
188                                 if (n == ddev->id)
189                                         break;
190                                 ddev = ddev->next;
191                         }
192                         
193                         if (ddev == NULL){
194                                 printf("Please select a valid ID\n");
195                                 continue;
196                         }
197                         
198                         memcpy(settings.mac, ddev->mac, 6);
199                         gs105e_queryAll();
200                         dev = ddev->name;
201                         
202                 }
203
204                 if (strncmp(dev, "nodev", 6) == 0){
205                         printf("Discover and select device first!\n");
206                         continue;
207                 }
208                                 
209                 if (strncmp(argv[0], "ip", 2) == 0) {
210                         shell_ip(argv, elem);
211                 }
212                 if (strncmp(argv[0], "vlan", 4) == 0) {
213                         shell_vlan(argv, elem);
214                 }
215                 if (strncmp(argv[0], "port", 4) == 0) {
216                         shell_port(argv, elem);
217                 }
218                 
219                 if (strncmp(argv[0], "sys", 3) == 0) {
220                         shell_sys(argv, elem);
221                 }
222                 
223
224                 
225                 
226         }
227 }
228