Merge "Set context to defined value OnRun"
diff --git a/aos/events/event_loop.cc b/aos/events/event_loop.cc
index 29e4c22..b0487d5 100644
--- a/aos/events/event_loop.cc
+++ b/aos/events/event_loop.cc
@@ -493,6 +493,19 @@
   return result;
 }
 
+void EventLoop::SetTimerContext(
+    monotonic_clock::time_point monotonic_event_time) {
+  context_.monotonic_event_time = monotonic_event_time;
+  context_.monotonic_remote_time = monotonic_clock::min_time;
+  context_.realtime_event_time = realtime_clock::min_time;
+  context_.realtime_remote_time = realtime_clock::min_time;
+  context_.queue_index = 0xffffffffu;
+  context_.size = 0u;
+  context_.data = nullptr;
+  context_.buffer_index = -1;
+  context_.source_boot_uuid = boot_uuid();
+}
+
 void WatcherState::set_timing_report(timing::Watcher *watcher) {
   CHECK_NOTNULL(watcher);
   watcher_ = watcher;
diff --git a/aos/events/event_loop.h b/aos/events/event_loop.h
index 7cb6a5a..8ef8d57 100644
--- a/aos/events/event_loop.h
+++ b/aos/events/event_loop.h
@@ -76,7 +76,7 @@
 
   // UUID of the remote node which sent this message, or this node in the case
   // of events which are local to this node.
-  UUID remote_boot_uuid = UUID::Zero();
+  UUID source_boot_uuid = UUID::Zero();
 
   // Efficiently copies the flatbuffer into a FlatbufferVector, allocating
   // memory in the process.  It is vital that T matches the type of the
@@ -154,7 +154,7 @@
   bool Send(size_t size);
   bool Send(size_t size, monotonic_clock::time_point monotonic_remote_time,
             realtime_clock::time_point realtime_remote_time,
-            uint32_t remote_queue_index, const UUID &remote_boot_uuid);
+            uint32_t remote_queue_index, const UUID &source_boot_uuid);
 
   // Sends a single block of data by copying it.
   // The remote arguments have the same meaning as in Send above.
@@ -162,7 +162,7 @@
   bool Send(const void *data, size_t size,
             monotonic_clock::time_point monotonic_remote_time,
             realtime_clock::time_point realtime_remote_time,
-            uint32_t remote_queue_index, const UUID &remote_boot_uuid);
+            uint32_t remote_queue_index, const UUID &source_boot_uuid);
 
   const Channel *channel() const { return channel_; }
 
@@ -203,12 +203,12 @@
                       monotonic_clock::time_point monotonic_remote_time,
                       realtime_clock::time_point realtime_remote_time,
                       uint32_t remote_queue_index,
-                      const UUID &remote_boot_uuid) = 0;
+                      const UUID &source_boot_uuid) = 0;
   virtual bool DoSend(size_t size,
                       monotonic_clock::time_point monotonic_remote_time,
                       realtime_clock::time_point realtime_remote_time,
                       uint32_t remote_queue_index,
-                      const UUID &remote_boot_uuid) = 0;
+                      const UUID &source_boot_uuid) = 0;
 
   EventLoop *const event_loop_;
   const Channel *const channel_;
@@ -739,6 +739,10 @@
   // If true, don't send AOS_LOG to /aos
   bool skip_logger_ = false;
 
+  // Sets context_ for a timed event which is supposed to happen at the provided
+  // time.
+  void SetTimerContext(monotonic_clock::time_point monotonic_event_time);
+
  private:
   virtual pid_t GetTid() = 0;
 
diff --git a/aos/events/event_loop_param_test.cc b/aos/events/event_loop_param_test.cc
index 2ffcb58..1460663 100644
--- a/aos/events/event_loop_param_test.cc
+++ b/aos/events/event_loop_param_test.cc
@@ -274,7 +274,7 @@
   EXPECT_EQ(fetcher.context().monotonic_remote_time, monotonic_clock::min_time);
   EXPECT_EQ(fetcher.context().realtime_event_time, realtime_clock::min_time);
   EXPECT_EQ(fetcher.context().realtime_remote_time, realtime_clock::min_time);
-  EXPECT_EQ(fetcher.context().remote_boot_uuid, UUID::Zero());
+  EXPECT_EQ(fetcher.context().source_boot_uuid, UUID::Zero());
   EXPECT_EQ(fetcher.context().queue_index, 0xffffffffu);
   EXPECT_EQ(fetcher.context().size, 0u);
   EXPECT_EQ(fetcher.context().data, nullptr);
@@ -302,7 +302,7 @@
   EXPECT_LE(fetcher.context().monotonic_event_time, monotonic_now + kEpsilon);
   EXPECT_GE(fetcher.context().realtime_event_time, realtime_now - kEpsilon);
   EXPECT_LE(fetcher.context().realtime_event_time, realtime_now + kEpsilon);
-  EXPECT_EQ(fetcher.context().remote_boot_uuid, loop2->boot_uuid());
+  EXPECT_EQ(fetcher.context().source_boot_uuid, loop2->boot_uuid());
   EXPECT_EQ(fetcher.context().queue_index, 0x0u);
   EXPECT_EQ(fetcher.context().size, 20u);
   EXPECT_NE(fetcher.context().data, nullptr);
@@ -957,7 +957,7 @@
     EXPECT_EQ(loop->context().monotonic_remote_time, monotonic_clock::min_time);
     EXPECT_EQ(loop->context().realtime_event_time, realtime_clock::min_time);
     EXPECT_EQ(loop->context().realtime_remote_time, realtime_clock::min_time);
-    EXPECT_EQ(loop->context().remote_boot_uuid, loop->boot_uuid());
+    EXPECT_EQ(loop->context().source_boot_uuid, loop->boot_uuid());
     EXPECT_EQ(loop->context().queue_index, 0xffffffffu);
     EXPECT_EQ(loop->context().size, 0u);
     EXPECT_EQ(loop->context().data, nullptr);
@@ -1252,7 +1252,7 @@
               loop1->context().monotonic_event_time);
     EXPECT_EQ(loop1->context().realtime_remote_time,
               loop1->context().realtime_event_time);
-    EXPECT_EQ(loop1->context().remote_boot_uuid, loop1->boot_uuid());
+    EXPECT_EQ(loop1->context().source_boot_uuid, loop1->boot_uuid());
 
     const aos::monotonic_clock::time_point monotonic_now =
         loop1->monotonic_now();
@@ -1300,7 +1300,7 @@
             fetcher.context().realtime_remote_time);
   EXPECT_EQ(fetcher.context().monotonic_event_time,
             fetcher.context().monotonic_remote_time);
-  EXPECT_EQ(fetcher.context().remote_boot_uuid, loop1->boot_uuid());
+  EXPECT_EQ(fetcher.context().source_boot_uuid, loop1->boot_uuid());
 
   EXPECT_TRUE(monotonic_time_offset > ::std::chrono::milliseconds(-500))
       << ": Got "
@@ -1353,7 +1353,7 @@
               loop1->context().monotonic_event_time);
     EXPECT_EQ(loop1->context().realtime_remote_time,
               loop1->context().realtime_event_time);
-    EXPECT_EQ(loop1->context().remote_boot_uuid, loop1->boot_uuid());
+    EXPECT_EQ(loop1->context().source_boot_uuid, loop1->boot_uuid());
 
     const aos::monotonic_clock::time_point monotonic_now =
         loop1->monotonic_now();
@@ -1387,7 +1387,7 @@
             fetcher.context().realtime_remote_time);
   EXPECT_EQ(fetcher.context().monotonic_event_time,
             fetcher.context().monotonic_remote_time);
-  EXPECT_EQ(fetcher.context().remote_boot_uuid, loop1->boot_uuid());
+  EXPECT_EQ(fetcher.context().source_boot_uuid, loop1->boot_uuid());
 
   EXPECT_TRUE(monotonic_time_offset > ::std::chrono::milliseconds(-500))
       << ": Got "
@@ -1445,7 +1445,7 @@
 
             EXPECT_EQ(loop1->context().monotonic_remote_time,
                       monotonic_clock::min_time);
-            EXPECT_EQ(loop1->context().remote_boot_uuid, loop1->boot_uuid());
+            EXPECT_EQ(loop1->context().source_boot_uuid, loop1->boot_uuid());
             EXPECT_EQ(loop1->context().realtime_event_time,
                       realtime_clock::min_time);
             EXPECT_EQ(loop1->context().realtime_remote_time,
@@ -1956,7 +1956,7 @@
   const aos::realtime_clock::time_point realtime_remote_time =
       aos::realtime_clock::time_point(chrono::seconds(3132));
   const uint32_t remote_queue_index = 0x254971;
-  const UUID remote_boot_uuid = UUID::Random();
+  const UUID source_boot_uuid = UUID::Random();
 
   std::unique_ptr<aos::RawSender> sender =
       loop1->MakeRawSender(configuration::GetChannel(
@@ -1969,20 +1969,20 @@
   loop2->OnRun([&]() {
     EXPECT_TRUE(sender->Send(kMessage.span().data(), kMessage.span().size(),
                              monotonic_remote_time, realtime_remote_time,
-                             remote_queue_index, remote_boot_uuid));
+                             remote_queue_index, source_boot_uuid));
   });
 
   bool happened = false;
   loop2->MakeRawWatcher(
       configuration::GetChannel(loop2->configuration(), "/test",
                                 "aos.TestMessage", "", nullptr),
-      [this, monotonic_remote_time, realtime_remote_time, remote_boot_uuid,
+      [this, monotonic_remote_time, realtime_remote_time, source_boot_uuid,
        remote_queue_index, &fetcher,
        &happened](const Context &context, const void * /*message*/) {
         happened = true;
         EXPECT_EQ(monotonic_remote_time, context.monotonic_remote_time);
         EXPECT_EQ(realtime_remote_time, context.realtime_remote_time);
-        EXPECT_EQ(remote_boot_uuid, context.remote_boot_uuid);
+        EXPECT_EQ(source_boot_uuid, context.source_boot_uuid);
         EXPECT_EQ(remote_queue_index, context.remote_queue_index);
 
         ASSERT_TRUE(fetcher->Fetch());
@@ -2212,6 +2212,35 @@
   Run();
 }
 
+// Tests that event loop's context's monotonic time is set to a value on OnRun.
+TEST_P(AbstractEventLoopTest, SetContextOnRun) {
+  auto loop = MakePrimary();
+
+  // We want to check that monotonic event time is before monotonic now
+  // called inside of callback, but after time point obtained callback.
+  aos::monotonic_clock::time_point monotonic_event_time_on_run;
+
+  loop->OnRun([&]() {
+    monotonic_event_time_on_run = loop->context().monotonic_event_time;
+    EXPECT_LE(monotonic_event_time_on_run, loop->monotonic_now());
+    EXPECT_EQ(loop->context().monotonic_remote_time, monotonic_clock::min_time);
+    EXPECT_EQ(loop->context().realtime_event_time, realtime_clock::min_time);
+    EXPECT_EQ(loop->context().realtime_remote_time, realtime_clock::min_time);
+    EXPECT_EQ(loop->context().source_boot_uuid, loop->boot_uuid());
+    EXPECT_EQ(loop->context().queue_index, 0xffffffffu);
+    EXPECT_EQ(loop->context().size, 0u);
+    EXPECT_EQ(loop->context().data, nullptr);
+    EXPECT_EQ(loop->context().buffer_index, -1);
+  });
+
+  EndEventLoop(loop.get(), ::std::chrono::milliseconds(200));
+
+  const aos::monotonic_clock::time_point before_run_time =
+      loop->monotonic_now();
+  Run();
+  EXPECT_GE(monotonic_event_time_on_run, before_run_time);
+}
+
 // Tests that watchers fail when created on the wrong node.
 TEST_P(AbstractEventLoopDeathTest, NodeWatcher) {
   EnableNodes("them");
diff --git a/aos/events/event_loop_tmpl.h b/aos/events/event_loop_tmpl.h
index e4e879f..c509170 100644
--- a/aos/events/event_loop_tmpl.h
+++ b/aos/events/event_loop_tmpl.h
@@ -182,15 +182,7 @@
   CHECK_NOTNULL(timing_.timer);
   const monotonic_clock::time_point monotonic_start_time = get_time();
 
-  event_loop_->context_.monotonic_event_time = event_time;
-  event_loop_->context_.monotonic_remote_time = monotonic_clock::min_time;
-  event_loop_->context_.realtime_remote_time =
-      event_loop_->context_.realtime_event_time = realtime_clock::min_time;
-  event_loop_->context_.queue_index = 0xffffffffu;
-  event_loop_->context_.size = 0;
-  event_loop_->context_.data = nullptr;
-  event_loop_->context_.buffer_index = -1;
-  event_loop_->context_.remote_boot_uuid = event_loop_->boot_uuid();
+  event_loop_->SetTimerContext(event_time);
 
   ftrace_.FormatMessage(
       "timer: %.*s: start now=%" PRId64 " event=%" PRId64,
@@ -228,15 +220,7 @@
   const monotonic_clock::time_point monotonic_start_time = get_time();
 
   // Update the context to hold the desired wakeup time.
-  event_loop_->context_.monotonic_event_time = phased_loop_.sleep_time();
-  event_loop_->context_.monotonic_remote_time = monotonic_clock::min_time;
-  event_loop_->context_.realtime_remote_time =
-      event_loop_->context_.realtime_event_time = realtime_clock::min_time;
-  event_loop_->context_.queue_index = 0xffffffffu;
-  event_loop_->context_.size = 0;
-  event_loop_->context_.data = nullptr;
-  event_loop_->context_.buffer_index = -1;
-  event_loop_->context_.remote_boot_uuid = event_loop_->boot_uuid();
+  event_loop_->SetTimerContext(phased_loop_.sleep_time());
 
   // Compute how many cycles elapsed
   cycles_elapsed_ += phased_loop_.Iterate(monotonic_start_time);
diff --git a/aos/events/logging/log_writer.cc b/aos/events/logging/log_writer.cc
index 6630441..abae9a1 100644
--- a/aos/events/logging/log_writer.cc
+++ b/aos/events/logging/log_writer.cc
@@ -713,7 +713,7 @@
         if (our_node_index != f.data_node_index) {
           // And update our boot UUID if the UUID has changed.
           if (node_state_[f.data_node_index].SetBootUUID(
-                  f.fetcher->context().remote_boot_uuid)) {
+                  f.fetcher->context().source_boot_uuid)) {
             MaybeWriteHeader(f.data_node_index);
           }
         }
diff --git a/aos/events/shm_event_loop.cc b/aos/events/shm_event_loop.cc
index 835210c..c70fef6 100644
--- a/aos/events/shm_event_loop.cc
+++ b/aos/events/shm_event_loop.cc
@@ -372,7 +372,7 @@
         queue_index.index(), &context_.monotonic_event_time,
         &context_.realtime_event_time, &context_.monotonic_remote_time,
         &context_.realtime_remote_time, &context_.remote_queue_index,
-        &context_.remote_boot_uuid, &context_.size, copy_buffer);
+        &context_.source_boot_uuid, &context_.size, copy_buffer);
 
     if (read_result == ipc_lib::LocklessQueueReader::Result::GOOD) {
       if (pin_data()) {
@@ -551,14 +551,14 @@
               aos::monotonic_clock::time_point monotonic_remote_time,
               aos::realtime_clock::time_point realtime_remote_time,
               uint32_t remote_queue_index,
-              const UUID &remote_boot_uuid) override {
+              const UUID &source_boot_uuid) override {
     shm_event_loop()->CheckCurrentThread();
     CHECK_LE(length, static_cast<size_t>(channel()->max_size()))
         << ": Sent too big a message on "
         << configuration::CleanedChannelToString(channel());
     CHECK(lockless_queue_sender_.Send(length, monotonic_remote_time,
                                       realtime_remote_time, remote_queue_index,
-                                      remote_boot_uuid, &monotonic_sent_time_,
+                                      source_boot_uuid, &monotonic_sent_time_,
                                       &realtime_sent_time_, &sent_queue_index_))
         << ": Somebody wrote outside the buffer of their message on channel "
         << configuration::CleanedChannelToString(channel());
@@ -572,14 +572,14 @@
               aos::monotonic_clock::time_point monotonic_remote_time,
               aos::realtime_clock::time_point realtime_remote_time,
               uint32_t remote_queue_index,
-              const UUID &remote_boot_uuid) override {
+              const UUID &source_boot_uuid) override {
     shm_event_loop()->CheckCurrentThread();
     CHECK_LE(length, static_cast<size_t>(channel()->max_size()))
         << ": Sent too big a message on "
         << configuration::CleanedChannelToString(channel());
     CHECK(lockless_queue_sender_.Send(
         reinterpret_cast<const char *>(msg), length, monotonic_remote_time,
-        realtime_remote_time, remote_queue_index, remote_boot_uuid,
+        realtime_remote_time, remote_queue_index, source_boot_uuid,
         &monotonic_sent_time_, &realtime_sent_time_, &sent_queue_index_))
         << ": Somebody wrote outside the buffer of their message on channel "
         << configuration::CleanedChannelToString(channel());
@@ -1118,6 +1118,7 @@
     }
 
     // Now that we are RT, run all the OnRun handlers.
+    SetTimerContext(monotonic_clock::now());
     for (const auto &run : on_run_) {
       run();
     }
diff --git a/aos/events/simulated_event_loop.cc b/aos/events/simulated_event_loop.cc
index 51021b6..4dc37fa 100644
--- a/aos/events/simulated_event_loop.cc
+++ b/aos/events/simulated_event_loop.cc
@@ -295,13 +295,13 @@
               aos::monotonic_clock::time_point monotonic_remote_time,
               aos::realtime_clock::time_point realtime_remote_time,
               uint32_t remote_queue_index,
-              const UUID &remote_boot_uuid) override;
+              const UUID &source_boot_uuid) override;
 
   bool DoSend(const void *msg, size_t size,
               aos::monotonic_clock::time_point monotonic_remote_time,
               aos::realtime_clock::time_point realtime_remote_time,
               uint32_t remote_queue_index,
-              const UUID &remote_boot_uuid) override;
+              const UUID &source_boot_uuid) override;
 
   int buffer_index() override {
     // First, ensure message_ is allocated.
@@ -542,6 +542,7 @@
     CHECK(!is_running()) << ": Cannot register OnRun callback while running.";
     scheduler_->ScheduleOnRun([this, on_run = std::move(on_run)]() {
       ScopedMarkRealtimeRestorer rt(priority() > 0);
+      SetTimerContext(monotonic_now());
       on_run();
     });
   }
@@ -852,7 +853,7 @@
                              monotonic_clock::time_point monotonic_remote_time,
                              realtime_clock::time_point realtime_remote_time,
                              uint32_t remote_queue_index,
-                             const UUID &remote_boot_uuid) {
+                             const UUID &source_boot_uuid) {
   // The allocations in here are due to infrastructure and don't count in the
   // no mallocs in RT code.
   ScopedNotRealtime nrt;
@@ -862,7 +863,7 @@
   message_->context.remote_queue_index = remote_queue_index;
   message_->context.realtime_event_time = event_loop_->realtime_now();
   message_->context.realtime_remote_time = realtime_remote_time;
-  message_->context.remote_boot_uuid = remote_boot_uuid;
+  message_->context.source_boot_uuid = source_boot_uuid;
   CHECK_LE(length, message_->context.size);
   message_->context.size = length;
 
@@ -882,7 +883,7 @@
                              monotonic_clock::time_point monotonic_remote_time,
                              realtime_clock::time_point realtime_remote_time,
                              uint32_t remote_queue_index,
-                             const UUID &remote_boot_uuid) {
+                             const UUID &source_boot_uuid) {
   CHECK_LE(size, this->size())
       << ": Attempting to send too big a message on "
       << configuration::CleanedChannelToString(simulated_channel_->channel());
@@ -899,7 +900,7 @@
          msg, size);
 
   return DoSend(size, monotonic_remote_time, realtime_remote_time,
-                remote_queue_index, remote_boot_uuid);
+                remote_queue_index, source_boot_uuid);
 }
 
 SimulatedTimerHandler::SimulatedTimerHandler(
diff --git a/aos/events/simulated_event_loop_test.cc b/aos/events/simulated_event_loop_test.cc
index 7191365..4cb51de 100644
--- a/aos/events/simulated_event_loop_test.cc
+++ b/aos/events/simulated_event_loop_test.cc
@@ -1492,13 +1492,13 @@
   pi1_remote_timestamp->MakeWatcher(
       "/pi2/aos", [&expected_boot_uuid,
                    &pi1_remote_timestamp](const message_bridge::Timestamp &) {
-        EXPECT_EQ(pi1_remote_timestamp->context().remote_boot_uuid,
+        EXPECT_EQ(pi1_remote_timestamp->context().source_boot_uuid,
                   expected_boot_uuid);
       });
   pi1_remote_timestamp->MakeWatcher(
       "/test",
       [&expected_boot_uuid, &pi1_remote_timestamp](const examples::Pong &) {
-        EXPECT_EQ(pi1_remote_timestamp->context().remote_boot_uuid,
+        EXPECT_EQ(pi1_remote_timestamp->context().source_boot_uuid,
                   expected_boot_uuid);
       });
   pi1_remote_timestamp->MakeWatcher(
diff --git a/aos/events/simulated_network_bridge.cc b/aos/events/simulated_network_bridge.cc
index 40b468f..11e8c56 100644
--- a/aos/events/simulated_network_bridge.cc
+++ b/aos/events/simulated_network_bridge.cc
@@ -137,7 +137,7 @@
                   fetcher_->context().monotonic_event_time,
                   fetcher_->context().realtime_event_time,
                   fetcher_->context().queue_index,
-                  fetcher_->context().remote_boot_uuid);
+                  fetcher_->context().source_boot_uuid);
 
     // And simulate message_bridge's offset recovery.
     client_status_->SampleFilter(client_index_,
diff --git a/aos/ipc_lib/lockless_queue.cc b/aos/ipc_lib/lockless_queue.cc
index 98701b4..fe86f6c 100644
--- a/aos/ipc_lib/lockless_queue.cc
+++ b/aos/ipc_lib/lockless_queue.cc
@@ -908,7 +908,7 @@
     const char *data, size_t length,
     monotonic_clock::time_point monotonic_remote_time,
     realtime_clock::time_point realtime_remote_time,
-    uint32_t remote_queue_index, const UUID &remote_boot_uuid,
+    uint32_t remote_queue_index, const UUID &source_boot_uuid,
     monotonic_clock::time_point *monotonic_sent_time,
     realtime_clock::time_point *realtime_sent_time, uint32_t *queue_index) {
   CHECK_LE(length, size());
@@ -917,14 +917,14 @@
   // adhere to this convention and place it at the end.
   memcpy((reinterpret_cast<char *>(Data()) + size() - length), data, length);
   return Send(length, monotonic_remote_time, realtime_remote_time,
-              remote_queue_index, remote_boot_uuid, monotonic_sent_time,
+              remote_queue_index, source_boot_uuid, monotonic_sent_time,
               realtime_sent_time, queue_index);
 }
 
 bool LocklessQueueSender::Send(
     size_t length, monotonic_clock::time_point monotonic_remote_time,
     realtime_clock::time_point realtime_remote_time,
-    uint32_t remote_queue_index, const UUID &remote_boot_uuid,
+    uint32_t remote_queue_index, const UUID &source_boot_uuid,
     monotonic_clock::time_point *monotonic_sent_time,
     realtime_clock::time_point *realtime_sent_time, uint32_t *queue_index) {
   const size_t queue_size = memory_->queue_size();
@@ -949,7 +949,7 @@
   // Pass these through.  Any alternative behavior can be implemented out a
   // layer.
   message->header.remote_queue_index = remote_queue_index;
-  message->header.remote_boot_uuid = remote_boot_uuid;
+  message->header.source_boot_uuid = source_boot_uuid;
   message->header.monotonic_remote_time = monotonic_remote_time;
   message->header.realtime_remote_time = realtime_remote_time;
 
@@ -1210,7 +1210,7 @@
     realtime_clock::time_point *realtime_sent_time,
     monotonic_clock::time_point *monotonic_remote_time,
     realtime_clock::time_point *realtime_remote_time,
-    uint32_t *remote_queue_index, UUID *remote_boot_uuid, size_t *length,
+    uint32_t *remote_queue_index, UUID *source_boot_uuid, size_t *length,
     char *data) const {
   const size_t queue_size = memory_->queue_size();
 
@@ -1294,7 +1294,7 @@
   }
   *monotonic_remote_time = m->header.monotonic_remote_time;
   *realtime_remote_time = m->header.realtime_remote_time;
-  *remote_boot_uuid = m->header.remote_boot_uuid;
+  *source_boot_uuid = m->header.source_boot_uuid;
   if (data) {
     memcpy(data, m->data(memory_->message_data_size()),
            memory_->message_data_size());
diff --git a/aos/ipc_lib/lockless_queue.h b/aos/ipc_lib/lockless_queue.h
index 41aa0fb..b0fc425 100644
--- a/aos/ipc_lib/lockless_queue.h
+++ b/aos/ipc_lib/lockless_queue.h
@@ -94,7 +94,7 @@
     uint32_t remote_queue_index;
 
     // Remote boot UUID for this message.
-    UUID remote_boot_uuid;
+    UUID source_boot_uuid;
 
     size_t length;
   } header;
@@ -309,7 +309,7 @@
   void *Data();
   bool Send(size_t length, monotonic_clock::time_point monotonic_remote_time,
             realtime_clock::time_point realtime_remote_time,
-            uint32_t remote_queue_index, const UUID &remote_boot_uuid,
+            uint32_t remote_queue_index, const UUID &source_boot_uuid,
             monotonic_clock::time_point *monotonic_sent_time = nullptr,
             realtime_clock::time_point *realtime_sent_time = nullptr,
             uint32_t *queue_index = nullptr);
@@ -318,7 +318,7 @@
   bool Send(const char *data, size_t length,
             monotonic_clock::time_point monotonic_remote_time,
             realtime_clock::time_point realtime_remote_time,
-            uint32_t remote_queue_index, const UUID &remote_boot_uuid,
+            uint32_t remote_queue_index, const UUID &source_boot_uuid,
             monotonic_clock::time_point *monotonic_sent_time = nullptr,
             realtime_clock::time_point *realtime_sent_time = nullptr,
             uint32_t *queue_index = nullptr);
@@ -404,7 +404,7 @@
               realtime_clock::time_point *realtime_sent_time,
               monotonic_clock::time_point *monotonic_remote_time,
               realtime_clock::time_point *realtime_remote_time,
-              uint32_t *remote_queue_index, UUID *remote_boot_uuid,
+              uint32_t *remote_queue_index, UUID *source_boot_uuid,
               size_t *length, char *data) const;
 
   // Returns the index to the latest queue message.  Returns empty_queue_index()
diff --git a/aos/ipc_lib/lockless_queue_death_test.cc b/aos/ipc_lib/lockless_queue_death_test.cc
index b521d9e..ae780b8 100644
--- a/aos/ipc_lib/lockless_queue_death_test.cc
+++ b/aos/ipc_lib/lockless_queue_death_test.cc
@@ -622,14 +622,14 @@
           monotonic_clock::time_point monotonic_remote_time;
           realtime_clock::time_point realtime_remote_time;
           uint32_t remote_queue_index;
-          UUID remote_boot_uuid;
+          UUID source_boot_uuid;
           char read_data[1024];
           size_t length;
 
           LocklessQueueReader::Result read_result = reader.Read(
               i, &monotonic_sent_time, &realtime_sent_time,
               &monotonic_remote_time, &realtime_remote_time,
-              &remote_queue_index, &remote_boot_uuid, &length, &(read_data[0]));
+              &remote_queue_index, &source_boot_uuid, &length, &(read_data[0]));
 
           if (read_result != LocklessQueueReader::Result::GOOD) {
             if (read_result == LocklessQueueReader::Result::TOO_OLD) {
diff --git a/aos/ipc_lib/lockless_queue_test.cc b/aos/ipc_lib/lockless_queue_test.cc
index 91f995b..57867e4 100644
--- a/aos/ipc_lib/lockless_queue_test.cc
+++ b/aos/ipc_lib/lockless_queue_test.cc
@@ -251,7 +251,7 @@
     monotonic_clock::time_point monotonic_remote_time;
     realtime_clock::time_point realtime_remote_time;
     uint32_t remote_queue_index;
-    UUID remote_boot_uuid;
+    UUID source_boot_uuid;
     char read_data[1024];
     size_t length;
 
@@ -264,7 +264,7 @@
     LocklessQueueReader::Result read_result = reader.Read(
         index.index(), &monotonic_sent_time, &realtime_sent_time,
         &monotonic_remote_time, &realtime_remote_time, &remote_queue_index,
-        &remote_boot_uuid, &length, &(read_data[0]));
+        &source_boot_uuid, &length, &(read_data[0]));
 
     // This should either return GOOD, or TOO_OLD if it is before the start of
     // the queue.
diff --git a/aos/ipc_lib/queue_racer.cc b/aos/ipc_lib/queue_racer.cc
index cf46807..d14a638 100644
--- a/aos/ipc_lib/queue_racer.cc
+++ b/aos/ipc_lib/queue_racer.cc
@@ -267,7 +267,7 @@
     realtime_clock::time_point realtime_sent_time;
     monotonic_clock::time_point monotonic_remote_time;
     realtime_clock::time_point realtime_remote_time;
-    UUID remote_boot_uuid;
+    UUID source_boot_uuid;
     uint32_t remote_queue_index;
     size_t length;
     char read_data[1024];
@@ -279,7 +279,7 @@
     LocklessQueueReader::Result read_result = reader.Read(
         wrapped_i, &monotonic_sent_time, &realtime_sent_time,
         &monotonic_remote_time, &realtime_remote_time, &remote_queue_index,
-        &remote_boot_uuid, &length, &(read_data[0]));
+        &source_boot_uuid, &length, &(read_data[0]));
 
     if (race_reads) {
       if (read_result == LocklessQueueReader::Result::NOTHING_NEW) {
@@ -302,7 +302,7 @@
 
     EXPECT_EQ(monotonic_remote_time, aos::monotonic_clock::min_time);
     EXPECT_EQ(realtime_remote_time, aos::realtime_clock::min_time);
-    EXPECT_EQ(remote_boot_uuid, UUID::Zero());
+    EXPECT_EQ(source_boot_uuid, UUID::Zero());
 
     ThreadPlusCount tpc;
     ASSERT_EQ(length, sizeof(ThreadPlusCount));
diff --git a/aos/network/message_bridge_server_lib.cc b/aos/network/message_bridge_server_lib.cc
index ea75693..c929e31 100644
--- a/aos/network/message_bridge_server_lib.cc
+++ b/aos/network/message_bridge_server_lib.cc
@@ -40,7 +40,7 @@
                        context.size);
 
   flatbuffers::Offset<flatbuffers::Vector<uint8_t>> boot_uuid_offset =
-      context.remote_boot_uuid.PackVector(&fbb);
+      context.source_boot_uuid.PackVector(&fbb);
 
   RemoteData::Builder remote_data_builder(fbb);
   remote_data_builder.add_channel_index(channel_index_);
diff --git a/aos/network/message_bridge_server_status.cc b/aos/network/message_bridge_server_status.cc
index 48b442a..a662990 100644
--- a/aos/network/message_bridge_server_status.cc
+++ b/aos/network/message_bridge_server_status.cc
@@ -359,7 +359,7 @@
   context.realtime_event_time = timestamp_sender_.realtime_sent_time();
   context.queue_index = timestamp_sender_.sent_queue_index();
   context.size = timestamp_copy.span().size();
-  context.remote_boot_uuid = event_loop_->boot_uuid();
+  context.source_boot_uuid = event_loop_->boot_uuid();
   context.data = timestamp_copy.span().data();
 
   // Since we are building up the timestamp to send here, we need to trigger the
diff --git a/aos/network/message_bridge_test.cc b/aos/network/message_bridge_test.cc
index 1953dc2..8222760 100644
--- a/aos/network/message_bridge_test.cc
+++ b/aos/network/message_bridge_test.cc
@@ -160,7 +160,7 @@
     pi1_test_event_loop->MakeWatcher(
         "/pi2/aos", [this](const Timestamp &timestamp) {
           VLOG(1) << "/pi2/aos Timestamp " << FlatbufferToJson(&timestamp);
-          EXPECT_EQ(pi1_test_event_loop->context().remote_boot_uuid,
+          EXPECT_EQ(pi1_test_event_loop->context().source_boot_uuid,
                     pi2_boot_uuid_);
         });
   }
@@ -275,7 +275,7 @@
     pi2_test_event_loop->MakeWatcher(
         "/pi1/aos", [this](const Timestamp &timestamp) {
           VLOG(1) << "/pi1/aos Timestamp " << FlatbufferToJson(&timestamp);
-          EXPECT_EQ(pi2_test_event_loop->context().remote_boot_uuid,
+          EXPECT_EQ(pi2_test_event_loop->context().source_boot_uuid,
                     pi1_boot_uuid_);
         });
     pi2_test_event_loop->MakeWatcher(
@@ -405,7 +405,7 @@
   int pong_count = 0;
   pong_event_loop.MakeWatcher("/test", [&pong_count, &pong_event_loop,
                                         this](const examples::Ping &ping) {
-    EXPECT_EQ(pong_event_loop.context().remote_boot_uuid, pi1_boot_uuid_);
+    EXPECT_EQ(pong_event_loop.context().source_boot_uuid, pi1_boot_uuid_);
     ++pong_count;
     VLOG(1) << "Got ping back " << FlatbufferToJson(&ping);
   });