Jiri Pirko <j...@resnulli.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
>>

Reply via email to