From: Kiran Vemula <10357630+KiranVKumar@users.noreply.github.com> Date: Tue, 15 Aug 2023 10:45:58 +0000 (+0530) Subject: resolved: fixed bugs reported in varlink statistics (#28796) X-Git-Tag: v255-rc1~721 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a67e5c6e371f3a3facd2d2d0d636d335f662c0ae;p=thirdparty%2Fsystemd.git resolved: fixed bugs reported in varlink statistics (#28796) Fixes https://github.com/systemd/systemd/issues/28791 Follow-up for bc837621a38efbaff14fbe33bfe5c34dac805343 --- diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c index 81120433537..5d540058ef6 100644 --- a/src/resolve/resolvectl.c +++ b/src/resolve/resolvectl.c @@ -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", diff --git a/src/resolve/resolved-bus.c b/src/resolve/resolved-bus.c index 3079c74038d..1ef25acdad4 100644 --- a/src/resolve/resolved-bus.c +++ b/src/resolve/resolved-bus.c @@ -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); } diff --git a/src/resolve/resolved-dns-server.c b/src/resolve/resolved-dns-server.c index 184a655b995..f23e3f5db9b 100644 --- a/src/resolve/resolved-dns-server.c +++ b/src/resolve/resolved-dns-server.c @@ -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))); } diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index b77ae60d273..dc8629b050d 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -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); diff --git a/src/resolve/resolved-manager.h b/src/resolve/resolved-manager.h index 1cd9c3e5148..16b883bd219 100644 --- a/src/resolve/resolved-manager.h +++ b/src/resolve/resolved-manager.h @@ -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); diff --git a/src/resolve/resolved-varlink.c b/src/resolve/resolved-varlink.c index dffdfb0cd02..b27cf904357 100644 --- a/src/resolve/resolved-varlink.c +++ b/src/resolve/resolved-varlink.c @@ -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) { diff --git a/test/units/testsuite-75.sh b/test/units/testsuite-75.sh index 8bc9291f7a7..6e8f9fa5528 100755 --- a/test/units/testsuite-75.sh +++ b/test/units/testsuite-75.sh @@ -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