Interface-related commands porting

Test: built, flashed, booted
      system/netd/tests/runtests.sh passes

Change-Id: Ief3b2a0a55b74db0a794f3f9ca58298a2fcb57dd
diff --git a/server/InterfaceController.h b/server/InterfaceController.h
index 96b955a..e21c75d 100644
--- a/server/InterfaceController.h
+++ b/server/InterfaceController.h
@@ -21,6 +21,7 @@
 #include <map>
 #include <string>
 
+#include <android/net/InterfaceConfigurationParcel.h>
 #include <netdutils/Status.h>
 #include <netdutils/StatusOr.h>
 
@@ -33,53 +34,56 @@
 public:
     static void initializeAll();
 
-    static int setEnableIPv6(const char *interface, const int on);
-    static android::netdutils::Status setIPv6AddrGenMode(const std::string& interface, int mode);
-    static int setAcceptIPv6Ra(const char *interface, const int on);
-    static int setAcceptIPv6Dad(const char *interface, const int on);
-    static int setIPv6DadTransmits(const char *interface, const char *value);
-    static int setIPv6PrivacyExtensions(const char *interface, const int on);
-    static int setMtu(const char *interface, const char *mtu);
-    static int addAddress(const char *interface, const char *addrString, int prefixLength);
-    static int delAddress(const char *interface, const char *addrString, int prefixLength);
+    static int setEnableIPv6(const char* ifName, const int on);
+    static android::netdutils::Status setIPv6AddrGenMode(const std::string& ifName, int mode);
+    static int setAcceptIPv6Ra(const char* ifName, const int on);
+    static int setAcceptIPv6Dad(const char* ifName, const int on);
+    static int setIPv6DadTransmits(const char* ifName, const char* value);
+    static int setIPv6PrivacyExtensions(const char* ifName, const int on);
+    static int setMtu(const char* ifName, const char* mtu);
+    static int addAddress(const char* ifName, const char* addrString, int prefixLength);
+    static int delAddress(const char* ifName, const char* addrString, int prefixLength);
     static int disableIcmpRedirects();
+    static android::netdutils::Status setCfg(const InterfaceConfigurationParcel& cfg);
+    static android::netdutils::StatusOr<InterfaceConfigurationParcel> getCfg(
+            const std::string& ifName);
+    static int clearAddrs(const std::string& ifName);
 
     // Read and write values in files of the form:
-    //     /proc/sys/net/<family>/<which>/<interface>/<parameter>
+    //     /proc/sys/net/<family>/<which>/<ifName>/<parameter>
     //
     // NOTE: getParameter() trims whitespace so the caller does not need extra
     // code to crop trailing newlines, for example.
-    static int getParameter(
-            const char *family, const char *which, const char *interface, const char *parameter,
-            std::string *value);
-    static int setParameter(
-            const char *family, const char *which, const char *interface, const char *parameter,
-            const char *value);
+    static int getParameter(const char* family, const char* which, const char* ifName,
+                            const char* parameter, std::string* value);
+    static int setParameter(const char* family, const char* which, const char* ifName,
+                            const char* parameter, const char* value);
 
     static android::netdutils::StatusOr<std::vector<std::string>> getIfaceNames();
     static android::netdutils::StatusOr<std::map<std::string, uint32_t>> getIfaceList();
 
-private:
-  friend class android::net::StablePrivacyTest;
+    static std::mutex mutex;
 
-  using GetPropertyFn =
-      std::function<std::string(const std::string& key, const std::string& dflt)>;
-  using SetPropertyFn =
-      std::function<android::netdutils::Status(const std::string& key, const std::string& val)>;
+  private:
+    friend class android::net::StablePrivacyTest;
 
-  // Helper function exported from this compilation unit for testing.
-  static android::netdutils::Status enableStablePrivacyAddresses(
-          const std::string& iface,
-          const GetPropertyFn& getProperty,
-          const SetPropertyFn& setProperty);
+    using GetPropertyFn =
+            std::function<std::string(const std::string& key, const std::string& dflt)>;
+    using SetPropertyFn = std::function<android::netdutils::Status(const std::string& key,
+                                                                   const std::string& val)>;
 
-  static void setAcceptRA(const char* value);
-  static void setAcceptRARouteTable(int tableOrOffset);
-  static void setBaseReachableTimeMs(unsigned int millis);
-  static void setIPv6OptimisticMode(const char* value);
+    // Helper function exported from this compilation unit for testing.
+    static android::netdutils::Status enableStablePrivacyAddresses(
+            const std::string& ifName, const GetPropertyFn& getProperty,
+            const SetPropertyFn& setProperty);
 
-  InterfaceController() = delete;
-  ~InterfaceController() = delete;
+    static void setAcceptRA(const char* value);
+    static void setAcceptRARouteTable(int tableOrOffset);
+    static void setBaseReachableTimeMs(unsigned int millis);
+    static void setIPv6OptimisticMode(const char* value);
+
+    InterfaceController() = delete;
+    ~InterfaceController() = delete;
 };
 
 }  // namespace net