xref: /aosp_15_r20/system/netd/tests/TestUnsolService.h (revision 8542734a0dd1db395a4d42aae09c37f3c3c3e7a1)
1*8542734aSAndroid Build Coastguard Worker /**
2*8542734aSAndroid Build Coastguard Worker  * Copyright (c) 2018, The Android Open Source Project
3*8542734aSAndroid Build Coastguard Worker  *
4*8542734aSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*8542734aSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*8542734aSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*8542734aSAndroid Build Coastguard Worker  *
8*8542734aSAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
9*8542734aSAndroid Build Coastguard Worker  *
10*8542734aSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*8542734aSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*8542734aSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*8542734aSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*8542734aSAndroid Build Coastguard Worker  * limitations under the License.
15*8542734aSAndroid Build Coastguard Worker  */
16*8542734aSAndroid Build Coastguard Worker 
17*8542734aSAndroid Build Coastguard Worker #ifndef _NETD_TEST_UNSOLSERVICE_H_
18*8542734aSAndroid Build Coastguard Worker #define _NETD_TEST_UNSOLSERVICE_H_
19*8542734aSAndroid Build Coastguard Worker 
20*8542734aSAndroid Build Coastguard Worker #include <string>
21*8542734aSAndroid Build Coastguard Worker #include <vector>
22*8542734aSAndroid Build Coastguard Worker 
23*8542734aSAndroid Build Coastguard Worker #include <binder/BinderService.h>
24*8542734aSAndroid Build Coastguard Worker 
25*8542734aSAndroid Build Coastguard Worker #include "android/net/BnNetdUnsolicitedEventListener.h"
26*8542734aSAndroid Build Coastguard Worker 
27*8542734aSAndroid Build Coastguard Worker enum UnsolEvent : uint32_t {
28*8542734aSAndroid Build Coastguard Worker     InterfaceClassActivity = 1 << 0,
29*8542734aSAndroid Build Coastguard Worker     QuotaLimitReached = 1 << 1,
30*8542734aSAndroid Build Coastguard Worker     InterfaceDnsServersAdded = 1 << 2,
31*8542734aSAndroid Build Coastguard Worker     InterfaceAddressUpdated = 1 << 3,
32*8542734aSAndroid Build Coastguard Worker     InterfaceAddressRemoved = 1 << 4,
33*8542734aSAndroid Build Coastguard Worker     InterfaceAdded = 1 << 5,
34*8542734aSAndroid Build Coastguard Worker     InterfaceRemoved = 1 << 6,
35*8542734aSAndroid Build Coastguard Worker     InterfaceChanged = 1 << 7,
36*8542734aSAndroid Build Coastguard Worker     InterfaceLinkStatusChanged = 1 << 8,
37*8542734aSAndroid Build Coastguard Worker     RouteChanged = 1 << 9,
38*8542734aSAndroid Build Coastguard Worker     StrictCleartextDetected = 1 << 10,
39*8542734aSAndroid Build Coastguard Worker };
40*8542734aSAndroid Build Coastguard Worker 
41*8542734aSAndroid Build Coastguard Worker namespace android {
42*8542734aSAndroid Build Coastguard Worker namespace net {
43*8542734aSAndroid Build Coastguard Worker 
44*8542734aSAndroid Build Coastguard Worker class TestUnsolService : public BinderService<TestUnsolService>,
45*8542734aSAndroid Build Coastguard Worker                          public BnNetdUnsolicitedEventListener {
46*8542734aSAndroid Build Coastguard Worker   public:
47*8542734aSAndroid Build Coastguard Worker     TestUnsolService() = default;
48*8542734aSAndroid Build Coastguard Worker     ~TestUnsolService() = default;
49*8542734aSAndroid Build Coastguard Worker     static TestUnsolService* start();
getServiceName()50*8542734aSAndroid Build Coastguard Worker     static char const* getServiceName() { return "testUnsol"; }
getEvents()51*8542734aSAndroid Build Coastguard Worker     const std::vector<std::string>& getEvents() const { return events_; }
clearEvents()52*8542734aSAndroid Build Coastguard Worker     void clearEvents() { events_.clear(); }
getReceived()53*8542734aSAndroid Build Coastguard Worker     uint32_t getReceived() { return received_; }
getCv()54*8542734aSAndroid Build Coastguard Worker     std::condition_variable& getCv() { return cv_; }
getCvMutex()55*8542734aSAndroid Build Coastguard Worker     std::mutex& getCvMutex() { return cv_mutex_; }
56*8542734aSAndroid Build Coastguard Worker     binder::Status onInterfaceClassActivityChanged(bool isActive, int label, int64_t timestamp,
57*8542734aSAndroid Build Coastguard Worker                                                    int uid) override;
58*8542734aSAndroid Build Coastguard Worker     binder::Status onQuotaLimitReached(const std::string& alertName,
59*8542734aSAndroid Build Coastguard Worker                                        const std::string& ifName) override;
60*8542734aSAndroid Build Coastguard Worker     binder::Status onInterfaceDnsServerInfo(const std::string& ifName, int64_t lifetime,
61*8542734aSAndroid Build Coastguard Worker                                             const std::vector<std::string>& servers) override;
62*8542734aSAndroid Build Coastguard Worker     binder::Status onInterfaceAddressUpdated(const std::string& addr, const std::string& ifName,
63*8542734aSAndroid Build Coastguard Worker                                              int flags, int scope) override;
64*8542734aSAndroid Build Coastguard Worker     binder::Status onInterfaceAddressRemoved(const std::string& addr, const std::string& ifName,
65*8542734aSAndroid Build Coastguard Worker                                              int flags, int scope) override;
66*8542734aSAndroid Build Coastguard Worker     binder::Status onInterfaceAdded(const std::string& ifName) override;
67*8542734aSAndroid Build Coastguard Worker     binder::Status onInterfaceRemoved(const std::string& ifName) override;
68*8542734aSAndroid Build Coastguard Worker     binder::Status onInterfaceChanged(const std::string& ifName, bool status) override;
69*8542734aSAndroid Build Coastguard Worker     binder::Status onInterfaceLinkStateChanged(const std::string& ifName, bool status) override;
70*8542734aSAndroid Build Coastguard Worker     binder::Status onRouteChanged(bool updated, const std::string& route,
71*8542734aSAndroid Build Coastguard Worker                                   const std::string& gateway, const std::string& ifName) override;
72*8542734aSAndroid Build Coastguard Worker     binder::Status onStrictCleartextDetected(int uid, const std::string& hex) override;
73*8542734aSAndroid Build Coastguard Worker 
74*8542734aSAndroid Build Coastguard Worker     std::vector<std::string> tarVec;
75*8542734aSAndroid Build Coastguard Worker 
76*8542734aSAndroid Build Coastguard Worker   private:
77*8542734aSAndroid Build Coastguard Worker     void maybeNotify();
78*8542734aSAndroid Build Coastguard Worker     void checkTarget(const std::string& ifName, uint32_t flag);
79*8542734aSAndroid Build Coastguard Worker 
80*8542734aSAndroid Build Coastguard Worker     std::vector<std::string> events_;
81*8542734aSAndroid Build Coastguard Worker     std::mutex cv_mutex_;
82*8542734aSAndroid Build Coastguard Worker     std::condition_variable cv_;
83*8542734aSAndroid Build Coastguard Worker     uint32_t received_{};
84*8542734aSAndroid Build Coastguard Worker };
85*8542734aSAndroid Build Coastguard Worker 
86*8542734aSAndroid Build Coastguard Worker }  // namespace net
87*8542734aSAndroid Build Coastguard Worker }  // namespace android
88*8542734aSAndroid Build Coastguard Worker 
89*8542734aSAndroid Build Coastguard Worker #endif  // _NETD_TEST_UNSOLSERVICE_H_
90