diff --git a/tc/q_taprio.c b/tc/q_taprio.c index 8f6b263a..336bb245 100644 --- a/tc/q_taprio.c +++ b/tc/q_taprio.c @@ -268,14 +268,15 @@ static int taprio_parse_opt(struct qdisc_util *qu, int argc, tail = NLMSG_TAIL(n); addattr_l(n, 1024, TCA_OPTIONS, NULL, 0); + if (clockid != CLOCKID_INVALID) + addattr_l(n, 1024, TCA_TAPRIO_ATTR_SCHED_CLOCKID, &clockid, sizeof(clockid)); + if (opt.num_tc > 0) addattr_l(n, 1024, TCA_TAPRIO_ATTR_PRIOMAP, &opt, sizeof(opt)); if (base_time) addattr_l(n, 1024, TCA_TAPRIO_ATTR_SCHED_BASE_TIME, &base_time, sizeof(base_time)); - addattr_l(n, 1024, TCA_TAPRIO_ATTR_SCHED_CLOCKID, &clockid, sizeof(clockid)); - if (!list_empty(&sched_entries)) { struct rtattr *entry_list; entry_list = addattr_nest(n, 1024, TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST | NLA_F_NESTED); @@ -306,6 +307,8 @@ static int print_sched_list(FILE *f, struct rtattr *list) open_json_array(PRINT_JSON, "schedule"); + print_string(PRINT_FP, NULL, "%s", _SL_); + for (item = RTA_DATA(list); RTA_OK(item, rem); item = RTA_NEXT(item, rem)) { struct rtattr *tb[TCA_TAPRIO_SCHED_ENTRY_MAX + 1]; __u32 index = 0, gatemask = 0, interval = 0; @@ -340,12 +343,25 @@ static int print_sched_list(FILE *f, struct rtattr *list) return 0; } +static int print_schedule(FILE *f, struct rtattr **tb) +{ + int64_t base_time = 0; + + if (tb[TCA_TAPRIO_ATTR_SCHED_BASE_TIME]) + base_time = rta_getattr_s64(tb[TCA_TAPRIO_ATTR_SCHED_BASE_TIME]); + + print_lluint(PRINT_ANY, "base_time", "\tbase-time %lld", base_time); + + print_sched_list(f, tb[TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST]); + + return 0; +} + 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; __s32 clockid = CLOCKID_INVALID; - __s64 base_time = 0; int i; if (opt == NULL) @@ -378,19 +394,27 @@ static int taprio_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt) print_string(PRINT_FP, NULL, "%s", _SL_); - 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_SCHED_CLOCKID]) clockid = rta_getattr_s32(tb[TCA_TAPRIO_ATTR_SCHED_CLOCKID]); print_string(PRINT_ANY, "clockid", "clockid %s", get_clock_name(clockid)); - print_lluint(PRINT_ANY, "base_time", " base-time %lld", base_time); + print_schedule(f, tb); - print_string(PRINT_FP, NULL, "%s", _SL_); + if (tb[TCA_TAPRIO_ATTR_ADMIN_SCHED]) { + struct rtattr *t[TCA_TAPRIO_ATTR_MAX + 1]; - return print_sched_list(f, tb[TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST]); + parse_rtattr_nested(t, TCA_TAPRIO_ATTR_MAX, + tb[TCA_TAPRIO_ATTR_ADMIN_SCHED]); + + open_json_object(NULL); + + print_schedule(f, t); + + close_json_object(); + } + + return 0; } struct qdisc_util taprio_qdisc_util = {