}
-bool do_vlan_8021q_del (int argc, const char **argv, struct ngadmin *nga)
+int do_vlan_8021q_del (int argc, const char **argv, struct ngadmin *nga)
{
const struct swi_attr *sa;
unsigned short vlan;
if (argc != 1) {
printf("usage: vlan 8021q del <vlan>\n");
- return false;
+ return 1;
}
sa = ngadmin_getCurrentSwitch(nga);
if (sa == NULL) {
printf("must be logged\n");
- return false;
+ return 1;
}
vlan=strtoul(argv[0], NULL, 0);
- if (vlan < 1 || vlan > VLAN_MAX) {
+ if (vlan < VLAN_MIN || vlan > VLAN_DOT_MAX) {
printf("vlan out of range\n");
- return false;
+ return 1;
}
i = ngadmin_VLANDestroy(nga, vlan);
printErrCode(i);
- return true;
+ return 0;
}
-bool do_vlan_8021q_set (int argc, const char **argv, struct ngadmin *nga)
+int do_vlan_port_set (int argc, const char **argv, struct ngadmin *nga)
+{
+ unsigned char vlan, port, *ports = NULL;
+ const struct swi_attr *sa;
+ int i, k = 0, ret = 0;
+
+
+ if (argc < 2) {
+ printf("usage: vlan port set [all <vlan>] [<port1> <vlan>] [<port2> <vlan>] [...]\n");
+ ret = 1;
+ goto end;
+ }
+
+ sa = ngadmin_getCurrentSwitch(nga);
+ if (sa == NULL) {
+ printf("must be logged\n");
+ ret = 1;
+ goto end;
+ }
+
+ ports = malloc(sa->ports * sizeof(unsigned char));
+
+ /* read defaults */
+ vlan = 0;
+ if (strcmp(argv[k], "all") == 0) {
+ k++;
+ vlan = strtoul(argv[k++], NULL, 0);
+ /* VLAN 0 is allowed and means no change */
+ if (vlan > VLAN_PORT_MAX) {
+ printf("vlan out of range\n");
+ ret = 1;
+ goto end;
+ }
+ }
+
+ /* apply defaults */
+ memset(ports, vlan, sa->ports);
+
+ /* read and apply port specifics */
+ while (k < argc - 1) {
+ /* read port */
+ port = strtoul(argv[k++], NULL, 0);
+ if (port < 1 || port > sa->ports) {
+ printf("port out of range\n");
+ ret = 1;
+ goto end;
+ }
+
+ /* read vlan */
+ vlan = strtoul(argv[k++], NULL, 0);
+ /* VLAN 0 is allowed and means no change */
+ if (vlan > VLAN_PORT_MAX) {
+ printf("vlan out of range\n");
+ ret = 1;
+ goto end;
+ }
+
+ ports[port - 1] = vlan;
+ }
+
+ /* set conf */
+ i = ngadmin_setVLANPortConf(nga, ports);
+ printErrCode(i);
+
+end:
+ free(ports);
+
+ return ret;
+}
+
+
+int do_vlan_port_show (int argc, const char **argv UNUSED, struct ngadmin *nga)
+{
+ unsigned char *ports = NULL;
+ const struct swi_attr *sa;
+ int i, ret = 0;
+
+
+ if (argc > 0) {
+ printf("this command takes no argument\n");
+ ret = 1;
+ goto end;
+ }
+
+ sa = ngadmin_getCurrentSwitch(nga);
+ if (sa == NULL) {
+ printf("must be logged\n");
+ ret = 1;
+ goto end;
+ }
+
+ ports = malloc(sa->ports * sizeof(unsigned char));
+
+ /* request all VLANs config */
+ i = ngadmin_getVLANPortConf(nga, ports);
+
+ if (i != ERR_OK) {
+ printErrCode(i);
+ ret = 1;
+ goto end;
+ }
+
+ printf("Ports configuration: \n");
+ printf("Port\t");
+ for (i = 1; i <= sa->ports; i++)
+ printf("%i\t", i);
+ putchar('\n');
+
+ /* show all VLANs */
+ printf("VLAN\t");
+ for (i = 0; i < sa->ports; i++)
+ printf("%u\t", ports[i]);
+ putchar('\n');
+
+end:
+ free(ports);
+
+ return ret;
+}
+
+
+int do_vlan_8021q_set (int argc, const char **argv, struct ngadmin *nga)
{
unsigned char *ports = NULL, p, def = VLAN_UNSPEC;
const struct swi_attr *sa;
- bool ret = true;
unsigned short vlan;
- int i, k = 0;
+ int i, k = 0, ret = 0;
if (argc == 0) {
printf("usage: vlan 802.1q set <vlan> [all unspec|no|untagged|tagged] [<port1> unspec|no|untagged|tagged ...]\n");
- ret = false;
+ ret = 1;
goto end;
}
sa = ngadmin_getCurrentSwitch(nga);
if (sa == NULL) {
printf("must be logged\n");
- ret = false;
+ ret = 1;
goto end;
}
/* read vlan */
vlan = strtoul(argv[k++], NULL, 0);
- if (vlan < 1 || vlan > VLAN_MAX) {
+ if (vlan < VLAN_MIN || vlan > VLAN_DOT_MAX) {
printf("vlan out of range\n");
- ret = false;
+ ret = 1;
goto end;
}
def = VLAN_UNSPEC;
} else {
printf("incorrect type\n");
- ret = false;
+ ret = 1;
goto end;
}
k++;
/* apply defaults */
memset(ports, def, sa->ports);
- /* apply port specifics */
+ /* read and apply port specifics */
while (k < argc - 1) {
p = strtoul(argv[k++], NULL, 0) - 1;
if (p >= sa->ports) {
printf("port out of range\n");
- ret = false;
+ ret = 1;
goto end;
}
if (strcasecmp(argv[k], "tagged") ==0) {
ports[p] = VLAN_UNSPEC;
} else {
printf("incorrect type\n");
- ret = false;
+ ret = 1;
goto end;
}
k++;
}
-bool do_vlan_8021q_show (int argc, const char **argv, struct ngadmin *nga)
+int do_vlan_8021q_show (int argc, const char **argv, struct ngadmin *nga)
{
unsigned short vl = 0, *vlans = NULL;
unsigned char *ports = NULL;
const struct swi_attr *sa;
- int i, j, n = 16;
- bool ret = true;
+ int i, j, n = 16, ret = 0;
sa = ngadmin_getCurrentSwitch(nga);
if (sa == NULL) {
printf("must be logged\n");
- ret = false;
+ ret = 1;
goto end;
}
if (i != ERR_OK) {
printErrCode(i);
- ret = false;
+ ret = 1;
goto end;
}
}
-bool do_vlan_mode_set (int argc, const char **argv, struct ngadmin *nga)
+int do_vlan_mode_set (int argc, const char **argv, struct ngadmin *nga)
{
int mode, i;
if (argc == 0) {
printf(
"usage: vlan mode set <mode>\n"
+ "0 - disabled\n"
"1 - basic port based\n"
"2 - advanced port based\n"
"3 - basic 802.1Q\n"
"4 - advanced 802.1Q\n"
);
- return true;
+ return 0;
}
if (ngadmin_getCurrentSwitch(nga) == NULL) {
printf("must be logged\n");
- return false;
+ return 1;
}
mode = strtoul(argv[0], NULL, 0);
- if (mode < 1 || mode > 4) {
+ if (mode < VLAN_DISABLED || mode > VLAN_DOT_ADV) {
printf("mode out of range\n");
- return false;
+ return 1;
}
i = ngadmin_setVLANType(nga, mode);
printErrCode(i);
- return true;
+ return 0;
}
-bool do_vlan_mode_show (int argc, const char **argv UNUSED, struct ngadmin *nga)
+int do_vlan_mode_show (int argc, const char **argv UNUSED, struct ngadmin *nga)
{
- int i, t, ret = true;
+ int i, t, ret = 0;
if (argc > 0) {
printf("this command takes no argument\n");
- ret = false;
+ ret = 1;
goto end;
}
if (ngadmin_getCurrentSwitch(nga) == NULL) {
printf("must be logged\n");
- ret = false;
+ ret = 1;
goto end;
}
i = ngadmin_getVLANType(nga, &t);
if (i != ERR_OK) {
printErrCode(i);
- ret = false;
+ ret = 1;
goto end;
}
}
-bool do_vlan_pvid_set (int argc, const char **argv, struct ngadmin *nga)
+int do_vlan_pvid_set (int argc, const char **argv, struct ngadmin *nga)
{
const struct swi_attr *sa;
unsigned char port;
if (argc != 2) {
printf("usage: vlan pvid set <port> <vlan>\n");
- return false;
+ return 1;
}
sa = ngadmin_getCurrentSwitch(nga);
if (sa == NULL) {
printf("must be logged\n");
- return false;
+ return 1;
}
port = strtoul(argv[0], NULL, 0);
if (port < 1 || port > sa->ports) {
printf("port out of range\n");
- return false;
+ return 1;
}
- if (vlan < 1 || vlan > VLAN_MAX) {
+ if (vlan < VLAN_MIN || vlan > VLAN_DOT_MAX) {
printf("vlan out of range\n");
- return false;
+ return 1;
}
i = ngadmin_setPVID(nga, port, vlan);
printErrCode(i);
- return true;
+ return 0;
}
-bool do_vlan_pvid_show (int argc, const char **argv UNUSED, struct ngadmin *nga)
+int do_vlan_pvid_show (int argc, const char **argv UNUSED, struct ngadmin *nga)
{
unsigned short *ports = NULL;
const struct swi_attr *sa;
- int i;
- bool ret = true;
+ int i, ret = 0;
if (argc > 0) {
printf("this command takes no argument\n");
- ret = false;
+ ret = 1;
goto end;
}
sa = ngadmin_getCurrentSwitch(nga);
if (sa == NULL) {
printf("must be logged\n");
- ret = false;
+ ret = 1;
goto end;
}
i = ngadmin_getAllPVID(nga, ports);
if (i != ERR_OK) {
printErrCode(i);
- ret = false;
+ ret = 1;
goto end;
}