shill: Use real MAC address for cellular devices.

Read the MAC address for cellular devices from the kernel at
the time of device creation instead of using the MAC address
from the RTNL link-add message.

The MAC address in the link-add message for usb-based devices
may not be consistent from one reboot to another.  The MAC
address is used in the shill profile's entry for the device,
and so if the MAC address changes from one reboot to another,
ChromeOS does not use the existing entry in the profile but
instead creates another, with input from the user.

BUG=chromium-os:33006
TEST=Run all unit tests.  Test with Gobi 2k (which exhibits the problem
of 33006), Gobi 3k, and E362.

Change-Id: I2147139c2f33a0ee9909516933e500cefb7dc2bc
Reviewed-on: https://gerrit.chromium.org/gerrit/28738
Reviewed-by: Paul Stewart <pstew@chromium.org>
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Commit-Ready: Gary Morain <gmorain@chromium.org>
Tested-by: Gary Morain <gmorain@chromium.org>
diff --git a/mock_device_info.h b/mock_device_info.h
index 4f5addb..b696cce 100644
--- a/mock_device_info.h
+++ b/mock_device_info.h
@@ -32,6 +32,7 @@
   MOCK_CONST_METHOD1(GetIndex, int(const std::string &interface_name));
   MOCK_CONST_METHOD2(GetMACAddress, bool(int interface_index,
                                          ByteString* address));
+  MOCK_CONST_METHOD1(GetMACAddressFromKernel, ByteString(int interface_index));
   MOCK_CONST_METHOD3(GetByteCounts, bool(int interface_index,
                                          uint64 *rx_bytes,
                                          uint64 *tx_bytes));