1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
3 #include "varlink-io.systemd.Resolve.Monitor.h"
5 /* We want to reuse the ResourceKey and ResourceRecord structures from the io.systemd.Resolve interface,
6 * hence import them here. */
7 #include "varlink-io.systemd.Resolve.h"
9 static VARLINK_DEFINE_STRUCT_TYPE(
11 VARLINK_DEFINE_FIELD_BY_TYPE(rr
, ResourceRecord
, VARLINK_NULLABLE
),
12 VARLINK_DEFINE_FIELD(raw
, VARLINK_STRING
, 0));
14 static VARLINK_DEFINE_STRUCT_TYPE(
16 VARLINK_DEFINE_FIELD_BY_TYPE(rr
, ResourceRecord
, VARLINK_NULLABLE
),
17 VARLINK_DEFINE_FIELD(raw
, VARLINK_STRING
, 0),
18 VARLINK_DEFINE_FIELD(ifindex
, VARLINK_INT
, VARLINK_NULLABLE
));
20 static VARLINK_DEFINE_METHOD(
21 SubscribeQueryResults
,
23 VARLINK_DEFINE_OUTPUT(ready
, VARLINK_BOOL
, VARLINK_NULLABLE
),
24 /* Subsequent replies */
25 VARLINK_DEFINE_OUTPUT(state
, VARLINK_STRING
, VARLINK_NULLABLE
),
26 VARLINK_DEFINE_OUTPUT(result
, VARLINK_STRING
, VARLINK_NULLABLE
),
27 VARLINK_DEFINE_OUTPUT(rcode
, VARLINK_INT
, VARLINK_NULLABLE
),
28 VARLINK_DEFINE_OUTPUT(errno
, VARLINK_INT
, VARLINK_NULLABLE
),
29 VARLINK_DEFINE_OUTPUT(extendedDNSErrorCode
, VARLINK_INT
, VARLINK_NULLABLE
),
30 VARLINK_DEFINE_OUTPUT(extendedDNSErrorMessage
, VARLINK_STRING
, VARLINK_NULLABLE
),
31 VARLINK_DEFINE_OUTPUT_BY_TYPE(question
, ResourceKey
, VARLINK_NULLABLE
|VARLINK_ARRAY
),
32 VARLINK_DEFINE_OUTPUT_BY_TYPE(collectedQuestions
, ResourceKey
, VARLINK_NULLABLE
|VARLINK_ARRAY
),
33 VARLINK_DEFINE_OUTPUT_BY_TYPE(answer
, Answer
, VARLINK_NULLABLE
|VARLINK_ARRAY
));
35 static VARLINK_DEFINE_STRUCT_TYPE(
37 VARLINK_DEFINE_FIELD_BY_TYPE(key
, ResourceKey
, 0),
38 VARLINK_DEFINE_FIELD_BY_TYPE(rrs
, ResourceRecordArray
, VARLINK_NULLABLE
|VARLINK_ARRAY
),
39 VARLINK_DEFINE_FIELD(type
, VARLINK_STRING
, VARLINK_NULLABLE
),
40 VARLINK_DEFINE_FIELD(until
, VARLINK_INT
, 0));
42 static VARLINK_DEFINE_STRUCT_TYPE(
44 VARLINK_DEFINE_FIELD(protocol
, VARLINK_STRING
, 0),
45 VARLINK_DEFINE_FIELD(family
, VARLINK_INT
, VARLINK_NULLABLE
),
46 VARLINK_DEFINE_FIELD(ifindex
, VARLINK_INT
, VARLINK_NULLABLE
),
47 VARLINK_DEFINE_FIELD(ifname
, VARLINK_STRING
, VARLINK_NULLABLE
),
48 VARLINK_DEFINE_FIELD_BY_TYPE(cache
, CacheEntry
, VARLINK_ARRAY
));
50 static VARLINK_DEFINE_METHOD(
52 VARLINK_DEFINE_OUTPUT_BY_TYPE(dump
, ScopeCache
, VARLINK_ARRAY
));
54 static VARLINK_DEFINE_STRUCT_TYPE(
56 VARLINK_DEFINE_FIELD(Server
, VARLINK_STRING
, 0),
57 VARLINK_DEFINE_FIELD(Type
, VARLINK_STRING
, 0),
58 VARLINK_DEFINE_FIELD(Interface
, VARLINK_STRING
, VARLINK_NULLABLE
),
59 VARLINK_DEFINE_FIELD(InterfaceIndex
, VARLINK_INT
, VARLINK_NULLABLE
),
60 VARLINK_DEFINE_FIELD(VerifiedFeatureLevel
, VARLINK_STRING
, 0),
61 VARLINK_DEFINE_FIELD(PossibleFeatureLevel
, VARLINK_STRING
, 0),
62 VARLINK_DEFINE_FIELD(DNSSECMode
, VARLINK_STRING
, 0),
63 VARLINK_DEFINE_FIELD(DNSSECSupported
, VARLINK_BOOL
, 0),
64 VARLINK_DEFINE_FIELD(ReceivedUDPFragmentMax
, VARLINK_INT
, 0),
65 VARLINK_DEFINE_FIELD(FailedUDPAttempts
, VARLINK_INT
, 0),
66 VARLINK_DEFINE_FIELD(FailedTCPAttempts
, VARLINK_INT
, 0),
67 VARLINK_DEFINE_FIELD(PacketTruncated
, VARLINK_BOOL
, 0),
68 VARLINK_DEFINE_FIELD(PacketBadOpt
, VARLINK_BOOL
, 0),
69 VARLINK_DEFINE_FIELD(PacketRRSIGMissing
, VARLINK_BOOL
, 0),
70 VARLINK_DEFINE_FIELD(PacketInvalid
, VARLINK_BOOL
, 0),
71 VARLINK_DEFINE_FIELD(PacketDoOff
, VARLINK_BOOL
, 0));
73 static VARLINK_DEFINE_METHOD(
75 VARLINK_DEFINE_OUTPUT_BY_TYPE(dump
, ServerState
, VARLINK_ARRAY
));
77 static VARLINK_DEFINE_STRUCT_TYPE(
78 TransactionStatistics
,
79 VARLINK_DEFINE_FIELD(currentTransactions
, VARLINK_INT
, 0),
80 VARLINK_DEFINE_FIELD(totalTransactions
, VARLINK_INT
, 0),
81 VARLINK_DEFINE_FIELD(totalTimeouts
, VARLINK_INT
, 0),
82 VARLINK_DEFINE_FIELD(totalTimeoutsServedStale
, VARLINK_INT
, 0),
83 VARLINK_DEFINE_FIELD(totalFailedResponses
, VARLINK_INT
, 0),
84 VARLINK_DEFINE_FIELD(totalFailedResponsesServedStale
, VARLINK_INT
, 0));
86 static VARLINK_DEFINE_STRUCT_TYPE(
88 VARLINK_DEFINE_FIELD(size
, VARLINK_INT
, 0),
89 VARLINK_DEFINE_FIELD(hits
, VARLINK_INT
, 0),
90 VARLINK_DEFINE_FIELD(misses
, VARLINK_INT
, 0));
92 static VARLINK_DEFINE_STRUCT_TYPE(
94 VARLINK_DEFINE_FIELD(secure
, VARLINK_INT
, 0),
95 VARLINK_DEFINE_FIELD(insecure
, VARLINK_INT
, 0),
96 VARLINK_DEFINE_FIELD(bogus
, VARLINK_INT
, 0),
97 VARLINK_DEFINE_FIELD(indeterminate
, VARLINK_INT
, 0));
99 static VARLINK_DEFINE_METHOD(
101 VARLINK_DEFINE_OUTPUT_BY_TYPE(transactions
, TransactionStatistics
, 0),
102 VARLINK_DEFINE_OUTPUT_BY_TYPE(cache
, CacheStatistics
, 0),
103 VARLINK_DEFINE_OUTPUT_BY_TYPE(dnssec
, DnssecStatistics
, 0));
105 static VARLINK_DEFINE_METHOD(ResetStatistics
);
107 VARLINK_DEFINE_INTERFACE(
108 io_systemd_Resolve_Monitor
,
109 "io.systemd.Resolve.Monitor",
110 &vl_method_SubscribeQueryResults
,
111 &vl_method_DumpCache
,
112 &vl_method_DumpServerState
,
113 &vl_method_DumpStatistics
,
114 &vl_method_ResetStatistics
,
115 &vl_type_ResourceKey
,
116 &vl_type_ResourceRecord
,
117 &vl_type_ResourceRecordArray
,
121 &vl_type_TransactionStatistics
,
122 &vl_type_CacheStatistics
,
123 &vl_type_DnssecStatistics
,
124 &vl_type_ServerState
);