shill: support the Cellular.Family device property.

This property is needed in order to have the UI realize that it
has a GSM modem, and should therefore enable the GSM-specific
controls.

BUG=chromium-os:28745
TEST=With list-devices, confirm that the property is set and has
the right value. In the network settings UI, bring up the "details"
panel for the cellular service, and confirm that the controls for
the correct type of modem are shown.

Change-Id: Ic2a7f7b3537004d6c92d2bd80fc54b93d277461a
Reviewed-on: https://gerrit.chromium.org/gerrit/19377
Reviewed-by: Jason Glasgow <jglasgow@chromium.org>
Commit-Ready: Eric Shienbrood <ers@chromium.org>
Tested-by: Eric Shienbrood <ers@chromium.org>
diff --git a/cellular.h b/cellular.h
index a8df25a..86863d0 100644
--- a/cellular.h
+++ b/cellular.h
@@ -174,6 +174,7 @@
   void OnConnectFailed(const Error &error);
   void OnDisconnected();
   void OnDisconnectFailed();
+  std::string GetTechnologyFamily(Error *error);
 
  private:
   friend class CellularTest;
@@ -211,6 +212,16 @@
   void CreateService();
   void DestroyService();
 
+  // HelpRegisterDerived*: Expose a property over RPC, with the name |name|.
+  //
+  // Reads of the property will be handled by invoking |get|.
+  // Writes to the property will be handled by invoking |set|.
+  // Clearing the property will be handled by PropertyStore.
+  void HelpRegisterDerivedString(
+      const std::string &name,
+      std::string(Cellular::*get)(Error *error),
+      void(Cellular::*set)(const std::string &value, Error *error));
+
   State state_;
   ModemState modem_state_;