1 /* 2 * Copyright (c) 2024, 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 #ifndef OTBR_ANDROID_RCP_HOST_HPP_ 30 #define OTBR_ANDROID_RCP_HOST_HPP_ 31 32 #include "android_thread_host.hpp" 33 34 #include <memory> 35 36 #include "common_utils.hpp" 37 #include "ncp/rcp_host.hpp" 38 39 namespace otbr { 40 namespace Android { 41 42 class AndroidRcpHost : public AndroidThreadHost 43 { 44 public: 45 AndroidRcpHost(Ncp::RcpHost &aRcpHost); 46 ~AndroidRcpHost(void) = default; 47 48 void SetConfiguration(const OtDaemonConfiguration &aConfiguration, 49 const std::shared_ptr<IOtStatusReceiver> &aReceiver) override; GetConfiguration(void)50 const OtDaemonConfiguration &GetConfiguration(void) override { return mConfiguration; } 51 void SetInfraLinkInterfaceName(const std::string &aInterfaceName, 52 int aIcmp6Socket, 53 const std::shared_ptr<IOtStatusReceiver> &aReceiver) override; 54 void SetInfraLinkNat64Prefix(const std::string &aNat64Prefix, 55 const std::shared_ptr<IOtStatusReceiver> &aReceiver) override; 56 void SetInfraLinkDnsServers(const std::vector<std::string> &aDnsServers, 57 const std::shared_ptr<IOtStatusReceiver> &aReceiver) override; 58 void SetTrelEnabled(bool aEnabled) override; 59 void RunOtCtlCommand(const std::string &aCommand, 60 const bool aIsInteractive, 61 const std::shared_ptr<IOtOutputReceiver> &aReceiver) override; 62 binder_status_t Dump(int aFd, const char **aArgs, uint32_t aNumArgs) override; 63 64 void NotifyNat64PrefixDiscoveryDone(void); Get(void)65 static AndroidRcpHost *Get(void) { return sAndroidRcpHost; } 66 67 private: 68 otInstance *GetOtInstance(void); 69 70 static otLinkModeConfig GetLinkModeConfig(bool aBeRouter); 71 void SetBorderRouterEnabled(bool aEnabled); 72 static int OtCtlCommandCallback(void *aBinderServer, const char *aFormat, va_list aArguments); 73 int OtCtlCommandCallback(const char *aFormat, va_list aArguments); 74 75 static AndroidRcpHost *sAndroidRcpHost; 76 77 Ncp::RcpHost &mRcpHost; 78 OtDaemonConfiguration mConfiguration; 79 InfraLinkState mInfraLinkState; 80 int mInfraIcmp6Socket; 81 bool mTrelEnabled; 82 83 bool mIsOtCtlInteractiveMode; 84 bool mIsOtCtlOutputComplete; 85 std::shared_ptr<IOtOutputReceiver> mOtCtlOutputReceiver; 86 }; 87 88 } // namespace Android 89 } // namespace otbr 90 91 #endif // OTBR_ANDROID_RCP_HOST_HPP_ 92