| // Copyright (c) 2020 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "quic/qbone/bonnet/qbone_tunnel_info.h" |
| |
| namespace quic { |
| |
| QuicIpAddress QboneTunnelInfo::GetAddress() { |
| QuicIpAddress no_address; |
| |
| NetlinkInterface::LinkInfo link_info{}; |
| if (!netlink_->GetLinkInfo(ifname_, &link_info)) { |
| return no_address; |
| } |
| |
| std::vector<NetlinkInterface::AddressInfo> addresses; |
| if (!netlink_->GetAddresses(link_info.index, 0, &addresses, nullptr)) { |
| return no_address; |
| } |
| |
| quic::QuicIpAddress link_local_subnet; |
| if (!link_local_subnet.FromString("FE80::")) { |
| return no_address; |
| } |
| |
| for (const auto& address : addresses) { |
| if (address.interface_address.IsInitialized() && |
| !link_local_subnet.InSameSubnet(address.interface_address, 10)) { |
| return address.interface_address; |
| } |
| } |
| |
| return no_address; |
| } |
| |
| } // namespace quic |