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 25// TODO: move InterfaceController into android::net namespace. 26namespace android { 27namespace net { 28class StablePrivacyTest; 29} // namespace net 30} // namespace android 31 32class InterfaceController { 33public: 34 static void initializeAll(); 35 36 static int setEnableIPv6(const char *interface, const int on); 37 static android::netdutils::Status setIPv6AddrGenMode(const std::string& interface, int mode); 38 static int setAcceptIPv6Ra(const char *interface, const int on); 39 static int setAcceptIPv6Dad(const char *interface, const int on); 40 static int setIPv6DadTransmits(const char *interface, const char *value); 41 static int setIPv6PrivacyExtensions(const char *interface, const int on); 42 static int setIPv6NdOffload(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 56private: 57 friend class android::net::StablePrivacyTest; 58 59 using GetPropertyFn = 60 std::function<std::string(const std::string& key, const std::string& dflt)>; 61 using SetPropertyFn = 62 std::function<android::netdutils::Status(const std::string& key, const std::string& val)>; 63 64 // Helper function exported from this compilation unit for testing. 65 static android::netdutils::Status enableStablePrivacyAddresses(const std::string& iface, 66 GetPropertyFn getProperty, 67 SetPropertyFn setProperty); 68 69 static void setAcceptRA(const char* value); 70 static void setAcceptRARouteTable(int tableOrOffset); 71 static void setBaseReachableTimeMs(unsigned int millis); 72 static void setIPv6OptimisticMode(const char* value); 73 74 InterfaceController() = delete; 75 ~InterfaceController() = delete; 76}; 77 78#endif 79