Message ID | 20200116155701.6636-1-lesliemonis@gmail.com |
---|---|
State | Changes Requested |
Delegated to: | David Ahern |
Headers | show |
Series | tc: parse attributes with NLA_F_NESTED flag | expand |
On Thu, Jan 16, 2020 at 9:27 PM Leslie Monis <lesliemonis@gmail.com> wrote: > > The kernel now requires all new nested attributes to set the > NLA_F_NESTED flag. Enable tc {qdisc,class,filter} to parse > attributes that have the NLA_F_NESTED flag set. > > Signed-off-by: Leslie Monis <lesliemonis@gmail.com> I apologize. I forgot to add the [iproute2-next] tag.
On 1/16/20 8:57 AM, Leslie Monis wrote: > diff --git a/tc/tc_class.c b/tc/tc_class.c > index c7e3cfdf..39bea971 100644 > --- a/tc/tc_class.c > +++ b/tc/tc_class.c > @@ -246,8 +246,8 @@ static void graph_cls_show(FILE *fp, char *buf, struct hlist_head *root_list, > "+---(%s)", cls_id_str); > strcat(buf, str); > > - parse_rtattr(tb, TCA_MAX, (struct rtattr *)cls->data, > - cls->data_len); > + parse_rtattr_flags(tb, TCA_MAX, (struct rtattr *)cls->data, > + cls->data_len, NLA_F_NESTED); Petr recently sent a patch to update parse_rtattr_nested to add the NESTED flag. Can you update this patch to use parse_rtattr_nested?
On Sun, Jan 19, 2020 at 3:31 AM David Ahern <dsahern@gmail.com> wrote: > > On 1/16/20 8:57 AM, Leslie Monis wrote: > > > diff --git a/tc/tc_class.c b/tc/tc_class.c > > index c7e3cfdf..39bea971 100644 > > --- a/tc/tc_class.c > > +++ b/tc/tc_class.c > > @@ -246,8 +246,8 @@ static void graph_cls_show(FILE *fp, char *buf, struct hlist_head *root_list, > > "+---(%s)", cls_id_str); > > strcat(buf, str); > > > > - parse_rtattr(tb, TCA_MAX, (struct rtattr *)cls->data, > > - cls->data_len); > > + parse_rtattr_flags(tb, TCA_MAX, (struct rtattr *)cls->data, > > + cls->data_len, NLA_F_NESTED); > > Petr recently sent a patch to update parse_rtattr_nested to add the > NESTED flag. Can you update this patch to use parse_rtattr_nested? Yes, will do.
On Sun, Jan 19, 2020 at 1:12 PM Leslie Monis <lesliemonis@gmail.com> wrote: > > On Sun, Jan 19, 2020 at 3:31 AM David Ahern <dsahern@gmail.com> wrote: > > > > On 1/16/20 8:57 AM, Leslie Monis wrote: > > > > > diff --git a/tc/tc_class.c b/tc/tc_class.c > > > index c7e3cfdf..39bea971 100644 > > > --- a/tc/tc_class.c > > > +++ b/tc/tc_class.c > > > @@ -246,8 +246,8 @@ static void graph_cls_show(FILE *fp, char *buf, struct hlist_head *root_list, > > > "+---(%s)", cls_id_str); > > > strcat(buf, str); > > > > > > - parse_rtattr(tb, TCA_MAX, (struct rtattr *)cls->data, > > > - cls->data_len); > > > + parse_rtattr_flags(tb, TCA_MAX, (struct rtattr *)cls->data, > > > + cls->data_len, NLA_F_NESTED); > > > > Petr recently sent a patch to update parse_rtattr_nested to add the > > NESTED flag. Can you update this patch to use parse_rtattr_nested? > > Yes, will do. On a second thought, I think this patch should suffice. Using parse_rtattr_nested does not work in this case as the object that is being parsed is not a nested attribute, but a set of attributes placed contiguously in memory. If I'm not mistaken, Petr's patch allows parsing nested attributes (with the NLA_F_NESTED flag set) within a nested attribute. Adding the NLA_F_NESTED flag to parse_rtattr_flags() enables the function to correctly parse those attributes (among the set of attributes) that happen to have the NLA_F_NESTED flag set. Hope I'm making sense.
On 1/16/20 8:57 AM, Leslie Monis wrote: > The kernel now requires all new nested attributes to set the > NLA_F_NESTED flag. Enable tc {qdisc,class,filter} to parse > attributes that have the NLA_F_NESTED flag set. > > Signed-off-by: Leslie Monis <lesliemonis@gmail.com> > --- > tc/tc_class.c | 6 +++--- > tc/tc_filter.c | 2 +- > tc/tc_qdisc.c | 4 ++-- > 3 files changed, 6 insertions(+), 6 deletions(-) > applied to iproute2-next. Thanks
diff --git a/tc/tc_class.c b/tc/tc_class.c index c7e3cfdf..39bea971 100644 --- a/tc/tc_class.c +++ b/tc/tc_class.c @@ -246,8 +246,8 @@ static void graph_cls_show(FILE *fp, char *buf, struct hlist_head *root_list, "+---(%s)", cls_id_str); strcat(buf, str); - parse_rtattr(tb, TCA_MAX, (struct rtattr *)cls->data, - cls->data_len); + parse_rtattr_flags(tb, TCA_MAX, (struct rtattr *)cls->data, + cls->data_len, NLA_F_NESTED); if (tb[TCA_KIND] == NULL) { strcat(buf, " [unknown qdisc kind] "); @@ -327,7 +327,7 @@ int print_class(struct nlmsghdr *n, void *arg) if (filter_classid && t->tcm_handle != filter_classid) return 0; - parse_rtattr(tb, TCA_MAX, TCA_RTA(t), len); + parse_rtattr_flags(tb, TCA_MAX, TCA_RTA(t), len, NLA_F_NESTED); if (tb[TCA_KIND] == NULL) { fprintf(stderr, "print_class: NULL kind\n"); diff --git a/tc/tc_filter.c b/tc/tc_filter.c index dcddca77..c591a19f 100644 --- a/tc/tc_filter.c +++ b/tc/tc_filter.c @@ -267,7 +267,7 @@ int print_filter(struct nlmsghdr *n, void *arg) return -1; } - parse_rtattr(tb, TCA_MAX, TCA_RTA(t), len); + parse_rtattr_flags(tb, TCA_MAX, TCA_RTA(t), len, NLA_F_NESTED); if (tb[TCA_KIND] == NULL && (n->nlmsg_type == RTM_NEWTFILTER || n->nlmsg_type == RTM_GETTFILTER || diff --git a/tc/tc_qdisc.c b/tc/tc_qdisc.c index 75a14672..181fe2f0 100644 --- a/tc/tc_qdisc.c +++ b/tc/tc_qdisc.c @@ -235,7 +235,7 @@ int print_qdisc(struct nlmsghdr *n, void *arg) if (filter_ifindex && filter_ifindex != t->tcm_ifindex) return 0; - parse_rtattr(tb, TCA_MAX, TCA_RTA(t), len); + parse_rtattr_flags(tb, TCA_MAX, TCA_RTA(t), len, NLA_F_NESTED); if (tb[TCA_KIND] == NULL) { fprintf(stderr, "print_qdisc: NULL kind\n"); @@ -461,7 +461,7 @@ static int tc_qdisc_block_exists_cb(struct nlmsghdr *n, void *arg) if (len < 0) return -1; - parse_rtattr(tb, TCA_MAX, TCA_RTA(t), len); + parse_rtattr_flags(tb, TCA_MAX, TCA_RTA(t), len, NLA_F_NESTED); if (tb[TCA_KIND] == NULL) return -1;
The kernel now requires all new nested attributes to set the NLA_F_NESTED flag. Enable tc {qdisc,class,filter} to parse attributes that have the NLA_F_NESTED flag set. Signed-off-by: Leslie Monis <lesliemonis@gmail.com> --- tc/tc_class.c | 6 +++--- tc/tc_filter.c | 2 +- tc/tc_qdisc.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-)