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 ¶meter, 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