On Fri, 13 Jul 2018 17:06:11 -0700
Vinicius Costa Gomes <[email protected]> wrote:
> + while (fscanf(f, "%ms %x %" PRIu32 "\n", &cmd_str, &gatemask,
> &interval) != EOF) {
> + struct rtattr *entry;
> +
> + err = str_to_entry_cmd(cmd_str);
> + free(cmd_str);
> +
> + if (err < 0)
> + return err;
> +
> + cmd = err;
> +
> + entry = addattr_nest(n, 1024, TCA_TAPRIO_SCHED_ENTRY);
> +
> + addattr_l(n, 1024, TCA_TAPRIO_SCHED_ENTRY_INDEX, &index,
> sizeof(index));
> + addattr_l(n, 1024, TCA_TAPRIO_SCHED_ENTRY_CMD, &cmd,
> sizeof(cmd));
> + addattr_l(n, 1024, TCA_TAPRIO_SCHED_ENTRY_GATE_MASK, &gatemask,
> sizeof(gatemask));
> + addattr_l(n, 1024, TCA_TAPRIO_SCHED_ENTRY_INTERVAL, &interval,
> sizeof(interval));
> +
> + addattr_nest_end(n, entry);
> + }
> +
Why not just use batch mode? Introducing another input mode in tc that is
only in one qdisc seems like a bad idea.
> +
> +static int taprio_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr
> *opt)
> +{
> + struct rtattr *tb[TCA_TAPRIO_ATTR_MAX + 1];
> + struct tc_mqprio_qopt *qopt = 0;
> + __s64 cycle_time = 0, extension_time = 0, base_time = 0;
> + __s32 clockid = CLOCKID_INVALID;
> + __u32 preempt_mask = 0;
> + int i;
> +
> + if (opt == NULL)
> + return 0;
> +
> + parse_rtattr_nested(tb, TCA_TAPRIO_ATTR_MAX, opt);
> +
> + if (tb[TCA_TAPRIO_ATTR_PRIOMAP] == NULL)
> + return -1;
> +
> + qopt = RTA_DATA(tb[TCA_TAPRIO_ATTR_PRIOMAP]);
> +
> + fprintf(f, "tc %u map ", qopt->num_tc);
> + for (i = 0; i <= TC_PRIO_MAX; i++)
> + fprintf(f, "%u ", qopt->prio_tc_map[i]);
> + fprintf(f, "\n queues:");
> + for (i = 0; i < qopt->num_tc; i++)
> + fprintf(f, "(%u:%u) ", qopt->offset[i],
> + qopt->offset[i] + qopt->count[i] - 1);
> +
> + if (tb[TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME])
> + cycle_time =
> rta_getattr_s64(tb[TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME]);
> +
> + if (tb[TCA_TAPRIO_ATTR_SCHED_EXTENSION_TIME])
> + extension_time =
> rta_getattr_s64(tb[TCA_TAPRIO_ATTR_SCHED_EXTENSION_TIME]);
> +
> + if (tb[TCA_TAPRIO_ATTR_SCHED_BASE_TIME])
> + base_time =
> rta_getattr_s64(tb[TCA_TAPRIO_ATTR_SCHED_BASE_TIME]);
> +
> + if (tb[TCA_TAPRIO_ATTR_PREEMPT_MASK])
> + preempt_mask =
> rta_getattr_s64(tb[TCA_TAPRIO_ATTR_PREEMPT_MASK]);
> +
> + if (tb[TCA_TAPRIO_ATTR_SCHED_CLOCKID])
> + clockid = rta_getattr_s32(tb[TCA_TAPRIO_ATTR_SCHED_CLOCKID]);
> +
> + fprintf(f, "\n clockid %s ", get_clock_name(clockid));
> +
> + fprintf(f, "\n base-time %lld cycle-time %lld extension-time %lld ",
> + base_time, cycle_time, extension_time);
> +
> + fprintf(f, "\n preempt-mask 0x%x ", preempt_mask);
> +
> + return print_sched_list(f, tb[TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST]);
Please implement JSON output using json_print functions.