]> git.sur5r.net Git - ngadmin/blobdiff - cli/com_qos.c
Fix crash when reading the wrong type of VLAN
[ngadmin] / cli / com_qos.c
index 4adf9b61c378fca6e7423910295e0f25debae7c8..7b51bd2f268e2b9734d7fc6f9c94fe47459ac00e 100644 (file)
@@ -2,31 +2,31 @@
 #include "commands.h"
 
 
-bool do_qos_mode (int nb, const char **com, struct ngadmin *nga)
+int do_qos_mode (int argc, const char **argv, struct ngadmin *nga)
 {
-       int i, s, ret = true;
+       int i, s, ret = 0;
        const struct swi_attr *sa;
        
        
-       if (nb == 0) {
-               printf("Usage: qos mode port|802.1p\n");
+       if (argc == 0) {
+               printf("usage: qos mode port|802.1p\n");
                goto end;
        }
        
        sa = ngadmin_getCurrentSwitch(nga);
        if (sa == NULL) {
                printf("must be logged\n");
-               ret = false;
+               ret = 1;
                goto end;
        }
        
-       if (strcasecmp(com[0], "port") == 0) {
+       if (strcasecmp(argv[0], "port") == 0) {
                s = QOS_PORT;
-       } else if (strcasecmp(com[0], "802.1p") == 0) {
+       } else if (strcasecmp(argv[0], "802.1p") == 0) {
                s = QOS_DOT;
        } else {
                printf("Unknown QOS mode\n");
-               ret = false;
+               ret = 1;
                goto end;
        }
        
@@ -39,45 +39,48 @@ end:
 }
 
 
-bool do_qos_set (int nb, const char **com, struct ngadmin *nga)
+int do_qos_set (int argc, const char **argv, struct ngadmin *nga)
 {
-       int i, p;
+       int i, p, ret = 0;
        const struct swi_attr *sa;
-       bool ret = true;
        char d = PRIO_UNSPEC, *ports = NULL;
        
        
-       if (nb < 2) {
-               printf("Usage: qos set (all <prio0>)|(<port1> <prio1> [<port2> <prio2> ...])\n");
-               ret = false;
+       if (argc < 2) {
+               printf("usage: qos set (all <prio0>)|(<port1> <prio1> [<port2> <prio2> ...])\n");
+               ret = 1;
                goto end;
        }
        
        sa = ngadmin_getCurrentSwitch(nga);
        if (sa ==NULL) {
                printf("must be logged\n");
-               ret = false;
+               ret = 1;
                goto end;
        }
        
        ports = malloc(sa->ports * sizeof(char));
        
-       if (strcmp(com[0], "all") == 0) {
-               d = parsePrio(com[1]);
-               com += 2;
-               nb -= 2;
+       /* read defaults */
+       if (strcmp(argv[0], "all") == 0) {
+               d = parsePrio(argv[1]);
+               argv += 2;
+               argc -= 2;
        }
        
+       /* apply defaults */
        for (i = 0; i < sa->ports; i++)
                ports[i] = d;
        
-       for (i = 0; i < nb; i += 2) {
-               p = strtol(com[i], NULL, 0);
+       /* read and apply port specifics */
+       for (i = 0; i < argc; i += 2) {
+               p = strtol(argv[i], NULL, 0);
                if (p < 1 || p > sa->ports)
                        continue;
-               ports[p - 1] = parsePrio(com[i + 1]);
+               ports[p - 1] = parsePrio(argv[i + 1]);
        }
        
+       /* send the new configuration to the switch */
        i = ngadmin_setQOSValues(nga, ports);
        printErrCode(i);
        
@@ -88,24 +91,30 @@ end:
 }
 
 
-bool do_qos_show (int nb UNUSED, const char **com UNUSED, struct ngadmin *nga)
+int do_qos_show (int argc, const char **argv UNUSED, struct ngadmin *nga)
 {
-       int i, s = 0, ret = true;
+       int i, s = 0, ret = 0;
        const struct swi_attr *sa;
        char *ports = NULL;
        
        
+       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 = false;
+               ret = 1;
                goto end;
        }
        
        i = ngadmin_getQOSMode(nga, &s);
        if (i != ERR_OK) {
                printErrCode(i);
-               ret = false;
+               ret = 1;
                goto end;
        }
        
@@ -129,7 +138,7 @@ bool do_qos_show (int nb UNUSED, const char **com UNUSED, struct ngadmin *nga)
        i = ngadmin_getQOSValues(nga, ports);
        if (i != ERR_OK) {
                printErrCode(i);
-               ret = false;
+               ret = 1;
                goto end;
        }