xref: /aosp_15_r20/external/ot-br-posix/src/agent/application.cpp (revision 4a64e381480ef79f0532b2421e44e6ee336b8e0d)
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