"""Response schemas for appliance endpoints.

This module is automatically @generated from the Meraki API specification.
Do not edit this file manually.
"""

from __future__ import annotations

from datetime import datetime
from typing import Any

from pydantic import Field, RootModel

from meraki_client.schemas._base import _BaseSchema


class Appliance1(_BaseSchema):
    """Settings for SSID 1."""

    band_operation_mode: str | None = Field(
        default=None, validation_alias="bandOperationMode", serialization_alias="bandOperationMode"
    )
    band_steering_enabled: bool | None = Field(
        default=None,
        validation_alias="bandSteeringEnabled",
        serialization_alias="bandSteeringEnabled",
    )


class ApplianceApplicationCategoriesItem(_BaseSchema):
    """Schema for ApplianceApplicationCategoriesItem."""

    id: str | None = None
    name: str | None = None
    applications: list[GetNetworkApplianceContentFilteringResponseBlockedUrlCategoriesItem] = Field(
        default_factory=list
    )


class ApplianceApplicationsItem(_BaseSchema):
    """Schema for ApplianceApplicationsItem."""

    id: str | None = None
    name: str | None = None
    type_: str | None = Field(default=None, validation_alias="type", serialization_alias="type")


class ApplianceAssignedFiveGhzSettings(_BaseSchema):
    """Settings related to 5Ghz band."""

    min_bitrate: int | None = Field(
        default=None, validation_alias="minBitrate", serialization_alias="minBitrate"
    )
    ax_enabled: bool | None = Field(
        default=None, validation_alias="axEnabled", serialization_alias="axEnabled"
    )


class ApplianceAssignedPerSsidSettings(_BaseSchema):
    """Per-SSID radio settings by number."""

    n_1: Appliance1 | None = Field(default=None, validation_alias="1", serialization_alias="1")
    n_2: Appliance1 | None = Field(default=None, validation_alias="2", serialization_alias="2")
    n_3: Appliance1 | None = Field(default=None, validation_alias="3", serialization_alias="3")
    n_4: Appliance1 | None = Field(default=None, validation_alias="4", serialization_alias="4")


class ApplianceAssignedTwoFourGhzSettings(_BaseSchema):
    """Settings related to 2.4Ghz band."""

    min_bitrate: float | None = Field(
        default=None, validation_alias="minBitrate", serialization_alias="minBitrate"
    )
    ax_enabled: bool | None = Field(
        default=None, validation_alias="axEnabled", serialization_alias="axEnabled"
    )


class ApplianceAuthentication(_BaseSchema):
    """Settings for PPPoE Authentication."""

    enabled: bool | None = None
    username: str | None = None


class ApplianceAuthentication2(_BaseSchema):
    """Settings for PPPoE Authentication."""

    enabled: bool | None = None
    username: str | None = None
    password: str | None = None


class ApplianceBandwidthLimits(_BaseSchema):
    """The bandwidth limits object, specifying the upload ('limitUp') and download ('limitDown')
    speed in Kbps. These are only enforced if 'settings' is set to 'custom'.
    """

    limit_up: int | None = Field(
        default=None, validation_alias="limitUp", serialization_alias="limitUp"
    )
    limit_down: int | None = Field(
        default=None, validation_alias="limitDown", serialization_alias="limitDown"
    )


class ApplianceByInterfaceItem(_BaseSchema):
    """Schema for ApplianceByInterfaceItem."""

    interface: str | None = None
    sent: int | None = None
    received: int | None = None


class ApplianceByUplinkItem(_BaseSchema):
    """Schema for ApplianceByUplinkItem."""

    serial: str | None = None
    interface: str | None = None
    sent: int | None = None
    received: int | None = None


class ApplianceCountsByStatus(_BaseSchema):
    """byStatus."""

    active: int | None = None
    ready: int | None = None
    failed: int | None = None
    connecting: int | None = None
    not_connected: int | None = Field(
        default=None, validation_alias="notConnected", serialization_alias="notConnected"
    )


class ApplianceDestination(_BaseSchema):
    """Destination of 'custom' type traffic filter."""

    port: str | None = None
    cidr: str | None = None
    applications: list[ApplianceApplicationsItem] = Field(default_factory=list)


class ApplianceDestination2(_BaseSchema):
    """Destination of 'custom' type traffic filter."""

    port: str | None = None
    cidr: str | None = None
    network: str | None = None
    vlan: int | None = None
    host: int | None = None
    fqdn: str | None = None


class ApplianceDestination3(_BaseSchema):
    """Destination of this custom type traffic filter."""

    port: str | None = None
    cidr: str | None = None


class ApplianceDhcpOptionsItem(_BaseSchema):
    """Schema for ApplianceDhcpOptionsItem."""

    code: str
    type_: str = Field(validation_alias="type", serialization_alias="type")
    value: str


class ApplianceExportedSubnetsItem(_BaseSchema):
    """Schema for ApplianceExportedSubnetsItem."""

    subnet: str | None = None
    name: str | None = None


class ApplianceFailover(_BaseSchema):
    """[optional] Contains the failover configuration for the group."""

    direct_to_internet: bool | None = Field(
        default=None, validation_alias="directToInternet", serialization_alias="directToInternet"
    )


class ApplianceFailoverAndFailbackImmediate(_BaseSchema):
    """Immediate WAN failover and failback."""

    enabled: bool


class ApplianceHighAvailability(_BaseSchema):
    """Device High Availability Capabilities."""

    enabled: bool | None = None
    role: str | None = None


class ApplianceInterfacesWan1(_BaseSchema):
    """WAN 1 settings."""

    enabled: bool | None = None
    vlan_tagging: ApplianceVlanTagging | None = Field(
        default=None, validation_alias="vlanTagging", serialization_alias="vlanTagging"
    )
    svis: ApplianceSvis | None = None
    pppoe: AppliancePppoe | None = None


class ApplianceIpsec(_BaseSchema):
    """IPsec configuration data."""

    peer_ids: list[str] = Field(
        default_factory=list, validation_alias="peerIds", serialization_alias="peerIds"
    )


class ApplianceIpv4(_BaseSchema):
    """IPv4 settings for static/dynamic mode."""

    assignment_mode: str | None = Field(
        default=None, validation_alias="assignmentMode", serialization_alias="assignmentMode"
    )
    address: str | None = None
    gateway: str | None = None
    nameservers: ApplianceNameservers | None = None


class ApplianceIpv6PrefixAssignmentsItem(_BaseSchema):
    """Schema for ApplianceIpv6PrefixAssignmentsItem."""

    autonomous: bool | None = None
    static_prefix: str | None = Field(
        default=None, validation_alias="staticPrefix", serialization_alias="staticPrefix"
    )
    static_appliance_ip6: str | None = Field(
        default=None,
        validation_alias="staticApplianceIp6",
        serialization_alias="staticApplianceIp6",
    )
    origin: ApplianceOrigin2 | None = None


class ApplianceItems(_BaseSchema):
    """Counts relating to the paginated items."""

    total: int | None = None
    remaining: int | None = None


class ApplianceJitterSummariesItem(_BaseSchema):
    """Schema for ApplianceJitterSummariesItem."""

    sender_uplink: str | None = Field(
        default=None, validation_alias="senderUplink", serialization_alias="senderUplink"
    )
    receiver_uplink: str | None = Field(
        default=None, validation_alias="receiverUplink", serialization_alias="receiverUplink"
    )
    avg_jitter: float | None = Field(
        default=None, validation_alias="avgJitter", serialization_alias="avgJitter"
    )
    min_jitter: float | None = Field(
        default=None, validation_alias="minJitter", serialization_alias="minJitter"
    )
    max_jitter: float | None = Field(
        default=None, validation_alias="maxJitter", serialization_alias="maxJitter"
    )


class ApplianceLatencySummariesItem(_BaseSchema):
    """Schema for ApplianceLatencySummariesItem."""

    sender_uplink: str | None = Field(
        default=None, validation_alias="senderUplink", serialization_alias="senderUplink"
    )
    receiver_uplink: str | None = Field(
        default=None, validation_alias="receiverUplink", serialization_alias="receiverUplink"
    )
    avg_latency_ms: int | None = Field(
        default=None, validation_alias="avgLatencyMs", serialization_alias="avgLatencyMs"
    )
    min_latency_ms: int | None = Field(
        default=None, validation_alias="minLatencyMs", serialization_alias="minLatencyMs"
    )
    max_latency_ms: int | None = Field(
        default=None, validation_alias="maxLatencyMs", serialization_alias="maxLatencyMs"
    )


class ApplianceLossPercentageSummariesItem(_BaseSchema):
    """Schema for ApplianceLossPercentageSummariesItem."""

    sender_uplink: str | None = Field(
        default=None, validation_alias="senderUplink", serialization_alias="senderUplink"
    )
    receiver_uplink: str | None = Field(
        default=None, validation_alias="receiverUplink", serialization_alias="receiverUplink"
    )
    avg_loss_percentage: float | None = Field(
        default=None, validation_alias="avgLossPercentage", serialization_alias="avgLossPercentage"
    )
    min_loss_percentage: float | None = Field(
        default=None, validation_alias="minLossPercentage", serialization_alias="minLossPercentage"
    )
    max_loss_percentage: float | None = Field(
        default=None, validation_alias="maxLossPercentage", serialization_alias="maxLossPercentage"
    )


class ApplianceMerakiVpnPeersItem(_BaseSchema):
    """Schema for ApplianceMerakiVpnPeersItem."""

    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    network_name: str | None = Field(
        default=None, validation_alias="networkName", serialization_alias="networkName"
    )
    usage_summary: ApplianceUsageSummary | None = Field(
        default=None, validation_alias="usageSummary", serialization_alias="usageSummary"
    )
    latency_summaries: list[ApplianceLatencySummariesItem] = Field(
        default_factory=list,
        validation_alias="latencySummaries",
        serialization_alias="latencySummaries",
    )
    loss_percentage_summaries: list[ApplianceLossPercentageSummariesItem] = Field(
        default_factory=list,
        validation_alias="lossPercentageSummaries",
        serialization_alias="lossPercentageSummaries",
    )
    jitter_summaries: list[ApplianceJitterSummariesItem] = Field(
        default_factory=list,
        validation_alias="jitterSummaries",
        serialization_alias="jitterSummaries",
    )
    mos_summaries: list[ApplianceMosSummariesItem] = Field(
        default_factory=list, validation_alias="mosSummaries", serialization_alias="mosSummaries"
    )


class ApplianceMerakiVpnPeersItem2(_BaseSchema):
    """Schema for ApplianceMerakiVpnPeersItem2."""

    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    network_name: str | None = Field(
        default=None, validation_alias="networkName", serialization_alias="networkName"
    )
    reachability: str | None = None


class ApplianceMetaCounts(_BaseSchema):
    """Counts relating to the paginated dataset."""

    items: ApplianceItems | None = None


class ApplianceMosSummariesItem(_BaseSchema):
    """Schema for ApplianceMosSummariesItem."""

    sender_uplink: str | None = Field(
        default=None, validation_alias="senderUplink", serialization_alias="senderUplink"
    )
    receiver_uplink: str | None = Field(
        default=None, validation_alias="receiverUplink", serialization_alias="receiverUplink"
    )
    avg_mos: float | None = Field(
        default=None, validation_alias="avgMos", serialization_alias="avgMos"
    )
    min_mos: float | None = Field(
        default=None, validation_alias="minMos", serialization_alias="minMos"
    )
    max_mos: float | None = Field(
        default=None, validation_alias="maxMos", serialization_alias="maxMos"
    )


class ApplianceNameservers(_BaseSchema):
    """The nameserver settings for this SVI."""

    addresses: list[str] = Field(default_factory=list)


class ApplianceNeighborsAuthentication(_BaseSchema):
    """Authentication settings between BGP peers."""

    password: str | None = None


class ApplianceNeighborsIpv6(_BaseSchema):
    """Information regarding IPv6 address of the neighbor."""

    address: str | None = None


class ApplianceNetwork(_BaseSchema):
    """The network attached to the profile."""

    id: str | None = None


class ApplianceOrigin(_BaseSchema):
    """WAN1/WAN2/Independent prefix."""

    type_: str | None = Field(default=None, validation_alias="type", serialization_alias="type")
    interfaces: list[str] = Field(default_factory=list)


class ApplianceOrigin2(_BaseSchema):
    """The origin of the prefix."""

    type_: str | None = Field(default=None, validation_alias="type", serialization_alias="type")
    interfaces: list[str] = Field(default_factory=list)


class ApplianceOrigin3(_BaseSchema):
    """The origin of the prefix."""

    type_: str = Field(validation_alias="type", serialization_alias="type")
    interfaces: list[str] = Field(default_factory=list)


class AppliancePeersEbgpNeighbor(_BaseSchema):
    """[optional] The BGP neighbor configuration for the VPN peer. Supported only for MX 19.1 and
    above.
    """

    neighbor_id: int | None = Field(
        default=None, validation_alias="neighborId", serialization_alias="neighborId"
    )
    neighbor_ip: str | None = Field(
        default=None, validation_alias="neighborIp", serialization_alias="neighborIp"
    )
    ip_version: int | None = Field(
        default=None, validation_alias="ipVersion", serialization_alias="ipVersion"
    )
    remote_as_number: int | None = Field(
        default=None, validation_alias="remoteAsNumber", serialization_alias="remoteAsNumber"
    )
    ebgp_hold_timer: int | None = Field(
        default=None, validation_alias="ebgpHoldTimer", serialization_alias="ebgpHoldTimer"
    )
    ebgp_multihop: int | None = Field(
        default=None, validation_alias="ebgpMultihop", serialization_alias="ebgpMultihop"
    )
    source_ip: str | None = Field(
        default=None, validation_alias="sourceIp", serialization_alias="sourceIp"
    )
    path_prepend: list[int] = Field(
        default_factory=list, validation_alias="pathPrepend", serialization_alias="pathPrepend"
    )
    multi_exit_discriminator: int | None = Field(
        default=None,
        validation_alias="multiExitDiscriminator",
        serialization_alias="multiExitDiscriminator",
    )
    weight: int | None = None


class AppliancePeersGroup(_BaseSchema):
    """[optional] Contains the mapping between primary tunnel and backup tunnels."""

    number: int | None = None
    failover: ApplianceFailover | None = None
    active_active_tunnel: bool | None = Field(
        default=None,
        validation_alias="activeActiveTunnel",
        serialization_alias="activeActiveTunnel",
    )


class AppliancePeersIpsecPolicies(_BaseSchema):
    """Custom IPSec policies for the VPN peer. If not included and a preset has not been chosen,
    the default preset for IPSec policies will be used.
    """

    ike_cipher_algo: list[str] = Field(
        default_factory=list, validation_alias="ikeCipherAlgo", serialization_alias="ikeCipherAlgo"
    )
    ike_auth_algo: list[str] = Field(
        default_factory=list, validation_alias="ikeAuthAlgo", serialization_alias="ikeAuthAlgo"
    )
    ike_prf_algo: list[str] = Field(
        default_factory=list, validation_alias="ikePrfAlgo", serialization_alias="ikePrfAlgo"
    )
    ike_diffie_hellman_group: list[str] = Field(
        default_factory=list,
        validation_alias="ikeDiffieHellmanGroup",
        serialization_alias="ikeDiffieHellmanGroup",
    )
    ike_lifetime: int | None = Field(
        default=None, validation_alias="ikeLifetime", serialization_alias="ikeLifetime"
    )
    child_cipher_algo: list[str] = Field(
        default_factory=list,
        validation_alias="childCipherAlgo",
        serialization_alias="childCipherAlgo",
    )
    child_auth_algo: list[str] = Field(
        default_factory=list, validation_alias="childAuthAlgo", serialization_alias="childAuthAlgo"
    )
    child_pfs_group: list[str] = Field(
        default_factory=list, validation_alias="childPfsGroup", serialization_alias="childPfsGroup"
    )
    child_lifetime: int | None = Field(
        default=None, validation_alias="childLifetime", serialization_alias="childLifetime"
    )


class AppliancePeersNetwork(_BaseSchema):
    """[optional] A list of network Names and IDs that will connect with this peer. Supported only
    for MX 19.1 and above.
    """

    names: list[str] = Field(default_factory=list)
    ids: list[str] = Field(default_factory=list)


class AppliancePerformanceClass(_BaseSchema):
    """Performance class setting for uplink preference rule."""

    type_: str | None = Field(default=None, validation_alias="type", serialization_alias="type")
    builtin_performance_class_name: str | None = Field(
        default=None,
        validation_alias="builtinPerformanceClassName",
        serialization_alias="builtinPerformanceClassName",
    )
    custom_performance_class_id: str | None = Field(
        default=None,
        validation_alias="customPerformanceClassId",
        serialization_alias="customPerformanceClassId",
    )


class AppliancePerformanceClass2(_BaseSchema):
    """Performance class setting for uplink preference rule."""

    type_: str = Field(validation_alias="type", serialization_alias="type")
    builtin_performance_class_name: str | None = Field(
        default=None,
        validation_alias="builtinPerformanceClassName",
        serialization_alias="builtinPerformanceClassName",
    )
    custom_performance_class_id: str | None = Field(
        default=None,
        validation_alias="customPerformanceClassId",
        serialization_alias="customPerformanceClassId",
    )


class AppliancePppoe(_BaseSchema):
    """Configuration options for PPPoE."""

    enabled: bool | None = None
    authentication: ApplianceAuthentication | None = None


class AppliancePppoe2(_BaseSchema):
    """Configuration options for PPPoE."""

    enabled: bool | None = None
    authentication: ApplianceAuthentication2 | None = None


class ApplianceRadiusServersItem(_BaseSchema):
    """Schema for ApplianceRadiusServersItem."""

    host: str | None = None
    port: int | None = None


class ApplianceReservedIpRangesItem(_BaseSchema):
    """Schema for ApplianceReservedIpRangesItem."""

    start: str | None = None
    end: str | None = None
    comment: str | None = None


class ApplianceSource(_BaseSchema):
    """Source of traffic filter."""

    port: str | None = None
    cidr: str | None = None
    vlan: int | None = None
    host: int | None = None


class ApplianceSource2(_BaseSchema):
    """Source of 'custom' type traffic filter."""

    port: str | None = None
    cidr: str | None = None
    network: str | None = None
    vlan: int | None = None
    host: int | None = None


class ApplianceSubnetNat(_BaseSchema):
    """Configuration of NAT for subnets."""

    is_allowed: bool | None = Field(
        default=None, validation_alias="isAllowed", serialization_alias="isAllowed"
    )


class ApplianceSubnetsNat(_BaseSchema):
    """Configuration of NAT for the subnet."""

    enabled: bool | None = None
    remote_subnet: str | None = Field(
        default=None, validation_alias="remoteSubnet", serialization_alias="remoteSubnet"
    )


class ApplianceSvis(_BaseSchema):
    """SVI settings by protocol."""

    ipv4: ApplianceIpv4 | None = None
    ipv6: ApplianceIpv4 | None = None


class ApplianceThirdPartyVpnPeersItem(_BaseSchema):
    """Schema for ApplianceThirdPartyVpnPeersItem."""

    name: str | None = None
    public_ip: str | None = Field(
        default=None, validation_alias="publicIp", serialization_alias="publicIp"
    )
    reachability: str | None = None


class ApplianceTrafficFiltersItem(_BaseSchema):
    """Schema for ApplianceTrafficFiltersItem."""

    type_: str = Field(validation_alias="type", serialization_alias="type")
    value: ApplianceValue


class ApplianceTrafficFiltersItem2(_BaseSchema):
    """Schema for ApplianceTrafficFiltersItem2."""

    type_: str = Field(validation_alias="type", serialization_alias="type")
    value: ApplianceValue


class ApplianceTrafficFiltersItem3(_BaseSchema):
    """Schema for ApplianceTrafficFiltersItem3."""

    type_: str = Field(validation_alias="type", serialization_alias="type")
    value: ApplianceValue2


class ApplianceTrafficFiltersItem4(_BaseSchema):
    """Schema for ApplianceTrafficFiltersItem4."""

    type_: str = Field(validation_alias="type", serialization_alias="type")
    value: ApplianceValue3


class ApplianceUplinksItem(_BaseSchema):
    """Schema for ApplianceUplinksItem."""

    interface: str | None = None
    status: str | None = None
    ip: str | None = None
    gateway: str | None = None
    public_ip: str | None = Field(
        default=None, validation_alias="publicIp", serialization_alias="publicIp"
    )
    primary_dns: str | None = Field(
        default=None, validation_alias="primaryDns", serialization_alias="primaryDns"
    )
    secondary_dns: str | None = Field(
        default=None, validation_alias="secondaryDns", serialization_alias="secondaryDns"
    )
    ip_assigned_by: str | None = Field(
        default=None, validation_alias="ipAssignedBy", serialization_alias="ipAssignedBy"
    )


class ApplianceUplinksItem2(_BaseSchema):
    """Schema for ApplianceUplinksItem2."""

    interface: str | None = None
    public_ip: str | None = Field(
        default=None, validation_alias="publicIp", serialization_alias="publicIp"
    )


class ApplianceUsageSummary(_BaseSchema):
    """Usage summary."""

    received_in_kilobytes: int | None = Field(
        default=None,
        validation_alias="receivedInKilobytes",
        serialization_alias="receivedInKilobytes",
    )
    sent_in_kilobytes: int | None = Field(
        default=None, validation_alias="sentInKilobytes", serialization_alias="sentInKilobytes"
    )


class ApplianceValue(_BaseSchema):
    """Value of traffic filter."""

    protocol: str | None = None
    source: ApplianceSource
    destination: ApplianceDestination


class ApplianceValue2(_BaseSchema):
    """Value of traffic filter."""

    id: str | None = None
    protocol: str | None = None
    source: ApplianceSource2 | None = None
    destination: ApplianceDestination2 | None = None


class ApplianceValue3(_BaseSchema):
    """Value object of this traffic filter."""

    protocol: str | None = None
    source: ApplianceSource
    destination: ApplianceDestination3


class ApplianceVlanTagging(_BaseSchema):
    """VLAN tagging settings."""

    enabled: bool | None = None
    vlan_id: int | None = Field(
        default=None, validation_alias="vlanId", serialization_alias="vlanId"
    )


class ApplianceVpnTrafficUplinkPreferencesItem(_BaseSchema):
    """Schema for ApplianceVpnTrafficUplinkPreferencesItem."""

    traffic_filters: list[ApplianceTrafficFiltersItem3] = Field(
        validation_alias="trafficFilters", serialization_alias="trafficFilters"
    )
    preferred_uplink: str = Field(
        validation_alias="preferredUplink", serialization_alias="preferredUplink"
    )
    fail_over_criterion: str | None = Field(
        default=None, validation_alias="failOverCriterion", serialization_alias="failOverCriterion"
    )
    performance_class: AppliancePerformanceClass2 | None = Field(
        default=None, validation_alias="performanceClass", serialization_alias="performanceClass"
    )


class ApplianceWanTrafficUplinkPreferencesItem(_BaseSchema):
    """Schema for ApplianceWanTrafficUplinkPreferencesItem."""

    preferred_uplink: str = Field(
        validation_alias="preferredUplink", serialization_alias="preferredUplink"
    )
    fail_over_criterion: str | None = Field(
        default=None, validation_alias="failOverCriterion", serialization_alias="failOverCriterion"
    )
    performance_class: AppliancePerformanceClass | None = Field(
        default=None, validation_alias="performanceClass", serialization_alias="performanceClass"
    )
    traffic_filters: list[ApplianceTrafficFiltersItem] = Field(
        validation_alias="trafficFilters", serialization_alias="trafficFilters"
    )


class ApplianceWanTrafficUplinkPreferencesItem2(_BaseSchema):
    """Schema for ApplianceWanTrafficUplinkPreferencesItem2."""

    traffic_filters: list[ApplianceTrafficFiltersItem2] = Field(
        validation_alias="trafficFilters", serialization_alias="trafficFilters"
    )
    preferred_uplink: str = Field(
        validation_alias="preferredUplink", serialization_alias="preferredUplink"
    )


class BulkOrganizationApplianceDnsLocalProfilesAssignmentsCreateItemsItem(_BaseSchema):
    """Item schema for items."""

    network: ApplianceNetwork | None = None
    profile: ApplianceNetwork | None = None


class BulkOrganizationApplianceDnsLocalProfilesAssignmentsCreateResponse(_BaseSchema):
    """Response for bulkOrganizationApplianceDnsLocalProfilesAssignmentsCreate operation."""

    items: list[BulkOrganizationApplianceDnsLocalProfilesAssignmentsCreateResponseItemsItem] = (
        Field(default_factory=list)
    )


class BulkOrganizationApplianceDnsLocalProfilesAssignmentsCreateResponseItemsItem(_BaseSchema):
    """Schema for BulkOrganizationApplianceDnsLocalProfilesAssignmentsCreateResponseItemsItem."""

    assignment_id: str | None = Field(
        default=None, validation_alias="assignmentId", serialization_alias="assignmentId"
    )
    network: ApplianceNetwork | None = None
    profile: ApplianceNetwork | None = None


class CreateDeviceApplianceVmxAuthenticationTokenResponse(_BaseSchema):
    """Response for createDeviceApplianceVmxAuthenticationToken operation."""

    token: str | None = None
    expires_at: str | None = Field(
        default=None, validation_alias="expiresAt", serialization_alias="expiresAt"
    )


class CreateNetworkAppliancePrefixesDelegatedStaticOrigin(_BaseSchema):
    """The origin of the prefix."""

    type_: str | None = Field(default=None, validation_alias="type", serialization_alias="type")
    interfaces: list[str] = Field(default_factory=list)


class CreateNetworkApplianceRfProfileFiveGhzSettings(_BaseSchema):
    """Settings related to 5Ghz band."""

    min_bitrate: int | None = Field(
        default=None, validation_alias="minBitrate", serialization_alias="minBitrate"
    )
    ax_enabled: bool | None = Field(
        default=None, validation_alias="axEnabled", serialization_alias="axEnabled"
    )


class CreateNetworkApplianceRfProfilePerSsidSettings(_BaseSchema):
    """Per-SSID radio settings by number."""

    n_1: CreateNetworkApplianceRfProfilePerSsidSettings1 | None = Field(
        default=None, validation_alias="1", serialization_alias="1"
    )
    n_2: CreateNetworkApplianceRfProfilePerSsidSettings1 | None = Field(
        default=None, validation_alias="2", serialization_alias="2"
    )
    n_3: CreateNetworkApplianceRfProfilePerSsidSettings1 | None = Field(
        default=None, validation_alias="3", serialization_alias="3"
    )
    n_4: CreateNetworkApplianceRfProfilePerSsidSettings1 | None = Field(
        default=None, validation_alias="4", serialization_alias="4"
    )


class CreateNetworkApplianceRfProfilePerSsidSettings1(_BaseSchema):
    """Settings for SSID 1."""

    band_operation_mode: str | None = Field(
        default=None, validation_alias="bandOperationMode", serialization_alias="bandOperationMode"
    )
    band_steering_enabled: bool | None = Field(
        default=None,
        validation_alias="bandSteeringEnabled",
        serialization_alias="bandSteeringEnabled",
    )


class CreateNetworkApplianceRfProfileResponse(_BaseSchema):
    """Response for createNetworkApplianceRfProfile operation."""

    id: str | None = None
    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    name: str | None = None
    two_four_ghz_settings: ApplianceAssignedTwoFourGhzSettings | None = Field(
        default=None,
        validation_alias="twoFourGhzSettings",
        serialization_alias="twoFourGhzSettings",
    )
    five_ghz_settings: ApplianceAssignedFiveGhzSettings | None = Field(
        default=None, validation_alias="fiveGhzSettings", serialization_alias="fiveGhzSettings"
    )
    per_ssid_settings: ApplianceAssignedPerSsidSettings | None = Field(
        default=None, validation_alias="perSsidSettings", serialization_alias="perSsidSettings"
    )


class CreateNetworkApplianceRfProfileTwoFourGhzSettings(_BaseSchema):
    """Settings related to 2.4Ghz band."""

    min_bitrate: float | None = Field(
        default=None, validation_alias="minBitrate", serialization_alias="minBitrate"
    )
    ax_enabled: bool | None = Field(
        default=None, validation_alias="axEnabled", serialization_alias="axEnabled"
    )


class CreateNetworkApplianceStaticRouteResponse(_BaseSchema):
    """Response for createNetworkApplianceStaticRoute operation."""

    id: str | None = None
    ip_version: int | None = Field(
        default=None, validation_alias="ipVersion", serialization_alias="ipVersion"
    )
    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    enabled: bool | None = None
    name: str | None = None
    subnet: str | None = None
    gateway_ip: str | None = Field(
        default=None, validation_alias="gatewayIp", serialization_alias="gatewayIp"
    )
    fixed_ip_assignments: dict[str, Any] | None = Field(
        default=None,
        validation_alias="fixedIpAssignments",
        serialization_alias="fixedIpAssignments",
    )
    reserved_ip_ranges: list[ApplianceReservedIpRangesItem] = Field(
        default_factory=list,
        validation_alias="reservedIpRanges",
        serialization_alias="reservedIpRanges",
    )
    gateway_vlan_id: int | None = Field(
        default=None, validation_alias="gatewayVlanId", serialization_alias="gatewayVlanId"
    )


class CreateNetworkApplianceTrafficShapingCustomPerformanceClassResponse(_BaseSchema):
    """Response for createNetworkApplianceTrafficShapingCustomPerformanceClass operation."""

    name: str | None = None
    custom_performance_class_id: str | None = Field(
        default=None,
        validation_alias="customPerformanceClassId",
        serialization_alias="customPerformanceClassId",
    )
    max_latency: int | None = Field(
        default=None, validation_alias="maxLatency", serialization_alias="maxLatency"
    )
    max_jitter: int | None = Field(
        default=None, validation_alias="maxJitter", serialization_alias="maxJitter"
    )
    max_loss_percentage: int | None = Field(
        default=None, validation_alias="maxLossPercentage", serialization_alias="maxLossPercentage"
    )


class CreateNetworkApplianceVlanDhcpOptionsItem(_BaseSchema):
    """Item schema for dhcpOptions."""

    code: str
    type_: str = Field(validation_alias="type", serialization_alias="type")
    value: str


class CreateNetworkApplianceVlanIpv6(_BaseSchema):
    """IPv6 configuration on the VLAN."""

    enabled: bool | None = None
    prefix_assignments: list[UpdateNetworkApplianceSingleLanIpv6PrefixAssignmentsItem] = Field(
        default_factory=list,
        validation_alias="prefixAssignments",
        serialization_alias="prefixAssignments",
    )


class CreateNetworkApplianceVlanMandatoryDhcp(_BaseSchema):
    """Mandatory DHCP will enforce that clients connecting to this VLAN must use the IP address
    assigned by the DHCP server. Clients who use a static IP address won't be able to associate.
    Only available on firmware versions 17.0 and above.
    """

    enabled: bool | None = None


class CreateNetworkApplianceVlanResponse(_BaseSchema):
    """Response for createNetworkApplianceVlan operation."""

    id: str | None = None
    interface_id: str | None = Field(
        default=None, validation_alias="interfaceId", serialization_alias="interfaceId"
    )
    name: str | None = None
    subnet: str | None = None
    appliance_ip: str | None = Field(
        default=None, validation_alias="applianceIp", serialization_alias="applianceIp"
    )
    group_policy_id: str | None = Field(
        default=None, validation_alias="groupPolicyId", serialization_alias="groupPolicyId"
    )
    template_vlan_type: str | None = Field(
        default=None, validation_alias="templateVlanType", serialization_alias="templateVlanType"
    )
    cidr: str | None = None
    mask: int | None = None
    mandatory_dhcp: GetNetworkApplianceSingleLanResponseMandatoryDhcp | None = Field(
        default=None, validation_alias="mandatoryDhcp", serialization_alias="mandatoryDhcp"
    )
    ipv6: GetNetworkApplianceSingleLanResponseIpv6 | None = None


class CreateOrganizationApplianceDnsLocalProfileResponse(_BaseSchema):
    """Response for createOrganizationApplianceDnsLocalProfile operation."""

    profile_id: str | None = Field(
        default=None, validation_alias="profileId", serialization_alias="profileId"
    )
    name: str | None = None


class CreateOrganizationApplianceDnsLocalProfilesAssignmentsBulkDeleteItemsItem(_BaseSchema):
    """Item schema for items."""

    assignment_id: str | None = Field(
        default=None, validation_alias="assignmentId", serialization_alias="assignmentId"
    )


class CreateOrganizationApplianceDnsLocalProfilesAssignmentsBulkDeleteResponse(_BaseSchema):
    """Response for createOrganizationApplianceDnsLocalProfilesAssignmentsBulkDelete operation."""

    items: list[BulkOrganizationApplianceDnsLocalProfilesAssignmentsCreateResponseItemsItem] = (
        Field(default_factory=list)
    )


class CreateOrganizationApplianceDnsLocalRecordProfile(_BaseSchema):
    """The profile the DNS record is associated with."""

    id: str | None = None


class CreateOrganizationApplianceDnsLocalRecordResponse(
    RootModel[list["CreateOrganizationApplianceDnsLocalRecordResponseItem"]]
):
    """Response for createOrganizationApplianceDnsLocalRecord operation."""


class CreateOrganizationApplianceDnsLocalRecordResponseItem(_BaseSchema):
    """Schema for CreateOrganizationApplianceDnsLocalRecordResponseItem."""

    record_id: str | None = Field(
        default=None, validation_alias="recordId", serialization_alias="recordId"
    )
    hostname: str | None = None
    address: str | None = None
    profile: ApplianceNetwork | None = None


class CreateOrganizationApplianceDnsSplitProfileNameservers(_BaseSchema):
    """Contains the nameserver information for redirection."""

    addresses: list[str] = Field(default_factory=list)


class CreateOrganizationApplianceDnsSplitProfileResponse(_BaseSchema):
    """Response for createOrganizationApplianceDnsSplitProfile operation."""

    profile_id: str | None = Field(
        default=None, validation_alias="profileId", serialization_alias="profileId"
    )
    name: str | None = None
    hostnames: list[str] = Field(default_factory=list)
    nameservers: ApplianceNameservers | None = None


class CreateOrganizationApplianceDnsSplitProfilesAssignmentsBulkCreateItemsItem(_BaseSchema):
    """Item schema for items."""

    network: ApplianceNetwork | None = None
    profile: ApplianceNetwork | None = None


class CreateOrganizationApplianceDnsSplitProfilesAssignmentsBulkCreateResponse(_BaseSchema):
    """Response for createOrganizationApplianceDnsSplitProfilesAssignmentsBulkCreate operation."""

    items: list[BulkOrganizationApplianceDnsLocalProfilesAssignmentsCreateResponseItemsItem] = (
        Field(default_factory=list)
    )


class CreateOrganizationApplianceDnsSplitProfilesAssignmentsBulkDeleteItemsItem(_BaseSchema):
    """Item schema for items."""

    assignment_id: str | None = Field(
        default=None, validation_alias="assignmentId", serialization_alias="assignmentId"
    )


class CreateOrganizationApplianceDnsSplitProfilesAssignmentsBulkDeleteResponse(_BaseSchema):
    """Response for createOrganizationApplianceDnsSplitProfilesAssignmentsBulkDelete operation."""

    items: list[BulkOrganizationApplianceDnsLocalProfilesAssignmentsCreateResponseItemsItem] = (
        Field(default_factory=list)
    )


class GetDeviceApplianceDhcpSubnetsResponse(
    RootModel[list["GetDeviceApplianceDhcpSubnetsResponseItem"]]
):
    """Response for getDeviceApplianceDhcpSubnets operation."""


class GetDeviceApplianceDhcpSubnetsResponseItem(_BaseSchema):
    """Schema for GetDeviceApplianceDhcpSubnetsResponseItem."""

    subnet: str | None = None
    vlan_id: int | None = Field(
        default=None, validation_alias="vlanId", serialization_alias="vlanId"
    )
    used_count: int | None = Field(
        default=None, validation_alias="usedCount", serialization_alias="usedCount"
    )
    free_count: int | None = Field(
        default=None, validation_alias="freeCount", serialization_alias="freeCount"
    )


class GetDeviceAppliancePerformanceResponse(_BaseSchema):
    """Response for getDeviceAppliancePerformance operation."""

    perf_score: float | None = Field(
        default=None, validation_alias="perfScore", serialization_alias="perfScore"
    )


class GetDeviceAppliancePrefixesDelegatedResponse(RootModel[list[dict[str, Any]]]):
    """Response for getDeviceAppliancePrefixesDelegated operation."""


class GetDeviceAppliancePrefixesDelegatedVlanAssignmentsResponse(RootModel[list[dict[str, Any]]]):
    """Response for getDeviceAppliancePrefixesDelegatedVlanAssignments operation."""


class GetDeviceApplianceRadioSettingsResponse(_BaseSchema):
    """Response for getDeviceApplianceRadioSettings operation."""

    serial: str | None = None
    rf_profile_id: str | None = Field(
        default=None, validation_alias="rfProfileId", serialization_alias="rfProfileId"
    )
    two_four_ghz_settings: GetDeviceApplianceRadioSettingsResponseTwoFourGhzSettings | None = Field(
        default=None,
        validation_alias="twoFourGhzSettings",
        serialization_alias="twoFourGhzSettings",
    )
    five_ghz_settings: GetDeviceApplianceRadioSettingsResponseFiveGhzSettings | None = Field(
        default=None, validation_alias="fiveGhzSettings", serialization_alias="fiveGhzSettings"
    )


class GetDeviceApplianceRadioSettingsResponseFiveGhzSettings(_BaseSchema):
    """Manual radio settings for 5 GHz."""

    channel: int | None = None
    channel_width: int | None = Field(
        default=None, validation_alias="channelWidth", serialization_alias="channelWidth"
    )
    target_power: int | None = Field(
        default=None, validation_alias="targetPower", serialization_alias="targetPower"
    )


class GetDeviceApplianceRadioSettingsResponseTwoFourGhzSettings(_BaseSchema):
    """Manual radio settings for 2.4 GHz."""

    channel: int | None = None
    target_power: int | None = Field(
        default=None, validation_alias="targetPower", serialization_alias="targetPower"
    )


class GetDeviceApplianceUplinksSettingsResponse(_BaseSchema):
    """Response for getDeviceApplianceUplinksSettings operation."""

    interfaces: GetDeviceApplianceUplinksSettingsResponseInterfaces | None = None


class GetDeviceApplianceUplinksSettingsResponseInterfaces(_BaseSchema):
    """Interface settings."""

    wan1: ApplianceInterfacesWan1 | None = None
    wan2: ApplianceInterfacesWan1 | None = None


class GetNetworkApplianceClientSecurityEventsResponse(RootModel[list[dict[str, Any]]]):
    """Response for getNetworkApplianceClientSecurityEvents operation."""


class GetNetworkApplianceConnectivityMonitoringDestinationsResponse(_BaseSchema):
    """Response for getNetworkApplianceConnectivityMonitoringDestinations operation."""

    destinations: list[
        GetNetworkApplianceConnectivityMonitoringDestinationsResponseDestinationsItem
    ] = Field(default_factory=list)


class GetNetworkApplianceConnectivityMonitoringDestinationsResponseDestinationsItem(_BaseSchema):
    """Schema for GetNetworkApplianceConnectivityMonitoringDestinationsResponseDestinationsItem."""

    ip: str | None = None
    description: str | None = None
    default: bool | None = None


class GetNetworkApplianceContentFilteringResponse(_BaseSchema):
    """Response for getNetworkApplianceContentFiltering operation."""

    allowed_url_patterns: list[str] = Field(
        default_factory=list,
        validation_alias="allowedUrlPatterns",
        serialization_alias="allowedUrlPatterns",
    )
    blocked_url_patterns: list[str] = Field(
        default_factory=list,
        validation_alias="blockedUrlPatterns",
        serialization_alias="blockedUrlPatterns",
    )
    blocked_url_categories: list[
        GetNetworkApplianceContentFilteringResponseBlockedUrlCategoriesItem
    ] = Field(
        default_factory=list,
        validation_alias="blockedUrlCategories",
        serialization_alias="blockedUrlCategories",
    )
    url_category_list_size: str | None = Field(
        default=None,
        validation_alias="urlCategoryListSize",
        serialization_alias="urlCategoryListSize",
    )


class GetNetworkApplianceContentFilteringResponseBlockedUrlCategoriesItem(_BaseSchema):
    """Schema for GetNetworkApplianceContentFilteringResponseBlockedUrlCategoriesItem."""

    id: str | None = None
    name: str | None = None


class GetNetworkApplianceFirewallFirewalledServiceResponse(_BaseSchema):
    """Response for getNetworkApplianceFirewallFirewalledService operation."""

    service: str | None = None
    access: str | None = None
    allowed_ips: list[str] = Field(
        default_factory=list, validation_alias="allowedIps", serialization_alias="allowedIps"
    )


class GetNetworkApplianceFirewallFirewalledServicesResponse(
    RootModel[list["GetNetworkApplianceFirewallFirewalledServicesResponseItem"]]
):
    """Response for getNetworkApplianceFirewallFirewalledServices operation."""


class GetNetworkApplianceFirewallFirewalledServicesResponseItem(_BaseSchema):
    """Schema for GetNetworkApplianceFirewallFirewalledServicesResponseItem."""

    service: str | None = None
    access: str | None = None
    allowed_ips: list[str] = Field(
        default_factory=list, validation_alias="allowedIps", serialization_alias="allowedIps"
    )


class GetNetworkApplianceFirewallInboundCellularFirewallRulesResponse(_BaseSchema):
    """Response for getNetworkApplianceFirewallInboundCellularFirewallRules operation."""

    rules: list[GetNetworkApplianceFirewallInboundCellularFirewallRulesResponseRulesItem] = Field(
        default_factory=list
    )


class GetNetworkApplianceFirewallInboundCellularFirewallRulesResponseRulesItem(_BaseSchema):
    """Schema for GetNetworkApplianceFirewallInboundCellularFirewallRulesResponseRulesItem."""

    comment: str | None = None
    policy: str | None = None
    protocol: str | None = None
    src_port: str | None = Field(
        default=None, validation_alias="srcPort", serialization_alias="srcPort"
    )
    src_cidr: str | None = Field(
        default=None, validation_alias="srcCidr", serialization_alias="srcCidr"
    )
    dest_port: str | None = Field(
        default=None, validation_alias="destPort", serialization_alias="destPort"
    )
    dest_cidr: str | None = Field(
        default=None, validation_alias="destCidr", serialization_alias="destCidr"
    )
    syslog_enabled: bool | None = Field(
        default=None, validation_alias="syslogEnabled", serialization_alias="syslogEnabled"
    )


class GetNetworkApplianceFirewallInboundFirewallRulesResponse(_BaseSchema):
    """Response for getNetworkApplianceFirewallInboundFirewallRules operation."""

    rules: list[GetNetworkApplianceFirewallInboundCellularFirewallRulesResponseRulesItem] = Field(
        default_factory=list
    )
    syslog_default_rule: bool | None = Field(
        default=None, validation_alias="syslogDefaultRule", serialization_alias="syslogDefaultRule"
    )


class GetNetworkApplianceFirewallL7FirewallRulesApplicationCategoriesResponse(_BaseSchema):
    """Response for getNetworkApplianceFirewallL7FirewallRulesApplicationCategories operation."""

    application_categories: list[ApplianceApplicationCategoriesItem] = Field(
        default_factory=list,
        validation_alias="applicationCategories",
        serialization_alias="applicationCategories",
    )


class GetNetworkApplianceFirewallPortForwardingRulesResponse(_BaseSchema):
    """Response for getNetworkApplianceFirewallPortForwardingRules operation."""

    rules: list[GetNetworkApplianceFirewallPortForwardingRulesResponseRulesItem] = Field(
        default_factory=list
    )


class GetNetworkApplianceFirewallPortForwardingRulesResponseRulesItem(_BaseSchema):
    """Schema for GetNetworkApplianceFirewallPortForwardingRulesResponseRulesItem."""

    lan_ip: str | None = Field(default=None, validation_alias="lanIp", serialization_alias="lanIp")
    allowed_ips: list[str] = Field(
        default_factory=list, validation_alias="allowedIps", serialization_alias="allowedIps"
    )
    name: str | None = None
    protocol: str | None = None
    public_port: str | None = Field(
        default=None, validation_alias="publicPort", serialization_alias="publicPort"
    )
    local_port: str | None = Field(
        default=None, validation_alias="localPort", serialization_alias="localPort"
    )
    uplink: str | None = None


class GetNetworkAppliancePortResponse(_BaseSchema):
    """Response for getNetworkAppliancePort operation."""

    number: int | None = None
    enabled: bool | None = None
    type_: str | None = Field(default=None, validation_alias="type", serialization_alias="type")
    drop_untagged_traffic: bool | None = Field(
        default=None,
        validation_alias="dropUntaggedTraffic",
        serialization_alias="dropUntaggedTraffic",
    )
    vlan: int | None = None
    allowed_vlans: str | None = Field(
        default=None, validation_alias="allowedVlans", serialization_alias="allowedVlans"
    )
    access_policy: str | None = Field(
        default=None, validation_alias="accessPolicy", serialization_alias="accessPolicy"
    )


class GetNetworkAppliancePortsResponse(RootModel[list["GetNetworkAppliancePortsResponseItem"]]):
    """Response for getNetworkAppliancePorts operation."""


class GetNetworkAppliancePortsResponseItem(_BaseSchema):
    """Schema for GetNetworkAppliancePortsResponseItem."""

    number: int | None = None
    enabled: bool | None = None
    type_: str | None = Field(default=None, validation_alias="type", serialization_alias="type")
    drop_untagged_traffic: bool | None = Field(
        default=None,
        validation_alias="dropUntaggedTraffic",
        serialization_alias="dropUntaggedTraffic",
    )
    vlan: int | None = None
    allowed_vlans: str | None = Field(
        default=None, validation_alias="allowedVlans", serialization_alias="allowedVlans"
    )
    access_policy: str | None = Field(
        default=None, validation_alias="accessPolicy", serialization_alias="accessPolicy"
    )


class GetNetworkAppliancePrefixesDelegatedStaticResponse(_BaseSchema):
    """Response for getNetworkAppliancePrefixesDelegatedStatic operation."""

    static_delegated_prefix_id: str | None = Field(
        default=None,
        validation_alias="staticDelegatedPrefixId",
        serialization_alias="staticDelegatedPrefixId",
    )
    prefix: str | None = None
    origin: ApplianceOrigin | None = None
    description: str | None = None
    created_at: datetime | None = Field(
        default=None, validation_alias="createdAt", serialization_alias="createdAt"
    )
    updated_at: datetime | None = Field(
        default=None, validation_alias="updatedAt", serialization_alias="updatedAt"
    )


class GetNetworkAppliancePrefixesDelegatedStaticsResponse(
    RootModel[list["GetNetworkAppliancePrefixesDelegatedStaticsResponseItem"]]
):
    """Response for getNetworkAppliancePrefixesDelegatedStatics operation."""


class GetNetworkAppliancePrefixesDelegatedStaticsResponseItem(_BaseSchema):
    """Schema for GetNetworkAppliancePrefixesDelegatedStaticsResponseItem."""

    static_delegated_prefix_id: str | None = Field(
        default=None,
        validation_alias="staticDelegatedPrefixId",
        serialization_alias="staticDelegatedPrefixId",
    )
    prefix: str | None = None
    origin: ApplianceOrigin | None = None
    description: str | None = None
    created_at: datetime | None = Field(
        default=None, validation_alias="createdAt", serialization_alias="createdAt"
    )
    updated_at: datetime | None = Field(
        default=None, validation_alias="updatedAt", serialization_alias="updatedAt"
    )


class GetNetworkApplianceRfProfileResponse(_BaseSchema):
    """Response for getNetworkApplianceRfProfile operation."""

    id: str | None = None
    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    name: str | None = None
    two_four_ghz_settings: ApplianceAssignedTwoFourGhzSettings | None = Field(
        default=None,
        validation_alias="twoFourGhzSettings",
        serialization_alias="twoFourGhzSettings",
    )
    five_ghz_settings: ApplianceAssignedFiveGhzSettings | None = Field(
        default=None, validation_alias="fiveGhzSettings", serialization_alias="fiveGhzSettings"
    )
    per_ssid_settings: ApplianceAssignedPerSsidSettings | None = Field(
        default=None, validation_alias="perSsidSettings", serialization_alias="perSsidSettings"
    )


class GetNetworkApplianceRfProfilesResponse(_BaseSchema):
    """Response for getNetworkApplianceRfProfiles operation."""

    assigned: list[GetNetworkApplianceRfProfilesResponseAssignedItem] = Field(default_factory=list)


class GetNetworkApplianceRfProfilesResponseAssignedItem(_BaseSchema):
    """Schema for GetNetworkApplianceRfProfilesResponseAssignedItem."""

    id: str | None = None
    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    name: str | None = None
    two_four_ghz_settings: ApplianceAssignedTwoFourGhzSettings | None = Field(
        default=None,
        validation_alias="twoFourGhzSettings",
        serialization_alias="twoFourGhzSettings",
    )
    five_ghz_settings: ApplianceAssignedFiveGhzSettings | None = Field(
        default=None, validation_alias="fiveGhzSettings", serialization_alias="fiveGhzSettings"
    )
    per_ssid_settings: ApplianceAssignedPerSsidSettings | None = Field(
        default=None, validation_alias="perSsidSettings", serialization_alias="perSsidSettings"
    )


class GetNetworkApplianceSecurityEventsResponse(RootModel[list[dict[str, Any]]]):
    """Response for getNetworkApplianceSecurityEvents operation."""


class GetNetworkApplianceSecurityIntrusionResponse(_BaseSchema):
    """Response for getNetworkApplianceSecurityIntrusion operation."""

    mode: str | None = None
    ids_rulesets: str | None = Field(
        default=None, validation_alias="idsRulesets", serialization_alias="idsRulesets"
    )
    protected_networks: GetNetworkApplianceSecurityIntrusionResponseProtectedNetworks | None = (
        Field(
            default=None,
            validation_alias="protectedNetworks",
            serialization_alias="protectedNetworks",
        )
    )


class GetNetworkApplianceSecurityIntrusionResponseProtectedNetworks(_BaseSchema):
    """Networks included in and excluded from the detection engine."""

    use_default: bool | None = Field(
        default=None, validation_alias="useDefault", serialization_alias="useDefault"
    )
    included_cidr: list[str] = Field(
        default_factory=list, validation_alias="includedCidr", serialization_alias="includedCidr"
    )
    excluded_cidr: list[str] = Field(
        default_factory=list, validation_alias="excludedCidr", serialization_alias="excludedCidr"
    )


class GetNetworkApplianceSecurityMalwareResponse(_BaseSchema):
    """Response for getNetworkApplianceSecurityMalware operation."""

    mode: str | None = None
    allowed_urls: list[GetNetworkApplianceSecurityMalwareResponseAllowedUrlsItem] = Field(
        default_factory=list, validation_alias="allowedUrls", serialization_alias="allowedUrls"
    )
    allowed_files: list[GetNetworkApplianceSecurityMalwareResponseAllowedFilesItem] = Field(
        default_factory=list, validation_alias="allowedFiles", serialization_alias="allowedFiles"
    )


class GetNetworkApplianceSecurityMalwareResponseAllowedFilesItem(_BaseSchema):
    """Schema for GetNetworkApplianceSecurityMalwareResponseAllowedFilesItem."""

    sha256: str | None = None
    comment: str | None = None


class GetNetworkApplianceSecurityMalwareResponseAllowedUrlsItem(_BaseSchema):
    """Schema for GetNetworkApplianceSecurityMalwareResponseAllowedUrlsItem."""

    url: str | None = None
    comment: str | None = None


class GetNetworkApplianceSettingsResponse(_BaseSchema):
    """Response for getNetworkApplianceSettings operation."""

    client_tracking_method: str | None = Field(
        default=None,
        validation_alias="clientTrackingMethod",
        serialization_alias="clientTrackingMethod",
    )
    deployment_mode: str | None = Field(
        default=None, validation_alias="deploymentMode", serialization_alias="deploymentMode"
    )
    dynamic_dns: GetNetworkApplianceSettingsResponseDynamicDns | None = Field(
        default=None, validation_alias="dynamicDns", serialization_alias="dynamicDns"
    )


class GetNetworkApplianceSettingsResponseDynamicDns(_BaseSchema):
    """Dynamic DNS settings for a network."""

    enabled: bool | None = None
    prefix: str | None = None
    url: str | None = None


class GetNetworkApplianceSingleLanResponse(_BaseSchema):
    """Response for getNetworkApplianceSingleLan operation."""

    subnet: str | None = None
    appliance_ip: str | None = Field(
        default=None, validation_alias="applianceIp", serialization_alias="applianceIp"
    )
    mandatory_dhcp: GetNetworkApplianceSingleLanResponseMandatoryDhcp | None = Field(
        default=None, validation_alias="mandatoryDhcp", serialization_alias="mandatoryDhcp"
    )
    ipv6: GetNetworkApplianceSingleLanResponseIpv6 | None = None


class GetNetworkApplianceSingleLanResponseIpv6(_BaseSchema):
    """IPv6 configuration on the single LAN."""

    enabled: bool | None = None
    prefix_assignments: list[ApplianceIpv6PrefixAssignmentsItem] = Field(
        default_factory=list,
        validation_alias="prefixAssignments",
        serialization_alias="prefixAssignments",
    )


class GetNetworkApplianceSingleLanResponseMandatoryDhcp(_BaseSchema):
    """Mandatory DHCP will enforce that clients connecting to this single LAN must use the IP
    address assigned by the DHCP server. Clients who use a static IP address won't be able to
    associate. Only available on firmware versions 17.0 and above.
    """

    enabled: bool | None = None


class GetNetworkApplianceSsidResponse(_BaseSchema):
    """Response for getNetworkApplianceSsid operation."""

    number: int | None = None
    name: str | None = None
    enabled: bool | None = None
    default_vlan_id: int | None = Field(
        default=None, validation_alias="defaultVlanId", serialization_alias="defaultVlanId"
    )
    auth_mode: str | None = Field(
        default=None, validation_alias="authMode", serialization_alias="authMode"
    )
    radius_servers: list[ApplianceRadiusServersItem] = Field(
        default_factory=list, validation_alias="radiusServers", serialization_alias="radiusServers"
    )
    encryption_mode: str | None = Field(
        default=None, validation_alias="encryptionMode", serialization_alias="encryptionMode"
    )
    wpa_encryption_mode: str | None = Field(
        default=None, validation_alias="wpaEncryptionMode", serialization_alias="wpaEncryptionMode"
    )
    visible: bool | None = None


class GetNetworkApplianceSsidsResponse(RootModel[list["GetNetworkApplianceSsidsResponseItem"]]):
    """Response for getNetworkApplianceSsids operation."""


class GetNetworkApplianceSsidsResponseItem(_BaseSchema):
    """Schema for GetNetworkApplianceSsidsResponseItem."""

    number: int | None = None
    name: str | None = None
    enabled: bool | None = None
    default_vlan_id: int | None = Field(
        default=None, validation_alias="defaultVlanId", serialization_alias="defaultVlanId"
    )
    auth_mode: str | None = Field(
        default=None, validation_alias="authMode", serialization_alias="authMode"
    )
    radius_servers: list[ApplianceRadiusServersItem] = Field(
        default_factory=list, validation_alias="radiusServers", serialization_alias="radiusServers"
    )
    encryption_mode: str | None = Field(
        default=None, validation_alias="encryptionMode", serialization_alias="encryptionMode"
    )
    wpa_encryption_mode: str | None = Field(
        default=None, validation_alias="wpaEncryptionMode", serialization_alias="wpaEncryptionMode"
    )
    visible: bool | None = None


class GetNetworkApplianceStaticRouteResponse(_BaseSchema):
    """Response for getNetworkApplianceStaticRoute operation."""

    id: str | None = None
    ip_version: int | None = Field(
        default=None, validation_alias="ipVersion", serialization_alias="ipVersion"
    )
    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    enabled: bool | None = None
    name: str | None = None
    subnet: str | None = None
    gateway_ip: str | None = Field(
        default=None, validation_alias="gatewayIp", serialization_alias="gatewayIp"
    )
    fixed_ip_assignments: dict[str, Any] | None = Field(
        default=None,
        validation_alias="fixedIpAssignments",
        serialization_alias="fixedIpAssignments",
    )
    reserved_ip_ranges: list[ApplianceReservedIpRangesItem] = Field(
        default_factory=list,
        validation_alias="reservedIpRanges",
        serialization_alias="reservedIpRanges",
    )
    gateway_vlan_id: int | None = Field(
        default=None, validation_alias="gatewayVlanId", serialization_alias="gatewayVlanId"
    )


class GetNetworkApplianceStaticRoutesResponse(
    RootModel[list["GetNetworkApplianceStaticRoutesResponseItem"]]
):
    """Response for getNetworkApplianceStaticRoutes operation."""


class GetNetworkApplianceStaticRoutesResponseItem(_BaseSchema):
    """Schema for GetNetworkApplianceStaticRoutesResponseItem."""

    id: str | None = None
    ip_version: int | None = Field(
        default=None, validation_alias="ipVersion", serialization_alias="ipVersion"
    )
    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    enabled: bool | None = None
    name: str | None = None
    subnet: str | None = None
    gateway_ip: str | None = Field(
        default=None, validation_alias="gatewayIp", serialization_alias="gatewayIp"
    )
    fixed_ip_assignments: dict[str, Any] | None = Field(
        default=None,
        validation_alias="fixedIpAssignments",
        serialization_alias="fixedIpAssignments",
    )
    reserved_ip_ranges: list[ApplianceReservedIpRangesItem] = Field(
        default_factory=list,
        validation_alias="reservedIpRanges",
        serialization_alias="reservedIpRanges",
    )
    gateway_vlan_id: int | None = Field(
        default=None, validation_alias="gatewayVlanId", serialization_alias="gatewayVlanId"
    )


class GetNetworkApplianceTrafficShapingCustomPerformanceClassResponse(_BaseSchema):
    """Response for getNetworkApplianceTrafficShapingCustomPerformanceClass operation."""

    name: str | None = None
    custom_performance_class_id: str | None = Field(
        default=None,
        validation_alias="customPerformanceClassId",
        serialization_alias="customPerformanceClassId",
    )
    max_latency: int | None = Field(
        default=None, validation_alias="maxLatency", serialization_alias="maxLatency"
    )
    max_jitter: int | None = Field(
        default=None, validation_alias="maxJitter", serialization_alias="maxJitter"
    )
    max_loss_percentage: int | None = Field(
        default=None, validation_alias="maxLossPercentage", serialization_alias="maxLossPercentage"
    )


class GetNetworkApplianceTrafficShapingCustomPerformanceClassesResponse(
    RootModel[list["GetNetworkApplianceTrafficShapingCustomPerformanceClassesResponseItem"]]
):
    """Response for getNetworkApplianceTrafficShapingCustomPerformanceClasses operation."""


class GetNetworkApplianceTrafficShapingCustomPerformanceClassesResponseItem(_BaseSchema):
    """Schema for GetNetworkApplianceTrafficShapingCustomPerformanceClassesResponseItem."""

    name: str | None = None
    custom_performance_class_id: str | None = Field(
        default=None,
        validation_alias="customPerformanceClassId",
        serialization_alias="customPerformanceClassId",
    )
    max_latency: int | None = Field(
        default=None, validation_alias="maxLatency", serialization_alias="maxLatency"
    )
    max_jitter: int | None = Field(
        default=None, validation_alias="maxJitter", serialization_alias="maxJitter"
    )
    max_loss_percentage: int | None = Field(
        default=None, validation_alias="maxLossPercentage", serialization_alias="maxLossPercentage"
    )


class GetNetworkApplianceTrafficShapingUplinkBandwidthResponse(_BaseSchema):
    """Response for getNetworkApplianceTrafficShapingUplinkBandwidth operation."""

    bandwidth_limits: (
        GetNetworkApplianceTrafficShapingUplinkBandwidthResponseBandwidthLimits | None
    ) = Field(
        default=None, validation_alias="bandwidthLimits", serialization_alias="bandwidthLimits"
    )


class GetNetworkApplianceTrafficShapingUplinkBandwidthResponseBandwidthLimits(_BaseSchema):
    """A hash uplink keys and their configured settings for the Appliance."""

    wan1: ApplianceBandwidthLimits | None = None
    wan2: ApplianceBandwidthLimits | None = None
    cellular: ApplianceBandwidthLimits | None = None


class GetNetworkApplianceTrafficShapingUplinkSelectionResponse(_BaseSchema):
    """Response for getNetworkApplianceTrafficShapingUplinkSelection operation."""

    active_active_auto_vpn_enabled: bool | None = Field(
        default=None,
        validation_alias="activeActiveAutoVpnEnabled",
        serialization_alias="activeActiveAutoVpnEnabled",
    )
    default_uplink: str | None = Field(
        default=None, validation_alias="defaultUplink", serialization_alias="defaultUplink"
    )
    load_balancing_enabled: bool | None = Field(
        default=None,
        validation_alias="loadBalancingEnabled",
        serialization_alias="loadBalancingEnabled",
    )
    failover_and_failback: (
        GetNetworkApplianceTrafficShapingUplinkSelectionResponseFailoverAndFailback | None
    ) = Field(
        default=None,
        validation_alias="failoverAndFailback",
        serialization_alias="failoverAndFailback",
    )
    wan_traffic_uplink_preferences: list[ApplianceWanTrafficUplinkPreferencesItem2] = Field(
        default_factory=list,
        validation_alias="wanTrafficUplinkPreferences",
        serialization_alias="wanTrafficUplinkPreferences",
    )
    vpn_traffic_uplink_preferences: list[ApplianceVpnTrafficUplinkPreferencesItem] = Field(
        default_factory=list,
        validation_alias="vpnTrafficUplinkPreferences",
        serialization_alias="vpnTrafficUplinkPreferences",
    )


class GetNetworkApplianceTrafficShapingUplinkSelectionResponseFailoverAndFailback(_BaseSchema):
    """WAN failover and failback."""

    immediate: ApplianceFailoverAndFailbackImmediate | None = None


class GetNetworkApplianceUplinksUsageHistoryResponse(
    RootModel[list["GetNetworkApplianceUplinksUsageHistoryResponseItem"]]
):
    """Response for getNetworkApplianceUplinksUsageHistory operation."""


class GetNetworkApplianceUplinksUsageHistoryResponseItem(_BaseSchema):
    """Schema for GetNetworkApplianceUplinksUsageHistoryResponseItem."""

    start_time: datetime | None = Field(
        default=None, validation_alias="startTime", serialization_alias="startTime"
    )
    end_time: datetime | None = Field(
        default=None, validation_alias="endTime", serialization_alias="endTime"
    )
    by_interface: list[ApplianceByInterfaceItem] = Field(
        default_factory=list, validation_alias="byInterface", serialization_alias="byInterface"
    )


class GetNetworkApplianceVlanResponse(_BaseSchema):
    """Response for getNetworkApplianceVlan operation."""

    id: str | None = None
    interface_id: str | None = Field(
        default=None, validation_alias="interfaceId", serialization_alias="interfaceId"
    )
    name: str | None = None
    subnet: str | None = None
    appliance_ip: str | None = Field(
        default=None, validation_alias="applianceIp", serialization_alias="applianceIp"
    )
    group_policy_id: str | None = Field(
        default=None, validation_alias="groupPolicyId", serialization_alias="groupPolicyId"
    )
    template_vlan_type: str | None = Field(
        default=None, validation_alias="templateVlanType", serialization_alias="templateVlanType"
    )
    cidr: str | None = None
    mask: int | None = None
    dhcp_relay_server_ips: list[str] = Field(
        default_factory=list,
        validation_alias="dhcpRelayServerIps",
        serialization_alias="dhcpRelayServerIps",
    )
    dhcp_handling: str | None = Field(
        default=None, validation_alias="dhcpHandling", serialization_alias="dhcpHandling"
    )
    dhcp_lease_time: str | None = Field(
        default=None, validation_alias="dhcpLeaseTime", serialization_alias="dhcpLeaseTime"
    )
    dhcp_boot_options_enabled: bool | None = Field(
        default=None,
        validation_alias="dhcpBootOptionsEnabled",
        serialization_alias="dhcpBootOptionsEnabled",
    )
    dhcp_boot_next_server: str | None = Field(
        default=None,
        validation_alias="dhcpBootNextServer",
        serialization_alias="dhcpBootNextServer",
    )
    dhcp_boot_filename: str | None = Field(
        default=None, validation_alias="dhcpBootFilename", serialization_alias="dhcpBootFilename"
    )
    fixed_ip_assignments: dict[str, Any] | None = Field(
        default=None,
        validation_alias="fixedIpAssignments",
        serialization_alias="fixedIpAssignments",
    )
    reserved_ip_ranges: list[ApplianceReservedIpRangesItem] = Field(
        default_factory=list,
        validation_alias="reservedIpRanges",
        serialization_alias="reservedIpRanges",
    )
    dns_nameservers: str | None = Field(
        default=None, validation_alias="dnsNameservers", serialization_alias="dnsNameservers"
    )
    dhcp_options: list[ApplianceDhcpOptionsItem] = Field(
        default_factory=list, validation_alias="dhcpOptions", serialization_alias="dhcpOptions"
    )
    vpn_nat_subnet: str | None = Field(
        default=None, validation_alias="vpnNatSubnet", serialization_alias="vpnNatSubnet"
    )
    mandatory_dhcp: GetNetworkApplianceSingleLanResponseMandatoryDhcp | None = Field(
        default=None, validation_alias="mandatoryDhcp", serialization_alias="mandatoryDhcp"
    )
    ipv6: GetNetworkApplianceSingleLanResponseIpv6 | None = None


class GetNetworkApplianceVlansResponse(RootModel[list["GetNetworkApplianceVlansResponseItem"]]):
    """Response for getNetworkApplianceVlans operation."""


class GetNetworkApplianceVlansResponseItem(_BaseSchema):
    """Schema for GetNetworkApplianceVlansResponseItem."""

    id: int | None = None
    interface_id: str | None = Field(
        default=None, validation_alias="interfaceId", serialization_alias="interfaceId"
    )
    name: str | None = None
    subnet: str | None = None
    appliance_ip: str | None = Field(
        default=None, validation_alias="applianceIp", serialization_alias="applianceIp"
    )
    group_policy_id: str | None = Field(
        default=None, validation_alias="groupPolicyId", serialization_alias="groupPolicyId"
    )
    template_vlan_type: str | None = Field(
        default=None, validation_alias="templateVlanType", serialization_alias="templateVlanType"
    )
    cidr: str | None = None
    mask: int | None = None
    dhcp_relay_server_ips: list[str] = Field(
        default_factory=list,
        validation_alias="dhcpRelayServerIps",
        serialization_alias="dhcpRelayServerIps",
    )
    dhcp_handling: str | None = Field(
        default=None, validation_alias="dhcpHandling", serialization_alias="dhcpHandling"
    )
    dhcp_lease_time: str | None = Field(
        default=None, validation_alias="dhcpLeaseTime", serialization_alias="dhcpLeaseTime"
    )
    dhcp_boot_options_enabled: bool | None = Field(
        default=None,
        validation_alias="dhcpBootOptionsEnabled",
        serialization_alias="dhcpBootOptionsEnabled",
    )
    dhcp_boot_next_server: str | None = Field(
        default=None,
        validation_alias="dhcpBootNextServer",
        serialization_alias="dhcpBootNextServer",
    )
    dhcp_boot_filename: str | None = Field(
        default=None, validation_alias="dhcpBootFilename", serialization_alias="dhcpBootFilename"
    )
    fixed_ip_assignments: dict[str, Any] | None = Field(
        default=None,
        validation_alias="fixedIpAssignments",
        serialization_alias="fixedIpAssignments",
    )
    reserved_ip_ranges: list[ApplianceReservedIpRangesItem] = Field(
        default_factory=list,
        validation_alias="reservedIpRanges",
        serialization_alias="reservedIpRanges",
    )
    dns_nameservers: str | None = Field(
        default=None, validation_alias="dnsNameservers", serialization_alias="dnsNameservers"
    )
    dhcp_options: list[ApplianceDhcpOptionsItem] = Field(
        default_factory=list, validation_alias="dhcpOptions", serialization_alias="dhcpOptions"
    )
    vpn_nat_subnet: str | None = Field(
        default=None, validation_alias="vpnNatSubnet", serialization_alias="vpnNatSubnet"
    )
    mandatory_dhcp: GetNetworkApplianceSingleLanResponseMandatoryDhcp | None = Field(
        default=None, validation_alias="mandatoryDhcp", serialization_alias="mandatoryDhcp"
    )
    ipv6: GetNetworkApplianceSingleLanResponseIpv6 | None = None


class GetNetworkApplianceVlansSettingsResponse(_BaseSchema):
    """Response for getNetworkApplianceVlansSettings operation."""

    vlans_enabled: bool | None = Field(
        default=None, validation_alias="vlansEnabled", serialization_alias="vlansEnabled"
    )


class GetNetworkApplianceVpnBgpResponse(_BaseSchema):
    """Response for getNetworkApplianceVpnBgp operation."""

    enabled: bool | None = None
    as_number: int | None = Field(
        default=None, validation_alias="asNumber", serialization_alias="asNumber"
    )
    ibgp_hold_timer: int | None = Field(
        default=None, validation_alias="ibgpHoldTimer", serialization_alias="ibgpHoldTimer"
    )
    neighbors: list[GetNetworkApplianceVpnBgpResponseNeighborsItem] = Field(default_factory=list)


class GetNetworkApplianceVpnBgpResponseNeighborsItem(_BaseSchema):
    """Schema for GetNetworkApplianceVpnBgpResponseNeighborsItem."""

    ip: str | None = None
    ipv6: ApplianceNeighborsIpv6 | None = None
    remote_as_number: int | None = Field(
        default=None, validation_alias="remoteAsNumber", serialization_alias="remoteAsNumber"
    )
    receive_limit: int | None = Field(
        default=None, validation_alias="receiveLimit", serialization_alias="receiveLimit"
    )
    allow_transit: bool | None = Field(
        default=None, validation_alias="allowTransit", serialization_alias="allowTransit"
    )
    ebgp_hold_timer: int | None = Field(
        default=None, validation_alias="ebgpHoldTimer", serialization_alias="ebgpHoldTimer"
    )
    ebgp_multihop: int | None = Field(
        default=None, validation_alias="ebgpMultihop", serialization_alias="ebgpMultihop"
    )
    source_interface: str | None = Field(
        default=None, validation_alias="sourceInterface", serialization_alias="sourceInterface"
    )
    next_hop_ip: str | None = Field(
        default=None, validation_alias="nextHopIp", serialization_alias="nextHopIp"
    )
    ttl_security: GetNetworkApplianceSingleLanResponseMandatoryDhcp | None = Field(
        default=None, validation_alias="ttlSecurity", serialization_alias="ttlSecurity"
    )
    authentication: ApplianceNeighborsAuthentication | None = None
    multi_exit_discriminator: int | None = Field(
        default=None,
        validation_alias="multiExitDiscriminator",
        serialization_alias="multiExitDiscriminator",
    )
    path_prepend: list[int] = Field(
        default_factory=list, validation_alias="pathPrepend", serialization_alias="pathPrepend"
    )
    weight: int | None = None


class GetNetworkApplianceVpnSiteToSiteVpnResponse(_BaseSchema):
    """Response for getNetworkApplianceVpnSiteToSiteVpn operation."""

    mode: str | None = None
    hubs: list[GetNetworkApplianceVpnSiteToSiteVpnResponseHubsItem] = Field(default_factory=list)
    subnets: list[GetNetworkApplianceVpnSiteToSiteVpnResponseSubnetsItem] = Field(
        default_factory=list
    )
    subnet: GetNetworkApplianceVpnSiteToSiteVpnResponseSubnet | None = None


class GetNetworkApplianceVpnSiteToSiteVpnResponseHubsItem(_BaseSchema):
    """Schema for GetNetworkApplianceVpnSiteToSiteVpnResponseHubsItem."""

    hub_id: str | None = Field(default=None, validation_alias="hubId", serialization_alias="hubId")
    use_default_route: bool | None = Field(
        default=None, validation_alias="useDefaultRoute", serialization_alias="useDefaultRoute"
    )


class GetNetworkApplianceVpnSiteToSiteVpnResponseSubnet(_BaseSchema):
    """Configuration of subnet features."""

    nat: ApplianceSubnetNat | None = None


class GetNetworkApplianceVpnSiteToSiteVpnResponseSubnetsItem(_BaseSchema):
    """Schema for GetNetworkApplianceVpnSiteToSiteVpnResponseSubnetsItem."""

    local_subnet: str | None = Field(
        default=None, validation_alias="localSubnet", serialization_alias="localSubnet"
    )
    use_vpn: bool | None = Field(
        default=None, validation_alias="useVpn", serialization_alias="useVpn"
    )
    nat: ApplianceSubnetsNat | None = None


class GetNetworkApplianceWarmSpareResponse(_BaseSchema):
    """Response for getNetworkApplianceWarmSpare operation."""

    enabled: bool | None = None
    primary_serial: str | None = Field(
        default=None, validation_alias="primarySerial", serialization_alias="primarySerial"
    )
    spare_serial: str | None = Field(
        default=None, validation_alias="spareSerial", serialization_alias="spareSerial"
    )
    uplink_mode: str | None = Field(
        default=None, validation_alias="uplinkMode", serialization_alias="uplinkMode"
    )
    wan1: GetNetworkApplianceWarmSpareResponseWan1 | None = None
    wan2: GetNetworkApplianceWarmSpareResponseWan1 | None = None


class GetNetworkApplianceWarmSpareResponseWan1(_BaseSchema):
    """WAN 1 IP and subnet."""

    ip: str | None = None
    subnet: str | None = None


class GetOrganizationApplianceDnsLocalProfilesAssignmentsResponseItemsItem(_BaseSchema):
    """Schema for GetOrganizationApplianceDnsLocalProfilesAssignmentsResponseItemsItem."""

    assignment_id: str | None = Field(
        default=None, validation_alias="assignmentId", serialization_alias="assignmentId"
    )
    network: ApplianceNetwork | None = None
    profile: ApplianceNetwork | None = None


class GetOrganizationApplianceDnsLocalProfilesResponse(
    RootModel[list["GetOrganizationApplianceDnsLocalProfilesResponseItem"]]
):
    """Response for getOrganizationApplianceDnsLocalProfiles operation."""


class GetOrganizationApplianceDnsLocalProfilesResponseItem(_BaseSchema):
    """Schema for GetOrganizationApplianceDnsLocalProfilesResponseItem."""

    profile_id: str | None = Field(
        default=None, validation_alias="profileId", serialization_alias="profileId"
    )
    name: str | None = None


class GetOrganizationApplianceDnsLocalRecordsResponse(
    RootModel[list["GetOrganizationApplianceDnsLocalRecordsResponseItem"]]
):
    """Response for getOrganizationApplianceDnsLocalRecords operation."""


class GetOrganizationApplianceDnsLocalRecordsResponseItem(_BaseSchema):
    """Schema for GetOrganizationApplianceDnsLocalRecordsResponseItem."""

    record_id: str | None = Field(
        default=None, validation_alias="recordId", serialization_alias="recordId"
    )
    hostname: str | None = None
    address: str | None = None
    profile: ApplianceNetwork | None = None


class GetOrganizationApplianceDnsSplitProfilesAssignmentsResponseItemsItem(_BaseSchema):
    """Schema for GetOrganizationApplianceDnsSplitProfilesAssignmentsResponseItemsItem."""

    assignment_id: str | None = Field(
        default=None, validation_alias="assignmentId", serialization_alias="assignmentId"
    )
    network: ApplianceNetwork | None = None
    profile: ApplianceNetwork | None = None


class GetOrganizationApplianceDnsSplitProfilesResponse(
    RootModel[list["GetOrganizationApplianceDnsSplitProfilesResponseItem"]]
):
    """Response for getOrganizationApplianceDnsSplitProfiles operation."""


class GetOrganizationApplianceDnsSplitProfilesResponseItem(_BaseSchema):
    """Schema for GetOrganizationApplianceDnsSplitProfilesResponseItem."""

    profile_id: str | None = Field(
        default=None, validation_alias="profileId", serialization_alias="profileId"
    )
    name: str | None = None
    hostnames: list[str] = Field(default_factory=list)
    nameservers: ApplianceNameservers | None = None


class GetOrganizationApplianceFirewallMulticastForwardingByNetworkResponseItemsItem(_BaseSchema):
    """Schema for GetOrganizationApplianceFirewallMulticastForwardingByNetworkResponseItemsItem."""

    network: UpdateNetworkApplianceFirewallMulticastForwardingResponseNetwork
    rules: list[UpdateNetworkApplianceFirewallMulticastForwardingResponseRulesItem]


class GetOrganizationApplianceSecurityEventsResponse(RootModel[list[dict[str, Any]]]):
    """Response for getOrganizationApplianceSecurityEvents operation."""


class GetOrganizationApplianceTrafficShapingVpnExclusionsByNetworkResponseItemsItem(_BaseSchema):
    """Schema for GetOrganizationApplianceTrafficShapingVpnExclusionsByNetworkResponseItemsItem."""

    network_id: str = Field(validation_alias="networkId", serialization_alias="networkId")
    network_name: str = Field(validation_alias="networkName", serialization_alias="networkName")
    custom: list[UpdateNetworkApplianceTrafficShapingVpnExclusionsResponseCustomItem]
    major_applications: list[
        UpdateNetworkApplianceTrafficShapingVpnExclusionsResponseMajorApplicationsItem
    ] = Field(validation_alias="majorApplications", serialization_alias="majorApplications")


class GetOrganizationApplianceUplinkStatusesResponse(
    RootModel[list["GetOrganizationApplianceUplinkStatusesResponseItem"]]
):
    """Response for getOrganizationApplianceUplinkStatuses operation."""


class GetOrganizationApplianceUplinkStatusesResponseItem(_BaseSchema):
    """Schema for GetOrganizationApplianceUplinkStatusesResponseItem."""

    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    serial: str | None = None
    model: str | None = None
    last_reported_at: datetime | None = Field(
        default=None, validation_alias="lastReportedAt", serialization_alias="lastReportedAt"
    )
    high_availability: ApplianceHighAvailability | None = Field(
        default=None, validation_alias="highAvailability", serialization_alias="highAvailability"
    )
    uplinks: list[ApplianceUplinksItem] = Field(default_factory=list)


class GetOrganizationApplianceUplinksStatusesOverviewResponse(_BaseSchema):
    """Response for getOrganizationApplianceUplinksStatusesOverview operation."""

    counts: GetOrganizationApplianceUplinksStatusesOverviewResponseCounts | None = None


class GetOrganizationApplianceUplinksStatusesOverviewResponseCounts(_BaseSchema):
    """counts."""

    by_status: ApplianceCountsByStatus | None = Field(
        default=None, validation_alias="byStatus", serialization_alias="byStatus"
    )


class GetOrganizationApplianceUplinksUsageByNetworkResponse(
    RootModel[list["GetOrganizationApplianceUplinksUsageByNetworkResponseItem"]]
):
    """Response for getOrganizationApplianceUplinksUsageByNetwork operation."""


class GetOrganizationApplianceUplinksUsageByNetworkResponseItem(_BaseSchema):
    """Schema for GetOrganizationApplianceUplinksUsageByNetworkResponseItem."""

    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    name: str | None = None
    by_uplink: list[ApplianceByUplinkItem] = Field(
        default_factory=list, validation_alias="byUplink", serialization_alias="byUplink"
    )


class GetOrganizationApplianceVpnSiteToSiteIpsecPeersSlasResponseItemsItem(_BaseSchema):
    """Schema for GetOrganizationApplianceVpnSiteToSiteIpsecPeersSlasResponseItemsItem."""

    id: str | None = None
    name: str | None = None
    uri: str | None = None
    ipsec: ApplianceIpsec | None = None


class GetOrganizationApplianceVpnStatsResponse(
    RootModel[list["GetOrganizationApplianceVpnStatsResponseItem"]]
):
    """Response for getOrganizationApplianceVpnStats operation."""


class GetOrganizationApplianceVpnStatsResponseItem(_BaseSchema):
    """Schema for GetOrganizationApplianceVpnStatsResponseItem."""

    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    network_name: str | None = Field(
        default=None, validation_alias="networkName", serialization_alias="networkName"
    )
    meraki_vpn_peers: list[ApplianceMerakiVpnPeersItem] = Field(
        default_factory=list,
        validation_alias="merakiVpnPeers",
        serialization_alias="merakiVpnPeers",
    )


class GetOrganizationApplianceVpnStatusesResponse(
    RootModel[list["GetOrganizationApplianceVpnStatusesResponseItem"]]
):
    """Response for getOrganizationApplianceVpnStatuses operation."""


class GetOrganizationApplianceVpnStatusesResponseItem(_BaseSchema):
    """Schema for GetOrganizationApplianceVpnStatusesResponseItem."""

    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    network_name: str | None = Field(
        default=None, validation_alias="networkName", serialization_alias="networkName"
    )
    device_serial: str | None = Field(
        default=None, validation_alias="deviceSerial", serialization_alias="deviceSerial"
    )
    device_status: str | None = Field(
        default=None, validation_alias="deviceStatus", serialization_alias="deviceStatus"
    )
    uplinks: list[ApplianceUplinksItem2] = Field(default_factory=list)
    vpn_mode: str | None = Field(
        default=None, validation_alias="vpnMode", serialization_alias="vpnMode"
    )
    exported_subnets: list[ApplianceExportedSubnetsItem] = Field(
        default_factory=list,
        validation_alias="exportedSubnets",
        serialization_alias="exportedSubnets",
    )
    meraki_vpn_peers: list[ApplianceMerakiVpnPeersItem2] = Field(
        default_factory=list,
        validation_alias="merakiVpnPeers",
        serialization_alias="merakiVpnPeers",
    )
    third_party_vpn_peers: list[ApplianceThirdPartyVpnPeersItem] = Field(
        default_factory=list,
        validation_alias="thirdPartyVpnPeers",
        serialization_alias="thirdPartyVpnPeers",
    )


class GetOrganizationApplianceVpnThirdPartyVPNPeersResponse(_BaseSchema):
    """Response for getOrganizationApplianceVpnThirdPartyVPNPeers operation."""

    peers: list[GetOrganizationApplianceVpnThirdPartyVPNPeersResponsePeersItem] = Field(
        default_factory=list
    )


class GetOrganizationApplianceVpnThirdPartyVPNPeersResponsePeersItem(_BaseSchema):
    """Schema for GetOrganizationApplianceVpnThirdPartyVPNPeersResponsePeersItem."""

    peer_id: str | None = Field(
        default=None, validation_alias="peerId", serialization_alias="peerId"
    )
    name: str | None = None
    public_ip: str | None = Field(
        default=None, validation_alias="publicIp", serialization_alias="publicIp"
    )
    remote_id: str | None = Field(
        default=None, validation_alias="remoteId", serialization_alias="remoteId"
    )
    local_id: str | None = Field(
        default=None, validation_alias="localId", serialization_alias="localId"
    )
    secret: str | None = None
    private_subnets: list[str] = Field(
        default_factory=list,
        validation_alias="privateSubnets",
        serialization_alias="privateSubnets",
    )
    ipsec_policies: AppliancePeersIpsecPolicies | None = Field(
        default=None, validation_alias="ipsecPolicies", serialization_alias="ipsecPolicies"
    )
    sla_policy: ApplianceNetwork | None = Field(
        default=None, validation_alias="slaPolicy", serialization_alias="slaPolicy"
    )
    ipsec_policies_preset: str | None = Field(
        default=None,
        validation_alias="ipsecPoliciesPreset",
        serialization_alias="ipsecPoliciesPreset",
    )
    ike_version: str | None = Field(
        default=None, validation_alias="ikeVersion", serialization_alias="ikeVersion"
    )
    network_tags: list[str] = Field(
        default_factory=list, validation_alias="networkTags", serialization_alias="networkTags"
    )
    network: AppliancePeersNetwork | None = None
    is_route_based: bool | None = Field(
        default=None, validation_alias="isRouteBased", serialization_alias="isRouteBased"
    )
    ebgp_neighbor: AppliancePeersEbgpNeighbor | None = Field(
        default=None, validation_alias="ebgpNeighbor", serialization_alias="ebgpNeighbor"
    )
    priority_in_group: int | None = Field(
        default=None, validation_alias="priorityInGroup", serialization_alias="priorityInGroup"
    )
    group: AppliancePeersGroup | None = None


class GetOrganizationApplianceVpnVpnFirewallRulesResponse(_BaseSchema):
    """Response for getOrganizationApplianceVpnVpnFirewallRules operation."""

    rules: list[GetNetworkApplianceFirewallInboundCellularFirewallRulesResponseRulesItem] = Field(
        default_factory=list
    )


class SwapNetworkApplianceWarmSpareResponse(_BaseSchema):
    """Response for swapNetworkApplianceWarmSpare operation."""

    enabled: bool | None = None
    primary_serial: str | None = Field(
        default=None, validation_alias="primarySerial", serialization_alias="primarySerial"
    )
    spare_serial: str | None = Field(
        default=None, validation_alias="spareSerial", serialization_alias="spareSerial"
    )
    uplink_mode: str | None = Field(
        default=None, validation_alias="uplinkMode", serialization_alias="uplinkMode"
    )
    wan1: GetNetworkApplianceWarmSpareResponseWan1 | None = None
    wan2: GetNetworkApplianceWarmSpareResponseWan1 | None = None


class UpdateDeviceApplianceRadioSettingsFiveGhzSettings(_BaseSchema):
    """Manual radio settings for 5 GHz."""

    channel: int | None = None
    channel_width: int | None = Field(
        default=None, validation_alias="channelWidth", serialization_alias="channelWidth"
    )
    target_power: int | None = Field(
        default=None, validation_alias="targetPower", serialization_alias="targetPower"
    )


class UpdateDeviceApplianceRadioSettingsResponse(_BaseSchema):
    """Response for updateDeviceApplianceRadioSettings operation."""

    serial: str | None = None
    rf_profile_id: str | None = Field(
        default=None, validation_alias="rfProfileId", serialization_alias="rfProfileId"
    )
    two_four_ghz_settings: GetDeviceApplianceRadioSettingsResponseTwoFourGhzSettings | None = Field(
        default=None,
        validation_alias="twoFourGhzSettings",
        serialization_alias="twoFourGhzSettings",
    )
    five_ghz_settings: GetDeviceApplianceRadioSettingsResponseFiveGhzSettings | None = Field(
        default=None, validation_alias="fiveGhzSettings", serialization_alias="fiveGhzSettings"
    )


class UpdateDeviceApplianceRadioSettingsTwoFourGhzSettings(_BaseSchema):
    """Manual radio settings for 2.4 GHz."""

    channel: int | None = None
    target_power: int | None = Field(
        default=None, validation_alias="targetPower", serialization_alias="targetPower"
    )


class UpdateDeviceApplianceUplinksSettingsInterfaces(_BaseSchema):
    """Interface settings."""

    wan1: UpdateDeviceApplianceUplinksSettingsInterfacesWan1 | None = None
    wan2: UpdateDeviceApplianceUplinksSettingsInterfacesWan1 | None = None


class UpdateDeviceApplianceUplinksSettingsInterfacesWan1(_BaseSchema):
    """WAN 1 settings."""

    enabled: bool | None = None
    vlan_tagging: ApplianceVlanTagging | None = Field(
        default=None, validation_alias="vlanTagging", serialization_alias="vlanTagging"
    )
    svis: ApplianceSvis | None = None
    pppoe: AppliancePppoe2 | None = None


class UpdateDeviceApplianceUplinksSettingsResponse(_BaseSchema):
    """Response for updateDeviceApplianceUplinksSettings operation."""

    interfaces: GetDeviceApplianceUplinksSettingsResponseInterfaces | None = None


class UpdateNetworkApplianceConnectivityMonitoringDestinationsDestinationsItem(_BaseSchema):
    """Item schema for destinations."""

    ip: str
    description: str | None = None
    default: bool | None = None


class UpdateNetworkApplianceConnectivityMonitoringDestinationsResponse(_BaseSchema):
    """Response for updateNetworkApplianceConnectivityMonitoringDestinations operation."""

    destinations: list[
        GetNetworkApplianceConnectivityMonitoringDestinationsResponseDestinationsItem
    ] = Field(default_factory=list)


class UpdateNetworkApplianceContentFilteringResponse(_BaseSchema):
    """Response for updateNetworkApplianceContentFiltering operation."""

    allowed_url_patterns: list[str] = Field(
        default_factory=list,
        validation_alias="allowedUrlPatterns",
        serialization_alias="allowedUrlPatterns",
    )
    blocked_url_patterns: list[str] = Field(
        default_factory=list,
        validation_alias="blockedUrlPatterns",
        serialization_alias="blockedUrlPatterns",
    )
    blocked_url_categories: list[
        GetNetworkApplianceContentFilteringResponseBlockedUrlCategoriesItem
    ] = Field(
        default_factory=list,
        validation_alias="blockedUrlCategories",
        serialization_alias="blockedUrlCategories",
    )
    url_category_list_size: str | None = Field(
        default=None,
        validation_alias="urlCategoryListSize",
        serialization_alias="urlCategoryListSize",
    )


class UpdateNetworkApplianceFirewallCellularFirewallRulesRulesItem(_BaseSchema):
    """Item schema for rules."""

    comment: str | None = None
    policy: str
    protocol: str
    src_port: str | None = Field(
        default=None, validation_alias="srcPort", serialization_alias="srcPort"
    )
    src_cidr: str = Field(validation_alias="srcCidr", serialization_alias="srcCidr")
    dest_port: str | None = Field(
        default=None, validation_alias="destPort", serialization_alias="destPort"
    )
    dest_cidr: str = Field(validation_alias="destCidr", serialization_alias="destCidr")
    syslog_enabled: bool | None = Field(
        default=None, validation_alias="syslogEnabled", serialization_alias="syslogEnabled"
    )


class UpdateNetworkApplianceFirewallFirewalledServiceResponse(_BaseSchema):
    """Response for updateNetworkApplianceFirewallFirewalledService operation."""

    service: str | None = None
    access: str | None = None
    allowed_ips: list[str] = Field(
        default_factory=list, validation_alias="allowedIps", serialization_alias="allowedIps"
    )


class UpdateNetworkApplianceFirewallInboundCellularFirewallRulesResponse(_BaseSchema):
    """Response for updateNetworkApplianceFirewallInboundCellularFirewallRules operation."""

    rules: list[GetNetworkApplianceFirewallInboundCellularFirewallRulesResponseRulesItem] = Field(
        default_factory=list
    )


class UpdateNetworkApplianceFirewallInboundCellularFirewallRulesRulesItem(_BaseSchema):
    """Item schema for rules."""

    comment: str | None = None
    policy: str
    protocol: str
    src_port: str | None = Field(
        default=None, validation_alias="srcPort", serialization_alias="srcPort"
    )
    src_cidr: str = Field(validation_alias="srcCidr", serialization_alias="srcCidr")
    dest_port: str | None = Field(
        default=None, validation_alias="destPort", serialization_alias="destPort"
    )
    dest_cidr: str = Field(validation_alias="destCidr", serialization_alias="destCidr")
    syslog_enabled: bool | None = Field(
        default=None, validation_alias="syslogEnabled", serialization_alias="syslogEnabled"
    )


class UpdateNetworkApplianceFirewallInboundFirewallRulesResponse(_BaseSchema):
    """Response for updateNetworkApplianceFirewallInboundFirewallRules operation."""

    rules: list[GetNetworkApplianceFirewallInboundCellularFirewallRulesResponseRulesItem] = Field(
        default_factory=list
    )
    syslog_default_rule: bool | None = Field(
        default=None, validation_alias="syslogDefaultRule", serialization_alias="syslogDefaultRule"
    )


class UpdateNetworkApplianceFirewallInboundFirewallRulesRulesItem(_BaseSchema):
    """Item schema for rules."""

    comment: str | None = None
    policy: str
    protocol: str
    src_port: str | None = Field(
        default=None, validation_alias="srcPort", serialization_alias="srcPort"
    )
    src_cidr: str = Field(validation_alias="srcCidr", serialization_alias="srcCidr")
    dest_port: str | None = Field(
        default=None, validation_alias="destPort", serialization_alias="destPort"
    )
    dest_cidr: str = Field(validation_alias="destCidr", serialization_alias="destCidr")
    syslog_enabled: bool | None = Field(
        default=None, validation_alias="syslogEnabled", serialization_alias="syslogEnabled"
    )


class UpdateNetworkApplianceFirewallL3FirewallRulesRulesItem(_BaseSchema):
    """Item schema for rules."""

    comment: str | None = None
    policy: str
    protocol: str
    src_port: str | None = Field(
        default=None, validation_alias="srcPort", serialization_alias="srcPort"
    )
    src_cidr: str = Field(validation_alias="srcCidr", serialization_alias="srcCidr")
    dest_port: str | None = Field(
        default=None, validation_alias="destPort", serialization_alias="destPort"
    )
    dest_cidr: str = Field(validation_alias="destCidr", serialization_alias="destCidr")
    syslog_enabled: bool | None = Field(
        default=None, validation_alias="syslogEnabled", serialization_alias="syslogEnabled"
    )


class UpdateNetworkApplianceFirewallL7FirewallRulesRulesItem(_BaseSchema):
    """Item schema for rules."""

    policy: str | None = None
    type_: str | None = Field(default=None, validation_alias="type", serialization_alias="type")
    value: str | None = None


class UpdateNetworkApplianceFirewallMulticastForwardingResponse(_BaseSchema):
    """Response for updateNetworkApplianceFirewallMulticastForwarding operation."""

    network: UpdateNetworkApplianceFirewallMulticastForwardingResponseNetwork
    rules: list[UpdateNetworkApplianceFirewallMulticastForwardingResponseRulesItem]


class UpdateNetworkApplianceFirewallMulticastForwardingResponseNetwork(_BaseSchema):
    """Network details."""

    id: str
    name: str


class UpdateNetworkApplianceFirewallMulticastForwardingResponseRulesItem(_BaseSchema):
    """Schema for UpdateNetworkApplianceFirewallMulticastForwardingResponseRulesItem."""

    description: str
    address: str
    vlan_ids: list[str] = Field(validation_alias="vlanIds", serialization_alias="vlanIds")


class UpdateNetworkApplianceFirewallMulticastForwardingRulesItem(_BaseSchema):
    """Item schema for rules."""

    description: str
    address: str
    vlan_ids: list[str] = Field(validation_alias="vlanIds", serialization_alias="vlanIds")


class UpdateNetworkApplianceFirewallOneToManyNatRulesRulesItem(_BaseSchema):
    """Item schema for rules."""

    public_ip: str = Field(validation_alias="publicIp", serialization_alias="publicIp")
    uplink: str
    port_rules: list[UpdateNetworkApplianceFirewallOneToManyNatRulesRulesItemPortRulesItem] = Field(
        validation_alias="portRules", serialization_alias="portRules"
    )


class UpdateNetworkApplianceFirewallOneToManyNatRulesRulesItemPortRulesItem(_BaseSchema):
    """Schema for UpdateNetworkApplianceFirewallOneToManyNatRulesRulesItemPortRulesItem."""

    name: str | None = None
    protocol: str | None = None
    public_port: str | None = Field(
        default=None, validation_alias="publicPort", serialization_alias="publicPort"
    )
    local_ip: str | None = Field(
        default=None, validation_alias="localIp", serialization_alias="localIp"
    )
    local_port: str | None = Field(
        default=None, validation_alias="localPort", serialization_alias="localPort"
    )
    allowed_ips: list[str] = Field(
        default_factory=list, validation_alias="allowedIps", serialization_alias="allowedIps"
    )


class UpdateNetworkApplianceFirewallOneToOneNatRulesRulesItem(_BaseSchema):
    """Item schema for rules."""

    name: str | None = None
    public_ip: str | None = Field(
        default=None, validation_alias="publicIp", serialization_alias="publicIp"
    )
    lan_ip: str = Field(validation_alias="lanIp", serialization_alias="lanIp")
    uplink: str | None = None
    allowed_inbound: list[
        UpdateNetworkApplianceFirewallOneToOneNatRulesRulesItemAllowedInboundItem
    ] = Field(
        default_factory=list,
        validation_alias="allowedInbound",
        serialization_alias="allowedInbound",
    )


class UpdateNetworkApplianceFirewallOneToOneNatRulesRulesItemAllowedInboundItem(_BaseSchema):
    """Schema for UpdateNetworkApplianceFirewallOneToOneNatRulesRulesItemAllowedInboundItem."""

    protocol: str | None = None
    destination_ports: list[str] = Field(
        default_factory=list,
        validation_alias="destinationPorts",
        serialization_alias="destinationPorts",
    )
    allowed_ips: list[str] = Field(
        default_factory=list, validation_alias="allowedIps", serialization_alias="allowedIps"
    )


class UpdateNetworkApplianceFirewallPortForwardingRulesResponse(_BaseSchema):
    """Response for updateNetworkApplianceFirewallPortForwardingRules operation."""

    rules: list[GetNetworkApplianceFirewallPortForwardingRulesResponseRulesItem] = Field(
        default_factory=list
    )


class UpdateNetworkApplianceFirewallPortForwardingRulesRulesItem(_BaseSchema):
    """Item schema for rules."""

    name: str | None = None
    lan_ip: str = Field(validation_alias="lanIp", serialization_alias="lanIp")
    uplink: str | None = None
    public_port: str = Field(validation_alias="publicPort", serialization_alias="publicPort")
    local_port: str = Field(validation_alias="localPort", serialization_alias="localPort")
    allowed_ips: list[str] = Field(validation_alias="allowedIps", serialization_alias="allowedIps")
    protocol: str


class UpdateNetworkApplianceFirewallSettingsSpoofingProtection(_BaseSchema):
    """Spoofing protection settings."""

    ip_source_guard: (
        UpdateNetworkApplianceFirewallSettingsSpoofingProtectionIpSourceGuard | None
    ) = Field(default=None, validation_alias="ipSourceGuard", serialization_alias="ipSourceGuard")


class UpdateNetworkApplianceFirewallSettingsSpoofingProtectionIpSourceGuard(_BaseSchema):
    """IP source address spoofing settings."""

    mode: str | None = None


class UpdateNetworkAppliancePortResponse(_BaseSchema):
    """Response for updateNetworkAppliancePort operation."""

    number: int | None = None
    enabled: bool | None = None
    type_: str | None = Field(default=None, validation_alias="type", serialization_alias="type")
    drop_untagged_traffic: bool | None = Field(
        default=None,
        validation_alias="dropUntaggedTraffic",
        serialization_alias="dropUntaggedTraffic",
    )
    vlan: int | None = None
    allowed_vlans: str | None = Field(
        default=None, validation_alias="allowedVlans", serialization_alias="allowedVlans"
    )
    access_policy: str | None = Field(
        default=None, validation_alias="accessPolicy", serialization_alias="accessPolicy"
    )


class UpdateNetworkAppliancePrefixesDelegatedStaticOrigin(_BaseSchema):
    """The origin of the prefix."""

    type_: str | None = Field(default=None, validation_alias="type", serialization_alias="type")
    interfaces: list[str] = Field(default_factory=list)


class UpdateNetworkApplianceRfProfileFiveGhzSettings(_BaseSchema):
    """Settings related to 5Ghz band."""

    min_bitrate: int | None = Field(
        default=None, validation_alias="minBitrate", serialization_alias="minBitrate"
    )
    ax_enabled: bool | None = Field(
        default=None, validation_alias="axEnabled", serialization_alias="axEnabled"
    )


class UpdateNetworkApplianceRfProfilePerSsidSettings(_BaseSchema):
    """Per-SSID radio settings by number."""

    n_1: CreateNetworkApplianceRfProfilePerSsidSettings1 | None = Field(
        default=None, validation_alias="1", serialization_alias="1"
    )
    n_2: CreateNetworkApplianceRfProfilePerSsidSettings1 | None = Field(
        default=None, validation_alias="2", serialization_alias="2"
    )
    n_3: CreateNetworkApplianceRfProfilePerSsidSettings1 | None = Field(
        default=None, validation_alias="3", serialization_alias="3"
    )
    n_4: CreateNetworkApplianceRfProfilePerSsidSettings1 | None = Field(
        default=None, validation_alias="4", serialization_alias="4"
    )


class UpdateNetworkApplianceRfProfileResponse(_BaseSchema):
    """Response for updateNetworkApplianceRfProfile operation."""

    id: str | None = None
    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    name: str | None = None
    two_four_ghz_settings: ApplianceAssignedTwoFourGhzSettings | None = Field(
        default=None,
        validation_alias="twoFourGhzSettings",
        serialization_alias="twoFourGhzSettings",
    )
    five_ghz_settings: ApplianceAssignedFiveGhzSettings | None = Field(
        default=None, validation_alias="fiveGhzSettings", serialization_alias="fiveGhzSettings"
    )
    per_ssid_settings: ApplianceAssignedPerSsidSettings | None = Field(
        default=None, validation_alias="perSsidSettings", serialization_alias="perSsidSettings"
    )


class UpdateNetworkApplianceRfProfileTwoFourGhzSettings(_BaseSchema):
    """Settings related to 2.4Ghz band."""

    min_bitrate: float | None = Field(
        default=None, validation_alias="minBitrate", serialization_alias="minBitrate"
    )
    ax_enabled: bool | None = Field(
        default=None, validation_alias="axEnabled", serialization_alias="axEnabled"
    )


class UpdateNetworkApplianceSdwanInternetPoliciesResponse(_BaseSchema):
    """Response for updateNetworkApplianceSdwanInternetPolicies operation."""

    wan_traffic_uplink_preferences: list[ApplianceWanTrafficUplinkPreferencesItem] = Field(
        default_factory=list,
        validation_alias="wanTrafficUplinkPreferences",
        serialization_alias="wanTrafficUplinkPreferences",
    )


class UpdateNetworkApplianceSdwanInternetPoliciesWanTrafficUplinkPreferencesItem(_BaseSchema):
    """Item schema for wanTrafficUplinkPreferences."""

    preferred_uplink: str = Field(
        validation_alias="preferredUplink", serialization_alias="preferredUplink"
    )
    fail_over_criterion: str | None = Field(
        default=None, validation_alias="failOverCriterion", serialization_alias="failOverCriterion"
    )
    performance_class: AppliancePerformanceClass | None = Field(
        default=None, validation_alias="performanceClass", serialization_alias="performanceClass"
    )
    traffic_filters: list[ApplianceTrafficFiltersItem] = Field(
        validation_alias="trafficFilters", serialization_alias="trafficFilters"
    )


class UpdateNetworkApplianceSecurityIntrusionProtectedNetworks(_BaseSchema):
    """Set the included/excluded networks from the intrusion engine (optional - omitting will leave
    current config unchanged). This is available only in 'passthrough' mode.
    """

    use_default: bool | None = Field(
        default=None, validation_alias="useDefault", serialization_alias="useDefault"
    )
    included_cidr: list[str] = Field(
        default_factory=list, validation_alias="includedCidr", serialization_alias="includedCidr"
    )
    excluded_cidr: list[str] = Field(
        default_factory=list, validation_alias="excludedCidr", serialization_alias="excludedCidr"
    )


class UpdateNetworkApplianceSecurityIntrusionResponse(_BaseSchema):
    """Response for updateNetworkApplianceSecurityIntrusion operation."""

    mode: str | None = None
    ids_rulesets: str | None = Field(
        default=None, validation_alias="idsRulesets", serialization_alias="idsRulesets"
    )
    protected_networks: GetNetworkApplianceSecurityIntrusionResponseProtectedNetworks | None = (
        Field(
            default=None,
            validation_alias="protectedNetworks",
            serialization_alias="protectedNetworks",
        )
    )


class UpdateNetworkApplianceSecurityMalwareAllowedFilesItem(_BaseSchema):
    """Item schema for allowedFiles."""

    sha256: str
    comment: str


class UpdateNetworkApplianceSecurityMalwareAllowedUrlsItem(_BaseSchema):
    """Item schema for allowedUrls."""

    url: str
    comment: str


class UpdateNetworkApplianceSecurityMalwareResponse(_BaseSchema):
    """Response for updateNetworkApplianceSecurityMalware operation."""

    mode: str | None = None
    allowed_urls: list[GetNetworkApplianceSecurityMalwareResponseAllowedUrlsItem] = Field(
        default_factory=list, validation_alias="allowedUrls", serialization_alias="allowedUrls"
    )
    allowed_files: list[GetNetworkApplianceSecurityMalwareResponseAllowedFilesItem] = Field(
        default_factory=list, validation_alias="allowedFiles", serialization_alias="allowedFiles"
    )


class UpdateNetworkApplianceSettingsDynamicDns(_BaseSchema):
    """Dynamic DNS settings for a network."""

    prefix: str | None = None
    enabled: bool | None = None


class UpdateNetworkApplianceSettingsResponse(_BaseSchema):
    """Response for updateNetworkApplianceSettings operation."""

    client_tracking_method: str | None = Field(
        default=None,
        validation_alias="clientTrackingMethod",
        serialization_alias="clientTrackingMethod",
    )
    deployment_mode: str | None = Field(
        default=None, validation_alias="deploymentMode", serialization_alias="deploymentMode"
    )
    dynamic_dns: GetNetworkApplianceSettingsResponseDynamicDns | None = Field(
        default=None, validation_alias="dynamicDns", serialization_alias="dynamicDns"
    )


class UpdateNetworkApplianceSingleLanIpv6(_BaseSchema):
    """IPv6 configuration on the VLAN."""

    enabled: bool | None = None
    prefix_assignments: list[UpdateNetworkApplianceSingleLanIpv6PrefixAssignmentsItem] = Field(
        default_factory=list,
        validation_alias="prefixAssignments",
        serialization_alias="prefixAssignments",
    )


class UpdateNetworkApplianceSingleLanIpv6PrefixAssignmentsItem(_BaseSchema):
    """Schema for UpdateNetworkApplianceSingleLanIpv6PrefixAssignmentsItem."""

    autonomous: bool | None = None
    disabled: bool
    static_prefix: str | None = Field(
        default=None, validation_alias="staticPrefix", serialization_alias="staticPrefix"
    )
    static_appliance_ip6: str | None = Field(
        default=None,
        validation_alias="staticApplianceIp6",
        serialization_alias="staticApplianceIp6",
    )
    origin: ApplianceOrigin3 | None = None


class UpdateNetworkApplianceSingleLanMandatoryDhcp(_BaseSchema):
    """Mandatory DHCP will enforce that clients connecting to this LAN must use the IP address
    assigned by the DHCP server. Clients who use a static IP address won't be able to associate.
    Only available on firmware versions 17.0 and above.
    """

    enabled: bool | None = None


class UpdateNetworkApplianceSingleLanResponse(_BaseSchema):
    """Response for updateNetworkApplianceSingleLan operation."""

    subnet: str | None = None
    appliance_ip: str | None = Field(
        default=None, validation_alias="applianceIp", serialization_alias="applianceIp"
    )
    mandatory_dhcp: GetNetworkApplianceSingleLanResponseMandatoryDhcp | None = Field(
        default=None, validation_alias="mandatoryDhcp", serialization_alias="mandatoryDhcp"
    )
    ipv6: GetNetworkApplianceSingleLanResponseIpv6 | None = None


class UpdateNetworkApplianceSsidDhcpEnforcedDeauthentication(_BaseSchema):
    """DHCP Enforced Deauthentication enables the disassociation of wireless clients in addition to
    Mandatory DHCP. This param is only valid on firmware versions >= MX 17.0 where the
    associated LAN has Mandatory DHCP Enabled.
    """

    enabled: bool | None = None


class UpdateNetworkApplianceSsidDot11w(_BaseSchema):
    """The current setting for Protected Management Frames (802.11w)."""

    enabled: bool | None = None
    required: bool | None = None


class UpdateNetworkApplianceSsidRadiusServersItem(_BaseSchema):
    """Item schema for radiusServers."""

    host: str | None = None
    port: int | None = None
    secret: str | None = None


class UpdateNetworkApplianceSsidResponse(_BaseSchema):
    """Response for updateNetworkApplianceSsid operation."""

    number: int | None = None
    name: str | None = None
    enabled: bool | None = None
    default_vlan_id: int | None = Field(
        default=None, validation_alias="defaultVlanId", serialization_alias="defaultVlanId"
    )
    auth_mode: str | None = Field(
        default=None, validation_alias="authMode", serialization_alias="authMode"
    )
    radius_servers: list[ApplianceRadiusServersItem] = Field(
        default_factory=list, validation_alias="radiusServers", serialization_alias="radiusServers"
    )
    encryption_mode: str | None = Field(
        default=None, validation_alias="encryptionMode", serialization_alias="encryptionMode"
    )
    wpa_encryption_mode: str | None = Field(
        default=None, validation_alias="wpaEncryptionMode", serialization_alias="wpaEncryptionMode"
    )
    visible: bool | None = None


class UpdateNetworkApplianceStaticRouteFixedIpAssignmentsValue(_BaseSchema):
    """An object mapping MAC addresses to IP addresses and client names."""

    ip: str | None = None
    name: str | None = None


class UpdateNetworkApplianceStaticRouteReservedIpRangesItem(_BaseSchema):
    """Item schema for reservedIpRanges."""

    start: str
    end: str
    comment: str


class UpdateNetworkApplianceStaticRouteResponse(_BaseSchema):
    """Response for updateNetworkApplianceStaticRoute operation."""

    id: str | None = None
    ip_version: int | None = Field(
        default=None, validation_alias="ipVersion", serialization_alias="ipVersion"
    )
    network_id: str | None = Field(
        default=None, validation_alias="networkId", serialization_alias="networkId"
    )
    enabled: bool | None = None
    name: str | None = None
    subnet: str | None = None
    gateway_ip: str | None = Field(
        default=None, validation_alias="gatewayIp", serialization_alias="gatewayIp"
    )
    fixed_ip_assignments: dict[str, Any] | None = Field(
        default=None,
        validation_alias="fixedIpAssignments",
        serialization_alias="fixedIpAssignments",
    )
    reserved_ip_ranges: list[ApplianceReservedIpRangesItem] = Field(
        default_factory=list,
        validation_alias="reservedIpRanges",
        serialization_alias="reservedIpRanges",
    )
    gateway_vlan_id: int | None = Field(
        default=None, validation_alias="gatewayVlanId", serialization_alias="gatewayVlanId"
    )


class UpdateNetworkApplianceTrafficShapingCustomPerformanceClassResponse(_BaseSchema):
    """Response for updateNetworkApplianceTrafficShapingCustomPerformanceClass operation."""

    name: str | None = None
    custom_performance_class_id: str | None = Field(
        default=None,
        validation_alias="customPerformanceClassId",
        serialization_alias="customPerformanceClassId",
    )
    max_latency: int | None = Field(
        default=None, validation_alias="maxLatency", serialization_alias="maxLatency"
    )
    max_jitter: int | None = Field(
        default=None, validation_alias="maxJitter", serialization_alias="maxJitter"
    )
    max_loss_percentage: int | None = Field(
        default=None, validation_alias="maxLossPercentage", serialization_alias="maxLossPercentage"
    )


class UpdateNetworkApplianceTrafficShapingGlobalBandwidthLimits(_BaseSchema):
    """Global per-client bandwidth limit."""

    limit_up: int | None = Field(
        default=None, validation_alias="limitUp", serialization_alias="limitUp"
    )
    limit_down: int | None = Field(
        default=None, validation_alias="limitDown", serialization_alias="limitDown"
    )


class UpdateNetworkApplianceTrafficShapingRulesRulesItem(_BaseSchema):
    """Item schema for rules."""

    definitions: list[UpdateNetworkApplianceTrafficShapingRulesRulesItemDefinitionsItem]
    per_client_bandwidth_limits: (
        UpdateNetworkApplianceTrafficShapingRulesRulesItemPerClientBandwidthLimits | None
    ) = Field(
        default=None,
        validation_alias="perClientBandwidthLimits",
        serialization_alias="perClientBandwidthLimits",
    )
    dscp_tag_value: int | None = Field(
        default=None, validation_alias="dscpTagValue", serialization_alias="dscpTagValue"
    )
    priority: str | None = None


class UpdateNetworkApplianceTrafficShapingRulesRulesItemDefinitionsItem(_BaseSchema):
    """Schema for UpdateNetworkApplianceTrafficShapingRulesRulesItemDefinitionsItem."""

    type_: str = Field(validation_alias="type", serialization_alias="type")
    value: str


class UpdateNetworkApplianceTrafficShapingRulesRulesItemPerClientBandwidthLimits(_BaseSchema):
    """An object describing the bandwidth settings for your rule."""

    settings: str | None = None
    bandwidth_limits: ApplianceBandwidthLimits | None = Field(
        default=None, validation_alias="bandwidthLimits", serialization_alias="bandwidthLimits"
    )


class UpdateNetworkApplianceTrafficShapingUplinkBandwidthBandwidthLimits(_BaseSchema):
    """A mapping of uplinks to their bandwidth settings (be sure to check which uplinks are
    supported for your network).
    """

    wan1: ApplianceBandwidthLimits | None = None
    wan2: ApplianceBandwidthLimits | None = None
    cellular: ApplianceBandwidthLimits | None = None


class UpdateNetworkApplianceTrafficShapingUplinkSelectionFailoverAndFailback(_BaseSchema):
    """WAN failover and failback behavior."""

    immediate: ApplianceFailoverAndFailbackImmediate | None = None


class UpdateNetworkApplianceTrafficShapingUplinkSelectionResponse(_BaseSchema):
    """Response for updateNetworkApplianceTrafficShapingUplinkSelection operation."""

    active_active_auto_vpn_enabled: bool | None = Field(
        default=None,
        validation_alias="activeActiveAutoVpnEnabled",
        serialization_alias="activeActiveAutoVpnEnabled",
    )
    default_uplink: str | None = Field(
        default=None, validation_alias="defaultUplink", serialization_alias="defaultUplink"
    )
    load_balancing_enabled: bool | None = Field(
        default=None,
        validation_alias="loadBalancingEnabled",
        serialization_alias="loadBalancingEnabled",
    )
    failover_and_failback: (
        GetNetworkApplianceTrafficShapingUplinkSelectionResponseFailoverAndFailback | None
    ) = Field(
        default=None,
        validation_alias="failoverAndFailback",
        serialization_alias="failoverAndFailback",
    )
    wan_traffic_uplink_preferences: list[ApplianceWanTrafficUplinkPreferencesItem2] = Field(
        default_factory=list,
        validation_alias="wanTrafficUplinkPreferences",
        serialization_alias="wanTrafficUplinkPreferences",
    )
    vpn_traffic_uplink_preferences: list[ApplianceVpnTrafficUplinkPreferencesItem] = Field(
        default_factory=list,
        validation_alias="vpnTrafficUplinkPreferences",
        serialization_alias="vpnTrafficUplinkPreferences",
    )


class UpdateNetworkApplianceTrafficShapingUplinkSelectionVpnTrafficUplinkPreferencesItem(
    _BaseSchema
):
    """Item schema for vpnTrafficUplinkPreferences."""

    traffic_filters: list[ApplianceTrafficFiltersItem3] = Field(
        validation_alias="trafficFilters", serialization_alias="trafficFilters"
    )
    preferred_uplink: str = Field(
        validation_alias="preferredUplink", serialization_alias="preferredUplink"
    )
    fail_over_criterion: str | None = Field(
        default=None, validation_alias="failOverCriterion", serialization_alias="failOverCriterion"
    )
    performance_class: AppliancePerformanceClass2 | None = Field(
        default=None, validation_alias="performanceClass", serialization_alias="performanceClass"
    )


class UpdateNetworkApplianceTrafficShapingUplinkSelectionWanTrafficUplinkPreferencesItem(
    _BaseSchema
):
    """Item schema for wanTrafficUplinkPreferences."""

    traffic_filters: list[ApplianceTrafficFiltersItem4] = Field(
        validation_alias="trafficFilters", serialization_alias="trafficFilters"
    )
    preferred_uplink: str = Field(
        validation_alias="preferredUplink", serialization_alias="preferredUplink"
    )


class UpdateNetworkApplianceTrafficShapingVpnExclusionsCustomItem(_BaseSchema):
    """Item schema for custom."""

    protocol: str
    destination: str | None = None
    port: str | None = None


class UpdateNetworkApplianceTrafficShapingVpnExclusionsMajorApplicationsItem(_BaseSchema):
    """Item schema for majorApplications."""

    id: str
    name: str | None = None


class UpdateNetworkApplianceTrafficShapingVpnExclusionsResponse(_BaseSchema):
    """Response for updateNetworkApplianceTrafficShapingVpnExclusions operation."""

    network_id: str = Field(validation_alias="networkId", serialization_alias="networkId")
    network_name: str = Field(validation_alias="networkName", serialization_alias="networkName")
    custom: list[UpdateNetworkApplianceTrafficShapingVpnExclusionsResponseCustomItem]
    major_applications: list[
        UpdateNetworkApplianceTrafficShapingVpnExclusionsResponseMajorApplicationsItem
    ] = Field(validation_alias="majorApplications", serialization_alias="majorApplications")


class UpdateNetworkApplianceTrafficShapingVpnExclusionsResponseCustomItem(_BaseSchema):
    """Schema for UpdateNetworkApplianceTrafficShapingVpnExclusionsResponseCustomItem."""

    protocol: str
    destination: str
    port: str


class UpdateNetworkApplianceTrafficShapingVpnExclusionsResponseMajorApplicationsItem(_BaseSchema):
    """Schema for UpdateNetworkApplianceTrafficShapingVpnExclusionsResponseMajorApplicationsItem."""

    id: str
    name: str


class UpdateNetworkApplianceVlanDhcpOptionsItem(_BaseSchema):
    """Item schema for dhcpOptions."""

    code: str
    type_: str = Field(validation_alias="type", serialization_alias="type")
    value: str


class UpdateNetworkApplianceVlanIpv6(_BaseSchema):
    """IPv6 configuration on the VLAN."""

    enabled: bool | None = None
    prefix_assignments: list[UpdateNetworkApplianceVlanIpv6PrefixAssignmentsItem] = Field(
        default_factory=list,
        validation_alias="prefixAssignments",
        serialization_alias="prefixAssignments",
    )


class UpdateNetworkApplianceVlanIpv6PrefixAssignmentsItem(_BaseSchema):
    """Schema for UpdateNetworkApplianceVlanIpv6PrefixAssignmentsItem."""

    autonomous: bool | None = None
    static_prefix: str | None = Field(
        default=None, validation_alias="staticPrefix", serialization_alias="staticPrefix"
    )
    static_appliance_ip6: str | None = Field(
        default=None,
        validation_alias="staticApplianceIp6",
        serialization_alias="staticApplianceIp6",
    )
    origin: ApplianceOrigin3 | None = None


class UpdateNetworkApplianceVlanMandatoryDhcp(_BaseSchema):
    """Mandatory DHCP will enforce that clients connecting to this VLAN must use the IP address
    assigned by the DHCP server. Clients who use a static IP address won't be able to associate.
    Only available on firmware versions 17.0 and above.
    """

    enabled: bool | None = None


class UpdateNetworkApplianceVlanReservedIpRangesItem(_BaseSchema):
    """Item schema for reservedIpRanges."""

    start: str
    end: str
    comment: str


class UpdateNetworkApplianceVlanResponse(_BaseSchema):
    """Response for updateNetworkApplianceVlan operation."""

    id: str | None = None
    interface_id: str | None = Field(
        default=None, validation_alias="interfaceId", serialization_alias="interfaceId"
    )
    name: str | None = None
    subnet: str | None = None
    appliance_ip: str | None = Field(
        default=None, validation_alias="applianceIp", serialization_alias="applianceIp"
    )
    group_policy_id: str | None = Field(
        default=None, validation_alias="groupPolicyId", serialization_alias="groupPolicyId"
    )
    template_vlan_type: str | None = Field(
        default=None, validation_alias="templateVlanType", serialization_alias="templateVlanType"
    )
    cidr: str | None = None
    mask: int | None = None
    dhcp_relay_server_ips: list[str] = Field(
        default_factory=list,
        validation_alias="dhcpRelayServerIps",
        serialization_alias="dhcpRelayServerIps",
    )
    dhcp_handling: str | None = Field(
        default=None, validation_alias="dhcpHandling", serialization_alias="dhcpHandling"
    )
    dhcp_lease_time: str | None = Field(
        default=None, validation_alias="dhcpLeaseTime", serialization_alias="dhcpLeaseTime"
    )
    dhcp_boot_options_enabled: bool | None = Field(
        default=None,
        validation_alias="dhcpBootOptionsEnabled",
        serialization_alias="dhcpBootOptionsEnabled",
    )
    dhcp_boot_next_server: str | None = Field(
        default=None,
        validation_alias="dhcpBootNextServer",
        serialization_alias="dhcpBootNextServer",
    )
    dhcp_boot_filename: str | None = Field(
        default=None, validation_alias="dhcpBootFilename", serialization_alias="dhcpBootFilename"
    )
    fixed_ip_assignments: dict[str, Any] | None = Field(
        default=None,
        validation_alias="fixedIpAssignments",
        serialization_alias="fixedIpAssignments",
    )
    reserved_ip_ranges: list[ApplianceReservedIpRangesItem] = Field(
        default_factory=list,
        validation_alias="reservedIpRanges",
        serialization_alias="reservedIpRanges",
    )
    dns_nameservers: str | None = Field(
        default=None, validation_alias="dnsNameservers", serialization_alias="dnsNameservers"
    )
    dhcp_options: list[ApplianceDhcpOptionsItem] = Field(
        default_factory=list, validation_alias="dhcpOptions", serialization_alias="dhcpOptions"
    )
    vpn_nat_subnet: str | None = Field(
        default=None, validation_alias="vpnNatSubnet", serialization_alias="vpnNatSubnet"
    )
    mandatory_dhcp: GetNetworkApplianceSingleLanResponseMandatoryDhcp | None = Field(
        default=None, validation_alias="mandatoryDhcp", serialization_alias="mandatoryDhcp"
    )
    ipv6: GetNetworkApplianceSingleLanResponseIpv6 | None = None


class UpdateNetworkApplianceVlansSettingsResponse(_BaseSchema):
    """Response for updateNetworkApplianceVlansSettings operation."""

    vlans_enabled: bool | None = Field(
        default=None, validation_alias="vlansEnabled", serialization_alias="vlansEnabled"
    )


class UpdateNetworkApplianceVpnBgpNeighborsItem(_BaseSchema):
    """Item schema for neighbors."""

    ip: str | None = None
    ipv6: UpdateNetworkApplianceVpnBgpNeighborsItemIpv6 | None = None
    remote_as_number: int = Field(
        validation_alias="remoteAsNumber", serialization_alias="remoteAsNumber"
    )
    receive_limit: int | None = Field(
        default=None, validation_alias="receiveLimit", serialization_alias="receiveLimit"
    )
    allow_transit: bool | None = Field(
        default=None, validation_alias="allowTransit", serialization_alias="allowTransit"
    )
    ebgp_hold_timer: int = Field(
        validation_alias="ebgpHoldTimer", serialization_alias="ebgpHoldTimer"
    )
    ebgp_multihop: int = Field(validation_alias="ebgpMultihop", serialization_alias="ebgpMultihop")
    source_interface: str | None = Field(
        default=None, validation_alias="sourceInterface", serialization_alias="sourceInterface"
    )
    next_hop_ip: str | None = Field(
        default=None, validation_alias="nextHopIp", serialization_alias="nextHopIp"
    )
    ttl_security: GetNetworkApplianceSingleLanResponseMandatoryDhcp | None = Field(
        default=None, validation_alias="ttlSecurity", serialization_alias="ttlSecurity"
    )
    authentication: ApplianceNeighborsAuthentication | None = None
    multi_exit_discriminator: int | None = Field(
        default=None,
        validation_alias="multiExitDiscriminator",
        serialization_alias="multiExitDiscriminator",
    )
    path_prepend: list[int] = Field(
        default_factory=list, validation_alias="pathPrepend", serialization_alias="pathPrepend"
    )
    weight: int | None = None


class UpdateNetworkApplianceVpnBgpNeighborsItemIpv6(_BaseSchema):
    """Information regarding IPv6 address of the neighbor, Required if `ip` is not present."""

    address: str


class UpdateNetworkApplianceVpnBgpResponse(_BaseSchema):
    """Response for updateNetworkApplianceVpnBgp operation."""

    enabled: bool | None = None
    as_number: int | None = Field(
        default=None, validation_alias="asNumber", serialization_alias="asNumber"
    )
    ibgp_hold_timer: int | None = Field(
        default=None, validation_alias="ibgpHoldTimer", serialization_alias="ibgpHoldTimer"
    )
    neighbors: list[GetNetworkApplianceVpnBgpResponseNeighborsItem] = Field(default_factory=list)


class UpdateNetworkApplianceVpnSiteToSiteVpnHubsItem(_BaseSchema):
    """Item schema for hubs."""

    hub_id: str = Field(validation_alias="hubId", serialization_alias="hubId")
    use_default_route: bool | None = Field(
        default=None, validation_alias="useDefaultRoute", serialization_alias="useDefaultRoute"
    )


class UpdateNetworkApplianceVpnSiteToSiteVpnResponse(_BaseSchema):
    """Response for updateNetworkApplianceVpnSiteToSiteVpn operation."""

    mode: str | None = None
    hubs: list[GetNetworkApplianceVpnSiteToSiteVpnResponseHubsItem] = Field(default_factory=list)
    subnets: list[GetNetworkApplianceVpnSiteToSiteVpnResponseSubnetsItem] = Field(
        default_factory=list
    )
    subnet: GetNetworkApplianceVpnSiteToSiteVpnResponseSubnet | None = None


class UpdateNetworkApplianceVpnSiteToSiteVpnSubnet(_BaseSchema):
    """Configuration of subnet features."""

    nat: ApplianceSubnetNat | None = None


class UpdateNetworkApplianceVpnSiteToSiteVpnSubnetsItem(_BaseSchema):
    """Item schema for subnets."""

    local_subnet: str = Field(validation_alias="localSubnet", serialization_alias="localSubnet")
    use_vpn: bool | None = Field(
        default=None, validation_alias="useVpn", serialization_alias="useVpn"
    )
    nat: ApplianceSubnetsNat | None = None


class UpdateNetworkApplianceWarmSpareResponse(_BaseSchema):
    """Response for updateNetworkApplianceWarmSpare operation."""

    enabled: bool | None = None
    primary_serial: str | None = Field(
        default=None, validation_alias="primarySerial", serialization_alias="primarySerial"
    )
    spare_serial: str | None = Field(
        default=None, validation_alias="spareSerial", serialization_alias="spareSerial"
    )
    uplink_mode: str | None = Field(
        default=None, validation_alias="uplinkMode", serialization_alias="uplinkMode"
    )
    wan1: GetNetworkApplianceWarmSpareResponseWan1 | None = None
    wan2: GetNetworkApplianceWarmSpareResponseWan1 | None = None


class UpdateOrganizationApplianceDnsLocalProfileResponse(_BaseSchema):
    """Response for updateOrganizationApplianceDnsLocalProfile operation."""

    profile_id: str | None = Field(
        default=None, validation_alias="profileId", serialization_alias="profileId"
    )
    name: str | None = None


class UpdateOrganizationApplianceDnsLocalRecordProfile(_BaseSchema):
    """The profile the DNS record is associated with."""

    id: str | None = None


class UpdateOrganizationApplianceDnsLocalRecordResponse(_BaseSchema):
    """Response for updateOrganizationApplianceDnsLocalRecord operation."""

    record_id: str | None = Field(
        default=None, validation_alias="recordId", serialization_alias="recordId"
    )
    hostname: str | None = None
    address: str | None = None
    profile: ApplianceNetwork | None = None


class UpdateOrganizationApplianceDnsSplitProfileNameservers(_BaseSchema):
    """Contains the nameserver information for redirection."""

    addresses: list[str] = Field(default_factory=list)


class UpdateOrganizationApplianceDnsSplitProfileResponse(_BaseSchema):
    """Response for updateOrganizationApplianceDnsSplitProfile operation."""

    profile_id: str | None = Field(
        default=None, validation_alias="profileId", serialization_alias="profileId"
    )
    name: str | None = None
    hostnames: list[str] = Field(default_factory=list)
    nameservers: ApplianceNameservers | None = None


class UpdateOrganizationApplianceSecurityIntrusionAllowedRulesItem(_BaseSchema):
    """Item schema for allowedRules."""

    rule_id: str = Field(validation_alias="ruleId", serialization_alias="ruleId")
    message: str | None = None


class UpdateOrganizationApplianceVpnSiteToSiteIpsecPeersSlasItemsItem(_BaseSchema):
    """Item schema for items."""

    name: str | None = None
    uri: str | None = None


class UpdateOrganizationApplianceVpnSiteToSiteIpsecPeersSlasResponse(_BaseSchema):
    """Response for updateOrganizationApplianceVpnSiteToSiteIpsecPeersSlas operation."""

    items: list[UpdateOrganizationApplianceVpnSiteToSiteIpsecPeersSlasResponseItemsItem] = Field(
        default_factory=list
    )
    meta: UpdateOrganizationApplianceVpnSiteToSiteIpsecPeersSlasResponseMeta | None = None


class UpdateOrganizationApplianceVpnSiteToSiteIpsecPeersSlasResponseItemsItem(_BaseSchema):
    """Schema for UpdateOrganizationApplianceVpnSiteToSiteIpsecPeersSlasResponseItemsItem."""

    id: str | None = None
    name: str | None = None
    uri: str | None = None
    ipsec: ApplianceIpsec | None = None


class UpdateOrganizationApplianceVpnSiteToSiteIpsecPeersSlasResponseMeta(_BaseSchema):
    """Metadata relevant to the paginated dataset."""

    counts: ApplianceMetaCounts | None = None


class UpdateOrganizationApplianceVpnThirdPartyVPNPeersPeersItem(_BaseSchema):
    """Item schema for peers."""

    peer_id: str | None = Field(
        default=None, validation_alias="peerId", serialization_alias="peerId"
    )
    name: str
    public_ip: str | None = Field(
        default=None, validation_alias="publicIp", serialization_alias="publicIp"
    )
    public_hostname: str | None = Field(
        default=None, validation_alias="publicHostname", serialization_alias="publicHostname"
    )
    private_subnets: list[str] = Field(
        validation_alias="privateSubnets", serialization_alias="privateSubnets"
    )
    local_id: str | None = Field(
        default=None, validation_alias="localId", serialization_alias="localId"
    )
    remote_id: str | None = Field(
        default=None, validation_alias="remoteId", serialization_alias="remoteId"
    )
    ipsec_policies: AppliancePeersIpsecPolicies | None = Field(
        default=None, validation_alias="ipsecPolicies", serialization_alias="ipsecPolicies"
    )
    ipsec_policies_preset: str | None = Field(
        default=None,
        validation_alias="ipsecPoliciesPreset",
        serialization_alias="ipsecPoliciesPreset",
    )
    sla_policy: ApplianceNetwork | None = Field(
        default=None, validation_alias="slaPolicy", serialization_alias="slaPolicy"
    )
    secret: str
    ike_version: str | None = Field(
        default=None, validation_alias="ikeVersion", serialization_alias="ikeVersion"
    )
    network_tags: list[str] = Field(
        default_factory=list, validation_alias="networkTags", serialization_alias="networkTags"
    )
    network: UpdateOrganizationApplianceVpnThirdPartyVPNPeersPeersItemNetwork | None = None
    is_route_based: bool | None = Field(
        default=None, validation_alias="isRouteBased", serialization_alias="isRouteBased"
    )
    ebgp_neighbor: UpdateOrganizationApplianceVpnThirdPartyVPNPeersPeersItemEbgpNeighbor | None = (
        Field(default=None, validation_alias="ebgpNeighbor", serialization_alias="ebgpNeighbor")
    )
    priority_in_group: int | None = Field(
        default=None, validation_alias="priorityInGroup", serialization_alias="priorityInGroup"
    )
    group: AppliancePeersGroup | None = None


class UpdateOrganizationApplianceVpnThirdPartyVPNPeersPeersItemEbgpNeighbor(_BaseSchema):
    """[optional] The BGP neighbor configuration for the VPN peer. Supported only for MX 19.1 and
    above.
    """

    neighbor_ip: str | None = Field(
        default=None, validation_alias="neighborIp", serialization_alias="neighborIp"
    )
    ip_version: int | None = Field(
        default=None, validation_alias="ipVersion", serialization_alias="ipVersion"
    )
    remote_as_number: int | None = Field(
        default=None, validation_alias="remoteAsNumber", serialization_alias="remoteAsNumber"
    )
    ebgp_hold_timer: int | None = Field(
        default=None, validation_alias="ebgpHoldTimer", serialization_alias="ebgpHoldTimer"
    )
    ebgp_multihop: int | None = Field(
        default=None, validation_alias="ebgpMultihop", serialization_alias="ebgpMultihop"
    )
    source_ip: str | None = Field(
        default=None, validation_alias="sourceIp", serialization_alias="sourceIp"
    )
    path_prepend: list[int] = Field(
        default_factory=list, validation_alias="pathPrepend", serialization_alias="pathPrepend"
    )
    multi_exit_discriminator: int | None = Field(
        default=None,
        validation_alias="multiExitDiscriminator",
        serialization_alias="multiExitDiscriminator",
    )
    weight: int | None = None


class UpdateOrganizationApplianceVpnThirdPartyVPNPeersPeersItemNetwork(_BaseSchema):
    """[optional] A list of network Names and IDs that will connect with this peer. Supported only
    for MX 19.1 and above.
    """

    ids: list[str] = Field(default_factory=list)


class UpdateOrganizationApplianceVpnThirdPartyVPNPeersResponse(_BaseSchema):
    """Response for updateOrganizationApplianceVpnThirdPartyVPNPeers operation."""

    peers: list[GetOrganizationApplianceVpnThirdPartyVPNPeersResponsePeersItem] = Field(
        default_factory=list
    )


class UpdateOrganizationApplianceVpnVpnFirewallRulesResponse(_BaseSchema):
    """Response for updateOrganizationApplianceVpnVpnFirewallRules operation."""

    rules: list[GetNetworkApplianceFirewallInboundCellularFirewallRulesResponseRulesItem] = Field(
        default_factory=list
    )


class UpdateOrganizationApplianceVpnVpnFirewallRulesRulesItem(_BaseSchema):
    """Item schema for rules."""

    comment: str | None = None
    policy: str
    protocol: str
    src_port: str | None = Field(
        default=None, validation_alias="srcPort", serialization_alias="srcPort"
    )
    src_cidr: str = Field(validation_alias="srcCidr", serialization_alias="srcCidr")
    dest_port: str | None = Field(
        default=None, validation_alias="destPort", serialization_alias="destPort"
    )
    dest_cidr: str = Field(validation_alias="destCidr", serialization_alias="destCidr")
    syslog_enabled: bool | None = Field(
        default=None, validation_alias="syslogEnabled", serialization_alias="syslogEnabled"
    )
