static int drr_parse_class_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { struct rtattr *tail; __u32 tmp; tail = NLMSG_TAIL(n); addattr_l(n, 1024, TCA_OPTIONS, NULL, 0); while (argc > 0) { if (strcmp(*argv, "quantum") == 0) { NEXT_ARG(); if (get_size(&tmp, *argv)) { fprintf(stderr, "Illegal \"quantum\"\n"); return -1; } addattr_l(n, 1024, TCA_DRR_QUANTUM, &tmp, sizeof(tmp)); } else if (strcmp(*argv, "help") == 0) { explain2(); return -1; } else { fprintf(stderr, "What is \"%s\"?\n", *argv); explain2(); return -1; } argc--; argv++; } tail->rta_len = (void *) NLMSG_TAIL(n) - (void *)tail; return 0; }
static int wrr_parse_class_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { int ok=0; long qm=1500; while (argc > 0) { if (strcmp(*argv, "quantum") == 0) { NEXT_ARG(); if (get_size((unsigned *)&qm, *argv)) { fprintf(stderr, "Illegal \"quantum\"\n"); return -1; } ok++; } else if (strcmp(*argv, "help") == 0) { explain2(); return -1; } else { fprintf(stderr, "What is \"%s\"?\n", *argv); explain2(); return -1; } argc--; argv++; } if (ok) addattr_l(n, 1024, TCA_OPTIONS, &qm, sizeof(qm)); return 0; }
static int wrr_parse_class_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { int ok=0; struct wrr_class_opt copt; struct rtattr *tail; copt.handle = 0; copt.quantum = 0; //printf("wrr_parse_class_opt.\n"); while (argc > 0) { if (strcmp(*argv, "quantum") == 0) { NEXT_ARG(); if (get_size(&copt.quantum, *argv)) { fprintf(stderr, "Illegal \"quantum\"\n"); return -1; } ok++; }else if (strcmp(*argv, "nfmark") == 0) { NEXT_ARG(); if (get_size(&copt.handle, *argv)) { fprintf(stderr, "Illegal \"nfmark\"\n"); return -1; } } else if (strcmp(*argv, "help") == 0) { explain2(); return -1; } else { fprintf(stderr, "What is \"%s\"?\n", *argv); explain2(); return -1; } argc--; argv++; } //printf("wrr_parse_class_opt ok %d q=%d h:%x.\n",ok,copt.quantum,copt.handle); if (ok) { tail = NLMSG_TAIL(n); addattr_l(n, 1024, TCA_OPTIONS, NULL, 0); addattr_l(n, 2024, TCA_WRR_PARAMS, &copt, sizeof(copt)); tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail; } return 0; }