6 static char vlan_char (int t)
25 bool do_vlan_8021q_del (int nb, const char **com, struct ngadmin *nga)
27 const struct swi_attr *sa;
33 printf("Usage: vlan 8021q del <vlan>\n");
38 sa = ngadmin_getCurrentSwitch(nga);
40 printf("must be logged\n");
44 vlan=strtoul(com[0], NULL, 0);
45 if (vlan < 1 || vlan > VLAN_MAX) {
46 printf("vlan out of range\n");
50 i = ngadmin_VLANDestroy(nga, vlan);
58 bool do_vlan_8021q_set (int nb, const char **com, struct ngadmin *nga)
60 unsigned char *ports = NULL, p, def = VLAN_UNSPEC;
61 const struct swi_attr *sa;
68 printf("Usage: vlan 802.1q set <vlan> [all unspec|no|untagged|tagged] [<port1> unspec|no|untagged|tagged ...]\n");
73 sa = ngadmin_getCurrentSwitch(nga);
75 printf("must be logged\n");
81 vlan = strtoul(com[k++], NULL, 0);
83 if (vlan < 1 || vlan > VLAN_MAX) {
84 printf("vlan out of range\n");
90 if (k < nb - 1 && strcasecmp(com[k], "all") == 0) {
92 if (strcasecmp(com[k], "tagged") == 0) {
94 } else if (strcasecmp(com[k], "untagged") == 0) {
96 } else if (strcasecmp(com[k], "no") == 0) {
98 } else if (strcasecmp(com[k], "unspec") == 0) {
101 printf("incorrect type\n");
108 ports = malloc(sa->ports * sizeof(unsigned char));
111 memset(ports, def, sa->ports);
113 /* apply port specifics */
115 p = strtoul(com[k++], NULL, 0) - 1;
116 if (p >= sa->ports) {
117 printf("port out of range\n");
121 if (strcasecmp(com[k], "tagged") ==0) {
122 ports[p] = VLAN_TAGGED;
123 } else if (strcasecmp(com[k], "untagged") == 0) {
124 ports[p] = VLAN_UNTAGGED;
125 } else if (strcasecmp(com[k], "no") == 0) {
127 } else if (strcasecmp(com[k], "unspec") == 0) {
128 ports[p] = VLAN_UNSPEC;
130 printf("incorrect type\n");
138 i = ngadmin_setVLANDotConf(nga, vlan, ports);
148 bool do_vlan_8021q_show (int nb, const char **com, struct ngadmin *nga)
150 unsigned short vl = 0, *vlans = NULL;
151 unsigned char *ports = NULL;
152 const struct swi_attr *sa;
157 sa = ngadmin_getCurrentSwitch(nga);
159 printf("must be logged\n");
165 vl = strtoul(com[0], NULL, 0);
167 ports = malloc(sa->ports * n * sizeof(unsigned char));
170 /* request all VLANs config */
171 vlans = malloc(n * sizeof(unsigned short));
172 ports = malloc(sa->ports * n * sizeof(unsigned char));
173 i = ngadmin_getVLANDotAllConf(nga, vlans, ports, &n);
175 /* request single VLAN config */
176 ports = malloc(sa->ports * sizeof(unsigned char));
177 i = ngadmin_getVLANDotConf(nga, vl, ports);
186 printf("Ports configuration: \n");
188 for (i = 1; i <= sa->ports; i++)
194 for (i = 0; i < n; i++) {
195 printf("%u\t", vlans[i]);
196 for (j = 0; j < sa->ports; j++)
197 printf("%c\t", vlan_char(ports[i * sa->ports + j]));
201 /* show single VLAN config */
203 for (j = 0; j < sa->ports; j++)
204 printf("%c\t", vlan_char(ports[j]));
216 bool do_vlan_mode_set (int nb, const char **com, struct ngadmin *nga)
223 "Usage: vlan mode set <mode>\n"
224 "1 - basic port based\n"
225 "2 - advanced port based\n"
227 "4 - advanced 802.1Q\n"
232 if (ngadmin_getCurrentSwitch(nga) == NULL) {
233 printf("must be logged\n");
237 mode = strtoul(com[0], NULL, 0);
238 if (mode < 1 || mode > 4) {
239 printf("mode out of range\n");
243 i = ngadmin_setVLANType(nga, mode);
251 bool do_vlan_mode_show (int nb UNUSED, const char **com UNUSED, struct ngadmin *nga)
253 int i, t, ret = true;
256 if (ngadmin_getCurrentSwitch(nga) == NULL) {
257 printf("must be logged\n");
262 i = ngadmin_getVLANType(nga, &t);
269 printf("VLAN type: ");
273 printf("disabled\n");
276 case VLAN_PORT_BASIC:
277 printf("port basic\n");
281 printf("port advanced\n");
285 printf("802.1Q basic\n");
289 printf("802.1Q advanced\n");
293 printf("unknown (%i)\n", t);
302 bool do_vlan_pvid_set (int nb, const char **com, struct ngadmin *nga)
304 const struct swi_attr *sa;
311 printf("Usage: vlan pvid set <port> <vlan>\n");
315 sa = ngadmin_getCurrentSwitch(nga);
317 printf("must be logged\n");
321 port = strtoul(com[0], NULL, 0);
322 vlan = strtoul(com[1], NULL, 0);
324 if (port < 1 || port > sa->ports) {
325 printf("port out of range\n");
329 if (vlan < 1 || vlan > VLAN_MAX) {
330 printf("vlan out of range\n");
334 i = ngadmin_setPVID(nga, port, vlan);
342 bool do_vlan_pvid_show (int nb UNUSED, const char **com UNUSED, struct ngadmin *nga)
344 unsigned short *ports = NULL;
345 const struct swi_attr *sa;
350 sa = ngadmin_getCurrentSwitch(nga);
352 printf("must be logged\n");
357 ports = malloc(sa->ports * sizeof(unsigned short));
358 i = ngadmin_getAllPVID(nga, ports);
366 for (i = 1; i <= sa->ports; i++)
371 for (i = 0; i < sa->ports; i++)
372 printf("%u\t", ports[i]);