//===----------------------------------------------------------------------===// // Copyright © 2025-2026 Apple Inc. and the Containerization project authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //===----------------------------------------------------------------------===// import ContainerizationExtras /// A network interface. public protocol Interface: Sendable { /// The interface IPv4 address and subnet prefix length, as a CIDR address. /// Example: `192.168.64.3/24` var ipv4Address: CIDRv4 { get } /// The IPv4 gateway address for the default route, or nil for no IPv4 default route. var ipv4Gateway: IPv4Address? { get } /// The interface IPv6 address and subnet prefix length, as a CIDRv6 address, or nil for no IPv6 address. /// Example: `fd00::1/64` var ipv6Address: CIDRv6? { get } /// The IPv6 gateway address for the default route, or nil for no IPv6 default route. var ipv6Gateway: IPv6Address? { get } /// The interface MAC address, or nil to auto-configure the address. var macAddress: MACAddress? { get } /// The interface MTU (Maximum Transmission Unit). var mtu: UInt32 { get } } extension Interface { public var mtu: UInt32 { 1500 } public var ipv6Address: CIDRv6? { nil } public var ipv6Gateway: IPv6Address? { nil } }