# coding=utf-8
# *** WARNING: this file was generated by pulumi-language-python. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import builtins as _builtins
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from . import _utilities

__all__ = ['NetworkArgs', 'Network']

@pulumi.input_type
class NetworkArgs:
    def __init__(__self__, *,
                 purpose: pulumi.Input[_builtins.str],
                 dhcp_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 dhcp_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_lease: Optional[pulumi.Input[_builtins.int]] = None,
                 dhcp_relay_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_start: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcp_stop: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcp_v6_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 dhcp_v6_dns_auto: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_v6_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_v6_lease: Optional[pulumi.Input[_builtins.int]] = None,
                 dhcp_v6_start: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcp_v6_stop: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcpd_boot_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcpd_boot_filename: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcpd_boot_server: Optional[pulumi.Input[_builtins.str]] = None,
                 domain_name: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 igmp_snooping: Optional[pulumi.Input[_builtins.bool]] = None,
                 internet_access_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 ipv6_interface_type: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_interface: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_prefixid: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_start: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_stop: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_ra_enable: Optional[pulumi.Input[_builtins.bool]] = None,
                 ipv6_ra_preferred_lifetime: Optional[pulumi.Input[_builtins.int]] = None,
                 ipv6_ra_priority: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_ra_valid_lifetime: Optional[pulumi.Input[_builtins.int]] = None,
                 ipv6_static_subnet: Optional[pulumi.Input[_builtins.str]] = None,
                 multicast_dns: Optional[pulumi.Input[_builtins.bool]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 network_group: Optional[pulumi.Input[_builtins.str]] = None,
                 network_isolation_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 site: Optional[pulumi.Input[_builtins.str]] = None,
                 subnet: Optional[pulumi.Input[_builtins.str]] = None,
                 vlan_id: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_dhcp_v6_pd_size: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 wan_egress_qos: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_gateway: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_gateway_v6: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_ip: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_ipv6: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_netmask: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_networkgroup: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_prefixlen: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_type: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_type_v6: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_username: Optional[pulumi.Input[_builtins.str]] = None,
                 x_wan_password: Optional[pulumi.Input[_builtins.str]] = None):
        """
        The set of arguments for constructing a Network resource.
        :param pulumi.Input[_builtins.str] purpose: The purpose/type of the network. Must be one of:
               * `corporate` - Standard network for corporate use with full access
               * `guest` - Isolated network for guest access with limited permissions
               * `wan` - External network connection (WAN uplink)
               * `vlan-only` - VLAN network without DHCP services
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] dhcp_dns: List of IPv4 DNS server addresses to be provided to DHCP clients. Examples:
               * Use ['8.8.8.8', '8.8.4.4'] for Google DNS
               * Use ['1.1.1.1', '1.0.0.1'] for Cloudflare DNS
               * Use internal DNS servers for corporate networks
               Maximum 4 servers can be specified.
        :param pulumi.Input[_builtins.bool] dhcp_enabled: Controls whether DHCP server is enabled for this network. When enabled:
               * The network will automatically assign IP addresses to clients
               * DHCP options (DNS, lease time) will be provided to clients
               * Static IP assignments can still be made outside the DHCP range
        :param pulumi.Input[_builtins.int] dhcp_lease: The DHCP lease time in seconds. Common values:
               * 86400 (1 day) - Default, suitable for most networks
               * 3600 (1 hour) - For testing or temporary networks
               * 604800 (1 week) - For stable networks with static clients
               * 2592000 (30 days) - For very stable networks
        :param pulumi.Input[_builtins.bool] dhcp_relay_enabled: Enables DHCP relay for this network. When enabled:
               * DHCP requests are forwarded to an external DHCP server
               * Local DHCP server is disabled
               * Useful for centralized DHCP management
        :param pulumi.Input[_builtins.str] dhcp_start: The starting IPv4 address of the DHCP range. Examples:
               * For subnet 192.168.1.0/24, typical start: '192.168.1.100'
               * For subnet 10.0.0.0/24, typical start: '10.0.0.100'
               Ensure this address is within the network's subnet.
        :param pulumi.Input[_builtins.str] dhcp_stop: The ending IPv4 address of the DHCP range. Examples:
               * For subnet 192.168.1.0/24, typical stop: '192.168.1.254'
               * For subnet 10.0.0.0/24, typical stop: '10.0.0.254'
               Must be greater than dhcp_start and within the network's subnet.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] dhcp_v6_dns: List of IPv6 DNS server addresses for DHCPv6 clients. Examples:
               * Use ['2001:4860:4860::8888', '2001:4860:4860::8844'] for Google DNS
               * Use ['2606:4700:4700::1111', '2606:4700:4700::1001'] for Cloudflare DNS
               Only used when dhcp_v6_dns_auto is false. Maximum of 4 addresses are allowed.
        :param pulumi.Input[_builtins.bool] dhcp_v6_dns_auto: Controls DNS server source for DHCPv6 clients:
               * true - Use upstream DNS servers (recommended)
               * false - Use manually specified servers from dhcp_v6_dns
               Default is true for easier management.
        :param pulumi.Input[_builtins.bool] dhcp_v6_enabled: Enables stateful DHCPv6 for IPv6 address assignment. When enabled:
               * Provides IPv6 addresses to clients
               * Works alongside SLAAC if configured
               * Allows for more controlled IPv6 addressing
        :param pulumi.Input[_builtins.int] dhcp_v6_lease: The DHCPv6 lease time in seconds. Common values:
               * 86400 (1 day) - Default setting
               * 3600 (1 hour) - For testing
               * 604800 (1 week) - For stable networks
               Typically longer than IPv4 DHCP leases.
        :param pulumi.Input[_builtins.str] dhcp_v6_start: The starting IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
               Must be a valid IPv6 address within your allocated IPv6 subnet.
        :param pulumi.Input[_builtins.str] dhcp_v6_stop: The ending IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
               Must be after dhcp_v6_start in the IPv6 address space.
        :param pulumi.Input[_builtins.bool] dhcpd_boot_enabled: Enables DHCP boot options for PXE boot or network boot configurations. When enabled:
               * Allows network devices to boot from a TFTP server
               * Requires dhcpd_boot_server and dhcpd_boot_filename to be set
               * Commonly used for diskless workstations or network installations
        :param pulumi.Input[_builtins.str] dhcpd_boot_filename: The boot filename to be loaded from the TFTP server. Examples:
               * 'pxelinux.0' - Standard PXE boot loader
               * 'undionly.kpxe' - iPXE boot loader
               * Custom paths for specific boot images
        :param pulumi.Input[_builtins.str] dhcpd_boot_server: The IPv4 address of the TFTP server for network boot. This setting:
               * Is required when dhcpd_boot_enabled is true
               * Should be a reliable, always-on server
               * Must be accessible to all clients that need to boot
        :param pulumi.Input[_builtins.str] domain_name: The domain name for this network. Examples:
               * 'corp.example.com' - For corporate networks
               * 'guest.example.com' - For guest networks
               * 'iot.example.com' - For IoT networks
               Used for internal DNS resolution and DHCP options.
        :param pulumi.Input[_builtins.bool] enabled: Controls whether this network is active. When disabled:
               * Network will not be available to clients
               * DHCP services will be stopped
               * Existing clients will be disconnected
               Useful for temporary network maintenance or security measures.
        :param pulumi.Input[_builtins.bool] igmp_snooping: Enables IGMP (Internet Group Management Protocol) snooping. When enabled:
               * Optimizes multicast traffic flow
               * Reduces network congestion
               * Improves performance for multicast applications (e.g., IPTV)
               Recommended for networks with multicast traffic.
        :param pulumi.Input[_builtins.bool] internet_access_enabled: Controls internet access for this network. When disabled:
               * Clients cannot access external networks
               * Internal network access remains available
               * Useful for creating isolated or secure networks
        :param pulumi.Input[_builtins.str] ipv6_interface_type: Specifies the IPv6 connection type. Must be one of:
               * `none` - IPv6 disabled (default)
               * `static` - Static IPv6 addressing
               * `pd` - Prefix Delegation from upstream
               
               Choose based on your IPv6 deployment strategy and ISP capabilities.
        :param pulumi.Input[_builtins.str] ipv6_pd_interface: The WAN interface to use for IPv6 Prefix Delegation. Options:
               * `wan` - Primary WAN interface
               * `wan2` - Secondary WAN interface
               Only applicable when `ipv6_interface_type` is 'pd'.
        :param pulumi.Input[_builtins.str] ipv6_pd_prefixid: The IPv6 Prefix ID for Prefix Delegation. Used to:
               * Differentiate multiple delegated prefixes
               * Create unique subnets from the delegated prefix
               Typically a hexadecimal value (e.g., '0', '1', 'a1').
        :param pulumi.Input[_builtins.str] ipv6_pd_start: The starting IPv6 address for Prefix Delegation range.
               Only used when `ipv6_interface_type` is 'pd'.
               Must be within the delegated prefix range.
        :param pulumi.Input[_builtins.str] ipv6_pd_stop: The ending IPv6 address for Prefix Delegation range.
               Only used when `ipv6_interface_type` is 'pd'.
               Must be after `ipv6_pd_start` within the delegated prefix.
        :param pulumi.Input[_builtins.bool] ipv6_ra_enable: Enables IPv6 Router Advertisements (RA). When enabled:
               * Announces IPv6 prefix information to clients
               * Enables SLAAC address configuration
               * Required for most IPv6 deployments
        :param pulumi.Input[_builtins.int] ipv6_ra_preferred_lifetime: The preferred lifetime (in seconds) for IPv6 addresses in Router Advertisements.
               * Must be less than or equal to `ipv6_ra_valid_lifetime`
               * Default: 14400 (4 hours)
               * After this time, addresses become deprecated but still usable
        :param pulumi.Input[_builtins.str] ipv6_ra_priority: Sets the priority for IPv6 Router Advertisements. Options:
               * `high` - Preferred for primary networks
               * `medium` - Standard priority
               * `low` - For backup or secondary networks
               Affects router selection when multiple IPv6 routers exist.
        :param pulumi.Input[_builtins.int] ipv6_ra_valid_lifetime: The valid lifetime (in seconds) for IPv6 addresses in Router Advertisements.
               * Must be greater than or equal to `ipv6_ra_preferred_lifetime`
               * Default: 86400 (24 hours)
               * After this time, addresses become invalid
        :param pulumi.Input[_builtins.str] ipv6_static_subnet: The static IPv6 subnet in CIDR notation (e.g., '2001:db8::/64') when using static IPv6.
               Only applicable when `ipv6_interface_type` is 'static'.
               Must be a valid IPv6 subnet allocated to your organization.
        :param pulumi.Input[_builtins.bool] multicast_dns: Enables Multicast DNS (mDNS/Bonjour/Avahi) on the network. When enabled:
               * Allows device discovery (e.g., printers, Chromecasts)
               * Supports zero-configuration networking
               * Available on Controller version 7 and later
        :param pulumi.Input[_builtins.str] name: The name of the network. This should be a descriptive name that helps identify the network's purpose, such as 'Corporate-Main', 'Guest-Network', or 'IoT-VLAN'.
        :param pulumi.Input[_builtins.str] network_group: The network group for this network. Default is 'LAN'. For WAN networks, use 'WAN' or 'WAN2'. Network groups help organize and apply policies to multiple networks.
        :param pulumi.Input[_builtins.bool] network_isolation_enabled: Enables network isolation. When enabled:
               * Prevents communication between clients on this network
               * Each client can only communicate with the gateway
               * Commonly used for guest networks or IoT devices
        :param pulumi.Input[_builtins.str] site: The name of the site to associate the network with.
        :param pulumi.Input[_builtins.str] subnet: The IPv4 subnet for this network in CIDR notation (e.g., '192.168.1.0/24'). This defines the network's address space and determines the range of IP addresses available for DHCP.
        :param pulumi.Input[_builtins.int] vlan_id: The VLAN ID for this network. Valid range is 0-4096. Common uses:
               * 1-4094: Standard VLAN range for network segmentation
               * 0: Untagged/native VLAN
               * >4094: Reserved for special purposes
        :param pulumi.Input[_builtins.int] wan_dhcp_v6_pd_size: The IPv6 prefix size to request from ISP. Must be between 48 and 64.
               Only applicable when `wan_type_v6` is 'dhcpv6'.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] wan_dns: List of IPv4 DNS servers for WAN interface. Examples:
               * ISP provided DNS servers
               * Public DNS services (e.g., 8.8.8.8, 1.1.1.1)
               * Maximum 4 servers can be specified
        :param pulumi.Input[_builtins.int] wan_egress_qos: Quality of Service (QoS) priority for WAN egress traffic (0-7).
               * 0 (default) - Best effort
               * 1-4 - Increasing priority
               * 5-7 - Highest priority, use sparingly
               Higher values get preferential treatment.
        :param pulumi.Input[_builtins.str] wan_gateway: The IPv4 gateway address for WAN interface.
               Required when `wan_type` is 'static'.
               Typically the ISP's router IP address.
        :param pulumi.Input[_builtins.str] wan_gateway_v6: The IPv6 gateway address for WAN interface.
               Required when `wan_type_v6` is 'static'.
               Typically the ISP's router IPv6 address.
        :param pulumi.Input[_builtins.str] wan_ip: The static IPv4 address for WAN interface.
               Required when `wan_type` is 'static'.
               Must be a valid public IP address assigned by your ISP.
        :param pulumi.Input[_builtins.str] wan_ipv6: The static IPv6 address for WAN interface.
               Required when `wan_type_v6` is 'static'.
               Must be a valid public IPv6 address assigned by your ISP.
        :param pulumi.Input[_builtins.str] wan_netmask: The IPv4 netmask for WAN interface (e.g., '255.255.255.0').
               Required when `wan_type` is 'static'.
               Must match the subnet mask provided by your ISP.
        :param pulumi.Input[_builtins.str] wan_networkgroup: The WAN interface group assignment. Options:
               * `WAN` - Primary WAN interface
               * `WAN2` - Secondary WAN interface
               * `WAN_LTE_FAILOVER` - LTE backup connection
               Used for dual WAN and failover configurations.
        :param pulumi.Input[_builtins.int] wan_prefixlen: The IPv6 prefix length for WAN interface. Must be between 1 and 128.
               Only applicable when `wan_type_v6` is 'static'.
        :param pulumi.Input[_builtins.str] wan_type: The IPv4 WAN connection type. Options:
               * `disabled` - WAN interface disabled
               * `static` - Static IP configuration
               * `dhcp` - Dynamic IP from ISP
               * `pppoe` - PPPoE connection (common for DSL)
               Choose based on your ISP's requirements.
        :param pulumi.Input[_builtins.str] wan_type_v6: The IPv6 WAN connection type. Options:
               * `disabled` - IPv6 disabled
               * `static` - Static IPv6 configuration
               * `dhcpv6` - Dynamic IPv6 from ISP
               Choose based on your ISP's requirements.
        :param pulumi.Input[_builtins.str] wan_username: Username for WAN authentication.
               * Required for PPPoE connections
               * May be needed for some ISP configurations
               * Cannot contain spaces or special characters
        :param pulumi.Input[_builtins.str] x_wan_password: Password for WAN authentication.
               * Required for PPPoE connections
               * May be needed for some ISP configurations
               * Must be kept secret
        """
        pulumi.set(__self__, "purpose", purpose)
        if dhcp_dns is not None:
            pulumi.set(__self__, "dhcp_dns", dhcp_dns)
        if dhcp_enabled is not None:
            pulumi.set(__self__, "dhcp_enabled", dhcp_enabled)
        if dhcp_lease is not None:
            pulumi.set(__self__, "dhcp_lease", dhcp_lease)
        if dhcp_relay_enabled is not None:
            pulumi.set(__self__, "dhcp_relay_enabled", dhcp_relay_enabled)
        if dhcp_start is not None:
            pulumi.set(__self__, "dhcp_start", dhcp_start)
        if dhcp_stop is not None:
            pulumi.set(__self__, "dhcp_stop", dhcp_stop)
        if dhcp_v6_dns is not None:
            pulumi.set(__self__, "dhcp_v6_dns", dhcp_v6_dns)
        if dhcp_v6_dns_auto is not None:
            pulumi.set(__self__, "dhcp_v6_dns_auto", dhcp_v6_dns_auto)
        if dhcp_v6_enabled is not None:
            pulumi.set(__self__, "dhcp_v6_enabled", dhcp_v6_enabled)
        if dhcp_v6_lease is not None:
            pulumi.set(__self__, "dhcp_v6_lease", dhcp_v6_lease)
        if dhcp_v6_start is not None:
            pulumi.set(__self__, "dhcp_v6_start", dhcp_v6_start)
        if dhcp_v6_stop is not None:
            pulumi.set(__self__, "dhcp_v6_stop", dhcp_v6_stop)
        if dhcpd_boot_enabled is not None:
            pulumi.set(__self__, "dhcpd_boot_enabled", dhcpd_boot_enabled)
        if dhcpd_boot_filename is not None:
            pulumi.set(__self__, "dhcpd_boot_filename", dhcpd_boot_filename)
        if dhcpd_boot_server is not None:
            pulumi.set(__self__, "dhcpd_boot_server", dhcpd_boot_server)
        if domain_name is not None:
            pulumi.set(__self__, "domain_name", domain_name)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if igmp_snooping is not None:
            pulumi.set(__self__, "igmp_snooping", igmp_snooping)
        if internet_access_enabled is not None:
            pulumi.set(__self__, "internet_access_enabled", internet_access_enabled)
        if ipv6_interface_type is not None:
            pulumi.set(__self__, "ipv6_interface_type", ipv6_interface_type)
        if ipv6_pd_interface is not None:
            pulumi.set(__self__, "ipv6_pd_interface", ipv6_pd_interface)
        if ipv6_pd_prefixid is not None:
            pulumi.set(__self__, "ipv6_pd_prefixid", ipv6_pd_prefixid)
        if ipv6_pd_start is not None:
            pulumi.set(__self__, "ipv6_pd_start", ipv6_pd_start)
        if ipv6_pd_stop is not None:
            pulumi.set(__self__, "ipv6_pd_stop", ipv6_pd_stop)
        if ipv6_ra_enable is not None:
            pulumi.set(__self__, "ipv6_ra_enable", ipv6_ra_enable)
        if ipv6_ra_preferred_lifetime is not None:
            pulumi.set(__self__, "ipv6_ra_preferred_lifetime", ipv6_ra_preferred_lifetime)
        if ipv6_ra_priority is not None:
            pulumi.set(__self__, "ipv6_ra_priority", ipv6_ra_priority)
        if ipv6_ra_valid_lifetime is not None:
            pulumi.set(__self__, "ipv6_ra_valid_lifetime", ipv6_ra_valid_lifetime)
        if ipv6_static_subnet is not None:
            pulumi.set(__self__, "ipv6_static_subnet", ipv6_static_subnet)
        if multicast_dns is not None:
            pulumi.set(__self__, "multicast_dns", multicast_dns)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if network_group is not None:
            pulumi.set(__self__, "network_group", network_group)
        if network_isolation_enabled is not None:
            pulumi.set(__self__, "network_isolation_enabled", network_isolation_enabled)
        if site is not None:
            pulumi.set(__self__, "site", site)
        if subnet is not None:
            pulumi.set(__self__, "subnet", subnet)
        if vlan_id is not None:
            pulumi.set(__self__, "vlan_id", vlan_id)
        if wan_dhcp_v6_pd_size is not None:
            pulumi.set(__self__, "wan_dhcp_v6_pd_size", wan_dhcp_v6_pd_size)
        if wan_dns is not None:
            pulumi.set(__self__, "wan_dns", wan_dns)
        if wan_egress_qos is not None:
            pulumi.set(__self__, "wan_egress_qos", wan_egress_qos)
        if wan_gateway is not None:
            pulumi.set(__self__, "wan_gateway", wan_gateway)
        if wan_gateway_v6 is not None:
            pulumi.set(__self__, "wan_gateway_v6", wan_gateway_v6)
        if wan_ip is not None:
            pulumi.set(__self__, "wan_ip", wan_ip)
        if wan_ipv6 is not None:
            pulumi.set(__self__, "wan_ipv6", wan_ipv6)
        if wan_netmask is not None:
            pulumi.set(__self__, "wan_netmask", wan_netmask)
        if wan_networkgroup is not None:
            pulumi.set(__self__, "wan_networkgroup", wan_networkgroup)
        if wan_prefixlen is not None:
            pulumi.set(__self__, "wan_prefixlen", wan_prefixlen)
        if wan_type is not None:
            pulumi.set(__self__, "wan_type", wan_type)
        if wan_type_v6 is not None:
            pulumi.set(__self__, "wan_type_v6", wan_type_v6)
        if wan_username is not None:
            pulumi.set(__self__, "wan_username", wan_username)
        if x_wan_password is not None:
            pulumi.set(__self__, "x_wan_password", x_wan_password)

    @_builtins.property
    @pulumi.getter
    def purpose(self) -> pulumi.Input[_builtins.str]:
        """
        The purpose/type of the network. Must be one of:
        * `corporate` - Standard network for corporate use with full access
        * `guest` - Isolated network for guest access with limited permissions
        * `wan` - External network connection (WAN uplink)
        * `vlan-only` - VLAN network without DHCP services
        """
        return pulumi.get(self, "purpose")

    @purpose.setter
    def purpose(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "purpose", value)

    @_builtins.property
    @pulumi.getter(name="dhcpDns")
    def dhcp_dns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        List of IPv4 DNS server addresses to be provided to DHCP clients. Examples:
        * Use ['8.8.8.8', '8.8.4.4'] for Google DNS
        * Use ['1.1.1.1', '1.0.0.1'] for Cloudflare DNS
        * Use internal DNS servers for corporate networks
        Maximum 4 servers can be specified.
        """
        return pulumi.get(self, "dhcp_dns")

    @dhcp_dns.setter
    def dhcp_dns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "dhcp_dns", value)

    @_builtins.property
    @pulumi.getter(name="dhcpEnabled")
    def dhcp_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Controls whether DHCP server is enabled for this network. When enabled:
        * The network will automatically assign IP addresses to clients
        * DHCP options (DNS, lease time) will be provided to clients
        * Static IP assignments can still be made outside the DHCP range
        """
        return pulumi.get(self, "dhcp_enabled")

    @dhcp_enabled.setter
    def dhcp_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "dhcp_enabled", value)

    @_builtins.property
    @pulumi.getter(name="dhcpLease")
    def dhcp_lease(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The DHCP lease time in seconds. Common values:
        * 86400 (1 day) - Default, suitable for most networks
        * 3600 (1 hour) - For testing or temporary networks
        * 604800 (1 week) - For stable networks with static clients
        * 2592000 (30 days) - For very stable networks
        """
        return pulumi.get(self, "dhcp_lease")

    @dhcp_lease.setter
    def dhcp_lease(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "dhcp_lease", value)

    @_builtins.property
    @pulumi.getter(name="dhcpRelayEnabled")
    def dhcp_relay_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables DHCP relay for this network. When enabled:
        * DHCP requests are forwarded to an external DHCP server
        * Local DHCP server is disabled
        * Useful for centralized DHCP management
        """
        return pulumi.get(self, "dhcp_relay_enabled")

    @dhcp_relay_enabled.setter
    def dhcp_relay_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "dhcp_relay_enabled", value)

    @_builtins.property
    @pulumi.getter(name="dhcpStart")
    def dhcp_start(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The starting IPv4 address of the DHCP range. Examples:
        * For subnet 192.168.1.0/24, typical start: '192.168.1.100'
        * For subnet 10.0.0.0/24, typical start: '10.0.0.100'
        Ensure this address is within the network's subnet.
        """
        return pulumi.get(self, "dhcp_start")

    @dhcp_start.setter
    def dhcp_start(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "dhcp_start", value)

    @_builtins.property
    @pulumi.getter(name="dhcpStop")
    def dhcp_stop(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The ending IPv4 address of the DHCP range. Examples:
        * For subnet 192.168.1.0/24, typical stop: '192.168.1.254'
        * For subnet 10.0.0.0/24, typical stop: '10.0.0.254'
        Must be greater than dhcp_start and within the network's subnet.
        """
        return pulumi.get(self, "dhcp_stop")

    @dhcp_stop.setter
    def dhcp_stop(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "dhcp_stop", value)

    @_builtins.property
    @pulumi.getter(name="dhcpV6Dns")
    def dhcp_v6_dns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        List of IPv6 DNS server addresses for DHCPv6 clients. Examples:
        * Use ['2001:4860:4860::8888', '2001:4860:4860::8844'] for Google DNS
        * Use ['2606:4700:4700::1111', '2606:4700:4700::1001'] for Cloudflare DNS
        Only used when dhcp_v6_dns_auto is false. Maximum of 4 addresses are allowed.
        """
        return pulumi.get(self, "dhcp_v6_dns")

    @dhcp_v6_dns.setter
    def dhcp_v6_dns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "dhcp_v6_dns", value)

    @_builtins.property
    @pulumi.getter(name="dhcpV6DnsAuto")
    def dhcp_v6_dns_auto(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Controls DNS server source for DHCPv6 clients:
        * true - Use upstream DNS servers (recommended)
        * false - Use manually specified servers from dhcp_v6_dns
        Default is true for easier management.
        """
        return pulumi.get(self, "dhcp_v6_dns_auto")

    @dhcp_v6_dns_auto.setter
    def dhcp_v6_dns_auto(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "dhcp_v6_dns_auto", value)

    @_builtins.property
    @pulumi.getter(name="dhcpV6Enabled")
    def dhcp_v6_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables stateful DHCPv6 for IPv6 address assignment. When enabled:
        * Provides IPv6 addresses to clients
        * Works alongside SLAAC if configured
        * Allows for more controlled IPv6 addressing
        """
        return pulumi.get(self, "dhcp_v6_enabled")

    @dhcp_v6_enabled.setter
    def dhcp_v6_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "dhcp_v6_enabled", value)

    @_builtins.property
    @pulumi.getter(name="dhcpV6Lease")
    def dhcp_v6_lease(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The DHCPv6 lease time in seconds. Common values:
        * 86400 (1 day) - Default setting
        * 3600 (1 hour) - For testing
        * 604800 (1 week) - For stable networks
        Typically longer than IPv4 DHCP leases.
        """
        return pulumi.get(self, "dhcp_v6_lease")

    @dhcp_v6_lease.setter
    def dhcp_v6_lease(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "dhcp_v6_lease", value)

    @_builtins.property
    @pulumi.getter(name="dhcpV6Start")
    def dhcp_v6_start(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The starting IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
        Must be a valid IPv6 address within your allocated IPv6 subnet.
        """
        return pulumi.get(self, "dhcp_v6_start")

    @dhcp_v6_start.setter
    def dhcp_v6_start(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "dhcp_v6_start", value)

    @_builtins.property
    @pulumi.getter(name="dhcpV6Stop")
    def dhcp_v6_stop(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The ending IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
        Must be after dhcp_v6_start in the IPv6 address space.
        """
        return pulumi.get(self, "dhcp_v6_stop")

    @dhcp_v6_stop.setter
    def dhcp_v6_stop(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "dhcp_v6_stop", value)

    @_builtins.property
    @pulumi.getter(name="dhcpdBootEnabled")
    def dhcpd_boot_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables DHCP boot options for PXE boot or network boot configurations. When enabled:
        * Allows network devices to boot from a TFTP server
        * Requires dhcpd_boot_server and dhcpd_boot_filename to be set
        * Commonly used for diskless workstations or network installations
        """
        return pulumi.get(self, "dhcpd_boot_enabled")

    @dhcpd_boot_enabled.setter
    def dhcpd_boot_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "dhcpd_boot_enabled", value)

    @_builtins.property
    @pulumi.getter(name="dhcpdBootFilename")
    def dhcpd_boot_filename(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The boot filename to be loaded from the TFTP server. Examples:
        * 'pxelinux.0' - Standard PXE boot loader
        * 'undionly.kpxe' - iPXE boot loader
        * Custom paths for specific boot images
        """
        return pulumi.get(self, "dhcpd_boot_filename")

    @dhcpd_boot_filename.setter
    def dhcpd_boot_filename(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "dhcpd_boot_filename", value)

    @_builtins.property
    @pulumi.getter(name="dhcpdBootServer")
    def dhcpd_boot_server(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv4 address of the TFTP server for network boot. This setting:
        * Is required when dhcpd_boot_enabled is true
        * Should be a reliable, always-on server
        * Must be accessible to all clients that need to boot
        """
        return pulumi.get(self, "dhcpd_boot_server")

    @dhcpd_boot_server.setter
    def dhcpd_boot_server(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "dhcpd_boot_server", value)

    @_builtins.property
    @pulumi.getter(name="domainName")
    def domain_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The domain name for this network. Examples:
        * 'corp.example.com' - For corporate networks
        * 'guest.example.com' - For guest networks
        * 'iot.example.com' - For IoT networks
        Used for internal DNS resolution and DHCP options.
        """
        return pulumi.get(self, "domain_name")

    @domain_name.setter
    def domain_name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "domain_name", value)

    @_builtins.property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Controls whether this network is active. When disabled:
        * Network will not be available to clients
        * DHCP services will be stopped
        * Existing clients will be disconnected
        Useful for temporary network maintenance or security measures.
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "enabled", value)

    @_builtins.property
    @pulumi.getter(name="igmpSnooping")
    def igmp_snooping(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables IGMP (Internet Group Management Protocol) snooping. When enabled:
        * Optimizes multicast traffic flow
        * Reduces network congestion
        * Improves performance for multicast applications (e.g., IPTV)
        Recommended for networks with multicast traffic.
        """
        return pulumi.get(self, "igmp_snooping")

    @igmp_snooping.setter
    def igmp_snooping(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "igmp_snooping", value)

    @_builtins.property
    @pulumi.getter(name="internetAccessEnabled")
    def internet_access_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Controls internet access for this network. When disabled:
        * Clients cannot access external networks
        * Internal network access remains available
        * Useful for creating isolated or secure networks
        """
        return pulumi.get(self, "internet_access_enabled")

    @internet_access_enabled.setter
    def internet_access_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "internet_access_enabled", value)

    @_builtins.property
    @pulumi.getter(name="ipv6InterfaceType")
    def ipv6_interface_type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the IPv6 connection type. Must be one of:
        * `none` - IPv6 disabled (default)
        * `static` - Static IPv6 addressing
        * `pd` - Prefix Delegation from upstream

        Choose based on your IPv6 deployment strategy and ISP capabilities.
        """
        return pulumi.get(self, "ipv6_interface_type")

    @ipv6_interface_type.setter
    def ipv6_interface_type(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_interface_type", value)

    @_builtins.property
    @pulumi.getter(name="ipv6PdInterface")
    def ipv6_pd_interface(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The WAN interface to use for IPv6 Prefix Delegation. Options:
        * `wan` - Primary WAN interface
        * `wan2` - Secondary WAN interface
        Only applicable when `ipv6_interface_type` is 'pd'.
        """
        return pulumi.get(self, "ipv6_pd_interface")

    @ipv6_pd_interface.setter
    def ipv6_pd_interface(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_pd_interface", value)

    @_builtins.property
    @pulumi.getter(name="ipv6PdPrefixid")
    def ipv6_pd_prefixid(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv6 Prefix ID for Prefix Delegation. Used to:
        * Differentiate multiple delegated prefixes
        * Create unique subnets from the delegated prefix
        Typically a hexadecimal value (e.g., '0', '1', 'a1').
        """
        return pulumi.get(self, "ipv6_pd_prefixid")

    @ipv6_pd_prefixid.setter
    def ipv6_pd_prefixid(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_pd_prefixid", value)

    @_builtins.property
    @pulumi.getter(name="ipv6PdStart")
    def ipv6_pd_start(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The starting IPv6 address for Prefix Delegation range.
        Only used when `ipv6_interface_type` is 'pd'.
        Must be within the delegated prefix range.
        """
        return pulumi.get(self, "ipv6_pd_start")

    @ipv6_pd_start.setter
    def ipv6_pd_start(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_pd_start", value)

    @_builtins.property
    @pulumi.getter(name="ipv6PdStop")
    def ipv6_pd_stop(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The ending IPv6 address for Prefix Delegation range.
        Only used when `ipv6_interface_type` is 'pd'.
        Must be after `ipv6_pd_start` within the delegated prefix.
        """
        return pulumi.get(self, "ipv6_pd_stop")

    @ipv6_pd_stop.setter
    def ipv6_pd_stop(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_pd_stop", value)

    @_builtins.property
    @pulumi.getter(name="ipv6RaEnable")
    def ipv6_ra_enable(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables IPv6 Router Advertisements (RA). When enabled:
        * Announces IPv6 prefix information to clients
        * Enables SLAAC address configuration
        * Required for most IPv6 deployments
        """
        return pulumi.get(self, "ipv6_ra_enable")

    @ipv6_ra_enable.setter
    def ipv6_ra_enable(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "ipv6_ra_enable", value)

    @_builtins.property
    @pulumi.getter(name="ipv6RaPreferredLifetime")
    def ipv6_ra_preferred_lifetime(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The preferred lifetime (in seconds) for IPv6 addresses in Router Advertisements.
        * Must be less than or equal to `ipv6_ra_valid_lifetime`
        * Default: 14400 (4 hours)
        * After this time, addresses become deprecated but still usable
        """
        return pulumi.get(self, "ipv6_ra_preferred_lifetime")

    @ipv6_ra_preferred_lifetime.setter
    def ipv6_ra_preferred_lifetime(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "ipv6_ra_preferred_lifetime", value)

    @_builtins.property
    @pulumi.getter(name="ipv6RaPriority")
    def ipv6_ra_priority(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Sets the priority for IPv6 Router Advertisements. Options:
        * `high` - Preferred for primary networks
        * `medium` - Standard priority
        * `low` - For backup or secondary networks
        Affects router selection when multiple IPv6 routers exist.
        """
        return pulumi.get(self, "ipv6_ra_priority")

    @ipv6_ra_priority.setter
    def ipv6_ra_priority(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_ra_priority", value)

    @_builtins.property
    @pulumi.getter(name="ipv6RaValidLifetime")
    def ipv6_ra_valid_lifetime(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The valid lifetime (in seconds) for IPv6 addresses in Router Advertisements.
        * Must be greater than or equal to `ipv6_ra_preferred_lifetime`
        * Default: 86400 (24 hours)
        * After this time, addresses become invalid
        """
        return pulumi.get(self, "ipv6_ra_valid_lifetime")

    @ipv6_ra_valid_lifetime.setter
    def ipv6_ra_valid_lifetime(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "ipv6_ra_valid_lifetime", value)

    @_builtins.property
    @pulumi.getter(name="ipv6StaticSubnet")
    def ipv6_static_subnet(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The static IPv6 subnet in CIDR notation (e.g., '2001:db8::/64') when using static IPv6.
        Only applicable when `ipv6_interface_type` is 'static'.
        Must be a valid IPv6 subnet allocated to your organization.
        """
        return pulumi.get(self, "ipv6_static_subnet")

    @ipv6_static_subnet.setter
    def ipv6_static_subnet(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_static_subnet", value)

    @_builtins.property
    @pulumi.getter(name="multicastDns")
    def multicast_dns(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables Multicast DNS (mDNS/Bonjour/Avahi) on the network. When enabled:
        * Allows device discovery (e.g., printers, Chromecasts)
        * Supports zero-configuration networking
        * Available on Controller version 7 and later
        """
        return pulumi.get(self, "multicast_dns")

    @multicast_dns.setter
    def multicast_dns(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "multicast_dns", value)

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the network. This should be a descriptive name that helps identify the network's purpose, such as 'Corporate-Main', 'Guest-Network', or 'IoT-VLAN'.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "name", value)

    @_builtins.property
    @pulumi.getter(name="networkGroup")
    def network_group(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The network group for this network. Default is 'LAN'. For WAN networks, use 'WAN' or 'WAN2'. Network groups help organize and apply policies to multiple networks.
        """
        return pulumi.get(self, "network_group")

    @network_group.setter
    def network_group(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "network_group", value)

    @_builtins.property
    @pulumi.getter(name="networkIsolationEnabled")
    def network_isolation_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables network isolation. When enabled:
        * Prevents communication between clients on this network
        * Each client can only communicate with the gateway
        * Commonly used for guest networks or IoT devices
        """
        return pulumi.get(self, "network_isolation_enabled")

    @network_isolation_enabled.setter
    def network_isolation_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "network_isolation_enabled", value)

    @_builtins.property
    @pulumi.getter
    def site(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the site to associate the network with.
        """
        return pulumi.get(self, "site")

    @site.setter
    def site(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "site", value)

    @_builtins.property
    @pulumi.getter
    def subnet(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv4 subnet for this network in CIDR notation (e.g., '192.168.1.0/24'). This defines the network's address space and determines the range of IP addresses available for DHCP.
        """
        return pulumi.get(self, "subnet")

    @subnet.setter
    def subnet(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "subnet", value)

    @_builtins.property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The VLAN ID for this network. Valid range is 0-4096. Common uses:
        * 1-4094: Standard VLAN range for network segmentation
        * 0: Untagged/native VLAN
        * >4094: Reserved for special purposes
        """
        return pulumi.get(self, "vlan_id")

    @vlan_id.setter
    def vlan_id(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "vlan_id", value)

    @_builtins.property
    @pulumi.getter(name="wanDhcpV6PdSize")
    def wan_dhcp_v6_pd_size(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The IPv6 prefix size to request from ISP. Must be between 48 and 64.
        Only applicable when `wan_type_v6` is 'dhcpv6'.
        """
        return pulumi.get(self, "wan_dhcp_v6_pd_size")

    @wan_dhcp_v6_pd_size.setter
    def wan_dhcp_v6_pd_size(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "wan_dhcp_v6_pd_size", value)

    @_builtins.property
    @pulumi.getter(name="wanDns")
    def wan_dns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        List of IPv4 DNS servers for WAN interface. Examples:
        * ISP provided DNS servers
        * Public DNS services (e.g., 8.8.8.8, 1.1.1.1)
        * Maximum 4 servers can be specified
        """
        return pulumi.get(self, "wan_dns")

    @wan_dns.setter
    def wan_dns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "wan_dns", value)

    @_builtins.property
    @pulumi.getter(name="wanEgressQos")
    def wan_egress_qos(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Quality of Service (QoS) priority for WAN egress traffic (0-7).
        * 0 (default) - Best effort
        * 1-4 - Increasing priority
        * 5-7 - Highest priority, use sparingly
        Higher values get preferential treatment.
        """
        return pulumi.get(self, "wan_egress_qos")

    @wan_egress_qos.setter
    def wan_egress_qos(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "wan_egress_qos", value)

    @_builtins.property
    @pulumi.getter(name="wanGateway")
    def wan_gateway(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv4 gateway address for WAN interface.
        Required when `wan_type` is 'static'.
        Typically the ISP's router IP address.
        """
        return pulumi.get(self, "wan_gateway")

    @wan_gateway.setter
    def wan_gateway(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_gateway", value)

    @_builtins.property
    @pulumi.getter(name="wanGatewayV6")
    def wan_gateway_v6(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv6 gateway address for WAN interface.
        Required when `wan_type_v6` is 'static'.
        Typically the ISP's router IPv6 address.
        """
        return pulumi.get(self, "wan_gateway_v6")

    @wan_gateway_v6.setter
    def wan_gateway_v6(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_gateway_v6", value)

    @_builtins.property
    @pulumi.getter(name="wanIp")
    def wan_ip(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The static IPv4 address for WAN interface.
        Required when `wan_type` is 'static'.
        Must be a valid public IP address assigned by your ISP.
        """
        return pulumi.get(self, "wan_ip")

    @wan_ip.setter
    def wan_ip(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_ip", value)

    @_builtins.property
    @pulumi.getter(name="wanIpv6")
    def wan_ipv6(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The static IPv6 address for WAN interface.
        Required when `wan_type_v6` is 'static'.
        Must be a valid public IPv6 address assigned by your ISP.
        """
        return pulumi.get(self, "wan_ipv6")

    @wan_ipv6.setter
    def wan_ipv6(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_ipv6", value)

    @_builtins.property
    @pulumi.getter(name="wanNetmask")
    def wan_netmask(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv4 netmask for WAN interface (e.g., '255.255.255.0').
        Required when `wan_type` is 'static'.
        Must match the subnet mask provided by your ISP.
        """
        return pulumi.get(self, "wan_netmask")

    @wan_netmask.setter
    def wan_netmask(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_netmask", value)

    @_builtins.property
    @pulumi.getter(name="wanNetworkgroup")
    def wan_networkgroup(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The WAN interface group assignment. Options:
        * `WAN` - Primary WAN interface
        * `WAN2` - Secondary WAN interface
        * `WAN_LTE_FAILOVER` - LTE backup connection
        Used for dual WAN and failover configurations.
        """
        return pulumi.get(self, "wan_networkgroup")

    @wan_networkgroup.setter
    def wan_networkgroup(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_networkgroup", value)

    @_builtins.property
    @pulumi.getter(name="wanPrefixlen")
    def wan_prefixlen(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The IPv6 prefix length for WAN interface. Must be between 1 and 128.
        Only applicable when `wan_type_v6` is 'static'.
        """
        return pulumi.get(self, "wan_prefixlen")

    @wan_prefixlen.setter
    def wan_prefixlen(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "wan_prefixlen", value)

    @_builtins.property
    @pulumi.getter(name="wanType")
    def wan_type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv4 WAN connection type. Options:
        * `disabled` - WAN interface disabled
        * `static` - Static IP configuration
        * `dhcp` - Dynamic IP from ISP
        * `pppoe` - PPPoE connection (common for DSL)
        Choose based on your ISP's requirements.
        """
        return pulumi.get(self, "wan_type")

    @wan_type.setter
    def wan_type(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_type", value)

    @_builtins.property
    @pulumi.getter(name="wanTypeV6")
    def wan_type_v6(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv6 WAN connection type. Options:
        * `disabled` - IPv6 disabled
        * `static` - Static IPv6 configuration
        * `dhcpv6` - Dynamic IPv6 from ISP
        Choose based on your ISP's requirements.
        """
        return pulumi.get(self, "wan_type_v6")

    @wan_type_v6.setter
    def wan_type_v6(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_type_v6", value)

    @_builtins.property
    @pulumi.getter(name="wanUsername")
    def wan_username(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Username for WAN authentication.
        * Required for PPPoE connections
        * May be needed for some ISP configurations
        * Cannot contain spaces or special characters
        """
        return pulumi.get(self, "wan_username")

    @wan_username.setter
    def wan_username(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_username", value)

    @_builtins.property
    @pulumi.getter(name="xWanPassword")
    def x_wan_password(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Password for WAN authentication.
        * Required for PPPoE connections
        * May be needed for some ISP configurations
        * Must be kept secret
        """
        return pulumi.get(self, "x_wan_password")

    @x_wan_password.setter
    def x_wan_password(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "x_wan_password", value)


@pulumi.input_type
class _NetworkState:
    def __init__(__self__, *,
                 dhcp_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 dhcp_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_lease: Optional[pulumi.Input[_builtins.int]] = None,
                 dhcp_relay_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_start: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcp_stop: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcp_v6_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 dhcp_v6_dns_auto: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_v6_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_v6_lease: Optional[pulumi.Input[_builtins.int]] = None,
                 dhcp_v6_start: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcp_v6_stop: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcpd_boot_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcpd_boot_filename: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcpd_boot_server: Optional[pulumi.Input[_builtins.str]] = None,
                 domain_name: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 igmp_snooping: Optional[pulumi.Input[_builtins.bool]] = None,
                 internet_access_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 ipv6_interface_type: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_interface: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_prefixid: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_start: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_stop: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_ra_enable: Optional[pulumi.Input[_builtins.bool]] = None,
                 ipv6_ra_preferred_lifetime: Optional[pulumi.Input[_builtins.int]] = None,
                 ipv6_ra_priority: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_ra_valid_lifetime: Optional[pulumi.Input[_builtins.int]] = None,
                 ipv6_static_subnet: Optional[pulumi.Input[_builtins.str]] = None,
                 multicast_dns: Optional[pulumi.Input[_builtins.bool]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 network_group: Optional[pulumi.Input[_builtins.str]] = None,
                 network_isolation_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 purpose: Optional[pulumi.Input[_builtins.str]] = None,
                 site: Optional[pulumi.Input[_builtins.str]] = None,
                 subnet: Optional[pulumi.Input[_builtins.str]] = None,
                 vlan_id: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_dhcp_v6_pd_size: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 wan_egress_qos: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_gateway: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_gateway_v6: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_ip: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_ipv6: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_netmask: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_networkgroup: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_prefixlen: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_type: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_type_v6: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_username: Optional[pulumi.Input[_builtins.str]] = None,
                 x_wan_password: Optional[pulumi.Input[_builtins.str]] = None):
        """
        Input properties used for looking up and filtering Network resources.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] dhcp_dns: List of IPv4 DNS server addresses to be provided to DHCP clients. Examples:
               * Use ['8.8.8.8', '8.8.4.4'] for Google DNS
               * Use ['1.1.1.1', '1.0.0.1'] for Cloudflare DNS
               * Use internal DNS servers for corporate networks
               Maximum 4 servers can be specified.
        :param pulumi.Input[_builtins.bool] dhcp_enabled: Controls whether DHCP server is enabled for this network. When enabled:
               * The network will automatically assign IP addresses to clients
               * DHCP options (DNS, lease time) will be provided to clients
               * Static IP assignments can still be made outside the DHCP range
        :param pulumi.Input[_builtins.int] dhcp_lease: The DHCP lease time in seconds. Common values:
               * 86400 (1 day) - Default, suitable for most networks
               * 3600 (1 hour) - For testing or temporary networks
               * 604800 (1 week) - For stable networks with static clients
               * 2592000 (30 days) - For very stable networks
        :param pulumi.Input[_builtins.bool] dhcp_relay_enabled: Enables DHCP relay for this network. When enabled:
               * DHCP requests are forwarded to an external DHCP server
               * Local DHCP server is disabled
               * Useful for centralized DHCP management
        :param pulumi.Input[_builtins.str] dhcp_start: The starting IPv4 address of the DHCP range. Examples:
               * For subnet 192.168.1.0/24, typical start: '192.168.1.100'
               * For subnet 10.0.0.0/24, typical start: '10.0.0.100'
               Ensure this address is within the network's subnet.
        :param pulumi.Input[_builtins.str] dhcp_stop: The ending IPv4 address of the DHCP range. Examples:
               * For subnet 192.168.1.0/24, typical stop: '192.168.1.254'
               * For subnet 10.0.0.0/24, typical stop: '10.0.0.254'
               Must be greater than dhcp_start and within the network's subnet.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] dhcp_v6_dns: List of IPv6 DNS server addresses for DHCPv6 clients. Examples:
               * Use ['2001:4860:4860::8888', '2001:4860:4860::8844'] for Google DNS
               * Use ['2606:4700:4700::1111', '2606:4700:4700::1001'] for Cloudflare DNS
               Only used when dhcp_v6_dns_auto is false. Maximum of 4 addresses are allowed.
        :param pulumi.Input[_builtins.bool] dhcp_v6_dns_auto: Controls DNS server source for DHCPv6 clients:
               * true - Use upstream DNS servers (recommended)
               * false - Use manually specified servers from dhcp_v6_dns
               Default is true for easier management.
        :param pulumi.Input[_builtins.bool] dhcp_v6_enabled: Enables stateful DHCPv6 for IPv6 address assignment. When enabled:
               * Provides IPv6 addresses to clients
               * Works alongside SLAAC if configured
               * Allows for more controlled IPv6 addressing
        :param pulumi.Input[_builtins.int] dhcp_v6_lease: The DHCPv6 lease time in seconds. Common values:
               * 86400 (1 day) - Default setting
               * 3600 (1 hour) - For testing
               * 604800 (1 week) - For stable networks
               Typically longer than IPv4 DHCP leases.
        :param pulumi.Input[_builtins.str] dhcp_v6_start: The starting IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
               Must be a valid IPv6 address within your allocated IPv6 subnet.
        :param pulumi.Input[_builtins.str] dhcp_v6_stop: The ending IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
               Must be after dhcp_v6_start in the IPv6 address space.
        :param pulumi.Input[_builtins.bool] dhcpd_boot_enabled: Enables DHCP boot options for PXE boot or network boot configurations. When enabled:
               * Allows network devices to boot from a TFTP server
               * Requires dhcpd_boot_server and dhcpd_boot_filename to be set
               * Commonly used for diskless workstations or network installations
        :param pulumi.Input[_builtins.str] dhcpd_boot_filename: The boot filename to be loaded from the TFTP server. Examples:
               * 'pxelinux.0' - Standard PXE boot loader
               * 'undionly.kpxe' - iPXE boot loader
               * Custom paths for specific boot images
        :param pulumi.Input[_builtins.str] dhcpd_boot_server: The IPv4 address of the TFTP server for network boot. This setting:
               * Is required when dhcpd_boot_enabled is true
               * Should be a reliable, always-on server
               * Must be accessible to all clients that need to boot
        :param pulumi.Input[_builtins.str] domain_name: The domain name for this network. Examples:
               * 'corp.example.com' - For corporate networks
               * 'guest.example.com' - For guest networks
               * 'iot.example.com' - For IoT networks
               Used for internal DNS resolution and DHCP options.
        :param pulumi.Input[_builtins.bool] enabled: Controls whether this network is active. When disabled:
               * Network will not be available to clients
               * DHCP services will be stopped
               * Existing clients will be disconnected
               Useful for temporary network maintenance or security measures.
        :param pulumi.Input[_builtins.bool] igmp_snooping: Enables IGMP (Internet Group Management Protocol) snooping. When enabled:
               * Optimizes multicast traffic flow
               * Reduces network congestion
               * Improves performance for multicast applications (e.g., IPTV)
               Recommended for networks with multicast traffic.
        :param pulumi.Input[_builtins.bool] internet_access_enabled: Controls internet access for this network. When disabled:
               * Clients cannot access external networks
               * Internal network access remains available
               * Useful for creating isolated or secure networks
        :param pulumi.Input[_builtins.str] ipv6_interface_type: Specifies the IPv6 connection type. Must be one of:
               * `none` - IPv6 disabled (default)
               * `static` - Static IPv6 addressing
               * `pd` - Prefix Delegation from upstream
               
               Choose based on your IPv6 deployment strategy and ISP capabilities.
        :param pulumi.Input[_builtins.str] ipv6_pd_interface: The WAN interface to use for IPv6 Prefix Delegation. Options:
               * `wan` - Primary WAN interface
               * `wan2` - Secondary WAN interface
               Only applicable when `ipv6_interface_type` is 'pd'.
        :param pulumi.Input[_builtins.str] ipv6_pd_prefixid: The IPv6 Prefix ID for Prefix Delegation. Used to:
               * Differentiate multiple delegated prefixes
               * Create unique subnets from the delegated prefix
               Typically a hexadecimal value (e.g., '0', '1', 'a1').
        :param pulumi.Input[_builtins.str] ipv6_pd_start: The starting IPv6 address for Prefix Delegation range.
               Only used when `ipv6_interface_type` is 'pd'.
               Must be within the delegated prefix range.
        :param pulumi.Input[_builtins.str] ipv6_pd_stop: The ending IPv6 address for Prefix Delegation range.
               Only used when `ipv6_interface_type` is 'pd'.
               Must be after `ipv6_pd_start` within the delegated prefix.
        :param pulumi.Input[_builtins.bool] ipv6_ra_enable: Enables IPv6 Router Advertisements (RA). When enabled:
               * Announces IPv6 prefix information to clients
               * Enables SLAAC address configuration
               * Required for most IPv6 deployments
        :param pulumi.Input[_builtins.int] ipv6_ra_preferred_lifetime: The preferred lifetime (in seconds) for IPv6 addresses in Router Advertisements.
               * Must be less than or equal to `ipv6_ra_valid_lifetime`
               * Default: 14400 (4 hours)
               * After this time, addresses become deprecated but still usable
        :param pulumi.Input[_builtins.str] ipv6_ra_priority: Sets the priority for IPv6 Router Advertisements. Options:
               * `high` - Preferred for primary networks
               * `medium` - Standard priority
               * `low` - For backup or secondary networks
               Affects router selection when multiple IPv6 routers exist.
        :param pulumi.Input[_builtins.int] ipv6_ra_valid_lifetime: The valid lifetime (in seconds) for IPv6 addresses in Router Advertisements.
               * Must be greater than or equal to `ipv6_ra_preferred_lifetime`
               * Default: 86400 (24 hours)
               * After this time, addresses become invalid
        :param pulumi.Input[_builtins.str] ipv6_static_subnet: The static IPv6 subnet in CIDR notation (e.g., '2001:db8::/64') when using static IPv6.
               Only applicable when `ipv6_interface_type` is 'static'.
               Must be a valid IPv6 subnet allocated to your organization.
        :param pulumi.Input[_builtins.bool] multicast_dns: Enables Multicast DNS (mDNS/Bonjour/Avahi) on the network. When enabled:
               * Allows device discovery (e.g., printers, Chromecasts)
               * Supports zero-configuration networking
               * Available on Controller version 7 and later
        :param pulumi.Input[_builtins.str] name: The name of the network. This should be a descriptive name that helps identify the network's purpose, such as 'Corporate-Main', 'Guest-Network', or 'IoT-VLAN'.
        :param pulumi.Input[_builtins.str] network_group: The network group for this network. Default is 'LAN'. For WAN networks, use 'WAN' or 'WAN2'. Network groups help organize and apply policies to multiple networks.
        :param pulumi.Input[_builtins.bool] network_isolation_enabled: Enables network isolation. When enabled:
               * Prevents communication between clients on this network
               * Each client can only communicate with the gateway
               * Commonly used for guest networks or IoT devices
        :param pulumi.Input[_builtins.str] purpose: The purpose/type of the network. Must be one of:
               * `corporate` - Standard network for corporate use with full access
               * `guest` - Isolated network for guest access with limited permissions
               * `wan` - External network connection (WAN uplink)
               * `vlan-only` - VLAN network without DHCP services
        :param pulumi.Input[_builtins.str] site: The name of the site to associate the network with.
        :param pulumi.Input[_builtins.str] subnet: The IPv4 subnet for this network in CIDR notation (e.g., '192.168.1.0/24'). This defines the network's address space and determines the range of IP addresses available for DHCP.
        :param pulumi.Input[_builtins.int] vlan_id: The VLAN ID for this network. Valid range is 0-4096. Common uses:
               * 1-4094: Standard VLAN range for network segmentation
               * 0: Untagged/native VLAN
               * >4094: Reserved for special purposes
        :param pulumi.Input[_builtins.int] wan_dhcp_v6_pd_size: The IPv6 prefix size to request from ISP. Must be between 48 and 64.
               Only applicable when `wan_type_v6` is 'dhcpv6'.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] wan_dns: List of IPv4 DNS servers for WAN interface. Examples:
               * ISP provided DNS servers
               * Public DNS services (e.g., 8.8.8.8, 1.1.1.1)
               * Maximum 4 servers can be specified
        :param pulumi.Input[_builtins.int] wan_egress_qos: Quality of Service (QoS) priority for WAN egress traffic (0-7).
               * 0 (default) - Best effort
               * 1-4 - Increasing priority
               * 5-7 - Highest priority, use sparingly
               Higher values get preferential treatment.
        :param pulumi.Input[_builtins.str] wan_gateway: The IPv4 gateway address for WAN interface.
               Required when `wan_type` is 'static'.
               Typically the ISP's router IP address.
        :param pulumi.Input[_builtins.str] wan_gateway_v6: The IPv6 gateway address for WAN interface.
               Required when `wan_type_v6` is 'static'.
               Typically the ISP's router IPv6 address.
        :param pulumi.Input[_builtins.str] wan_ip: The static IPv4 address for WAN interface.
               Required when `wan_type` is 'static'.
               Must be a valid public IP address assigned by your ISP.
        :param pulumi.Input[_builtins.str] wan_ipv6: The static IPv6 address for WAN interface.
               Required when `wan_type_v6` is 'static'.
               Must be a valid public IPv6 address assigned by your ISP.
        :param pulumi.Input[_builtins.str] wan_netmask: The IPv4 netmask for WAN interface (e.g., '255.255.255.0').
               Required when `wan_type` is 'static'.
               Must match the subnet mask provided by your ISP.
        :param pulumi.Input[_builtins.str] wan_networkgroup: The WAN interface group assignment. Options:
               * `WAN` - Primary WAN interface
               * `WAN2` - Secondary WAN interface
               * `WAN_LTE_FAILOVER` - LTE backup connection
               Used for dual WAN and failover configurations.
        :param pulumi.Input[_builtins.int] wan_prefixlen: The IPv6 prefix length for WAN interface. Must be between 1 and 128.
               Only applicable when `wan_type_v6` is 'static'.
        :param pulumi.Input[_builtins.str] wan_type: The IPv4 WAN connection type. Options:
               * `disabled` - WAN interface disabled
               * `static` - Static IP configuration
               * `dhcp` - Dynamic IP from ISP
               * `pppoe` - PPPoE connection (common for DSL)
               Choose based on your ISP's requirements.
        :param pulumi.Input[_builtins.str] wan_type_v6: The IPv6 WAN connection type. Options:
               * `disabled` - IPv6 disabled
               * `static` - Static IPv6 configuration
               * `dhcpv6` - Dynamic IPv6 from ISP
               Choose based on your ISP's requirements.
        :param pulumi.Input[_builtins.str] wan_username: Username for WAN authentication.
               * Required for PPPoE connections
               * May be needed for some ISP configurations
               * Cannot contain spaces or special characters
        :param pulumi.Input[_builtins.str] x_wan_password: Password for WAN authentication.
               * Required for PPPoE connections
               * May be needed for some ISP configurations
               * Must be kept secret
        """
        if dhcp_dns is not None:
            pulumi.set(__self__, "dhcp_dns", dhcp_dns)
        if dhcp_enabled is not None:
            pulumi.set(__self__, "dhcp_enabled", dhcp_enabled)
        if dhcp_lease is not None:
            pulumi.set(__self__, "dhcp_lease", dhcp_lease)
        if dhcp_relay_enabled is not None:
            pulumi.set(__self__, "dhcp_relay_enabled", dhcp_relay_enabled)
        if dhcp_start is not None:
            pulumi.set(__self__, "dhcp_start", dhcp_start)
        if dhcp_stop is not None:
            pulumi.set(__self__, "dhcp_stop", dhcp_stop)
        if dhcp_v6_dns is not None:
            pulumi.set(__self__, "dhcp_v6_dns", dhcp_v6_dns)
        if dhcp_v6_dns_auto is not None:
            pulumi.set(__self__, "dhcp_v6_dns_auto", dhcp_v6_dns_auto)
        if dhcp_v6_enabled is not None:
            pulumi.set(__self__, "dhcp_v6_enabled", dhcp_v6_enabled)
        if dhcp_v6_lease is not None:
            pulumi.set(__self__, "dhcp_v6_lease", dhcp_v6_lease)
        if dhcp_v6_start is not None:
            pulumi.set(__self__, "dhcp_v6_start", dhcp_v6_start)
        if dhcp_v6_stop is not None:
            pulumi.set(__self__, "dhcp_v6_stop", dhcp_v6_stop)
        if dhcpd_boot_enabled is not None:
            pulumi.set(__self__, "dhcpd_boot_enabled", dhcpd_boot_enabled)
        if dhcpd_boot_filename is not None:
            pulumi.set(__self__, "dhcpd_boot_filename", dhcpd_boot_filename)
        if dhcpd_boot_server is not None:
            pulumi.set(__self__, "dhcpd_boot_server", dhcpd_boot_server)
        if domain_name is not None:
            pulumi.set(__self__, "domain_name", domain_name)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if igmp_snooping is not None:
            pulumi.set(__self__, "igmp_snooping", igmp_snooping)
        if internet_access_enabled is not None:
            pulumi.set(__self__, "internet_access_enabled", internet_access_enabled)
        if ipv6_interface_type is not None:
            pulumi.set(__self__, "ipv6_interface_type", ipv6_interface_type)
        if ipv6_pd_interface is not None:
            pulumi.set(__self__, "ipv6_pd_interface", ipv6_pd_interface)
        if ipv6_pd_prefixid is not None:
            pulumi.set(__self__, "ipv6_pd_prefixid", ipv6_pd_prefixid)
        if ipv6_pd_start is not None:
            pulumi.set(__self__, "ipv6_pd_start", ipv6_pd_start)
        if ipv6_pd_stop is not None:
            pulumi.set(__self__, "ipv6_pd_stop", ipv6_pd_stop)
        if ipv6_ra_enable is not None:
            pulumi.set(__self__, "ipv6_ra_enable", ipv6_ra_enable)
        if ipv6_ra_preferred_lifetime is not None:
            pulumi.set(__self__, "ipv6_ra_preferred_lifetime", ipv6_ra_preferred_lifetime)
        if ipv6_ra_priority is not None:
            pulumi.set(__self__, "ipv6_ra_priority", ipv6_ra_priority)
        if ipv6_ra_valid_lifetime is not None:
            pulumi.set(__self__, "ipv6_ra_valid_lifetime", ipv6_ra_valid_lifetime)
        if ipv6_static_subnet is not None:
            pulumi.set(__self__, "ipv6_static_subnet", ipv6_static_subnet)
        if multicast_dns is not None:
            pulumi.set(__self__, "multicast_dns", multicast_dns)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if network_group is not None:
            pulumi.set(__self__, "network_group", network_group)
        if network_isolation_enabled is not None:
            pulumi.set(__self__, "network_isolation_enabled", network_isolation_enabled)
        if purpose is not None:
            pulumi.set(__self__, "purpose", purpose)
        if site is not None:
            pulumi.set(__self__, "site", site)
        if subnet is not None:
            pulumi.set(__self__, "subnet", subnet)
        if vlan_id is not None:
            pulumi.set(__self__, "vlan_id", vlan_id)
        if wan_dhcp_v6_pd_size is not None:
            pulumi.set(__self__, "wan_dhcp_v6_pd_size", wan_dhcp_v6_pd_size)
        if wan_dns is not None:
            pulumi.set(__self__, "wan_dns", wan_dns)
        if wan_egress_qos is not None:
            pulumi.set(__self__, "wan_egress_qos", wan_egress_qos)
        if wan_gateway is not None:
            pulumi.set(__self__, "wan_gateway", wan_gateway)
        if wan_gateway_v6 is not None:
            pulumi.set(__self__, "wan_gateway_v6", wan_gateway_v6)
        if wan_ip is not None:
            pulumi.set(__self__, "wan_ip", wan_ip)
        if wan_ipv6 is not None:
            pulumi.set(__self__, "wan_ipv6", wan_ipv6)
        if wan_netmask is not None:
            pulumi.set(__self__, "wan_netmask", wan_netmask)
        if wan_networkgroup is not None:
            pulumi.set(__self__, "wan_networkgroup", wan_networkgroup)
        if wan_prefixlen is not None:
            pulumi.set(__self__, "wan_prefixlen", wan_prefixlen)
        if wan_type is not None:
            pulumi.set(__self__, "wan_type", wan_type)
        if wan_type_v6 is not None:
            pulumi.set(__self__, "wan_type_v6", wan_type_v6)
        if wan_username is not None:
            pulumi.set(__self__, "wan_username", wan_username)
        if x_wan_password is not None:
            pulumi.set(__self__, "x_wan_password", x_wan_password)

    @_builtins.property
    @pulumi.getter(name="dhcpDns")
    def dhcp_dns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        List of IPv4 DNS server addresses to be provided to DHCP clients. Examples:
        * Use ['8.8.8.8', '8.8.4.4'] for Google DNS
        * Use ['1.1.1.1', '1.0.0.1'] for Cloudflare DNS
        * Use internal DNS servers for corporate networks
        Maximum 4 servers can be specified.
        """
        return pulumi.get(self, "dhcp_dns")

    @dhcp_dns.setter
    def dhcp_dns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "dhcp_dns", value)

    @_builtins.property
    @pulumi.getter(name="dhcpEnabled")
    def dhcp_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Controls whether DHCP server is enabled for this network. When enabled:
        * The network will automatically assign IP addresses to clients
        * DHCP options (DNS, lease time) will be provided to clients
        * Static IP assignments can still be made outside the DHCP range
        """
        return pulumi.get(self, "dhcp_enabled")

    @dhcp_enabled.setter
    def dhcp_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "dhcp_enabled", value)

    @_builtins.property
    @pulumi.getter(name="dhcpLease")
    def dhcp_lease(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The DHCP lease time in seconds. Common values:
        * 86400 (1 day) - Default, suitable for most networks
        * 3600 (1 hour) - For testing or temporary networks
        * 604800 (1 week) - For stable networks with static clients
        * 2592000 (30 days) - For very stable networks
        """
        return pulumi.get(self, "dhcp_lease")

    @dhcp_lease.setter
    def dhcp_lease(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "dhcp_lease", value)

    @_builtins.property
    @pulumi.getter(name="dhcpRelayEnabled")
    def dhcp_relay_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables DHCP relay for this network. When enabled:
        * DHCP requests are forwarded to an external DHCP server
        * Local DHCP server is disabled
        * Useful for centralized DHCP management
        """
        return pulumi.get(self, "dhcp_relay_enabled")

    @dhcp_relay_enabled.setter
    def dhcp_relay_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "dhcp_relay_enabled", value)

    @_builtins.property
    @pulumi.getter(name="dhcpStart")
    def dhcp_start(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The starting IPv4 address of the DHCP range. Examples:
        * For subnet 192.168.1.0/24, typical start: '192.168.1.100'
        * For subnet 10.0.0.0/24, typical start: '10.0.0.100'
        Ensure this address is within the network's subnet.
        """
        return pulumi.get(self, "dhcp_start")

    @dhcp_start.setter
    def dhcp_start(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "dhcp_start", value)

    @_builtins.property
    @pulumi.getter(name="dhcpStop")
    def dhcp_stop(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The ending IPv4 address of the DHCP range. Examples:
        * For subnet 192.168.1.0/24, typical stop: '192.168.1.254'
        * For subnet 10.0.0.0/24, typical stop: '10.0.0.254'
        Must be greater than dhcp_start and within the network's subnet.
        """
        return pulumi.get(self, "dhcp_stop")

    @dhcp_stop.setter
    def dhcp_stop(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "dhcp_stop", value)

    @_builtins.property
    @pulumi.getter(name="dhcpV6Dns")
    def dhcp_v6_dns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        List of IPv6 DNS server addresses for DHCPv6 clients. Examples:
        * Use ['2001:4860:4860::8888', '2001:4860:4860::8844'] for Google DNS
        * Use ['2606:4700:4700::1111', '2606:4700:4700::1001'] for Cloudflare DNS
        Only used when dhcp_v6_dns_auto is false. Maximum of 4 addresses are allowed.
        """
        return pulumi.get(self, "dhcp_v6_dns")

    @dhcp_v6_dns.setter
    def dhcp_v6_dns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "dhcp_v6_dns", value)

    @_builtins.property
    @pulumi.getter(name="dhcpV6DnsAuto")
    def dhcp_v6_dns_auto(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Controls DNS server source for DHCPv6 clients:
        * true - Use upstream DNS servers (recommended)
        * false - Use manually specified servers from dhcp_v6_dns
        Default is true for easier management.
        """
        return pulumi.get(self, "dhcp_v6_dns_auto")

    @dhcp_v6_dns_auto.setter
    def dhcp_v6_dns_auto(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "dhcp_v6_dns_auto", value)

    @_builtins.property
    @pulumi.getter(name="dhcpV6Enabled")
    def dhcp_v6_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables stateful DHCPv6 for IPv6 address assignment. When enabled:
        * Provides IPv6 addresses to clients
        * Works alongside SLAAC if configured
        * Allows for more controlled IPv6 addressing
        """
        return pulumi.get(self, "dhcp_v6_enabled")

    @dhcp_v6_enabled.setter
    def dhcp_v6_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "dhcp_v6_enabled", value)

    @_builtins.property
    @pulumi.getter(name="dhcpV6Lease")
    def dhcp_v6_lease(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The DHCPv6 lease time in seconds. Common values:
        * 86400 (1 day) - Default setting
        * 3600 (1 hour) - For testing
        * 604800 (1 week) - For stable networks
        Typically longer than IPv4 DHCP leases.
        """
        return pulumi.get(self, "dhcp_v6_lease")

    @dhcp_v6_lease.setter
    def dhcp_v6_lease(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "dhcp_v6_lease", value)

    @_builtins.property
    @pulumi.getter(name="dhcpV6Start")
    def dhcp_v6_start(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The starting IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
        Must be a valid IPv6 address within your allocated IPv6 subnet.
        """
        return pulumi.get(self, "dhcp_v6_start")

    @dhcp_v6_start.setter
    def dhcp_v6_start(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "dhcp_v6_start", value)

    @_builtins.property
    @pulumi.getter(name="dhcpV6Stop")
    def dhcp_v6_stop(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The ending IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
        Must be after dhcp_v6_start in the IPv6 address space.
        """
        return pulumi.get(self, "dhcp_v6_stop")

    @dhcp_v6_stop.setter
    def dhcp_v6_stop(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "dhcp_v6_stop", value)

    @_builtins.property
    @pulumi.getter(name="dhcpdBootEnabled")
    def dhcpd_boot_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables DHCP boot options for PXE boot or network boot configurations. When enabled:
        * Allows network devices to boot from a TFTP server
        * Requires dhcpd_boot_server and dhcpd_boot_filename to be set
        * Commonly used for diskless workstations or network installations
        """
        return pulumi.get(self, "dhcpd_boot_enabled")

    @dhcpd_boot_enabled.setter
    def dhcpd_boot_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "dhcpd_boot_enabled", value)

    @_builtins.property
    @pulumi.getter(name="dhcpdBootFilename")
    def dhcpd_boot_filename(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The boot filename to be loaded from the TFTP server. Examples:
        * 'pxelinux.0' - Standard PXE boot loader
        * 'undionly.kpxe' - iPXE boot loader
        * Custom paths for specific boot images
        """
        return pulumi.get(self, "dhcpd_boot_filename")

    @dhcpd_boot_filename.setter
    def dhcpd_boot_filename(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "dhcpd_boot_filename", value)

    @_builtins.property
    @pulumi.getter(name="dhcpdBootServer")
    def dhcpd_boot_server(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv4 address of the TFTP server for network boot. This setting:
        * Is required when dhcpd_boot_enabled is true
        * Should be a reliable, always-on server
        * Must be accessible to all clients that need to boot
        """
        return pulumi.get(self, "dhcpd_boot_server")

    @dhcpd_boot_server.setter
    def dhcpd_boot_server(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "dhcpd_boot_server", value)

    @_builtins.property
    @pulumi.getter(name="domainName")
    def domain_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The domain name for this network. Examples:
        * 'corp.example.com' - For corporate networks
        * 'guest.example.com' - For guest networks
        * 'iot.example.com' - For IoT networks
        Used for internal DNS resolution and DHCP options.
        """
        return pulumi.get(self, "domain_name")

    @domain_name.setter
    def domain_name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "domain_name", value)

    @_builtins.property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Controls whether this network is active. When disabled:
        * Network will not be available to clients
        * DHCP services will be stopped
        * Existing clients will be disconnected
        Useful for temporary network maintenance or security measures.
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "enabled", value)

    @_builtins.property
    @pulumi.getter(name="igmpSnooping")
    def igmp_snooping(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables IGMP (Internet Group Management Protocol) snooping. When enabled:
        * Optimizes multicast traffic flow
        * Reduces network congestion
        * Improves performance for multicast applications (e.g., IPTV)
        Recommended for networks with multicast traffic.
        """
        return pulumi.get(self, "igmp_snooping")

    @igmp_snooping.setter
    def igmp_snooping(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "igmp_snooping", value)

    @_builtins.property
    @pulumi.getter(name="internetAccessEnabled")
    def internet_access_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Controls internet access for this network. When disabled:
        * Clients cannot access external networks
        * Internal network access remains available
        * Useful for creating isolated or secure networks
        """
        return pulumi.get(self, "internet_access_enabled")

    @internet_access_enabled.setter
    def internet_access_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "internet_access_enabled", value)

    @_builtins.property
    @pulumi.getter(name="ipv6InterfaceType")
    def ipv6_interface_type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the IPv6 connection type. Must be one of:
        * `none` - IPv6 disabled (default)
        * `static` - Static IPv6 addressing
        * `pd` - Prefix Delegation from upstream

        Choose based on your IPv6 deployment strategy and ISP capabilities.
        """
        return pulumi.get(self, "ipv6_interface_type")

    @ipv6_interface_type.setter
    def ipv6_interface_type(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_interface_type", value)

    @_builtins.property
    @pulumi.getter(name="ipv6PdInterface")
    def ipv6_pd_interface(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The WAN interface to use for IPv6 Prefix Delegation. Options:
        * `wan` - Primary WAN interface
        * `wan2` - Secondary WAN interface
        Only applicable when `ipv6_interface_type` is 'pd'.
        """
        return pulumi.get(self, "ipv6_pd_interface")

    @ipv6_pd_interface.setter
    def ipv6_pd_interface(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_pd_interface", value)

    @_builtins.property
    @pulumi.getter(name="ipv6PdPrefixid")
    def ipv6_pd_prefixid(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv6 Prefix ID for Prefix Delegation. Used to:
        * Differentiate multiple delegated prefixes
        * Create unique subnets from the delegated prefix
        Typically a hexadecimal value (e.g., '0', '1', 'a1').
        """
        return pulumi.get(self, "ipv6_pd_prefixid")

    @ipv6_pd_prefixid.setter
    def ipv6_pd_prefixid(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_pd_prefixid", value)

    @_builtins.property
    @pulumi.getter(name="ipv6PdStart")
    def ipv6_pd_start(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The starting IPv6 address for Prefix Delegation range.
        Only used when `ipv6_interface_type` is 'pd'.
        Must be within the delegated prefix range.
        """
        return pulumi.get(self, "ipv6_pd_start")

    @ipv6_pd_start.setter
    def ipv6_pd_start(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_pd_start", value)

    @_builtins.property
    @pulumi.getter(name="ipv6PdStop")
    def ipv6_pd_stop(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The ending IPv6 address for Prefix Delegation range.
        Only used when `ipv6_interface_type` is 'pd'.
        Must be after `ipv6_pd_start` within the delegated prefix.
        """
        return pulumi.get(self, "ipv6_pd_stop")

    @ipv6_pd_stop.setter
    def ipv6_pd_stop(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_pd_stop", value)

    @_builtins.property
    @pulumi.getter(name="ipv6RaEnable")
    def ipv6_ra_enable(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables IPv6 Router Advertisements (RA). When enabled:
        * Announces IPv6 prefix information to clients
        * Enables SLAAC address configuration
        * Required for most IPv6 deployments
        """
        return pulumi.get(self, "ipv6_ra_enable")

    @ipv6_ra_enable.setter
    def ipv6_ra_enable(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "ipv6_ra_enable", value)

    @_builtins.property
    @pulumi.getter(name="ipv6RaPreferredLifetime")
    def ipv6_ra_preferred_lifetime(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The preferred lifetime (in seconds) for IPv6 addresses in Router Advertisements.
        * Must be less than or equal to `ipv6_ra_valid_lifetime`
        * Default: 14400 (4 hours)
        * After this time, addresses become deprecated but still usable
        """
        return pulumi.get(self, "ipv6_ra_preferred_lifetime")

    @ipv6_ra_preferred_lifetime.setter
    def ipv6_ra_preferred_lifetime(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "ipv6_ra_preferred_lifetime", value)

    @_builtins.property
    @pulumi.getter(name="ipv6RaPriority")
    def ipv6_ra_priority(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Sets the priority for IPv6 Router Advertisements. Options:
        * `high` - Preferred for primary networks
        * `medium` - Standard priority
        * `low` - For backup or secondary networks
        Affects router selection when multiple IPv6 routers exist.
        """
        return pulumi.get(self, "ipv6_ra_priority")

    @ipv6_ra_priority.setter
    def ipv6_ra_priority(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_ra_priority", value)

    @_builtins.property
    @pulumi.getter(name="ipv6RaValidLifetime")
    def ipv6_ra_valid_lifetime(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The valid lifetime (in seconds) for IPv6 addresses in Router Advertisements.
        * Must be greater than or equal to `ipv6_ra_preferred_lifetime`
        * Default: 86400 (24 hours)
        * After this time, addresses become invalid
        """
        return pulumi.get(self, "ipv6_ra_valid_lifetime")

    @ipv6_ra_valid_lifetime.setter
    def ipv6_ra_valid_lifetime(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "ipv6_ra_valid_lifetime", value)

    @_builtins.property
    @pulumi.getter(name="ipv6StaticSubnet")
    def ipv6_static_subnet(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The static IPv6 subnet in CIDR notation (e.g., '2001:db8::/64') when using static IPv6.
        Only applicable when `ipv6_interface_type` is 'static'.
        Must be a valid IPv6 subnet allocated to your organization.
        """
        return pulumi.get(self, "ipv6_static_subnet")

    @ipv6_static_subnet.setter
    def ipv6_static_subnet(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "ipv6_static_subnet", value)

    @_builtins.property
    @pulumi.getter(name="multicastDns")
    def multicast_dns(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables Multicast DNS (mDNS/Bonjour/Avahi) on the network. When enabled:
        * Allows device discovery (e.g., printers, Chromecasts)
        * Supports zero-configuration networking
        * Available on Controller version 7 and later
        """
        return pulumi.get(self, "multicast_dns")

    @multicast_dns.setter
    def multicast_dns(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "multicast_dns", value)

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the network. This should be a descriptive name that helps identify the network's purpose, such as 'Corporate-Main', 'Guest-Network', or 'IoT-VLAN'.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "name", value)

    @_builtins.property
    @pulumi.getter(name="networkGroup")
    def network_group(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The network group for this network. Default is 'LAN'. For WAN networks, use 'WAN' or 'WAN2'. Network groups help organize and apply policies to multiple networks.
        """
        return pulumi.get(self, "network_group")

    @network_group.setter
    def network_group(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "network_group", value)

    @_builtins.property
    @pulumi.getter(name="networkIsolationEnabled")
    def network_isolation_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Enables network isolation. When enabled:
        * Prevents communication between clients on this network
        * Each client can only communicate with the gateway
        * Commonly used for guest networks or IoT devices
        """
        return pulumi.get(self, "network_isolation_enabled")

    @network_isolation_enabled.setter
    def network_isolation_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "network_isolation_enabled", value)

    @_builtins.property
    @pulumi.getter
    def purpose(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The purpose/type of the network. Must be one of:
        * `corporate` - Standard network for corporate use with full access
        * `guest` - Isolated network for guest access with limited permissions
        * `wan` - External network connection (WAN uplink)
        * `vlan-only` - VLAN network without DHCP services
        """
        return pulumi.get(self, "purpose")

    @purpose.setter
    def purpose(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "purpose", value)

    @_builtins.property
    @pulumi.getter
    def site(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the site to associate the network with.
        """
        return pulumi.get(self, "site")

    @site.setter
    def site(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "site", value)

    @_builtins.property
    @pulumi.getter
    def subnet(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv4 subnet for this network in CIDR notation (e.g., '192.168.1.0/24'). This defines the network's address space and determines the range of IP addresses available for DHCP.
        """
        return pulumi.get(self, "subnet")

    @subnet.setter
    def subnet(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "subnet", value)

    @_builtins.property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The VLAN ID for this network. Valid range is 0-4096. Common uses:
        * 1-4094: Standard VLAN range for network segmentation
        * 0: Untagged/native VLAN
        * >4094: Reserved for special purposes
        """
        return pulumi.get(self, "vlan_id")

    @vlan_id.setter
    def vlan_id(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "vlan_id", value)

    @_builtins.property
    @pulumi.getter(name="wanDhcpV6PdSize")
    def wan_dhcp_v6_pd_size(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The IPv6 prefix size to request from ISP. Must be between 48 and 64.
        Only applicable when `wan_type_v6` is 'dhcpv6'.
        """
        return pulumi.get(self, "wan_dhcp_v6_pd_size")

    @wan_dhcp_v6_pd_size.setter
    def wan_dhcp_v6_pd_size(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "wan_dhcp_v6_pd_size", value)

    @_builtins.property
    @pulumi.getter(name="wanDns")
    def wan_dns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        List of IPv4 DNS servers for WAN interface. Examples:
        * ISP provided DNS servers
        * Public DNS services (e.g., 8.8.8.8, 1.1.1.1)
        * Maximum 4 servers can be specified
        """
        return pulumi.get(self, "wan_dns")

    @wan_dns.setter
    def wan_dns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "wan_dns", value)

    @_builtins.property
    @pulumi.getter(name="wanEgressQos")
    def wan_egress_qos(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Quality of Service (QoS) priority for WAN egress traffic (0-7).
        * 0 (default) - Best effort
        * 1-4 - Increasing priority
        * 5-7 - Highest priority, use sparingly
        Higher values get preferential treatment.
        """
        return pulumi.get(self, "wan_egress_qos")

    @wan_egress_qos.setter
    def wan_egress_qos(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "wan_egress_qos", value)

    @_builtins.property
    @pulumi.getter(name="wanGateway")
    def wan_gateway(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv4 gateway address for WAN interface.
        Required when `wan_type` is 'static'.
        Typically the ISP's router IP address.
        """
        return pulumi.get(self, "wan_gateway")

    @wan_gateway.setter
    def wan_gateway(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_gateway", value)

    @_builtins.property
    @pulumi.getter(name="wanGatewayV6")
    def wan_gateway_v6(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv6 gateway address for WAN interface.
        Required when `wan_type_v6` is 'static'.
        Typically the ISP's router IPv6 address.
        """
        return pulumi.get(self, "wan_gateway_v6")

    @wan_gateway_v6.setter
    def wan_gateway_v6(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_gateway_v6", value)

    @_builtins.property
    @pulumi.getter(name="wanIp")
    def wan_ip(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The static IPv4 address for WAN interface.
        Required when `wan_type` is 'static'.
        Must be a valid public IP address assigned by your ISP.
        """
        return pulumi.get(self, "wan_ip")

    @wan_ip.setter
    def wan_ip(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_ip", value)

    @_builtins.property
    @pulumi.getter(name="wanIpv6")
    def wan_ipv6(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The static IPv6 address for WAN interface.
        Required when `wan_type_v6` is 'static'.
        Must be a valid public IPv6 address assigned by your ISP.
        """
        return pulumi.get(self, "wan_ipv6")

    @wan_ipv6.setter
    def wan_ipv6(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_ipv6", value)

    @_builtins.property
    @pulumi.getter(name="wanNetmask")
    def wan_netmask(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv4 netmask for WAN interface (e.g., '255.255.255.0').
        Required when `wan_type` is 'static'.
        Must match the subnet mask provided by your ISP.
        """
        return pulumi.get(self, "wan_netmask")

    @wan_netmask.setter
    def wan_netmask(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_netmask", value)

    @_builtins.property
    @pulumi.getter(name="wanNetworkgroup")
    def wan_networkgroup(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The WAN interface group assignment. Options:
        * `WAN` - Primary WAN interface
        * `WAN2` - Secondary WAN interface
        * `WAN_LTE_FAILOVER` - LTE backup connection
        Used for dual WAN and failover configurations.
        """
        return pulumi.get(self, "wan_networkgroup")

    @wan_networkgroup.setter
    def wan_networkgroup(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_networkgroup", value)

    @_builtins.property
    @pulumi.getter(name="wanPrefixlen")
    def wan_prefixlen(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The IPv6 prefix length for WAN interface. Must be between 1 and 128.
        Only applicable when `wan_type_v6` is 'static'.
        """
        return pulumi.get(self, "wan_prefixlen")

    @wan_prefixlen.setter
    def wan_prefixlen(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "wan_prefixlen", value)

    @_builtins.property
    @pulumi.getter(name="wanType")
    def wan_type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv4 WAN connection type. Options:
        * `disabled` - WAN interface disabled
        * `static` - Static IP configuration
        * `dhcp` - Dynamic IP from ISP
        * `pppoe` - PPPoE connection (common for DSL)
        Choose based on your ISP's requirements.
        """
        return pulumi.get(self, "wan_type")

    @wan_type.setter
    def wan_type(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_type", value)

    @_builtins.property
    @pulumi.getter(name="wanTypeV6")
    def wan_type_v6(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The IPv6 WAN connection type. Options:
        * `disabled` - IPv6 disabled
        * `static` - Static IPv6 configuration
        * `dhcpv6` - Dynamic IPv6 from ISP
        Choose based on your ISP's requirements.
        """
        return pulumi.get(self, "wan_type_v6")

    @wan_type_v6.setter
    def wan_type_v6(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_type_v6", value)

    @_builtins.property
    @pulumi.getter(name="wanUsername")
    def wan_username(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Username for WAN authentication.
        * Required for PPPoE connections
        * May be needed for some ISP configurations
        * Cannot contain spaces or special characters
        """
        return pulumi.get(self, "wan_username")

    @wan_username.setter
    def wan_username(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "wan_username", value)

    @_builtins.property
    @pulumi.getter(name="xWanPassword")
    def x_wan_password(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Password for WAN authentication.
        * Required for PPPoE connections
        * May be needed for some ISP configurations
        * Must be kept secret
        """
        return pulumi.get(self, "x_wan_password")

    @x_wan_password.setter
    def x_wan_password(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "x_wan_password", value)


@pulumi.type_token("unifi:index/network:Network")
class Network(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 dhcp_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 dhcp_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_lease: Optional[pulumi.Input[_builtins.int]] = None,
                 dhcp_relay_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_start: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcp_stop: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcp_v6_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 dhcp_v6_dns_auto: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_v6_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_v6_lease: Optional[pulumi.Input[_builtins.int]] = None,
                 dhcp_v6_start: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcp_v6_stop: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcpd_boot_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcpd_boot_filename: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcpd_boot_server: Optional[pulumi.Input[_builtins.str]] = None,
                 domain_name: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 igmp_snooping: Optional[pulumi.Input[_builtins.bool]] = None,
                 internet_access_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 ipv6_interface_type: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_interface: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_prefixid: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_start: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_stop: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_ra_enable: Optional[pulumi.Input[_builtins.bool]] = None,
                 ipv6_ra_preferred_lifetime: Optional[pulumi.Input[_builtins.int]] = None,
                 ipv6_ra_priority: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_ra_valid_lifetime: Optional[pulumi.Input[_builtins.int]] = None,
                 ipv6_static_subnet: Optional[pulumi.Input[_builtins.str]] = None,
                 multicast_dns: Optional[pulumi.Input[_builtins.bool]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 network_group: Optional[pulumi.Input[_builtins.str]] = None,
                 network_isolation_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 purpose: Optional[pulumi.Input[_builtins.str]] = None,
                 site: Optional[pulumi.Input[_builtins.str]] = None,
                 subnet: Optional[pulumi.Input[_builtins.str]] = None,
                 vlan_id: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_dhcp_v6_pd_size: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 wan_egress_qos: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_gateway: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_gateway_v6: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_ip: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_ipv6: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_netmask: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_networkgroup: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_prefixlen: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_type: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_type_v6: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_username: Optional[pulumi.Input[_builtins.str]] = None,
                 x_wan_password: Optional[pulumi.Input[_builtins.str]] = None,
                 __props__=None):
        """
        The `Network` resource manages networks in your UniFi environment, including WAN, LAN, and VLAN networks. This resource enables you to:

        * Create and manage different types of networks (corporate, guest, WAN, VLAN-only)
        * Configure network addressing and DHCP settings
        * Set up IPv6 networking features
        * Manage DHCP relay and DNS settings
        * Configure network groups and VLANs

        Common use cases include:
        * Setting up corporate and guest networks with different security policies
        * Configuring WAN connectivity with various authentication methods
        * Creating VLANs for network segmentation
        * Managing DHCP and DNS services for network clients

        ## Example Usage

        ```python
        import pulumi
        import pulumiverse_unifi as unifi

        config = pulumi.Config()
        vlan_id = config.get_float("vlanId")
        if vlan_id is None:
            vlan_id = 10
        vlan = unifi.Network("vlan",
            name="wifi-vlan",
            purpose="corporate",
            subnet="10.0.0.1/24",
            vlan_id=vlan_id,
            dhcp_start="10.0.0.6",
            dhcp_stop="10.0.0.254",
            dhcp_enabled=True)
        wan = unifi.Network("wan",
            name="wan",
            purpose="wan",
            wan_networkgroup="WAN",
            wan_type="pppoe",
            wan_ip="192.168.1.1",
            wan_egress_qos=1,
            wan_username="username",
            x_wan_password="password")
        ```

        ## Import

        import from provider configured site

        ```sh
        $ pulumi import unifi:index/network:Network mynetwork 5dc28e5e9106d105bdc87217
        ```

        import from another site

        ```sh
        $ pulumi import unifi:index/network:Network mynetwork bfa2l6i7:5dc28e5e9106d105bdc87217
        ```

        import network by name

        ```sh
        $ pulumi import unifi:index/network:Network mynetwork name=LAN
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] dhcp_dns: List of IPv4 DNS server addresses to be provided to DHCP clients. Examples:
               * Use ['8.8.8.8', '8.8.4.4'] for Google DNS
               * Use ['1.1.1.1', '1.0.0.1'] for Cloudflare DNS
               * Use internal DNS servers for corporate networks
               Maximum 4 servers can be specified.
        :param pulumi.Input[_builtins.bool] dhcp_enabled: Controls whether DHCP server is enabled for this network. When enabled:
               * The network will automatically assign IP addresses to clients
               * DHCP options (DNS, lease time) will be provided to clients
               * Static IP assignments can still be made outside the DHCP range
        :param pulumi.Input[_builtins.int] dhcp_lease: The DHCP lease time in seconds. Common values:
               * 86400 (1 day) - Default, suitable for most networks
               * 3600 (1 hour) - For testing or temporary networks
               * 604800 (1 week) - For stable networks with static clients
               * 2592000 (30 days) - For very stable networks
        :param pulumi.Input[_builtins.bool] dhcp_relay_enabled: Enables DHCP relay for this network. When enabled:
               * DHCP requests are forwarded to an external DHCP server
               * Local DHCP server is disabled
               * Useful for centralized DHCP management
        :param pulumi.Input[_builtins.str] dhcp_start: The starting IPv4 address of the DHCP range. Examples:
               * For subnet 192.168.1.0/24, typical start: '192.168.1.100'
               * For subnet 10.0.0.0/24, typical start: '10.0.0.100'
               Ensure this address is within the network's subnet.
        :param pulumi.Input[_builtins.str] dhcp_stop: The ending IPv4 address of the DHCP range. Examples:
               * For subnet 192.168.1.0/24, typical stop: '192.168.1.254'
               * For subnet 10.0.0.0/24, typical stop: '10.0.0.254'
               Must be greater than dhcp_start and within the network's subnet.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] dhcp_v6_dns: List of IPv6 DNS server addresses for DHCPv6 clients. Examples:
               * Use ['2001:4860:4860::8888', '2001:4860:4860::8844'] for Google DNS
               * Use ['2606:4700:4700::1111', '2606:4700:4700::1001'] for Cloudflare DNS
               Only used when dhcp_v6_dns_auto is false. Maximum of 4 addresses are allowed.
        :param pulumi.Input[_builtins.bool] dhcp_v6_dns_auto: Controls DNS server source for DHCPv6 clients:
               * true - Use upstream DNS servers (recommended)
               * false - Use manually specified servers from dhcp_v6_dns
               Default is true for easier management.
        :param pulumi.Input[_builtins.bool] dhcp_v6_enabled: Enables stateful DHCPv6 for IPv6 address assignment. When enabled:
               * Provides IPv6 addresses to clients
               * Works alongside SLAAC if configured
               * Allows for more controlled IPv6 addressing
        :param pulumi.Input[_builtins.int] dhcp_v6_lease: The DHCPv6 lease time in seconds. Common values:
               * 86400 (1 day) - Default setting
               * 3600 (1 hour) - For testing
               * 604800 (1 week) - For stable networks
               Typically longer than IPv4 DHCP leases.
        :param pulumi.Input[_builtins.str] dhcp_v6_start: The starting IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
               Must be a valid IPv6 address within your allocated IPv6 subnet.
        :param pulumi.Input[_builtins.str] dhcp_v6_stop: The ending IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
               Must be after dhcp_v6_start in the IPv6 address space.
        :param pulumi.Input[_builtins.bool] dhcpd_boot_enabled: Enables DHCP boot options for PXE boot or network boot configurations. When enabled:
               * Allows network devices to boot from a TFTP server
               * Requires dhcpd_boot_server and dhcpd_boot_filename to be set
               * Commonly used for diskless workstations or network installations
        :param pulumi.Input[_builtins.str] dhcpd_boot_filename: The boot filename to be loaded from the TFTP server. Examples:
               * 'pxelinux.0' - Standard PXE boot loader
               * 'undionly.kpxe' - iPXE boot loader
               * Custom paths for specific boot images
        :param pulumi.Input[_builtins.str] dhcpd_boot_server: The IPv4 address of the TFTP server for network boot. This setting:
               * Is required when dhcpd_boot_enabled is true
               * Should be a reliable, always-on server
               * Must be accessible to all clients that need to boot
        :param pulumi.Input[_builtins.str] domain_name: The domain name for this network. Examples:
               * 'corp.example.com' - For corporate networks
               * 'guest.example.com' - For guest networks
               * 'iot.example.com' - For IoT networks
               Used for internal DNS resolution and DHCP options.
        :param pulumi.Input[_builtins.bool] enabled: Controls whether this network is active. When disabled:
               * Network will not be available to clients
               * DHCP services will be stopped
               * Existing clients will be disconnected
               Useful for temporary network maintenance or security measures.
        :param pulumi.Input[_builtins.bool] igmp_snooping: Enables IGMP (Internet Group Management Protocol) snooping. When enabled:
               * Optimizes multicast traffic flow
               * Reduces network congestion
               * Improves performance for multicast applications (e.g., IPTV)
               Recommended for networks with multicast traffic.
        :param pulumi.Input[_builtins.bool] internet_access_enabled: Controls internet access for this network. When disabled:
               * Clients cannot access external networks
               * Internal network access remains available
               * Useful for creating isolated or secure networks
        :param pulumi.Input[_builtins.str] ipv6_interface_type: Specifies the IPv6 connection type. Must be one of:
               * `none` - IPv6 disabled (default)
               * `static` - Static IPv6 addressing
               * `pd` - Prefix Delegation from upstream
               
               Choose based on your IPv6 deployment strategy and ISP capabilities.
        :param pulumi.Input[_builtins.str] ipv6_pd_interface: The WAN interface to use for IPv6 Prefix Delegation. Options:
               * `wan` - Primary WAN interface
               * `wan2` - Secondary WAN interface
               Only applicable when `ipv6_interface_type` is 'pd'.
        :param pulumi.Input[_builtins.str] ipv6_pd_prefixid: The IPv6 Prefix ID for Prefix Delegation. Used to:
               * Differentiate multiple delegated prefixes
               * Create unique subnets from the delegated prefix
               Typically a hexadecimal value (e.g., '0', '1', 'a1').
        :param pulumi.Input[_builtins.str] ipv6_pd_start: The starting IPv6 address for Prefix Delegation range.
               Only used when `ipv6_interface_type` is 'pd'.
               Must be within the delegated prefix range.
        :param pulumi.Input[_builtins.str] ipv6_pd_stop: The ending IPv6 address for Prefix Delegation range.
               Only used when `ipv6_interface_type` is 'pd'.
               Must be after `ipv6_pd_start` within the delegated prefix.
        :param pulumi.Input[_builtins.bool] ipv6_ra_enable: Enables IPv6 Router Advertisements (RA). When enabled:
               * Announces IPv6 prefix information to clients
               * Enables SLAAC address configuration
               * Required for most IPv6 deployments
        :param pulumi.Input[_builtins.int] ipv6_ra_preferred_lifetime: The preferred lifetime (in seconds) for IPv6 addresses in Router Advertisements.
               * Must be less than or equal to `ipv6_ra_valid_lifetime`
               * Default: 14400 (4 hours)
               * After this time, addresses become deprecated but still usable
        :param pulumi.Input[_builtins.str] ipv6_ra_priority: Sets the priority for IPv6 Router Advertisements. Options:
               * `high` - Preferred for primary networks
               * `medium` - Standard priority
               * `low` - For backup or secondary networks
               Affects router selection when multiple IPv6 routers exist.
        :param pulumi.Input[_builtins.int] ipv6_ra_valid_lifetime: The valid lifetime (in seconds) for IPv6 addresses in Router Advertisements.
               * Must be greater than or equal to `ipv6_ra_preferred_lifetime`
               * Default: 86400 (24 hours)
               * After this time, addresses become invalid
        :param pulumi.Input[_builtins.str] ipv6_static_subnet: The static IPv6 subnet in CIDR notation (e.g., '2001:db8::/64') when using static IPv6.
               Only applicable when `ipv6_interface_type` is 'static'.
               Must be a valid IPv6 subnet allocated to your organization.
        :param pulumi.Input[_builtins.bool] multicast_dns: Enables Multicast DNS (mDNS/Bonjour/Avahi) on the network. When enabled:
               * Allows device discovery (e.g., printers, Chromecasts)
               * Supports zero-configuration networking
               * Available on Controller version 7 and later
        :param pulumi.Input[_builtins.str] name: The name of the network. This should be a descriptive name that helps identify the network's purpose, such as 'Corporate-Main', 'Guest-Network', or 'IoT-VLAN'.
        :param pulumi.Input[_builtins.str] network_group: The network group for this network. Default is 'LAN'. For WAN networks, use 'WAN' or 'WAN2'. Network groups help organize and apply policies to multiple networks.
        :param pulumi.Input[_builtins.bool] network_isolation_enabled: Enables network isolation. When enabled:
               * Prevents communication between clients on this network
               * Each client can only communicate with the gateway
               * Commonly used for guest networks or IoT devices
        :param pulumi.Input[_builtins.str] purpose: The purpose/type of the network. Must be one of:
               * `corporate` - Standard network for corporate use with full access
               * `guest` - Isolated network for guest access with limited permissions
               * `wan` - External network connection (WAN uplink)
               * `vlan-only` - VLAN network without DHCP services
        :param pulumi.Input[_builtins.str] site: The name of the site to associate the network with.
        :param pulumi.Input[_builtins.str] subnet: The IPv4 subnet for this network in CIDR notation (e.g., '192.168.1.0/24'). This defines the network's address space and determines the range of IP addresses available for DHCP.
        :param pulumi.Input[_builtins.int] vlan_id: The VLAN ID for this network. Valid range is 0-4096. Common uses:
               * 1-4094: Standard VLAN range for network segmentation
               * 0: Untagged/native VLAN
               * >4094: Reserved for special purposes
        :param pulumi.Input[_builtins.int] wan_dhcp_v6_pd_size: The IPv6 prefix size to request from ISP. Must be between 48 and 64.
               Only applicable when `wan_type_v6` is 'dhcpv6'.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] wan_dns: List of IPv4 DNS servers for WAN interface. Examples:
               * ISP provided DNS servers
               * Public DNS services (e.g., 8.8.8.8, 1.1.1.1)
               * Maximum 4 servers can be specified
        :param pulumi.Input[_builtins.int] wan_egress_qos: Quality of Service (QoS) priority for WAN egress traffic (0-7).
               * 0 (default) - Best effort
               * 1-4 - Increasing priority
               * 5-7 - Highest priority, use sparingly
               Higher values get preferential treatment.
        :param pulumi.Input[_builtins.str] wan_gateway: The IPv4 gateway address for WAN interface.
               Required when `wan_type` is 'static'.
               Typically the ISP's router IP address.
        :param pulumi.Input[_builtins.str] wan_gateway_v6: The IPv6 gateway address for WAN interface.
               Required when `wan_type_v6` is 'static'.
               Typically the ISP's router IPv6 address.
        :param pulumi.Input[_builtins.str] wan_ip: The static IPv4 address for WAN interface.
               Required when `wan_type` is 'static'.
               Must be a valid public IP address assigned by your ISP.
        :param pulumi.Input[_builtins.str] wan_ipv6: The static IPv6 address for WAN interface.
               Required when `wan_type_v6` is 'static'.
               Must be a valid public IPv6 address assigned by your ISP.
        :param pulumi.Input[_builtins.str] wan_netmask: The IPv4 netmask for WAN interface (e.g., '255.255.255.0').
               Required when `wan_type` is 'static'.
               Must match the subnet mask provided by your ISP.
        :param pulumi.Input[_builtins.str] wan_networkgroup: The WAN interface group assignment. Options:
               * `WAN` - Primary WAN interface
               * `WAN2` - Secondary WAN interface
               * `WAN_LTE_FAILOVER` - LTE backup connection
               Used for dual WAN and failover configurations.
        :param pulumi.Input[_builtins.int] wan_prefixlen: The IPv6 prefix length for WAN interface. Must be between 1 and 128.
               Only applicable when `wan_type_v6` is 'static'.
        :param pulumi.Input[_builtins.str] wan_type: The IPv4 WAN connection type. Options:
               * `disabled` - WAN interface disabled
               * `static` - Static IP configuration
               * `dhcp` - Dynamic IP from ISP
               * `pppoe` - PPPoE connection (common for DSL)
               Choose based on your ISP's requirements.
        :param pulumi.Input[_builtins.str] wan_type_v6: The IPv6 WAN connection type. Options:
               * `disabled` - IPv6 disabled
               * `static` - Static IPv6 configuration
               * `dhcpv6` - Dynamic IPv6 from ISP
               Choose based on your ISP's requirements.
        :param pulumi.Input[_builtins.str] wan_username: Username for WAN authentication.
               * Required for PPPoE connections
               * May be needed for some ISP configurations
               * Cannot contain spaces or special characters
        :param pulumi.Input[_builtins.str] x_wan_password: Password for WAN authentication.
               * Required for PPPoE connections
               * May be needed for some ISP configurations
               * Must be kept secret
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: NetworkArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        The `Network` resource manages networks in your UniFi environment, including WAN, LAN, and VLAN networks. This resource enables you to:

        * Create and manage different types of networks (corporate, guest, WAN, VLAN-only)
        * Configure network addressing and DHCP settings
        * Set up IPv6 networking features
        * Manage DHCP relay and DNS settings
        * Configure network groups and VLANs

        Common use cases include:
        * Setting up corporate and guest networks with different security policies
        * Configuring WAN connectivity with various authentication methods
        * Creating VLANs for network segmentation
        * Managing DHCP and DNS services for network clients

        ## Example Usage

        ```python
        import pulumi
        import pulumiverse_unifi as unifi

        config = pulumi.Config()
        vlan_id = config.get_float("vlanId")
        if vlan_id is None:
            vlan_id = 10
        vlan = unifi.Network("vlan",
            name="wifi-vlan",
            purpose="corporate",
            subnet="10.0.0.1/24",
            vlan_id=vlan_id,
            dhcp_start="10.0.0.6",
            dhcp_stop="10.0.0.254",
            dhcp_enabled=True)
        wan = unifi.Network("wan",
            name="wan",
            purpose="wan",
            wan_networkgroup="WAN",
            wan_type="pppoe",
            wan_ip="192.168.1.1",
            wan_egress_qos=1,
            wan_username="username",
            x_wan_password="password")
        ```

        ## Import

        import from provider configured site

        ```sh
        $ pulumi import unifi:index/network:Network mynetwork 5dc28e5e9106d105bdc87217
        ```

        import from another site

        ```sh
        $ pulumi import unifi:index/network:Network mynetwork bfa2l6i7:5dc28e5e9106d105bdc87217
        ```

        import network by name

        ```sh
        $ pulumi import unifi:index/network:Network mynetwork name=LAN
        ```

        :param str resource_name: The name of the resource.
        :param NetworkArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(NetworkArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 dhcp_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 dhcp_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_lease: Optional[pulumi.Input[_builtins.int]] = None,
                 dhcp_relay_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_start: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcp_stop: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcp_v6_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 dhcp_v6_dns_auto: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_v6_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcp_v6_lease: Optional[pulumi.Input[_builtins.int]] = None,
                 dhcp_v6_start: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcp_v6_stop: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcpd_boot_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 dhcpd_boot_filename: Optional[pulumi.Input[_builtins.str]] = None,
                 dhcpd_boot_server: Optional[pulumi.Input[_builtins.str]] = None,
                 domain_name: Optional[pulumi.Input[_builtins.str]] = None,
                 enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 igmp_snooping: Optional[pulumi.Input[_builtins.bool]] = None,
                 internet_access_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 ipv6_interface_type: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_interface: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_prefixid: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_start: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_pd_stop: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_ra_enable: Optional[pulumi.Input[_builtins.bool]] = None,
                 ipv6_ra_preferred_lifetime: Optional[pulumi.Input[_builtins.int]] = None,
                 ipv6_ra_priority: Optional[pulumi.Input[_builtins.str]] = None,
                 ipv6_ra_valid_lifetime: Optional[pulumi.Input[_builtins.int]] = None,
                 ipv6_static_subnet: Optional[pulumi.Input[_builtins.str]] = None,
                 multicast_dns: Optional[pulumi.Input[_builtins.bool]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 network_group: Optional[pulumi.Input[_builtins.str]] = None,
                 network_isolation_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 purpose: Optional[pulumi.Input[_builtins.str]] = None,
                 site: Optional[pulumi.Input[_builtins.str]] = None,
                 subnet: Optional[pulumi.Input[_builtins.str]] = None,
                 vlan_id: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_dhcp_v6_pd_size: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 wan_egress_qos: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_gateway: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_gateway_v6: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_ip: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_ipv6: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_netmask: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_networkgroup: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_prefixlen: Optional[pulumi.Input[_builtins.int]] = None,
                 wan_type: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_type_v6: Optional[pulumi.Input[_builtins.str]] = None,
                 wan_username: Optional[pulumi.Input[_builtins.str]] = None,
                 x_wan_password: Optional[pulumi.Input[_builtins.str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = NetworkArgs.__new__(NetworkArgs)

            __props__.__dict__["dhcp_dns"] = dhcp_dns
            __props__.__dict__["dhcp_enabled"] = dhcp_enabled
            __props__.__dict__["dhcp_lease"] = dhcp_lease
            __props__.__dict__["dhcp_relay_enabled"] = dhcp_relay_enabled
            __props__.__dict__["dhcp_start"] = dhcp_start
            __props__.__dict__["dhcp_stop"] = dhcp_stop
            __props__.__dict__["dhcp_v6_dns"] = dhcp_v6_dns
            __props__.__dict__["dhcp_v6_dns_auto"] = dhcp_v6_dns_auto
            __props__.__dict__["dhcp_v6_enabled"] = dhcp_v6_enabled
            __props__.__dict__["dhcp_v6_lease"] = dhcp_v6_lease
            __props__.__dict__["dhcp_v6_start"] = dhcp_v6_start
            __props__.__dict__["dhcp_v6_stop"] = dhcp_v6_stop
            __props__.__dict__["dhcpd_boot_enabled"] = dhcpd_boot_enabled
            __props__.__dict__["dhcpd_boot_filename"] = dhcpd_boot_filename
            __props__.__dict__["dhcpd_boot_server"] = dhcpd_boot_server
            __props__.__dict__["domain_name"] = domain_name
            __props__.__dict__["enabled"] = enabled
            __props__.__dict__["igmp_snooping"] = igmp_snooping
            __props__.__dict__["internet_access_enabled"] = internet_access_enabled
            __props__.__dict__["ipv6_interface_type"] = ipv6_interface_type
            __props__.__dict__["ipv6_pd_interface"] = ipv6_pd_interface
            __props__.__dict__["ipv6_pd_prefixid"] = ipv6_pd_prefixid
            __props__.__dict__["ipv6_pd_start"] = ipv6_pd_start
            __props__.__dict__["ipv6_pd_stop"] = ipv6_pd_stop
            __props__.__dict__["ipv6_ra_enable"] = ipv6_ra_enable
            __props__.__dict__["ipv6_ra_preferred_lifetime"] = ipv6_ra_preferred_lifetime
            __props__.__dict__["ipv6_ra_priority"] = ipv6_ra_priority
            __props__.__dict__["ipv6_ra_valid_lifetime"] = ipv6_ra_valid_lifetime
            __props__.__dict__["ipv6_static_subnet"] = ipv6_static_subnet
            __props__.__dict__["multicast_dns"] = multicast_dns
            __props__.__dict__["name"] = name
            __props__.__dict__["network_group"] = network_group
            __props__.__dict__["network_isolation_enabled"] = network_isolation_enabled
            if purpose is None and not opts.urn:
                raise TypeError("Missing required property 'purpose'")
            __props__.__dict__["purpose"] = purpose
            __props__.__dict__["site"] = site
            __props__.__dict__["subnet"] = subnet
            __props__.__dict__["vlan_id"] = vlan_id
            __props__.__dict__["wan_dhcp_v6_pd_size"] = wan_dhcp_v6_pd_size
            __props__.__dict__["wan_dns"] = wan_dns
            __props__.__dict__["wan_egress_qos"] = wan_egress_qos
            __props__.__dict__["wan_gateway"] = wan_gateway
            __props__.__dict__["wan_gateway_v6"] = wan_gateway_v6
            __props__.__dict__["wan_ip"] = wan_ip
            __props__.__dict__["wan_ipv6"] = wan_ipv6
            __props__.__dict__["wan_netmask"] = wan_netmask
            __props__.__dict__["wan_networkgroup"] = wan_networkgroup
            __props__.__dict__["wan_prefixlen"] = wan_prefixlen
            __props__.__dict__["wan_type"] = wan_type
            __props__.__dict__["wan_type_v6"] = wan_type_v6
            __props__.__dict__["wan_username"] = wan_username
            __props__.__dict__["x_wan_password"] = x_wan_password
        super(Network, __self__).__init__(
            'unifi:index/network:Network',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            dhcp_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
            dhcp_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
            dhcp_lease: Optional[pulumi.Input[_builtins.int]] = None,
            dhcp_relay_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
            dhcp_start: Optional[pulumi.Input[_builtins.str]] = None,
            dhcp_stop: Optional[pulumi.Input[_builtins.str]] = None,
            dhcp_v6_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
            dhcp_v6_dns_auto: Optional[pulumi.Input[_builtins.bool]] = None,
            dhcp_v6_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
            dhcp_v6_lease: Optional[pulumi.Input[_builtins.int]] = None,
            dhcp_v6_start: Optional[pulumi.Input[_builtins.str]] = None,
            dhcp_v6_stop: Optional[pulumi.Input[_builtins.str]] = None,
            dhcpd_boot_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
            dhcpd_boot_filename: Optional[pulumi.Input[_builtins.str]] = None,
            dhcpd_boot_server: Optional[pulumi.Input[_builtins.str]] = None,
            domain_name: Optional[pulumi.Input[_builtins.str]] = None,
            enabled: Optional[pulumi.Input[_builtins.bool]] = None,
            igmp_snooping: Optional[pulumi.Input[_builtins.bool]] = None,
            internet_access_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
            ipv6_interface_type: Optional[pulumi.Input[_builtins.str]] = None,
            ipv6_pd_interface: Optional[pulumi.Input[_builtins.str]] = None,
            ipv6_pd_prefixid: Optional[pulumi.Input[_builtins.str]] = None,
            ipv6_pd_start: Optional[pulumi.Input[_builtins.str]] = None,
            ipv6_pd_stop: Optional[pulumi.Input[_builtins.str]] = None,
            ipv6_ra_enable: Optional[pulumi.Input[_builtins.bool]] = None,
            ipv6_ra_preferred_lifetime: Optional[pulumi.Input[_builtins.int]] = None,
            ipv6_ra_priority: Optional[pulumi.Input[_builtins.str]] = None,
            ipv6_ra_valid_lifetime: Optional[pulumi.Input[_builtins.int]] = None,
            ipv6_static_subnet: Optional[pulumi.Input[_builtins.str]] = None,
            multicast_dns: Optional[pulumi.Input[_builtins.bool]] = None,
            name: Optional[pulumi.Input[_builtins.str]] = None,
            network_group: Optional[pulumi.Input[_builtins.str]] = None,
            network_isolation_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
            purpose: Optional[pulumi.Input[_builtins.str]] = None,
            site: Optional[pulumi.Input[_builtins.str]] = None,
            subnet: Optional[pulumi.Input[_builtins.str]] = None,
            vlan_id: Optional[pulumi.Input[_builtins.int]] = None,
            wan_dhcp_v6_pd_size: Optional[pulumi.Input[_builtins.int]] = None,
            wan_dns: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
            wan_egress_qos: Optional[pulumi.Input[_builtins.int]] = None,
            wan_gateway: Optional[pulumi.Input[_builtins.str]] = None,
            wan_gateway_v6: Optional[pulumi.Input[_builtins.str]] = None,
            wan_ip: Optional[pulumi.Input[_builtins.str]] = None,
            wan_ipv6: Optional[pulumi.Input[_builtins.str]] = None,
            wan_netmask: Optional[pulumi.Input[_builtins.str]] = None,
            wan_networkgroup: Optional[pulumi.Input[_builtins.str]] = None,
            wan_prefixlen: Optional[pulumi.Input[_builtins.int]] = None,
            wan_type: Optional[pulumi.Input[_builtins.str]] = None,
            wan_type_v6: Optional[pulumi.Input[_builtins.str]] = None,
            wan_username: Optional[pulumi.Input[_builtins.str]] = None,
            x_wan_password: Optional[pulumi.Input[_builtins.str]] = None) -> 'Network':
        """
        Get an existing Network resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] dhcp_dns: List of IPv4 DNS server addresses to be provided to DHCP clients. Examples:
               * Use ['8.8.8.8', '8.8.4.4'] for Google DNS
               * Use ['1.1.1.1', '1.0.0.1'] for Cloudflare DNS
               * Use internal DNS servers for corporate networks
               Maximum 4 servers can be specified.
        :param pulumi.Input[_builtins.bool] dhcp_enabled: Controls whether DHCP server is enabled for this network. When enabled:
               * The network will automatically assign IP addresses to clients
               * DHCP options (DNS, lease time) will be provided to clients
               * Static IP assignments can still be made outside the DHCP range
        :param pulumi.Input[_builtins.int] dhcp_lease: The DHCP lease time in seconds. Common values:
               * 86400 (1 day) - Default, suitable for most networks
               * 3600 (1 hour) - For testing or temporary networks
               * 604800 (1 week) - For stable networks with static clients
               * 2592000 (30 days) - For very stable networks
        :param pulumi.Input[_builtins.bool] dhcp_relay_enabled: Enables DHCP relay for this network. When enabled:
               * DHCP requests are forwarded to an external DHCP server
               * Local DHCP server is disabled
               * Useful for centralized DHCP management
        :param pulumi.Input[_builtins.str] dhcp_start: The starting IPv4 address of the DHCP range. Examples:
               * For subnet 192.168.1.0/24, typical start: '192.168.1.100'
               * For subnet 10.0.0.0/24, typical start: '10.0.0.100'
               Ensure this address is within the network's subnet.
        :param pulumi.Input[_builtins.str] dhcp_stop: The ending IPv4 address of the DHCP range. Examples:
               * For subnet 192.168.1.0/24, typical stop: '192.168.1.254'
               * For subnet 10.0.0.0/24, typical stop: '10.0.0.254'
               Must be greater than dhcp_start and within the network's subnet.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] dhcp_v6_dns: List of IPv6 DNS server addresses for DHCPv6 clients. Examples:
               * Use ['2001:4860:4860::8888', '2001:4860:4860::8844'] for Google DNS
               * Use ['2606:4700:4700::1111', '2606:4700:4700::1001'] for Cloudflare DNS
               Only used when dhcp_v6_dns_auto is false. Maximum of 4 addresses are allowed.
        :param pulumi.Input[_builtins.bool] dhcp_v6_dns_auto: Controls DNS server source for DHCPv6 clients:
               * true - Use upstream DNS servers (recommended)
               * false - Use manually specified servers from dhcp_v6_dns
               Default is true for easier management.
        :param pulumi.Input[_builtins.bool] dhcp_v6_enabled: Enables stateful DHCPv6 for IPv6 address assignment. When enabled:
               * Provides IPv6 addresses to clients
               * Works alongside SLAAC if configured
               * Allows for more controlled IPv6 addressing
        :param pulumi.Input[_builtins.int] dhcp_v6_lease: The DHCPv6 lease time in seconds. Common values:
               * 86400 (1 day) - Default setting
               * 3600 (1 hour) - For testing
               * 604800 (1 week) - For stable networks
               Typically longer than IPv4 DHCP leases.
        :param pulumi.Input[_builtins.str] dhcp_v6_start: The starting IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
               Must be a valid IPv6 address within your allocated IPv6 subnet.
        :param pulumi.Input[_builtins.str] dhcp_v6_stop: The ending IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
               Must be after dhcp_v6_start in the IPv6 address space.
        :param pulumi.Input[_builtins.bool] dhcpd_boot_enabled: Enables DHCP boot options for PXE boot or network boot configurations. When enabled:
               * Allows network devices to boot from a TFTP server
               * Requires dhcpd_boot_server and dhcpd_boot_filename to be set
               * Commonly used for diskless workstations or network installations
        :param pulumi.Input[_builtins.str] dhcpd_boot_filename: The boot filename to be loaded from the TFTP server. Examples:
               * 'pxelinux.0' - Standard PXE boot loader
               * 'undionly.kpxe' - iPXE boot loader
               * Custom paths for specific boot images
        :param pulumi.Input[_builtins.str] dhcpd_boot_server: The IPv4 address of the TFTP server for network boot. This setting:
               * Is required when dhcpd_boot_enabled is true
               * Should be a reliable, always-on server
               * Must be accessible to all clients that need to boot
        :param pulumi.Input[_builtins.str] domain_name: The domain name for this network. Examples:
               * 'corp.example.com' - For corporate networks
               * 'guest.example.com' - For guest networks
               * 'iot.example.com' - For IoT networks
               Used for internal DNS resolution and DHCP options.
        :param pulumi.Input[_builtins.bool] enabled: Controls whether this network is active. When disabled:
               * Network will not be available to clients
               * DHCP services will be stopped
               * Existing clients will be disconnected
               Useful for temporary network maintenance or security measures.
        :param pulumi.Input[_builtins.bool] igmp_snooping: Enables IGMP (Internet Group Management Protocol) snooping. When enabled:
               * Optimizes multicast traffic flow
               * Reduces network congestion
               * Improves performance for multicast applications (e.g., IPTV)
               Recommended for networks with multicast traffic.
        :param pulumi.Input[_builtins.bool] internet_access_enabled: Controls internet access for this network. When disabled:
               * Clients cannot access external networks
               * Internal network access remains available
               * Useful for creating isolated or secure networks
        :param pulumi.Input[_builtins.str] ipv6_interface_type: Specifies the IPv6 connection type. Must be one of:
               * `none` - IPv6 disabled (default)
               * `static` - Static IPv6 addressing
               * `pd` - Prefix Delegation from upstream
               
               Choose based on your IPv6 deployment strategy and ISP capabilities.
        :param pulumi.Input[_builtins.str] ipv6_pd_interface: The WAN interface to use for IPv6 Prefix Delegation. Options:
               * `wan` - Primary WAN interface
               * `wan2` - Secondary WAN interface
               Only applicable when `ipv6_interface_type` is 'pd'.
        :param pulumi.Input[_builtins.str] ipv6_pd_prefixid: The IPv6 Prefix ID for Prefix Delegation. Used to:
               * Differentiate multiple delegated prefixes
               * Create unique subnets from the delegated prefix
               Typically a hexadecimal value (e.g., '0', '1', 'a1').
        :param pulumi.Input[_builtins.str] ipv6_pd_start: The starting IPv6 address for Prefix Delegation range.
               Only used when `ipv6_interface_type` is 'pd'.
               Must be within the delegated prefix range.
        :param pulumi.Input[_builtins.str] ipv6_pd_stop: The ending IPv6 address for Prefix Delegation range.
               Only used when `ipv6_interface_type` is 'pd'.
               Must be after `ipv6_pd_start` within the delegated prefix.
        :param pulumi.Input[_builtins.bool] ipv6_ra_enable: Enables IPv6 Router Advertisements (RA). When enabled:
               * Announces IPv6 prefix information to clients
               * Enables SLAAC address configuration
               * Required for most IPv6 deployments
        :param pulumi.Input[_builtins.int] ipv6_ra_preferred_lifetime: The preferred lifetime (in seconds) for IPv6 addresses in Router Advertisements.
               * Must be less than or equal to `ipv6_ra_valid_lifetime`
               * Default: 14400 (4 hours)
               * After this time, addresses become deprecated but still usable
        :param pulumi.Input[_builtins.str] ipv6_ra_priority: Sets the priority for IPv6 Router Advertisements. Options:
               * `high` - Preferred for primary networks
               * `medium` - Standard priority
               * `low` - For backup or secondary networks
               Affects router selection when multiple IPv6 routers exist.
        :param pulumi.Input[_builtins.int] ipv6_ra_valid_lifetime: The valid lifetime (in seconds) for IPv6 addresses in Router Advertisements.
               * Must be greater than or equal to `ipv6_ra_preferred_lifetime`
               * Default: 86400 (24 hours)
               * After this time, addresses become invalid
        :param pulumi.Input[_builtins.str] ipv6_static_subnet: The static IPv6 subnet in CIDR notation (e.g., '2001:db8::/64') when using static IPv6.
               Only applicable when `ipv6_interface_type` is 'static'.
               Must be a valid IPv6 subnet allocated to your organization.
        :param pulumi.Input[_builtins.bool] multicast_dns: Enables Multicast DNS (mDNS/Bonjour/Avahi) on the network. When enabled:
               * Allows device discovery (e.g., printers, Chromecasts)
               * Supports zero-configuration networking
               * Available on Controller version 7 and later
        :param pulumi.Input[_builtins.str] name: The name of the network. This should be a descriptive name that helps identify the network's purpose, such as 'Corporate-Main', 'Guest-Network', or 'IoT-VLAN'.
        :param pulumi.Input[_builtins.str] network_group: The network group for this network. Default is 'LAN'. For WAN networks, use 'WAN' or 'WAN2'. Network groups help organize and apply policies to multiple networks.
        :param pulumi.Input[_builtins.bool] network_isolation_enabled: Enables network isolation. When enabled:
               * Prevents communication between clients on this network
               * Each client can only communicate with the gateway
               * Commonly used for guest networks or IoT devices
        :param pulumi.Input[_builtins.str] purpose: The purpose/type of the network. Must be one of:
               * `corporate` - Standard network for corporate use with full access
               * `guest` - Isolated network for guest access with limited permissions
               * `wan` - External network connection (WAN uplink)
               * `vlan-only` - VLAN network without DHCP services
        :param pulumi.Input[_builtins.str] site: The name of the site to associate the network with.
        :param pulumi.Input[_builtins.str] subnet: The IPv4 subnet for this network in CIDR notation (e.g., '192.168.1.0/24'). This defines the network's address space and determines the range of IP addresses available for DHCP.
        :param pulumi.Input[_builtins.int] vlan_id: The VLAN ID for this network. Valid range is 0-4096. Common uses:
               * 1-4094: Standard VLAN range for network segmentation
               * 0: Untagged/native VLAN
               * >4094: Reserved for special purposes
        :param pulumi.Input[_builtins.int] wan_dhcp_v6_pd_size: The IPv6 prefix size to request from ISP. Must be between 48 and 64.
               Only applicable when `wan_type_v6` is 'dhcpv6'.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] wan_dns: List of IPv4 DNS servers for WAN interface. Examples:
               * ISP provided DNS servers
               * Public DNS services (e.g., 8.8.8.8, 1.1.1.1)
               * Maximum 4 servers can be specified
        :param pulumi.Input[_builtins.int] wan_egress_qos: Quality of Service (QoS) priority for WAN egress traffic (0-7).
               * 0 (default) - Best effort
               * 1-4 - Increasing priority
               * 5-7 - Highest priority, use sparingly
               Higher values get preferential treatment.
        :param pulumi.Input[_builtins.str] wan_gateway: The IPv4 gateway address for WAN interface.
               Required when `wan_type` is 'static'.
               Typically the ISP's router IP address.
        :param pulumi.Input[_builtins.str] wan_gateway_v6: The IPv6 gateway address for WAN interface.
               Required when `wan_type_v6` is 'static'.
               Typically the ISP's router IPv6 address.
        :param pulumi.Input[_builtins.str] wan_ip: The static IPv4 address for WAN interface.
               Required when `wan_type` is 'static'.
               Must be a valid public IP address assigned by your ISP.
        :param pulumi.Input[_builtins.str] wan_ipv6: The static IPv6 address for WAN interface.
               Required when `wan_type_v6` is 'static'.
               Must be a valid public IPv6 address assigned by your ISP.
        :param pulumi.Input[_builtins.str] wan_netmask: The IPv4 netmask for WAN interface (e.g., '255.255.255.0').
               Required when `wan_type` is 'static'.
               Must match the subnet mask provided by your ISP.
        :param pulumi.Input[_builtins.str] wan_networkgroup: The WAN interface group assignment. Options:
               * `WAN` - Primary WAN interface
               * `WAN2` - Secondary WAN interface
               * `WAN_LTE_FAILOVER` - LTE backup connection
               Used for dual WAN and failover configurations.
        :param pulumi.Input[_builtins.int] wan_prefixlen: The IPv6 prefix length for WAN interface. Must be between 1 and 128.
               Only applicable when `wan_type_v6` is 'static'.
        :param pulumi.Input[_builtins.str] wan_type: The IPv4 WAN connection type. Options:
               * `disabled` - WAN interface disabled
               * `static` - Static IP configuration
               * `dhcp` - Dynamic IP from ISP
               * `pppoe` - PPPoE connection (common for DSL)
               Choose based on your ISP's requirements.
        :param pulumi.Input[_builtins.str] wan_type_v6: The IPv6 WAN connection type. Options:
               * `disabled` - IPv6 disabled
               * `static` - Static IPv6 configuration
               * `dhcpv6` - Dynamic IPv6 from ISP
               Choose based on your ISP's requirements.
        :param pulumi.Input[_builtins.str] wan_username: Username for WAN authentication.
               * Required for PPPoE connections
               * May be needed for some ISP configurations
               * Cannot contain spaces or special characters
        :param pulumi.Input[_builtins.str] x_wan_password: Password for WAN authentication.
               * Required for PPPoE connections
               * May be needed for some ISP configurations
               * Must be kept secret
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _NetworkState.__new__(_NetworkState)

        __props__.__dict__["dhcp_dns"] = dhcp_dns
        __props__.__dict__["dhcp_enabled"] = dhcp_enabled
        __props__.__dict__["dhcp_lease"] = dhcp_lease
        __props__.__dict__["dhcp_relay_enabled"] = dhcp_relay_enabled
        __props__.__dict__["dhcp_start"] = dhcp_start
        __props__.__dict__["dhcp_stop"] = dhcp_stop
        __props__.__dict__["dhcp_v6_dns"] = dhcp_v6_dns
        __props__.__dict__["dhcp_v6_dns_auto"] = dhcp_v6_dns_auto
        __props__.__dict__["dhcp_v6_enabled"] = dhcp_v6_enabled
        __props__.__dict__["dhcp_v6_lease"] = dhcp_v6_lease
        __props__.__dict__["dhcp_v6_start"] = dhcp_v6_start
        __props__.__dict__["dhcp_v6_stop"] = dhcp_v6_stop
        __props__.__dict__["dhcpd_boot_enabled"] = dhcpd_boot_enabled
        __props__.__dict__["dhcpd_boot_filename"] = dhcpd_boot_filename
        __props__.__dict__["dhcpd_boot_server"] = dhcpd_boot_server
        __props__.__dict__["domain_name"] = domain_name
        __props__.__dict__["enabled"] = enabled
        __props__.__dict__["igmp_snooping"] = igmp_snooping
        __props__.__dict__["internet_access_enabled"] = internet_access_enabled
        __props__.__dict__["ipv6_interface_type"] = ipv6_interface_type
        __props__.__dict__["ipv6_pd_interface"] = ipv6_pd_interface
        __props__.__dict__["ipv6_pd_prefixid"] = ipv6_pd_prefixid
        __props__.__dict__["ipv6_pd_start"] = ipv6_pd_start
        __props__.__dict__["ipv6_pd_stop"] = ipv6_pd_stop
        __props__.__dict__["ipv6_ra_enable"] = ipv6_ra_enable
        __props__.__dict__["ipv6_ra_preferred_lifetime"] = ipv6_ra_preferred_lifetime
        __props__.__dict__["ipv6_ra_priority"] = ipv6_ra_priority
        __props__.__dict__["ipv6_ra_valid_lifetime"] = ipv6_ra_valid_lifetime
        __props__.__dict__["ipv6_static_subnet"] = ipv6_static_subnet
        __props__.__dict__["multicast_dns"] = multicast_dns
        __props__.__dict__["name"] = name
        __props__.__dict__["network_group"] = network_group
        __props__.__dict__["network_isolation_enabled"] = network_isolation_enabled
        __props__.__dict__["purpose"] = purpose
        __props__.__dict__["site"] = site
        __props__.__dict__["subnet"] = subnet
        __props__.__dict__["vlan_id"] = vlan_id
        __props__.__dict__["wan_dhcp_v6_pd_size"] = wan_dhcp_v6_pd_size
        __props__.__dict__["wan_dns"] = wan_dns
        __props__.__dict__["wan_egress_qos"] = wan_egress_qos
        __props__.__dict__["wan_gateway"] = wan_gateway
        __props__.__dict__["wan_gateway_v6"] = wan_gateway_v6
        __props__.__dict__["wan_ip"] = wan_ip
        __props__.__dict__["wan_ipv6"] = wan_ipv6
        __props__.__dict__["wan_netmask"] = wan_netmask
        __props__.__dict__["wan_networkgroup"] = wan_networkgroup
        __props__.__dict__["wan_prefixlen"] = wan_prefixlen
        __props__.__dict__["wan_type"] = wan_type
        __props__.__dict__["wan_type_v6"] = wan_type_v6
        __props__.__dict__["wan_username"] = wan_username
        __props__.__dict__["x_wan_password"] = x_wan_password
        return Network(resource_name, opts=opts, __props__=__props__)

    @_builtins.property
    @pulumi.getter(name="dhcpDns")
    def dhcp_dns(self) -> pulumi.Output[Optional[Sequence[_builtins.str]]]:
        """
        List of IPv4 DNS server addresses to be provided to DHCP clients. Examples:
        * Use ['8.8.8.8', '8.8.4.4'] for Google DNS
        * Use ['1.1.1.1', '1.0.0.1'] for Cloudflare DNS
        * Use internal DNS servers for corporate networks
        Maximum 4 servers can be specified.
        """
        return pulumi.get(self, "dhcp_dns")

    @_builtins.property
    @pulumi.getter(name="dhcpEnabled")
    def dhcp_enabled(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Controls whether DHCP server is enabled for this network. When enabled:
        * The network will automatically assign IP addresses to clients
        * DHCP options (DNS, lease time) will be provided to clients
        * Static IP assignments can still be made outside the DHCP range
        """
        return pulumi.get(self, "dhcp_enabled")

    @_builtins.property
    @pulumi.getter(name="dhcpLease")
    def dhcp_lease(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        The DHCP lease time in seconds. Common values:
        * 86400 (1 day) - Default, suitable for most networks
        * 3600 (1 hour) - For testing or temporary networks
        * 604800 (1 week) - For stable networks with static clients
        * 2592000 (30 days) - For very stable networks
        """
        return pulumi.get(self, "dhcp_lease")

    @_builtins.property
    @pulumi.getter(name="dhcpRelayEnabled")
    def dhcp_relay_enabled(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Enables DHCP relay for this network. When enabled:
        * DHCP requests are forwarded to an external DHCP server
        * Local DHCP server is disabled
        * Useful for centralized DHCP management
        """
        return pulumi.get(self, "dhcp_relay_enabled")

    @_builtins.property
    @pulumi.getter(name="dhcpStart")
    def dhcp_start(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The starting IPv4 address of the DHCP range. Examples:
        * For subnet 192.168.1.0/24, typical start: '192.168.1.100'
        * For subnet 10.0.0.0/24, typical start: '10.0.0.100'
        Ensure this address is within the network's subnet.
        """
        return pulumi.get(self, "dhcp_start")

    @_builtins.property
    @pulumi.getter(name="dhcpStop")
    def dhcp_stop(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The ending IPv4 address of the DHCP range. Examples:
        * For subnet 192.168.1.0/24, typical stop: '192.168.1.254'
        * For subnet 10.0.0.0/24, typical stop: '10.0.0.254'
        Must be greater than dhcp_start and within the network's subnet.
        """
        return pulumi.get(self, "dhcp_stop")

    @_builtins.property
    @pulumi.getter(name="dhcpV6Dns")
    def dhcp_v6_dns(self) -> pulumi.Output[Optional[Sequence[_builtins.str]]]:
        """
        List of IPv6 DNS server addresses for DHCPv6 clients. Examples:
        * Use ['2001:4860:4860::8888', '2001:4860:4860::8844'] for Google DNS
        * Use ['2606:4700:4700::1111', '2606:4700:4700::1001'] for Cloudflare DNS
        Only used when dhcp_v6_dns_auto is false. Maximum of 4 addresses are allowed.
        """
        return pulumi.get(self, "dhcp_v6_dns")

    @_builtins.property
    @pulumi.getter(name="dhcpV6DnsAuto")
    def dhcp_v6_dns_auto(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Controls DNS server source for DHCPv6 clients:
        * true - Use upstream DNS servers (recommended)
        * false - Use manually specified servers from dhcp_v6_dns
        Default is true for easier management.
        """
        return pulumi.get(self, "dhcp_v6_dns_auto")

    @_builtins.property
    @pulumi.getter(name="dhcpV6Enabled")
    def dhcp_v6_enabled(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Enables stateful DHCPv6 for IPv6 address assignment. When enabled:
        * Provides IPv6 addresses to clients
        * Works alongside SLAAC if configured
        * Allows for more controlled IPv6 addressing
        """
        return pulumi.get(self, "dhcp_v6_enabled")

    @_builtins.property
    @pulumi.getter(name="dhcpV6Lease")
    def dhcp_v6_lease(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        The DHCPv6 lease time in seconds. Common values:
        * 86400 (1 day) - Default setting
        * 3600 (1 hour) - For testing
        * 604800 (1 week) - For stable networks
        Typically longer than IPv4 DHCP leases.
        """
        return pulumi.get(self, "dhcp_v6_lease")

    @_builtins.property
    @pulumi.getter(name="dhcpV6Start")
    def dhcp_v6_start(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The starting IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
        Must be a valid IPv6 address within your allocated IPv6 subnet.
        """
        return pulumi.get(self, "dhcp_v6_start")

    @_builtins.property
    @pulumi.getter(name="dhcpV6Stop")
    def dhcp_v6_stop(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The ending IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.
        Must be after dhcp_v6_start in the IPv6 address space.
        """
        return pulumi.get(self, "dhcp_v6_stop")

    @_builtins.property
    @pulumi.getter(name="dhcpdBootEnabled")
    def dhcpd_boot_enabled(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Enables DHCP boot options for PXE boot or network boot configurations. When enabled:
        * Allows network devices to boot from a TFTP server
        * Requires dhcpd_boot_server and dhcpd_boot_filename to be set
        * Commonly used for diskless workstations or network installations
        """
        return pulumi.get(self, "dhcpd_boot_enabled")

    @_builtins.property
    @pulumi.getter(name="dhcpdBootFilename")
    def dhcpd_boot_filename(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The boot filename to be loaded from the TFTP server. Examples:
        * 'pxelinux.0' - Standard PXE boot loader
        * 'undionly.kpxe' - iPXE boot loader
        * Custom paths for specific boot images
        """
        return pulumi.get(self, "dhcpd_boot_filename")

    @_builtins.property
    @pulumi.getter(name="dhcpdBootServer")
    def dhcpd_boot_server(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The IPv4 address of the TFTP server for network boot. This setting:
        * Is required when dhcpd_boot_enabled is true
        * Should be a reliable, always-on server
        * Must be accessible to all clients that need to boot
        """
        return pulumi.get(self, "dhcpd_boot_server")

    @_builtins.property
    @pulumi.getter(name="domainName")
    def domain_name(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The domain name for this network. Examples:
        * 'corp.example.com' - For corporate networks
        * 'guest.example.com' - For guest networks
        * 'iot.example.com' - For IoT networks
        Used for internal DNS resolution and DHCP options.
        """
        return pulumi.get(self, "domain_name")

    @_builtins.property
    @pulumi.getter
    def enabled(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Controls whether this network is active. When disabled:
        * Network will not be available to clients
        * DHCP services will be stopped
        * Existing clients will be disconnected
        Useful for temporary network maintenance or security measures.
        """
        return pulumi.get(self, "enabled")

    @_builtins.property
    @pulumi.getter(name="igmpSnooping")
    def igmp_snooping(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Enables IGMP (Internet Group Management Protocol) snooping. When enabled:
        * Optimizes multicast traffic flow
        * Reduces network congestion
        * Improves performance for multicast applications (e.g., IPTV)
        Recommended for networks with multicast traffic.
        """
        return pulumi.get(self, "igmp_snooping")

    @_builtins.property
    @pulumi.getter(name="internetAccessEnabled")
    def internet_access_enabled(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Controls internet access for this network. When disabled:
        * Clients cannot access external networks
        * Internal network access remains available
        * Useful for creating isolated or secure networks
        """
        return pulumi.get(self, "internet_access_enabled")

    @_builtins.property
    @pulumi.getter(name="ipv6InterfaceType")
    def ipv6_interface_type(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Specifies the IPv6 connection type. Must be one of:
        * `none` - IPv6 disabled (default)
        * `static` - Static IPv6 addressing
        * `pd` - Prefix Delegation from upstream

        Choose based on your IPv6 deployment strategy and ISP capabilities.
        """
        return pulumi.get(self, "ipv6_interface_type")

    @_builtins.property
    @pulumi.getter(name="ipv6PdInterface")
    def ipv6_pd_interface(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The WAN interface to use for IPv6 Prefix Delegation. Options:
        * `wan` - Primary WAN interface
        * `wan2` - Secondary WAN interface
        Only applicable when `ipv6_interface_type` is 'pd'.
        """
        return pulumi.get(self, "ipv6_pd_interface")

    @_builtins.property
    @pulumi.getter(name="ipv6PdPrefixid")
    def ipv6_pd_prefixid(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The IPv6 Prefix ID for Prefix Delegation. Used to:
        * Differentiate multiple delegated prefixes
        * Create unique subnets from the delegated prefix
        Typically a hexadecimal value (e.g., '0', '1', 'a1').
        """
        return pulumi.get(self, "ipv6_pd_prefixid")

    @_builtins.property
    @pulumi.getter(name="ipv6PdStart")
    def ipv6_pd_start(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The starting IPv6 address for Prefix Delegation range.
        Only used when `ipv6_interface_type` is 'pd'.
        Must be within the delegated prefix range.
        """
        return pulumi.get(self, "ipv6_pd_start")

    @_builtins.property
    @pulumi.getter(name="ipv6PdStop")
    def ipv6_pd_stop(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The ending IPv6 address for Prefix Delegation range.
        Only used when `ipv6_interface_type` is 'pd'.
        Must be after `ipv6_pd_start` within the delegated prefix.
        """
        return pulumi.get(self, "ipv6_pd_stop")

    @_builtins.property
    @pulumi.getter(name="ipv6RaEnable")
    def ipv6_ra_enable(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Enables IPv6 Router Advertisements (RA). When enabled:
        * Announces IPv6 prefix information to clients
        * Enables SLAAC address configuration
        * Required for most IPv6 deployments
        """
        return pulumi.get(self, "ipv6_ra_enable")

    @_builtins.property
    @pulumi.getter(name="ipv6RaPreferredLifetime")
    def ipv6_ra_preferred_lifetime(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        The preferred lifetime (in seconds) for IPv6 addresses in Router Advertisements.
        * Must be less than or equal to `ipv6_ra_valid_lifetime`
        * Default: 14400 (4 hours)
        * After this time, addresses become deprecated but still usable
        """
        return pulumi.get(self, "ipv6_ra_preferred_lifetime")

    @_builtins.property
    @pulumi.getter(name="ipv6RaPriority")
    def ipv6_ra_priority(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Sets the priority for IPv6 Router Advertisements. Options:
        * `high` - Preferred for primary networks
        * `medium` - Standard priority
        * `low` - For backup or secondary networks
        Affects router selection when multiple IPv6 routers exist.
        """
        return pulumi.get(self, "ipv6_ra_priority")

    @_builtins.property
    @pulumi.getter(name="ipv6RaValidLifetime")
    def ipv6_ra_valid_lifetime(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        The valid lifetime (in seconds) for IPv6 addresses in Router Advertisements.
        * Must be greater than or equal to `ipv6_ra_preferred_lifetime`
        * Default: 86400 (24 hours)
        * After this time, addresses become invalid
        """
        return pulumi.get(self, "ipv6_ra_valid_lifetime")

    @_builtins.property
    @pulumi.getter(name="ipv6StaticSubnet")
    def ipv6_static_subnet(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The static IPv6 subnet in CIDR notation (e.g., '2001:db8::/64') when using static IPv6.
        Only applicable when `ipv6_interface_type` is 'static'.
        Must be a valid IPv6 subnet allocated to your organization.
        """
        return pulumi.get(self, "ipv6_static_subnet")

    @_builtins.property
    @pulumi.getter(name="multicastDns")
    def multicast_dns(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Enables Multicast DNS (mDNS/Bonjour/Avahi) on the network. When enabled:
        * Allows device discovery (e.g., printers, Chromecasts)
        * Supports zero-configuration networking
        * Available on Controller version 7 and later
        """
        return pulumi.get(self, "multicast_dns")

    @_builtins.property
    @pulumi.getter
    def name(self) -> pulumi.Output[_builtins.str]:
        """
        The name of the network. This should be a descriptive name that helps identify the network's purpose, such as 'Corporate-Main', 'Guest-Network', or 'IoT-VLAN'.
        """
        return pulumi.get(self, "name")

    @_builtins.property
    @pulumi.getter(name="networkGroup")
    def network_group(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The network group for this network. Default is 'LAN'. For WAN networks, use 'WAN' or 'WAN2'. Network groups help organize and apply policies to multiple networks.
        """
        return pulumi.get(self, "network_group")

    @_builtins.property
    @pulumi.getter(name="networkIsolationEnabled")
    def network_isolation_enabled(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        Enables network isolation. When enabled:
        * Prevents communication between clients on this network
        * Each client can only communicate with the gateway
        * Commonly used for guest networks or IoT devices
        """
        return pulumi.get(self, "network_isolation_enabled")

    @_builtins.property
    @pulumi.getter
    def purpose(self) -> pulumi.Output[_builtins.str]:
        """
        The purpose/type of the network. Must be one of:
        * `corporate` - Standard network for corporate use with full access
        * `guest` - Isolated network for guest access with limited permissions
        * `wan` - External network connection (WAN uplink)
        * `vlan-only` - VLAN network without DHCP services
        """
        return pulumi.get(self, "purpose")

    @_builtins.property
    @pulumi.getter
    def site(self) -> pulumi.Output[_builtins.str]:
        """
        The name of the site to associate the network with.
        """
        return pulumi.get(self, "site")

    @_builtins.property
    @pulumi.getter
    def subnet(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The IPv4 subnet for this network in CIDR notation (e.g., '192.168.1.0/24'). This defines the network's address space and determines the range of IP addresses available for DHCP.
        """
        return pulumi.get(self, "subnet")

    @_builtins.property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        The VLAN ID for this network. Valid range is 0-4096. Common uses:
        * 1-4094: Standard VLAN range for network segmentation
        * 0: Untagged/native VLAN
        * >4094: Reserved for special purposes
        """
        return pulumi.get(self, "vlan_id")

    @_builtins.property
    @pulumi.getter(name="wanDhcpV6PdSize")
    def wan_dhcp_v6_pd_size(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        The IPv6 prefix size to request from ISP. Must be between 48 and 64.
        Only applicable when `wan_type_v6` is 'dhcpv6'.
        """
        return pulumi.get(self, "wan_dhcp_v6_pd_size")

    @_builtins.property
    @pulumi.getter(name="wanDns")
    def wan_dns(self) -> pulumi.Output[Optional[Sequence[_builtins.str]]]:
        """
        List of IPv4 DNS servers for WAN interface. Examples:
        * ISP provided DNS servers
        * Public DNS services (e.g., 8.8.8.8, 1.1.1.1)
        * Maximum 4 servers can be specified
        """
        return pulumi.get(self, "wan_dns")

    @_builtins.property
    @pulumi.getter(name="wanEgressQos")
    def wan_egress_qos(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        Quality of Service (QoS) priority for WAN egress traffic (0-7).
        * 0 (default) - Best effort
        * 1-4 - Increasing priority
        * 5-7 - Highest priority, use sparingly
        Higher values get preferential treatment.
        """
        return pulumi.get(self, "wan_egress_qos")

    @_builtins.property
    @pulumi.getter(name="wanGateway")
    def wan_gateway(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The IPv4 gateway address for WAN interface.
        Required when `wan_type` is 'static'.
        Typically the ISP's router IP address.
        """
        return pulumi.get(self, "wan_gateway")

    @_builtins.property
    @pulumi.getter(name="wanGatewayV6")
    def wan_gateway_v6(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The IPv6 gateway address for WAN interface.
        Required when `wan_type_v6` is 'static'.
        Typically the ISP's router IPv6 address.
        """
        return pulumi.get(self, "wan_gateway_v6")

    @_builtins.property
    @pulumi.getter(name="wanIp")
    def wan_ip(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The static IPv4 address for WAN interface.
        Required when `wan_type` is 'static'.
        Must be a valid public IP address assigned by your ISP.
        """
        return pulumi.get(self, "wan_ip")

    @_builtins.property
    @pulumi.getter(name="wanIpv6")
    def wan_ipv6(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The static IPv6 address for WAN interface.
        Required when `wan_type_v6` is 'static'.
        Must be a valid public IPv6 address assigned by your ISP.
        """
        return pulumi.get(self, "wan_ipv6")

    @_builtins.property
    @pulumi.getter(name="wanNetmask")
    def wan_netmask(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The IPv4 netmask for WAN interface (e.g., '255.255.255.0').
        Required when `wan_type` is 'static'.
        Must match the subnet mask provided by your ISP.
        """
        return pulumi.get(self, "wan_netmask")

    @_builtins.property
    @pulumi.getter(name="wanNetworkgroup")
    def wan_networkgroup(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The WAN interface group assignment. Options:
        * `WAN` - Primary WAN interface
        * `WAN2` - Secondary WAN interface
        * `WAN_LTE_FAILOVER` - LTE backup connection
        Used for dual WAN and failover configurations.
        """
        return pulumi.get(self, "wan_networkgroup")

    @_builtins.property
    @pulumi.getter(name="wanPrefixlen")
    def wan_prefixlen(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        The IPv6 prefix length for WAN interface. Must be between 1 and 128.
        Only applicable when `wan_type_v6` is 'static'.
        """
        return pulumi.get(self, "wan_prefixlen")

    @_builtins.property
    @pulumi.getter(name="wanType")
    def wan_type(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The IPv4 WAN connection type. Options:
        * `disabled` - WAN interface disabled
        * `static` - Static IP configuration
        * `dhcp` - Dynamic IP from ISP
        * `pppoe` - PPPoE connection (common for DSL)
        Choose based on your ISP's requirements.
        """
        return pulumi.get(self, "wan_type")

    @_builtins.property
    @pulumi.getter(name="wanTypeV6")
    def wan_type_v6(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The IPv6 WAN connection type. Options:
        * `disabled` - IPv6 disabled
        * `static` - Static IPv6 configuration
        * `dhcpv6` - Dynamic IPv6 from ISP
        Choose based on your ISP's requirements.
        """
        return pulumi.get(self, "wan_type_v6")

    @_builtins.property
    @pulumi.getter(name="wanUsername")
    def wan_username(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Username for WAN authentication.
        * Required for PPPoE connections
        * May be needed for some ISP configurations
        * Cannot contain spaces or special characters
        """
        return pulumi.get(self, "wan_username")

    @_builtins.property
    @pulumi.getter(name="xWanPassword")
    def x_wan_password(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Password for WAN authentication.
        * Required for PPPoE connections
        * May be needed for some ISP configurations
        * Must be kept secret
        """
        return pulumi.get(self, "x_wan_password")

