1e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti/**
2e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti * Copyright (c) 2016, The Android Open Source Project
3e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti *
4e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti * Licensed under the Apache License, Version 2.0 (the "License");
5e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti * you may not use this file except in compliance with the License.
6e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti * You may obtain a copy of the License at
7e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti *
8e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti *     http://www.apache.org/licenses/LICENSE-2.0
9e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti *
10e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti * Unless required by applicable law or agreed to in writing, software
11e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti * distributed under the License is distributed on an "AS IS" BASIS,
12e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti * See the License for the specific language governing permissions and
14e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti * limitations under the License.
15e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti */
16e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti
17e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti#ifndef _NETD_NATIVE_SERVICE_H_
18e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti#define _NETD_NATIVE_SERVICE_H_
19e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti
2089faa349525ad1110b6fa3f2149e6ef825c65662Lorenzo Colitti#include <vector>
2189faa349525ad1110b6fa3f2149e6ef825c65662Lorenzo Colitti
22e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti#include <binder/BinderService.h>
23e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti
24e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti#include "android/net/BnNetd.h"
259f9aae9102f62f5f96ccec670170ee1fb262ef09Robin Lee#include "android/net/UidRange.h"
26e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti
27e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colittinamespace android {
28e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colittinamespace net {
29e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti
30e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitticlass NetdNativeService : public BinderService<NetdNativeService>, public BnNetd {
31e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti  public:
32e4851dede1dd24bbd80ffd30c4e89c7753fed121Lorenzo Colitti    static status_t start();
33c2c7b755b2017f71ded5784bd377fdba7d5aae6aLorenzo Colitti    static char const* getServiceName() { return "netd"; }
342d3a163433c435ff053402ae8965f8602c7ac6daErik Kline    virtual status_t dump(int fd, const Vector<String16> &args) override;
352d3a163433c435ff053402ae8965f8602c7ac6daErik Kline
36e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti    binder::Status isAlive(bool *alive) override;
3789faa349525ad1110b6fa3f2149e6ef825c65662Lorenzo Colitti    binder::Status firewallReplaceUidChain(
382d3a163433c435ff053402ae8965f8602c7ac6daErik Kline            const String16& chainName, bool isWhitelist,
392d3a163433c435ff053402ae8965f8602c7ac6daErik Kline            const std::vector<int32_t>& uids, bool *ret) override;
40dedd271d9961dbe8b99ffa7d54ffd63ac326f866Lorenzo Colitti    binder::Status bandwidthEnableDataSaver(bool enable, bool *ret) override;
41b8087363143050d214d48e5620a330776ca95a69Robin Lee    binder::Status networkRejectNonSecureVpn(bool enable, const std::vector<UidRange>& uids)
42b8087363143050d214d48e5620a330776ca95a69Robin Lee            override;
43563d98b27d02a1d694fc4ed82b5554fd534c9dafLorenzo Colitti    binder::Status socketDestroy(const std::vector<UidRange>& uids,
44563d98b27d02a1d694fc4ed82b5554fd534c9dafLorenzo Colitti            const std::vector<int32_t>& skipUids) override;
45beedec3bc42d6f40a2c83a65522e85b5ff046f79Pierre Imai    binder::Status setResolverConfiguration(int32_t netId, const std::vector<std::string>& servers,
46beedec3bc42d6f40a2c83a65522e85b5ff046f79Pierre Imai            const std::vector<std::string>& domains, const std::vector<int32_t>& params) override;
47beedec3bc42d6f40a2c83a65522e85b5ff046f79Pierre Imai    binder::Status getResolverInfo(int32_t netId, std::vector<std::string>* servers,
48beedec3bc42d6f40a2c83a65522e85b5ff046f79Pierre Imai            std::vector<std::string>* domains, std::vector<int32_t>* params,
49beedec3bc42d6f40a2c83a65522e85b5ff046f79Pierre Imai            std::vector<int32_t>* stats) override;
50e760181ff41a5f4526e4f543f3838eb05690e2aaBen Schwartz    binder::Status addPrivateDnsServer(const std::string& server, int32_t port,
51e760181ff41a5f4526e4f543f3838eb05690e2aaBen Schwartz            const std::string& fingerprintAlgorithm,
52e760181ff41a5f4526e4f543f3838eb05690e2aaBen Schwartz            const std::vector<std::string>& fingerprints) override;
53e760181ff41a5f4526e4f543f3838eb05690e2aaBen Schwartz    binder::Status removePrivateDnsServer(const std::string& server) override;
54f48e4dd80eb164394a8119abc59a5b9ecf36c4dbErik Kline
55de9379641d5fc4b5912d6838075df9490518cca6Joel Scherpelz    binder::Status setIPv6AddrGenMode(const std::string& ifName, int32_t mode) override;
56de9379641d5fc4b5912d6838075df9490518cca6Joel Scherpelz
5708b84cd0d223ae3059ce7d4d55b389fdea187580Joel Scherpelz    // NFLOG-related commands
5808b84cd0d223ae3059ce7d4d55b389fdea187580Joel Scherpelz    binder::Status wakeupAddInterface(const std::string& ifName, const std::string& prefix,
5908b84cd0d223ae3059ce7d4d55b389fdea187580Joel Scherpelz                                      int32_t mark, int32_t mask) override;
6008b84cd0d223ae3059ce7d4d55b389fdea187580Joel Scherpelz
6108b84cd0d223ae3059ce7d4d55b389fdea187580Joel Scherpelz    binder::Status wakeupDelInterface(const std::string& ifName, const std::string& prefix,
6208b84cd0d223ae3059ce7d4d55b389fdea187580Joel Scherpelz                                      int32_t mark, int32_t mask) override;
6308b84cd0d223ae3059ce7d4d55b389fdea187580Joel Scherpelz
64f48e4dd80eb164394a8119abc59a5b9ecf36c4dbErik Kline    // Tethering-related commands.
65f48e4dd80eb164394a8119abc59a5b9ecf36c4dbErik Kline    binder::Status tetherApplyDnsInterfaces(bool *ret) override;
6653c2088c4091e511c713ee759ce905e40e6d8975Erik Kline
6753c2088c4091e511c713ee759ce905e40e6d8975Erik Kline    binder::Status interfaceAddAddress(const std::string &ifName,
6853c2088c4091e511c713ee759ce905e40e6d8975Erik Kline            const std::string &addrString, int prefixLength) override;
6953c2088c4091e511c713ee759ce905e40e6d8975Erik Kline    binder::Status interfaceDelAddress(const std::string &ifName,
7053c2088c4091e511c713ee759ce905e40e6d8975Erik Kline            const std::string &addrString, int prefixLength) override;
7155b06f85b13553b7b0b5a76f650f452d5a9473c5Erik Kline
7255b06f85b13553b7b0b5a76f650f452d5a9473c5Erik Kline    binder::Status setProcSysNet(
7355b06f85b13553b7b0b5a76f650f452d5a9473c5Erik Kline            int32_t family, int32_t which, const std::string &ifname, const std::string &parameter,
7455b06f85b13553b7b0b5a76f650f452d5a9473c5Erik Kline            const std::string &value) override;
752cf561722c2661cc0d4db502a44a3021609f307eRobin Lee
762cf561722c2661cc0d4db502a44a3021609f307eRobin Lee    // Metrics reporting level set / get (internal use only).
772cf561722c2661cc0d4db502a44a3021609f307eRobin Lee    binder::Status getMetricsReportingLevel(int *reportingLevel) override;
782cf561722c2661cc0d4db502a44a3021609f307eRobin Lee    binder::Status setMetricsReportingLevel(const int reportingLevel) override;
791a37153768aa605e0787591c39d73b674acd92c3Nathan Harold
801a37153768aa605e0787591c39d73b674acd92c3Nathan Harold    binder::Status ipSecAllocateSpi(
811a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t transformId,
821a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t direction,
831a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const std::string& localAddress,
841a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const std::string& remoteAddress,
851a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t inSpi,
861a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t* outSpi);
871a37153768aa605e0787591c39d73b674acd92c3Nathan Harold
881a37153768aa605e0787591c39d73b674acd92c3Nathan Harold    binder::Status ipSecAddSecurityAssociation(
891a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t transformId,
901a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t mode,
911a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t direction,
921a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const std::string& localAddress,
931a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const std::string& remoteAddress,
941a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int64_t underlyingNetworkHandle,
951a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t spi,
961a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const std::string& authAlgo,
971a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const std::vector<uint8_t>& authKey,
981a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t authTruncBits,
991a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const std::string& cryptAlgo,
1001a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const std::vector<uint8_t>& cryptKey,
1011a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t cryptTruncBits,
1021a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t encapType,
1031a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t encapLocalPort,
104ec83605aa1e6e49610b80393c944d1fe2ffabc44ludi            int32_t encapRemotePort);
1051a37153768aa605e0787591c39d73b674acd92c3Nathan Harold
1061a37153768aa605e0787591c39d73b674acd92c3Nathan Harold    binder::Status ipSecDeleteSecurityAssociation(
1071a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t transformId,
1081a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t direction,
1091a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const std::string& localAddress,
1101a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const std::string& remoteAddress,
1111a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t spi);
1121a37153768aa605e0787591c39d73b674acd92c3Nathan Harold
1131a37153768aa605e0787591c39d73b674acd92c3Nathan Harold    binder::Status ipSecApplyTransportModeTransform(
1141a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const android::base::unique_fd& socket,
1151a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t transformId,
1161a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t direction,
1171a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const std::string& localAddress,
1181a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const std::string& remoteAddress,
1191a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            int32_t spi);
1201a37153768aa605e0787591c39d73b674acd92c3Nathan Harold
1211a37153768aa605e0787591c39d73b674acd92c3Nathan Harold    binder::Status ipSecRemoveTransportModeTransform(
1221a37153768aa605e0787591c39d73b674acd92c3Nathan Harold            const android::base::unique_fd& socket);
123e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti};
124e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti
125e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti}  // namespace net
126e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti}  // namespace android
127e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti
128e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti#endif  // _NETD_NATIVE_SERVICE_H_
129