| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| module network.mojom; |
| |
| import "services/network/public/mojom/ip_address.mojom"; |
| |
| // The corresponds to a struct ifaddrmsg sent from the Linux kernel, see |
| // https://man7.org/linux/man-pages/man7/rtnetlink.7.html. |
| // Note that there is no way to validate any of these values, and so this should |
| // normally only be sent from a trusted process. |
| [EnableIf=use_network_interface_change_listener] |
| struct IfAddrMsg { |
| uint8 ifa_family; |
| uint8 ifa_prefixlen; |
| uint8 ifa_flags; |
| uint8 ifa_scope; |
| uint32 ifa_index; |
| }; |
| |
| // The counterpart to AddressMapOwnerLinux::AddressMap. |
| [EnableIf=use_network_interface_change_listener] |
| struct AddressMap { |
| // Mapped to an AddressMap. |
| map<network.mojom.IPAddress, IfAddrMsg> address_map; |
| }; |
| |
| // The counterpart to the std::unordered_set<int> of online links maintained in |
| // AddressMapOwnerLinux. |
| [EnableIf=use_network_interface_change_listener] |
| struct OnlineLinks { |
| // Mapped to an std::unordered_set<int>. |
| array<int32> online_links; |
| }; |
| |
| // This data is necessary to initialize AddressMapCacheLinux, for example in the |
| // sandboxed network service where AddressTrackerLinux can't be used instead. |
| [EnableIf=use_network_interface_change_listener] |
| struct InitialAddressMap { |
| // The initial AddressMap. |
| AddressMap address_map; |
| // The initial online interfaces. |
| OnlineLinks online_links; |
| }; |
| |
| // Represents a diff of an AddressMap and a set of online links. |
| [EnableIf=use_network_interface_change_listener] |
| struct NetworkInterfaceChangeParams { |
| // Maps an IPAddress to null if the IPAddress has been removed from the map. |
| // Otherwise maps an IPAddress to an IfAddrMsg if the entry has been changed |
| // or added. |
| map<network.mojom.IPAddress, IfAddrMsg?> address_map; |
| // Maps an interface index to true if it has been added to the set, and false |
| // if it has been removed from the set. |
| map<int32, bool> online_links; |
| }; |
| |
| // Used to listen for changes to the network interfaces (e.g. updates received |
| // via netlink from the Linux kernel). |
| [EnableIf=use_network_interface_change_listener] |
| interface NetworkInterfaceChangeListener { |
| // Called when there is a change to the network interfaces. |
| OnNetworkInterfacesChanged(NetworkInterfaceChangeParams params); |
| }; |