List network permissions in dumpsys netd.

Bug: 23113288
Change-Id: Iea225ead1f6296ded29fcee2435a8c6aa2a67429
diff --git a/include/Permission.h b/include/Permission.h
index aa5ae81..19881df 100644
--- a/include/Permission.h
+++ b/include/Permission.h
@@ -39,4 +39,14 @@
     PERMISSION_SYSTEM  = 0x3,  // Includes PERMISSION_NETWORK.
 };
 
+inline const char *permissionToName(Permission permission) {
+    switch (permission) {
+        case PERMISSION_NONE:    return "NONE";
+        case PERMISSION_NETWORK: return "NETWORK";
+        case PERMISSION_SYSTEM:  return "SYSTEM";
+        // No default statement. We want to see errors of the form:
+        // "enumeration value 'PERMISSION_SYSTEM' not handled in switch [-Werror,-Wswitch]".
+    }
+}
+
 #endif  // NETD_INCLUDE_PERMISSION_H
diff --git a/server/NetworkController.cpp b/server/NetworkController.cpp
index aaf8b29..c891391 100644
--- a/server/NetworkController.cpp
+++ b/server/NetworkController.cpp
@@ -536,7 +536,14 @@
     dw.println("Networks:");
     dw.incIndent();
     for (const auto& i : mNetworks) {
-        dw.println(i.second->toString().c_str());
+        Network* network = i.second;
+        dw.println(network->toString().c_str());
+        if (network->getType() == Network::PHYSICAL) {
+            dw.incIndent();
+            Permission permission = reinterpret_cast<PhysicalNetwork*>(network)->getPermission();
+            dw.println("Required permission: %s", permissionToName(permission));
+            dw.decIndent();
+        }
         android::net::gCtls->resolverCtrl.dump(dw, i.first);
         dw.blankline();
     }