xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/qbone/bonnet/qbone_tunnel_info.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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()9 QuicIpAddress 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