5 /* helper function to analyse bitrate speed specifications */
6 static int bitrate_analyse (int argc, const char **argv, int *ports)
11 while (i < argc - 1) {
12 s = parseBitrateStr(argv[i + 1]);
13 if (strcmp(argv[i], "inout") == 0) {
16 } else if (strcmp(argv[i], "in") == 0) {
18 } else if (strcmp(argv[i], "out") == 0) {
31 int do_bitrate_set (int argc, const char **argv, struct ngadmin *nga)
33 int i, k = 0, defs[] = {12, 12}, p, *ports = NULL, ret = 0;
34 const struct swi_attr *sa;
39 "usage: bitrate set [all SPEEDSPEC] <port1> SPEEDSPEC [<port2> SPEEDSPEC ...]\n"
40 "SPEEDSPEC: [inout <speed>] [in <ispeed>] [out <ospeed>]\n"
46 sa = ngadmin_getCurrentSwitch(nga);
48 printf("must be logged\n");
53 ports = malloc(2 * sa->ports * sizeof(int));
55 /* get defaults if present */
56 if (strcmp(argv[k], "all") == 0) {
58 k += bitrate_analyse(argc - k, &argv[k], defs);
62 for (i = 0; i < sa->ports; i++)
63 memcpy(&ports[2 * i], defs, sizeof(defs));
65 /* get ports specifics */
67 p = strtol(argv[k++], NULL, 0) - 1;
68 if (p >= 0 && p <sa->ports)
69 k += bitrate_analyse(argc - k, &argv[k], &ports[2 * p]);
72 /* send it to the switch */
73 i = ngadmin_setBitrateLimits(nga, ports);
83 int do_bitrate_show (int argc, const char **argv UNUSED, struct ngadmin *nga)
85 int i, ret = 0, *ports = NULL;
86 const struct swi_attr *sa;
90 printf("this command takes no argument\n");
95 sa = ngadmin_getCurrentSwitch(nga);
97 printf("must be logged\n");
103 ports = malloc(2 * sa->ports * sizeof(int));
104 i = ngadmin_getBitrateLimits(nga, ports);
111 for (i = 0; i < sa->ports; i++)
112 printf("port %i: in %s, out %s\n", i + 1, safeStr(getBitrateStr(ports[2 * i + 0])), safeStr(getBitrateStr(ports[2 * i + 1])));