6 static char vlan_char (int t)
25 bool do_vlan_8021q_del (int argc, const char **argv, struct ngadmin *nga)
27 const struct swi_attr *sa;
33 printf("usage: vlan 8021q del <vlan>\n");
37 sa = ngadmin_getCurrentSwitch(nga);
39 printf("must be logged\n");
43 vlan=strtoul(argv[0], NULL, 0);
44 if (vlan < 1 || vlan > VLAN_MAX) {
45 printf("vlan out of range\n");
49 i = ngadmin_VLANDestroy(nga, vlan);
57 bool do_vlan_8021q_set (int argc, const char **argv, struct ngadmin *nga)
59 unsigned char *ports = NULL, p, def = VLAN_UNSPEC;
60 const struct swi_attr *sa;
67 printf("usage: vlan 802.1q set <vlan> [all unspec|no|untagged|tagged] [<port1> unspec|no|untagged|tagged ...]\n");
72 sa = ngadmin_getCurrentSwitch(nga);
74 printf("must be logged\n");
80 vlan = strtoul(argv[k++], NULL, 0);
82 if (vlan < 1 || vlan > VLAN_MAX) {
83 printf("vlan out of range\n");
89 if (k < argc - 1 && strcasecmp(argv[k], "all") == 0) {
91 if (strcasecmp(argv[k], "tagged") == 0) {
93 } else if (strcasecmp(argv[k], "untagged") == 0) {
95 } else if (strcasecmp(argv[k], "no") == 0) {
97 } else if (strcasecmp(argv[k], "unspec") == 0) {
100 printf("incorrect type\n");
107 ports = malloc(sa->ports * sizeof(unsigned char));
110 memset(ports, def, sa->ports);
112 /* apply port specifics */
113 while (k < argc - 1) {
114 p = strtoul(argv[k++], NULL, 0) - 1;
115 if (p >= sa->ports) {
116 printf("port out of range\n");
120 if (strcasecmp(argv[k], "tagged") ==0) {
121 ports[p] = VLAN_TAGGED;
122 } else if (strcasecmp(argv[k], "untagged") == 0) {
123 ports[p] = VLAN_UNTAGGED;
124 } else if (strcasecmp(argv[k], "no") == 0) {
126 } else if (strcasecmp(argv[k], "unspec") == 0) {
127 ports[p] = VLAN_UNSPEC;
129 printf("incorrect type\n");
137 i = ngadmin_setVLANDotConf(nga, vlan, ports);
147 bool do_vlan_8021q_show (int argc, const char **argv, struct ngadmin *nga)
149 unsigned short vl = 0, *vlans = NULL;
150 unsigned char *ports = NULL;
151 const struct swi_attr *sa;
156 sa = ngadmin_getCurrentSwitch(nga);
158 printf("must be logged\n");
164 vl = strtoul(argv[0], NULL, 0);
166 ports = malloc(sa->ports * n * sizeof(unsigned char));
169 /* request all VLANs config */
170 vlans = malloc(n * sizeof(unsigned short));
171 ports = malloc(sa->ports * n * sizeof(unsigned char));
172 i = ngadmin_getVLANDotAllConf(nga, vlans, ports, &n);
174 /* request single VLAN config */
175 ports = malloc(sa->ports * sizeof(unsigned char));
176 i = ngadmin_getVLANDotConf(nga, vl, ports);
185 printf("Ports configuration: \n");
187 for (i = 1; i <= sa->ports; i++)
193 for (i = 0; i < n; i++) {
194 printf("%u\t", vlans[i]);
195 for (j = 0; j < sa->ports; j++)
196 printf("%c\t", vlan_char(ports[i * sa->ports + j]));
200 /* show single VLAN config */
202 for (j = 0; j < sa->ports; j++)
203 printf("%c\t", vlan_char(ports[j]));
215 bool do_vlan_mode_set (int argc, const char **argv, struct ngadmin *nga)
222 "usage: vlan mode set <mode>\n"
223 "1 - basic port based\n"
224 "2 - advanced port based\n"
226 "4 - advanced 802.1Q\n"
231 if (ngadmin_getCurrentSwitch(nga) == NULL) {
232 printf("must be logged\n");
236 mode = strtoul(argv[0], NULL, 0);
237 if (mode < 1 || mode > 4) {
238 printf("mode out of range\n");
242 i = ngadmin_setVLANType(nga, mode);
250 bool do_vlan_mode_show (int argc, const char **argv UNUSED, struct ngadmin *nga)
252 int i, t, ret = true;
256 printf("this command takes no argument\n");
261 if (ngadmin_getCurrentSwitch(nga) == NULL) {
262 printf("must be logged\n");
267 i = ngadmin_getVLANType(nga, &t);
274 printf("VLAN type: ");
278 printf("disabled\n");
281 case VLAN_PORT_BASIC:
282 printf("port basic\n");
286 printf("port advanced\n");
290 printf("802.1Q basic\n");
294 printf("802.1Q advanced\n");
298 printf("unknown (%i)\n", t);
307 bool do_vlan_pvid_set (int argc, const char **argv, struct ngadmin *nga)
309 const struct swi_attr *sa;
316 printf("usage: vlan pvid set <port> <vlan>\n");
320 sa = ngadmin_getCurrentSwitch(nga);
322 printf("must be logged\n");
326 port = strtoul(argv[0], NULL, 0);
327 vlan = strtoul(argv[1], NULL, 0);
329 if (port < 1 || port > sa->ports) {
330 printf("port out of range\n");
334 if (vlan < 1 || vlan > VLAN_MAX) {
335 printf("vlan out of range\n");
339 i = ngadmin_setPVID(nga, port, vlan);
347 bool do_vlan_pvid_show (int argc, const char **argv UNUSED, struct ngadmin *nga)
349 unsigned short *ports = NULL;
350 const struct swi_attr *sa;
356 printf("this command takes no argument\n");
361 sa = ngadmin_getCurrentSwitch(nga);
363 printf("must be logged\n");
368 ports = malloc(sa->ports * sizeof(unsigned short));
369 i = ngadmin_getAllPVID(nga, ports);
377 for (i = 1; i <= sa->ports; i++)
382 for (i = 0; i < sa->ports; i++)
383 printf("%u\t", ports[i]);