shill: LinkMonitor: Add ArpPacket code

Add ArpPacket class to parse and compose ARP packets.

BUG=chromium-os:32600
TEST=New unit tests

Change-Id: Icac65cc16e059f07109fc695ba9046cafa0b042c
Reviewed-on: https://gerrit.chromium.org/gerrit/28096
Commit-Ready: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/byte_string.cc b/byte_string.cc
index f182756..fae4953 100644
--- a/byte_string.cc
+++ b/byte_string.cc
@@ -12,6 +12,16 @@
 
 namespace shill {
 
+ByteString ByteString::GetSubstring(size_t offset, size_t length) const {
+  if (offset > GetLength()) {
+    offset = GetLength();
+  }
+  if (length > GetLength() - offset) {
+    length = GetLength() - offset;
+  }
+  return ByteString(GetConstData() + offset, length);
+}
+
 // static
 ByteString ByteString::CreateFromCPUUInt32(uint32 val) {
   return ByteString(reinterpret_cast<unsigned char *>(&val), sizeof(val));