Add pi4 and laptop

Pi's on 3 sides + 1 on the turret.  laptop will be the logger node at
some point in the future.

To do this, we need to edit the log file header again for the test
data...

Change-Id: I7a39d6644882e4c96dca1d689183295534d3aab4
diff --git a/aos/configuration.cc b/aos/configuration.cc
index 0a34b02..cef3876 100644
--- a/aos/configuration.cc
+++ b/aos/configuration.cc
@@ -785,7 +785,8 @@
   if (node == nullptr) {
     return true;
   }
-  return (channel->source_node()->string_view() == node->name()->string_view());
+  return (CHECK_NOTNULL(channel)->source_node()->string_view() ==
+          node->name()->string_view());
 }
 
 bool ChannelIsReadableOnNode(const Channel *channel, const Node *node) {
diff --git a/aos/events/event_loop.cc b/aos/events/event_loop.cc
index 2ffad3b..c03425e 100644
--- a/aos/events/event_loop.cc
+++ b/aos/events/event_loop.cc
@@ -399,6 +399,9 @@
     const Channel *channel = configuration::GetChannel(
         configuration(), "/aos", timing::Report::GetFullyQualifiedName(),
         name(), node());
+    CHECK(channel != nullptr) << ": Failed to look up {\"name\": \"/aos\", "
+                                 "\"type\": \"aos.timing.Report\"} on node "
+                              << FlatbufferToJson(node());
 
     // Since we are using a RawSender, validity isn't checked.  So check it
     // ourselves.
diff --git a/aos/events/logging/multinode_pingpong.json b/aos/events/logging/multinode_pingpong.json
index f1bcc54..1b1424e 100644
--- a/aos/events/logging/multinode_pingpong.json
+++ b/aos/events/logging/multinode_pingpong.json
@@ -1,7 +1,7 @@
 {
   "channels": [
     {
-      "name": "/aos/pi1",
+      "name": "/pi1/aos",
       "type": "aos.logging.LogMessageFbs",
       "source_node": "pi1",
       "frequency": 200,
@@ -9,7 +9,7 @@
       "max_size": 2048
     },
     {
-      "name": "/aos/pi2",
+      "name": "/pi2/aos",
       "type": "aos.logging.LogMessageFbs",
       "source_node": "pi2",
       "frequency": 200,
@@ -18,7 +18,7 @@
     },
     /* Logged on pi1 locally */
     {
-      "name": "/aos/pi1",
+      "name": "/pi1/aos",
       "type": "aos.timing.Report",
       "source_node": "pi1",
       "frequency": 50,
@@ -26,7 +26,7 @@
       "max_size": 2048
     },
     {
-      "name": "/aos/pi2",
+      "name": "/pi2/aos",
       "type": "aos.timing.Report",
       "source_node": "pi2",
       "frequency": 50,
@@ -73,42 +73,20 @@
   "maps": [
    {
       "match": {
-        "name": "/aos",
-        "type": "aos.logging.LogMessageFbs",
+        "name": "/aos*",
         "source_node": "pi1"
       },
       "rename": {
-        "name": "/aos/pi1"
+        "name": "/pi1/aos"
       }
     },
     {
       "match": {
-        "name": "/aos",
-        "type": "aos.logging.LogMessageFbs",
+        "name": "/aos*",
         "source_node": "pi2"
       },
       "rename": {
-        "name": "/aos/pi2"
-      }
-    },
-    {
-      "match": {
-        "name": "/aos",
-        "type": "aos.timing.Report",
-        "source_node": "pi1"
-      },
-      "rename": {
-        "name": "/aos/pi1"
-      }
-    },
-    {
-      "match": {
-        "name": "/aos",
-        "type": "aos.timing.Report",
-        "source_node": "pi2"
-      },
-      "rename": {
-        "name": "/aos/pi2"
+        "name": "/pi2/aos"
       }
     }
   ],
diff --git a/aos/events/multinode_pingpong.json b/aos/events/multinode_pingpong.json
index 54cc658..e56d331 100644
--- a/aos/events/multinode_pingpong.json
+++ b/aos/events/multinode_pingpong.json
@@ -1,7 +1,7 @@
 {
   "channels": [
     {
-      "name": "/aos/pi1",
+      "name": "/pi1/aos",
       "type": "aos.logging.LogMessageFbs",
       "source_node": "pi1",
       "frequency": 200,
@@ -9,7 +9,7 @@
       "max_size": 2048
     },
     {
-      "name": "/aos/pi2",
+      "name": "/pi2/aos",
       "type": "aos.logging.LogMessageFbs",
       "source_node": "pi2",
       "frequency": 200,
@@ -17,7 +17,7 @@
       "max_size": 2048
     },
     {
-      "name": "/aos/pi3",
+      "name": "/pi3/aos",
       "type": "aos.logging.LogMessageFbs",
       "source_node": "pi3",
       "frequency": 200,
@@ -25,7 +25,7 @@
       "max_size": 2048
     },
     {
-      "name": "/aos/pi1",
+      "name": "/pi1/aos",
       "type": "aos.message_bridge.Timestamp",
       "source_node": "pi1",
       "frequency": 10,
@@ -45,7 +45,7 @@
       ]
     },
     {
-      "name": "/aos/pi2",
+      "name": "/pi2/aos",
       "type": "aos.message_bridge.Timestamp",
       "source_node": "pi2",
       "frequency": 10,
@@ -60,7 +60,7 @@
       ]
     },
     {
-      "name": "/aos/pi3",
+      "name": "/pi3/aos",
       "type": "aos.message_bridge.Timestamp",
       "source_node": "pi3",
       "frequency": 10,
@@ -75,43 +75,43 @@
       ]
     },
     {
-      "name": "/aos/pi1",
+      "name": "/pi1/aos",
       "type": "aos.message_bridge.ServerStatistics",
       "source_node": "pi1",
       "frequency": 2
     },
     {
-      "name": "/aos/pi2",
+      "name": "/pi2/aos",
       "type": "aos.message_bridge.ServerStatistics",
       "source_node": "pi2",
       "frequency": 2
     },
     {
-      "name": "/aos/pi3",
+      "name": "/pi3/aos",
       "type": "aos.message_bridge.ServerStatistics",
       "source_node": "pi3",
       "frequency": 2
     },
     {
-      "name": "/aos/pi1",
+      "name": "/pi1/aos",
       "type": "aos.message_bridge.ClientStatistics",
       "source_node": "pi1",
       "frequency": 2
     },
     {
-      "name": "/aos/pi2",
+      "name": "/pi2/aos",
       "type": "aos.message_bridge.ClientStatistics",
       "source_node": "pi2",
       "frequency": 2
     },
     {
-      "name": "/aos/pi3",
+      "name": "/pi3/aos",
       "type": "aos.message_bridge.ClientStatistics",
       "source_node": "pi3",
       "frequency": 2
     },
     {
-      "name": "/aos/pi1",
+      "name": "/pi1/aos",
       "type": "aos.timing.Report",
       "source_node": "pi1",
       "frequency": 50,
@@ -119,7 +119,7 @@
       "max_size": 2048
     },
     {
-      "name": "/aos/pi2",
+      "name": "/pi2/aos",
       "type": "aos.timing.Report",
       "source_node": "pi2",
       "frequency": 50,
@@ -127,7 +127,7 @@
       "max_size": 2048
     },
     {
-      "name": "/aos/pi3",
+      "name": "/pi3/aos",
       "type": "aos.timing.Report",
       "source_node": "pi3",
       "frequency": 50,
@@ -190,29 +190,29 @@
   "maps": [
     {
       "match": {
-        "name": "/aos",
+        "name": "/aos*",
         "source_node": "pi1"
       },
       "rename": {
-        "name": "/aos/pi1"
+        "name": "/pi1/aos"
       }
     },
     {
       "match": {
-        "name": "/aos",
+        "name": "/aos*",
         "source_node": "pi2"
       },
       "rename": {
-        "name": "/aos/pi2"
+        "name": "/pi2/aos"
       }
     },
     {
       "match": {
-        "name": "/aos",
+        "name": "/aos*",
         "source_node": "pi3"
       },
       "rename": {
-        "name": "/aos/pi3"
+        "name": "/pi3/aos"
       }
     }
   ],
diff --git a/aos/network/message_bridge_test.cc b/aos/network/message_bridge_test.cc
index c1dd1ca..27bed82 100644
--- a/aos/network/message_bridge_test.cc
+++ b/aos/network/message_bridge_test.cc
@@ -97,7 +97,7 @@
   int ping_count = 0;
   int pi1_server_statistics_count = 0;
   ping_event_loop.MakeWatcher(
-      "/aos/pi1",
+      "/pi1/aos",
       [&ping_count, &pi2_client_event_loop, &ping_sender,
        &pi1_server_statistics_count](const ServerStatistics &stats) {
         LOG(INFO) << FlatbufferToJson(&stats);
@@ -139,7 +139,7 @@
   // Confirm both client and server statistics messages have decent offsets in
   // them.
   int pi2_server_statistics_count = 0;
-  pong_event_loop.MakeWatcher("/aos/pi2", [&pi2_server_statistics_count](
+  pong_event_loop.MakeWatcher("/pi2/aos", [&pi2_server_statistics_count](
                                               const ServerStatistics &stats) {
     LOG(INFO) << FlatbufferToJson(&stats);
     for (const ServerConnection *connection : *stats.connections()) {
@@ -157,7 +157,7 @@
 
   int pi1_client_statistics_count = 0;
   ping_event_loop.MakeWatcher(
-      "/aos/pi1", [&pi1_client_statistics_count](const ClientStatistics &stats) {
+      "/pi1/aos", [&pi1_client_statistics_count](const ClientStatistics &stats) {
         LOG(INFO) << FlatbufferToJson(&stats);
 
         for (const ClientConnection *connection : *stats.connections()) {
@@ -176,7 +176,7 @@
       });
 
   int pi2_client_statistics_count = 0;
-  pong_event_loop.MakeWatcher("/aos/pi2", [&pi2_client_statistics_count](
+  pong_event_loop.MakeWatcher("/pi2/aos", [&pi2_client_statistics_count](
                                               const ClientStatistics &stats) {
     LOG(INFO) << FlatbufferToJson(&stats);
 
@@ -191,11 +191,11 @@
     }
   });
 
-  ping_event_loop.MakeWatcher("/aos/pi1", [](const Timestamp &timestamp) {
+  ping_event_loop.MakeWatcher("/pi1/aos", [](const Timestamp &timestamp) {
     EXPECT_TRUE(timestamp.has_offsets());
     LOG(INFO) << FlatbufferToJson(&timestamp);
   });
-  pong_event_loop.MakeWatcher("/aos/pi2", [](const Timestamp &timestamp) {
+  pong_event_loop.MakeWatcher("/pi2/aos", [](const Timestamp &timestamp) {
     EXPECT_TRUE(timestamp.has_offsets());
     LOG(INFO) << FlatbufferToJson(&timestamp);
   });
diff --git a/aos/network/message_bridge_test_common.json b/aos/network/message_bridge_test_common.json
index 1767c4c..1092e4b 100644
--- a/aos/network/message_bridge_test_common.json
+++ b/aos/network/message_bridge_test_common.json
@@ -1,7 +1,7 @@
 {
   "channels": [
     {
-      "name": "/aos/pi1",
+      "name": "/pi1/aos",
       "type": "aos.logging.LogMessageFbs",
       "source_node": "pi1",
       "frequency": 200,
@@ -9,7 +9,7 @@
       "max_size": 2048
     },
     {
-      "name": "/aos/pi2",
+      "name": "/pi2/aos",
       "type": "aos.logging.LogMessageFbs",
       "source_node": "pi2",
       "frequency": 200,
@@ -17,7 +17,7 @@
       "max_size": 2048
     },
     {
-      "name": "/aos/pi1",
+      "name": "/pi1/aos",
       "type": "aos.message_bridge.Timestamp",
       "source_node": "pi1",
       "frequency": 10,
@@ -30,7 +30,7 @@
       ]
     },
     {
-      "name": "/aos/pi2",
+      "name": "/pi2/aos",
       "type": "aos.message_bridge.Timestamp",
       "source_node": "pi2",
       "frequency": 10,
@@ -43,45 +43,45 @@
       ]
     },
     {
-      "name": "/aos/pi1_forwarded",
+      "name": "/pi1_forwarded/aos",
       "type": "aos.message_bridge.Timestamp",
       "source_node": "pi2",
       "frequency": 10,
       "max_size": 200
     },
     {
-      "name": "/aos/pi2_forwarded",
+      "name": "/pi2_forwarded/aos",
       "type": "aos.message_bridge.Timestamp",
       "source_node": "pi1",
       "frequency": 10,
       "max_size": 200
     },
     {
-      "name": "/aos/pi1",
+      "name": "/pi1/aos",
       "type": "aos.message_bridge.ServerStatistics",
       "source_node": "pi1",
       "frequency": 2
     },
     {
-      "name": "/aos/pi2",
+      "name": "/pi2/aos",
       "type": "aos.message_bridge.ServerStatistics",
       "source_node": "pi2",
       "frequency": 2
     },
     {
-      "name": "/aos/pi1",
+      "name": "/pi1/aos",
       "type": "aos.message_bridge.ClientStatistics",
       "source_node": "pi1",
       "frequency": 2
     },
     {
-      "name": "/aos/pi2",
+      "name": "/pi2/aos",
       "type": "aos.message_bridge.ClientStatistics",
       "source_node": "pi2",
       "frequency": 2
     },
     {
-      "name": "/aos/pi1",
+      "name": "/pi1/aos",
       "type": "aos.timing.Report",
       "source_node": "pi1",
       "frequency": 50,
@@ -89,7 +89,7 @@
       "max_size": 2048
     },
     {
-      "name": "/aos/pi2",
+      "name": "/pi2/aos",
       "type": "aos.timing.Report",
       "source_node": "pi2",
       "frequency": 50,
@@ -137,7 +137,7 @@
         "source_node": "pi1"
       },
       "rename": {
-        "name": "/aos/pi1"
+        "name": "/pi1/aos"
       }
     },
     {
@@ -146,7 +146,7 @@
         "source_node": "pi2"
       },
       "rename": {
-        "name": "/aos/pi2"
+        "name": "/pi2/aos"
       }
     },
     {
@@ -161,20 +161,20 @@
     },
     {
       "match": {
-        "name": "/aos/pi1",
+        "name": "/pi1/aos",
         "source_node": "pi2"
       },
       "rename": {
-        "name": "/aos/pi1_forwarded"
+        "name": "/pi1_forwarded/aos"
       }
     },
     {
       "match": {
-        "name": "/aos/pi2",
+        "name": "/pi2/aos",
         "source_node": "pi1"
       },
       "rename": {
-        "name": "/aos/pi2_forwarded"
+        "name": "/pi2_forwarded/aos"
       }
     }
   ]