shill: Hide netlink sequence numbers and headers from users

Hide details of the netlink protocol from creators of nl80211 messages
to simplify the process of sending messages to the kernel.  This changes
the process to send a message and set a callback from:

KernelBoundNlMessage message;
// ... populate message with fields
message.AddNetlinkHeader(&socket_, 0, NL_AUTO_SEQ, 0, 0, 0,
                         CTRL_CMD_GETFAMILY, 0));
Config80211::GetInstance()->SendMessage(&message, callback);

to:

KernelBoundNlMessage message(CTRL_CMD_GETFAMILY);
// ... populate message with fields
Config80211::GetInstance()->SendMessage(&message, callback);

BUG=chromium-os:36122
TEST=Unit tests

Change-Id: Id0bc931b6952fc0eafdf73499c1b48d550575fce
Reviewed-on: https://gerrit.chromium.org/gerrit/37724
Reviewed-by: Wade Guthrie <wdg@chromium.org>
Commit-Ready: Christopher Wiley <wiley@chromium.org>
Tested-by: Christopher Wiley <wiley@chromium.org>
diff --git a/netlink_socket.h b/netlink_socket.h
index 7abc271..aad3d65 100644
--- a/netlink_socket.h
+++ b/netlink_socket.h
@@ -84,9 +84,6 @@
   // Non-trivial initialization.
   bool Init();
 
-  // Send a message.
-  virtual bool Send(struct nl_msg *message);
-
   // Disables sequence checking on the message stream.
   virtual bool DisableSequenceChecking();
 
@@ -117,6 +114,9 @@
   virtual std::string GetSocketFamilyName() const = 0;
 
  protected:
+  // Send a message, returns 0 on error, or the sequence number (> 0).
+  uint32 Send(struct nl_msg *message, uint8 command, int32 family_id);
+
   struct nl_sock *GetNlSock() { return nl_sock_; }
 
  private: