[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <87sgdrinta.fsf@mellanox.com>
Date: Thu, 16 Jul 2020 15:36:49 +0200
From: Petr Machata <petrm@...lanox.com>
To: Jiri Pirko <jiri@...nulli.us>
Cc: netdev@...r.kernel.org,
Stephen Hemminger <stephen@...workplumber.org>,
David Ahern <dsahern@...il.com>, Jiri Pirko <jiri@...lanox.com>
Subject: Re: [PATCH iproute2-next 1/2] tc: Look for blocks in qevents
Jiri Pirko <jiri@...nulli.us> writes:
>>diff --git a/tc/tc_qdisc.c b/tc/tc_qdisc.c
>>index 8eb08c34..bea8d3c0 100644
>>--- a/tc/tc_qdisc.c
>>+++ b/tc/tc_qdisc.c
>>@@ -477,7 +477,9 @@ static int tc_qdisc_block_exists_cb(struct nlmsghdr *n, void *arg)
>> struct tc_qdisc_block_exists_ctx *ctx = arg;
>> struct tcmsg *t = NLMSG_DATA(n);
>> struct rtattr *tb[TCA_MAX+1];
>>+ struct qdisc_util *q = NULL;
>
> Pointless initialization.
Ack.
>> int len = n->nlmsg_len;
>>+ const char *kind;
>>
>> if (n->nlmsg_type != RTM_NEWQDISC)
>> return 0;
>>@@ -506,6 +508,14 @@ static int tc_qdisc_block_exists_cb(struct nlmsghdr *n, void *arg)
>> if (block == ctx->block_index)
>> ctx->found = true;
>> }
>>+
>>+ kind = rta_getattr_str(tb[TCA_KIND]);
>>+ q = get_qdisc_kind(kind);
>>+ if (!q)
>>+ return -1;
>>+ if (q->has_block)
>>+ q->has_block(q, tb[TCA_OPTIONS], ctx->block_index, &ctx->found);
>
> Op returns int yet you don't use it. Perhaps it can directly return
> bool?
In theory it could return actual errors (such as an attribute reporting
block 0). I'll have it handle the return value through the usual "err ="
stanza.
>
>>+
>> return 0;
>> }
>>
>>diff --git a/tc/tc_qevent.c b/tc/tc_qevent.c
>>index 1f8e6506..2c010fcf 100644
>>--- a/tc/tc_qevent.c
>>+++ b/tc/tc_qevent.c
>>@@ -92,6 +92,21 @@ void qevents_print(struct qevent_util *qevents, FILE *f)
>> close_json_array(PRINT_ANY, "");
>> }
>>
>>+bool qevents_have_block(struct qevent_util *qevents, __u32 block_idx)
>>+{
>>+ if (!qevents)
>>+ return false;
>>+
>>+ for (; qevents->id; qevents++) {
>>+ struct qevent_base *qeb = qevents->data;
>>+
>>+ if (qeb->block_idx == block_idx)
>>+ return true;
>>+ }
>>+
>>+ return false;
>>+}
>>+
>> int qevents_dump(struct qevent_util *qevents, struct nlmsghdr *n)
>> {
>> int err;
>>diff --git a/tc/tc_qevent.h b/tc/tc_qevent.h
>>index 574e7cff..d60c3f75 100644
>>--- a/tc/tc_qevent.h
>>+++ b/tc/tc_qevent.h
>>@@ -2,6 +2,7 @@
>> #ifndef _TC_QEVENT_H_
>> #define _TC_QEVENT_H_
>>
>>+#include <stdbool.h>
>> #include <linux/types.h>
>> #include <libnetlink.h>
>>
>>@@ -37,6 +38,7 @@ int qevent_parse(struct qevent_util *qevents, int *p_argc, char ***p_argv);
>> int qevents_read(struct qevent_util *qevents, struct rtattr **tb);
>> int qevents_dump(struct qevent_util *qevents, struct nlmsghdr *n);
>> void qevents_print(struct qevent_util *qevents, FILE *f);
>>+bool qevents_have_block(struct qevent_util *qevents, __u32 block_idx);
>>
>> struct qevent_plain {
>> struct qevent_base base;
>>diff --git a/tc/tc_util.h b/tc/tc_util.h
>>index edc39138..c8af4e95 100644
>>--- a/tc/tc_util.h
>>+++ b/tc/tc_util.h
>>@@ -5,6 +5,7 @@
>> #define MAX_MSG 16384
>> #include <limits.h>
>> #include <linux/if.h>
>>+#include <stdbool.h>
>>
>> #include <linux/pkt_sched.h>
>> #include <linux/pkt_cls.h>
>>@@ -40,6 +41,7 @@ struct qdisc_util {
>> int (*parse_copt)(struct qdisc_util *qu, int argc,
>> char **argv, struct nlmsghdr *n, const char *dev);
>> int (*print_copt)(struct qdisc_util *qu, FILE *f, struct rtattr *opt);
>>+ int (*has_block)(struct qdisc_util *qu, struct rtattr *opt, __u32 block_idx, bool *p_has);
>> };
>>
>> extern __u16 f_proto;
>>--
>>2.20.1
>>
Powered by blists - more mailing lists