patchpanel: mcast: improve logs

BUG=b:163386838
TEST=Unit tests

Change-Id: I0a18168c288f4dafbe0ee6bae0ea5814f4af13bb
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2354127
Reviewed-by: Jason Jeremy Iman <jasongustaman@chromium.org>
Reviewed-by: Garrick Evans <garrick@chromium.org>
Tested-by: Hugo Benichi <hugobenichi@google.com>
Commit-Queue: Hugo Benichi <hugobenichi@google.com>
diff --git a/patchpanel/multicast_forwarder.cc b/patchpanel/multicast_forwarder.cc
index 59587a4..78a578e 100644
--- a/patchpanel/multicast_forwarder.cc
+++ b/patchpanel/multicast_forwarder.cc
@@ -134,8 +134,8 @@
 
   base::ScopedFD fd(socket(sa_family, SOCK_DGRAM, 0));
   if (!fd.is_valid()) {
-    PLOG(ERROR) << "socket() failed for multicast forwarder on " << ifname
-                << " for " << mcast_addr << ":" << port_;
+    PLOG(ERROR) << "socket() failed on " << ifname << " for " << mcast_addr
+                << ":" << port_;
     return base::ScopedFD();
   }
 
@@ -147,16 +147,15 @@
   memset(&ifr, 0, sizeof(ifr));
   strncpy(ifr.ifr_name, ifname.c_str(), IFNAMSIZ);
   if (setsockopt(fd.get(), SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof(ifr))) {
-    PLOG(ERROR) << "setsockopt(SOL_SOCKET) failed for multicast forwarder on "
-                << ifname << " for " << mcast_addr << ":" << port_;
+    PLOG(ERROR) << "setsockopt(SO_BINDTODEVICE) failed on " << ifname << " for "
+                << mcast_addr << ":" << port_;
     return base::ScopedFD();
   }
 
   int ifindex = if_nametoindex(ifname.c_str());
   if (ifindex == 0) {
-    PLOG(ERROR)
-        << "Could not obtain interface index for multicast forwarder on "
-        << ifname << " for " << mcast_addr << ":" << port_;
+    PLOG(ERROR) << "Could not obtain interface index of " << ifname << " for "
+                << mcast_addr << ":" << port_;
     return base::ScopedFD();
   }
 
@@ -169,9 +168,8 @@
     mreqn.imr_ifindex = ifindex;
     if (setsockopt(fd.get(), IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreqn,
                    sizeof(mreqn)) < 0) {
-      PLOG(ERROR)
-          << "Can't add multicast membership for multicast forwarder on "
-          << ifname << " for " << mcast_addr_ << ":" << port_;
+      PLOG(ERROR) << "Can't add IPv4 multicast membership for on " << ifname
+                  << " for " << mcast_addr_ << ":" << port_;
       return base::ScopedFD();
     }
 
@@ -184,9 +182,8 @@
     mreqn.ipv6mr_interface = ifindex;
     if (setsockopt(fd.get(), IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreqn,
                    sizeof(mreqn)) < 0) {
-      PLOG(ERROR)
-          << "Can't add multicast membership for multicast forwarder on "
-          << ifname << " for " << mcast_addr6_ << ":" << port_;
+      PLOG(ERROR) << "Can't add IPv6 multicast membership on " << ifname
+                  << " for " << mcast_addr6_ << ":" << port_;
       return base::ScopedFD();
     }
 
@@ -198,16 +195,15 @@
 
   int off = 0;
   if (setsockopt(fd.get(), level, optname, &off, sizeof(off))) {
-    PLOG(ERROR)
-        << "setsockopt(IP_MULTICAST_LOOP) failed for multicast forwarder on "
-        << ifname << " for " << mcast_addr << ":" << port_;
+    PLOG(ERROR) << "setsockopt(IP_MULTICAST_LOOP) failed on " << ifname
+                << " for " << mcast_addr << ":" << port_;
     return base::ScopedFD();
   }
 
   int on = 1;
   if (setsockopt(fd.get(), SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0) {
-    PLOG(ERROR) << "setsockopt(SO_REUSEADDR) failed for multicast forwarder on "
-                << ifname << " for " << mcast_addr << ":" << port_;
+    PLOG(ERROR) << "setsockopt(SO_REUSEADDR) failed on " << ifname << " for "
+                << mcast_addr << ":" << port_;
     return base::ScopedFD();
   }
 
@@ -216,8 +212,8 @@
 
   if (bind(fd.get(), (const struct sockaddr*)&bind_addr,
            sizeof(struct sockaddr_storage)) < 0) {
-    PLOG(ERROR) << "bind(" << port_ << ") failed for multicast forwarder on "
-                << ifname << " for " << mcast_addr << ":" << port_;
+    PLOG(ERROR) << "bind(" << port_ << ") failed for on " << ifname << " for "
+                << mcast_addr << ":" << port_;
     return base::ScopedFD();
   }
 
@@ -322,7 +318,8 @@
   socklen_t expectlen = sa_family == AF_INET ? sizeof(struct sockaddr_in)
                                              : sizeof(struct sockaddr_in6);
   if (addrlen != expectlen) {
-    LOG(WARNING) << "recvfrom failed: unexpected src addr length " << addrlen;
+    LOG(WARNING) << "recvfrom failed: src addr length was " << addrlen
+                 << " but expected " << expectlen;
     return;
   }
 
@@ -390,7 +387,8 @@
   if (src_port == port_) {
     int lan_fd = lan_socket_.find(dst->sa_family)->second->fd.get();
     if (sendto(lan_fd, data, len, 0, dst, dst_len) < 0) {
-      PLOG(WARNING) << "sendto failed";
+      PLOG(WARNING) << "sendto " << *dst << " on " << lan_ifname_
+                    << " from port " << src_port << " failed";
       return false;
     }
     return true;
@@ -403,7 +401,7 @@
   strncpy(ifr.ifr_name, lan_ifname_.c_str(), IFNAMSIZ);
   if (setsockopt(temp_socket.fd(), SOL_SOCKET, SO_BINDTODEVICE, &ifr,
                  sizeof(ifr))) {
-    PLOG(ERROR) << "setsockopt(SOL_SOCKET) failed";
+    PLOG(ERROR) << "setsockopt(SO_BINDTODEVICE) failed";
     return false;
   }
 
@@ -417,6 +415,7 @@
     level = IPPROTO_IPV6;
     optname = IPV6_MULTICAST_LOOP;
   } else {
+    LOG(ERROR) << "Unexpected sa_family " << dst->sa_family;
     return false;
   }
   SetSockaddr(&bind_addr_storage, dst->sa_family, src_port, nullptr);
@@ -437,7 +436,12 @@
   if (!temp_socket.Bind(bind_addr, sizeof(struct sockaddr_storage)))
     return false;
 
-  return temp_socket.SendTo(data, len, dst, dst_len);
+  if (!temp_socket.SendTo(data, len, dst, dst_len)) {
+    PLOG(WARNING) << "sendto " << *dst << " on " << lan_ifname_ << " from port "
+                  << src_port << " failed";
+    return false;
+  }
+  return true;
 }
 
 bool MulticastForwarder::SendToGuests(const void* data,
@@ -455,7 +459,7 @@
 
     // Use already created multicast fd.
     if (sendto(fd, data, len, 0, dst, dst_len) < 0) {
-      PLOG(WARNING) << "sendto failed to " << socket.first.second;
+      PLOG(WARNING) << "sendto " << socket.first.second << " failed";
       success = false;
     }
   }