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 * The file implements the OTBR Agent.
32*4a64e381SAndroid Build Coastguard Worker */
33*4a64e381SAndroid Build Coastguard Worker
34*4a64e381SAndroid Build Coastguard Worker #define OTBR_LOG_TAG "APP"
35*4a64e381SAndroid Build Coastguard Worker
36*4a64e381SAndroid Build Coastguard Worker #ifdef HAVE_LIBSYSTEMD
37*4a64e381SAndroid Build Coastguard Worker #include <systemd/sd-daemon.h>
38*4a64e381SAndroid Build Coastguard Worker #endif
39*4a64e381SAndroid Build Coastguard Worker
40*4a64e381SAndroid Build Coastguard Worker #include "agent/application.hpp"
41*4a64e381SAndroid Build Coastguard Worker #include "common/code_utils.hpp"
42*4a64e381SAndroid Build Coastguard Worker #include "common/mainloop_manager.hpp"
43*4a64e381SAndroid Build Coastguard Worker #include "utils/infra_link_selector.hpp"
44*4a64e381SAndroid Build Coastguard Worker
45*4a64e381SAndroid Build Coastguard Worker namespace otbr {
46*4a64e381SAndroid Build Coastguard Worker
47*4a64e381SAndroid Build Coastguard Worker std::atomic_bool Application::sShouldTerminate(false);
48*4a64e381SAndroid Build Coastguard Worker const struct timeval Application::kPollTimeout = {10, 0};
49*4a64e381SAndroid Build Coastguard Worker
Application(const std::string & aInterfaceName,const std::vector<const char * > & aBackboneInterfaceNames,const std::vector<const char * > & aRadioUrls,bool aEnableAutoAttach,const std::string & aRestListenAddress,int aRestListenPort)50*4a64e381SAndroid Build Coastguard Worker Application::Application(const std::string &aInterfaceName,
51*4a64e381SAndroid Build Coastguard Worker const std::vector<const char *> &aBackboneInterfaceNames,
52*4a64e381SAndroid Build Coastguard Worker const std::vector<const char *> &aRadioUrls,
53*4a64e381SAndroid Build Coastguard Worker bool aEnableAutoAttach,
54*4a64e381SAndroid Build Coastguard Worker const std::string &aRestListenAddress,
55*4a64e381SAndroid Build Coastguard Worker int aRestListenPort)
56*4a64e381SAndroid Build Coastguard Worker : mInterfaceName(aInterfaceName)
57*4a64e381SAndroid Build Coastguard Worker #if __linux__
58*4a64e381SAndroid Build Coastguard Worker , mInfraLinkSelector(aBackboneInterfaceNames)
59*4a64e381SAndroid Build Coastguard Worker , mBackboneInterfaceName(mInfraLinkSelector.Select())
60*4a64e381SAndroid Build Coastguard Worker #else
61*4a64e381SAndroid Build Coastguard Worker , mBackboneInterfaceName(aBackboneInterfaceNames.empty() ? "" : aBackboneInterfaceNames.front())
62*4a64e381SAndroid Build Coastguard Worker #endif
63*4a64e381SAndroid Build Coastguard Worker , mHost(Ncp::ThreadHost::Create(mInterfaceName.c_str(),
64*4a64e381SAndroid Build Coastguard Worker aRadioUrls,
65*4a64e381SAndroid Build Coastguard Worker mBackboneInterfaceName,
66*4a64e381SAndroid Build Coastguard Worker /* aDryRun */ false,
67*4a64e381SAndroid Build Coastguard Worker aEnableAutoAttach))
68*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_MDNS
69*4a64e381SAndroid Build Coastguard Worker , mPublisher(Mdns::Publisher::Create([this](Mdns::Publisher::State aState) { this->HandleMdnsState(aState); }))
70*4a64e381SAndroid Build Coastguard Worker #endif
71*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_DBUS_SERVER && OTBR_ENABLE_BORDER_AGENT
72*4a64e381SAndroid Build Coastguard Worker , mDBusAgent(MakeUnique<DBus::DBusAgent>(*mHost, *mPublisher))
73*4a64e381SAndroid Build Coastguard Worker #endif
74*4a64e381SAndroid Build Coastguard Worker {
75*4a64e381SAndroid Build Coastguard Worker if (mHost->GetCoprocessorType() == OT_COPROCESSOR_RCP)
76*4a64e381SAndroid Build Coastguard Worker {
77*4a64e381SAndroid Build Coastguard Worker CreateRcpMode(aRestListenAddress, aRestListenPort);
78*4a64e381SAndroid Build Coastguard Worker }
79*4a64e381SAndroid Build Coastguard Worker }
80*4a64e381SAndroid Build Coastguard Worker
Init(void)81*4a64e381SAndroid Build Coastguard Worker void Application::Init(void)
82*4a64e381SAndroid Build Coastguard Worker {
83*4a64e381SAndroid Build Coastguard Worker mHost->Init();
84*4a64e381SAndroid Build Coastguard Worker
85*4a64e381SAndroid Build Coastguard Worker switch (mHost->GetCoprocessorType())
86*4a64e381SAndroid Build Coastguard Worker {
87*4a64e381SAndroid Build Coastguard Worker case OT_COPROCESSOR_RCP:
88*4a64e381SAndroid Build Coastguard Worker InitRcpMode();
89*4a64e381SAndroid Build Coastguard Worker break;
90*4a64e381SAndroid Build Coastguard Worker case OT_COPROCESSOR_NCP:
91*4a64e381SAndroid Build Coastguard Worker InitNcpMode();
92*4a64e381SAndroid Build Coastguard Worker break;
93*4a64e381SAndroid Build Coastguard Worker default:
94*4a64e381SAndroid Build Coastguard Worker DieNow("Unknown coprocessor type!");
95*4a64e381SAndroid Build Coastguard Worker break;
96*4a64e381SAndroid Build Coastguard Worker }
97*4a64e381SAndroid Build Coastguard Worker
98*4a64e381SAndroid Build Coastguard Worker otbrLogInfo("Co-processor version: %s", mHost->GetCoprocessorVersion());
99*4a64e381SAndroid Build Coastguard Worker }
100*4a64e381SAndroid Build Coastguard Worker
Deinit(void)101*4a64e381SAndroid Build Coastguard Worker void Application::Deinit(void)
102*4a64e381SAndroid Build Coastguard Worker {
103*4a64e381SAndroid Build Coastguard Worker switch (mHost->GetCoprocessorType())
104*4a64e381SAndroid Build Coastguard Worker {
105*4a64e381SAndroid Build Coastguard Worker case OT_COPROCESSOR_RCP:
106*4a64e381SAndroid Build Coastguard Worker DeinitRcpMode();
107*4a64e381SAndroid Build Coastguard Worker break;
108*4a64e381SAndroid Build Coastguard Worker case OT_COPROCESSOR_NCP:
109*4a64e381SAndroid Build Coastguard Worker DeinitNcpMode();
110*4a64e381SAndroid Build Coastguard Worker break;
111*4a64e381SAndroid Build Coastguard Worker default:
112*4a64e381SAndroid Build Coastguard Worker DieNow("Unknown coprocessor type!");
113*4a64e381SAndroid Build Coastguard Worker break;
114*4a64e381SAndroid Build Coastguard Worker }
115*4a64e381SAndroid Build Coastguard Worker
116*4a64e381SAndroid Build Coastguard Worker mHost->Deinit();
117*4a64e381SAndroid Build Coastguard Worker }
118*4a64e381SAndroid Build Coastguard Worker
Run(void)119*4a64e381SAndroid Build Coastguard Worker otbrError Application::Run(void)
120*4a64e381SAndroid Build Coastguard Worker {
121*4a64e381SAndroid Build Coastguard Worker otbrError error = OTBR_ERROR_NONE;
122*4a64e381SAndroid Build Coastguard Worker
123*4a64e381SAndroid Build Coastguard Worker otbrLogInfo("Thread Border Router started on AIL %s.", mBackboneInterfaceName);
124*4a64e381SAndroid Build Coastguard Worker
125*4a64e381SAndroid Build Coastguard Worker #ifdef HAVE_LIBSYSTEMD
126*4a64e381SAndroid Build Coastguard Worker if (getenv("SYSTEMD_EXEC_PID") != nullptr)
127*4a64e381SAndroid Build Coastguard Worker {
128*4a64e381SAndroid Build Coastguard Worker otbrLogInfo("Notify systemd the service is ready.");
129*4a64e381SAndroid Build Coastguard Worker
130*4a64e381SAndroid Build Coastguard Worker // Ignored return value as systemd recommends.
131*4a64e381SAndroid Build Coastguard Worker // See https://www.freedesktop.org/software/systemd/man/sd_notify.html
132*4a64e381SAndroid Build Coastguard Worker sd_notify(0, "READY=1");
133*4a64e381SAndroid Build Coastguard Worker }
134*4a64e381SAndroid Build Coastguard Worker #endif
135*4a64e381SAndroid Build Coastguard Worker
136*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_NOTIFY_UPSTART
137*4a64e381SAndroid Build Coastguard Worker if (getenv("UPSTART_JOB") != nullptr)
138*4a64e381SAndroid Build Coastguard Worker {
139*4a64e381SAndroid Build Coastguard Worker otbrLogInfo("Notify Upstart the service is ready.");
140*4a64e381SAndroid Build Coastguard Worker if (raise(SIGSTOP))
141*4a64e381SAndroid Build Coastguard Worker {
142*4a64e381SAndroid Build Coastguard Worker otbrLogWarning("Failed to notify Upstart.");
143*4a64e381SAndroid Build Coastguard Worker }
144*4a64e381SAndroid Build Coastguard Worker }
145*4a64e381SAndroid Build Coastguard Worker #endif
146*4a64e381SAndroid Build Coastguard Worker
147*4a64e381SAndroid Build Coastguard Worker // allow quitting elegantly
148*4a64e381SAndroid Build Coastguard Worker signal(SIGTERM, HandleSignal);
149*4a64e381SAndroid Build Coastguard Worker
150*4a64e381SAndroid Build Coastguard Worker while (!sShouldTerminate)
151*4a64e381SAndroid Build Coastguard Worker {
152*4a64e381SAndroid Build Coastguard Worker otbr::MainloopContext mainloop;
153*4a64e381SAndroid Build Coastguard Worker int rval;
154*4a64e381SAndroid Build Coastguard Worker
155*4a64e381SAndroid Build Coastguard Worker mainloop.mMaxFd = -1;
156*4a64e381SAndroid Build Coastguard Worker mainloop.mTimeout = kPollTimeout;
157*4a64e381SAndroid Build Coastguard Worker
158*4a64e381SAndroid Build Coastguard Worker FD_ZERO(&mainloop.mReadFdSet);
159*4a64e381SAndroid Build Coastguard Worker FD_ZERO(&mainloop.mWriteFdSet);
160*4a64e381SAndroid Build Coastguard Worker FD_ZERO(&mainloop.mErrorFdSet);
161*4a64e381SAndroid Build Coastguard Worker
162*4a64e381SAndroid Build Coastguard Worker MainloopManager::GetInstance().Update(mainloop);
163*4a64e381SAndroid Build Coastguard Worker
164*4a64e381SAndroid Build Coastguard Worker rval = select(mainloop.mMaxFd + 1, &mainloop.mReadFdSet, &mainloop.mWriteFdSet, &mainloop.mErrorFdSet,
165*4a64e381SAndroid Build Coastguard Worker &mainloop.mTimeout);
166*4a64e381SAndroid Build Coastguard Worker
167*4a64e381SAndroid Build Coastguard Worker if (rval >= 0)
168*4a64e381SAndroid Build Coastguard Worker {
169*4a64e381SAndroid Build Coastguard Worker MainloopManager::GetInstance().Process(mainloop);
170*4a64e381SAndroid Build Coastguard Worker
171*4a64e381SAndroid Build Coastguard Worker #if __linux__
172*4a64e381SAndroid Build Coastguard Worker {
173*4a64e381SAndroid Build Coastguard Worker const char *newInfraLink = mInfraLinkSelector.Select();
174*4a64e381SAndroid Build Coastguard Worker
175*4a64e381SAndroid Build Coastguard Worker if (mBackboneInterfaceName != newInfraLink)
176*4a64e381SAndroid Build Coastguard Worker {
177*4a64e381SAndroid Build Coastguard Worker error = OTBR_ERROR_INFRA_LINK_CHANGED;
178*4a64e381SAndroid Build Coastguard Worker break;
179*4a64e381SAndroid Build Coastguard Worker }
180*4a64e381SAndroid Build Coastguard Worker }
181*4a64e381SAndroid Build Coastguard Worker #endif
182*4a64e381SAndroid Build Coastguard Worker }
183*4a64e381SAndroid Build Coastguard Worker else if (errno != EINTR)
184*4a64e381SAndroid Build Coastguard Worker {
185*4a64e381SAndroid Build Coastguard Worker error = OTBR_ERROR_ERRNO;
186*4a64e381SAndroid Build Coastguard Worker otbrLogErr("select() failed: %s", strerror(errno));
187*4a64e381SAndroid Build Coastguard Worker break;
188*4a64e381SAndroid Build Coastguard Worker }
189*4a64e381SAndroid Build Coastguard Worker }
190*4a64e381SAndroid Build Coastguard Worker
191*4a64e381SAndroid Build Coastguard Worker return error;
192*4a64e381SAndroid Build Coastguard Worker }
193*4a64e381SAndroid Build Coastguard Worker
HandleMdnsState(Mdns::Publisher::State aState)194*4a64e381SAndroid Build Coastguard Worker void Application::HandleMdnsState(Mdns::Publisher::State aState)
195*4a64e381SAndroid Build Coastguard Worker {
196*4a64e381SAndroid Build Coastguard Worker OTBR_UNUSED_VARIABLE(aState);
197*4a64e381SAndroid Build Coastguard Worker
198*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_BORDER_AGENT
199*4a64e381SAndroid Build Coastguard Worker mBorderAgent->HandleMdnsState(aState);
200*4a64e381SAndroid Build Coastguard Worker #endif
201*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_SRP_ADVERTISING_PROXY
202*4a64e381SAndroid Build Coastguard Worker mAdvertisingProxy->HandleMdnsState(aState);
203*4a64e381SAndroid Build Coastguard Worker #endif
204*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_DNSSD_DISCOVERY_PROXY
205*4a64e381SAndroid Build Coastguard Worker mDiscoveryProxy->HandleMdnsState(aState);
206*4a64e381SAndroid Build Coastguard Worker #endif
207*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_TREL
208*4a64e381SAndroid Build Coastguard Worker mTrelDnssd->HandleMdnsState(aState);
209*4a64e381SAndroid Build Coastguard Worker #endif
210*4a64e381SAndroid Build Coastguard Worker }
211*4a64e381SAndroid Build Coastguard Worker
HandleSignal(int aSignal)212*4a64e381SAndroid Build Coastguard Worker void Application::HandleSignal(int aSignal)
213*4a64e381SAndroid Build Coastguard Worker {
214*4a64e381SAndroid Build Coastguard Worker sShouldTerminate = true;
215*4a64e381SAndroid Build Coastguard Worker signal(aSignal, SIG_DFL);
216*4a64e381SAndroid Build Coastguard Worker }
217*4a64e381SAndroid Build Coastguard Worker
CreateRcpMode(const std::string & aRestListenAddress,int aRestListenPort)218*4a64e381SAndroid Build Coastguard Worker void Application::CreateRcpMode(const std::string &aRestListenAddress, int aRestListenPort)
219*4a64e381SAndroid Build Coastguard Worker {
220*4a64e381SAndroid Build Coastguard Worker otbr::Ncp::RcpHost &rcpHost = static_cast<otbr::Ncp::RcpHost &>(*mHost);
221*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_BORDER_AGENT
222*4a64e381SAndroid Build Coastguard Worker mBorderAgent = MakeUnique<BorderAgent>(rcpHost, *mPublisher);
223*4a64e381SAndroid Build Coastguard Worker #endif
224*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_BACKBONE_ROUTER
225*4a64e381SAndroid Build Coastguard Worker mBackboneAgent = MakeUnique<BackboneRouter::BackboneAgent>(rcpHost, mInterfaceName, mBackboneInterfaceName);
226*4a64e381SAndroid Build Coastguard Worker #endif
227*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_SRP_ADVERTISING_PROXY
228*4a64e381SAndroid Build Coastguard Worker mAdvertisingProxy = MakeUnique<AdvertisingProxy>(rcpHost, *mPublisher);
229*4a64e381SAndroid Build Coastguard Worker #endif
230*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_DNSSD_DISCOVERY_PROXY
231*4a64e381SAndroid Build Coastguard Worker mDiscoveryProxy = MakeUnique<Dnssd::DiscoveryProxy>(rcpHost, *mPublisher);
232*4a64e381SAndroid Build Coastguard Worker #endif
233*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_TREL
234*4a64e381SAndroid Build Coastguard Worker mTrelDnssd = MakeUnique<TrelDnssd::TrelDnssd>(rcpHost, *mPublisher);
235*4a64e381SAndroid Build Coastguard Worker #endif
236*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_OPENWRT
237*4a64e381SAndroid Build Coastguard Worker mUbusAgent = MakeUnique<ubus::UBusAgent>(rcpHost);
238*4a64e381SAndroid Build Coastguard Worker #endif
239*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_REST_SERVER
240*4a64e381SAndroid Build Coastguard Worker mRestWebServer = MakeUnique<rest::RestWebServer>(rcpHost, aRestListenAddress, aRestListenPort);
241*4a64e381SAndroid Build Coastguard Worker #endif
242*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_VENDOR_SERVER
243*4a64e381SAndroid Build Coastguard Worker mVendorServer = vendor::VendorServer::newInstance(*this);
244*4a64e381SAndroid Build Coastguard Worker #endif
245*4a64e381SAndroid Build Coastguard Worker
246*4a64e381SAndroid Build Coastguard Worker OT_UNUSED_VARIABLE(aRestListenAddress);
247*4a64e381SAndroid Build Coastguard Worker OT_UNUSED_VARIABLE(aRestListenPort);
248*4a64e381SAndroid Build Coastguard Worker }
249*4a64e381SAndroid Build Coastguard Worker
InitRcpMode(void)250*4a64e381SAndroid Build Coastguard Worker void Application::InitRcpMode(void)
251*4a64e381SAndroid Build Coastguard Worker {
252*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_MDNS
253*4a64e381SAndroid Build Coastguard Worker mPublisher->Start();
254*4a64e381SAndroid Build Coastguard Worker #endif
255*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_BORDER_AGENT
256*4a64e381SAndroid Build Coastguard Worker // This is for delaying publishing the MeshCoP service until the correct
257*4a64e381SAndroid Build Coastguard Worker // vendor name and OUI etc. are correctly set by BorderAgent::SetMeshCopServiceValues()
258*4a64e381SAndroid Build Coastguard Worker #if OTBR_STOP_BORDER_AGENT_ON_INIT
259*4a64e381SAndroid Build Coastguard Worker mBorderAgent->SetEnabled(false);
260*4a64e381SAndroid Build Coastguard Worker #else
261*4a64e381SAndroid Build Coastguard Worker mBorderAgent->SetEnabled(true);
262*4a64e381SAndroid Build Coastguard Worker #endif
263*4a64e381SAndroid Build Coastguard Worker #endif
264*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_BACKBONE_ROUTER
265*4a64e381SAndroid Build Coastguard Worker mBackboneAgent->Init();
266*4a64e381SAndroid Build Coastguard Worker #endif
267*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_SRP_ADVERTISING_PROXY
268*4a64e381SAndroid Build Coastguard Worker mAdvertisingProxy->SetEnabled(true);
269*4a64e381SAndroid Build Coastguard Worker #endif
270*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_DNSSD_DISCOVERY_PROXY
271*4a64e381SAndroid Build Coastguard Worker mDiscoveryProxy->SetEnabled(true);
272*4a64e381SAndroid Build Coastguard Worker #endif
273*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_OPENWRT
274*4a64e381SAndroid Build Coastguard Worker mUbusAgent->Init();
275*4a64e381SAndroid Build Coastguard Worker #endif
276*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_REST_SERVER
277*4a64e381SAndroid Build Coastguard Worker mRestWebServer->Init();
278*4a64e381SAndroid Build Coastguard Worker #endif
279*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_DBUS_SERVER
280*4a64e381SAndroid Build Coastguard Worker mDBusAgent->Init(*mBorderAgent);
281*4a64e381SAndroid Build Coastguard Worker #endif
282*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_VENDOR_SERVER
283*4a64e381SAndroid Build Coastguard Worker mVendorServer->Init();
284*4a64e381SAndroid Build Coastguard Worker #endif
285*4a64e381SAndroid Build Coastguard Worker }
286*4a64e381SAndroid Build Coastguard Worker
DeinitRcpMode(void)287*4a64e381SAndroid Build Coastguard Worker void Application::DeinitRcpMode(void)
288*4a64e381SAndroid Build Coastguard Worker {
289*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_SRP_ADVERTISING_PROXY
290*4a64e381SAndroid Build Coastguard Worker mAdvertisingProxy->SetEnabled(false);
291*4a64e381SAndroid Build Coastguard Worker #endif
292*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_DNSSD_DISCOVERY_PROXY
293*4a64e381SAndroid Build Coastguard Worker mDiscoveryProxy->SetEnabled(false);
294*4a64e381SAndroid Build Coastguard Worker #endif
295*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_BORDER_AGENT
296*4a64e381SAndroid Build Coastguard Worker mBorderAgent->SetEnabled(false);
297*4a64e381SAndroid Build Coastguard Worker #endif
298*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_MDNS
299*4a64e381SAndroid Build Coastguard Worker mPublisher->Stop();
300*4a64e381SAndroid Build Coastguard Worker #endif
301*4a64e381SAndroid Build Coastguard Worker }
302*4a64e381SAndroid Build Coastguard Worker
InitNcpMode(void)303*4a64e381SAndroid Build Coastguard Worker void Application::InitNcpMode(void)
304*4a64e381SAndroid Build Coastguard Worker {
305*4a64e381SAndroid Build Coastguard Worker #if OTBR_ENABLE_DBUS_SERVER
306*4a64e381SAndroid Build Coastguard Worker mDBusAgent->Init(*mBorderAgent);
307*4a64e381SAndroid Build Coastguard Worker #endif
308*4a64e381SAndroid Build Coastguard Worker }
309*4a64e381SAndroid Build Coastguard Worker
DeinitNcpMode(void)310*4a64e381SAndroid Build Coastguard Worker void Application::DeinitNcpMode(void)
311*4a64e381SAndroid Build Coastguard Worker {
312*4a64e381SAndroid Build Coastguard Worker /* empty */
313*4a64e381SAndroid Build Coastguard Worker }
314*4a64e381SAndroid Build Coastguard Worker
315*4a64e381SAndroid Build Coastguard Worker } // namespace otbr
316