network: tc/teql: set tca_kind in verify()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 26 Jan 2022 03:18:47 +0000 (12:18 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 9 Feb 2022 05:43:19 +0000 (14:43 +0900)
Then, qdisc_configure() can be simplified.

src/network/tc/qdisc.c
src/network/tc/qdisc.h
src/network/tc/teql.c

index 11c092d4bf79547c79eee5bb138ba9e6527d21ba..d1b689793caa8fe8e469cc58adaadcfbc5e390eb 100644 (file)
@@ -269,24 +269,12 @@ int qdisc_configure(Link *link, QDisc *qdisc) {
         if (r < 0)
                 return log_link_debug_errno(link, r, "Could not create RTM_NEWQDISC message: %m");
 
-        if (QDISC_VTABLE(qdisc)) {
-                if (QDISC_VTABLE(qdisc)->fill_tca_kind) {
-                        r = QDISC_VTABLE(qdisc)->fill_tca_kind(link, qdisc, req);
-                        if (r < 0)
-                                return r;
-                } else {
-                        r = sd_netlink_message_append_string(req, TCA_KIND, QDISC_VTABLE(qdisc)->tca_kind);
-                        if (r < 0)
-                                return r;
-                }
+        r = sd_netlink_message_append_string(req, TCA_KIND, qdisc_get_tca_kind(qdisc));
+        if (r < 0)
+                return r;
 
-                if (QDISC_VTABLE(qdisc)->fill_message) {
-                        r = QDISC_VTABLE(qdisc)->fill_message(link, qdisc, req);
-                        if (r < 0)
-                                return r;
-                }
-        } else {
-                r = sd_netlink_message_append_string(req, TCA_KIND, qdisc->tca_kind);
+        if (QDISC_VTABLE(qdisc) && QDISC_VTABLE(qdisc)->fill_message) {
+                r = QDISC_VTABLE(qdisc)->fill_message(link, qdisc, req);
                 if (r < 0)
                         return r;
         }
index 29ceb50183c59fa81e09cbb4cd928109cbfbeea0..2fc1dc2b039c636f762bb5cdf75eff741641c371 100644 (file)
@@ -55,7 +55,6 @@ typedef struct QDiscVTable {
         const char *tca_kind;
         /* called in qdisc_new() */
         int (*init)(QDisc *qdisc);
-        int (*fill_tca_kind)(Link *link, QDisc *qdisc, sd_netlink_message *m);
         int (*fill_message)(Link *link, QDisc *qdisc, sd_netlink_message *m);
         int (*verify)(QDisc *qdisc);
 } QDiscVTable;
index 633a7827b4b34048eb0b673d5a14626d23ee029c..1422860f55dcc5825de92c17b7ad0c96bf796aa0 100644 (file)
@@ -1,34 +1,25 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #include "macro.h"
-#include "netlink-util.h"
 #include "parse-util.h"
-#include "stdio-util.h"
 #include "string-util.h"
 #include "teql.h"
 
-static int trivial_link_equalizer_fill_tca_kind(Link *link, QDisc *qdisc, sd_netlink_message *req) {
-        char kind[STRLEN("teql") + DECIMAL_STR_MAX(unsigned)];
+static int trivial_link_equalizer_verify(QDisc *qdisc) {
+        _cleanup_free_ char *tca_kind = NULL;
         TrivialLinkEqualizer *teql;
-        int r;
-
-        assert(link);
-        assert(qdisc);
-        assert(req);
 
-        teql = TEQL(qdisc);
+        teql = TEQL(ASSERT_PTR(qdisc));
 
-        xsprintf(kind, "teql%u", teql->id);
-        r = sd_netlink_message_append_string(req, TCA_KIND, kind);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not append TCA_KIND attribute: %m");
+        if (asprintf(&tca_kind, "teql%u", teql->id) < 0)
+                return log_oom();
 
-        return 0;
+        return free_and_replace(qdisc->tca_kind, tca_kind);
 }
 
 const QDiscVTable teql_vtable = {
         .object_size = sizeof(TrivialLinkEqualizer),
-        .fill_tca_kind = trivial_link_equalizer_fill_tca_kind,
+        .verify = trivial_link_equalizer_verify,
 };
 
 int config_parse_trivial_link_equalizer_id(