1*4a64e381SAndroid Build Coastguard Worker /* 2*4a64e381SAndroid Build Coastguard Worker * Copyright (c) 2021, The OpenThread Authors. 3*4a64e381SAndroid Build Coastguard Worker * All rights reserved. 4*4a64e381SAndroid Build Coastguard Worker * 5*4a64e381SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 6*4a64e381SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met: 7*4a64e381SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 8*4a64e381SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 9*4a64e381SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 10*4a64e381SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 11*4a64e381SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 12*4a64e381SAndroid Build Coastguard Worker * 3. Neither the name of the copyright holder nor the 13*4a64e381SAndroid Build Coastguard Worker * names of its contributors may be used to endorse or promote products 14*4a64e381SAndroid Build Coastguard Worker * derived from this software without specific prior written permission. 15*4a64e381SAndroid Build Coastguard Worker * 16*4a64e381SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17*4a64e381SAndroid Build Coastguard Worker * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18*4a64e381SAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19*4a64e381SAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20*4a64e381SAndroid Build Coastguard Worker * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21*4a64e381SAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22*4a64e381SAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23*4a64e381SAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24*4a64e381SAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25*4a64e381SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26*4a64e381SAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE. 27*4a64e381SAndroid Build Coastguard Worker */ 28*4a64e381SAndroid Build Coastguard Worker 29*4a64e381SAndroid Build Coastguard Worker /** 30*4a64e381SAndroid Build Coastguard Worker * @file 31*4a64e381SAndroid Build Coastguard Worker * This file includes definition for OTBR Agent. 32*4a64e381SAndroid Build Coastguard Worker */ 33*4a64e381SAndroid Build Coastguard Worker 34*4a64e381SAndroid Build Coastguard Worker #ifndef OTBR_AGENT_APPLICATION_HPP_ 35*4a64e381SAndroid Build Coastguard Worker #define OTBR_AGENT_APPLICATION_HPP_ 36*4a64e381SAndroid Build Coastguard Worker 37*4a64e381SAndroid Build Coastguard Worker #include "openthread-br/config.h" 38*4a64e381SAndroid Build Coastguard Worker 39*4a64e381SAndroid Build Coastguard Worker #include <atomic> 40*4a64e381SAndroid Build Coastguard Worker #include <signal.h> 41*4a64e381SAndroid Build Coastguard Worker #include <stdint.h> 42*4a64e381SAndroid Build Coastguard Worker #include <vector> 43*4a64e381SAndroid Build Coastguard Worker 44*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_BORDER_AGENT 45*4a64e381SAndroid Build Coastguard Worker #include "border_agent/border_agent.hpp" 46*4a64e381SAndroid Build Coastguard Worker #endif 47*4a64e381SAndroid Build Coastguard Worker #include "ncp/rcp_host.hpp" 48*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_BACKBONE_ROUTER 49*4a64e381SAndroid Build Coastguard Worker #include "backbone_router/backbone_agent.hpp" 50*4a64e381SAndroid Build Coastguard Worker #endif 51*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_REST_SERVER 52*4a64e381SAndroid Build Coastguard Worker #include "rest/rest_web_server.hpp" 53*4a64e381SAndroid Build Coastguard Worker #endif 54*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_DBUS_SERVER 55*4a64e381SAndroid Build Coastguard Worker #include "dbus/server/dbus_agent.hpp" 56*4a64e381SAndroid Build Coastguard Worker #endif 57*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_OPENWRT 58*4a64e381SAndroid Build Coastguard Worker #include "openwrt/ubus/otubus.hpp" 59*4a64e381SAndroid Build Coastguard Worker #endif 60*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_VENDOR_SERVER 61*4a64e381SAndroid Build Coastguard Worker #include "agent/vendor.hpp" 62*4a64e381SAndroid Build Coastguard Worker #endif 63*4a64e381SAndroid Build Coastguard Worker #include "utils/infra_link_selector.hpp" 64*4a64e381SAndroid Build Coastguard Worker 65*4a64e381SAndroid Build Coastguard Worker namespace otbr { 66*4a64e381SAndroid Build Coastguard Worker 67*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_VENDOR_SERVER 68*4a64e381SAndroid Build Coastguard Worker namespace vendor { 69*4a64e381SAndroid Build Coastguard Worker 70*4a64e381SAndroid Build Coastguard Worker class VendorServer; 71*4a64e381SAndroid Build Coastguard Worker 72*4a64e381SAndroid Build Coastguard Worker } 73*4a64e381SAndroid Build Coastguard Worker #endif 74*4a64e381SAndroid Build Coastguard Worker 75*4a64e381SAndroid Build Coastguard Worker /** 76*4a64e381SAndroid Build Coastguard Worker * @addtogroup border-router-agent 77*4a64e381SAndroid Build Coastguard Worker * 78*4a64e381SAndroid Build Coastguard Worker * @brief 79*4a64e381SAndroid Build Coastguard Worker * This module includes definition for OTBR application. 80*4a64e381SAndroid Build Coastguard Worker * 81*4a64e381SAndroid Build Coastguard Worker * @{ 82*4a64e381SAndroid Build Coastguard Worker */ 83*4a64e381SAndroid Build Coastguard Worker 84*4a64e381SAndroid Build Coastguard Worker /** 85*4a64e381SAndroid Build Coastguard Worker * This class implements OTBR application management. 86*4a64e381SAndroid Build Coastguard Worker */ 87*4a64e381SAndroid Build Coastguard Worker class Application : private NonCopyable 88*4a64e381SAndroid Build Coastguard Worker { 89*4a64e381SAndroid Build Coastguard Worker public: 90*4a64e381SAndroid Build Coastguard Worker /** 91*4a64e381SAndroid Build Coastguard Worker * This constructor initializes the Application instance. 92*4a64e381SAndroid Build Coastguard Worker * 93*4a64e381SAndroid Build Coastguard Worker * @param[in] aInterfaceName Name of the Thread network interface. 94*4a64e381SAndroid Build Coastguard Worker * @param[in] aBackboneInterfaceName Name of the backbone network interface. 95*4a64e381SAndroid Build Coastguard Worker * @param[in] aRadioUrls The radio URLs (can be IEEE802.15.4 or TREL radio). 96*4a64e381SAndroid Build Coastguard Worker * @param[in] aEnableAutoAttach Whether or not to automatically attach to the saved network. 97*4a64e381SAndroid Build Coastguard Worker * @param[in] aRestListenAddress Network address to listen on. 98*4a64e381SAndroid Build Coastguard Worker * @param[in] aRestListenPort Network port to listen on. 99*4a64e381SAndroid Build Coastguard Worker */ 100*4a64e381SAndroid Build Coastguard Worker explicit Application(const std::string &aInterfaceName, 101*4a64e381SAndroid Build Coastguard Worker const std::vector<const char *> &aBackboneInterfaceNames, 102*4a64e381SAndroid Build Coastguard Worker const std::vector<const char *> &aRadioUrls, 103*4a64e381SAndroid Build Coastguard Worker bool aEnableAutoAttach, 104*4a64e381SAndroid Build Coastguard Worker const std::string &aRestListenAddress, 105*4a64e381SAndroid Build Coastguard Worker int aRestListenPort); 106*4a64e381SAndroid Build Coastguard Worker 107*4a64e381SAndroid Build Coastguard Worker /** 108*4a64e381SAndroid Build Coastguard Worker * This method initializes the Application instance. 109*4a64e381SAndroid Build Coastguard Worker */ 110*4a64e381SAndroid Build Coastguard Worker void Init(void); 111*4a64e381SAndroid Build Coastguard Worker 112*4a64e381SAndroid Build Coastguard Worker /** 113*4a64e381SAndroid Build Coastguard Worker * This method de-initializes the Application instance. 114*4a64e381SAndroid Build Coastguard Worker */ 115*4a64e381SAndroid Build Coastguard Worker void Deinit(void); 116*4a64e381SAndroid Build Coastguard Worker 117*4a64e381SAndroid Build Coastguard Worker /** 118*4a64e381SAndroid Build Coastguard Worker * This method runs the application until exit. 119*4a64e381SAndroid Build Coastguard Worker * 120*4a64e381SAndroid Build Coastguard Worker * @retval OTBR_ERROR_NONE The application exited without any error. 121*4a64e381SAndroid Build Coastguard Worker * @retval OTBR_ERROR_ERRNO The application exited with some system error. 122*4a64e381SAndroid Build Coastguard Worker */ 123*4a64e381SAndroid Build Coastguard Worker otbrError Run(void); 124*4a64e381SAndroid Build Coastguard Worker 125*4a64e381SAndroid Build Coastguard Worker /** 126*4a64e381SAndroid Build Coastguard Worker * Get the OpenThread controller object the application is using. 127*4a64e381SAndroid Build Coastguard Worker * 128*4a64e381SAndroid Build Coastguard Worker * @returns The OpenThread controller object. 129*4a64e381SAndroid Build Coastguard Worker */ GetHost(void)130*4a64e381SAndroid Build Coastguard Worker Ncp::ThreadHost &GetHost(void) { return *mHost; } 131*4a64e381SAndroid Build Coastguard Worker 132*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_MDNS 133*4a64e381SAndroid Build Coastguard Worker /** 134*4a64e381SAndroid Build Coastguard Worker * Get the Publisher object the application is using. 135*4a64e381SAndroid Build Coastguard Worker * 136*4a64e381SAndroid Build Coastguard Worker * @returns The Publisher object. 137*4a64e381SAndroid Build Coastguard Worker */ GetPublisher(void)138*4a64e381SAndroid Build Coastguard Worker Mdns::Publisher &GetPublisher(void) 139*4a64e381SAndroid Build Coastguard Worker { 140*4a64e381SAndroid Build Coastguard Worker return *mPublisher; 141*4a64e381SAndroid Build Coastguard Worker } 142*4a64e381SAndroid Build Coastguard Worker #endif 143*4a64e381SAndroid Build Coastguard Worker 144*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_BORDER_AGENT 145*4a64e381SAndroid Build Coastguard Worker /** 146*4a64e381SAndroid Build Coastguard Worker * Get the border agent the application is using. 147*4a64e381SAndroid Build Coastguard Worker * 148*4a64e381SAndroid Build Coastguard Worker * @returns The border agent. 149*4a64e381SAndroid Build Coastguard Worker */ GetBorderAgent(void)150*4a64e381SAndroid Build Coastguard Worker BorderAgent &GetBorderAgent(void) 151*4a64e381SAndroid Build Coastguard Worker { 152*4a64e381SAndroid Build Coastguard Worker return *mBorderAgent; 153*4a64e381SAndroid Build Coastguard Worker } 154*4a64e381SAndroid Build Coastguard Worker #endif 155*4a64e381SAndroid Build Coastguard Worker 156*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_BACKBONE_ROUTER 157*4a64e381SAndroid Build Coastguard Worker /** 158*4a64e381SAndroid Build Coastguard Worker * Get the backbone agent the application is using. 159*4a64e381SAndroid Build Coastguard Worker * 160*4a64e381SAndroid Build Coastguard Worker * @returns The backbone agent. 161*4a64e381SAndroid Build Coastguard Worker */ GetBackboneAgent(void)162*4a64e381SAndroid Build Coastguard Worker BackboneRouter::BackboneAgent &GetBackboneAgent(void) 163*4a64e381SAndroid Build Coastguard Worker { 164*4a64e381SAndroid Build Coastguard Worker return *mBackboneAgent; 165*4a64e381SAndroid Build Coastguard Worker } 166*4a64e381SAndroid Build Coastguard Worker #endif 167*4a64e381SAndroid Build Coastguard Worker 168*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_SRP_ADVERTISING_PROXY 169*4a64e381SAndroid Build Coastguard Worker /** 170*4a64e381SAndroid Build Coastguard Worker * Get the advertising proxy the application is using. 171*4a64e381SAndroid Build Coastguard Worker * 172*4a64e381SAndroid Build Coastguard Worker * @returns The advertising proxy. 173*4a64e381SAndroid Build Coastguard Worker */ GetAdvertisingProxy(void)174*4a64e381SAndroid Build Coastguard Worker AdvertisingProxy &GetAdvertisingProxy(void) 175*4a64e381SAndroid Build Coastguard Worker { 176*4a64e381SAndroid Build Coastguard Worker return *mAdvertisingProxy; 177*4a64e381SAndroid Build Coastguard Worker } 178*4a64e381SAndroid Build Coastguard Worker #endif 179*4a64e381SAndroid Build Coastguard Worker 180*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_DNSSD_DISCOVERY_PROXY 181*4a64e381SAndroid Build Coastguard Worker /** 182*4a64e381SAndroid Build Coastguard Worker * Get the discovery proxy the application is using. 183*4a64e381SAndroid Build Coastguard Worker * 184*4a64e381SAndroid Build Coastguard Worker * @returns The discovery proxy. 185*4a64e381SAndroid Build Coastguard Worker */ GetDiscoveryProxy(void)186*4a64e381SAndroid Build Coastguard Worker Dnssd::DiscoveryProxy &GetDiscoveryProxy(void) 187*4a64e381SAndroid Build Coastguard Worker { 188*4a64e381SAndroid Build Coastguard Worker return *mDiscoveryProxy; 189*4a64e381SAndroid Build Coastguard Worker } 190*4a64e381SAndroid Build Coastguard Worker #endif 191*4a64e381SAndroid Build Coastguard Worker 192*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_TREL 193*4a64e381SAndroid Build Coastguard Worker /** 194*4a64e381SAndroid Build Coastguard Worker * Get the TrelDnssd object the application is using. 195*4a64e381SAndroid Build Coastguard Worker * 196*4a64e381SAndroid Build Coastguard Worker * @returns The TrelDnssd. 197*4a64e381SAndroid Build Coastguard Worker */ GetTrelDnssd(void)198*4a64e381SAndroid Build Coastguard Worker TrelDnssd::TrelDnssd &GetTrelDnssd(void) 199*4a64e381SAndroid Build Coastguard Worker { 200*4a64e381SAndroid Build Coastguard Worker return *mTrelDnssd; 201*4a64e381SAndroid Build Coastguard Worker } 202*4a64e381SAndroid Build Coastguard Worker #endif 203*4a64e381SAndroid Build Coastguard Worker 204*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_OPENWRT 205*4a64e381SAndroid Build Coastguard Worker /** 206*4a64e381SAndroid Build Coastguard Worker * Get the UBus agent the application is using. 207*4a64e381SAndroid Build Coastguard Worker * 208*4a64e381SAndroid Build Coastguard Worker * @returns The UBus agent. 209*4a64e381SAndroid Build Coastguard Worker */ GetUBusAgent(void)210*4a64e381SAndroid Build Coastguard Worker ubus::UBusAgent &GetUBusAgent(void) 211*4a64e381SAndroid Build Coastguard Worker { 212*4a64e381SAndroid Build Coastguard Worker return *mUbusAgent; 213*4a64e381SAndroid Build Coastguard Worker } 214*4a64e381SAndroid Build Coastguard Worker #endif 215*4a64e381SAndroid Build Coastguard Worker 216*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_REST_SERVER 217*4a64e381SAndroid Build Coastguard Worker /** 218*4a64e381SAndroid Build Coastguard Worker * Get the rest web server the application is using. 219*4a64e381SAndroid Build Coastguard Worker * 220*4a64e381SAndroid Build Coastguard Worker * @returns The rest web server. 221*4a64e381SAndroid Build Coastguard Worker */ GetRestWebServer(void)222*4a64e381SAndroid Build Coastguard Worker rest::RestWebServer &GetRestWebServer(void) 223*4a64e381SAndroid Build Coastguard Worker { 224*4a64e381SAndroid Build Coastguard Worker return *mRestWebServer; 225*4a64e381SAndroid Build Coastguard Worker } 226*4a64e381SAndroid Build Coastguard Worker #endif 227*4a64e381SAndroid Build Coastguard Worker 228*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_DBUS_SERVER 229*4a64e381SAndroid Build Coastguard Worker /** 230*4a64e381SAndroid Build Coastguard Worker * Get the DBus agent the application is using. 231*4a64e381SAndroid Build Coastguard Worker * 232*4a64e381SAndroid Build Coastguard Worker * @returns The DBus agent. 233*4a64e381SAndroid Build Coastguard Worker */ GetDBusAgent(void)234*4a64e381SAndroid Build Coastguard Worker DBus::DBusAgent &GetDBusAgent(void) 235*4a64e381SAndroid Build Coastguard Worker { 236*4a64e381SAndroid Build Coastguard Worker return *mDBusAgent; 237*4a64e381SAndroid Build Coastguard Worker } 238*4a64e381SAndroid Build Coastguard Worker #endif 239*4a64e381SAndroid Build Coastguard Worker 240*4a64e381SAndroid Build Coastguard Worker /** 241*4a64e381SAndroid Build Coastguard Worker * This method handles mDNS publisher's state changes. 242*4a64e381SAndroid Build Coastguard Worker * 243*4a64e381SAndroid Build Coastguard Worker * @param[in] aState The state of mDNS publisher. 244*4a64e381SAndroid Build Coastguard Worker */ 245*4a64e381SAndroid Build Coastguard Worker void HandleMdnsState(Mdns::Publisher::State aState); 246*4a64e381SAndroid Build Coastguard Worker 247*4a64e381SAndroid Build Coastguard Worker private: 248*4a64e381SAndroid Build Coastguard Worker // Default poll timeout. 249*4a64e381SAndroid Build Coastguard Worker static const struct timeval kPollTimeout; 250*4a64e381SAndroid Build Coastguard Worker 251*4a64e381SAndroid Build Coastguard Worker static void HandleSignal(int aSignal); 252*4a64e381SAndroid Build Coastguard Worker 253*4a64e381SAndroid Build Coastguard Worker void CreateRcpMode(const std::string &aRestListenAddress, int aRestListenPort); 254*4a64e381SAndroid Build Coastguard Worker void InitRcpMode(void); 255*4a64e381SAndroid Build Coastguard Worker void DeinitRcpMode(void); 256*4a64e381SAndroid Build Coastguard Worker 257*4a64e381SAndroid Build Coastguard Worker void InitNcpMode(void); 258*4a64e381SAndroid Build Coastguard Worker void DeinitNcpMode(void); 259*4a64e381SAndroid Build Coastguard Worker 260*4a64e381SAndroid Build Coastguard Worker std::string mInterfaceName; 261*4a64e381SAndroid Build Coastguard Worker #if __linux__ 262*4a64e381SAndroid Build Coastguard Worker otbr::Utils::InfraLinkSelector mInfraLinkSelector; 263*4a64e381SAndroid Build Coastguard Worker #endif 264*4a64e381SAndroid Build Coastguard Worker const char *mBackboneInterfaceName; 265*4a64e381SAndroid Build Coastguard Worker std::unique_ptr<Ncp::ThreadHost> mHost; 266*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_MDNS 267*4a64e381SAndroid Build Coastguard Worker std::unique_ptr<Mdns::Publisher> mPublisher; 268*4a64e381SAndroid Build Coastguard Worker #endif 269*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_BORDER_AGENT 270*4a64e381SAndroid Build Coastguard Worker std::unique_ptr<BorderAgent> mBorderAgent; 271*4a64e381SAndroid Build Coastguard Worker #endif 272*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_BACKBONE_ROUTER 273*4a64e381SAndroid Build Coastguard Worker std::unique_ptr<BackboneRouter::BackboneAgent> mBackboneAgent; 274*4a64e381SAndroid Build Coastguard Worker #endif 275*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_SRP_ADVERTISING_PROXY 276*4a64e381SAndroid Build Coastguard Worker std::unique_ptr<AdvertisingProxy> mAdvertisingProxy; 277*4a64e381SAndroid Build Coastguard Worker #endif 278*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_DNSSD_DISCOVERY_PROXY 279*4a64e381SAndroid Build Coastguard Worker std::unique_ptr<Dnssd::DiscoveryProxy> mDiscoveryProxy; 280*4a64e381SAndroid Build Coastguard Worker #endif 281*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_TREL 282*4a64e381SAndroid Build Coastguard Worker std::unique_ptr<TrelDnssd::TrelDnssd> mTrelDnssd; 283*4a64e381SAndroid Build Coastguard Worker #endif 284*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_OPENWRT 285*4a64e381SAndroid Build Coastguard Worker std::unique_ptr<ubus::UBusAgent> mUbusAgent; 286*4a64e381SAndroid Build Coastguard Worker #endif 287*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_REST_SERVER 288*4a64e381SAndroid Build Coastguard Worker std::unique_ptr<rest::RestWebServer> mRestWebServer; 289*4a64e381SAndroid Build Coastguard Worker #endif 290*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_DBUS_SERVER 291*4a64e381SAndroid Build Coastguard Worker std::unique_ptr<DBus::DBusAgent> mDBusAgent; 292*4a64e381SAndroid Build Coastguard Worker #endif 293*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_VENDOR_SERVER 294*4a64e381SAndroid Build Coastguard Worker std::shared_ptr<vendor::VendorServer> mVendorServer; 295*4a64e381SAndroid Build Coastguard Worker #endif 296*4a64e381SAndroid Build Coastguard Worker 297*4a64e381SAndroid Build Coastguard Worker static std::atomic_bool sShouldTerminate; 298*4a64e381SAndroid Build Coastguard Worker }; 299*4a64e381SAndroid Build Coastguard Worker 300*4a64e381SAndroid Build Coastguard Worker /** 301*4a64e381SAndroid Build Coastguard Worker * @} 302*4a64e381SAndroid Build Coastguard Worker */ 303*4a64e381SAndroid Build Coastguard Worker 304*4a64e381SAndroid Build Coastguard Worker } // namespace otbr 305*4a64e381SAndroid Build Coastguard Worker 306*4a64e381SAndroid Build Coastguard Worker #endif // OTBR_AGENT_APPLICATION_HPP_ 307