1 /* 2 * Copyright (c) 2020, The OpenThread Authors. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 3. Neither the name of the copyright holder nor the 13 * names of its contributors may be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 /** 30 * @file 31 * This file includes definitions for the d-bus object of OpenThread service. 32 */ 33 34 #ifndef OTBR_DBUS_THREAD_OBJECT_HPP_ 35 #define OTBR_DBUS_THREAD_OBJECT_HPP_ 36 37 #include "openthread-br/config.h" 38 39 #include <string> 40 41 #include <openthread/link.h> 42 43 #include "dbus/server/dbus_object.hpp" 44 #include "mdns/mdns.hpp" 45 #include "ncp/ncp_openthread.hpp" 46 47 namespace otbr { 48 namespace DBus { 49 50 /** 51 * @addtogroup border-router-dbus-server 52 * 53 * @brief 54 * This module includes the <a href="dbus-api.html">dbus server api</a>. 55 * 56 * @{ 57 * @} 58 * 59 */ 60 61 class DBusAgent; 62 63 class DBusThreadObject : public DBusObject 64 { 65 public: 66 /** 67 * This constructor of dbus thread object. 68 * 69 * @param[in] aConnection The dbus connection. 70 * @param[in] aInterfaceName The dbus interface name. 71 * @param[in] aNcp The ncp controller 72 * @param[in] aPublisher The Mdns::Publisher 73 * 74 */ 75 DBusThreadObject(DBusConnection *aConnection, 76 const std::string &aInterfaceName, 77 otbr::Ncp::ControllerOpenThread *aNcp, 78 Mdns::Publisher *aPublisher); 79 80 otbrError Init(void) override; 81 82 void RegisterGetPropertyHandler(const std::string &aInterfaceName, 83 const std::string &aPropertyName, 84 const PropertyHandlerType &aHandler) override; 85 86 private: 87 void DeviceRoleHandler(otDeviceRole aDeviceRole); 88 void ActiveDatasetChangeHandler(const otOperationalDatasetTlvs &aDatasetTlvs); 89 void NcpResetHandler(void); 90 91 void ScanHandler(DBusRequest &aRequest); 92 void EnergyScanHandler(DBusRequest &aRequest); 93 void AttachHandler(DBusRequest &aRequest); 94 void AttachAllNodesToHandler(DBusRequest &aRequest); 95 void DetachHandler(DBusRequest &aRequest); 96 void LeaveHandler(DBusRequest &aRequest); 97 void FactoryResetHandler(DBusRequest &aRequest); 98 void ResetHandler(DBusRequest &aRequest); 99 void JoinerStartHandler(DBusRequest &aRequest); 100 void JoinerStopHandler(DBusRequest &aRequest); 101 void PermitUnsecureJoinHandler(DBusRequest &aRequest); 102 void AddOnMeshPrefixHandler(DBusRequest &aRequest); 103 void RemoveOnMeshPrefixHandler(DBusRequest &aRequest); 104 void AddExternalRouteHandler(DBusRequest &aRequest); 105 void RemoveExternalRouteHandler(DBusRequest &aRequest); 106 void UpdateMeshCopTxtHandler(DBusRequest &aRequest); 107 void GetPropertiesHandler(DBusRequest &aRequest); 108 void LeaveNetworkHandler(DBusRequest &aRequest); 109 void SetNat64Enabled(DBusRequest &aRequest); 110 111 void IntrospectHandler(DBusRequest &aRequest); 112 113 otError SetMeshLocalPrefixHandler(DBusMessageIter &aIter); 114 otError SetLegacyUlaPrefixHandler(DBusMessageIter &aIter); 115 otError SetLinkModeHandler(DBusMessageIter &aIter); 116 otError SetActiveDatasetTlvsHandler(DBusMessageIter &aIter); 117 otError SetFeatureFlagListDataHandler(DBusMessageIter &aIter); 118 otError SetRadioRegionHandler(DBusMessageIter &aIter); 119 otError SetDnsUpstreamQueryState(DBusMessageIter &aIter); 120 otError SetNat64Cidr(DBusMessageIter &aIter); 121 122 otError GetLinkModeHandler(DBusMessageIter &aIter); 123 otError GetDeviceRoleHandler(DBusMessageIter &aIter); 124 otError GetNetworkNameHandler(DBusMessageIter &aIter); 125 otError GetPanIdHandler(DBusMessageIter &aIter); 126 otError GetExtPanIdHandler(DBusMessageIter &aIter); 127 otError GetEui64Handler(DBusMessageIter &aIter); 128 otError GetChannelHandler(DBusMessageIter &aIter); 129 otError GetNetworkKeyHandler(DBusMessageIter &aIter); 130 otError GetCcaFailureRateHandler(DBusMessageIter &aIter); 131 otError GetLinkCountersHandler(DBusMessageIter &aIter); 132 otError GetIp6CountersHandler(DBusMessageIter &aIter); 133 otError GetSupportedChannelMaskHandler(DBusMessageIter &aIter); 134 otError GetPreferredChannelMaskHandler(DBusMessageIter &aIter); 135 otError GetRloc16Handler(DBusMessageIter &aIter); 136 otError GetExtendedAddressHandler(DBusMessageIter &aIter); 137 otError GetRouterIdHandler(DBusMessageIter &aIter); 138 otError GetLeaderDataHandler(DBusMessageIter &aIter); 139 otError GetNetworkDataHandler(DBusMessageIter &aIter); 140 otError GetStableNetworkDataHandler(DBusMessageIter &aIter); 141 otError GetLocalLeaderWeightHandler(DBusMessageIter &aIter); 142 otError GetChannelMonitorSampleCountHandler(DBusMessageIter &aIter); 143 otError GetChannelMonitorAllChannelQualities(DBusMessageIter &aIter); 144 otError GetChildTableHandler(DBusMessageIter &aIter); 145 otError GetNeighborTableHandler(DBusMessageIter &aIter); 146 otError GetPartitionIDHandler(DBusMessageIter &aIter); 147 otError GetInstantRssiHandler(DBusMessageIter &aIter); 148 otError GetRadioTxPowerHandler(DBusMessageIter &aIter); 149 otError GetExternalRoutesHandler(DBusMessageIter &aIter); 150 otError GetOnMeshPrefixesHandler(DBusMessageIter &aIter); 151 otError GetActiveDatasetTlvsHandler(DBusMessageIter &aIter); 152 otError GetPendingDatasetTlvsHandler(DBusMessageIter &aIter); 153 otError GetFeatureFlagListDataHandler(DBusMessageIter &aIter); 154 otError GetRadioRegionHandler(DBusMessageIter &aIter); 155 otError GetSrpServerInfoHandler(DBusMessageIter &aIter); 156 otError GetMdnsTelemetryInfoHandler(DBusMessageIter &aIter); 157 otError GetDnssdCountersHandler(DBusMessageIter &aIter); 158 otError GetOtbrVersionHandler(DBusMessageIter &aIter); 159 otError GetOtHostVersionHandler(DBusMessageIter &aIter); 160 otError GetOtRcpVersionHandler(DBusMessageIter &aIter); 161 otError GetThreadVersionHandler(DBusMessageIter &aIter); 162 otError GetRadioSpinelMetricsHandler(DBusMessageIter &aIter); 163 otError GetRcpInterfaceMetricsHandler(DBusMessageIter &aIter); 164 otError GetUptimeHandler(DBusMessageIter &aIter); 165 otError GetTrelInfoHandler(DBusMessageIter &aIter); 166 otError GetRadioCoexMetrics(DBusMessageIter &aIter); 167 otError GetBorderRoutingCountersHandler(DBusMessageIter &aIter); 168 otError GetNat64State(DBusMessageIter &aIter); 169 otError GetNat64Cidr(DBusMessageIter &aIter); 170 otError GetNat64Mappings(DBusMessageIter &aIter); 171 otError GetNat64ProtocolCounters(DBusMessageIter &aIter); 172 otError GetNat64ErrorCounters(DBusMessageIter &aIter); 173 otError GetInfraLinkInfo(DBusMessageIter &aIter); 174 otError GetDnsUpstreamQueryState(DBusMessageIter &aIter); 175 otError GetTelemetryDataHandler(DBusMessageIter &aIter); 176 otError GetCapabilitiesHandler(DBusMessageIter &aIter); 177 178 void ReplyScanResult(DBusRequest &aRequest, otError aError, const std::vector<otActiveScanResult> &aResult); 179 void ReplyEnergyScanResult(DBusRequest &aRequest, otError aError, const std::vector<otEnergyScanResult> &aResult); 180 181 otbr::Ncp::ControllerOpenThread *mNcp; 182 std::unordered_map<std::string, PropertyHandlerType> mGetPropertyHandlers; 183 otbr::Mdns::Publisher *mPublisher; 184 }; 185 186 } // namespace DBus 187 } // namespace otbr 188 189 #endif // OTBR_DBUS_THREAD_OBJECT_HPP_ 190