Hi,

Stephen Hemminger <step...@networkplumber.org> writes:

> On Fri, 13 Jul 2018 17:06:11 -0700
> Vinicius Costa Gomes <vinicius.go...@intel.com> 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.

Seems that I have missed batch mode. I am going to play with it a little
and see how things would look.

>
>> +
>> +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.

Sure. Will do.


Cheers,
--
Vinicius

Reply via email to