| // Copyright 2024 The Chromium Authors | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef CHROMEOS_ASH_COMPONENTS_NETWORK_NETWORK_CONFIG_H_ | 
 | #define CHROMEOS_ASH_COMPONENTS_NETWORK_NETWORK_CONFIG_H_ | 
 |  | 
 | #include <memory> | 
 | #include <string> | 
 | #include <vector> | 
 |  | 
 | #include "base/component_export.h" | 
 | #include "net/base/ip_address.h" | 
 |  | 
 | namespace ash { | 
 |  | 
 | // This reflects the NetworkConfig dict on Service and contains information | 
 | // about the network layer configuration on this Service. All fields are | 
 | // optional so they can be empty. Also see platform2/shill/doc/service-api.txt | 
 | // in CrOS repo. | 
 | struct COMPONENT_EXPORT(CHROMEOS_NETWORK) NetworkConfig { | 
 |   // Represents an IP address with a prefix. | 
 |   struct IPCIDR { | 
 |     net::IPAddress addr; | 
 |     int prefix_len = 0; | 
 |   }; | 
 |  | 
 |   // Parse the NetworkConfig from the D-Bus |value| for the "NetworkConfig" | 
 |   // property on Service. Returns nullptr if |value| is an empty dict, otherwise | 
 |   // parses |value| in a best-effort way and returns a valid object. | 
 |   static std::unique_ptr<NetworkConfig> ParseFromServicePropertyValue( | 
 |       const base::Value& value); | 
 |  | 
 |   NetworkConfig(); | 
 |   ~NetworkConfig(); | 
 |  | 
 |   // NetworkConfig is neither copyable nor movable. | 
 |   NetworkConfig(const NetworkConfig&) = delete; | 
 |   NetworkConfig& operator=(const NetworkConfig&) = delete; | 
 |  | 
 |   // Assigned IPv4 address on the device for this network. | 
 |   std::optional<IPCIDR> ipv4_address; | 
 |   // IPv4 gateway on the network. | 
 |   std::optional<net::IPAddress> ipv4_gateway; | 
 |  | 
 |   // Assigned IPv6 addresses on the device for this network. | 
 |   std::vector<IPCIDR> ipv6_addresses; | 
 |   // IPv6 gateway on the network. | 
 |   std::optional<net::IPAddress> ipv6_gateway; | 
 |  | 
 |   // Name servers (both IPv4 and IPv6) and search domains. | 
 |   std::vector<net::IPAddress> dns_servers; | 
 |   std::vector<std::string> search_domains; | 
 |  | 
 |   // Maximum transmission unit. 0 means the default 1500 value is used by the | 
 |   // platform. | 
 |   int mtu = 0; | 
 |  | 
 |   // The prefixes for the destinations which should not or should be routed | 
 |   // via this network.These two properties are only meaningful for a VPN | 
 |   // network. | 
 |   std::vector<IPCIDR> included_routes; | 
 |   std::vector<IPCIDR> excluded_routes; | 
 | }; | 
 |  | 
 | }  // namespace ash | 
 |  | 
 | #endif  // CHROMEOS_ASH_COMPONENTS_NETWORK_NETWORK_CONFIG_H_ |