patchpanel: ndproxy: assign public v6 addr to guest-facing ifs
Currently there is no public IPv6 address assigned on the
guest-facing interfaces (arc bridges and taps) when device is on
IPv6 network. This is causing Linux choosing a wrong src address
on packets directly originated from host to guest and drop the
returning traffic.
This patch generates an EUI-64 address based on virtual interface
MAC address upon receiving an RA, and add it to the interface.
BUG=chromium:1069985
TEST=unit;fuzz
TEST=manual(deploy on octopus and verify pinging penguin from host)
Change-Id: Id3ae953df6b3c84411461294bbc8dbd236cef901
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2428652
Tested-by: Taoyu Li <taoyl@chromium.org>
Reviewed-by: Garrick Evans <garrick@chromium.org>
Reviewed-by: Hugo Benichi <hugobenichi@google.com>
Commit-Queue: Taoyu Li <taoyl@chromium.org>
diff --git a/patchpanel/message_dispatcher.cc b/patchpanel/message_dispatcher.cc
index deba22d..b17cfee 100644
--- a/patchpanel/message_dispatcher.cc
+++ b/patchpanel/message_dispatcher.cc
@@ -32,6 +32,11 @@
failure_handler_ = handler;
}
+void MessageDispatcher::RegisterNDProxyMessageHandler(
+ const base::Callback<void(const NDProxyMessage&)>& handler) {
+ ndproxy_handler_ = handler;
+}
+
void MessageDispatcher::RegisterGuestMessageHandler(
const base::Callback<void(const GuestMessage&)>& handler) {
guest_handler_ = handler;
@@ -62,6 +67,10 @@
return;
}
+ if (msg_.has_ndproxy_message() && !ndproxy_handler_.is_null()) {
+ ndproxy_handler_.Run(msg_.ndproxy_message());
+ }
+
if (msg_.has_guest_message() && !guest_handler_.is_null()) {
guest_handler_.Run(msg_.guest_message());
}