shill: Puts netlink message CreateAttribute calls in msg constructor.

This doesn't move Create*Attribute calls from nested attributes (because
at least some of those have to be created on site -- arrays on nested
attributes, for instance) nor from unittests that create messages that
normally come from the kernel.

BUG=chromium:240446
TEST=unittest

Change-Id: I192a452ec229d0a0ea2b314ad0cb56bff295e339
Reviewed-on: https://gerrit.chromium.org/gerrit/56815
Reviewed-by: Wade Guthrie <wdg@chromium.org>
Tested-by: Wade Guthrie <wdg@chromium.org>
Commit-Queue: Wade Guthrie <wdg@chromium.org>
diff --git a/generic_netlink_message.cc b/generic_netlink_message.cc
index 3e0d04d..39005cf 100644
--- a/generic_netlink_message.cc
+++ b/generic_netlink_message.cc
@@ -133,6 +133,12 @@
 const uint8_t GetFamilyMessage::kCommand = CTRL_CMD_GETFAMILY;
 const char GetFamilyMessage::kCommandString[] = "CTRL_CMD_GETFAMILY";
 
+GetFamilyMessage::GetFamilyMessage()
+    : ControlNetlinkMessage(kCommand, kCommandString) {
+  attributes()->CreateStringAttribute(CTRL_ATTR_FAMILY_NAME,
+                                      "CTRL_ATTR_FAMILY_NAME");
+}
+
 // static
 NetlinkMessage *ControlNetlinkMessage::CreateMessage(
     const nlmsghdr *const_msg) {
diff --git a/generic_netlink_message.h b/generic_netlink_message.h
index b6f9438..ed8d71f 100644
--- a/generic_netlink_message.h
+++ b/generic_netlink_message.h
@@ -122,7 +122,7 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  GetFamilyMessage() : ControlNetlinkMessage(kCommand, kCommandString) {}
+  GetFamilyMessage();
 
  private:
   DISALLOW_COPY_AND_ASSIGN(GetFamilyMessage);
diff --git a/netlink_manager.cc b/netlink_manager.cc
index 0172611..30540e9 100644
--- a/netlink_manager.cc
+++ b/netlink_manager.cc
@@ -186,11 +186,6 @@
   }
 
   GetFamilyMessage msg;
-  if (!msg.attributes()->CreateStringAttribute(CTRL_ATTR_FAMILY_NAME,
-                                               "CTRL_ATTR_FAMILY_NAME")) {
-    LOG(ERROR) << "Couldn't create string attribute";
-    return false;
-  }
   if (!msg.attributes()->SetStringAttributeValue(CTRL_ATTR_FAMILY_NAME, name)) {
     LOG(ERROR) << "Couldn't set string attribute";
     return false;
diff --git a/netlink_manager.h b/netlink_manager.h
index d324cd0..7bfe9bc 100644
--- a/netlink_manager.h
+++ b/netlink_manager.h
@@ -39,13 +39,9 @@
 //    #include "nl80211_message.h"
 //    GetFamilyMessage msg;
 //
-// - And add attributes:
+// - And set attributes:
 //
-//    if (msg.attributes()->CreateStringAttribute(CTRL_ATTR_FAMILY_NAME,
-//                                                "CTRL_ATTR_FAMILY_NAME")) {
-//      msg.attributes()->SetStringAttributeValue(CTRL_ATTR_FAMILY_NAME,
-//                                                "foo");
-//    }
+//    msg.attributes()->SetStringAttributeValue(CTRL_ATTR_FAMILY_NAME, "foo");
 //
 // - Then send the message, passing-in a closure to the handler you created:
 //
diff --git a/nl80211_message.cc b/nl80211_message.cc
index 5b142c3..ee43e11 100644
--- a/nl80211_message.cc
+++ b/nl80211_message.cc
@@ -619,7 +619,7 @@
 const char TriggerScanMessage::kCommandString[] = "NL80211_CMD_TRIGGER_SCAN";
 
 TriggerScanMessage::TriggerScanMessage()
-  : Nl80211Message(kCommand, kCommandString) {
+    : Nl80211Message(kCommand, kCommandString) {
   attributes()->CreateAttribute(
       NL80211_ATTR_IFINDEX, Bind(&NetlinkAttribute::NewNl80211AttributeFromId));
   attributes()->CreateAttribute(