1 /* 2 * Copyright (C) 2012 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 _INTERFACE_CONTROLLER_H 18 #define _INTERFACE_CONTROLLER_H 19 20 #include <functional> 21 #include <string> 22 23 #include <netdutils/Status.h> 24 #include <netdutils/StatusOr.h> 25 26 // TODO: move InterfaceController into android::net namespace. 27 namespace android { 28 namespace net { 29 class StablePrivacyTest; 30 } // namespace net 31 } // namespace android 32 33 class InterfaceController { 34 public: 35 static void initializeAll(); 36 37 static int setEnableIPv6(const char *interface, const int on); 38 static android::netdutils::Status setIPv6AddrGenMode(const std::string& interface, int mode); 39 static int setAcceptIPv6Ra(const char *interface, const int on); 40 static int setAcceptIPv6Dad(const char *interface, const int on); 41 static int setIPv6DadTransmits(const char *interface, const char *value); 42 static int setIPv6PrivacyExtensions(const char *interface, const int on); 43 static int setMtu(const char *interface, const char *mtu); 44 static int addAddress(const char *interface, const char *addrString, int prefixLength); 45 static int delAddress(const char *interface, const char *addrString, int prefixLength); 46 47 // Read and write values in files of the form: 48 // /proc/sys/net/<family>/<which>/<interface>/<parameter> 49 static int getParameter( 50 const char *family, const char *which, const char *interface, const char *parameter, 51 std::string *value); 52 static int setParameter( 53 const char *family, const char *which, const char *interface, const char *parameter, 54 const char *value); 55 56 static android::netdutils::StatusOr<std::vector<std::string>> getIfaceNames(); 57 static android::netdutils::StatusOr<std::map<std::string, uint32_t>> getIfaceList(); 58 59 private: 60 friend class android::net::StablePrivacyTest; 61 62 using GetPropertyFn = 63 std::function<std::string(const std::string& key, const std::string& dflt)>; 64 using SetPropertyFn = 65 std::function<android::netdutils::Status(const std::string& key, const std::string& val)>; 66 67 // Helper function exported from this compilation unit for testing. 68 static android::netdutils::Status enableStablePrivacyAddresses(const std::string& iface, 69 GetPropertyFn getProperty, 70 SetPropertyFn setProperty); 71 72 static void setAcceptRA(const char* value); 73 static void setAcceptRARouteTable(int tableOrOffset); 74 static void setBaseReachableTimeMs(unsigned int millis); 75 static void setIPv6OptimisticMode(const char* value); 76 77 InterfaceController() = delete; 78 ~InterfaceController() = delete; 79 }; 80 81 #endif 82