1 // Copyright (c) 2020 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "quiche/quic/qbone/bonnet/qbone_tunnel_info.h" 6 7 namespace quic { 8 GetAddress()9QuicIpAddress QboneTunnelInfo::GetAddress() { 10 QuicIpAddress no_address; 11 12 NetlinkInterface::LinkInfo link_info{}; 13 if (!netlink_->GetLinkInfo(ifname_, &link_info)) { 14 return no_address; 15 } 16 17 std::vector<NetlinkInterface::AddressInfo> addresses; 18 if (!netlink_->GetAddresses(link_info.index, 0, &addresses, nullptr)) { 19 return no_address; 20 } 21 22 quic::QuicIpAddress link_local_subnet; 23 if (!link_local_subnet.FromString("FE80::")) { 24 return no_address; 25 } 26 27 for (const auto& address : addresses) { 28 if (address.interface_address.IsInitialized() && 29 !link_local_subnet.InSameSubnet(address.interface_address, 10)) { 30 return address.interface_address; 31 } 32 } 33 34 return no_address; 35 } 36 37 } // namespace quic 38