shill: Metrics: Report AP Mode (Managed vs IBSS)

When a connection completes report the AP mode of the service.
This way we can track aggregate statistics of IBSS-mode connections.

BUG=chromium:260922
TEST=Unit test; connect to AP and look for "Network.Shill.Wifi.ApMode"
in chrome://histograms

Change-Id: I272ac04d7a1fa9479512e35ae844d31041a7694b
Reviewed-on: https://gerrit.chromium.org/gerrit/62347
Commit-Queue: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/metrics.h b/metrics.h
index 58a7eaf..91db769 100644
--- a/metrics.h
+++ b/metrics.h
@@ -129,6 +129,14 @@
     kWiFiSecurityMax
   };
 
+  enum WiFiApMode {
+    kWiFiApModeUnknown = 0,
+    kWiFiApModeManaged = 1,
+    kWiFiApModeAdHoc = 2,
+
+    kWiFiApModeMax
+  };
+
   enum PortalResult {
     kPortalResultSuccess = 0,
     kPortalResultDNSFailure = 1,
@@ -257,6 +265,7 @@
   static const int kMetricDisconnectMax;
   static const int kMetricDisconnectMin;
   static const int kMetricDisconnectNumBuckets;
+  static const char kMetricNetworkApMode[];
   static const char kMetricNetworkChannel[];
   static const int kMetricNetworkChannelMax;
   static const char kMetricNetworkEapInnerProtocol[];
@@ -414,6 +423,9 @@
   // Converts a flimflam security string into its UMA security enumerator.
   static WiFiSecurity WiFiSecurityStringToEnum(const std::string &security);
 
+  // Converts a flimflam AP mode string into its UMA AP mode enumerator.
+  static WiFiApMode WiFiApModeStringToEnum(const std::string &ap_mode);
+
   // Converts a flimflam EAP outer protocol string into its UMA enumerator.
   static EapOuterProtocol EapOuterProtocolStringToEnum(
       const std::string &outer);