]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: fixed bugs reported in varlink statistics (#28796)
authorKiran Vemula <10357630+KiranVKumar@users.noreply.github.com>
Tue, 15 Aug 2023 10:45:58 +0000 (16:15 +0530)
committerGitHub <noreply@github.com>
Tue, 15 Aug 2023 10:45:58 +0000 (11:45 +0100)
Fixes https://github.com/systemd/systemd/issues/28791

Follow-up for bc837621a38efbaff14fbe33bfe5c34dac805343

src/resolve/resolvectl.c
src/resolve/resolved-bus.c
src/resolve/resolved-dns-server.c
src/resolve/resolved-manager.c
src/resolve/resolved-manager.h
src/resolve/resolved-varlink.c
test/units/testsuite-75.sh

index 811204335373af6e221a4fc5f5cd510c9f9ca4ec..5d540058ef6ab058ddc7b59f21efa7d6d21740b2 100644 (file)
@@ -1072,7 +1072,7 @@ static int verb_tlsa(int argc, char **argv, void *userdata) {
 
 static int show_statistics(int argc, char **argv, void *userdata) {
         _cleanup_(table_unrefp) Table *table = NULL;
-        JsonVariant *reply = NULL, *stats = NULL;
+        JsonVariant *reply = NULL;
         _cleanup_(varlink_unrefp) Varlink *vl = NULL;
         int r;
 
@@ -1084,17 +1084,8 @@ static int show_statistics(int argc, char **argv, void *userdata) {
         if (r < 0)
                 return log_error_errno(r, "Failed to issue DumpStatistics() varlink call: %m");
 
-        stats = json_variant_by_key(reply, "statistics");
-        if (!stats)
-                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
-                                       "DumpStatistics() response is missing 'statistics' key.");
-
-        if (!json_variant_is_object(stats))
-                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
-                                       "DumpStatistics() response 'statistics' field not an object");
-
         if (!FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF))
-                return json_variant_dump(stats, arg_json_format_flags, NULL, NULL);
+                return json_variant_dump(reply, arg_json_format_flags, NULL, NULL);
 
         struct statistics {
                 JsonVariant *transactions;
@@ -1109,7 +1100,7 @@ static int show_statistics(int argc, char **argv, void *userdata) {
                 {},
         };
 
-        r = json_dispatch(stats, statistics_dispatch_table, NULL, JSON_LOG, &statistics);
+        r = json_dispatch(reply, statistics_dispatch_table, NULL, JSON_LOG, &statistics);
         if (r < 0)
                 return r;
 
@@ -1239,7 +1230,7 @@ static int show_statistics(int argc, char **argv, void *userdata) {
 }
 
 static int reset_statistics(int argc, char **argv, void *userdata) {
-        JsonVariant *reply = NULL, *s = NULL;
+        JsonVariant *reply = NULL;
         _cleanup_(varlink_unrefp) Varlink *vl = NULL;
         int r;
 
@@ -1251,11 +1242,6 @@ static int reset_statistics(int argc, char **argv, void *userdata) {
         if (r < 0)
                 return log_error_errno(r, "Failed to issue ResetStatistics() varlink call: %m");
 
-        s = json_variant_by_key(reply, "success");
-        if (!s)
-                return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
-                                       "ResetStatistics() response is missing 'success' key.");
-
         if (!FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF))
                 return json_variant_dump(reply, arg_json_format_flags, NULL, NULL);
 
@@ -3014,7 +3000,7 @@ static int dump_server_state(JsonVariant *server) {
                 const char *verified_feature_level;
                 const char *possible_feature_level;
                 const char *dnssec_mode;
-                bool can_do_dnssec;
+                bool dnssec_supported;
                 size_t received_udp_fragment_max;
                 uint64_t n_failed_udp;
                 uint64_t n_failed_tcp;
@@ -3028,21 +3014,21 @@ static int dump_server_state(JsonVariant *server) {
         int r;
 
         static const JsonDispatch dispatch_table[] = {
-                { "server",                     JSON_VARIANT_STRING,    json_dispatch_const_string,  offsetof(struct server_state, server_name),                JSON_MANDATORY },
-                { "type",                       JSON_VARIANT_STRING,    json_dispatch_const_string,  offsetof(struct server_state, type),                       JSON_MANDATORY },
-                { "interface",                  JSON_VARIANT_STRING,    json_dispatch_const_string,  offsetof(struct server_state, ifname),                     0              },
-                { "verifiedFeatureLevel",       JSON_VARIANT_STRING,    json_dispatch_const_string,  offsetof(struct server_state, verified_feature_level),     0              },
-                { "possibleFeatureLevel",       JSON_VARIANT_STRING,    json_dispatch_const_string,  offsetof(struct server_state, possible_feature_level),     0              },
-                { "dnssecMode",                 JSON_VARIANT_STRING,    json_dispatch_const_string,  offsetof(struct server_state, dnssec_mode),                JSON_MANDATORY },
-                { "canDoDNSSEC",                JSON_VARIANT_BOOLEAN,   json_dispatch_boolean,       offsetof(struct server_state, can_do_dnssec),              JSON_MANDATORY },
-                { "maxUDPFragmentSize",         JSON_VARIANT_UNSIGNED,  json_dispatch_uint64,        offsetof(struct server_state, received_udp_fragment_max),  JSON_MANDATORY },
-                { "failedUDPAttempts",          JSON_VARIANT_UNSIGNED,  json_dispatch_uint64,        offsetof(struct server_state, n_failed_udp),               JSON_MANDATORY },
-                { "failedTCPAttempts",          JSON_VARIANT_UNSIGNED,  json_dispatch_uint64,        offsetof(struct server_state, n_failed_tcp),               JSON_MANDATORY },
-                { "seenTruncatedPacket",        JSON_VARIANT_BOOLEAN,   json_dispatch_boolean,       offsetof(struct server_state, packet_truncated),           JSON_MANDATORY },
-                { "seenOPTRRGettingLost",       JSON_VARIANT_BOOLEAN,   json_dispatch_boolean,       offsetof(struct server_state, packet_bad_opt),             JSON_MANDATORY },
-                { "seenRRSIGRRMissing",         JSON_VARIANT_BOOLEAN,   json_dispatch_boolean,       offsetof(struct server_state, packet_rrsig_missing),       JSON_MANDATORY },
-                { "seenInvalidPacket",          JSON_VARIANT_BOOLEAN,   json_dispatch_boolean,       offsetof(struct server_state, packet_invalid),             JSON_MANDATORY },
-                { "serverDroppedDOFlag",        JSON_VARIANT_BOOLEAN,   json_dispatch_boolean,       offsetof(struct server_state, packet_do_off),              JSON_MANDATORY },
+                { "Server",                     JSON_VARIANT_STRING,    json_dispatch_const_string,  offsetof(struct server_state, server_name),                JSON_MANDATORY },
+                { "Type",                       JSON_VARIANT_STRING,    json_dispatch_const_string,  offsetof(struct server_state, type),                       JSON_MANDATORY },
+                { "Interface",                  JSON_VARIANT_STRING,    json_dispatch_const_string,  offsetof(struct server_state, ifname),                     0              },
+                { "VerifiedFeatureLevel",       JSON_VARIANT_STRING,    json_dispatch_const_string,  offsetof(struct server_state, verified_feature_level),     0              },
+                { "PossibleFeatureLevel",       JSON_VARIANT_STRING,    json_dispatch_const_string,  offsetof(struct server_state, possible_feature_level),     0              },
+                { "DNSSECMode",                 JSON_VARIANT_STRING,    json_dispatch_const_string,  offsetof(struct server_state, dnssec_mode),                JSON_MANDATORY },
+                { "DNSSECSupported",            JSON_VARIANT_BOOLEAN,   json_dispatch_boolean,       offsetof(struct server_state, dnssec_supported),           JSON_MANDATORY },
+                { "ReceivedUDPFragmentMax",     JSON_VARIANT_UNSIGNED,  json_dispatch_uint64,        offsetof(struct server_state, received_udp_fragment_max),  JSON_MANDATORY },
+                { "FailedUDPAttempts",          JSON_VARIANT_UNSIGNED,  json_dispatch_uint64,        offsetof(struct server_state, n_failed_udp),               JSON_MANDATORY },
+                { "FailedTCPAttempts",          JSON_VARIANT_UNSIGNED,  json_dispatch_uint64,        offsetof(struct server_state, n_failed_tcp),               JSON_MANDATORY },
+                { "PacketTruncated",            JSON_VARIANT_BOOLEAN,   json_dispatch_boolean,       offsetof(struct server_state, packet_truncated),           JSON_MANDATORY },
+                { "PacketBadOpt",               JSON_VARIANT_BOOLEAN,   json_dispatch_boolean,       offsetof(struct server_state, packet_bad_opt),             JSON_MANDATORY },
+                { "PacketRRSIGMissing",         JSON_VARIANT_BOOLEAN,   json_dispatch_boolean,       offsetof(struct server_state, packet_rrsig_missing),       JSON_MANDATORY },
+                { "PacketInvalid",              JSON_VARIANT_BOOLEAN,   json_dispatch_boolean,       offsetof(struct server_state, packet_invalid),             JSON_MANDATORY },
+                { "PacketDoOff",                JSON_VARIANT_BOOLEAN,   json_dispatch_boolean,       offsetof(struct server_state, packet_do_off),              JSON_MANDATORY },
                 {},
         };
 
@@ -3098,8 +3084,8 @@ static int dump_server_state(JsonVariant *server) {
         r = table_add_many(table,
                            TABLE_FIELD, "DNSSEC Mode",
                            TABLE_STRING, server_state.dnssec_mode,
-                           TABLE_FIELD, "Can do DNSSEC",
-                           TABLE_STRING, yes_no(server_state.can_do_dnssec),
+                           TABLE_FIELD, "DNSSEC Supported",
+                           TABLE_STRING, yes_no(server_state.dnssec_supported),
                            TABLE_FIELD, "Maximum UDP fragment size received",
                            TABLE_UINT64, server_state.received_udp_fragment_max,
                            TABLE_FIELD, "Failed UDP attempts",
index 3079c74038d43c735f587958dac93d393b3c2710..1ef25acdad446ac99aad24c9e4c96f779bdf0132 100644 (file)
@@ -1712,7 +1712,7 @@ static int bus_method_reset_statistics(sd_bus_message *message, void *userdata,
 
         bus_client_log(message, "statistics reset");
 
-        dns_manager_reset_satistics(m);
+        dns_manager_reset_statistics(m);
 
         return sd_bus_reply_method_return(message, NULL);
 }
index 184a655b995e6f5fcbca83f0b3785b4f24233cdf..f23e3f5db9b00d88800d71370c94e40e98653017 100644 (file)
@@ -1103,19 +1103,19 @@ int dns_server_dump_state_to_json(DnsServer *server, JsonVariant **ret) {
 
         return json_build(ret,
                           JSON_BUILD_OBJECT(
-                                        JSON_BUILD_PAIR_STRING("server", strna(dns_server_string_full(server))),
-                                        JSON_BUILD_PAIR_STRING("type", strna(dns_server_type_to_string(server->type))),
-                                        JSON_BUILD_PAIR_CONDITION(server->type == DNS_SERVER_LINK, "interface", JSON_BUILD_STRING(server->link ? server->link->ifname : NULL)),
-                                        JSON_BUILD_PAIR_STRING("verifiedFeatureLevel", strna(dns_server_feature_level_to_string(server->verified_feature_level))),
-                                        JSON_BUILD_PAIR_STRING("possibleFeatureLevel", strna(dns_server_feature_level_to_string(server->possible_feature_level))),
-                                        JSON_BUILD_PAIR_STRING("dnssecMode", strna(dnssec_mode_to_string(dns_server_get_dnssec_mode(server)))),
-                                        JSON_BUILD_PAIR_BOOLEAN("canDoDNSSEC", dns_server_dnssec_supported(server)),
-                                        JSON_BUILD_PAIR_UNSIGNED("maxUDPFragmentSize", server->received_udp_fragment_max),
-                                        JSON_BUILD_PAIR_UNSIGNED("failedUDPAttempts", server->n_failed_udp),
-                                        JSON_BUILD_PAIR_UNSIGNED("failedTCPAttempts", server->n_failed_tcp),
-                                        JSON_BUILD_PAIR_BOOLEAN("seenTruncatedPacket", server->packet_truncated),
-                                        JSON_BUILD_PAIR_BOOLEAN("seenOPTRRGettingLost", server->packet_bad_opt),
-                                        JSON_BUILD_PAIR_BOOLEAN("seenRRSIGRRMissing", server->packet_rrsig_missing),
-                                        JSON_BUILD_PAIR_BOOLEAN("seenInvalidPacket", server->packet_invalid),
-                                        JSON_BUILD_PAIR_BOOLEAN("serverDroppedDOFlag", server->packet_do_off)));
+                                        JSON_BUILD_PAIR_STRING("Server", strna(dns_server_string_full(server))),
+                                        JSON_BUILD_PAIR_STRING("Type", strna(dns_server_type_to_string(server->type))),
+                                        JSON_BUILD_PAIR_CONDITION(server->type == DNS_SERVER_LINK, "Interface", JSON_BUILD_STRING(server->link ? server->link->ifname : NULL)),
+                                        JSON_BUILD_PAIR_STRING("VerifiedFeatureLevel", strna(dns_server_feature_level_to_string(server->verified_feature_level))),
+                                        JSON_BUILD_PAIR_STRING("PossibleFeatureLevel", strna(dns_server_feature_level_to_string(server->possible_feature_level))),
+                                        JSON_BUILD_PAIR_STRING("DNSSECMode", strna(dnssec_mode_to_string(dns_server_get_dnssec_mode(server)))),
+                                        JSON_BUILD_PAIR_BOOLEAN("DNSSECSupported", dns_server_dnssec_supported(server)),
+                                        JSON_BUILD_PAIR_UNSIGNED("ReceivedUDPFragmentMax", server->received_udp_fragment_max),
+                                        JSON_BUILD_PAIR_UNSIGNED("FailedUDPAttempts", server->n_failed_udp),
+                                        JSON_BUILD_PAIR_UNSIGNED("FailedTCPAttempts", server->n_failed_tcp),
+                                        JSON_BUILD_PAIR_BOOLEAN("PacketTruncated", server->packet_truncated),
+                                        JSON_BUILD_PAIR_BOOLEAN("PacketBadOpt", server->packet_bad_opt),
+                                        JSON_BUILD_PAIR_BOOLEAN("PacketRRSIGMissing", server->packet_rrsig_missing),
+                                        JSON_BUILD_PAIR_BOOLEAN("PacketInvalid", server->packet_invalid),
+                                        JSON_BUILD_PAIR_BOOLEAN("PacketDoOff", server->packet_do_off)));
 }
index b77ae60d273bc098c010518209d95f134bb7e945..dc8629b050d5e8e70c6d2979a544abda072dc958 100644 (file)
@@ -1835,7 +1835,7 @@ int dns_manager_dump_statistics_json(Manager *m, JsonVariant **ret) {
                                         ))));
 }
 
-void dns_manager_reset_satistics(Manager *m) {
+void dns_manager_reset_statistics(Manager *m) {
 
         assert(m);
 
index 1cd9c3e51485299b37b3bdae9cf29551c65fa52a..16b883bd2192f09259966a05b349160938c39799 100644 (file)
@@ -227,4 +227,4 @@ int socket_disable_pmtud(int fd, int af);
 
 int dns_manager_dump_statistics_json(Manager *m, JsonVariant **ret);
 
-void dns_manager_reset_satistics(Manager *m);
+void dns_manager_reset_statistics(Manager *m);
index dffdfb0cd02e2d1c5605704cc5b945f19fcb74b7..b27cf904357ab6070236b112a2b06db38b863462 100644 (file)
@@ -670,8 +670,7 @@ static int vl_method_dump_statistics(Varlink *link, JsonVariant *parameters, Var
         if (r < 0)
                 return r;
 
-        return varlink_replyb(link, JSON_BUILD_OBJECT(
-                                              JSON_BUILD_PAIR("statistics", JSON_BUILD_VARIANT(j))));
+        return varlink_replyb(link, JSON_BUILD_VARIANT(j));
 }
 
 static int vl_method_reset_statistics(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
@@ -684,10 +683,9 @@ static int vl_method_reset_statistics(Varlink *link, JsonVariant *parameters, Va
 
         m = ASSERT_PTR(varlink_server_get_userdata(varlink_get_server(link)));
 
-        dns_manager_reset_satistics(m);
+        dns_manager_reset_statistics(m);
 
-        return varlink_replyb(link, JSON_BUILD_OBJECT(
-                                              JSON_BUILD_PAIR("success", JSON_BUILD_BOOLEAN(true))));
+        return varlink_replyb(link, JSON_BUILD_EMPTY_OBJECT);
 }
 
 static int varlink_monitor_server_init(Manager *m) {
index 8bc9291f7a77b851bef94105dfcee9f0efd485de..6e8f9fa55280d7c8ad44fcf18ab9f35222116569 100755 (executable)
@@ -600,11 +600,11 @@ grep -qF "Interface" "$RUN_OUT"
 
 run resolvectl show-server-state --json=short
 grep -qF "10.0.0.1" "$RUN_OUT"
-grep -qF "interface" "$RUN_OUT"
+grep -qF "Interface" "$RUN_OUT"
 
 run resolvectl show-server-state --json=pretty
 grep -qF "10.0.0.1" "$RUN_OUT"
-grep -qF "interface" "$RUN_OUT"
+grep -qF "Interface" "$RUN_OUT"
 
 ### Test resolvectl statistics ###
 run resolvectl statistics
@@ -627,11 +627,7 @@ grep -qF "dnssec" "$RUN_OUT"
 run resolvectl reset-statistics
 
 run resolvectl reset-statistics --json=pretty
-grep -qF "success" "$RUN_OUT"
-grep -qF "true" "$RUN_OUT"
 
 run resolvectl reset-statistics --json=short
-grep -qF "success" "$RUN_OUT"
-grep -qF "true" "$RUN_OUT"
 
 touch /testok