arc: network: ndproxy: supports ULA
Supports unique local address in addition to global unicast address.
BUG=chromium:1059435
TEST=built and deployed to atlas
Change-Id: I37c2fd4f45b16d48e97096e69da9b564e2e2ed81
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2123704
Tested-by: Taoyu Li <taoyl@chromium.org>
Reviewed-by: Hugo Benichi <hugobenichi@google.com>
Commit-Queue: Taoyu Li <taoyl@chromium.org>
(cherry picked from commit 76d86582c58b4ed0254490c6a506b9c932d1527f)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2149728
diff --git a/arc/network/ndproxy.cc b/arc/network/ndproxy.cc
index dc3fb05..8e68aa3 100644
--- a/arc/network/ndproxy.cc
+++ b/arc/network/ndproxy.cc
@@ -294,7 +294,8 @@
IsGuestInterface(dst_addr.sll_ifindex) &&
!guest_discovery_handler_.is_null()) {
nd_neighbor_advert* na = reinterpret_cast<nd_neighbor_advert*>(icmp6);
- if ((na->nd_na_target.s6_addr[0] & 0xe0) == 0x20) { // Global Unicast
+ if (((na->nd_na_target.s6_addr[0] & 0xe0) == 0x20) // Global Unicast
+ || ((na->nd_na_target.s6_addr[0] & 0xfe) == 0xfc)) { // Unique Local
char ifname[IFNAMSIZ];
if_indextoname(dst_addr.sll_ifindex, ifname);
char ipv6_addr_str[INET6_ADDRSTRLEN];