1/**
2 * Copyright (c) 2016, The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef _NETD_NATIVE_SERVICE_H_
18#define _NETD_NATIVE_SERVICE_H_
19
20#include <vector>
21
22#include <binder/BinderService.h>
23
24#include "android/net/BnNetd.h"
25#include "android/net/UidRange.h"
26
27namespace android {
28namespace net {
29
30class NetdNativeService : public BinderService<NetdNativeService>, public BnNetd {
31  public:
32    static status_t start();
33    static char const* getServiceName() { return "netd"; }
34    virtual status_t dump(int fd, const Vector<String16> &args) override;
35
36    binder::Status isAlive(bool *alive) override;
37    binder::Status firewallReplaceUidChain(
38            const String16& chainName, bool isWhitelist,
39            const std::vector<int32_t>& uids, bool *ret) override;
40    binder::Status bandwidthEnableDataSaver(bool enable, bool *ret) override;
41    binder::Status networkRejectNonSecureVpn(bool enable, const std::vector<UidRange>& uids)
42            override;
43    binder::Status socketDestroy(const std::vector<UidRange>& uids,
44            const std::vector<int32_t>& skipUids) override;
45    binder::Status setResolverConfiguration(int32_t netId, const std::vector<std::string>& servers,
46            const std::vector<std::string>& domains, const std::vector<int32_t>& params) override;
47    binder::Status getResolverInfo(int32_t netId, std::vector<std::string>* servers,
48            std::vector<std::string>* domains, std::vector<int32_t>* params,
49            std::vector<int32_t>* stats) override;
50    binder::Status addPrivateDnsServer(const std::string& server, int32_t port,
51            const std::string& fingerprintAlgorithm,
52            const std::vector<std::string>& fingerprints) override;
53    binder::Status removePrivateDnsServer(const std::string& server) override;
54
55    binder::Status setIPv6AddrGenMode(const std::string& ifName, int32_t mode) override;
56
57    // NFLOG-related commands
58    binder::Status wakeupAddInterface(const std::string& ifName, const std::string& prefix,
59                                      int32_t mark, int32_t mask) override;
60
61    binder::Status wakeupDelInterface(const std::string& ifName, const std::string& prefix,
62                                      int32_t mark, int32_t mask) override;
63
64    // Tethering-related commands.
65    binder::Status tetherApplyDnsInterfaces(bool *ret) override;
66
67    binder::Status interfaceAddAddress(const std::string &ifName,
68            const std::string &addrString, int prefixLength) override;
69    binder::Status interfaceDelAddress(const std::string &ifName,
70            const std::string &addrString, int prefixLength) override;
71
72    binder::Status setProcSysNet(
73            int32_t family, int32_t which, const std::string &ifname, const std::string &parameter,
74            const std::string &value) override;
75
76    // Metrics reporting level set / get (internal use only).
77    binder::Status getMetricsReportingLevel(int *reportingLevel) override;
78    binder::Status setMetricsReportingLevel(const int reportingLevel) override;
79
80    binder::Status ipSecAllocateSpi(
81            int32_t transformId,
82            int32_t direction,
83            const std::string& localAddress,
84            const std::string& remoteAddress,
85            int32_t inSpi,
86            int32_t* outSpi);
87
88    binder::Status ipSecAddSecurityAssociation(
89            int32_t transformId,
90            int32_t mode,
91            int32_t direction,
92            const std::string& localAddress,
93            const std::string& remoteAddress,
94            int64_t underlyingNetworkHandle,
95            int32_t spi,
96            const std::string& authAlgo,
97            const std::vector<uint8_t>& authKey,
98            int32_t authTruncBits,
99            const std::string& cryptAlgo,
100            const std::vector<uint8_t>& cryptKey,
101            int32_t cryptTruncBits,
102            int32_t encapType,
103            int32_t encapLocalPort,
104            int32_t encapRemotePort);
105
106    binder::Status ipSecDeleteSecurityAssociation(
107            int32_t transformId,
108            int32_t direction,
109            const std::string& localAddress,
110            const std::string& remoteAddress,
111            int32_t spi);
112
113    binder::Status ipSecApplyTransportModeTransform(
114            const android::base::unique_fd& socket,
115            int32_t transformId,
116            int32_t direction,
117            const std::string& localAddress,
118            const std::string& remoteAddress,
119            int32_t spi);
120
121    binder::Status ipSecRemoveTransportModeTransform(
122            const android::base::unique_fd& socket);
123};
124
125}  // namespace net
126}  // namespace android
127
128#endif  // _NETD_NATIVE_SERVICE_H_
129