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_RCP_HPP_ 35 #define OTBR_DBUS_THREAD_OBJECT_RCP_HPP_ 36 37 #include "openthread-br/config.h" 38 39 #include <string> 40 41 #include <openthread/link.h> 42 43 #include "border_agent/border_agent.hpp" 44 #include "dbus/server/dbus_object.hpp" 45 #include "mdns/mdns.hpp" 46 #include "ncp/rcp_host.hpp" 47 48 namespace otbr { 49 namespace DBus { 50 51 /** 52 * @addtogroup border-router-dbus-server 53 * 54 * @brief 55 * This module includes the <a href="dbus-api.html">dbus server api</a>. 56 * 57 * @{ 58 */ 59 60 class DBusThreadObjectRcp : public DBusObject 61 { 62 public: 63 /** 64 * This constructor of dbus thread object. 65 * 66 * @param[in] aConnection The dbus connection. 67 * @param[in] aInterfaceName The dbus interface name. 68 * @param[in] aHost The Thread controller 69 * @param[in] aPublisher The Mdns::Publisher 70 * @param[in] aBorderAgent The Border Agent 71 */ 72 DBusThreadObjectRcp(DBusConnection &aConnection, 73 const std::string &aInterfaceName, 74 otbr::Ncp::RcpHost &aHost, 75 Mdns::Publisher *aPublisher, 76 otbr::BorderAgent &aBorderAgent); 77 78 otbrError Init(void) override; 79 80 void RegisterGetPropertyHandler(const std::string &aInterfaceName, 81 const std::string &aPropertyName, 82 const PropertyHandlerType &aHandler) override; 83 84 private: 85 void DeviceRoleHandler(otDeviceRole aDeviceRole); 86 void Dhcp6PdStateHandler(otBorderRoutingDhcp6PdState aDhcp6PdState); 87 void ActiveDatasetChangeHandler(const otOperationalDatasetTlvs &aDatasetTlvs); 88 void NcpResetHandler(void); 89 90 void ScanHandler(DBusRequest &aRequest); 91 void EnergyScanHandler(DBusRequest &aRequest); 92 void AttachHandler(DBusRequest &aRequest); 93 void AttachAllNodesToHandler(DBusRequest &aRequest); 94 void DetachHandler(DBusRequest &aRequest); 95 void LeaveHandler(DBusRequest &aRequest); 96 void FactoryResetHandler(DBusRequest &aRequest); 97 void ResetHandler(DBusRequest &aRequest); 98 void JoinerStartHandler(DBusRequest &aRequest); 99 void JoinerStopHandler(DBusRequest &aRequest); 100 void PermitUnsecureJoinHandler(DBusRequest &aRequest); 101 void AddOnMeshPrefixHandler(DBusRequest &aRequest); 102 void RemoveOnMeshPrefixHandler(DBusRequest &aRequest); 103 void AddExternalRouteHandler(DBusRequest &aRequest); 104 void RemoveExternalRouteHandler(DBusRequest &aRequest); 105 void UpdateMeshCopTxtHandler(DBusRequest &aRequest); 106 void GetPropertiesHandler(DBusRequest &aRequest); 107 void LeaveNetworkHandler(DBusRequest &aRequest); 108 void SetNat64Enabled(DBusRequest &aRequest); 109 void ActivateEphemeralKeyModeHandler(DBusRequest &aRequest); 110 void DeactivateEphemeralKeyModeHandler(DBusRequest &aRequest); 111 112 void IntrospectHandler(DBusRequest &aRequest); 113 114 otError SetMeshLocalPrefixHandler(DBusMessageIter &aIter); 115 otError SetLegacyUlaPrefixHandler(DBusMessageIter &aIter); 116 otError SetLinkModeHandler(DBusMessageIter &aIter); 117 otError SetActiveDatasetTlvsHandler(DBusMessageIter &aIter); 118 otError SetFeatureFlagListDataHandler(DBusMessageIter &aIter); 119 otError SetRadioRegionHandler(DBusMessageIter &aIter); 120 otError SetDnsUpstreamQueryState(DBusMessageIter &aIter); 121 otError SetNat64Cidr(DBusMessageIter &aIter); 122 otError SetEphemeralKeyEnabled(DBusMessageIter &aIter); 123 124 otError GetLinkModeHandler(DBusMessageIter &aIter); 125 otError GetDeviceRoleHandler(DBusMessageIter &aIter); 126 otError GetNetworkNameHandler(DBusMessageIter &aIter); 127 otError GetPanIdHandler(DBusMessageIter &aIter); 128 otError GetExtPanIdHandler(DBusMessageIter &aIter); 129 otError GetEui64Handler(DBusMessageIter &aIter); 130 otError GetChannelHandler(DBusMessageIter &aIter); 131 otError GetNetworkKeyHandler(DBusMessageIter &aIter); 132 otError GetCcaFailureRateHandler(DBusMessageIter &aIter); 133 otError GetLinkCountersHandler(DBusMessageIter &aIter); 134 otError GetIp6CountersHandler(DBusMessageIter &aIter); 135 otError GetSupportedChannelMaskHandler(DBusMessageIter &aIter); 136 otError GetPreferredChannelMaskHandler(DBusMessageIter &aIter); 137 otError GetRloc16Handler(DBusMessageIter &aIter); 138 otError GetExtendedAddressHandler(DBusMessageIter &aIter); 139 otError GetRouterIdHandler(DBusMessageIter &aIter); 140 otError GetLeaderDataHandler(DBusMessageIter &aIter); 141 otError GetNetworkDataHandler(DBusMessageIter &aIter); 142 otError GetStableNetworkDataHandler(DBusMessageIter &aIter); 143 otError GetLocalLeaderWeightHandler(DBusMessageIter &aIter); 144 otError GetChannelMonitorSampleCountHandler(DBusMessageIter &aIter); 145 otError GetChannelMonitorAllChannelQualities(DBusMessageIter &aIter); 146 otError GetChildTableHandler(DBusMessageIter &aIter); 147 otError GetNeighborTableHandler(DBusMessageIter &aIter); 148 otError GetPartitionIDHandler(DBusMessageIter &aIter); 149 otError GetInstantRssiHandler(DBusMessageIter &aIter); 150 otError GetRadioTxPowerHandler(DBusMessageIter &aIter); 151 otError GetExternalRoutesHandler(DBusMessageIter &aIter); 152 otError GetOnMeshPrefixesHandler(DBusMessageIter &aIter); 153 otError GetActiveDatasetTlvsHandler(DBusMessageIter &aIter); 154 otError GetPendingDatasetTlvsHandler(DBusMessageIter &aIter); 155 otError GetFeatureFlagListDataHandler(DBusMessageIter &aIter); 156 otError GetRadioRegionHandler(DBusMessageIter &aIter); 157 otError GetSrpServerInfoHandler(DBusMessageIter &aIter); 158 otError GetMdnsTelemetryInfoHandler(DBusMessageIter &aIter); 159 otError GetDnssdCountersHandler(DBusMessageIter &aIter); 160 otError GetOtbrVersionHandler(DBusMessageIter &aIter); 161 otError GetOtHostVersionHandler(DBusMessageIter &aIter); 162 otError GetOtRcpVersionHandler(DBusMessageIter &aIter); 163 otError GetThreadVersionHandler(DBusMessageIter &aIter); 164 otError GetRadioSpinelMetricsHandler(DBusMessageIter &aIter); 165 otError GetRcpInterfaceMetricsHandler(DBusMessageIter &aIter); 166 otError GetUptimeHandler(DBusMessageIter &aIter); 167 otError GetTrelInfoHandler(DBusMessageIter &aIter); 168 otError GetRadioCoexMetrics(DBusMessageIter &aIter); 169 otError GetBorderRoutingCountersHandler(DBusMessageIter &aIter); 170 otError GetNat64State(DBusMessageIter &aIter); 171 otError GetNat64Cidr(DBusMessageIter &aIter); 172 otError GetNat64Mappings(DBusMessageIter &aIter); 173 otError GetNat64ProtocolCounters(DBusMessageIter &aIter); 174 otError GetNat64ErrorCounters(DBusMessageIter &aIter); 175 otError GetEphemeralKeyEnabled(DBusMessageIter &aIter); 176 otError GetInfraLinkInfo(DBusMessageIter &aIter); 177 otError GetDnsUpstreamQueryState(DBusMessageIter &aIter); 178 otError GetTelemetryDataHandler(DBusMessageIter &aIter); 179 otError GetCapabilitiesHandler(DBusMessageIter &aIter); 180 181 void ReplyScanResult(DBusRequest &aRequest, otError aError, const std::vector<otActiveScanResult> &aResult); 182 void ReplyEnergyScanResult(DBusRequest &aRequest, otError aError, const std::vector<otEnergyScanResult> &aResult); 183 184 otbr::Ncp::RcpHost &mHost; 185 std::unordered_map<std::string, PropertyHandlerType> mGetPropertyHandlers; 186 otbr::Mdns::Publisher *mPublisher; 187 otbr::BorderAgent &mBorderAgent; 188 }; 189 190 /** 191 * @} 192 */ 193 194 } // namespace DBus 195 } // namespace otbr 196 197 #endif // OTBR_DBUS_THREAD_OBJECT_RCP_HPP_ 198