{"name":"unifi","displayName":"Unifi","version":"0.2.0","description":"A Pulumi package for creating and managing Unifi network resources.","keywords":["pulumi","unifi","category/network"],"homepage":"https://github.com/pulumiverse","license":"Apache-2.0","attribution":"This Pulumi package is based on the [`unifi` Terraform Provider](https://github.com/filipowm/terraform-provider-unifi).","repository":"https://github.com/pulumiverse/pulumi-unifi","pluginDownloadURL":"github://api.github.com/pulumiverse","publisher":"Pulumiverse","meta":{"moduleFormat":"(.*)(?:/[^/]*)"},"language":{"csharp":{"packageReferences":{"Pulumi":"3.*"},"namespaces":{"dns":"Dns","firewall":"Firewall","iam":"IAM","index":"index","port":"Port","setting":"Setting"},"compatibility":"tfbridge20","rootNamespace":"Pulumiverse","respectSchemaVersion":true},"go":{"importBasePath":"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi","generateResourceContainerTypes":true,"generateExtraInputTypes":true,"respectSchemaVersion":true},"java":{"basePackage":"com.pulumiverse","buildFiles":"","gradleNexusPublishPluginVersion":"","gradleTest":""},"nodejs":{"packageName":"@pulumiverse/unifi","packageDescription":"A Pulumi package for creating and managing Unifi network resources.","readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/filipowm/terraform-provider-unifi)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-unifi` repo](https://github.com/pulumiverse/pulumi-unifi/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-unifi` repo](https://github.com/filipowm/terraform-provider-unifi/issues).","dependencies":{"@pulumi/pulumi":"^3.0.0"},"devDependencies":{"@types/mime":"^2.0.0","@types/node":"^10.0.0"},"compatibility":"tfbridge20","disableUnionOutputTypes":true,"respectSchemaVersion":true},"python":{"packageName":"pulumiverse_unifi","requires":{"pulumi":"\u003e=3.0.0,\u003c4.0.0"},"readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/filipowm/terraform-provider-unifi)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-unifi` repo](https://github.com/pulumiverse/pulumi-unifi/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-unifi` repo](https://github.com/filipowm/terraform-provider-unifi/issues).","compatibility":"tfbridge20","respectSchemaVersion":true,"pyproject":{"enabled":true}}},"config":{"variables":{"allowInsecure":{"type":"boolean","description":"Skip verification of TLS certificates of API requests. You may need to set this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e if you are using your local API without setting up a signed certificate. Can be specified with the `UNIFI_INSECURE` environment variable.","defaultInfo":{"environment":["UNIFI_INSECURE"]}},"apiKey":{"type":"string","description":"API Key for the user accessing the API. Can be specified with the `UNIFI_API_KEY` environment variable. Controller version 9.0.108 or later is required.","secret":true},"apiUrl":{"type":"string","description":"URL of the controller API. Can be specified with the `UNIFI_API` environment variable. You should **NOT** supply the path (`/api`), the SDK will discover the appropriate paths. This is to support UDM Pro style API paths as well as more standard controller paths.","defaultInfo":{"environment":["UNIFI_API"]}},"password":{"type":"string","description":"Password for the user accessing the API. Can be specified with the `UNIFI_PASSWORD` environment variable.","defaultInfo":{"environment":["UNIFI_PASSWORD"]},"secret":true},"site":{"type":"string","description":"The site in the Unifi controller this provider will manage. Can be specified with the `UNIFI_SITE` environment variable. Default: \u003cspan pulumi-lang-nodejs=\"`default`\" pulumi-lang-dotnet=\"`Default`\" pulumi-lang-go=\"`default`\" pulumi-lang-python=\"`default`\" pulumi-lang-yaml=\"`default`\" pulumi-lang-java=\"`default`\"\u003e`default`\u003c/span\u003e","defaultInfo":{"environment":["UNIFI_SITE"]}},"username":{"type":"string","description":"Local user name for the Unifi controller API. Can be specified with the `UNIFI_USERNAME` environment variable.","defaultInfo":{"environment":["UNIFI_USERNAME"]}}},"defaults":["apiUrl"]},"types":{"unifi:dns/getRecordsResult:getRecordsResult":{"properties":{"enabled":{"type":"boolean","description":"Whether the DNS record is enabled.\n"},"id":{"type":"string","description":"The unique identifier of this resource.\n"},"name":{"type":"string","description":"DNS record name.\n"},"port":{"type":"integer","description":"The port of the DNS record.\n"},"priority":{"type":"integer","description":"Priority of the DNS records. Present only for MX and SRV records; unused by other record types.\n"},"record":{"type":"string","description":"DNS record content.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"ttl":{"type":"integer","description":"Time To Live (TTL) of the DNS record in seconds. Setting to 0 means 'automatic'.\n"},"type":{"type":"string","description":"The type of the DNS record.\n"},"weight":{"type":"integer","description":"A numeric value indicating the relative weight of the record.\n"}},"type":"object","required":["enabled","id","name","port","priority","record","site","ttl","type","weight"],"language":{"nodejs":{"requiredInputs":[]}}},"unifi:firewall/ZonePolicyDestination:ZonePolicyDestination":{"properties":{"appCategoryIds":{"type":"array","items":{"type":"string"},"description":"List of application category IDs.\n"},"appIds":{"type":"array","items":{"type":"string"},"description":"List of application IDs.\n"},"ipGroupId":{"type":"string","description":"ID of the source IP group.\n"},"ips":{"type":"array","items":{"type":"string"},"description":"List of source IPs.\n"},"matchOppositeIps":{"type":"boolean","description":"Whether to match opposite IPs.\n"},"matchOppositePorts":{"type":"boolean","description":"Whether to match opposite ports.\n"},"port":{"type":"integer","description":"Source port.\n"},"portGroupId":{"type":"string","description":"ID of the source port group.\n"},"regions":{"type":"array","items":{"type":"string"},"description":"List of regions.\n"},"webDomains":{"type":"array","items":{"type":"string"},"description":"List of web domains.\n"},"zoneId":{"type":"string","description":"ID of the firewall zone.\n"}},"type":"object","required":["zoneId"],"language":{"nodejs":{"requiredOutputs":["matchOppositeIps","matchOppositePorts","zoneId"]}}},"unifi:firewall/ZonePolicySchedule:ZonePolicySchedule":{"properties":{"date":{"type":"string","description":"Date for the schedule.\n"},"dateEnd":{"type":"string","description":"End date for the schedule.\n"},"dateStart":{"type":"string","description":"Start date for the schedule.\n"},"mode":{"type":"string","description":"Schedule mode. Valid values are `ALWAYS`, `EVERY_DAY`, `EVERY_WEEK`, `ONE_TIME_ONLY`, or `CUSTOM`.\n"},"repeatOnDays":{"type":"array","items":{"type":"string"},"description":"Days of the week when schedule repeats. Valid values include \u003cspan pulumi-lang-nodejs=\"`mon`\" pulumi-lang-dotnet=\"`Mon`\" pulumi-lang-go=\"`mon`\" pulumi-lang-python=\"`mon`\" pulumi-lang-yaml=\"`mon`\" pulumi-lang-java=\"`mon`\"\u003e`mon`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tue`\" pulumi-lang-dotnet=\"`Tue`\" pulumi-lang-go=\"`tue`\" pulumi-lang-python=\"`tue`\" pulumi-lang-yaml=\"`tue`\" pulumi-lang-java=\"`tue`\"\u003e`tue`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`wed`\" pulumi-lang-dotnet=\"`Wed`\" pulumi-lang-go=\"`wed`\" pulumi-lang-python=\"`wed`\" pulumi-lang-yaml=\"`wed`\" pulumi-lang-java=\"`wed`\"\u003e`wed`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`thu`\" pulumi-lang-dotnet=\"`Thu`\" pulumi-lang-go=\"`thu`\" pulumi-lang-python=\"`thu`\" pulumi-lang-yaml=\"`thu`\" pulumi-lang-java=\"`thu`\"\u003e`thu`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`fri`\" pulumi-lang-dotnet=\"`Fri`\" pulumi-lang-go=\"`fri`\" pulumi-lang-python=\"`fri`\" pulumi-lang-yaml=\"`fri`\" pulumi-lang-java=\"`fri`\"\u003e`fri`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`sat`\" pulumi-lang-dotnet=\"`Sat`\" pulumi-lang-go=\"`sat`\" pulumi-lang-python=\"`sat`\" pulumi-lang-yaml=\"`sat`\" pulumi-lang-java=\"`sat`\"\u003e`sat`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`sun`\" pulumi-lang-dotnet=\"`Sun`\" pulumi-lang-go=\"`sun`\" pulumi-lang-python=\"`sun`\" pulumi-lang-yaml=\"`sun`\" pulumi-lang-java=\"`sun`\"\u003e`sun`\u003c/span\u003e.\n"},"timeAllDay":{"type":"boolean","description":"Whether the schedule applies all day.\n"},"timeFrom":{"type":"string","description":"Schedule starting time in 24-hour format (HH:MM).\n"},"timeTo":{"type":"string","description":"Schedule ending time in 24-hour format (HH:MM).\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["mode","timeAllDay"]}}},"unifi:firewall/ZonePolicySource:ZonePolicySource":{"properties":{"clientMacs":{"type":"array","items":{"type":"string"},"description":"List of client MAC addresses.\n"},"ipGroupId":{"type":"string","description":"ID of the source IP group.\n"},"ips":{"type":"array","items":{"type":"string"},"description":"List of source IPs.\n"},"mac":{"type":"string","description":"Source MAC address.\n"},"macs":{"type":"array","items":{"type":"string"},"description":"List of MAC addresses.\n"},"matchOppositeIps":{"type":"boolean","description":"Whether to match opposite IPs.\n"},"matchOppositeNetworks":{"type":"boolean","description":"Whether to match opposite networks.\n"},"matchOppositePorts":{"type":"boolean","description":"Whether to match opposite ports.\n"},"networkIds":{"type":"array","items":{"type":"string"},"description":"List of network IDs.\n"},"port":{"type":"integer","description":"Source port.\n"},"portGroupId":{"type":"string","description":"ID of the source port group.\n"},"zoneId":{"type":"string","description":"ID of the firewall zone.\n"}},"type":"object","required":["zoneId"],"language":{"nodejs":{"requiredOutputs":["matchOppositeIps","matchOppositeNetworks","matchOppositePorts","zoneId"]}}},"unifi:index/DevicePortOverride:DevicePortOverride":{"properties":{"aggregateNumPorts":{"type":"integer","description":"The number of ports to include in a link aggregation group (LAG). Valid range: 2-8 ports. Used when:\n* Creating switch-to-switch uplinks for increased bandwidth\n* Setting up high-availability connections\n* Connecting to servers requiring more bandwidth\nNote: All ports in the LAG must be sequential and have matching configurations.\n"},"name":{"type":"string","description":"A friendly name for the port that will be displayed in the UniFi controller UI. Examples:\n  * 'Uplink to Core Switch'\n  * 'Conference Room AP'\n  * 'Server LACP Group 1'\n  * 'VoIP Phone Port'\n"},"number":{"type":"integer","description":"The physical port number on the switch to configure.\n"},"opMode":{"type":"string","description":"The operating mode of the port. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`switch`\" pulumi-lang-dotnet=\"`Switch`\" pulumi-lang-go=\"`switch`\" pulumi-lang-python=\"`switch`\" pulumi-lang-yaml=\"`switch`\" pulumi-lang-java=\"`switch`\"\u003e`switch`\u003c/span\u003e - Normal switching mode (default)\n    - Standard port operation for connecting devices\n    - Supports VLANs and all standard switching features\n  * \u003cspan pulumi-lang-nodejs=\"`mirror`\" pulumi-lang-dotnet=\"`Mirror`\" pulumi-lang-go=\"`mirror`\" pulumi-lang-python=\"`mirror`\" pulumi-lang-yaml=\"`mirror`\" pulumi-lang-java=\"`mirror`\"\u003e`mirror`\u003c/span\u003e - Port mirroring for traffic analysis\n    - Copies traffic from other ports for monitoring\n    - Useful for network troubleshooting and security\n  * \u003cspan pulumi-lang-nodejs=\"`aggregate`\" pulumi-lang-dotnet=\"`Aggregate`\" pulumi-lang-go=\"`aggregate`\" pulumi-lang-python=\"`aggregate`\" pulumi-lang-yaml=\"`aggregate`\" pulumi-lang-java=\"`aggregate`\"\u003e`aggregate`\u003c/span\u003e - Link aggregation/bonding mode\n    - Combines multiple ports for increased bandwidth\n    - Used for switch uplinks or high-bandwidth servers\n"},"poeMode":{"type":"string","description":"The Power over Ethernet (PoE) mode for the port. Valid values are:\n* \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - Automatically detect and power PoE devices (recommended)\n  - Provides power based on device negotiation\n  - Safest option for most PoE devices\n* \u003cspan pulumi-lang-nodejs=\"`pasv24`\" pulumi-lang-dotnet=\"`Pasv24`\" pulumi-lang-go=\"`pasv24`\" pulumi-lang-python=\"`pasv24`\" pulumi-lang-yaml=\"`pasv24`\" pulumi-lang-java=\"`pasv24`\"\u003e`pasv24`\u003c/span\u003e - Passive 24V PoE\n  - For older UniFi devices requiring passive 24V\n  - Use with caution to avoid damage\n* \u003cspan pulumi-lang-nodejs=\"`passthrough`\" pulumi-lang-dotnet=\"`Passthrough`\" pulumi-lang-go=\"`passthrough`\" pulumi-lang-python=\"`passthrough`\" pulumi-lang-yaml=\"`passthrough`\" pulumi-lang-java=\"`passthrough`\"\u003e`passthrough`\u003c/span\u003e - PoE passthrough mode\n  - For daisy-chaining PoE devices\n  - Available on select UniFi switches\n* \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e - Disable PoE on the port\n  - For non-PoE devices\n  - To prevent unwanted power delivery\n"},"portProfileId":{"type":"string","description":"The ID of a pre-configured port profile to apply to this port. Port profiles define settings like VLANs, PoE, and other port-specific configurations.\n"}},"type":"object","required":["number"]},"unifi:index/RadiusProfileAcctServer:RadiusProfileAcctServer":{"properties":{"ip":{"type":"string","description":"The IPv4 address of the RADIUS accounting server (e.g., '192.168.1.100'). Must be reachable from your UniFi network.\n"},"port":{"type":"integer","description":"The UDP port number where the RADIUS accounting service is listening. The standard port is 1813, but this can be changed if needed to match your server configuration.\n"},"xsecret":{"type":"string","description":"The shared secret key used to secure communication between the UniFi controller and the RADIUS server. This must match the secret configured on your RADIUS server.\n","secret":true}},"type":"object","required":["ip","xsecret"]},"unifi:index/RadiusProfileAuthServer:RadiusProfileAuthServer":{"properties":{"ip":{"type":"string","description":"The IPv4 address of the RADIUS authentication server (e.g., '192.168.1.100'). Must be reachable from your UniFi network.\n"},"port":{"type":"integer","description":"The UDP port number where the RADIUS authentication service is listening. The standard port is 1812, but this can be changed if needed to match your server configuration.\n"},"xsecret":{"type":"string","description":"The shared secret key used to secure communication between the UniFi controller and the RADIUS server. This must match the secret configured on your RADIUS server.\n","secret":true}},"type":"object","required":["ip","xsecret"]},"unifi:index/WlanSchedule:WlanSchedule":{"properties":{"dayOfWeek":{"type":"string","description":"Day of week. Valid values: \u003cspan pulumi-lang-nodejs=\"`sun`\" pulumi-lang-dotnet=\"`Sun`\" pulumi-lang-go=\"`sun`\" pulumi-lang-python=\"`sun`\" pulumi-lang-yaml=\"`sun`\" pulumi-lang-java=\"`sun`\"\u003e`sun`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`mon`\" pulumi-lang-dotnet=\"`Mon`\" pulumi-lang-go=\"`mon`\" pulumi-lang-python=\"`mon`\" pulumi-lang-yaml=\"`mon`\" pulumi-lang-java=\"`mon`\"\u003e`mon`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tue`\" pulumi-lang-dotnet=\"`Tue`\" pulumi-lang-go=\"`tue`\" pulumi-lang-python=\"`tue`\" pulumi-lang-yaml=\"`tue`\" pulumi-lang-java=\"`tue`\"\u003e`tue`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`wed`\" pulumi-lang-dotnet=\"`Wed`\" pulumi-lang-go=\"`wed`\" pulumi-lang-python=\"`wed`\" pulumi-lang-yaml=\"`wed`\" pulumi-lang-java=\"`wed`\"\u003e`wed`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`thu`\" pulumi-lang-dotnet=\"`Thu`\" pulumi-lang-go=\"`thu`\" pulumi-lang-python=\"`thu`\" pulumi-lang-yaml=\"`thu`\" pulumi-lang-java=\"`thu`\"\u003e`thu`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`fri`\" pulumi-lang-dotnet=\"`Fri`\" pulumi-lang-go=\"`fri`\" pulumi-lang-python=\"`fri`\" pulumi-lang-yaml=\"`fri`\" pulumi-lang-java=\"`fri`\"\u003e`fri`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`sat`\" pulumi-lang-dotnet=\"`Sat`\" pulumi-lang-go=\"`sat`\" pulumi-lang-python=\"`sat`\" pulumi-lang-yaml=\"`sat`\" pulumi-lang-java=\"`sat`\"\u003e`sat`\u003c/span\u003e.\n"},"duration":{"type":"integer","description":"Duration in minutes that the network should remain active.\n"},"name":{"type":"string","description":"Friendly name for this schedule block (e.g., 'Business Hours', 'Weekend Access').\n"},"startHour":{"type":"integer","description":"Start hour in 24-hour format (0-23).\n"},"startMinute":{"type":"integer","description":"Start minute (0-59).\n"}},"type":"object","required":["dayOfWeek","duration","startHour"]},"unifi:setting/GuestAccessAuthorize:GuestAccessAuthorize":{"properties":{"loginId":{"type":"string","description":"Authorize.net login ID for authentication.\n"},"transactionKey":{"type":"string","description":"Authorize.net transaction key for authentication.\n"},"useSandbox":{"type":"boolean","description":"Use sandbox mode for Authorize.net payments.\n"}},"type":"object","required":["loginId","transactionKey"],"language":{"nodejs":{"requiredOutputs":["loginId","transactionKey","useSandbox"]}}},"unifi:setting/GuestAccessFacebook:GuestAccessFacebook":{"properties":{"appId":{"type":"string","description":"Facebook application ID for authentication.\n"},"appSecret":{"type":"string","description":"Facebook application secret for authentication.\n","secret":true},"scopeEmail":{"type":"boolean","description":"Request email scope for Facebook authentication.\n"}},"type":"object","required":["appId","appSecret"],"language":{"nodejs":{"requiredOutputs":["appId","appSecret","scopeEmail"]}}},"unifi:setting/GuestAccessFacebookWifi:GuestAccessFacebookWifi":{"properties":{"blockHttps":{"type":"boolean","description":"Mode HTTPS for Facebook WiFi.\n"},"gatewayId":{"type":"string","description":"Facebook WiFi gateway ID.\n"},"gatewayName":{"type":"string","description":"Facebook WiFi gateway name.\n"},"gatewaySecret":{"type":"string","description":"Facebook WiFi gateway secret.\n","secret":true}},"type":"object","required":["gatewayId","gatewayName","gatewaySecret"],"language":{"nodejs":{"requiredOutputs":["blockHttps","gatewayId","gatewayName","gatewaySecret"]}}},"unifi:setting/GuestAccessGoogle:GuestAccessGoogle":{"properties":{"clientId":{"type":"string","description":"Google client ID for authentication.\n"},"clientSecret":{"type":"string","description":"Google client secret for authentication.\n"},"domain":{"type":"string","description":"Restrict Google authentication to specific domain.\n"},"scopeEmail":{"type":"boolean","description":"Request email scope for Google authentication.\n"}},"type":"object","required":["clientId","clientSecret"],"language":{"nodejs":{"requiredOutputs":["clientId","clientSecret","domain","scopeEmail"]}}},"unifi:setting/GuestAccessIppay:GuestAccessIppay":{"properties":{"terminalId":{"type":"string","description":"Terminal ID for IP Payments.\n","secret":true},"useSandbox":{"type":"boolean","description":"Whether to use sandbox mode for IPPay payments.\n"}},"type":"object","required":["terminalId"],"language":{"nodejs":{"requiredOutputs":["terminalId","useSandbox"]}}},"unifi:setting/GuestAccessMerchantWarrior:GuestAccessMerchantWarrior":{"properties":{"apiKey":{"type":"string","description":"MerchantWarrior API key.\n","secret":true},"apiPassphrase":{"type":"string","description":"MerchantWarrior API passphrase.\n","secret":true},"merchantUuid":{"type":"string","description":"MerchantWarrior merchant UUID.\n","secret":true},"useSandbox":{"type":"boolean","description":"Whether to use sandbox mode for MerchantWarrior payments.\n"}},"type":"object","required":["apiKey","apiPassphrase","merchantUuid"],"language":{"nodejs":{"requiredOutputs":["apiKey","apiPassphrase","merchantUuid","useSandbox"]}}},"unifi:setting/GuestAccessPaypal:GuestAccessPaypal":{"properties":{"password":{"type":"string","description":"PayPal password.\n","secret":true},"signature":{"type":"string","description":"PayPal signature.\n","secret":true},"useSandbox":{"type":"boolean","description":"Whether to use sandbox mode for PayPal payments.\n"},"username":{"type":"string","description":"PayPal username. Must be a valid email address.\n","secret":true}},"type":"object","required":["password","signature","username"],"language":{"nodejs":{"requiredOutputs":["password","signature","useSandbox","username"]}}},"unifi:setting/GuestAccessPortalCustomization:GuestAccessPortalCustomization":{"properties":{"authenticationText":{"type":"string","description":"Custom authentication text for the portal.\n"},"bgColor":{"type":"string","description":"Background color for the custom portal. Must be a valid hex color code (e.g., #FFF or #FFFFFF).\n"},"bgImageFileId":{"type":"string","description":"ID of the background image portal file. File must exist in controller, use \u003cspan pulumi-lang-nodejs=\"`unifi.port.AlFile`\" pulumi-lang-dotnet=\"`unifi.port.AlFile`\" pulumi-lang-go=\"`port.AlFile`\" pulumi-lang-python=\"`port.AlFile`\" pulumi-lang-yaml=\"`unifi.port.AlFile`\" pulumi-lang-java=\"`unifi.port.AlFile`\"\u003e`unifi.port.AlFile`\u003c/span\u003e to manage it.\n"},"bgImageTile":{"type":"boolean","description":"Tile the background image.\n"},"bgType":{"type":"string","description":"Type of portal background. Valid values are:\n"},"boxColor":{"type":"string","description":"Color of the login box in the portal. Must be a valid hex color code (e.g., #FFF or #FFFFFF).\n"},"boxLinkColor":{"type":"string","description":"Color of links in the login box. Must be a valid hex color code (e.g., #FFF or #FFFFFF).\n"},"boxOpacity":{"type":"integer","description":"Opacity of the login box (0-100).\n"},"boxRadius":{"type":"integer","description":"Border radius of the login box in pixels.\n"},"boxTextColor":{"type":"string","description":"Text color in the login box. Must be a valid hex color code (e.g., #FFF or #FFFFFF).\n"},"buttonColor":{"type":"string","description":"Button color in the portal. Must be a valid hex color code (e.g., #FFF or #FFFFFF).\n"},"buttonText":{"type":"string","description":"Custom text for the login button.\n"},"buttonTextColor":{"type":"string","description":"Button text color. Must be a valid hex color code (e.g., #FFF or #FFFFFF).\n"},"customized":{"type":"boolean","description":"Whether the portal is customized.\n"},"languages":{"type":"array","items":{"type":"string"},"description":"List of enabled languages for the portal.\n"},"linkColor":{"type":"string","description":"Color for links in the portal. Must be a valid hex color code (e.g., #FFF or #FFFFFF).\n"},"logoFileId":{"type":"string","description":"ID of the logo image portal file. File must exist in controller, use \u003cspan pulumi-lang-nodejs=\"`unifi.port.AlFile`\" pulumi-lang-dotnet=\"`unifi.port.AlFile`\" pulumi-lang-go=\"`port.AlFile`\" pulumi-lang-python=\"`port.AlFile`\" pulumi-lang-yaml=\"`unifi.port.AlFile`\" pulumi-lang-java=\"`unifi.port.AlFile`\"\u003e`unifi.port.AlFile`\u003c/span\u003e to manage it.\n"},"logoPosition":{"type":"string","description":"Position of the logo in the portal. Valid values are: left, center, right.\n"},"logoSize":{"type":"integer","description":"Size of the logo in pixels.\n"},"successText":{"type":"string","description":"Text displayed after successful authentication.\n"},"textColor":{"type":"string","description":"Main text color for the portal. Must be a valid hex color code (e.g., #FFF or #FFFFFF).\n"},"title":{"type":"string","description":"Title of the portal page.\n"},"tos":{"type":"string","description":"Terms of service text.\n"},"tosEnabled":{"type":"boolean","description":"Enable terms of service acceptance requirement.\n"},"unsplashAuthorName":{"type":"string","description":"Name of the Unsplash author for gallery background.\n"},"unsplashAuthorUsername":{"type":"string","description":"Username of the Unsplash author for gallery background.\n"},"welcomeText":{"type":"string","description":"Welcome text displayed on the portal.\n"},"welcomeTextEnabled":{"type":"boolean","description":"Enable welcome text display.\n"},"welcomeTextPosition":{"type":"string","description":"Position of the welcome text. Valid values are: \u003cspan pulumi-lang-nodejs=\"`underLogo`\" pulumi-lang-dotnet=\"`UnderLogo`\" pulumi-lang-go=\"`underLogo`\" pulumi-lang-python=\"`under_logo`\" pulumi-lang-yaml=\"`underLogo`\" pulumi-lang-java=\"`underLogo`\"\u003e`under_logo`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`aboveBoxes`\" pulumi-lang-dotnet=\"`AboveBoxes`\" pulumi-lang-go=\"`aboveBoxes`\" pulumi-lang-python=\"`above_boxes`\" pulumi-lang-yaml=\"`aboveBoxes`\" pulumi-lang-java=\"`aboveBoxes`\"\u003e`above_boxes`\u003c/span\u003e.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["authenticationText","bgColor","bgImageFileId","bgImageTile","bgType","boxColor","boxLinkColor","boxOpacity","boxRadius","boxTextColor","buttonColor","buttonText","buttonTextColor","customized","languages","linkColor","logoFileId","logoPosition","logoSize","successText","textColor","title","tos","tosEnabled","unsplashAuthorName","unsplashAuthorUsername","welcomeText","welcomeTextEnabled","welcomeTextPosition"]}}},"unifi:setting/GuestAccessQuickpay:GuestAccessQuickpay":{"properties":{"agreementId":{"type":"string","description":"QuickPay agreement ID.\n","secret":true},"apiKey":{"type":"string","description":"QuickPay API key.\n","secret":true},"merchantId":{"type":"string","description":"QuickPay merchant ID.\n","secret":true},"useSandbox":{"type":"boolean","description":"Enable sandbox mode for QuickPay payments.\n"}},"type":"object","required":["agreementId","apiKey","merchantId"],"language":{"nodejs":{"requiredOutputs":["agreementId","apiKey","merchantId","useSandbox"]}}},"unifi:setting/GuestAccessRadius:GuestAccessRadius":{"properties":{"authType":{"type":"string","description":"RADIUS authentication type. Valid values are: \u003cspan pulumi-lang-nodejs=\"`chap`\" pulumi-lang-dotnet=\"`Chap`\" pulumi-lang-go=\"`chap`\" pulumi-lang-python=\"`chap`\" pulumi-lang-yaml=\"`chap`\" pulumi-lang-java=\"`chap`\"\u003e`chap`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`mschapv2`\" pulumi-lang-dotnet=\"`Mschapv2`\" pulumi-lang-go=\"`mschapv2`\" pulumi-lang-python=\"`mschapv2`\" pulumi-lang-yaml=\"`mschapv2`\" pulumi-lang-java=\"`mschapv2`\"\u003e`mschapv2`\u003c/span\u003e.\n"},"disconnectEnabled":{"type":"boolean","description":"Enable RADIUS disconnect messages.\n"},"disconnectPort":{"type":"integer","description":"Port for RADIUS disconnect messages.\n"},"profileId":{"type":"string","description":"ID of the RADIUS profile to use.\n"}},"type":"object","required":["authType","profileId"],"language":{"nodejs":{"requiredOutputs":["authType","disconnectEnabled","disconnectPort","profileId"]}}},"unifi:setting/GuestAccessRedirect:GuestAccessRedirect":{"properties":{"toHttps":{"type":"boolean","description":"Redirect HTTP requests to HTTPS.\n"},"url":{"type":"string","description":"URL to redirect to after authentication. Must be a valid URL.\n"},"useHttps":{"type":"boolean","description":"Use HTTPS for the redirect URL.\n"}},"type":"object","required":["url"],"language":{"nodejs":{"requiredOutputs":["toHttps","url","useHttps"]}}},"unifi:setting/GuestAccessStripe:GuestAccessStripe":{"properties":{"apiKey":{"type":"string","description":"Stripe API key.\n","secret":true}},"type":"object","required":["apiKey"]},"unifi:setting/GuestAccessWechat:GuestAccessWechat":{"properties":{"appId":{"type":"string","description":"WeChat App ID for social authentication.\n"},"appSecret":{"type":"string","description":"WeChat App secret.\n","secret":true},"secretKey":{"type":"string","description":"WeChat secret key.\n","secret":true},"shopId":{"type":"string","description":"WeChat Shop ID for payments.\n"}},"type":"object","required":["appId","appSecret","secretKey"],"language":{"nodejs":{"requiredOutputs":["appId","appSecret","secretKey","shopId"]}}},"unifi:setting/IpsDnsFilter:IpsDnsFilter":{"properties":{"allowedSites":{"type":"array","items":{"type":"string"},"description":"List of allowed sites for this DNS filter. These domains will always be accessible regardless of other filtering rules. Each entry should be a valid domain name (e.g., `example.com`).\n"},"blockedSites":{"type":"array","items":{"type":"string"},"description":"List of blocked sites for this DNS filter. These domains will be blocked regardless of other filtering rules. Each entry should be a valid domain name (e.g., `example.com`).\n"},"blockedTlds":{"type":"array","items":{"type":"string"},"description":"List of blocked top-level domains (TLDs) for this DNS filter. All domains with these TLDs will be blocked. Each entry should be a valid TLD without the dot prefix (e.g., \u003cspan pulumi-lang-nodejs=\"`xyz`\" pulumi-lang-dotnet=\"`Xyz`\" pulumi-lang-go=\"`xyz`\" pulumi-lang-python=\"`xyz`\" pulumi-lang-yaml=\"`xyz`\" pulumi-lang-java=\"`xyz`\"\u003e`xyz`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e).\n"},"description":{"type":"string","description":"Description of the DNS filter. This is used for documentation purposes only and does not affect functionality.\n"},"filter":{"type":"string","description":"Filter type that determines the predefined filtering level. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e - No predefined filtering\n  * \u003cspan pulumi-lang-nodejs=\"`work`\" pulumi-lang-dotnet=\"`Work`\" pulumi-lang-go=\"`work`\" pulumi-lang-python=\"`work`\" pulumi-lang-yaml=\"`work`\" pulumi-lang-java=\"`work`\"\u003e`work`\u003c/span\u003e - Work-appropriate filtering that blocks adult content\n  * \u003cspan pulumi-lang-nodejs=\"`family`\" pulumi-lang-dotnet=\"`Family`\" pulumi-lang-go=\"`family`\" pulumi-lang-python=\"`family`\" pulumi-lang-yaml=\"`family`\" pulumi-lang-java=\"`family`\"\u003e`family`\u003c/span\u003e - Family-friendly filtering that blocks adult content and other inappropriate sites\n"},"name":{"type":"string","description":"Name of the DNS filter. This is used to identify the filter in the UniFi interface.\n"},"networkId":{"type":"string","description":"Network ID this filter applies to. This should be a valid network ID from your UniFi configuration.\n"}},"type":"object","required":["filter","name","networkId"],"language":{"nodejs":{"requiredOutputs":["description","filter","name","networkId"]}}},"unifi:setting/IpsHoneypot:IpsHoneypot":{"properties":{"ipAddress":{"type":"string","description":"IP address for the honeypot. This should be an unused IPv4 address within your network range that will be used as a decoy system.\n"},"networkId":{"type":"string","description":"Network ID for the honeypot. This should be a valid network ID from your UniFi configuration where the honeypot will be deployed.\n"}},"type":"object","required":["ipAddress","networkId"]},"unifi:setting/IpsSuppression:IpsSuppression":{"properties":{"alerts":{"type":"array","items":{"$ref":"#/types/unifi:setting/IpsSuppressionAlert:IpsSuppressionAlert"},"description":"Alert suppressions. Each entry defines a specific IPS alert that should be suppressed or tracked differently from the default behavior.\n"},"whitelists":{"type":"array","items":{"$ref":"#/types/unifi:setting/IpsSuppressionWhitelist:IpsSuppressionWhitelist"},"description":"Whitelist configuration. Each entry defines traffic that should never trigger IPS alerts, regardless of other rules.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["whitelists"]}}},"unifi:setting/IpsSuppressionAlert:IpsSuppressionAlert":{"properties":{"category":{"type":"string","description":"Category of the alert to suppress. This should match one of the categories from the\u003cspan pulumi-lang-nodejs=\" enabledCategories \" pulumi-lang-dotnet=\" EnabledCategories \" pulumi-lang-go=\" enabledCategories \" pulumi-lang-python=\" enabled_categories \" pulumi-lang-yaml=\" enabledCategories \" pulumi-lang-java=\" enabledCategories \"\u003e enabled_categories \u003c/span\u003elist.\n"},"signature":{"type":"string","description":"Signature name of the alert to suppress. This is a human-readable identifier for the alert in the IPS ruleset.\n"},"trackings":{"type":"array","items":{"$ref":"#/types/unifi:setting/IpsSuppressionAlertTracking:IpsSuppressionAlertTracking"},"description":"Tracking configuration for the alert. This defines how the system should track occurrences of this alert based on source/destination addresses.\n"},"type":{"type":"string","description":"Type of suppression. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e - Suppress all occurrences of this alert\n  * \u003cspan pulumi-lang-nodejs=\"`track`\" pulumi-lang-dotnet=\"`Track`\" pulumi-lang-go=\"`track`\" pulumi-lang-python=\"`track`\" pulumi-lang-yaml=\"`track`\" pulumi-lang-java=\"`track`\"\u003e`track`\u003c/span\u003e - Only track this alert according to the tracking configuration\n"}},"type":"object","required":["category","signature","type"],"language":{"nodejs":{"requiredOutputs":["category","signature","trackings","type"]}}},"unifi:setting/IpsSuppressionAlertTracking:IpsSuppressionAlertTracking":{"properties":{"direction":{"type":"string","description":"Direction for tracking. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`src`\" pulumi-lang-dotnet=\"`Src`\" pulumi-lang-go=\"`src`\" pulumi-lang-python=\"`src`\" pulumi-lang-yaml=\"`src`\" pulumi-lang-java=\"`src`\"\u003e`src`\u003c/span\u003e - Track by source address\n  * \u003cspan pulumi-lang-nodejs=\"`dest`\" pulumi-lang-dotnet=\"`Dest`\" pulumi-lang-go=\"`dest`\" pulumi-lang-python=\"`dest`\" pulumi-lang-yaml=\"`dest`\" pulumi-lang-java=\"`dest`\"\u003e`dest`\u003c/span\u003e - Track by destination address\n  * \u003cspan pulumi-lang-nodejs=\"`both`\" pulumi-lang-dotnet=\"`Both`\" pulumi-lang-go=\"`both`\" pulumi-lang-python=\"`both`\" pulumi-lang-yaml=\"`both`\" pulumi-lang-java=\"`both`\"\u003e`both`\u003c/span\u003e - Track by both source and destination addresses\n"},"mode":{"type":"string","description":"Mode for tracking. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e - Track by individual IP address\n  * \u003cspan pulumi-lang-nodejs=\"`subnet`\" pulumi-lang-dotnet=\"`Subnet`\" pulumi-lang-go=\"`subnet`\" pulumi-lang-python=\"`subnet`\" pulumi-lang-yaml=\"`subnet`\" pulumi-lang-java=\"`subnet`\"\u003e`subnet`\u003c/span\u003e - Track by subnet\n  * \u003cspan pulumi-lang-nodejs=\"`network`\" pulumi-lang-dotnet=\"`Network`\" pulumi-lang-go=\"`network`\" pulumi-lang-python=\"`network`\" pulumi-lang-yaml=\"`network`\" pulumi-lang-java=\"`network`\"\u003e`network`\u003c/span\u003e - Track by network ID\n"},"value":{"type":"string","description":"Value for tracking. The meaning depends on the mode:\n  * For \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e mode: An IP address (e.g., `192.168.1.100`)\n  * For \u003cspan pulumi-lang-nodejs=\"`subnet`\" pulumi-lang-dotnet=\"`Subnet`\" pulumi-lang-go=\"`subnet`\" pulumi-lang-python=\"`subnet`\" pulumi-lang-yaml=\"`subnet`\" pulumi-lang-java=\"`subnet`\"\u003e`subnet`\u003c/span\u003e mode: A CIDR notation subnet (e.g., `192.168.1.0/24`)\n  * For \u003cspan pulumi-lang-nodejs=\"`network`\" pulumi-lang-dotnet=\"`Network`\" pulumi-lang-go=\"`network`\" pulumi-lang-python=\"`network`\" pulumi-lang-yaml=\"`network`\" pulumi-lang-java=\"`network`\"\u003e`network`\u003c/span\u003e mode: A network ID from your UniFi configuration\n"}},"type":"object","required":["direction","mode","value"]},"unifi:setting/IpsSuppressionWhitelist:IpsSuppressionWhitelist":{"properties":{"direction":{"type":"string","description":"Direction for whitelist. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`src`\" pulumi-lang-dotnet=\"`Src`\" pulumi-lang-go=\"`src`\" pulumi-lang-python=\"`src`\" pulumi-lang-yaml=\"`src`\" pulumi-lang-java=\"`src`\"\u003e`src`\u003c/span\u003e - Whitelist by source address\n  * \u003cspan pulumi-lang-nodejs=\"`dst`\" pulumi-lang-dotnet=\"`Dst`\" pulumi-lang-go=\"`dst`\" pulumi-lang-python=\"`dst`\" pulumi-lang-yaml=\"`dst`\" pulumi-lang-java=\"`dst`\"\u003e`dst`\u003c/span\u003e - Whitelist by destination address\n  * \u003cspan pulumi-lang-nodejs=\"`both`\" pulumi-lang-dotnet=\"`Both`\" pulumi-lang-go=\"`both`\" pulumi-lang-python=\"`both`\" pulumi-lang-yaml=\"`both`\" pulumi-lang-java=\"`both`\"\u003e`both`\u003c/span\u003e - Whitelist by both source and destination addresses\n"},"mode":{"type":"string","description":"Mode for whitelist. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e - Whitelist by individual IP address\n  * \u003cspan pulumi-lang-nodejs=\"`subnet`\" pulumi-lang-dotnet=\"`Subnet`\" pulumi-lang-go=\"`subnet`\" pulumi-lang-python=\"`subnet`\" pulumi-lang-yaml=\"`subnet`\" pulumi-lang-java=\"`subnet`\"\u003e`subnet`\u003c/span\u003e - Whitelist by subnet\n  * \u003cspan pulumi-lang-nodejs=\"`network`\" pulumi-lang-dotnet=\"`Network`\" pulumi-lang-go=\"`network`\" pulumi-lang-python=\"`network`\" pulumi-lang-yaml=\"`network`\" pulumi-lang-java=\"`network`\"\u003e`network`\u003c/span\u003e - Whitelist by network ID\n"},"value":{"type":"string","description":"Value for whitelist. The meaning depends on the mode:\n  * For \u003cspan pulumi-lang-nodejs=\"`ip`\" pulumi-lang-dotnet=\"`Ip`\" pulumi-lang-go=\"`ip`\" pulumi-lang-python=\"`ip`\" pulumi-lang-yaml=\"`ip`\" pulumi-lang-java=\"`ip`\"\u003e`ip`\u003c/span\u003e mode: An IP address (e.g., `192.168.1.100`)\n  * For \u003cspan pulumi-lang-nodejs=\"`subnet`\" pulumi-lang-dotnet=\"`Subnet`\" pulumi-lang-go=\"`subnet`\" pulumi-lang-python=\"`subnet`\" pulumi-lang-yaml=\"`subnet`\" pulumi-lang-java=\"`subnet`\"\u003e`subnet`\u003c/span\u003e mode: A CIDR notation subnet (e.g., `192.168.1.0/24`)\n  * For \u003cspan pulumi-lang-nodejs=\"`network`\" pulumi-lang-dotnet=\"`Network`\" pulumi-lang-go=\"`network`\" pulumi-lang-python=\"`network`\" pulumi-lang-yaml=\"`network`\" pulumi-lang-java=\"`network`\"\u003e`network`\u003c/span\u003e mode: A network ID from your UniFi configuration\n"}},"type":"object","required":["direction","mode","value"]},"unifi:setting/MgmtSshKey:MgmtSshKey":{"properties":{"comment":{"type":"string","description":"An optional comment to provide additional context about the key (e.g., 'generated on 2024-01-01' or 'expires 2025-12-31').\n"},"key":{"type":"string","description":"The public key string. This is the content that would normally go in an\u003cspan pulumi-lang-nodejs=\" authorizedKeys \" pulumi-lang-dotnet=\" AuthorizedKeys \" pulumi-lang-go=\" authorizedKeys \" pulumi-lang-python=\" authorized_keys \" pulumi-lang-yaml=\" authorizedKeys \" pulumi-lang-java=\" authorizedKeys \"\u003e authorized_keys \u003c/span\u003efile, excluding the type and comment (e.g., 'AAAAB3NzaC1yc2EA...').\n"},"name":{"type":"string","description":"A friendly name for the SSH key to help identify its owner or purpose (e.g., 'admin-laptop' or 'backup-server').\n"},"type":{"type":"string","description":"The type of SSH key. Common values include:\n  * `ssh-rsa` - RSA key (most common)\n  * `ssh-ed25519` - Ed25519 key (more secure)\n  * `ecdsa-sha2-nistp256` - ECDSA key\n"}},"type":"object","required":["name","type"]},"unifi:setting/USGDhcpRelay:USGDhcpRelay":{"properties":{"agentsPackets":{"type":"string","description":"Specifies how to handle DHCP relay agent information in packets. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`append`\" pulumi-lang-dotnet=\"`Append`\" pulumi-lang-go=\"`append`\" pulumi-lang-python=\"`append`\" pulumi-lang-yaml=\"`append`\" pulumi-lang-java=\"`append`\"\u003e`append`\u003c/span\u003e - Add relay agent information to packets that may already contain it\n  * \u003cspan pulumi-lang-nodejs=\"`discard`\" pulumi-lang-dotnet=\"`Discard`\" pulumi-lang-go=\"`discard`\" pulumi-lang-python=\"`discard`\" pulumi-lang-yaml=\"`discard`\" pulumi-lang-java=\"`discard`\"\u003e`discard`\u003c/span\u003e - Drop packets that already contain relay agent information\n  * \u003cspan pulumi-lang-nodejs=\"`forward`\" pulumi-lang-dotnet=\"`Forward`\" pulumi-lang-go=\"`forward`\" pulumi-lang-python=\"`forward`\" pulumi-lang-yaml=\"`forward`\" pulumi-lang-java=\"`forward`\"\u003e`forward`\u003c/span\u003e - Forward packets regardless of relay agent information\n  * \u003cspan pulumi-lang-nodejs=\"`replace`\" pulumi-lang-dotnet=\"`Replace`\" pulumi-lang-go=\"`replace`\" pulumi-lang-python=\"`replace`\" pulumi-lang-yaml=\"`replace`\" pulumi-lang-java=\"`replace`\"\u003e`replace`\u003c/span\u003e - Replace existing relay agent information with the gateway's information\n"},"hopCount":{"type":"integer","description":"Maximum number of relay agents that can forward the DHCP packet before it is discarded. This prevents DHCP packets from being forwarded indefinitely in complex network topologies. Valid values range from 1 to 255, with lower values recommended for simpler networks.\n"},"maxSize":{"type":"integer","description":"Maximum size (in bytes) of DHCP relay packets that will be forwarded. Packets exceeding this size will be truncated or dropped. Valid values range from 64 to 1400 bytes. The default is typically sufficient for most DHCP implementations, but may need adjustment if using extensive DHCP options or vendor-specific information.\n"},"port":{"type":"integer","description":"UDP port number for the DHCP relay service to listen on. The standard DHCP server port is 67, but this can be customized if needed for specific network configurations. Valid values range from 1 to 65535. Ensure this doesn't conflict with other services running on the gateway.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["agentsPackets","hopCount","maxSize","port"]}}},"unifi:setting/USGDnsVerification:USGDnsVerification":{"properties":{"domain":{"type":"string","description":"The domain name to use for DNS verification tests. The gateway will query this domain when testing DNS server responses. This should be a reliable domain that is unlikely to change frequently. Required when \u003cspan pulumi-lang-nodejs=\"`settingPreference`\" pulumi-lang-dotnet=\"`SettingPreference`\" pulumi-lang-go=\"`settingPreference`\" pulumi-lang-python=\"`setting_preference`\" pulumi-lang-yaml=\"`settingPreference`\" pulumi-lang-java=\"`settingPreference`\"\u003e`setting_preference`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e.\n"},"primaryDnsServer":{"type":"string","description":"The IP address of the primary trusted DNS server to use for verification. DNS responses will be compared against responses from this server to detect potential DNS spoofing. Required when \u003cspan pulumi-lang-nodejs=\"`settingPreference`\" pulumi-lang-dotnet=\"`SettingPreference`\" pulumi-lang-go=\"`settingPreference`\" pulumi-lang-python=\"`setting_preference`\" pulumi-lang-yaml=\"`settingPreference`\" pulumi-lang-java=\"`settingPreference`\"\u003e`setting_preference`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e. Must be a valid IPv4 address.\n"},"secondaryDnsServer":{"type":"string","description":"The IP address of the secondary trusted DNS server to use for verification. This server will be used if the primary server is unavailable. Optional even when \u003cspan pulumi-lang-nodejs=\"`settingPreference`\" pulumi-lang-dotnet=\"`SettingPreference`\" pulumi-lang-go=\"`settingPreference`\" pulumi-lang-python=\"`setting_preference`\" pulumi-lang-yaml=\"`settingPreference`\" pulumi-lang-java=\"`settingPreference`\"\u003e`setting_preference`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e. Must be a valid IPv4 address if specified.\n"},"settingPreference":{"type":"string","description":"Determines how DNS verification servers are configured. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - The gateway will automatically select DNS servers for verification\n  * \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e - Use the manually specified \u003cspan pulumi-lang-nodejs=\"`primaryDnsServer`\" pulumi-lang-dotnet=\"`PrimaryDnsServer`\" pulumi-lang-go=\"`primaryDnsServer`\" pulumi-lang-python=\"`primary_dns_server`\" pulumi-lang-yaml=\"`primaryDnsServer`\" pulumi-lang-java=\"`primaryDnsServer`\"\u003e`primary_dns_server`\u003c/span\u003e and optionally \u003cspan pulumi-lang-nodejs=\"`secondaryDnsServer`\" pulumi-lang-dotnet=\"`SecondaryDnsServer`\" pulumi-lang-go=\"`secondaryDnsServer`\" pulumi-lang-python=\"`secondary_dns_server`\" pulumi-lang-yaml=\"`secondaryDnsServer`\" pulumi-lang-java=\"`secondaryDnsServer`\"\u003e`secondary_dns_server`\u003c/span\u003e\n\nWhen set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e, you must also specify \u003cspan pulumi-lang-nodejs=\"`primaryDnsServer`\" pulumi-lang-dotnet=\"`PrimaryDnsServer`\" pulumi-lang-go=\"`primaryDnsServer`\" pulumi-lang-python=\"`primary_dns_server`\" pulumi-lang-yaml=\"`primaryDnsServer`\" pulumi-lang-java=\"`primaryDnsServer`\"\u003e`primary_dns_server`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`domain`\" pulumi-lang-dotnet=\"`Domain`\" pulumi-lang-go=\"`domain`\" pulumi-lang-python=\"`domain`\" pulumi-lang-yaml=\"`domain`\" pulumi-lang-java=\"`domain`\"\u003e`domain`\u003c/span\u003e values.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["domain","primaryDnsServer","secondaryDnsServer","settingPreference"]}}},"unifi:setting/USGGeoIpFiltering:USGGeoIpFiltering":{"properties":{"countries":{"type":"array","items":{"type":"string"},"description":"List of two-letter ISO 3166-1 alpha-2 country codes to block or allow, depending on the \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e setting. Must contain at least one country code when geo IP filtering is enabled. Country codes are case-insensitive but are typically written in uppercase.\n\nExamples:\n  * `['US', 'CA', 'MX']` - United States, Canada, and Mexico\n  * `['CN', 'RU', 'IR']` - China, Russia, and Iran\n  * `['GB', 'DE', 'FR']` - United Kingdom, Germany, and France\n"},"mode":{"type":"string","description":"Specifies whether the selected countries should be blocked or allowed. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`block`\" pulumi-lang-dotnet=\"`Block`\" pulumi-lang-go=\"`block`\" pulumi-lang-python=\"`block`\" pulumi-lang-yaml=\"`block`\" pulumi-lang-java=\"`block`\"\u003e`block`\u003c/span\u003e (default) - Traffic from the specified countries will be blocked, while traffic from all other countries will be allowed\n  * \u003cspan pulumi-lang-nodejs=\"`allow`\" pulumi-lang-dotnet=\"`Allow`\" pulumi-lang-go=\"`allow`\" pulumi-lang-python=\"`allow`\" pulumi-lang-yaml=\"`allow`\" pulumi-lang-java=\"`allow`\"\u003e`allow`\u003c/span\u003e - Only traffic from the specified countries will be allowed, while traffic from all other countries will be blocked\n\nThis setting effectively determines whether the \u003cspan pulumi-lang-nodejs=\"`countries`\" pulumi-lang-dotnet=\"`Countries`\" pulumi-lang-go=\"`countries`\" pulumi-lang-python=\"`countries`\" pulumi-lang-yaml=\"`countries`\" pulumi-lang-java=\"`countries`\"\u003e`countries`\u003c/span\u003e list functions as a blocklist or an allowlist.\n"},"trafficDirection":{"type":"string","description":"Specifies which traffic direction the geo IP filtering applies to. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`both`\" pulumi-lang-dotnet=\"`Both`\" pulumi-lang-go=\"`both`\" pulumi-lang-python=\"`both`\" pulumi-lang-yaml=\"`both`\" pulumi-lang-java=\"`both`\"\u003e`both`\u003c/span\u003e (default) - Filters traffic in both directions (incoming and outgoing)\n  * \u003cspan pulumi-lang-nodejs=\"`ingress`\" pulumi-lang-dotnet=\"`Ingress`\" pulumi-lang-go=\"`ingress`\" pulumi-lang-python=\"`ingress`\" pulumi-lang-yaml=\"`ingress`\" pulumi-lang-java=\"`ingress`\"\u003e`ingress`\u003c/span\u003e - Filters only incoming traffic (from WAN to LAN)\n  * \u003cspan pulumi-lang-nodejs=\"`egress`\" pulumi-lang-dotnet=\"`Egress`\" pulumi-lang-go=\"`egress`\" pulumi-lang-python=\"`egress`\" pulumi-lang-yaml=\"`egress`\" pulumi-lang-java=\"`egress`\"\u003e`egress`\u003c/span\u003e - Filters only outgoing traffic (from LAN to WAN)\n\nThis setting is useful for creating more granular filtering policies. For example, you might want to block incoming traffic from certain countries while still allowing outgoing connections to those same countries.\n"}},"type":"object","required":["countries"],"language":{"nodejs":{"requiredOutputs":["countries","mode","trafficDirection"]}}},"unifi:setting/USGTcpTimeouts:USGTcpTimeouts":{"properties":{"closeTimeout":{"type":"integer","description":"Timeout (in seconds) for TCP connections in the CLOSE state. The CLOSE state occurs when a connection is being terminated but may still have packets in transit. Lower values reclaim resources more quickly, while higher values ensure all packets are properly processed during connection termination.\n"},"closeWaitTimeout":{"type":"integer","description":"Timeout (in seconds) for TCP connections in the CLOSE_WAIT state. The CLOSE_WAIT state occurs when the remote end has initiated connection termination, but the local application hasn't closed the connection yet. This timeout prevents resources from being held indefinitely if a local application fails to properly close its connection.\n"},"establishedTimeout":{"type":"integer","description":"Timeout (in seconds) for TCP connections in the ESTABLISHED state. This is the most important TCP timeout as it determines how long idle but established connections are maintained in the connection tracking table. Higher values (e.g., 86400 = 24 hours) are suitable for long-lived connections, while lower values conserve resources but may cause issues with applications that maintain idle connections.\n"},"finWaitTimeout":{"type":"integer","description":"Timeout (in seconds) for TCP connections in the FIN_WAIT state. The FIN_WAIT states occur during the normal TCP connection termination process after a FIN packet has been sent. This timeout prevents resources from being held if the connection termination process doesn't complete properly.\n"},"lastAckTimeout":{"type":"integer","description":"Timeout (in seconds) for TCP connections in the LAST_ACK state. The LAST_ACK state occurs during connection termination when the remote end has sent a FIN, the local end has responded with a FIN and ACK, and is waiting for the final ACK from the remote end to complete the connection termination.\n"},"synRecvTimeout":{"type":"integer","description":"Timeout (in seconds) for TCP connections in the SYN_RECV state. This state occurs during connection establishment after receiving a SYN packet and sending a SYN-ACK, but before receiving the final ACK to complete the three-way handshake. A lower timeout helps mitigate SYN flood attacks by releasing resources for incomplete connections more quickly.\n"},"synSentTimeout":{"type":"integer","description":"Timeout (in seconds) for TCP connections in the SYN_SENT state. This state occurs during connection establishment after sending a SYN packet but before receiving a SYN-ACK response. This timeout determines how long the system will wait for a response to connection attempts before giving up.\n"},"timeWaitTimeout":{"type":"integer","description":"Timeout (in seconds) for TCP connections in the TIME_WAIT state. The TIME_WAIT state occurs after a connection has been closed but is maintained to ensure any delayed packets are properly handled. The standard recommendation is 2 minutes (120 seconds), but can be reduced in high-connection environments to free resources more quickly at the risk of potential connection issues if delayed packets arrive.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["closeTimeout","closeWaitTimeout","establishedTimeout","finWaitTimeout","lastAckTimeout","synRecvTimeout","synSentTimeout","timeWaitTimeout"]}}},"unifi:setting/USGUpnp:USGUpnp":{"properties":{"natPmpEnabled":{"type":"boolean","description":"Enable NAT-PMP (NAT Port Mapping Protocol) support alongside UPNP. NAT-PMP is Apple's alternative to UPNP, providing similar automatic port mapping capabilities. When enabled, Apple devices like Macs, iPhones, and iPads can automatically configure port forwarding for services like AirPlay, FaceTime, iMessage, and other Apple services. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"secureMode":{"type":"boolean","description":"Enable secure mode for UPNP. In secure mode, the gateway only forwards ports to the device that specifically requested them, enhancing security. This prevents malicious applications from redirecting ports to different devices than intended. It's strongly recommended to enable this setting when using UPNP to minimize security risks. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"wanInterface":{"type":"string","description":"Specify which WAN interface to use for UPNP service. Valid values are:\n  * `WAN` (default) - Use the primary WAN interface for UPNP port forwarding\n  * `WAN2` - Use the secondary WAN interface for UPNP port forwarding (if available)\n\nThis setting is particularly relevant for dual-WAN setups where you may want to direct UPNP traffic through a specific WAN connection. If your gateway only has a single WAN interface, use the default `WAN` setting.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["natPmpEnabled","secureMode","wanInterface"]}}}},"provider":{"description":"The provider type for the unifi package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n","properties":{"allowInsecure":{"type":"boolean","description":"Skip verification of TLS certificates of API requests. You may need to set this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e if you are using your local API without setting up a signed certificate. Can be specified with the `UNIFI_INSECURE` environment variable."},"apiKey":{"type":"string","description":"API Key for the user accessing the API. Can be specified with the `UNIFI_API_KEY` environment variable. Controller version 9.0.108 or later is required.","secret":true},"apiUrl":{"type":"string","description":"URL of the controller API. Can be specified with the `UNIFI_API` environment variable. You should **NOT** supply the path (`/api`), the SDK will discover the appropriate paths. This is to support UDM Pro style API paths as well as more standard controller paths."},"password":{"type":"string","description":"Password for the user accessing the API. Can be specified with the `UNIFI_PASSWORD` environment variable.","secret":true},"site":{"type":"string","description":"The site in the Unifi controller this provider will manage. Can be specified with the `UNIFI_SITE` environment variable. Default: \u003cspan pulumi-lang-nodejs=\"`default`\" pulumi-lang-dotnet=\"`Default`\" pulumi-lang-go=\"`default`\" pulumi-lang-python=\"`default`\" pulumi-lang-yaml=\"`default`\" pulumi-lang-java=\"`default`\"\u003e`default`\u003c/span\u003e"},"username":{"type":"string","description":"Local user name for the Unifi controller API. Can be specified with the `UNIFI_USERNAME` environment variable."}},"inputProperties":{"allowInsecure":{"type":"boolean","description":"Skip verification of TLS certificates of API requests. You may need to set this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e if you are using your local API without setting up a signed certificate. Can be specified with the `UNIFI_INSECURE` environment variable.","defaultInfo":{"environment":["UNIFI_INSECURE"]}},"apiKey":{"type":"string","description":"API Key for the user accessing the API. Can be specified with the `UNIFI_API_KEY` environment variable. Controller version 9.0.108 or later is required.","secret":true},"apiUrl":{"type":"string","description":"URL of the controller API. Can be specified with the `UNIFI_API` environment variable. You should **NOT** supply the path (`/api`), the SDK will discover the appropriate paths. This is to support UDM Pro style API paths as well as more standard controller paths.","defaultInfo":{"environment":["UNIFI_API"]}},"password":{"type":"string","description":"Password for the user accessing the API. Can be specified with the `UNIFI_PASSWORD` environment variable.","defaultInfo":{"environment":["UNIFI_PASSWORD"]},"secret":true},"site":{"type":"string","description":"The site in the Unifi controller this provider will manage. Can be specified with the `UNIFI_SITE` environment variable. Default: \u003cspan pulumi-lang-nodejs=\"`default`\" pulumi-lang-dotnet=\"`Default`\" pulumi-lang-go=\"`default`\" pulumi-lang-python=\"`default`\" pulumi-lang-yaml=\"`default`\" pulumi-lang-java=\"`default`\"\u003e`default`\u003c/span\u003e","defaultInfo":{"environment":["UNIFI_SITE"]}},"username":{"type":"string","description":"Local user name for the Unifi controller API. Can be specified with the `UNIFI_USERNAME` environment variable.","defaultInfo":{"environment":["UNIFI_USERNAME"]}}},"methods":{"terraformConfig":"pulumi:providers:unifi/terraformConfig"}},"resources":{"unifi:dns/record:Record":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.dns.Record`\" pulumi-lang-dotnet=\"`unifi.dns.Record`\" pulumi-lang-go=\"`dns.Record`\" pulumi-lang-python=\"`dns.Record`\" pulumi-lang-yaml=\"`unifi.dns.Record`\" pulumi-lang-java=\"`unifi.dns.Record`\"\u003e`unifi.dns.Record`\u003c/span\u003e resource manages DNS records in the UniFi controller's DNS server.\n\nThis resource allows you to configure various types of DNS records for local name resolution. Common use cases include:\n  * Creating A records for local servers and devices\n  * Setting up CNAME aliases for internal services\n  * Configuring MX records for local mail servers\n  * Adding TXT records for service verification\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst aRecord = new unifi.dns.Record(\"a_record\", {\n    name: \"example.mydomain.com\",\n    type: \"A\",\n    value: \"192.168.1.190\",\n});\nconst cnameRecord = new unifi.dns.Record(\"cname_record\", {\n    name: \"example.mydomain.com\",\n    type: \"CNAME\",\n    value: \"example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\na_record = unifi.dns.Record(\"a_record\",\n    name=\"example.mydomain.com\",\n    type=\"A\",\n    value=\"192.168.1.190\")\ncname_record = unifi.dns.Record(\"cname_record\",\n    name=\"example.mydomain.com\",\n    type=\"CNAME\",\n    value=\"example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var aRecord = new Unifi.Dns.Record(\"a_record\", new()\n    {\n        Name = \"example.mydomain.com\",\n        Type = \"A\",\n        Value = \"192.168.1.190\",\n    });\n\n    var cnameRecord = new Unifi.Dns.Record(\"cname_record\", new()\n    {\n        Name = \"example.mydomain.com\",\n        Type = \"CNAME\",\n        Value = \"example.com\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/dns\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dns.NewRecord(ctx, \"a_record\", \u0026dns.RecordArgs{\n\t\t\tName:  pulumi.String(\"example.mydomain.com\"),\n\t\t\tType:  pulumi.String(\"A\"),\n\t\t\tValue: pulumi.String(\"192.168.1.190\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dns.NewRecord(ctx, \"cname_record\", \u0026dns.RecordArgs{\n\t\t\tName:  pulumi.String(\"example.mydomain.com\"),\n\t\t\tType:  pulumi.String(\"CNAME\"),\n\t\t\tValue: pulumi.String(\"example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.dns.Record;\nimport com.pulumiverse.unifi.dns.RecordArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var aRecord = new Record(\"aRecord\", RecordArgs.builder()\n            .name(\"example.mydomain.com\")\n            .type(\"A\")\n            .value(\"192.168.1.190\")\n            .build());\n\n        var cnameRecord = new Record(\"cnameRecord\", RecordArgs.builder()\n            .name(\"example.mydomain.com\")\n            .type(\"CNAME\")\n            .value(\"example.com\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  aRecord:\n    type: unifi:dns:Record\n    name: a_record\n    properties:\n      name: example.mydomain.com\n      type: A\n      value: 192.168.1.190\n  cnameRecord:\n    type: unifi:dns:Record\n    name: cname_record\n    properties:\n      name: example.mydomain.com\n      type: CNAME\n      value: example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"enabled":{"type":"boolean","description":"Whether the DNS record is active. Defaults to true. Set to false to temporarily disable resolution without removing the record."},"name":{"type":"string","description":"DNS record name."},"port":{"type":"integer","description":"The port number for SRV records. Valid values are between 1 and 65535. Only used with SRV records."},"priority":{"type":"integer","description":"Priority value for MX and SRV records. Lower values indicate higher priority. Required for MX and SRV records, ignored for other types."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"ttl":{"type":"integer","description":"Time To Live (TTL) in seconds, determines how long DNS resolvers should cache this record. Set to 0 for automatic TTL. Common values: 300 (5 minutes), 3600 (1 hour), 86400 (1 day)."},"type":{"type":"string","description":"The type of DNS record. Valid values are:\n  * `A` - Maps a hostname to IPv4 address\n  * `AAAA` - Maps a hostname to IPv6 address\n  * `CNAME` - Creates an alias for another domain name\n  * `MX` - Specifies mail servers for the domain\n  * `NS` - Delegates a subdomain to a set of name servers\n  * `PTR` - Creates a pointer to a canonical name (reverse DNS)\n  * `SOA` - Specifies authoritative information about the domain\n  * `SRV` - Specifies location of services (hostname and port)\n  * `TXT` - Holds descriptive text"},"value":{"type":"string","description":"The content of the DNS record. The expected value depends on the record type:\n  * For A records: IPv4 address (e.g., '192.168.1.10')\n  * For AAAA records: IPv6 address\n  * For CNAME records: Canonical name (e.g., 'server1.example.com')\n  * For MX records: Mail server hostname\n  * For TXT records: Text content (e.g., 'v=spf1 include:_spf.example.com ~all')"},"weight":{"type":"integer","description":"A relative weight for SRV records with the same priority. Higher values get proportionally more traffic. Only used with SRV records."}},"required":["enabled","name","port","priority","value","site","ttl","type","weight"],"inputProperties":{"enabled":{"type":"boolean","description":"Whether the DNS record is active. Defaults to true. Set to false to temporarily disable resolution without removing the record."},"name":{"type":"string","description":"DNS record name."},"port":{"type":"integer","description":"The port number for SRV records. Valid values are between 1 and 65535. Only used with SRV records."},"priority":{"type":"integer","description":"Priority value for MX and SRV records. Lower values indicate higher priority. Required for MX and SRV records, ignored for other types."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"ttl":{"type":"integer","description":"Time To Live (TTL) in seconds, determines how long DNS resolvers should cache this record. Set to 0 for automatic TTL. Common values: 300 (5 minutes), 3600 (1 hour), 86400 (1 day)."},"type":{"type":"string","description":"The type of DNS record. Valid values are:\n  * `A` - Maps a hostname to IPv4 address\n  * `AAAA` - Maps a hostname to IPv6 address\n  * `CNAME` - Creates an alias for another domain name\n  * `MX` - Specifies mail servers for the domain\n  * `NS` - Delegates a subdomain to a set of name servers\n  * `PTR` - Creates a pointer to a canonical name (reverse DNS)\n  * `SOA` - Specifies authoritative information about the domain\n  * `SRV` - Specifies location of services (hostname and port)\n  * `TXT` - Holds descriptive text"},"value":{"type":"string","description":"The content of the DNS record. The expected value depends on the record type:\n  * For A records: IPv4 address (e.g., '192.168.1.10')\n  * For AAAA records: IPv6 address\n  * For CNAME records: Canonical name (e.g., 'server1.example.com')\n  * For MX records: Mail server hostname\n  * For TXT records: Text content (e.g., 'v=spf1 include:_spf.example.com ~all')"},"weight":{"type":"integer","description":"A relative weight for SRV records with the same priority. Higher values get proportionally more traffic. Only used with SRV records."}},"requiredInputs":["value","type"],"stateInputs":{"description":"Input properties used for looking up and filtering Record resources.\n","properties":{"enabled":{"type":"boolean","description":"Whether the DNS record is active. Defaults to true. Set to false to temporarily disable resolution without removing the record."},"name":{"type":"string","description":"DNS record name."},"port":{"type":"integer","description":"The port number for SRV records. Valid values are between 1 and 65535. Only used with SRV records."},"priority":{"type":"integer","description":"Priority value for MX and SRV records. Lower values indicate higher priority. Required for MX and SRV records, ignored for other types."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"ttl":{"type":"integer","description":"Time To Live (TTL) in seconds, determines how long DNS resolvers should cache this record. Set to 0 for automatic TTL. Common values: 300 (5 minutes), 3600 (1 hour), 86400 (1 day)."},"type":{"type":"string","description":"The type of DNS record. Valid values are:\n  * `A` - Maps a hostname to IPv4 address\n  * `AAAA` - Maps a hostname to IPv6 address\n  * `CNAME` - Creates an alias for another domain name\n  * `MX` - Specifies mail servers for the domain\n  * `NS` - Delegates a subdomain to a set of name servers\n  * `PTR` - Creates a pointer to a canonical name (reverse DNS)\n  * `SOA` - Specifies authoritative information about the domain\n  * `SRV` - Specifies location of services (hostname and port)\n  * `TXT` - Holds descriptive text"},"value":{"type":"string","description":"The content of the DNS record. The expected value depends on the record type:\n  * For A records: IPv4 address (e.g., '192.168.1.10')\n  * For AAAA records: IPv6 address\n  * For CNAME records: Canonical name (e.g., 'server1.example.com')\n  * For MX records: Mail server hostname\n  * For TXT records: Text content (e.g., 'v=spf1 include:_spf.example.com ~all')"},"weight":{"type":"integer","description":"A relative weight for SRV records with the same priority. Higher values get proportionally more traffic. Only used with SRV records."}},"type":"object"}},"unifi:firewall/group:Group":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.firewall.Group`\" pulumi-lang-dotnet=\"`unifi.firewall.Group`\" pulumi-lang-go=\"`firewall.Group`\" pulumi-lang-python=\"`firewall.Group`\" pulumi-lang-yaml=\"`unifi.firewall.Group`\" pulumi-lang-java=\"`unifi.firewall.Group`\"\u003e`unifi.firewall.Group`\u003c/span\u003e resource manages reusable groups of addresses or ports that can be referenced in firewall rules (\u003cspan pulumi-lang-nodejs=\"`unifi.firewall.Rule`\" pulumi-lang-dotnet=\"`unifi.firewall.Rule`\" pulumi-lang-go=\"`firewall.Rule`\" pulumi-lang-python=\"`firewall.Rule`\" pulumi-lang-yaml=\"`unifi.firewall.Rule`\" pulumi-lang-java=\"`unifi.firewall.Rule`\"\u003e`unifi.firewall.Rule`\u003c/span\u003e).\n\nFirewall groups help organize and simplify firewall rule management by allowing you to:\n  * Create collections of IP addresses or networks\n  * Define sets of ports for specific services\n  * Group IPv6 addresses for IPv6-specific rules\n\nCommon use cases include:\n  * Creating groups of trusted IP addresses\n  * Defining port groups for specific applications\n  * Managing access control lists\n  * Simplifying rule maintenance by using groups instead of individual IPs/ports\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst config = new pulumi.Config();\nconst laptopIps = config.requireObject\u003cArray\u003cstring\u003e\u003e(\"laptopIps\");\nconst canPrint = new unifi.firewall.Group(\"can_print\", {\n    name: \"can-print\",\n    type: \"address-group\",\n    members: laptopIps,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nconfig = pulumi.Config()\nlaptop_ips = config.require_object(\"laptopIps\")\ncan_print = unifi.firewall.Group(\"can_print\",\n    name=\"can-print\",\n    type=\"address-group\",\n    members=laptop_ips)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Config();\n    var laptopIps = config.RequireObject\u003cstring[]\u003e(\"laptopIps\");\n    var canPrint = new Unifi.Firewall.Group(\"can_print\", new()\n    {\n        Name = \"can-print\",\n        Type = \"address-group\",\n        Members = laptopIps,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/firewall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tlaptopIps := cfg.Require(\"laptopIps\")\n\t\t_, err := firewall.NewGroup(ctx, \"can_print\", \u0026firewall.GroupArgs{\n\t\t\tName:    pulumi.String(\"can-print\"),\n\t\t\tType:    pulumi.String(\"address-group\"),\n\t\t\tMembers: laptopIps,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.firewall.Group;\nimport com.pulumiverse.unifi.firewall.GroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var config = ctx.config();\n        final var laptopIps = config.require(\"laptopIps\");\n        var canPrint = new Group(\"canPrint\", GroupArgs.builder()\n            .name(\"can-print\")\n            .type(\"address-group\")\n            .members(laptopIps)\n            .build());\n\n    }\n}\n```\n```yaml\nconfiguration:\n  laptopIps:\n    type: list(string)\nresources:\n  canPrint:\n    type: unifi:firewall:Group\n    name: can_print\n    properties:\n      name: can-print\n      type: address-group\n      members: ${laptopIps}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"members":{"type":"array","items":{"type":"string"},"description":"List of members in the group. The format depends on the group type:\n  * For address-group: IPv4 addresses or CIDR notation (e.g., ['192.168.1.10', '10.0.0.0/8'])\n  * For port-group: Port numbers or ranges (e.g., ['80', '443', '8000-8080'])\n  * For ipv6-address-group: IPv6 addresses or CIDR notation"},"name":{"type":"string","description":"A friendly name for the firewall group to help identify its purpose (e.g., 'Trusted IPs' or 'Web Server Ports'). Must be unique within the site."},"site":{"type":"string","description":"The name of the UniFi site where the firewall group should be created. If not specified, the default site will be used."},"type":{"type":"string","description":"The type of firewall group. Valid values are:\n  * `address-group` - Group of IPv4 addresses and/or networks (e.g., '192.168.1.10', '10.0.0.0/8')\n  * `port-group` - Group of ports or port ranges (e.g., '80', '443', '8000-8080')\n  * `ipv6-address-group` - Group of IPv6 addresses and/or networks"}},"required":["members","name","site","type"],"inputProperties":{"members":{"type":"array","items":{"type":"string"},"description":"List of members in the group. The format depends on the group type:\n  * For address-group: IPv4 addresses or CIDR notation (e.g., ['192.168.1.10', '10.0.0.0/8'])\n  * For port-group: Port numbers or ranges (e.g., ['80', '443', '8000-8080'])\n  * For ipv6-address-group: IPv6 addresses or CIDR notation"},"name":{"type":"string","description":"A friendly name for the firewall group to help identify its purpose (e.g., 'Trusted IPs' or 'Web Server Ports'). Must be unique within the site."},"site":{"type":"string","description":"The name of the UniFi site where the firewall group should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"type":{"type":"string","description":"The type of firewall group. Valid values are:\n  * `address-group` - Group of IPv4 addresses and/or networks (e.g., '192.168.1.10', '10.0.0.0/8')\n  * `port-group` - Group of ports or port ranges (e.g., '80', '443', '8000-8080')\n  * `ipv6-address-group` - Group of IPv6 addresses and/or networks"}},"requiredInputs":["members","type"],"stateInputs":{"description":"Input properties used for looking up and filtering Group resources.\n","properties":{"members":{"type":"array","items":{"type":"string"},"description":"List of members in the group. The format depends on the group type:\n  * For address-group: IPv4 addresses or CIDR notation (e.g., ['192.168.1.10', '10.0.0.0/8'])\n  * For port-group: Port numbers or ranges (e.g., ['80', '443', '8000-8080'])\n  * For ipv6-address-group: IPv6 addresses or CIDR notation"},"name":{"type":"string","description":"A friendly name for the firewall group to help identify its purpose (e.g., 'Trusted IPs' or 'Web Server Ports'). Must be unique within the site."},"site":{"type":"string","description":"The name of the UniFi site where the firewall group should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"type":{"type":"string","description":"The type of firewall group. Valid values are:\n  * `address-group` - Group of IPv4 addresses and/or networks (e.g., '192.168.1.10', '10.0.0.0/8')\n  * `port-group` - Group of ports or port ranges (e.g., '80', '443', '8000-8080')\n  * `ipv6-address-group` - Group of IPv6 addresses and/or networks"}},"type":"object"}},"unifi:firewall/rule:Rule":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.firewall.Rule`\" pulumi-lang-dotnet=\"`unifi.firewall.Rule`\" pulumi-lang-go=\"`firewall.Rule`\" pulumi-lang-python=\"`firewall.Rule`\" pulumi-lang-yaml=\"`unifi.firewall.Rule`\" pulumi-lang-java=\"`unifi.firewall.Rule`\"\u003e`unifi.firewall.Rule`\u003c/span\u003e resource manages firewall rules.\n\nThis resource allows you to create and manage firewall rules that control traffic flow between different network segments (WAN, LAN, Guest) for both IPv4 and IPv6 traffic. Rules can be configured to allow, drop, or reject traffic based on various criteria including protocols, ports, and IP addresses.\n\nRules are processed in order based on their \u003cspan pulumi-lang-nodejs=\"`ruleIndex`\" pulumi-lang-dotnet=\"`RuleIndex`\" pulumi-lang-go=\"`ruleIndex`\" pulumi-lang-python=\"`rule_index`\" pulumi-lang-yaml=\"`ruleIndex`\" pulumi-lang-java=\"`ruleIndex`\"\u003e`rule_index`\u003c/span\u003e, with lower numbers being processed first. Custom rules should use indices between 2000-2999 or 4000-4999 to avoid conflicts with system rules.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst config = new pulumi.Config();\nconst ipAddress = config.require(\"ipAddress\");\nconst dropAll = new unifi.firewall.Rule(\"drop_all\", {\n    name: \"drop all\",\n    action: \"drop\",\n    ruleset: \"LAN_IN\",\n    ruleIndex: 2011,\n    protocol: \"all\",\n    dstAddress: ipAddress,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nconfig = pulumi.Config()\nip_address = config.require(\"ipAddress\")\ndrop_all = unifi.firewall.Rule(\"drop_all\",\n    name=\"drop all\",\n    action=\"drop\",\n    ruleset=\"LAN_IN\",\n    rule_index=2011,\n    protocol=\"all\",\n    dst_address=ip_address)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Config();\n    var ipAddress = config.Require(\"ipAddress\");\n    var dropAll = new Unifi.Firewall.Rule(\"drop_all\", new()\n    {\n        Name = \"drop all\",\n        Action = \"drop\",\n        Ruleset = \"LAN_IN\",\n        RuleIndex = 2011,\n        Protocol = \"all\",\n        DstAddress = ipAddress,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/firewall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tipAddress := cfg.Require(\"ipAddress\")\n\t\t_, err := firewall.NewRule(ctx, \"drop_all\", \u0026firewall.RuleArgs{\n\t\t\tName:       pulumi.String(\"drop all\"),\n\t\t\tAction:     pulumi.String(\"drop\"),\n\t\t\tRuleset:    pulumi.String(\"LAN_IN\"),\n\t\t\tRuleIndex:  pulumi.Int(2011),\n\t\t\tProtocol:   pulumi.String(\"all\"),\n\t\t\tDstAddress: pulumi.String(ipAddress),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.firewall.Rule;\nimport com.pulumiverse.unifi.firewall.RuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var config = ctx.config();\n        final var ipAddress = config.require(\"ipAddress\");\n        var dropAll = new Rule(\"dropAll\", RuleArgs.builder()\n            .name(\"drop all\")\n            .action(\"drop\")\n            .ruleset(\"LAN_IN\")\n            .ruleIndex(2011)\n            .protocol(\"all\")\n            .dstAddress(ipAddress)\n            .build());\n\n    }\n}\n```\n```yaml\nconfiguration:\n  ipAddress:\n    type: string\nresources:\n  dropAll:\n    type: unifi:firewall:Rule\n    name: drop_all\n    properties:\n      name: drop all\n      action: drop\n      ruleset: LAN_IN\n      ruleIndex: 2011\n      protocol: all\n      dstAddress: ${ipAddress}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nimport using the ID from the controller API/UI\n\n```sh\n$ pulumi import unifi:firewall/rule:Rule my_rule 5f7080eb6b8969064f80494f\n```\n\n","properties":{"action":{"type":"string","description":"The action to take when traffic matches this rule. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`accept`\" pulumi-lang-dotnet=\"`Accept`\" pulumi-lang-go=\"`accept`\" pulumi-lang-python=\"`accept`\" pulumi-lang-yaml=\"`accept`\" pulumi-lang-java=\"`accept`\"\u003e`accept`\u003c/span\u003e - Allow the traffic\n  * \u003cspan pulumi-lang-nodejs=\"`drop`\" pulumi-lang-dotnet=\"`Drop`\" pulumi-lang-go=\"`drop`\" pulumi-lang-python=\"`drop`\" pulumi-lang-yaml=\"`drop`\" pulumi-lang-java=\"`drop`\"\u003e`drop`\u003c/span\u003e - Silently block the traffic\n  * \u003cspan pulumi-lang-nodejs=\"`reject`\" pulumi-lang-dotnet=\"`Reject`\" pulumi-lang-go=\"`reject`\" pulumi-lang-python=\"`reject`\" pulumi-lang-yaml=\"`reject`\" pulumi-lang-java=\"`reject`\"\u003e`reject`\u003c/span\u003e - Block the traffic and send an ICMP rejection message"},"dstAddress":{"type":"string","description":"The destination IPv4 address or network in CIDR notation (e.g., '192.168.1.10' or '192.168.0.0/24'). The format must match\u003cspan pulumi-lang-nodejs=\" dstNetworkType \" pulumi-lang-dotnet=\" DstNetworkType \" pulumi-lang-go=\" dstNetworkType \" pulumi-lang-python=\" dst_network_type \" pulumi-lang-yaml=\" dstNetworkType \" pulumi-lang-java=\" dstNetworkType \"\u003e dst_network_type \u003c/span\u003e- use a single IP for ADDRv4 or CIDR for NETv4."},"dstAddressIpv6":{"type":"string","description":"The destination IPv6 address or network in CIDR notation (e.g., '2001:db8::1' or '2001:db8::/64'). Used for IPv6 firewall rules."},"dstFirewallGroupIds":{"type":"array","items":{"type":"string"},"description":"A list of firewall group IDs to use as destinations. Groups can contain IP addresses, networks, or port numbers. This allows you to create reusable sets of addresses/ports and reference them in multiple rules."},"dstNetworkId":{"type":"string","description":"The ID of the destination network this rule applies to. This can be found in the URL when viewing the network in the UniFi controller."},"dstNetworkType":{"type":"string","description":"The type of destination network address. Valid values are:\n  * `ADDRv4` - Single IPv4 address\n  * `NETv4` - IPv4 network in CIDR notation"},"dstPort":{"type":"string","description":"The destination port(s) for this rule. Can be:\n  * A single port number (e.g., '80')\n  * A port range (e.g., '8000:8080')\n  * A list of ports/ranges separated by commas"},"enabled":{"type":"boolean","description":"Whether this firewall rule is active (true) or disabled (false). Defaults to true."},"icmpTypename":{"type":"string","description":"The ICMP type name when protocol is set to 'icmp'. Common values include:\n  * `echo-request` - ICMP ping requests\n  * `echo-reply` - ICMP ping replies\n  * `destination-unreachable` - Host/network unreachable messages\n  * `time-exceeded` - TTL exceeded messages (traceroute)"},"icmpV6Typename":{"type":"string","description":"The ICMPv6 type name when\u003cspan pulumi-lang-nodejs=\" protocolV6 \" pulumi-lang-dotnet=\" ProtocolV6 \" pulumi-lang-go=\" protocolV6 \" pulumi-lang-python=\" protocol_v6 \" pulumi-lang-yaml=\" protocolV6 \" pulumi-lang-java=\" protocolV6 \"\u003e protocol_v6 \u003c/span\u003eis set to 'ipv6-icmp'. Common values (not all are listed) include:\n  * `echo-request` - IPv6 ping requests\n  * `echo-reply` - IPv6 ping replies\n  * `neighbor-solicitation` - IPv6 neighbor discovery\n  * `neighbor-advertisement` - IPv6 neighbor announcements\n  * `destination-unreachable` - Host/network unreachable messages\n  * `packet-too-big` - Path MTU discovery messages"},"ipSec":{"type":"string","description":"Specify whether the rule matches on IPsec packets. Can be one of `match-ipsec` or `match-none`."},"logging":{"type":"boolean","description":"Enable logging for the firewall rule."},"name":{"type":"string","description":"A friendly name for the firewall rule. This helps identify the rule's purpose in the UniFi controller UI."},"protocol":{"type":"string","description":"The IPv4 protocol this rule applies to. Common values (not all are listed) include:\n  * \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e - Match all protocols\n  * \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e - TCP traffic only (e.g., web, email)\n  * \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e - UDP traffic only (e.g., DNS, VoIP)\n  * \u003cspan pulumi-lang-nodejs=\"`tcpUdp`\" pulumi-lang-dotnet=\"`TcpUdp`\" pulumi-lang-go=\"`tcpUdp`\" pulumi-lang-python=\"`tcp_udp`\" pulumi-lang-yaml=\"`tcpUdp`\" pulumi-lang-java=\"`tcpUdp`\"\u003e`tcp_udp`\u003c/span\u003e - Both TCP and UDP\n  * \u003cspan pulumi-lang-nodejs=\"`icmp`\" pulumi-lang-dotnet=\"`Icmp`\" pulumi-lang-go=\"`icmp`\" pulumi-lang-python=\"`icmp`\" pulumi-lang-yaml=\"`icmp`\" pulumi-lang-java=\"`icmp`\"\u003e`icmp`\u003c/span\u003e - ICMP traffic (ping, traceroute)\n  * Protocol numbers (1-255) for other protocols\n\nExamples:\n  * Use 'tcp' for web server rules (ports 80, 443)\n  * Use 'udp' for VoIP or gaming traffic\n  * Use 'all' for general network access rules"},"protocolV6":{"type":"string","description":"The IPv6 protocol this rule applies to. Similar to 'protocol' but for IPv6 traffic. Common values (not all are listed) include:\n  * \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e - Match all protocols\n  * \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e - TCP traffic only\n  * \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e - UDP traffic only\n  * \u003cspan pulumi-lang-nodejs=\"`tcpUdp`\" pulumi-lang-dotnet=\"`TcpUdp`\" pulumi-lang-go=\"`tcpUdp`\" pulumi-lang-python=\"`tcp_udp`\" pulumi-lang-yaml=\"`tcpUdp`\" pulumi-lang-java=\"`tcpUdp`\"\u003e`tcp_udp`\u003c/span\u003e - Both TCP and UDP traffic\n  * `ipv6-icmp` - ICMPv6 traffic"},"ruleIndex":{"type":"integer","description":"The processing order for this rule. Lower numbers are processed first. Custom rules should use:\n  * 2000-2999 for rules processed before auto-generated rules\n  * 4000-4999 for rules processed after auto-generated rules"},"ruleset":{"type":"string","description":"Defines which traffic flow this rule applies to. The format is [NETWORK]_[DIRECTION], where:\n  * NETWORK can be: WAN, LAN, GUEST (or their IPv6 variants WANv6, LANv6, GUESTv6)\n  * DIRECTION can be:\n    * IN - Traffic entering the network\n    * OUT - Traffic leaving the network\n    * LOCAL - Traffic destined for the USG/UDM itself\n\nExamples: WAN_IN (incoming WAN traffic), LAN_OUT (outgoing LAN traffic), GUEST_LOCAL (traffic to Controller from guest network)"},"site":{"type":"string","description":"The name of the UniFi site where the firewall rule should be created. If not specified, the default site will be used."},"srcAddress":{"type":"string","description":"The source IPv4 address for the firewall rule."},"srcAddressIpv6":{"type":"string","description":"The source IPv6 address or network in CIDR notation (e.g., '2001:db8::1' or '2001:db8::/64'). Used for IPv6 firewall rules."},"srcFirewallGroupIds":{"type":"array","items":{"type":"string"},"description":"A list of firewall group IDs to use as sources. Groups can contain:\n  * IP Address Groups - For matching specific IP addresses\n  * Network Groups - For matching entire subnets\n  * Port Groups - For matching specific port numbers\n\nExample uses:\n  * Group of trusted admin IPs for remote access\n  * Group of IoT device networks for isolation\n  * Group of common service ports for allowing specific applications"},"srcMac":{"type":"string","description":"The source MAC address this rule applies to. Use this to create rules that match specific devices regardless of their IP address. Format: 'XX:XX:XX:XX:XX:XX'. MAC addresses are case-insensitive."},"srcNetworkId":{"type":"string","description":"The ID of the source network this rule applies to. This can be found in the URL when viewing the network in the UniFi controller, or by using the network's name in the form `[site]/\u003cspan pulumi-lang-nodejs=\"[networkName]\" pulumi-lang-dotnet=\"[NetworkName]\" pulumi-lang-go=\"[networkName]\" pulumi-lang-python=\"[network_name]\" pulumi-lang-yaml=\"[networkName]\" pulumi-lang-java=\"[networkName]\"\u003e[network_name]\u003c/span\u003e`."},"srcNetworkType":{"type":"string","description":"The type of source network address. Valid values are:\n  * `ADDRv4` - Single IPv4 address\n  * `NETv4` - IPv4 network in CIDR notation"},"srcPort":{"type":"string","description":"The source port(s) for this rule. Can be:\n  * A single port number (e.g., '80')\n  * A port range (e.g., '8000:8080')\n  * A list of ports/ranges separated by commas"},"stateEstablished":{"type":"boolean","description":"Match established connections. When enabled:\n  * Rule only applies to packets that are part of an existing connection\n  * Useful for allowing return traffic without creating separate rules\n  * Common in WAN_IN rules to allow responses to outbound connections\n\nExample: Allow established connections from WAN while blocking new incoming connections"},"stateInvalid":{"type":"boolean","description":"Match where the state is invalid."},"stateNew":{"type":"boolean","description":"Match where the state is new."},"stateRelated":{"type":"boolean","description":"Match where the state is related."}},"required":["action","name","ruleIndex","ruleset","site"],"inputProperties":{"action":{"type":"string","description":"The action to take when traffic matches this rule. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`accept`\" pulumi-lang-dotnet=\"`Accept`\" pulumi-lang-go=\"`accept`\" pulumi-lang-python=\"`accept`\" pulumi-lang-yaml=\"`accept`\" pulumi-lang-java=\"`accept`\"\u003e`accept`\u003c/span\u003e - Allow the traffic\n  * \u003cspan pulumi-lang-nodejs=\"`drop`\" pulumi-lang-dotnet=\"`Drop`\" pulumi-lang-go=\"`drop`\" pulumi-lang-python=\"`drop`\" pulumi-lang-yaml=\"`drop`\" pulumi-lang-java=\"`drop`\"\u003e`drop`\u003c/span\u003e - Silently block the traffic\n  * \u003cspan pulumi-lang-nodejs=\"`reject`\" pulumi-lang-dotnet=\"`Reject`\" pulumi-lang-go=\"`reject`\" pulumi-lang-python=\"`reject`\" pulumi-lang-yaml=\"`reject`\" pulumi-lang-java=\"`reject`\"\u003e`reject`\u003c/span\u003e - Block the traffic and send an ICMP rejection message"},"dstAddress":{"type":"string","description":"The destination IPv4 address or network in CIDR notation (e.g., '192.168.1.10' or '192.168.0.0/24'). The format must match\u003cspan pulumi-lang-nodejs=\" dstNetworkType \" pulumi-lang-dotnet=\" DstNetworkType \" pulumi-lang-go=\" dstNetworkType \" pulumi-lang-python=\" dst_network_type \" pulumi-lang-yaml=\" dstNetworkType \" pulumi-lang-java=\" dstNetworkType \"\u003e dst_network_type \u003c/span\u003e- use a single IP for ADDRv4 or CIDR for NETv4."},"dstAddressIpv6":{"type":"string","description":"The destination IPv6 address or network in CIDR notation (e.g., '2001:db8::1' or '2001:db8::/64'). Used for IPv6 firewall rules."},"dstFirewallGroupIds":{"type":"array","items":{"type":"string"},"description":"A list of firewall group IDs to use as destinations. Groups can contain IP addresses, networks, or port numbers. This allows you to create reusable sets of addresses/ports and reference them in multiple rules."},"dstNetworkId":{"type":"string","description":"The ID of the destination network this rule applies to. This can be found in the URL when viewing the network in the UniFi controller."},"dstNetworkType":{"type":"string","description":"The type of destination network address. Valid values are:\n  * `ADDRv4` - Single IPv4 address\n  * `NETv4` - IPv4 network in CIDR notation"},"dstPort":{"type":"string","description":"The destination port(s) for this rule. Can be:\n  * A single port number (e.g., '80')\n  * A port range (e.g., '8000:8080')\n  * A list of ports/ranges separated by commas"},"enabled":{"type":"boolean","description":"Whether this firewall rule is active (true) or disabled (false). Defaults to true."},"icmpTypename":{"type":"string","description":"The ICMP type name when protocol is set to 'icmp'. Common values include:\n  * `echo-request` - ICMP ping requests\n  * `echo-reply` - ICMP ping replies\n  * `destination-unreachable` - Host/network unreachable messages\n  * `time-exceeded` - TTL exceeded messages (traceroute)"},"icmpV6Typename":{"type":"string","description":"The ICMPv6 type name when\u003cspan pulumi-lang-nodejs=\" protocolV6 \" pulumi-lang-dotnet=\" ProtocolV6 \" pulumi-lang-go=\" protocolV6 \" pulumi-lang-python=\" protocol_v6 \" pulumi-lang-yaml=\" protocolV6 \" pulumi-lang-java=\" protocolV6 \"\u003e protocol_v6 \u003c/span\u003eis set to 'ipv6-icmp'. Common values (not all are listed) include:\n  * `echo-request` - IPv6 ping requests\n  * `echo-reply` - IPv6 ping replies\n  * `neighbor-solicitation` - IPv6 neighbor discovery\n  * `neighbor-advertisement` - IPv6 neighbor announcements\n  * `destination-unreachable` - Host/network unreachable messages\n  * `packet-too-big` - Path MTU discovery messages"},"ipSec":{"type":"string","description":"Specify whether the rule matches on IPsec packets. Can be one of `match-ipsec` or `match-none`."},"logging":{"type":"boolean","description":"Enable logging for the firewall rule."},"name":{"type":"string","description":"A friendly name for the firewall rule. This helps identify the rule's purpose in the UniFi controller UI."},"protocol":{"type":"string","description":"The IPv4 protocol this rule applies to. Common values (not all are listed) include:\n  * \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e - Match all protocols\n  * \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e - TCP traffic only (e.g., web, email)\n  * \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e - UDP traffic only (e.g., DNS, VoIP)\n  * \u003cspan pulumi-lang-nodejs=\"`tcpUdp`\" pulumi-lang-dotnet=\"`TcpUdp`\" pulumi-lang-go=\"`tcpUdp`\" pulumi-lang-python=\"`tcp_udp`\" pulumi-lang-yaml=\"`tcpUdp`\" pulumi-lang-java=\"`tcpUdp`\"\u003e`tcp_udp`\u003c/span\u003e - Both TCP and UDP\n  * \u003cspan pulumi-lang-nodejs=\"`icmp`\" pulumi-lang-dotnet=\"`Icmp`\" pulumi-lang-go=\"`icmp`\" pulumi-lang-python=\"`icmp`\" pulumi-lang-yaml=\"`icmp`\" pulumi-lang-java=\"`icmp`\"\u003e`icmp`\u003c/span\u003e - ICMP traffic (ping, traceroute)\n  * Protocol numbers (1-255) for other protocols\n\nExamples:\n  * Use 'tcp' for web server rules (ports 80, 443)\n  * Use 'udp' for VoIP or gaming traffic\n  * Use 'all' for general network access rules"},"protocolV6":{"type":"string","description":"The IPv6 protocol this rule applies to. Similar to 'protocol' but for IPv6 traffic. Common values (not all are listed) include:\n  * \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e - Match all protocols\n  * \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e - TCP traffic only\n  * \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e - UDP traffic only\n  * \u003cspan pulumi-lang-nodejs=\"`tcpUdp`\" pulumi-lang-dotnet=\"`TcpUdp`\" pulumi-lang-go=\"`tcpUdp`\" pulumi-lang-python=\"`tcp_udp`\" pulumi-lang-yaml=\"`tcpUdp`\" pulumi-lang-java=\"`tcpUdp`\"\u003e`tcp_udp`\u003c/span\u003e - Both TCP and UDP traffic\n  * `ipv6-icmp` - ICMPv6 traffic"},"ruleIndex":{"type":"integer","description":"The processing order for this rule. Lower numbers are processed first. Custom rules should use:\n  * 2000-2999 for rules processed before auto-generated rules\n  * 4000-4999 for rules processed after auto-generated rules"},"ruleset":{"type":"string","description":"Defines which traffic flow this rule applies to. The format is [NETWORK]_[DIRECTION], where:\n  * NETWORK can be: WAN, LAN, GUEST (or their IPv6 variants WANv6, LANv6, GUESTv6)\n  * DIRECTION can be:\n    * IN - Traffic entering the network\n    * OUT - Traffic leaving the network\n    * LOCAL - Traffic destined for the USG/UDM itself\n\nExamples: WAN_IN (incoming WAN traffic), LAN_OUT (outgoing LAN traffic), GUEST_LOCAL (traffic to Controller from guest network)"},"site":{"type":"string","description":"The name of the UniFi site where the firewall rule should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"srcAddress":{"type":"string","description":"The source IPv4 address for the firewall rule."},"srcAddressIpv6":{"type":"string","description":"The source IPv6 address or network in CIDR notation (e.g., '2001:db8::1' or '2001:db8::/64'). Used for IPv6 firewall rules."},"srcFirewallGroupIds":{"type":"array","items":{"type":"string"},"description":"A list of firewall group IDs to use as sources. Groups can contain:\n  * IP Address Groups - For matching specific IP addresses\n  * Network Groups - For matching entire subnets\n  * Port Groups - For matching specific port numbers\n\nExample uses:\n  * Group of trusted admin IPs for remote access\n  * Group of IoT device networks for isolation\n  * Group of common service ports for allowing specific applications"},"srcMac":{"type":"string","description":"The source MAC address this rule applies to. Use this to create rules that match specific devices regardless of their IP address. Format: 'XX:XX:XX:XX:XX:XX'. MAC addresses are case-insensitive."},"srcNetworkId":{"type":"string","description":"The ID of the source network this rule applies to. This can be found in the URL when viewing the network in the UniFi controller, or by using the network's name in the form `[site]/\u003cspan pulumi-lang-nodejs=\"[networkName]\" pulumi-lang-dotnet=\"[NetworkName]\" pulumi-lang-go=\"[networkName]\" pulumi-lang-python=\"[network_name]\" pulumi-lang-yaml=\"[networkName]\" pulumi-lang-java=\"[networkName]\"\u003e[network_name]\u003c/span\u003e`."},"srcNetworkType":{"type":"string","description":"The type of source network address. Valid values are:\n  * `ADDRv4` - Single IPv4 address\n  * `NETv4` - IPv4 network in CIDR notation"},"srcPort":{"type":"string","description":"The source port(s) for this rule. Can be:\n  * A single port number (e.g., '80')\n  * A port range (e.g., '8000:8080')\n  * A list of ports/ranges separated by commas"},"stateEstablished":{"type":"boolean","description":"Match established connections. When enabled:\n  * Rule only applies to packets that are part of an existing connection\n  * Useful for allowing return traffic without creating separate rules\n  * Common in WAN_IN rules to allow responses to outbound connections\n\nExample: Allow established connections from WAN while blocking new incoming connections"},"stateInvalid":{"type":"boolean","description":"Match where the state is invalid."},"stateNew":{"type":"boolean","description":"Match where the state is new."},"stateRelated":{"type":"boolean","description":"Match where the state is related."}},"requiredInputs":["action","ruleIndex","ruleset"],"stateInputs":{"description":"Input properties used for looking up and filtering Rule resources.\n","properties":{"action":{"type":"string","description":"The action to take when traffic matches this rule. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`accept`\" pulumi-lang-dotnet=\"`Accept`\" pulumi-lang-go=\"`accept`\" pulumi-lang-python=\"`accept`\" pulumi-lang-yaml=\"`accept`\" pulumi-lang-java=\"`accept`\"\u003e`accept`\u003c/span\u003e - Allow the traffic\n  * \u003cspan pulumi-lang-nodejs=\"`drop`\" pulumi-lang-dotnet=\"`Drop`\" pulumi-lang-go=\"`drop`\" pulumi-lang-python=\"`drop`\" pulumi-lang-yaml=\"`drop`\" pulumi-lang-java=\"`drop`\"\u003e`drop`\u003c/span\u003e - Silently block the traffic\n  * \u003cspan pulumi-lang-nodejs=\"`reject`\" pulumi-lang-dotnet=\"`Reject`\" pulumi-lang-go=\"`reject`\" pulumi-lang-python=\"`reject`\" pulumi-lang-yaml=\"`reject`\" pulumi-lang-java=\"`reject`\"\u003e`reject`\u003c/span\u003e - Block the traffic and send an ICMP rejection message"},"dstAddress":{"type":"string","description":"The destination IPv4 address or network in CIDR notation (e.g., '192.168.1.10' or '192.168.0.0/24'). The format must match\u003cspan pulumi-lang-nodejs=\" dstNetworkType \" pulumi-lang-dotnet=\" DstNetworkType \" pulumi-lang-go=\" dstNetworkType \" pulumi-lang-python=\" dst_network_type \" pulumi-lang-yaml=\" dstNetworkType \" pulumi-lang-java=\" dstNetworkType \"\u003e dst_network_type \u003c/span\u003e- use a single IP for ADDRv4 or CIDR for NETv4."},"dstAddressIpv6":{"type":"string","description":"The destination IPv6 address or network in CIDR notation (e.g., '2001:db8::1' or '2001:db8::/64'). Used for IPv6 firewall rules."},"dstFirewallGroupIds":{"type":"array","items":{"type":"string"},"description":"A list of firewall group IDs to use as destinations. Groups can contain IP addresses, networks, or port numbers. This allows you to create reusable sets of addresses/ports and reference them in multiple rules."},"dstNetworkId":{"type":"string","description":"The ID of the destination network this rule applies to. This can be found in the URL when viewing the network in the UniFi controller."},"dstNetworkType":{"type":"string","description":"The type of destination network address. Valid values are:\n  * `ADDRv4` - Single IPv4 address\n  * `NETv4` - IPv4 network in CIDR notation"},"dstPort":{"type":"string","description":"The destination port(s) for this rule. Can be:\n  * A single port number (e.g., '80')\n  * A port range (e.g., '8000:8080')\n  * A list of ports/ranges separated by commas"},"enabled":{"type":"boolean","description":"Whether this firewall rule is active (true) or disabled (false). Defaults to true."},"icmpTypename":{"type":"string","description":"The ICMP type name when protocol is set to 'icmp'. Common values include:\n  * `echo-request` - ICMP ping requests\n  * `echo-reply` - ICMP ping replies\n  * `destination-unreachable` - Host/network unreachable messages\n  * `time-exceeded` - TTL exceeded messages (traceroute)"},"icmpV6Typename":{"type":"string","description":"The ICMPv6 type name when\u003cspan pulumi-lang-nodejs=\" protocolV6 \" pulumi-lang-dotnet=\" ProtocolV6 \" pulumi-lang-go=\" protocolV6 \" pulumi-lang-python=\" protocol_v6 \" pulumi-lang-yaml=\" protocolV6 \" pulumi-lang-java=\" protocolV6 \"\u003e protocol_v6 \u003c/span\u003eis set to 'ipv6-icmp'. Common values (not all are listed) include:\n  * `echo-request` - IPv6 ping requests\n  * `echo-reply` - IPv6 ping replies\n  * `neighbor-solicitation` - IPv6 neighbor discovery\n  * `neighbor-advertisement` - IPv6 neighbor announcements\n  * `destination-unreachable` - Host/network unreachable messages\n  * `packet-too-big` - Path MTU discovery messages"},"ipSec":{"type":"string","description":"Specify whether the rule matches on IPsec packets. Can be one of `match-ipsec` or `match-none`."},"logging":{"type":"boolean","description":"Enable logging for the firewall rule."},"name":{"type":"string","description":"A friendly name for the firewall rule. This helps identify the rule's purpose in the UniFi controller UI."},"protocol":{"type":"string","description":"The IPv4 protocol this rule applies to. Common values (not all are listed) include:\n  * \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e - Match all protocols\n  * \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e - TCP traffic only (e.g., web, email)\n  * \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e - UDP traffic only (e.g., DNS, VoIP)\n  * \u003cspan pulumi-lang-nodejs=\"`tcpUdp`\" pulumi-lang-dotnet=\"`TcpUdp`\" pulumi-lang-go=\"`tcpUdp`\" pulumi-lang-python=\"`tcp_udp`\" pulumi-lang-yaml=\"`tcpUdp`\" pulumi-lang-java=\"`tcpUdp`\"\u003e`tcp_udp`\u003c/span\u003e - Both TCP and UDP\n  * \u003cspan pulumi-lang-nodejs=\"`icmp`\" pulumi-lang-dotnet=\"`Icmp`\" pulumi-lang-go=\"`icmp`\" pulumi-lang-python=\"`icmp`\" pulumi-lang-yaml=\"`icmp`\" pulumi-lang-java=\"`icmp`\"\u003e`icmp`\u003c/span\u003e - ICMP traffic (ping, traceroute)\n  * Protocol numbers (1-255) for other protocols\n\nExamples:\n  * Use 'tcp' for web server rules (ports 80, 443)\n  * Use 'udp' for VoIP or gaming traffic\n  * Use 'all' for general network access rules"},"protocolV6":{"type":"string","description":"The IPv6 protocol this rule applies to. Similar to 'protocol' but for IPv6 traffic. Common values (not all are listed) include:\n  * \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e - Match all protocols\n  * \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e - TCP traffic only\n  * \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e - UDP traffic only\n  * \u003cspan pulumi-lang-nodejs=\"`tcpUdp`\" pulumi-lang-dotnet=\"`TcpUdp`\" pulumi-lang-go=\"`tcpUdp`\" pulumi-lang-python=\"`tcp_udp`\" pulumi-lang-yaml=\"`tcpUdp`\" pulumi-lang-java=\"`tcpUdp`\"\u003e`tcp_udp`\u003c/span\u003e - Both TCP and UDP traffic\n  * `ipv6-icmp` - ICMPv6 traffic"},"ruleIndex":{"type":"integer","description":"The processing order for this rule. Lower numbers are processed first. Custom rules should use:\n  * 2000-2999 for rules processed before auto-generated rules\n  * 4000-4999 for rules processed after auto-generated rules"},"ruleset":{"type":"string","description":"Defines which traffic flow this rule applies to. The format is [NETWORK]_[DIRECTION], where:\n  * NETWORK can be: WAN, LAN, GUEST (or their IPv6 variants WANv6, LANv6, GUESTv6)\n  * DIRECTION can be:\n    * IN - Traffic entering the network\n    * OUT - Traffic leaving the network\n    * LOCAL - Traffic destined for the USG/UDM itself\n\nExamples: WAN_IN (incoming WAN traffic), LAN_OUT (outgoing LAN traffic), GUEST_LOCAL (traffic to Controller from guest network)"},"site":{"type":"string","description":"The name of the UniFi site where the firewall rule should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"srcAddress":{"type":"string","description":"The source IPv4 address for the firewall rule."},"srcAddressIpv6":{"type":"string","description":"The source IPv6 address or network in CIDR notation (e.g., '2001:db8::1' or '2001:db8::/64'). Used for IPv6 firewall rules."},"srcFirewallGroupIds":{"type":"array","items":{"type":"string"},"description":"A list of firewall group IDs to use as sources. Groups can contain:\n  * IP Address Groups - For matching specific IP addresses\n  * Network Groups - For matching entire subnets\n  * Port Groups - For matching specific port numbers\n\nExample uses:\n  * Group of trusted admin IPs for remote access\n  * Group of IoT device networks for isolation\n  * Group of common service ports for allowing specific applications"},"srcMac":{"type":"string","description":"The source MAC address this rule applies to. Use this to create rules that match specific devices regardless of their IP address. Format: 'XX:XX:XX:XX:XX:XX'. MAC addresses are case-insensitive."},"srcNetworkId":{"type":"string","description":"The ID of the source network this rule applies to. This can be found in the URL when viewing the network in the UniFi controller, or by using the network's name in the form `[site]/\u003cspan pulumi-lang-nodejs=\"[networkName]\" pulumi-lang-dotnet=\"[NetworkName]\" pulumi-lang-go=\"[networkName]\" pulumi-lang-python=\"[network_name]\" pulumi-lang-yaml=\"[networkName]\" pulumi-lang-java=\"[networkName]\"\u003e[network_name]\u003c/span\u003e`."},"srcNetworkType":{"type":"string","description":"The type of source network address. Valid values are:\n  * `ADDRv4` - Single IPv4 address\n  * `NETv4` - IPv4 network in CIDR notation"},"srcPort":{"type":"string","description":"The source port(s) for this rule. Can be:\n  * A single port number (e.g., '80')\n  * A port range (e.g., '8000:8080')\n  * A list of ports/ranges separated by commas"},"stateEstablished":{"type":"boolean","description":"Match established connections. When enabled:\n  * Rule only applies to packets that are part of an existing connection\n  * Useful for allowing return traffic without creating separate rules\n  * Common in WAN_IN rules to allow responses to outbound connections\n\nExample: Allow established connections from WAN while blocking new incoming connections"},"stateInvalid":{"type":"boolean","description":"Match where the state is invalid."},"stateNew":{"type":"boolean","description":"Match where the state is new."},"stateRelated":{"type":"boolean","description":"Match where the state is related."}},"type":"object"}},"unifi:firewall/zone:Zone":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.firewall.Zone`\" pulumi-lang-dotnet=\"`unifi.firewall.Zone`\" pulumi-lang-go=\"`firewall.Zone`\" pulumi-lang-python=\"`firewall.Zone`\" pulumi-lang-yaml=\"`unifi.firewall.Zone`\" pulumi-lang-java=\"`unifi.firewall.Zone`\"\u003e`unifi.firewall.Zone`\u003c/span\u003e resource manages firewall zones in the UniFi controller.\n\nFirewall zones allow you to group networks together for firewall rule application. This resource allows you to create, update, and delete firewall zones.\n\n!\u003e This is experimental feature, that requires UniFi OS 9.0.0 or later and Zone Based Firewall feature enabled. Check [official documentation](https://help.ui.com/hc/en-us/articles/28223082254743-Migrating-to-Zone-Based-Firewalls-in-UniFi) how to migate to Zone-Based firewalls.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst network = new unifi.Network(\"network\", {\n    name: \"my-network\",\n    purpose: \"corporate\",\n    subnet: \"10.0.10.0/24\",\n    vlanId: 400,\n});\nconst zone = new unifi.firewall.Zone(\"zone\", {\n    name: \"my-zone\",\n    networks: [network.id],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nnetwork = unifi.Network(\"network\",\n    name=\"my-network\",\n    purpose=\"corporate\",\n    subnet=\"10.0.10.0/24\",\n    vlan_id=400)\nzone = unifi.firewall.Zone(\"zone\",\n    name=\"my-zone\",\n    networks=[network.id])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var network = new Unifi.Network(\"network\", new()\n    {\n        Name = \"my-network\",\n        Purpose = \"corporate\",\n        Subnet = \"10.0.10.0/24\",\n        VlanId = 400,\n    });\n\n    var zone = new Unifi.Firewall.Zone(\"zone\", new()\n    {\n        Name = \"my-zone\",\n        Networks = new[]\n        {\n            network.Id,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/firewall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := unifi.NewNetwork(ctx, \"network\", \u0026unifi.NetworkArgs{\n\t\t\tName:    pulumi.String(\"my-network\"),\n\t\t\tPurpose: pulumi.String(\"corporate\"),\n\t\t\tSubnet:  pulumi.String(\"10.0.10.0/24\"),\n\t\t\tVlanId:  pulumi.Int(400),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firewall.NewZone(ctx, \"zone\", \u0026firewall.ZoneArgs{\n\t\t\tName: pulumi.String(\"my-zone\"),\n\t\t\tNetworks: pulumi.StringArray{\n\t\t\t\tnetwork.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.Network;\nimport com.pulumiverse.unifi.NetworkArgs;\nimport com.pulumiverse.unifi.firewall.Zone;\nimport com.pulumiverse.unifi.firewall.ZoneArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var network = new Network(\"network\", NetworkArgs.builder()\n            .name(\"my-network\")\n            .purpose(\"corporate\")\n            .subnet(\"10.0.10.0/24\")\n            .vlanId(400)\n            .build());\n\n        var zone = new Zone(\"zone\", ZoneArgs.builder()\n            .name(\"my-zone\")\n            .networks(network.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  network:\n    type: unifi:Network\n    properties:\n      name: my-network\n      purpose: corporate\n      subnet: 10.0.10.0/24\n      vlanId: '400'\n  zone:\n    type: unifi:firewall:Zone\n    properties:\n      name: my-zone\n      networks:\n        - ${network.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nimport from provider configured site\n\n```sh\n$ pulumi import unifi:firewall/zone:Zone myzone 5dc28e5e9106d105bdc87217\n```\n\nimport from another site\n\n```sh\n$ pulumi import unifi:firewall/zone:Zone myzone another-site:5dc28e5e9106d105bdc87217\n```\n\n","properties":{"name":{"type":"string","description":"The name of the firewall zone.\n"},"networks":{"type":"array","items":{"type":"string"},"description":"List of network IDs to include in this firewall zone.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"required":["name","networks","site"],"inputProperties":{"name":{"type":"string","description":"The name of the firewall zone.\n"},"networks":{"type":"array","items":{"type":"string"},"description":"List of network IDs to include in this firewall zone.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Zone resources.\n","properties":{"name":{"type":"string","description":"The name of the firewall zone.\n"},"networks":{"type":"array","items":{"type":"string"},"description":"List of network IDs to include in this firewall zone.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"type":"object"}},"unifi:firewall/zonePolicy:ZonePolicy":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.firewall.ZonePolicy`\" pulumi-lang-dotnet=\"`unifi.firewall.ZonePolicy`\" pulumi-lang-go=\"`firewall.ZonePolicy`\" pulumi-lang-python=\"`firewall.ZonePolicy`\" pulumi-lang-yaml=\"`unifi.firewall.ZonePolicy`\" pulumi-lang-java=\"`unifi.firewall.ZonePolicy`\"\u003e`unifi.firewall.ZonePolicy`\u003c/span\u003e resource manages firewall policies between zones in the UniFi controller. This resource allows you to create, update, and delete policies that define allowed or blocked traffic between zones.\n\n!\u003e This is experimental feature, that requires UniFi OS 9.0.0 or later and Zone Based Firewall feature enabled. Check [official documentation](https://help.ui.com/hc/en-us/articles/28223082254743-Migrating-to-Zone-Based-Firewalls-in-UniFi) how to migate to Zone-Based firewalls.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst network = new unifi.Network(\"network\", {\n    name: \"my-network\",\n    purpose: \"corporate\",\n    subnet: \"10.0.10.0/24\",\n    vlanId: 400,\n});\nconst src = new unifi.firewall.Zone(\"src\", {\n    name: \"my-source-zone\",\n    networks: [network.id],\n});\nconst dst = new unifi.firewall.Zone(\"dst\", {name: \"my-destination-zone\"});\n// Allow TCP/UDP traffic from any ip and port other than 192.168.1.1 and 443 in `src` zone to `dst` zone\nconst policy = new unifi.firewall.ZonePolicy(\"policy\", {\n    name: \"my-zone-policy\",\n    action: \"ALLOW\",\n    protocol: \"tcp_udp\",\n    source: {\n        zoneId: src.id,\n        ips: [\"192.168.1.1\"],\n        port: 443,\n        matchOppositeIps: true,\n        matchOppositePorts: true,\n    },\n    destination: {\n        zoneId: dst.id,\n    },\n    schedule: {\n        mode: \"EVERY_DAY\",\n        timeAllDay: false,\n        timeFrom: \"08:00\",\n        timeTo: \"17:00\",\n    },\n});\nconst web_ports = new unifi.firewall.Group(\"web-ports\", {\n    name: \"web-apps\",\n    type: \"port-group\",\n    members: [\n        \"80\",\n        \"443\",\n    ],\n});\n// Block TCP/UDP traffic from any ip and port in `src` zone to `dst` zone ports 80 and 443 defined in port group\nconst policy2 = new unifi.firewall.ZonePolicy(\"policy2\", {\n    name: \"my-policy-2\",\n    action: \"BLOCK\",\n    protocol: \"tcp_udp\",\n    source: {\n        zoneId: src.id,\n    },\n    destination: {\n        zoneId: dst.id,\n        portGroupId: web_ports.id,\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nnetwork = unifi.Network(\"network\",\n    name=\"my-network\",\n    purpose=\"corporate\",\n    subnet=\"10.0.10.0/24\",\n    vlan_id=400)\nsrc = unifi.firewall.Zone(\"src\",\n    name=\"my-source-zone\",\n    networks=[network.id])\ndst = unifi.firewall.Zone(\"dst\", name=\"my-destination-zone\")\n# Allow TCP/UDP traffic from any ip and port other than 192.168.1.1 and 443 in `src` zone to `dst` zone\npolicy = unifi.firewall.ZonePolicy(\"policy\",\n    name=\"my-zone-policy\",\n    action=\"ALLOW\",\n    protocol=\"tcp_udp\",\n    source={\n        \"zone_id\": src.id,\n        \"ips\": [\"192.168.1.1\"],\n        \"port\": 443,\n        \"match_opposite_ips\": True,\n        \"match_opposite_ports\": True,\n    },\n    destination={\n        \"zone_id\": dst.id,\n    },\n    schedule={\n        \"mode\": \"EVERY_DAY\",\n        \"time_all_day\": False,\n        \"time_from\": \"08:00\",\n        \"time_to\": \"17:00\",\n    })\nweb_ports = unifi.firewall.Group(\"web-ports\",\n    name=\"web-apps\",\n    type=\"port-group\",\n    members=[\n        \"80\",\n        \"443\",\n    ])\n# Block TCP/UDP traffic from any ip and port in `src` zone to `dst` zone ports 80 and 443 defined in port group\npolicy2 = unifi.firewall.ZonePolicy(\"policy2\",\n    name=\"my-policy-2\",\n    action=\"BLOCK\",\n    protocol=\"tcp_udp\",\n    source={\n        \"zone_id\": src.id,\n    },\n    destination={\n        \"zone_id\": dst.id,\n        \"port_group_id\": web_ports.id,\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var network = new Unifi.Network(\"network\", new()\n    {\n        Name = \"my-network\",\n        Purpose = \"corporate\",\n        Subnet = \"10.0.10.0/24\",\n        VlanId = 400,\n    });\n\n    var src = new Unifi.Firewall.Zone(\"src\", new()\n    {\n        Name = \"my-source-zone\",\n        Networks = new[]\n        {\n            network.Id,\n        },\n    });\n\n    var dst = new Unifi.Firewall.Zone(\"dst\", new()\n    {\n        Name = \"my-destination-zone\",\n    });\n\n    // Allow TCP/UDP traffic from any ip and port other than 192.168.1.1 and 443 in `src` zone to `dst` zone\n    var policy = new Unifi.Firewall.ZonePolicy(\"policy\", new()\n    {\n        Name = \"my-zone-policy\",\n        Action = \"ALLOW\",\n        Protocol = \"tcp_udp\",\n        Source = new Unifi.Firewall.Inputs.ZonePolicySourceArgs\n        {\n            ZoneId = src.Id,\n            Ips = new[]\n            {\n                \"192.168.1.1\",\n            },\n            Port = 443,\n            MatchOppositeIps = true,\n            MatchOppositePorts = true,\n        },\n        Destination = new Unifi.Firewall.Inputs.ZonePolicyDestinationArgs\n        {\n            ZoneId = dst.Id,\n        },\n        Schedule = new Unifi.Firewall.Inputs.ZonePolicyScheduleArgs\n        {\n            Mode = \"EVERY_DAY\",\n            TimeAllDay = false,\n            TimeFrom = \"08:00\",\n            TimeTo = \"17:00\",\n        },\n    });\n\n    var web_ports = new Unifi.Firewall.Group(\"web-ports\", new()\n    {\n        Name = \"web-apps\",\n        Type = \"port-group\",\n        Members = new[]\n        {\n            \"80\",\n            \"443\",\n        },\n    });\n\n    // Block TCP/UDP traffic from any ip and port in `src` zone to `dst` zone ports 80 and 443 defined in port group\n    var policy2 = new Unifi.Firewall.ZonePolicy(\"policy2\", new()\n    {\n        Name = \"my-policy-2\",\n        Action = \"BLOCK\",\n        Protocol = \"tcp_udp\",\n        Source = new Unifi.Firewall.Inputs.ZonePolicySourceArgs\n        {\n            ZoneId = src.Id,\n        },\n        Destination = new Unifi.Firewall.Inputs.ZonePolicyDestinationArgs\n        {\n            ZoneId = dst.Id,\n            PortGroupId = web_ports.Id,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/firewall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := unifi.NewNetwork(ctx, \"network\", \u0026unifi.NetworkArgs{\n\t\t\tName:    pulumi.String(\"my-network\"),\n\t\t\tPurpose: pulumi.String(\"corporate\"),\n\t\t\tSubnet:  pulumi.String(\"10.0.10.0/24\"),\n\t\t\tVlanId:  pulumi.Int(400),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsrc, err := firewall.NewZone(ctx, \"src\", \u0026firewall.ZoneArgs{\n\t\t\tName: pulumi.String(\"my-source-zone\"),\n\t\t\tNetworks: pulumi.StringArray{\n\t\t\t\tnetwork.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdst, err := firewall.NewZone(ctx, \"dst\", \u0026firewall.ZoneArgs{\n\t\t\tName: pulumi.String(\"my-destination-zone\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Allow TCP/UDP traffic from any ip and port other than 192.168.1.1 and 443 in `src` zone to `dst` zone\n\t\t_, err = firewall.NewZonePolicy(ctx, \"policy\", \u0026firewall.ZonePolicyArgs{\n\t\t\tName:     pulumi.String(\"my-zone-policy\"),\n\t\t\tAction:   pulumi.String(\"ALLOW\"),\n\t\t\tProtocol: pulumi.String(\"tcp_udp\"),\n\t\t\tSource: \u0026firewall.ZonePolicySourceArgs{\n\t\t\t\tZoneId: src.ID(),\n\t\t\t\tIps: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"192.168.1.1\"),\n\t\t\t\t},\n\t\t\t\tPort:               pulumi.Int(443),\n\t\t\t\tMatchOppositeIps:   pulumi.Bool(true),\n\t\t\t\tMatchOppositePorts: pulumi.Bool(true),\n\t\t\t},\n\t\t\tDestination: \u0026firewall.ZonePolicyDestinationArgs{\n\t\t\t\tZoneId: dst.ID(),\n\t\t\t},\n\t\t\tSchedule: \u0026firewall.ZonePolicyScheduleArgs{\n\t\t\t\tMode:       pulumi.String(\"EVERY_DAY\"),\n\t\t\t\tTimeAllDay: pulumi.Bool(false),\n\t\t\t\tTimeFrom:   pulumi.String(\"08:00\"),\n\t\t\t\tTimeTo:     pulumi.String(\"17:00\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tweb_ports, err := firewall.NewGroup(ctx, \"web-ports\", \u0026firewall.GroupArgs{\n\t\t\tName: pulumi.String(\"web-apps\"),\n\t\t\tType: pulumi.String(\"port-group\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"80\"),\n\t\t\t\tpulumi.String(\"443\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Block TCP/UDP traffic from any ip and port in `src` zone to `dst` zone ports 80 and 443 defined in port group\n\t\t_, err = firewall.NewZonePolicy(ctx, \"policy2\", \u0026firewall.ZonePolicyArgs{\n\t\t\tName:     pulumi.String(\"my-policy-2\"),\n\t\t\tAction:   pulumi.String(\"BLOCK\"),\n\t\t\tProtocol: pulumi.String(\"tcp_udp\"),\n\t\t\tSource: \u0026firewall.ZonePolicySourceArgs{\n\t\t\t\tZoneId: src.ID(),\n\t\t\t},\n\t\t\tDestination: \u0026firewall.ZonePolicyDestinationArgs{\n\t\t\t\tZoneId:      dst.ID(),\n\t\t\t\tPortGroupId: web_ports.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.Network;\nimport com.pulumiverse.unifi.NetworkArgs;\nimport com.pulumiverse.unifi.firewall.Zone;\nimport com.pulumiverse.unifi.firewall.ZoneArgs;\nimport com.pulumiverse.unifi.firewall.ZonePolicy;\nimport com.pulumiverse.unifi.firewall.ZonePolicyArgs;\nimport com.pulumi.unifi.firewall.inputs.ZonePolicySourceArgs;\nimport com.pulumi.unifi.firewall.inputs.ZonePolicyDestinationArgs;\nimport com.pulumi.unifi.firewall.inputs.ZonePolicyScheduleArgs;\nimport com.pulumiverse.unifi.firewall.Group;\nimport com.pulumiverse.unifi.firewall.GroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var network = new Network(\"network\", NetworkArgs.builder()\n            .name(\"my-network\")\n            .purpose(\"corporate\")\n            .subnet(\"10.0.10.0/24\")\n            .vlanId(400)\n            .build());\n\n        var src = new Zone(\"src\", ZoneArgs.builder()\n            .name(\"my-source-zone\")\n            .networks(network.id())\n            .build());\n\n        var dst = new Zone(\"dst\", ZoneArgs.builder()\n            .name(\"my-destination-zone\")\n            .build());\n\n        // Allow TCP/UDP traffic from any ip and port other than 192.168.1.1 and 443 in `src` zone to `dst` zone\n        var policy = new ZonePolicy(\"policy\", ZonePolicyArgs.builder()\n            .name(\"my-zone-policy\")\n            .action(\"ALLOW\")\n            .protocol(\"tcp_udp\")\n            .source(ZonePolicySourceArgs.builder()\n                .zoneId(src.id())\n                .ips(\"192.168.1.1\")\n                .port(443)\n                .matchOppositeIps(true)\n                .matchOppositePorts(true)\n                .build())\n            .destination(ZonePolicyDestinationArgs.builder()\n                .zoneId(dst.id())\n                .build())\n            .schedule(ZonePolicyScheduleArgs.builder()\n                .mode(\"EVERY_DAY\")\n                .timeAllDay(false)\n                .timeFrom(\"08:00\")\n                .timeTo(\"17:00\")\n                .build())\n            .build());\n\n        var web_ports = new Group(\"web-ports\", GroupArgs.builder()\n            .name(\"web-apps\")\n            .type(\"port-group\")\n            .members(            \n                \"80\",\n                \"443\")\n            .build());\n\n        // Block TCP/UDP traffic from any ip and port in `src` zone to `dst` zone ports 80 and 443 defined in port group\n        var policy2 = new ZonePolicy(\"policy2\", ZonePolicyArgs.builder()\n            .name(\"my-policy-2\")\n            .action(\"BLOCK\")\n            .protocol(\"tcp_udp\")\n            .source(ZonePolicySourceArgs.builder()\n                .zoneId(src.id())\n                .build())\n            .destination(ZonePolicyDestinationArgs.builder()\n                .zoneId(dst.id())\n                .portGroupId(web_ports.id())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  network:\n    type: unifi:Network\n    properties:\n      name: my-network\n      purpose: corporate\n      subnet: 10.0.10.0/24\n      vlanId: '400'\n  src:\n    type: unifi:firewall:Zone\n    properties:\n      name: my-source-zone\n      networks:\n        - ${network.id}\n  dst:\n    type: unifi:firewall:Zone\n    properties:\n      name: my-destination-zone\n  # Allow TCP/UDP traffic from any ip and port other than 192.168.1.1 and 443 in `src` zone to `dst` zone\n  policy:\n    type: unifi:firewall:ZonePolicy\n    properties:\n      name: my-zone-policy\n      action: ALLOW\n      protocol: tcp_udp\n      source:\n        zoneId: ${src.id}\n        ips:\n          - 192.168.1.1\n        port: '443'\n        matchOppositeIps: true\n        matchOppositePorts: true\n      destination:\n        zoneId: ${dst.id}\n      schedule:\n        mode: EVERY_DAY\n        timeAllDay: false\n        timeFrom: 08:00\n        timeTo: 17:00\n  web-ports:\n    type: unifi:firewall:Group\n    properties:\n      name: web-apps\n      type: port-group\n      members:\n        - '80'\n        - '443'\n  # Block TCP/UDP traffic from any ip and port in `src` zone to `dst` zone ports 80 and 443 defined in port group\n  policy2:\n    type: unifi:firewall:ZonePolicy\n    properties:\n      name: my-policy-2\n      action: BLOCK\n      protocol: tcp_udp\n      source:\n        zoneId: ${src.id}\n      destination:\n        zoneId: ${dst.id}\n        portGroupId: ${[\"web-ports\"].id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nimport from provider configured site\n\n```sh\n$ pulumi import unifi:firewall/zonePolicy:ZonePolicy mynetwork 5dc28e5e9106d105bdc87217\n```\n\nimport from another site\n\n```sh\n$ pulumi import unifi:firewall/zonePolicy:ZonePolicy mynetwork zone:5dc28e5e9106d105bdc87217\n```\n\n","properties":{"action":{"type":"string","description":"Determines which action to take on matching traffic. Must be one of `BLOCK`, `ALLOW`, or `REJECT`.\n"},"autoAllowReturnTraffic":{"type":"boolean","description":"Creates a built-in policy for the opposite Zone Pair to automatically allow the return traffic. If disabled, return traffic must be manually allowed\n"},"connectionStateType":{"type":"string","description":"Optionally match on a firewall connection state such as traffic associated with an already existing connection. Valid values are `ALL`, `RESPOND_ONLY`, or `CUSTOM`.\n"},"connectionStates":{"type":"array","items":{"type":"string"},"description":"Connection states to match when \u003cspan pulumi-lang-nodejs=\"`connectionStateType`\" pulumi-lang-dotnet=\"`ConnectionStateType`\" pulumi-lang-go=\"`connectionStateType`\" pulumi-lang-python=\"`connection_state_type`\" pulumi-lang-yaml=\"`connectionStateType`\" pulumi-lang-java=\"`connectionStateType`\"\u003e`connection_state_type`\u003c/span\u003e is `CUSTOM`. Valid values include `ESTABLISHED`, `NEW`, `RELATED`, and `INVALID`.\n"},"description":{"type":"string","description":"Description of the firewall zone policy.\n"},"destination":{"$ref":"#/types/unifi:firewall/ZonePolicyDestination:ZonePolicyDestination","description":"The zone matching the destination of the traffic. Optionally match on a specific destination inside the zone.\n"},"enabled":{"type":"boolean","description":"Enable the policy\n"},"index":{"type":"integer","description":"Priority index for the policy.\n"},"ipVersion":{"type":"string","description":"Optionally match on only IPv4 or IPv6. Valid values are `BOTH`, `IPV4`, or `IPV6`.\n"},"logging":{"type":"boolean","description":"Enable to generate syslog entries when traffic is matched.\n"},"matchIpSecType":{"type":"string","description":"Optionally match on traffic encrypted by IPsec. This is typically used for Ipsec Policy-Based VPNs. Valid values are `MATCH_IP_SEC` or `MATCH_NON_IP_SEC`.\n"},"matchOppositeProtocol":{"type":"boolean","description":"Whether to match the opposite protocol.\n"},"name":{"type":"string","description":"The name of the firewall zone policy.\n"},"protocol":{"type":"string","description":"Optionally match a specific protocol. Valid values include: \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tcpUdp`\" pulumi-lang-dotnet=\"`TcpUdp`\" pulumi-lang-go=\"`tcpUdp`\" pulumi-lang-python=\"`tcp_udp`\" pulumi-lang-yaml=\"`tcpUdp`\" pulumi-lang-java=\"`tcpUdp`\"\u003e`tcp_udp`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e, etc.\n"},"schedule":{"$ref":"#/types/unifi:firewall/ZonePolicySchedule:ZonePolicySchedule","description":"Enforce this policy at specific times.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"source":{"$ref":"#/types/unifi:firewall/ZonePolicySource:ZonePolicySource","description":"The zone matching the source of the traffic. Optionally match on a specific source inside the zone.\n"}},"required":["action","autoAllowReturnTraffic","connectionStateType","destination","enabled","index","ipVersion","logging","matchOppositeProtocol","name","protocol","schedule","site","source"],"inputProperties":{"action":{"type":"string","description":"Determines which action to take on matching traffic. Must be one of `BLOCK`, `ALLOW`, or `REJECT`.\n"},"autoAllowReturnTraffic":{"type":"boolean","description":"Creates a built-in policy for the opposite Zone Pair to automatically allow the return traffic. If disabled, return traffic must be manually allowed\n"},"connectionStateType":{"type":"string","description":"Optionally match on a firewall connection state such as traffic associated with an already existing connection. Valid values are `ALL`, `RESPOND_ONLY`, or `CUSTOM`.\n"},"connectionStates":{"type":"array","items":{"type":"string"},"description":"Connection states to match when \u003cspan pulumi-lang-nodejs=\"`connectionStateType`\" pulumi-lang-dotnet=\"`ConnectionStateType`\" pulumi-lang-go=\"`connectionStateType`\" pulumi-lang-python=\"`connection_state_type`\" pulumi-lang-yaml=\"`connectionStateType`\" pulumi-lang-java=\"`connectionStateType`\"\u003e`connection_state_type`\u003c/span\u003e is `CUSTOM`. Valid values include `ESTABLISHED`, `NEW`, `RELATED`, and `INVALID`.\n"},"description":{"type":"string","description":"Description of the firewall zone policy.\n"},"destination":{"$ref":"#/types/unifi:firewall/ZonePolicyDestination:ZonePolicyDestination","description":"The zone matching the destination of the traffic. Optionally match on a specific destination inside the zone.\n"},"enabled":{"type":"boolean","description":"Enable the policy\n"},"index":{"type":"integer","description":"Priority index for the policy.\n"},"ipVersion":{"type":"string","description":"Optionally match on only IPv4 or IPv6. Valid values are `BOTH`, `IPV4`, or `IPV6`.\n"},"logging":{"type":"boolean","description":"Enable to generate syslog entries when traffic is matched.\n"},"matchIpSecType":{"type":"string","description":"Optionally match on traffic encrypted by IPsec. This is typically used for Ipsec Policy-Based VPNs. Valid values are `MATCH_IP_SEC` or `MATCH_NON_IP_SEC`.\n"},"matchOppositeProtocol":{"type":"boolean","description":"Whether to match the opposite protocol.\n"},"name":{"type":"string","description":"The name of the firewall zone policy.\n"},"protocol":{"type":"string","description":"Optionally match a specific protocol. Valid values include: \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tcpUdp`\" pulumi-lang-dotnet=\"`TcpUdp`\" pulumi-lang-go=\"`tcpUdp`\" pulumi-lang-python=\"`tcp_udp`\" pulumi-lang-yaml=\"`tcpUdp`\" pulumi-lang-java=\"`tcpUdp`\"\u003e`tcp_udp`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e, etc.\n"},"schedule":{"$ref":"#/types/unifi:firewall/ZonePolicySchedule:ZonePolicySchedule","description":"Enforce this policy at specific times.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"source":{"$ref":"#/types/unifi:firewall/ZonePolicySource:ZonePolicySource","description":"The zone matching the source of the traffic. Optionally match on a specific source inside the zone.\n"}},"requiredInputs":["action","destination","source"],"stateInputs":{"description":"Input properties used for looking up and filtering ZonePolicy resources.\n","properties":{"action":{"type":"string","description":"Determines which action to take on matching traffic. Must be one of `BLOCK`, `ALLOW`, or `REJECT`.\n"},"autoAllowReturnTraffic":{"type":"boolean","description":"Creates a built-in policy for the opposite Zone Pair to automatically allow the return traffic. If disabled, return traffic must be manually allowed\n"},"connectionStateType":{"type":"string","description":"Optionally match on a firewall connection state such as traffic associated with an already existing connection. Valid values are `ALL`, `RESPOND_ONLY`, or `CUSTOM`.\n"},"connectionStates":{"type":"array","items":{"type":"string"},"description":"Connection states to match when \u003cspan pulumi-lang-nodejs=\"`connectionStateType`\" pulumi-lang-dotnet=\"`ConnectionStateType`\" pulumi-lang-go=\"`connectionStateType`\" pulumi-lang-python=\"`connection_state_type`\" pulumi-lang-yaml=\"`connectionStateType`\" pulumi-lang-java=\"`connectionStateType`\"\u003e`connection_state_type`\u003c/span\u003e is `CUSTOM`. Valid values include `ESTABLISHED`, `NEW`, `RELATED`, and `INVALID`.\n"},"description":{"type":"string","description":"Description of the firewall zone policy.\n"},"destination":{"$ref":"#/types/unifi:firewall/ZonePolicyDestination:ZonePolicyDestination","description":"The zone matching the destination of the traffic. Optionally match on a specific destination inside the zone.\n"},"enabled":{"type":"boolean","description":"Enable the policy\n"},"index":{"type":"integer","description":"Priority index for the policy.\n"},"ipVersion":{"type":"string","description":"Optionally match on only IPv4 or IPv6. Valid values are `BOTH`, `IPV4`, or `IPV6`.\n"},"logging":{"type":"boolean","description":"Enable to generate syslog entries when traffic is matched.\n"},"matchIpSecType":{"type":"string","description":"Optionally match on traffic encrypted by IPsec. This is typically used for Ipsec Policy-Based VPNs. Valid values are `MATCH_IP_SEC` or `MATCH_NON_IP_SEC`.\n"},"matchOppositeProtocol":{"type":"boolean","description":"Whether to match the opposite protocol.\n"},"name":{"type":"string","description":"The name of the firewall zone policy.\n"},"protocol":{"type":"string","description":"Optionally match a specific protocol. Valid values include: \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tcpUdp`\" pulumi-lang-dotnet=\"`TcpUdp`\" pulumi-lang-go=\"`tcpUdp`\" pulumi-lang-python=\"`tcp_udp`\" pulumi-lang-yaml=\"`tcpUdp`\" pulumi-lang-java=\"`tcpUdp`\"\u003e`tcp_udp`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e, etc.\n"},"schedule":{"$ref":"#/types/unifi:firewall/ZonePolicySchedule:ZonePolicySchedule","description":"Enforce this policy at specific times.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"source":{"$ref":"#/types/unifi:firewall/ZonePolicySource:ZonePolicySource","description":"The zone matching the source of the traffic. Optionally match on a specific source inside the zone.\n"}},"type":"object"}},"unifi:iam/group:Group":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.iam.Group`\" pulumi-lang-dotnet=\"`unifi.iam.Group`\" pulumi-lang-go=\"`iam.Group`\" pulumi-lang-python=\"`iam.Group`\" pulumi-lang-yaml=\"`unifi.iam.Group`\" pulumi-lang-java=\"`unifi.iam.Group`\"\u003e`unifi.iam.Group`\u003c/span\u003e resource manages client groups in the UniFi controller, which allow you to apply common settings and restrictions to multiple network clients.\n\nUser groups are primarily used for:\n  * Implementing Quality of Service (QoS) policies\n  * Setting bandwidth limits for different types of users\n  * Organizing clients into logical groups (e.g., Staff, Guests, IoT devices)\n\nKey features include:\n  * Download rate limiting\n  * Upload rate limiting\n  * Group-based policy application\n\nUser groups are particularly useful in:\n  * Educational environments (different policies for staff and students)\n  * Guest networks (limiting guest bandwidth)\n  * Shared office spaces (managing different tenant groups)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst wifi = new unifi.iam.Group(\"wifi\", {\n    name: \"wifi\",\n    qosRateMaxDown: 2000,\n    qosRateMaxUp: 10,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nwifi = unifi.iam.Group(\"wifi\",\n    name=\"wifi\",\n    qos_rate_max_down=2000,\n    qos_rate_max_up=10)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var wifi = new Unifi.IAM.Group(\"wifi\", new()\n    {\n        Name = \"wifi\",\n        QosRateMaxDown = 2000,\n        QosRateMaxUp = 10,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/iam\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.NewGroup(ctx, \"wifi\", \u0026iam.GroupArgs{\n\t\t\tName:           pulumi.String(\"wifi\"),\n\t\t\tQosRateMaxDown: pulumi.Int(2000),\n\t\t\tQosRateMaxUp:   pulumi.Int(10),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.iam.Group;\nimport com.pulumiverse.unifi.iam.GroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var wifi = new Group(\"wifi\", GroupArgs.builder()\n            .name(\"wifi\")\n            .qosRateMaxDown(2000)\n            .qosRateMaxUp(10)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  wifi:\n    type: unifi:iam:Group\n    properties:\n      name: wifi\n      qosRateMaxDown: 2000 # 2mbps\n      qosRateMaxUp: 10 # 10kbps\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nimport using the ID\n\n```sh\n$ pulumi import unifi:iam/group:Group wifi 5fe6261995fe130013456a36\n```\n\n","properties":{"name":{"type":"string","description":"A descriptive name for the user group (e.g., 'Staff', 'Guests', 'IoT Devices'). This name will be displayed in the UniFi controller interface and used when assigning clients to the group.\n"},"qosRateMaxDown":{"type":"integer","description":"The maximum allowed download speed in Kbps (kilobits per second) for clients in this group. Set to -1 for unlimited. Note: Values of 0 or 1 are not allowed. Defaults to `-1`.\n"},"qosRateMaxUp":{"type":"integer","description":"The maximum allowed upload speed in Kbps (kilobits per second) for clients in this group. Set to -1 for unlimited. Note: Values of 0 or 1 are not allowed. Defaults to `-1`.\n"},"site":{"type":"string","description":"The name of the UniFi site where this user group should be created. If not specified, the default site will be used.\n"}},"required":["name","site"],"inputProperties":{"name":{"type":"string","description":"A descriptive name for the user group (e.g., 'Staff', 'Guests', 'IoT Devices'). This name will be displayed in the UniFi controller interface and used when assigning clients to the group.\n"},"qosRateMaxDown":{"type":"integer","description":"The maximum allowed download speed in Kbps (kilobits per second) for clients in this group. Set to -1 for unlimited. Note: Values of 0 or 1 are not allowed. Defaults to `-1`.\n"},"qosRateMaxUp":{"type":"integer","description":"The maximum allowed upload speed in Kbps (kilobits per second) for clients in this group. Set to -1 for unlimited. Note: Values of 0 or 1 are not allowed. Defaults to `-1`.\n"},"site":{"type":"string","description":"The name of the UniFi site where this user group should be created. If not specified, the default site will be used.\n","willReplaceOnChanges":true}},"stateInputs":{"description":"Input properties used for looking up and filtering Group resources.\n","properties":{"name":{"type":"string","description":"A descriptive name for the user group (e.g., 'Staff', 'Guests', 'IoT Devices'). This name will be displayed in the UniFi controller interface and used when assigning clients to the group.\n"},"qosRateMaxDown":{"type":"integer","description":"The maximum allowed download speed in Kbps (kilobits per second) for clients in this group. Set to -1 for unlimited. Note: Values of 0 or 1 are not allowed. Defaults to `-1`.\n"},"qosRateMaxUp":{"type":"integer","description":"The maximum allowed upload speed in Kbps (kilobits per second) for clients in this group. Set to -1 for unlimited. Note: Values of 0 or 1 are not allowed. Defaults to `-1`.\n"},"site":{"type":"string","description":"The name of the UniFi site where this user group should be created. If not specified, the default site will be used.\n","willReplaceOnChanges":true}},"type":"object"}},"unifi:iam/user:User":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.iam.User`\" pulumi-lang-dotnet=\"`unifi.iam.User`\" pulumi-lang-go=\"`iam.User`\" pulumi-lang-python=\"`iam.User`\" pulumi-lang-yaml=\"`unifi.iam.User`\" pulumi-lang-java=\"`unifi.iam.User`\"\u003e`unifi.iam.User`\u003c/span\u003e resource manages network clients in the UniFi controller, which are identified by their unique MAC addresses.\n\nThis resource allows you to manage:\n  * Fixed IP assignments\n  * User groups and network access\n  * Network blocking and restrictions\n  * Local DNS records\n\nImportant Notes:\n  * Users are automatically created in the controller when devices connect to the network\n  * By default, this resource can take over management of existing users (controlled by \u003cspan pulumi-lang-nodejs=\"`allowExisting`\" pulumi-lang-dotnet=\"`AllowExisting`\" pulumi-lang-go=\"`allowExisting`\" pulumi-lang-python=\"`allow_existing`\" pulumi-lang-yaml=\"`allowExisting`\" pulumi-lang-java=\"`allowExisting`\"\u003e`allow_existing`\u003c/span\u003e)\n  * Users can be 'forgotten' on destroy (controlled by \u003cspan pulumi-lang-nodejs=\"`skipForgetOnDestroy`\" pulumi-lang-dotnet=\"`SkipForgetOnDestroy`\" pulumi-lang-go=\"`skipForgetOnDestroy`\" pulumi-lang-python=\"`skip_forget_on_destroy`\" pulumi-lang-yaml=\"`skipForgetOnDestroy`\" pulumi-lang-java=\"`skipForgetOnDestroy`\"\u003e`skip_forget_on_destroy`\u003c/span\u003e)\n\nThis resource is particularly useful for:\n  * Managing static IP assignments\n  * Implementing access control\n  * Setting up local DNS records\n  * Organizing devices into user groups\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst test = new unifi.iam.User(\"test\", {\n    mac: \"01:23:45:67:89:AB\",\n    name: \"some client\",\n    note: \"my note\",\n    fixedIp: \"10.0.0.50\",\n    networkId: myVlan.id,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\ntest = unifi.iam.User(\"test\",\n    mac=\"01:23:45:67:89:AB\",\n    name=\"some client\",\n    note=\"my note\",\n    fixed_ip=\"10.0.0.50\",\n    network_id=my_vlan[\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Unifi.IAM.User(\"test\", new()\n    {\n        Mac = \"01:23:45:67:89:AB\",\n        Name = \"some client\",\n        Note = \"my note\",\n        FixedIp = \"10.0.0.50\",\n        NetworkId = myVlan.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/iam\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.NewUser(ctx, \"test\", \u0026iam.UserArgs{\n\t\t\tMac:       pulumi.String(\"01:23:45:67:89:AB\"),\n\t\t\tName:      pulumi.String(\"some client\"),\n\t\t\tNote:      pulumi.String(\"my note\"),\n\t\t\tFixedIp:   pulumi.String(\"10.0.0.50\"),\n\t\t\tNetworkId: pulumi.Any(myVlan.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.iam.User;\nimport com.pulumiverse.unifi.iam.UserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new User(\"test\", UserArgs.builder()\n            .mac(\"01:23:45:67:89:AB\")\n            .name(\"some client\")\n            .note(\"my note\")\n            .fixedIp(\"10.0.0.50\")\n            .networkId(myVlan.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: unifi:iam:User\n    properties:\n      mac: 01:23:45:67:89:AB\n      name: some client\n      note: my note\n      fixedIp: 10.0.0.50\n      networkId: ${myVlan.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"allowExisting":{"type":"boolean","description":"Allow this resource to take over management of an existing user in the UniFi controller. When true:\n  * The resource can manage users that were automatically created when devices connected\n  * Existing settings will be overwritten with the values specified in this resource\n  * If false, attempting to manage an existing user will result in an error\n\nUse with caution as it can modify settings for devices already connected to your network."},"blocked":{"type":"boolean","description":"When true, this client will be blocked from accessing the network. Useful for temporarily or permanently restricting network access for specific devices."},"devIdOverride":{"type":"integer","description":"Override the device fingerprint."},"fixedIp":{"type":"string","description":"A static IPv4 address to assign to this client. Ensure this IP is within the client's network range and not already assigned to another device."},"hostname":{"type":"string","description":"The hostname of the user."},"ip":{"type":"string","description":"The IP address of the user."},"localDnsRecord":{"type":"string","description":"A local DNS hostname for this client. When set, other devices on the network can resolve this name to the client's IP address (e.g., 'printer.local', 'nas.home.arpa'). Such DNS record is automatically added to controller's DNS records."},"mac":{"type":"string","description":"The MAC address of the device/client. This is used as the unique identifier and cannot be changed after creation. Must be a valid MAC address format (e.g., '00:11:22:33:44:55'). MAC addresses are case-insensitive."},"name":{"type":"string","description":"A friendly name for the device/client. This helps identify the device in the UniFi interface (eg. 'Living Room TV', 'John's Laptop')."},"networkId":{"type":"string","description":"The ID of the network this client should be associated with. This is particularly important when using VLANs or multiple networks."},"note":{"type":"string","description":"Additional information about the client that you want to record (e.g., 'Company asset tag #12345', 'Guest device - expires 2024-03-01')."},"site":{"type":"string","description":"The name of the UniFi site where this user should be managed. If not specified, the default site will be used."},"skipForgetOnDestroy":{"type":"boolean","description":"When false (default), the client will be 'forgotten' by the controller when this resource is destroyed. Set to true to keep the client's history in the controller after the resource is removed from Terraform."},"userGroupId":{"type":"string","description":"The ID of the user group this client belongs to. User groups can be used to apply common settings and restrictions to multiple clients."}},"required":["hostname","ip","mac","name","site"],"inputProperties":{"allowExisting":{"type":"boolean","description":"Allow this resource to take over management of an existing user in the UniFi controller. When true:\n  * The resource can manage users that were automatically created when devices connected\n  * Existing settings will be overwritten with the values specified in this resource\n  * If false, attempting to manage an existing user will result in an error\n\nUse with caution as it can modify settings for devices already connected to your network."},"blocked":{"type":"boolean","description":"When true, this client will be blocked from accessing the network. Useful for temporarily or permanently restricting network access for specific devices."},"devIdOverride":{"type":"integer","description":"Override the device fingerprint."},"fixedIp":{"type":"string","description":"A static IPv4 address to assign to this client. Ensure this IP is within the client's network range and not already assigned to another device."},"localDnsRecord":{"type":"string","description":"A local DNS hostname for this client. When set, other devices on the network can resolve this name to the client's IP address (e.g., 'printer.local', 'nas.home.arpa'). Such DNS record is automatically added to controller's DNS records."},"mac":{"type":"string","description":"The MAC address of the device/client. This is used as the unique identifier and cannot be changed after creation. Must be a valid MAC address format (e.g., '00:11:22:33:44:55'). MAC addresses are case-insensitive.","willReplaceOnChanges":true},"name":{"type":"string","description":"A friendly name for the device/client. This helps identify the device in the UniFi interface (eg. 'Living Room TV', 'John's Laptop')."},"networkId":{"type":"string","description":"The ID of the network this client should be associated with. This is particularly important when using VLANs or multiple networks."},"note":{"type":"string","description":"Additional information about the client that you want to record (e.g., 'Company asset tag #12345', 'Guest device - expires 2024-03-01')."},"site":{"type":"string","description":"The name of the UniFi site where this user should be managed. If not specified, the default site will be used.","willReplaceOnChanges":true},"skipForgetOnDestroy":{"type":"boolean","description":"When false (default), the client will be 'forgotten' by the controller when this resource is destroyed. Set to true to keep the client's history in the controller after the resource is removed from Terraform."},"userGroupId":{"type":"string","description":"The ID of the user group this client belongs to. User groups can be used to apply common settings and restrictions to multiple clients."}},"requiredInputs":["mac"],"stateInputs":{"description":"Input properties used for looking up and filtering User resources.\n","properties":{"allowExisting":{"type":"boolean","description":"Allow this resource to take over management of an existing user in the UniFi controller. When true:\n  * The resource can manage users that were automatically created when devices connected\n  * Existing settings will be overwritten with the values specified in this resource\n  * If false, attempting to manage an existing user will result in an error\n\nUse with caution as it can modify settings for devices already connected to your network."},"blocked":{"type":"boolean","description":"When true, this client will be blocked from accessing the network. Useful for temporarily or permanently restricting network access for specific devices."},"devIdOverride":{"type":"integer","description":"Override the device fingerprint."},"fixedIp":{"type":"string","description":"A static IPv4 address to assign to this client. Ensure this IP is within the client's network range and not already assigned to another device."},"hostname":{"type":"string","description":"The hostname of the user."},"ip":{"type":"string","description":"The IP address of the user."},"localDnsRecord":{"type":"string","description":"A local DNS hostname for this client. When set, other devices on the network can resolve this name to the client's IP address (e.g., 'printer.local', 'nas.home.arpa'). Such DNS record is automatically added to controller's DNS records."},"mac":{"type":"string","description":"The MAC address of the device/client. This is used as the unique identifier and cannot be changed after creation. Must be a valid MAC address format (e.g., '00:11:22:33:44:55'). MAC addresses are case-insensitive.","willReplaceOnChanges":true},"name":{"type":"string","description":"A friendly name for the device/client. This helps identify the device in the UniFi interface (eg. 'Living Room TV', 'John's Laptop')."},"networkId":{"type":"string","description":"The ID of the network this client should be associated with. This is particularly important when using VLANs or multiple networks."},"note":{"type":"string","description":"Additional information about the client that you want to record (e.g., 'Company asset tag #12345', 'Guest device - expires 2024-03-01')."},"site":{"type":"string","description":"The name of the UniFi site where this user should be managed. If not specified, the default site will be used.","willReplaceOnChanges":true},"skipForgetOnDestroy":{"type":"boolean","description":"When false (default), the client will be 'forgotten' by the controller when this resource is destroyed. Set to true to keep the client's history in the controller after the resource is removed from Terraform."},"userGroupId":{"type":"string","description":"The ID of the user group this client belongs to. User groups can be used to apply common settings and restrictions to multiple clients."}},"type":"object"}},"unifi:index/account:Account":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.Account`\" pulumi-lang-dotnet=\"`unifi.Account`\" pulumi-lang-go=\"`Account`\" pulumi-lang-python=\"`Account`\" pulumi-lang-yaml=\"`unifi.Account`\" pulumi-lang-java=\"`unifi.Account`\"\u003e`unifi.Account`\u003c/span\u003e resource manages RADIUS user accounts in the UniFi controller's built-in RADIUS server.\n\nThis resource is used for:\n  * WPA2/WPA3-Enterprise wireless authentication\n  * 802.1X wired authentication\n  * MAC-based device authentication\n  * VLAN assignment through RADIUS attributes\n\nImportant Notes:\n1. For MAC-based authentication:\n   * Use the device's MAC address as both username and password\n   * Convert MAC address to uppercase with no separators (e.g., '00:11:22:33:44:55' becomes '001122334455')\n2. VLAN Assignment:\n   * If no VLAN is specified in the profile, clients will use the network's untagged VLAN\n   * VLAN assignment uses standard RADIUS tunnel attributes\n\nLimitations:\n  * MAC-based authentication works only for wireless and wired clients\n  * L2TP remote access VPN is not supported with MAC authentication\n  * Accounts must be unique within a site\n","properties":{"name":{"type":"string","description":"The username for this RADIUS account. For regular users, this can be any unique identifier. For MAC-based authentication, this must be the device's MAC address in uppercase with no separators (e.g., '001122334455')."},"networkId":{"type":"string","description":"The ID of the network (VLAN) to assign to clients authenticating with this account. This is used in conjunction with the tunnel attributes to provide VLAN assignment via RADIUS."},"password":{"type":"string","description":"The password for this RADIUS account. For MAC-based authentication, this must match the username (the MAC address). For regular users, this should be a secure password following your organization's password policies.","secret":true},"site":{"type":"string","description":"The name of the UniFi site where this RADIUS account should be created. If not specified, the default site will be used."},"tunnelMediumType":{"type":"integer","description":"The RADIUS tunnel medium type attribute ([RFC 2868](https://tools.ietf.org/html/rfc2868), section 3.2). Common values:\n  * \u003cspan pulumi-lang-nodejs=\"`6`\" pulumi-lang-dotnet=\"`6`\" pulumi-lang-go=\"`6`\" pulumi-lang-python=\"`6`\" pulumi-lang-yaml=\"`6`\" pulumi-lang-java=\"`6`\"\u003e`6`\u003c/span\u003e - 802 (includes Ethernet, Token Ring, FDDI) (default)\n  * \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e - IPv4\n  * \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e - IPv6\n\nOnly change this if you need specific tunneling behavior."},"tunnelType":{"type":"integer","description":"The RADIUS tunnel type attribute ([RFC 2868](https://tools.ietf.org/html/rfc2868), section 3.1). Common values:\n  * \u003cspan pulumi-lang-nodejs=\"`13`\" pulumi-lang-dotnet=\"`13`\" pulumi-lang-go=\"`13`\" pulumi-lang-python=\"`13`\" pulumi-lang-yaml=\"`13`\" pulumi-lang-java=\"`13`\"\u003e`13`\u003c/span\u003e - VLAN (default)\n  * \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e - Point-to-Point Protocol (PPTP)\n  * \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e - Point-to-Point Protocol (L2TP)\n\nOnly change this if you need specific tunneling behavior."}},"required":["name","password","site"],"inputProperties":{"name":{"type":"string","description":"The username for this RADIUS account. For regular users, this can be any unique identifier. For MAC-based authentication, this must be the device's MAC address in uppercase with no separators (e.g., '001122334455')."},"networkId":{"type":"string","description":"The ID of the network (VLAN) to assign to clients authenticating with this account. This is used in conjunction with the tunnel attributes to provide VLAN assignment via RADIUS."},"password":{"type":"string","description":"The password for this RADIUS account. For MAC-based authentication, this must match the username (the MAC address). For regular users, this should be a secure password following your organization's password policies.","secret":true},"site":{"type":"string","description":"The name of the UniFi site where this RADIUS account should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"tunnelMediumType":{"type":"integer","description":"The RADIUS tunnel medium type attribute ([RFC 2868](https://tools.ietf.org/html/rfc2868), section 3.2). Common values:\n  * \u003cspan pulumi-lang-nodejs=\"`6`\" pulumi-lang-dotnet=\"`6`\" pulumi-lang-go=\"`6`\" pulumi-lang-python=\"`6`\" pulumi-lang-yaml=\"`6`\" pulumi-lang-java=\"`6`\"\u003e`6`\u003c/span\u003e - 802 (includes Ethernet, Token Ring, FDDI) (default)\n  * \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e - IPv4\n  * \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e - IPv6\n\nOnly change this if you need specific tunneling behavior."},"tunnelType":{"type":"integer","description":"The RADIUS tunnel type attribute ([RFC 2868](https://tools.ietf.org/html/rfc2868), section 3.1). Common values:\n  * \u003cspan pulumi-lang-nodejs=\"`13`\" pulumi-lang-dotnet=\"`13`\" pulumi-lang-go=\"`13`\" pulumi-lang-python=\"`13`\" pulumi-lang-yaml=\"`13`\" pulumi-lang-java=\"`13`\"\u003e`13`\u003c/span\u003e - VLAN (default)\n  * \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e - Point-to-Point Protocol (PPTP)\n  * \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e - Point-to-Point Protocol (L2TP)\n\nOnly change this if you need specific tunneling behavior."}},"requiredInputs":["password"],"stateInputs":{"description":"Input properties used for looking up and filtering Account resources.\n","properties":{"name":{"type":"string","description":"The username for this RADIUS account. For regular users, this can be any unique identifier. For MAC-based authentication, this must be the device's MAC address in uppercase with no separators (e.g., '001122334455')."},"networkId":{"type":"string","description":"The ID of the network (VLAN) to assign to clients authenticating with this account. This is used in conjunction with the tunnel attributes to provide VLAN assignment via RADIUS."},"password":{"type":"string","description":"The password for this RADIUS account. For MAC-based authentication, this must match the username (the MAC address). For regular users, this should be a secure password following your organization's password policies.","secret":true},"site":{"type":"string","description":"The name of the UniFi site where this RADIUS account should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"tunnelMediumType":{"type":"integer","description":"The RADIUS tunnel medium type attribute ([RFC 2868](https://tools.ietf.org/html/rfc2868), section 3.2). Common values:\n  * \u003cspan pulumi-lang-nodejs=\"`6`\" pulumi-lang-dotnet=\"`6`\" pulumi-lang-go=\"`6`\" pulumi-lang-python=\"`6`\" pulumi-lang-yaml=\"`6`\" pulumi-lang-java=\"`6`\"\u003e`6`\u003c/span\u003e - 802 (includes Ethernet, Token Ring, FDDI) (default)\n  * \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e - IPv4\n  * \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e - IPv6\n\nOnly change this if you need specific tunneling behavior."},"tunnelType":{"type":"integer","description":"The RADIUS tunnel type attribute ([RFC 2868](https://tools.ietf.org/html/rfc2868), section 3.1). Common values:\n  * \u003cspan pulumi-lang-nodejs=\"`13`\" pulumi-lang-dotnet=\"`13`\" pulumi-lang-go=\"`13`\" pulumi-lang-python=\"`13`\" pulumi-lang-yaml=\"`13`\" pulumi-lang-java=\"`13`\"\u003e`13`\u003c/span\u003e - VLAN (default)\n  * \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e - Point-to-Point Protocol (PPTP)\n  * \u003cspan pulumi-lang-nodejs=\"`9`\" pulumi-lang-dotnet=\"`9`\" pulumi-lang-go=\"`9`\" pulumi-lang-python=\"`9`\" pulumi-lang-yaml=\"`9`\" pulumi-lang-java=\"`9`\"\u003e`9`\u003c/span\u003e - Point-to-Point Protocol (L2TP)\n\nOnly change this if you need specific tunneling behavior."}},"type":"object"}},"unifi:index/device:Device":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.Device`\" pulumi-lang-dotnet=\"`unifi.Device`\" pulumi-lang-go=\"`Device`\" pulumi-lang-python=\"`Device`\" pulumi-lang-yaml=\"`unifi.Device`\" pulumi-lang-java=\"`unifi.Device`\"\u003e`unifi.Device`\u003c/span\u003e resource manages UniFi network devices such as access points, switches, gateways, etc.\n\nDevices must first be adopted by the UniFi controller before they can be managed through Terraform. This resource cannot create new devices, but instead allows you to manage existing devices that have already been adopted. The recommended approach is to adopt devices through the UniFi controller UI first, then import them into Terraform using the device's MAC address.\n\nThis resource supports managing device names, port configurations, and other device-specific settings.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst disabled = unifi.port.getProfile({\n    name: \"Disabled\",\n});\nconst poe = new unifi.port.Profile(\"poe\", {\n    name: \"poe\",\n    forward: \"customize\",\n    nativeNetworkconfId: nativeNetworkId,\n    taggedNetworkconfIds: [someVlanNetworkId],\n    poeMode: \"auto\",\n});\nconst us24Poe = new unifi.Device(\"us_24_poe\", {\n    mac: \"01:23:45:67:89:AB\",\n    name: \"Switch with POE\",\n    portOverrides: [\n        {\n            number: 1,\n            name: \"port w/ poe\",\n            portProfileId: poe.id,\n        },\n        {\n            number: 2,\n            name: \"disabled\",\n            portProfileId: disabled.then(disabled =\u003e disabled.id),\n        },\n        {\n            number: 11,\n            opMode: \"aggregate\",\n            aggregateNumPorts: 2,\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_unifi as unifi\nimport pulumiverse_unifi as unifi\n\ndisabled = unifi.port.get_profile(name=\"Disabled\")\npoe = unifi.port.Profile(\"poe\",\n    name=\"poe\",\n    forward=\"customize\",\n    native_networkconf_id=native_network_id,\n    tagged_networkconf_ids=[some_vlan_network_id],\n    poe_mode=\"auto\")\nus24_poe = unifi.Device(\"us_24_poe\",\n    mac=\"01:23:45:67:89:AB\",\n    name=\"Switch with POE\",\n    port_overrides=[\n        {\n            \"number\": 1,\n            \"name\": \"port w/ poe\",\n            \"port_profile_id\": poe.id,\n        },\n        {\n            \"number\": 2,\n            \"name\": \"disabled\",\n            \"port_profile_id\": disabled.id,\n        },\n        {\n            \"number\": 11,\n            \"op_mode\": \"aggregate\",\n            \"aggregate_num_ports\": 2,\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var disabled = Unifi.Port.GetProfile.Invoke(new()\n    {\n        Name = \"Disabled\",\n    });\n\n    var poe = new Unifi.Port.Profile(\"poe\", new()\n    {\n        Name = \"poe\",\n        Forward = \"customize\",\n        NativeNetworkconfId = nativeNetworkId,\n        TaggedNetworkconfIds = new[]\n        {\n            someVlanNetworkId,\n        },\n        PoeMode = \"auto\",\n    });\n\n    var us24Poe = new Unifi.Device(\"us_24_poe\", new()\n    {\n        Mac = \"01:23:45:67:89:AB\",\n        Name = \"Switch with POE\",\n        PortOverrides = new[]\n        {\n            new Unifi.Inputs.DevicePortOverrideArgs\n            {\n                Number = 1,\n                Name = \"port w/ poe\",\n                PortProfileId = poe.Id,\n            },\n            new Unifi.Inputs.DevicePortOverrideArgs\n            {\n                Number = 2,\n                Name = \"disabled\",\n                PortProfileId = disabled.Apply(getProfileResult =\u003e getProfileResult.Id),\n            },\n            new Unifi.Inputs.DevicePortOverrideArgs\n            {\n                Number = 11,\n                OpMode = \"aggregate\",\n                AggregateNumPorts = 2,\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/port\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdisabled, err := port.LookupProfile(ctx, \u0026port.LookupProfileArgs{\n\t\t\tName: pulumi.StringRef(\"Disabled\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpoe, err := port.NewProfile(ctx, \"poe\", \u0026port.ProfileArgs{\n\t\t\tName:                pulumi.String(\"poe\"),\n\t\t\tForward:             pulumi.String(\"customize\"),\n\t\t\tNativeNetworkconfId: pulumi.Any(nativeNetworkId),\n\t\t\tTaggedNetworkconfIds: []interface{}{\n\t\t\t\tsomeVlanNetworkId,\n\t\t\t},\n\t\t\tPoeMode: pulumi.String(\"auto\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = unifi.NewDevice(ctx, \"us_24_poe\", \u0026unifi.DeviceArgs{\n\t\t\tMac:  pulumi.String(\"01:23:45:67:89:AB\"),\n\t\t\tName: pulumi.String(\"Switch with POE\"),\n\t\t\tPortOverrides: unifi.DevicePortOverrideArray{\n\t\t\t\t\u0026unifi.DevicePortOverrideArgs{\n\t\t\t\t\tNumber:        pulumi.Int(1),\n\t\t\t\t\tName:          pulumi.String(\"port w/ poe\"),\n\t\t\t\t\tPortProfileId: poe.ID(),\n\t\t\t\t},\n\t\t\t\t\u0026unifi.DevicePortOverrideArgs{\n\t\t\t\t\tNumber:        pulumi.Int(2),\n\t\t\t\t\tName:          pulumi.String(\"disabled\"),\n\t\t\t\t\tPortProfileId: pulumi.String(disabled.Id),\n\t\t\t\t},\n\t\t\t\t\u0026unifi.DevicePortOverrideArgs{\n\t\t\t\t\tNumber:            pulumi.Int(11),\n\t\t\t\t\tOpMode:            pulumi.String(\"aggregate\"),\n\t\t\t\t\tAggregateNumPorts: pulumi.Int(2),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.unifi.port.PortFunctions;\nimport com.pulumi.unifi.port.inputs.GetProfileArgs;\nimport com.pulumiverse.unifi.port.Profile;\nimport com.pulumiverse.unifi.port.ProfileArgs;\nimport com.pulumiverse.unifi.Device;\nimport com.pulumiverse.unifi.DeviceArgs;\nimport com.pulumi.unifi.inputs.DevicePortOverrideArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var disabled = PortFunctions.getProfile(GetProfileArgs.builder()\n            .name(\"Disabled\")\n            .build());\n\n        var poe = new Profile(\"poe\", ProfileArgs.builder()\n            .name(\"poe\")\n            .forward(\"customize\")\n            .nativeNetworkconfId(nativeNetworkId)\n            .taggedNetworkconfIds(List.of(someVlanNetworkId))\n            .poeMode(\"auto\")\n            .build());\n\n        var us24Poe = new Device(\"us24Poe\", DeviceArgs.builder()\n            .mac(\"01:23:45:67:89:AB\")\n            .name(\"Switch with POE\")\n            .portOverrides(            \n                DevicePortOverrideArgs.builder()\n                    .number(1)\n                    .name(\"port w/ poe\")\n                    .portProfileId(poe.id())\n                    .build(),\n                DevicePortOverrideArgs.builder()\n                    .number(2)\n                    .name(\"disabled\")\n                    .portProfileId(disabled.id())\n                    .build(),\n                DevicePortOverrideArgs.builder()\n                    .number(11)\n                    .opMode(\"aggregate\")\n                    .aggregateNumPorts(2)\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  poe:\n    type: unifi:port:Profile\n    properties:\n      name: poe\n      forward: customize\n      nativeNetworkconfId: ${nativeNetworkId}\n      taggedNetworkconfIds:\n        - ${someVlanNetworkId}\n      poeMode: auto\n  us24Poe:\n    type: unifi:Device\n    name: us_24_poe\n    properties:\n      mac: 01:23:45:67:89:AB\n      name: Switch with POE\n      portOverrides:\n        - number: 1\n          name: port w/ poe\n          portProfileId: ${poe.id}\n        - number: 2\n          name: disabled\n          portProfileId: ${disabled.id}\n        - number: 11\n          opMode: aggregate\n          aggregateNumPorts: 2\nvariables:\n  disabled:\n    fn::invoke:\n      function: unifi:port:getProfile\n      arguments:\n        name: Disabled\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"allowAdoption":{"type":"boolean","description":"Whether to automatically adopt the device when creating this resource. When true:\n* The controller will attempt to adopt the device\n* Device must be in a pending adoption state\n* Device must be accessible on the network\nSet to false if you want to manage adoption manually."},"disabled":{"type":"boolean","description":"Whether the device is administratively disabled. When true, the device will not forward traffic or provide services."},"forgetOnDestroy":{"type":"boolean","description":"Whether to forget (un-adopt) the device when this resource is destroyed. When true:\n* The device will be removed from the controller\n* The device will need to be readopted to be managed again\n* Device configuration will be reset\nSet to false to keep the device adopted when removing from Terraform management."},"mac":{"type":"string","description":"The MAC address of the device in standard format (e.g., 'aa:bb:cc:dd:ee:ff'). This is used to identify and manage specific devices that have already been adopted by the controller."},"name":{"type":"string","description":"A friendly name for the device that will be displayed in the UniFi controller UI. Examples:\n* 'Office-AP-1' for an access point\n* 'Core-Switch-01' for a switch\n* 'Main-Gateway' for a gateway\nChoose descriptive names that indicate location and purpose."},"portOverrides":{"type":"array","items":{"$ref":"#/types/unifi:index/DevicePortOverride:DevicePortOverride"},"description":"A list of port-specific configuration overrides for UniFi switches. This allows you to customize individual port settings such as:\n  * Port names and labels for easy identification\n  * Port profiles for VLAN and security settings\n  * Operating modes for special functions\n\nCommon use cases include:\n  * Setting up trunk ports for inter-switch connections\n  * Configuring PoE settings for powered devices\n  * Creating mirrored ports for network monitoring\n  * Setting up link aggregation between switches or servers"},"site":{"type":"string","description":"The name of the UniFi site where the device is located. If not specified, the default site will be used."}},"required":["disabled","mac","name","site"],"inputProperties":{"allowAdoption":{"type":"boolean","description":"Whether to automatically adopt the device when creating this resource. When true:\n* The controller will attempt to adopt the device\n* Device must be in a pending adoption state\n* Device must be accessible on the network\nSet to false if you want to manage adoption manually."},"forgetOnDestroy":{"type":"boolean","description":"Whether to forget (un-adopt) the device when this resource is destroyed. When true:\n* The device will be removed from the controller\n* The device will need to be readopted to be managed again\n* Device configuration will be reset\nSet to false to keep the device adopted when removing from Terraform management."},"mac":{"type":"string","description":"The MAC address of the device in standard format (e.g., 'aa:bb:cc:dd:ee:ff'). This is used to identify and manage specific devices that have already been adopted by the controller.","willReplaceOnChanges":true},"name":{"type":"string","description":"A friendly name for the device that will be displayed in the UniFi controller UI. Examples:\n* 'Office-AP-1' for an access point\n* 'Core-Switch-01' for a switch\n* 'Main-Gateway' for a gateway\nChoose descriptive names that indicate location and purpose."},"portOverrides":{"type":"array","items":{"$ref":"#/types/unifi:index/DevicePortOverride:DevicePortOverride"},"description":"A list of port-specific configuration overrides for UniFi switches. This allows you to customize individual port settings such as:\n  * Port names and labels for easy identification\n  * Port profiles for VLAN and security settings\n  * Operating modes for special functions\n\nCommon use cases include:\n  * Setting up trunk ports for inter-switch connections\n  * Configuring PoE settings for powered devices\n  * Creating mirrored ports for network monitoring\n  * Setting up link aggregation between switches or servers"},"site":{"type":"string","description":"The name of the UniFi site where the device is located. If not specified, the default site will be used.","willReplaceOnChanges":true}},"stateInputs":{"description":"Input properties used for looking up and filtering Device resources.\n","properties":{"allowAdoption":{"type":"boolean","description":"Whether to automatically adopt the device when creating this resource. When true:\n* The controller will attempt to adopt the device\n* Device must be in a pending adoption state\n* Device must be accessible on the network\nSet to false if you want to manage adoption manually."},"disabled":{"type":"boolean","description":"Whether the device is administratively disabled. When true, the device will not forward traffic or provide services."},"forgetOnDestroy":{"type":"boolean","description":"Whether to forget (un-adopt) the device when this resource is destroyed. When true:\n* The device will be removed from the controller\n* The device will need to be readopted to be managed again\n* Device configuration will be reset\nSet to false to keep the device adopted when removing from Terraform management."},"mac":{"type":"string","description":"The MAC address of the device in standard format (e.g., 'aa:bb:cc:dd:ee:ff'). This is used to identify and manage specific devices that have already been adopted by the controller.","willReplaceOnChanges":true},"name":{"type":"string","description":"A friendly name for the device that will be displayed in the UniFi controller UI. Examples:\n* 'Office-AP-1' for an access point\n* 'Core-Switch-01' for a switch\n* 'Main-Gateway' for a gateway\nChoose descriptive names that indicate location and purpose."},"portOverrides":{"type":"array","items":{"$ref":"#/types/unifi:index/DevicePortOverride:DevicePortOverride"},"description":"A list of port-specific configuration overrides for UniFi switches. This allows you to customize individual port settings such as:\n  * Port names and labels for easy identification\n  * Port profiles for VLAN and security settings\n  * Operating modes for special functions\n\nCommon use cases include:\n  * Setting up trunk ports for inter-switch connections\n  * Configuring PoE settings for powered devices\n  * Creating mirrored ports for network monitoring\n  * Setting up link aggregation between switches or servers"},"site":{"type":"string","description":"The name of the UniFi site where the device is located. If not specified, the default site will be used.","willReplaceOnChanges":true}},"type":"object"}},"unifi:index/dynamicDNS:DynamicDNS":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.DynamicDNS`\" pulumi-lang-dotnet=\"`unifi.DynamicDNS`\" pulumi-lang-go=\"`DynamicDNS`\" pulumi-lang-python=\"`DynamicDNS`\" pulumi-lang-yaml=\"`unifi.DynamicDNS`\" pulumi-lang-java=\"`unifi.DynamicDNS`\"\u003e`unifi.DynamicDNS`\u003c/span\u003e resource manages Dynamic DNS (DDNS).\n\nDynamic DNS allows you to access your network using a domain name even when your public IP address changes. This is useful for:\n  * Remote access to your network\n  * Hosting services from your home/office network\n  * VPN connections to your network\n\nThe resource supports various DDNS providers including:\n  * DynDNS\n  * No-IP\n  * Duck DNS\n  * And many others\n\nEach DDNS configuration can be associated with either the primary (WAN) or secondary (WAN2) interface.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst test = new unifi.DynamicDNS(\"test\", {\n    service: \"dyndns\",\n    hostName: \"my-network.example.com\",\n    server: \"domains.google.com\",\n    login: dnsLogin,\n    password: dnsPassword,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\ntest = unifi.DynamicDNS(\"test\",\n    service=\"dyndns\",\n    host_name=\"my-network.example.com\",\n    server=\"domains.google.com\",\n    login=dns_login,\n    password=dns_password)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Unifi.DynamicDNS(\"test\", new()\n    {\n        Service = \"dyndns\",\n        HostName = \"my-network.example.com\",\n        Server = \"domains.google.com\",\n        Login = dnsLogin,\n        Password = dnsPassword,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := unifi.NewDynamicDNS(ctx, \"test\", \u0026unifi.DynamicDNSArgs{\n\t\t\tService:  pulumi.String(\"dyndns\"),\n\t\t\tHostName: pulumi.String(\"my-network.example.com\"),\n\t\t\tServer:   pulumi.String(\"domains.google.com\"),\n\t\t\tLogin:    pulumi.Any(dnsLogin),\n\t\t\tPassword: pulumi.Any(dnsPassword),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.DynamicDNS;\nimport com.pulumiverse.unifi.DynamicDNSArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new DynamicDNS(\"test\", DynamicDNSArgs.builder()\n            .service(\"dyndns\")\n            .hostName(\"my-network.example.com\")\n            .server(\"domains.google.com\")\n            .login(dnsLogin)\n            .password(dnsPassword)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: unifi:DynamicDNS\n    properties:\n      service: dyndns\n      hostName: my-network.example.com\n      server: domains.google.com\n      login: ${dnsLogin}\n      password: ${dnsPassword}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"hostName":{"type":"string","description":"The fully qualified domain name to update with your current public IP address (e.g., 'myhouse.dyndns.org' or 'myoffice.no-ip.com')."},"interface":{"type":"string","description":"The WAN interface to use for the dynamic DNS updates. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e - Primary WAN interface (default)\n  * \u003cspan pulumi-lang-nodejs=\"`wan2`\" pulumi-lang-dotnet=\"`Wan2`\" pulumi-lang-go=\"`wan2`\" pulumi-lang-python=\"`wan2`\" pulumi-lang-yaml=\"`wan2`\" pulumi-lang-java=\"`wan2`\"\u003e`wan2`\u003c/span\u003e - Secondary WAN interface"},"login":{"type":"string","description":"The username or login for your DDNS provider account."},"password":{"type":"string","description":"The password or token for your DDNS provider account. This value will be stored securely and not displayed in logs.","secret":true},"server":{"type":"string","description":"The update server hostname for your DDNS provider. Usually not required as the UniFi controller knows the correct servers for common providers."},"service":{"type":"string","description":"The Dynamic DNS service provider. Common values include:\n  * \u003cspan pulumi-lang-nodejs=\"`dyndns`\" pulumi-lang-dotnet=\"`Dyndns`\" pulumi-lang-go=\"`dyndns`\" pulumi-lang-python=\"`dyndns`\" pulumi-lang-yaml=\"`dyndns`\" pulumi-lang-java=\"`dyndns`\"\u003e`dyndns`\u003c/span\u003e - DynDNS service\n  * \u003cspan pulumi-lang-nodejs=\"`noip`\" pulumi-lang-dotnet=\"`Noip`\" pulumi-lang-go=\"`noip`\" pulumi-lang-python=\"`noip`\" pulumi-lang-yaml=\"`noip`\" pulumi-lang-java=\"`noip`\"\u003e`noip`\u003c/span\u003e - No-IP service\n  * \u003cspan pulumi-lang-nodejs=\"`duckdns`\" pulumi-lang-dotnet=\"`Duckdns`\" pulumi-lang-go=\"`duckdns`\" pulumi-lang-python=\"`duckdns`\" pulumi-lang-yaml=\"`duckdns`\" pulumi-lang-java=\"`duckdns`\"\u003e`duckdns`\u003c/span\u003e - Duck DNS service\nCheck your UniFi controller for the complete list of supported providers."},"site":{"type":"string","description":"The name of the UniFi site where the dynamic DNS configuration should be created. If not specified, the default site will be used."}},"required":["hostName","service","site"],"inputProperties":{"hostName":{"type":"string","description":"The fully qualified domain name to update with your current public IP address (e.g., 'myhouse.dyndns.org' or 'myoffice.no-ip.com')."},"interface":{"type":"string","description":"The WAN interface to use for the dynamic DNS updates. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e - Primary WAN interface (default)\n  * \u003cspan pulumi-lang-nodejs=\"`wan2`\" pulumi-lang-dotnet=\"`Wan2`\" pulumi-lang-go=\"`wan2`\" pulumi-lang-python=\"`wan2`\" pulumi-lang-yaml=\"`wan2`\" pulumi-lang-java=\"`wan2`\"\u003e`wan2`\u003c/span\u003e - Secondary WAN interface","willReplaceOnChanges":true},"login":{"type":"string","description":"The username or login for your DDNS provider account."},"password":{"type":"string","description":"The password or token for your DDNS provider account. This value will be stored securely and not displayed in logs.","secret":true},"server":{"type":"string","description":"The update server hostname for your DDNS provider. Usually not required as the UniFi controller knows the correct servers for common providers."},"service":{"type":"string","description":"The Dynamic DNS service provider. Common values include:\n  * \u003cspan pulumi-lang-nodejs=\"`dyndns`\" pulumi-lang-dotnet=\"`Dyndns`\" pulumi-lang-go=\"`dyndns`\" pulumi-lang-python=\"`dyndns`\" pulumi-lang-yaml=\"`dyndns`\" pulumi-lang-java=\"`dyndns`\"\u003e`dyndns`\u003c/span\u003e - DynDNS service\n  * \u003cspan pulumi-lang-nodejs=\"`noip`\" pulumi-lang-dotnet=\"`Noip`\" pulumi-lang-go=\"`noip`\" pulumi-lang-python=\"`noip`\" pulumi-lang-yaml=\"`noip`\" pulumi-lang-java=\"`noip`\"\u003e`noip`\u003c/span\u003e - No-IP service\n  * \u003cspan pulumi-lang-nodejs=\"`duckdns`\" pulumi-lang-dotnet=\"`Duckdns`\" pulumi-lang-go=\"`duckdns`\" pulumi-lang-python=\"`duckdns`\" pulumi-lang-yaml=\"`duckdns`\" pulumi-lang-java=\"`duckdns`\"\u003e`duckdns`\u003c/span\u003e - Duck DNS service\nCheck your UniFi controller for the complete list of supported providers.","willReplaceOnChanges":true},"site":{"type":"string","description":"The name of the UniFi site where the dynamic DNS configuration should be created. If not specified, the default site will be used.","willReplaceOnChanges":true}},"requiredInputs":["hostName","service"],"stateInputs":{"description":"Input properties used for looking up and filtering DynamicDNS resources.\n","properties":{"hostName":{"type":"string","description":"The fully qualified domain name to update with your current public IP address (e.g., 'myhouse.dyndns.org' or 'myoffice.no-ip.com')."},"interface":{"type":"string","description":"The WAN interface to use for the dynamic DNS updates. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e - Primary WAN interface (default)\n  * \u003cspan pulumi-lang-nodejs=\"`wan2`\" pulumi-lang-dotnet=\"`Wan2`\" pulumi-lang-go=\"`wan2`\" pulumi-lang-python=\"`wan2`\" pulumi-lang-yaml=\"`wan2`\" pulumi-lang-java=\"`wan2`\"\u003e`wan2`\u003c/span\u003e - Secondary WAN interface","willReplaceOnChanges":true},"login":{"type":"string","description":"The username or login for your DDNS provider account."},"password":{"type":"string","description":"The password or token for your DDNS provider account. This value will be stored securely and not displayed in logs.","secret":true},"server":{"type":"string","description":"The update server hostname for your DDNS provider. Usually not required as the UniFi controller knows the correct servers for common providers."},"service":{"type":"string","description":"The Dynamic DNS service provider. Common values include:\n  * \u003cspan pulumi-lang-nodejs=\"`dyndns`\" pulumi-lang-dotnet=\"`Dyndns`\" pulumi-lang-go=\"`dyndns`\" pulumi-lang-python=\"`dyndns`\" pulumi-lang-yaml=\"`dyndns`\" pulumi-lang-java=\"`dyndns`\"\u003e`dyndns`\u003c/span\u003e - DynDNS service\n  * \u003cspan pulumi-lang-nodejs=\"`noip`\" pulumi-lang-dotnet=\"`Noip`\" pulumi-lang-go=\"`noip`\" pulumi-lang-python=\"`noip`\" pulumi-lang-yaml=\"`noip`\" pulumi-lang-java=\"`noip`\"\u003e`noip`\u003c/span\u003e - No-IP service\n  * \u003cspan pulumi-lang-nodejs=\"`duckdns`\" pulumi-lang-dotnet=\"`Duckdns`\" pulumi-lang-go=\"`duckdns`\" pulumi-lang-python=\"`duckdns`\" pulumi-lang-yaml=\"`duckdns`\" pulumi-lang-java=\"`duckdns`\"\u003e`duckdns`\u003c/span\u003e - Duck DNS service\nCheck your UniFi controller for the complete list of supported providers.","willReplaceOnChanges":true},"site":{"type":"string","description":"The name of the UniFi site where the dynamic DNS configuration should be created. If not specified, the default site will be used.","willReplaceOnChanges":true}},"type":"object"}},"unifi:index/network:Network":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.Network`\" pulumi-lang-dotnet=\"`unifi.Network`\" pulumi-lang-go=\"`Network`\" pulumi-lang-python=\"`Network`\" pulumi-lang-yaml=\"`unifi.Network`\" pulumi-lang-java=\"`unifi.Network`\"\u003e`unifi.Network`\u003c/span\u003e resource manages networks in your UniFi environment, including WAN, LAN, and VLAN networks. This resource enables you to:\n\n* Create and manage different types of networks (corporate, guest, WAN, VLAN-only)\n* Configure network addressing and DHCP settings\n* Set up IPv6 networking features\n* Manage DHCP relay and DNS settings\n* Configure network groups and VLANs\n\nCommon use cases include:\n* Setting up corporate and guest networks with different security policies\n* Configuring WAN connectivity with various authentication methods\n* Creating VLANs for network segmentation\n* Managing DHCP and DNS services for network clients\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst config = new pulumi.Config();\nconst vlanId = config.getNumber(\"vlanId\") || 10;\nconst vlan = new unifi.Network(\"vlan\", {\n    name: \"wifi-vlan\",\n    purpose: \"corporate\",\n    subnet: \"10.0.0.1/24\",\n    vlanId: vlanId,\n    dhcpStart: \"10.0.0.6\",\n    dhcpStop: \"10.0.0.254\",\n    dhcpEnabled: true,\n});\nconst wan = new unifi.Network(\"wan\", {\n    name: \"wan\",\n    purpose: \"wan\",\n    wanNetworkgroup: \"WAN\",\n    wanType: \"pppoe\",\n    wanIp: \"192.168.1.1\",\n    wanEgressQos: 1,\n    wanUsername: \"username\",\n    xWanPassword: \"password\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nconfig = pulumi.Config()\nvlan_id = config.get_float(\"vlanId\")\nif vlan_id is None:\n    vlan_id = 10\nvlan = unifi.Network(\"vlan\",\n    name=\"wifi-vlan\",\n    purpose=\"corporate\",\n    subnet=\"10.0.0.1/24\",\n    vlan_id=vlan_id,\n    dhcp_start=\"10.0.0.6\",\n    dhcp_stop=\"10.0.0.254\",\n    dhcp_enabled=True)\nwan = unifi.Network(\"wan\",\n    name=\"wan\",\n    purpose=\"wan\",\n    wan_networkgroup=\"WAN\",\n    wan_type=\"pppoe\",\n    wan_ip=\"192.168.1.1\",\n    wan_egress_qos=1,\n    wan_username=\"username\",\n    x_wan_password=\"password\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Config();\n    var vlanId = config.GetDouble(\"vlanId\") ?? 10;\n    var vlan = new Unifi.Network(\"vlan\", new()\n    {\n        Name = \"wifi-vlan\",\n        Purpose = \"corporate\",\n        Subnet = \"10.0.0.1/24\",\n        VlanId = vlanId,\n        DhcpStart = \"10.0.0.6\",\n        DhcpStop = \"10.0.0.254\",\n        DhcpEnabled = true,\n    });\n\n    var wan = new Unifi.Network(\"wan\", new()\n    {\n        Name = \"wan\",\n        Purpose = \"wan\",\n        WanNetworkgroup = \"WAN\",\n        WanType = \"pppoe\",\n        WanIp = \"192.168.1.1\",\n        WanEgressQos = 1,\n        WanUsername = \"username\",\n        XWanPassword = \"password\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tvlanId := float64(10)\n\t\tif param := cfg.GetFloat64(\"vlanId\"); param != 0 {\n\t\t\tvlanId = param\n\t\t}\n\t\t_, err := unifi.NewNetwork(ctx, \"vlan\", \u0026unifi.NetworkArgs{\n\t\t\tName:        pulumi.String(\"wifi-vlan\"),\n\t\t\tPurpose:     pulumi.String(\"corporate\"),\n\t\t\tSubnet:      pulumi.String(\"10.0.0.1/24\"),\n\t\t\tVlanId:      pulumi.Float64(vlanId),\n\t\t\tDhcpStart:   pulumi.String(\"10.0.0.6\"),\n\t\t\tDhcpStop:    pulumi.String(\"10.0.0.254\"),\n\t\t\tDhcpEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = unifi.NewNetwork(ctx, \"wan\", \u0026unifi.NetworkArgs{\n\t\t\tName:            pulumi.String(\"wan\"),\n\t\t\tPurpose:         pulumi.String(\"wan\"),\n\t\t\tWanNetworkgroup: pulumi.String(\"WAN\"),\n\t\t\tWanType:         pulumi.String(\"pppoe\"),\n\t\t\tWanIp:           pulumi.String(\"192.168.1.1\"),\n\t\t\tWanEgressQos:    pulumi.Int(1),\n\t\t\tWanUsername:     pulumi.String(\"username\"),\n\t\t\tXWanPassword:    pulumi.String(\"password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.Network;\nimport com.pulumiverse.unifi.NetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var config = ctx.config();\n        final var vlanId = config.get(\"vlanId\").orElse(10);\n        var vlan = new Network(\"vlan\", NetworkArgs.builder()\n            .name(\"wifi-vlan\")\n            .purpose(\"corporate\")\n            .subnet(\"10.0.0.1/24\")\n            .vlanId(vlanId)\n            .dhcpStart(\"10.0.0.6\")\n            .dhcpStop(\"10.0.0.254\")\n            .dhcpEnabled(true)\n            .build());\n\n        var wan = new Network(\"wan\", NetworkArgs.builder()\n            .name(\"wan\")\n            .purpose(\"wan\")\n            .wanNetworkgroup(\"WAN\")\n            .wanType(\"pppoe\")\n            .wanIp(\"192.168.1.1\")\n            .wanEgressQos(1)\n            .wanUsername(\"username\")\n            .xWanPassword(\"password\")\n            .build());\n\n    }\n}\n```\n```yaml\nconfiguration:\n  vlanId:\n    type: number\n    default: 10\nresources:\n  vlan:\n    type: unifi:Network\n    properties:\n      name: wifi-vlan\n      purpose: corporate\n      subnet: 10.0.0.1/24\n      vlanId: ${vlanId}\n      dhcpStart: 10.0.0.6\n      dhcpStop: 10.0.0.254\n      dhcpEnabled: true\n  wan:\n    type: unifi:Network\n    properties:\n      name: wan\n      purpose: wan\n      wanNetworkgroup: WAN\n      wanType: pppoe\n      wanIp: 192.168.1.1\n      wanEgressQos: 1\n      wanUsername: username\n      xWanPassword: password\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nimport from provider configured site\n\n```sh\n$ pulumi import unifi:index/network:Network mynetwork 5dc28e5e9106d105bdc87217\n```\n\nimport from another site\n\n```sh\n$ pulumi import unifi:index/network:Network mynetwork bfa2l6i7:5dc28e5e9106d105bdc87217\n```\n\nimport network by name\n\n```sh\n$ pulumi import unifi:index/network:Network mynetwork name=LAN\n```\n\n","properties":{"dhcpDns":{"type":"array","items":{"type":"string"},"description":"List of IPv4 DNS server addresses to be provided to DHCP clients. Examples:\n* Use ['8.8.8.8', '8.8.4.4'] for Google DNS\n* Use ['1.1.1.1', '1.0.0.1'] for Cloudflare DNS\n* Use internal DNS servers for corporate networks\nMaximum 4 servers can be specified."},"dhcpEnabled":{"type":"boolean","description":"Controls whether DHCP server is enabled for this network. When enabled:\n* The network will automatically assign IP addresses to clients\n* DHCP options (DNS, lease time) will be provided to clients\n* Static IP assignments can still be made outside the DHCP range"},"dhcpLease":{"type":"integer","description":"The DHCP lease time in seconds. Common values:\n* 86400 (1 day) - Default, suitable for most networks\n* 3600 (1 hour) - For testing or temporary networks\n* 604800 (1 week) - For stable networks with static clients\n* 2592000 (30 days) - For very stable networks"},"dhcpRelayEnabled":{"type":"boolean","description":"Enables DHCP relay for this network. When enabled:\n* DHCP requests are forwarded to an external DHCP server\n* Local DHCP server is disabled\n* Useful for centralized DHCP management"},"dhcpStart":{"type":"string","description":"The starting IPv4 address of the DHCP range. Examples:\n* For subnet 192.168.1.0/24, typical start: '192.168.1.100'\n* For subnet 10.0.0.0/24, typical start: '10.0.0.100'\nEnsure this address is within the network's subnet."},"dhcpStop":{"type":"string","description":"The ending IPv4 address of the DHCP range. Examples:\n* For subnet 192.168.1.0/24, typical stop: '192.168.1.254'\n* For subnet 10.0.0.0/24, typical stop: '10.0.0.254'\nMust be greater than\u003cspan pulumi-lang-nodejs=\" dhcpStart \" pulumi-lang-dotnet=\" DhcpStart \" pulumi-lang-go=\" dhcpStart \" pulumi-lang-python=\" dhcp_start \" pulumi-lang-yaml=\" dhcpStart \" pulumi-lang-java=\" dhcpStart \"\u003e dhcp_start \u003c/span\u003eand within the network's subnet."},"dhcpV6Dns":{"type":"array","items":{"type":"string"},"description":"List of IPv6 DNS server addresses for DHCPv6 clients. Examples:\n* Use ['2001:4860:4860::8888', '2001:4860:4860::8844'] for Google DNS\n* Use ['2606:4700:4700::1111', '2606:4700:4700::1001'] for Cloudflare DNS\nOnly used when\u003cspan pulumi-lang-nodejs=\" dhcpV6DnsAuto \" pulumi-lang-dotnet=\" DhcpV6DnsAuto \" pulumi-lang-go=\" dhcpV6DnsAuto \" pulumi-lang-python=\" dhcp_v6_dns_auto \" pulumi-lang-yaml=\" dhcpV6DnsAuto \" pulumi-lang-java=\" dhcpV6DnsAuto \"\u003e dhcp_v6_dns_auto \u003c/span\u003eis false. Maximum of 4 addresses are allowed."},"dhcpV6DnsAuto":{"type":"boolean","description":"Controls DNS server source for DHCPv6 clients:\n* true - Use upstream DNS servers (recommended)\n* false - Use manually specified servers from\u003cspan pulumi-lang-nodejs=\" dhcpV6Dns\n\" pulumi-lang-dotnet=\" DhcpV6Dns\n\" pulumi-lang-go=\" dhcpV6Dns\n\" pulumi-lang-python=\" dhcp_v6_dns\n\" pulumi-lang-yaml=\" dhcpV6Dns\n\" pulumi-lang-java=\" dhcpV6Dns\n\"\u003e dhcp_v6_dns\n\u003c/span\u003eDefault is true for easier management."},"dhcpV6Enabled":{"type":"boolean","description":"Enables stateful DHCPv6 for IPv6 address assignment. When enabled:\n* Provides IPv6 addresses to clients\n* Works alongside SLAAC if configured\n* Allows for more controlled IPv6 addressing"},"dhcpV6Lease":{"type":"integer","description":"The DHCPv6 lease time in seconds. Common values:\n* 86400 (1 day) - Default setting\n* 3600 (1 hour) - For testing\n* 604800 (1 week) - For stable networks\nTypically longer than IPv4 DHCP leases."},"dhcpV6Start":{"type":"string","description":"The starting IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.\nMust be a valid IPv6 address within your allocated IPv6 subnet."},"dhcpV6Stop":{"type":"string","description":"The ending IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.\nMust be after\u003cspan pulumi-lang-nodejs=\" dhcpV6Start \" pulumi-lang-dotnet=\" DhcpV6Start \" pulumi-lang-go=\" dhcpV6Start \" pulumi-lang-python=\" dhcp_v6_start \" pulumi-lang-yaml=\" dhcpV6Start \" pulumi-lang-java=\" dhcpV6Start \"\u003e dhcp_v6_start \u003c/span\u003ein the IPv6 address space."},"dhcpdBootEnabled":{"type":"boolean","description":"Enables DHCP boot options for PXE boot or network boot configurations. When enabled:\n* Allows network devices to boot from a TFTP server\n* Requires\u003cspan pulumi-lang-nodejs=\" dhcpdBootServer \" pulumi-lang-dotnet=\" DhcpdBootServer \" pulumi-lang-go=\" dhcpdBootServer \" pulumi-lang-python=\" dhcpd_boot_server \" pulumi-lang-yaml=\" dhcpdBootServer \" pulumi-lang-java=\" dhcpdBootServer \"\u003e dhcpd_boot_server \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" dhcpdBootFilename \" pulumi-lang-dotnet=\" DhcpdBootFilename \" pulumi-lang-go=\" dhcpdBootFilename \" pulumi-lang-python=\" dhcpd_boot_filename \" pulumi-lang-yaml=\" dhcpdBootFilename \" pulumi-lang-java=\" dhcpdBootFilename \"\u003e dhcpd_boot_filename \u003c/span\u003eto be set\n* Commonly used for diskless workstations or network installations"},"dhcpdBootFilename":{"type":"string","description":"The boot filename to be loaded from the TFTP server. Examples:\n* 'pxelinux.0' - Standard PXE boot loader\n* 'undionly.kpxe' - iPXE boot loader\n* Custom paths for specific boot images"},"dhcpdBootServer":{"type":"string","description":"The IPv4 address of the TFTP server for network boot. This setting:\n* Is required when\u003cspan pulumi-lang-nodejs=\" dhcpdBootEnabled \" pulumi-lang-dotnet=\" DhcpdBootEnabled \" pulumi-lang-go=\" dhcpdBootEnabled \" pulumi-lang-python=\" dhcpd_boot_enabled \" pulumi-lang-yaml=\" dhcpdBootEnabled \" pulumi-lang-java=\" dhcpdBootEnabled \"\u003e dhcpd_boot_enabled \u003c/span\u003eis true\n* Should be a reliable, always-on server\n* Must be accessible to all clients that need to boot"},"domainName":{"type":"string","description":"The domain name for this network. Examples:\n* 'corp.example.com' - For corporate networks\n* 'guest.example.com' - For guest networks\n* 'iot.example.com' - For IoT networks\nUsed for internal DNS resolution and DHCP options."},"enabled":{"type":"boolean","description":"Controls whether this network is active. When disabled:\n* Network will not be available to clients\n* DHCP services will be stopped\n* Existing clients will be disconnected\nUseful for temporary network maintenance or security measures."},"igmpSnooping":{"type":"boolean","description":"Enables IGMP (Internet Group Management Protocol) snooping. When enabled:\n* Optimizes multicast traffic flow\n* Reduces network congestion\n* Improves performance for multicast applications (e.g., IPTV)\nRecommended for networks with multicast traffic."},"internetAccessEnabled":{"type":"boolean","description":"Controls internet access for this network. When disabled:\n* Clients cannot access external networks\n* Internal network access remains available\n* Useful for creating isolated or secure networks"},"ipv6InterfaceType":{"type":"string","description":"Specifies the IPv6 connection type. Must be one of:\n* \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e - IPv6 disabled (default)\n* \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e - Static IPv6 addressing\n* \u003cspan pulumi-lang-nodejs=\"`pd`\" pulumi-lang-dotnet=\"`Pd`\" pulumi-lang-go=\"`pd`\" pulumi-lang-python=\"`pd`\" pulumi-lang-yaml=\"`pd`\" pulumi-lang-java=\"`pd`\"\u003e`pd`\u003c/span\u003e - Prefix Delegation from upstream\n\nChoose based on your IPv6 deployment strategy and ISP capabilities."},"ipv6PdInterface":{"type":"string","description":"The WAN interface to use for IPv6 Prefix Delegation. Options:\n* \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e - Primary WAN interface\n* \u003cspan pulumi-lang-nodejs=\"`wan2`\" pulumi-lang-dotnet=\"`Wan2`\" pulumi-lang-go=\"`wan2`\" pulumi-lang-python=\"`wan2`\" pulumi-lang-yaml=\"`wan2`\" pulumi-lang-java=\"`wan2`\"\u003e`wan2`\u003c/span\u003e - Secondary WAN interface\nOnly applicable when \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is 'pd'."},"ipv6PdPrefixid":{"type":"string","description":"The IPv6 Prefix ID for Prefix Delegation. Used to:\n* Differentiate multiple delegated prefixes\n* Create unique subnets from the delegated prefix\nTypically a hexadecimal value (e.g., '0', '1', 'a1')."},"ipv6PdStart":{"type":"string","description":"The starting IPv6 address for Prefix Delegation range.\nOnly used when \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is 'pd'.\nMust be within the delegated prefix range."},"ipv6PdStop":{"type":"string","description":"The ending IPv6 address for Prefix Delegation range.\nOnly used when \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is 'pd'.\nMust be after \u003cspan pulumi-lang-nodejs=\"`ipv6PdStart`\" pulumi-lang-dotnet=\"`Ipv6PdStart`\" pulumi-lang-go=\"`ipv6PdStart`\" pulumi-lang-python=\"`ipv6_pd_start`\" pulumi-lang-yaml=\"`ipv6PdStart`\" pulumi-lang-java=\"`ipv6PdStart`\"\u003e`ipv6_pd_start`\u003c/span\u003e within the delegated prefix."},"ipv6RaEnable":{"type":"boolean","description":"Enables IPv6 Router Advertisements (RA). When enabled:\n* Announces IPv6 prefix information to clients\n* Enables SLAAC address configuration\n* Required for most IPv6 deployments"},"ipv6RaPreferredLifetime":{"type":"integer","description":"The preferred lifetime (in seconds) for IPv6 addresses in Router Advertisements.\n* Must be less than or equal to \u003cspan pulumi-lang-nodejs=\"`ipv6RaValidLifetime`\" pulumi-lang-dotnet=\"`Ipv6RaValidLifetime`\" pulumi-lang-go=\"`ipv6RaValidLifetime`\" pulumi-lang-python=\"`ipv6_ra_valid_lifetime`\" pulumi-lang-yaml=\"`ipv6RaValidLifetime`\" pulumi-lang-java=\"`ipv6RaValidLifetime`\"\u003e`ipv6_ra_valid_lifetime`\u003c/span\u003e\n* Default: 14400 (4 hours)\n* After this time, addresses become deprecated but still usable"},"ipv6RaPriority":{"type":"string","description":"Sets the priority for IPv6 Router Advertisements. Options:\n* \u003cspan pulumi-lang-nodejs=\"`high`\" pulumi-lang-dotnet=\"`High`\" pulumi-lang-go=\"`high`\" pulumi-lang-python=\"`high`\" pulumi-lang-yaml=\"`high`\" pulumi-lang-java=\"`high`\"\u003e`high`\u003c/span\u003e - Preferred for primary networks\n* \u003cspan pulumi-lang-nodejs=\"`medium`\" pulumi-lang-dotnet=\"`Medium`\" pulumi-lang-go=\"`medium`\" pulumi-lang-python=\"`medium`\" pulumi-lang-yaml=\"`medium`\" pulumi-lang-java=\"`medium`\"\u003e`medium`\u003c/span\u003e - Standard priority\n* \u003cspan pulumi-lang-nodejs=\"`low`\" pulumi-lang-dotnet=\"`Low`\" pulumi-lang-go=\"`low`\" pulumi-lang-python=\"`low`\" pulumi-lang-yaml=\"`low`\" pulumi-lang-java=\"`low`\"\u003e`low`\u003c/span\u003e - For backup or secondary networks\nAffects router selection when multiple IPv6 routers exist."},"ipv6RaValidLifetime":{"type":"integer","description":"The valid lifetime (in seconds) for IPv6 addresses in Router Advertisements.\n* Must be greater than or equal to \u003cspan pulumi-lang-nodejs=\"`ipv6RaPreferredLifetime`\" pulumi-lang-dotnet=\"`Ipv6RaPreferredLifetime`\" pulumi-lang-go=\"`ipv6RaPreferredLifetime`\" pulumi-lang-python=\"`ipv6_ra_preferred_lifetime`\" pulumi-lang-yaml=\"`ipv6RaPreferredLifetime`\" pulumi-lang-java=\"`ipv6RaPreferredLifetime`\"\u003e`ipv6_ra_preferred_lifetime`\u003c/span\u003e\n* Default: 86400 (24 hours)\n* After this time, addresses become invalid"},"ipv6StaticSubnet":{"type":"string","description":"The static IPv6 subnet in CIDR notation (e.g., '2001:db8::/64') when using static IPv6.\nOnly applicable when \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is 'static'.\nMust be a valid IPv6 subnet allocated to your organization."},"multicastDns":{"type":"boolean","description":"Enables Multicast DNS (mDNS/Bonjour/Avahi) on the network. When enabled:\n* Allows device discovery (e.g., printers, Chromecasts)\n* Supports zero-configuration networking\n* Available on Controller version 7 and later"},"name":{"type":"string","description":"The name of the network. This should be a descriptive name that helps identify the network's purpose, such as 'Corporate-Main', 'Guest-Network', or 'IoT-VLAN'."},"networkGroup":{"type":"string","description":"The network group for this network. Default is 'LAN'. For WAN networks, use 'WAN' or 'WAN2'. Network groups help organize and apply policies to multiple networks."},"networkIsolationEnabled":{"type":"boolean","description":"Enables network isolation. When enabled:\n* Prevents communication between clients on this network\n* Each client can only communicate with the gateway\n* Commonly used for guest networks or IoT devices"},"purpose":{"type":"string","description":"The purpose/type of the network. Must be one of:\n* \u003cspan pulumi-lang-nodejs=\"`corporate`\" pulumi-lang-dotnet=\"`Corporate`\" pulumi-lang-go=\"`corporate`\" pulumi-lang-python=\"`corporate`\" pulumi-lang-yaml=\"`corporate`\" pulumi-lang-java=\"`corporate`\"\u003e`corporate`\u003c/span\u003e - Standard network for corporate use with full access\n* \u003cspan pulumi-lang-nodejs=\"`guest`\" pulumi-lang-dotnet=\"`Guest`\" pulumi-lang-go=\"`guest`\" pulumi-lang-python=\"`guest`\" pulumi-lang-yaml=\"`guest`\" pulumi-lang-java=\"`guest`\"\u003e`guest`\u003c/span\u003e - Isolated network for guest access with limited permissions\n* \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e - External network connection (WAN uplink)\n* `vlan-only` - VLAN network without DHCP services"},"site":{"type":"string","description":"The name of the site to associate the network with."},"subnet":{"type":"string","description":"The IPv4 subnet for this network in CIDR notation (e.g., '192.168.1.0/24'). This defines the network's address space and determines the range of IP addresses available for DHCP."},"vlanId":{"type":"integer","description":"The VLAN ID for this network. Valid range is 0-4096. Common uses:\n* 1-4094: Standard VLAN range for network segmentation\n* 0: Untagged/native VLAN\n* \u003e4094: Reserved for special purposes"},"wanDhcpV6PdSize":{"type":"integer","description":"The IPv6 prefix size to request from ISP. Must be between 48 and 64.\nOnly applicable when \u003cspan pulumi-lang-nodejs=\"`wanTypeV6`\" pulumi-lang-dotnet=\"`WanTypeV6`\" pulumi-lang-go=\"`wanTypeV6`\" pulumi-lang-python=\"`wan_type_v6`\" pulumi-lang-yaml=\"`wanTypeV6`\" pulumi-lang-java=\"`wanTypeV6`\"\u003e`wan_type_v6`\u003c/span\u003e is 'dhcpv6'."},"wanDns":{"type":"array","items":{"type":"string"},"description":"List of IPv4 DNS servers for WAN interface. Examples:\n* ISP provided DNS servers\n* Public DNS services (e.g., 8.8.8.8, 1.1.1.1)\n* Maximum 4 servers can be specified"},"wanEgressQos":{"type":"integer","description":"Quality of Service (QoS) priority for WAN egress traffic (0-7).\n* 0 (default) - Best effort\n* 1-4 - Increasing priority\n* 5-7 - Highest priority, use sparingly\nHigher values get preferential treatment."},"wanGateway":{"type":"string","description":"The IPv4 gateway address for WAN interface.\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanType`\" pulumi-lang-dotnet=\"`WanType`\" pulumi-lang-go=\"`wanType`\" pulumi-lang-python=\"`wan_type`\" pulumi-lang-yaml=\"`wanType`\" pulumi-lang-java=\"`wanType`\"\u003e`wan_type`\u003c/span\u003e is 'static'.\nTypically the ISP's router IP address."},"wanGatewayV6":{"type":"string","description":"The IPv6 gateway address for WAN interface.\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanTypeV6`\" pulumi-lang-dotnet=\"`WanTypeV6`\" pulumi-lang-go=\"`wanTypeV6`\" pulumi-lang-python=\"`wan_type_v6`\" pulumi-lang-yaml=\"`wanTypeV6`\" pulumi-lang-java=\"`wanTypeV6`\"\u003e`wan_type_v6`\u003c/span\u003e is 'static'.\nTypically the ISP's router IPv6 address."},"wanIp":{"type":"string","description":"The static IPv4 address for WAN interface.\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanType`\" pulumi-lang-dotnet=\"`WanType`\" pulumi-lang-go=\"`wanType`\" pulumi-lang-python=\"`wan_type`\" pulumi-lang-yaml=\"`wanType`\" pulumi-lang-java=\"`wanType`\"\u003e`wan_type`\u003c/span\u003e is 'static'.\nMust be a valid public IP address assigned by your ISP."},"wanIpv6":{"type":"string","description":"The static IPv6 address for WAN interface.\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanTypeV6`\" pulumi-lang-dotnet=\"`WanTypeV6`\" pulumi-lang-go=\"`wanTypeV6`\" pulumi-lang-python=\"`wan_type_v6`\" pulumi-lang-yaml=\"`wanTypeV6`\" pulumi-lang-java=\"`wanTypeV6`\"\u003e`wan_type_v6`\u003c/span\u003e is 'static'.\nMust be a valid public IPv6 address assigned by your ISP."},"wanNetmask":{"type":"string","description":"The IPv4 netmask for WAN interface (e.g., '255.255.255.0').\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanType`\" pulumi-lang-dotnet=\"`WanType`\" pulumi-lang-go=\"`wanType`\" pulumi-lang-python=\"`wan_type`\" pulumi-lang-yaml=\"`wanType`\" pulumi-lang-java=\"`wanType`\"\u003e`wan_type`\u003c/span\u003e is 'static'.\nMust match the subnet mask provided by your ISP."},"wanNetworkgroup":{"type":"string","description":"The WAN interface group assignment. Options:\n* `WAN` - Primary WAN interface\n* `WAN2` - Secondary WAN interface\n* `WAN_LTE_FAILOVER` - LTE backup connection\nUsed for dual WAN and failover configurations."},"wanPrefixlen":{"type":"integer","description":"The IPv6 prefix length for WAN interface. Must be between 1 and 128.\nOnly applicable when \u003cspan pulumi-lang-nodejs=\"`wanTypeV6`\" pulumi-lang-dotnet=\"`WanTypeV6`\" pulumi-lang-go=\"`wanTypeV6`\" pulumi-lang-python=\"`wan_type_v6`\" pulumi-lang-yaml=\"`wanTypeV6`\" pulumi-lang-java=\"`wanTypeV6`\"\u003e`wan_type_v6`\u003c/span\u003e is 'static'."},"wanType":{"type":"string","description":"The IPv4 WAN connection type. Options:\n* \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - WAN interface disabled\n* \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e - Static IP configuration\n* \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e - Dynamic IP from ISP\n* \u003cspan pulumi-lang-nodejs=\"`pppoe`\" pulumi-lang-dotnet=\"`Pppoe`\" pulumi-lang-go=\"`pppoe`\" pulumi-lang-python=\"`pppoe`\" pulumi-lang-yaml=\"`pppoe`\" pulumi-lang-java=\"`pppoe`\"\u003e`pppoe`\u003c/span\u003e - PPPoE connection (common for DSL)\nChoose based on your ISP's requirements."},"wanTypeV6":{"type":"string","description":"The IPv6 WAN connection type. Options:\n* \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - IPv6 disabled\n* \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e - Static IPv6 configuration\n* \u003cspan pulumi-lang-nodejs=\"`dhcpv6`\" pulumi-lang-dotnet=\"`Dhcpv6`\" pulumi-lang-go=\"`dhcpv6`\" pulumi-lang-python=\"`dhcpv6`\" pulumi-lang-yaml=\"`dhcpv6`\" pulumi-lang-java=\"`dhcpv6`\"\u003e`dhcpv6`\u003c/span\u003e - Dynamic IPv6 from ISP\nChoose based on your ISP's requirements."},"wanUsername":{"type":"string","description":"Username for WAN authentication.\n* Required for PPPoE connections\n* May be needed for some ISP configurations\n* Cannot contain spaces or special characters"},"xWanPassword":{"type":"string","description":"Password for WAN authentication.\n* Required for PPPoE connections\n* May be needed for some ISP configurations\n* Must be kept secret"}},"required":["name","purpose","site"],"inputProperties":{"dhcpDns":{"type":"array","items":{"type":"string"},"description":"List of IPv4 DNS server addresses to be provided to DHCP clients. Examples:\n* Use ['8.8.8.8', '8.8.4.4'] for Google DNS\n* Use ['1.1.1.1', '1.0.0.1'] for Cloudflare DNS\n* Use internal DNS servers for corporate networks\nMaximum 4 servers can be specified."},"dhcpEnabled":{"type":"boolean","description":"Controls whether DHCP server is enabled for this network. When enabled:\n* The network will automatically assign IP addresses to clients\n* DHCP options (DNS, lease time) will be provided to clients\n* Static IP assignments can still be made outside the DHCP range"},"dhcpLease":{"type":"integer","description":"The DHCP lease time in seconds. Common values:\n* 86400 (1 day) - Default, suitable for most networks\n* 3600 (1 hour) - For testing or temporary networks\n* 604800 (1 week) - For stable networks with static clients\n* 2592000 (30 days) - For very stable networks"},"dhcpRelayEnabled":{"type":"boolean","description":"Enables DHCP relay for this network. When enabled:\n* DHCP requests are forwarded to an external DHCP server\n* Local DHCP server is disabled\n* Useful for centralized DHCP management"},"dhcpStart":{"type":"string","description":"The starting IPv4 address of the DHCP range. Examples:\n* For subnet 192.168.1.0/24, typical start: '192.168.1.100'\n* For subnet 10.0.0.0/24, typical start: '10.0.0.100'\nEnsure this address is within the network's subnet."},"dhcpStop":{"type":"string","description":"The ending IPv4 address of the DHCP range. Examples:\n* For subnet 192.168.1.0/24, typical stop: '192.168.1.254'\n* For subnet 10.0.0.0/24, typical stop: '10.0.0.254'\nMust be greater than\u003cspan pulumi-lang-nodejs=\" dhcpStart \" pulumi-lang-dotnet=\" DhcpStart \" pulumi-lang-go=\" dhcpStart \" pulumi-lang-python=\" dhcp_start \" pulumi-lang-yaml=\" dhcpStart \" pulumi-lang-java=\" dhcpStart \"\u003e dhcp_start \u003c/span\u003eand within the network's subnet."},"dhcpV6Dns":{"type":"array","items":{"type":"string"},"description":"List of IPv6 DNS server addresses for DHCPv6 clients. Examples:\n* Use ['2001:4860:4860::8888', '2001:4860:4860::8844'] for Google DNS\n* Use ['2606:4700:4700::1111', '2606:4700:4700::1001'] for Cloudflare DNS\nOnly used when\u003cspan pulumi-lang-nodejs=\" dhcpV6DnsAuto \" pulumi-lang-dotnet=\" DhcpV6DnsAuto \" pulumi-lang-go=\" dhcpV6DnsAuto \" pulumi-lang-python=\" dhcp_v6_dns_auto \" pulumi-lang-yaml=\" dhcpV6DnsAuto \" pulumi-lang-java=\" dhcpV6DnsAuto \"\u003e dhcp_v6_dns_auto \u003c/span\u003eis false. Maximum of 4 addresses are allowed."},"dhcpV6DnsAuto":{"type":"boolean","description":"Controls DNS server source for DHCPv6 clients:\n* true - Use upstream DNS servers (recommended)\n* false - Use manually specified servers from\u003cspan pulumi-lang-nodejs=\" dhcpV6Dns\n\" pulumi-lang-dotnet=\" DhcpV6Dns\n\" pulumi-lang-go=\" dhcpV6Dns\n\" pulumi-lang-python=\" dhcp_v6_dns\n\" pulumi-lang-yaml=\" dhcpV6Dns\n\" pulumi-lang-java=\" dhcpV6Dns\n\"\u003e dhcp_v6_dns\n\u003c/span\u003eDefault is true for easier management."},"dhcpV6Enabled":{"type":"boolean","description":"Enables stateful DHCPv6 for IPv6 address assignment. When enabled:\n* Provides IPv6 addresses to clients\n* Works alongside SLAAC if configured\n* Allows for more controlled IPv6 addressing"},"dhcpV6Lease":{"type":"integer","description":"The DHCPv6 lease time in seconds. Common values:\n* 86400 (1 day) - Default setting\n* 3600 (1 hour) - For testing\n* 604800 (1 week) - For stable networks\nTypically longer than IPv4 DHCP leases."},"dhcpV6Start":{"type":"string","description":"The starting IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.\nMust be a valid IPv6 address within your allocated IPv6 subnet."},"dhcpV6Stop":{"type":"string","description":"The ending IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.\nMust be after\u003cspan pulumi-lang-nodejs=\" dhcpV6Start \" pulumi-lang-dotnet=\" DhcpV6Start \" pulumi-lang-go=\" dhcpV6Start \" pulumi-lang-python=\" dhcp_v6_start \" pulumi-lang-yaml=\" dhcpV6Start \" pulumi-lang-java=\" dhcpV6Start \"\u003e dhcp_v6_start \u003c/span\u003ein the IPv6 address space."},"dhcpdBootEnabled":{"type":"boolean","description":"Enables DHCP boot options for PXE boot or network boot configurations. When enabled:\n* Allows network devices to boot from a TFTP server\n* Requires\u003cspan pulumi-lang-nodejs=\" dhcpdBootServer \" pulumi-lang-dotnet=\" DhcpdBootServer \" pulumi-lang-go=\" dhcpdBootServer \" pulumi-lang-python=\" dhcpd_boot_server \" pulumi-lang-yaml=\" dhcpdBootServer \" pulumi-lang-java=\" dhcpdBootServer \"\u003e dhcpd_boot_server \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" dhcpdBootFilename \" pulumi-lang-dotnet=\" DhcpdBootFilename \" pulumi-lang-go=\" dhcpdBootFilename \" pulumi-lang-python=\" dhcpd_boot_filename \" pulumi-lang-yaml=\" dhcpdBootFilename \" pulumi-lang-java=\" dhcpdBootFilename \"\u003e dhcpd_boot_filename \u003c/span\u003eto be set\n* Commonly used for diskless workstations or network installations"},"dhcpdBootFilename":{"type":"string","description":"The boot filename to be loaded from the TFTP server. Examples:\n* 'pxelinux.0' - Standard PXE boot loader\n* 'undionly.kpxe' - iPXE boot loader\n* Custom paths for specific boot images"},"dhcpdBootServer":{"type":"string","description":"The IPv4 address of the TFTP server for network boot. This setting:\n* Is required when\u003cspan pulumi-lang-nodejs=\" dhcpdBootEnabled \" pulumi-lang-dotnet=\" DhcpdBootEnabled \" pulumi-lang-go=\" dhcpdBootEnabled \" pulumi-lang-python=\" dhcpd_boot_enabled \" pulumi-lang-yaml=\" dhcpdBootEnabled \" pulumi-lang-java=\" dhcpdBootEnabled \"\u003e dhcpd_boot_enabled \u003c/span\u003eis true\n* Should be a reliable, always-on server\n* Must be accessible to all clients that need to boot"},"domainName":{"type":"string","description":"The domain name for this network. Examples:\n* 'corp.example.com' - For corporate networks\n* 'guest.example.com' - For guest networks\n* 'iot.example.com' - For IoT networks\nUsed for internal DNS resolution and DHCP options."},"enabled":{"type":"boolean","description":"Controls whether this network is active. When disabled:\n* Network will not be available to clients\n* DHCP services will be stopped\n* Existing clients will be disconnected\nUseful for temporary network maintenance or security measures."},"igmpSnooping":{"type":"boolean","description":"Enables IGMP (Internet Group Management Protocol) snooping. When enabled:\n* Optimizes multicast traffic flow\n* Reduces network congestion\n* Improves performance for multicast applications (e.g., IPTV)\nRecommended for networks with multicast traffic."},"internetAccessEnabled":{"type":"boolean","description":"Controls internet access for this network. When disabled:\n* Clients cannot access external networks\n* Internal network access remains available\n* Useful for creating isolated or secure networks"},"ipv6InterfaceType":{"type":"string","description":"Specifies the IPv6 connection type. Must be one of:\n* \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e - IPv6 disabled (default)\n* \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e - Static IPv6 addressing\n* \u003cspan pulumi-lang-nodejs=\"`pd`\" pulumi-lang-dotnet=\"`Pd`\" pulumi-lang-go=\"`pd`\" pulumi-lang-python=\"`pd`\" pulumi-lang-yaml=\"`pd`\" pulumi-lang-java=\"`pd`\"\u003e`pd`\u003c/span\u003e - Prefix Delegation from upstream\n\nChoose based on your IPv6 deployment strategy and ISP capabilities."},"ipv6PdInterface":{"type":"string","description":"The WAN interface to use for IPv6 Prefix Delegation. Options:\n* \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e - Primary WAN interface\n* \u003cspan pulumi-lang-nodejs=\"`wan2`\" pulumi-lang-dotnet=\"`Wan2`\" pulumi-lang-go=\"`wan2`\" pulumi-lang-python=\"`wan2`\" pulumi-lang-yaml=\"`wan2`\" pulumi-lang-java=\"`wan2`\"\u003e`wan2`\u003c/span\u003e - Secondary WAN interface\nOnly applicable when \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is 'pd'."},"ipv6PdPrefixid":{"type":"string","description":"The IPv6 Prefix ID for Prefix Delegation. Used to:\n* Differentiate multiple delegated prefixes\n* Create unique subnets from the delegated prefix\nTypically a hexadecimal value (e.g., '0', '1', 'a1')."},"ipv6PdStart":{"type":"string","description":"The starting IPv6 address for Prefix Delegation range.\nOnly used when \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is 'pd'.\nMust be within the delegated prefix range."},"ipv6PdStop":{"type":"string","description":"The ending IPv6 address for Prefix Delegation range.\nOnly used when \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is 'pd'.\nMust be after \u003cspan pulumi-lang-nodejs=\"`ipv6PdStart`\" pulumi-lang-dotnet=\"`Ipv6PdStart`\" pulumi-lang-go=\"`ipv6PdStart`\" pulumi-lang-python=\"`ipv6_pd_start`\" pulumi-lang-yaml=\"`ipv6PdStart`\" pulumi-lang-java=\"`ipv6PdStart`\"\u003e`ipv6_pd_start`\u003c/span\u003e within the delegated prefix."},"ipv6RaEnable":{"type":"boolean","description":"Enables IPv6 Router Advertisements (RA). When enabled:\n* Announces IPv6 prefix information to clients\n* Enables SLAAC address configuration\n* Required for most IPv6 deployments"},"ipv6RaPreferredLifetime":{"type":"integer","description":"The preferred lifetime (in seconds) for IPv6 addresses in Router Advertisements.\n* Must be less than or equal to \u003cspan pulumi-lang-nodejs=\"`ipv6RaValidLifetime`\" pulumi-lang-dotnet=\"`Ipv6RaValidLifetime`\" pulumi-lang-go=\"`ipv6RaValidLifetime`\" pulumi-lang-python=\"`ipv6_ra_valid_lifetime`\" pulumi-lang-yaml=\"`ipv6RaValidLifetime`\" pulumi-lang-java=\"`ipv6RaValidLifetime`\"\u003e`ipv6_ra_valid_lifetime`\u003c/span\u003e\n* Default: 14400 (4 hours)\n* After this time, addresses become deprecated but still usable"},"ipv6RaPriority":{"type":"string","description":"Sets the priority for IPv6 Router Advertisements. Options:\n* \u003cspan pulumi-lang-nodejs=\"`high`\" pulumi-lang-dotnet=\"`High`\" pulumi-lang-go=\"`high`\" pulumi-lang-python=\"`high`\" pulumi-lang-yaml=\"`high`\" pulumi-lang-java=\"`high`\"\u003e`high`\u003c/span\u003e - Preferred for primary networks\n* \u003cspan pulumi-lang-nodejs=\"`medium`\" pulumi-lang-dotnet=\"`Medium`\" pulumi-lang-go=\"`medium`\" pulumi-lang-python=\"`medium`\" pulumi-lang-yaml=\"`medium`\" pulumi-lang-java=\"`medium`\"\u003e`medium`\u003c/span\u003e - Standard priority\n* \u003cspan pulumi-lang-nodejs=\"`low`\" pulumi-lang-dotnet=\"`Low`\" pulumi-lang-go=\"`low`\" pulumi-lang-python=\"`low`\" pulumi-lang-yaml=\"`low`\" pulumi-lang-java=\"`low`\"\u003e`low`\u003c/span\u003e - For backup or secondary networks\nAffects router selection when multiple IPv6 routers exist."},"ipv6RaValidLifetime":{"type":"integer","description":"The valid lifetime (in seconds) for IPv6 addresses in Router Advertisements.\n* Must be greater than or equal to \u003cspan pulumi-lang-nodejs=\"`ipv6RaPreferredLifetime`\" pulumi-lang-dotnet=\"`Ipv6RaPreferredLifetime`\" pulumi-lang-go=\"`ipv6RaPreferredLifetime`\" pulumi-lang-python=\"`ipv6_ra_preferred_lifetime`\" pulumi-lang-yaml=\"`ipv6RaPreferredLifetime`\" pulumi-lang-java=\"`ipv6RaPreferredLifetime`\"\u003e`ipv6_ra_preferred_lifetime`\u003c/span\u003e\n* Default: 86400 (24 hours)\n* After this time, addresses become invalid"},"ipv6StaticSubnet":{"type":"string","description":"The static IPv6 subnet in CIDR notation (e.g., '2001:db8::/64') when using static IPv6.\nOnly applicable when \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is 'static'.\nMust be a valid IPv6 subnet allocated to your organization."},"multicastDns":{"type":"boolean","description":"Enables Multicast DNS (mDNS/Bonjour/Avahi) on the network. When enabled:\n* Allows device discovery (e.g., printers, Chromecasts)\n* Supports zero-configuration networking\n* Available on Controller version 7 and later"},"name":{"type":"string","description":"The name of the network. This should be a descriptive name that helps identify the network's purpose, such as 'Corporate-Main', 'Guest-Network', or 'IoT-VLAN'."},"networkGroup":{"type":"string","description":"The network group for this network. Default is 'LAN'. For WAN networks, use 'WAN' or 'WAN2'. Network groups help organize and apply policies to multiple networks."},"networkIsolationEnabled":{"type":"boolean","description":"Enables network isolation. When enabled:\n* Prevents communication between clients on this network\n* Each client can only communicate with the gateway\n* Commonly used for guest networks or IoT devices"},"purpose":{"type":"string","description":"The purpose/type of the network. Must be one of:\n* \u003cspan pulumi-lang-nodejs=\"`corporate`\" pulumi-lang-dotnet=\"`Corporate`\" pulumi-lang-go=\"`corporate`\" pulumi-lang-python=\"`corporate`\" pulumi-lang-yaml=\"`corporate`\" pulumi-lang-java=\"`corporate`\"\u003e`corporate`\u003c/span\u003e - Standard network for corporate use with full access\n* \u003cspan pulumi-lang-nodejs=\"`guest`\" pulumi-lang-dotnet=\"`Guest`\" pulumi-lang-go=\"`guest`\" pulumi-lang-python=\"`guest`\" pulumi-lang-yaml=\"`guest`\" pulumi-lang-java=\"`guest`\"\u003e`guest`\u003c/span\u003e - Isolated network for guest access with limited permissions\n* \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e - External network connection (WAN uplink)\n* `vlan-only` - VLAN network without DHCP services","willReplaceOnChanges":true},"site":{"type":"string","description":"The name of the site to associate the network with.","willReplaceOnChanges":true},"subnet":{"type":"string","description":"The IPv4 subnet for this network in CIDR notation (e.g., '192.168.1.0/24'). This defines the network's address space and determines the range of IP addresses available for DHCP."},"vlanId":{"type":"integer","description":"The VLAN ID for this network. Valid range is 0-4096. Common uses:\n* 1-4094: Standard VLAN range for network segmentation\n* 0: Untagged/native VLAN\n* \u003e4094: Reserved for special purposes"},"wanDhcpV6PdSize":{"type":"integer","description":"The IPv6 prefix size to request from ISP. Must be between 48 and 64.\nOnly applicable when \u003cspan pulumi-lang-nodejs=\"`wanTypeV6`\" pulumi-lang-dotnet=\"`WanTypeV6`\" pulumi-lang-go=\"`wanTypeV6`\" pulumi-lang-python=\"`wan_type_v6`\" pulumi-lang-yaml=\"`wanTypeV6`\" pulumi-lang-java=\"`wanTypeV6`\"\u003e`wan_type_v6`\u003c/span\u003e is 'dhcpv6'."},"wanDns":{"type":"array","items":{"type":"string"},"description":"List of IPv4 DNS servers for WAN interface. Examples:\n* ISP provided DNS servers\n* Public DNS services (e.g., 8.8.8.8, 1.1.1.1)\n* Maximum 4 servers can be specified"},"wanEgressQos":{"type":"integer","description":"Quality of Service (QoS) priority for WAN egress traffic (0-7).\n* 0 (default) - Best effort\n* 1-4 - Increasing priority\n* 5-7 - Highest priority, use sparingly\nHigher values get preferential treatment."},"wanGateway":{"type":"string","description":"The IPv4 gateway address for WAN interface.\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanType`\" pulumi-lang-dotnet=\"`WanType`\" pulumi-lang-go=\"`wanType`\" pulumi-lang-python=\"`wan_type`\" pulumi-lang-yaml=\"`wanType`\" pulumi-lang-java=\"`wanType`\"\u003e`wan_type`\u003c/span\u003e is 'static'.\nTypically the ISP's router IP address."},"wanGatewayV6":{"type":"string","description":"The IPv6 gateway address for WAN interface.\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanTypeV6`\" pulumi-lang-dotnet=\"`WanTypeV6`\" pulumi-lang-go=\"`wanTypeV6`\" pulumi-lang-python=\"`wan_type_v6`\" pulumi-lang-yaml=\"`wanTypeV6`\" pulumi-lang-java=\"`wanTypeV6`\"\u003e`wan_type_v6`\u003c/span\u003e is 'static'.\nTypically the ISP's router IPv6 address."},"wanIp":{"type":"string","description":"The static IPv4 address for WAN interface.\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanType`\" pulumi-lang-dotnet=\"`WanType`\" pulumi-lang-go=\"`wanType`\" pulumi-lang-python=\"`wan_type`\" pulumi-lang-yaml=\"`wanType`\" pulumi-lang-java=\"`wanType`\"\u003e`wan_type`\u003c/span\u003e is 'static'.\nMust be a valid public IP address assigned by your ISP."},"wanIpv6":{"type":"string","description":"The static IPv6 address for WAN interface.\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanTypeV6`\" pulumi-lang-dotnet=\"`WanTypeV6`\" pulumi-lang-go=\"`wanTypeV6`\" pulumi-lang-python=\"`wan_type_v6`\" pulumi-lang-yaml=\"`wanTypeV6`\" pulumi-lang-java=\"`wanTypeV6`\"\u003e`wan_type_v6`\u003c/span\u003e is 'static'.\nMust be a valid public IPv6 address assigned by your ISP."},"wanNetmask":{"type":"string","description":"The IPv4 netmask for WAN interface (e.g., '255.255.255.0').\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanType`\" pulumi-lang-dotnet=\"`WanType`\" pulumi-lang-go=\"`wanType`\" pulumi-lang-python=\"`wan_type`\" pulumi-lang-yaml=\"`wanType`\" pulumi-lang-java=\"`wanType`\"\u003e`wan_type`\u003c/span\u003e is 'static'.\nMust match the subnet mask provided by your ISP."},"wanNetworkgroup":{"type":"string","description":"The WAN interface group assignment. Options:\n* `WAN` - Primary WAN interface\n* `WAN2` - Secondary WAN interface\n* `WAN_LTE_FAILOVER` - LTE backup connection\nUsed for dual WAN and failover configurations."},"wanPrefixlen":{"type":"integer","description":"The IPv6 prefix length for WAN interface. Must be between 1 and 128.\nOnly applicable when \u003cspan pulumi-lang-nodejs=\"`wanTypeV6`\" pulumi-lang-dotnet=\"`WanTypeV6`\" pulumi-lang-go=\"`wanTypeV6`\" pulumi-lang-python=\"`wan_type_v6`\" pulumi-lang-yaml=\"`wanTypeV6`\" pulumi-lang-java=\"`wanTypeV6`\"\u003e`wan_type_v6`\u003c/span\u003e is 'static'."},"wanType":{"type":"string","description":"The IPv4 WAN connection type. Options:\n* \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - WAN interface disabled\n* \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e - Static IP configuration\n* \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e - Dynamic IP from ISP\n* \u003cspan pulumi-lang-nodejs=\"`pppoe`\" pulumi-lang-dotnet=\"`Pppoe`\" pulumi-lang-go=\"`pppoe`\" pulumi-lang-python=\"`pppoe`\" pulumi-lang-yaml=\"`pppoe`\" pulumi-lang-java=\"`pppoe`\"\u003e`pppoe`\u003c/span\u003e - PPPoE connection (common for DSL)\nChoose based on your ISP's requirements."},"wanTypeV6":{"type":"string","description":"The IPv6 WAN connection type. Options:\n* \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - IPv6 disabled\n* \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e - Static IPv6 configuration\n* \u003cspan pulumi-lang-nodejs=\"`dhcpv6`\" pulumi-lang-dotnet=\"`Dhcpv6`\" pulumi-lang-go=\"`dhcpv6`\" pulumi-lang-python=\"`dhcpv6`\" pulumi-lang-yaml=\"`dhcpv6`\" pulumi-lang-java=\"`dhcpv6`\"\u003e`dhcpv6`\u003c/span\u003e - Dynamic IPv6 from ISP\nChoose based on your ISP's requirements."},"wanUsername":{"type":"string","description":"Username for WAN authentication.\n* Required for PPPoE connections\n* May be needed for some ISP configurations\n* Cannot contain spaces or special characters"},"xWanPassword":{"type":"string","description":"Password for WAN authentication.\n* Required for PPPoE connections\n* May be needed for some ISP configurations\n* Must be kept secret"}},"requiredInputs":["purpose"],"stateInputs":{"description":"Input properties used for looking up and filtering Network resources.\n","properties":{"dhcpDns":{"type":"array","items":{"type":"string"},"description":"List of IPv4 DNS server addresses to be provided to DHCP clients. Examples:\n* Use ['8.8.8.8', '8.8.4.4'] for Google DNS\n* Use ['1.1.1.1', '1.0.0.1'] for Cloudflare DNS\n* Use internal DNS servers for corporate networks\nMaximum 4 servers can be specified."},"dhcpEnabled":{"type":"boolean","description":"Controls whether DHCP server is enabled for this network. When enabled:\n* The network will automatically assign IP addresses to clients\n* DHCP options (DNS, lease time) will be provided to clients\n* Static IP assignments can still be made outside the DHCP range"},"dhcpLease":{"type":"integer","description":"The DHCP lease time in seconds. Common values:\n* 86400 (1 day) - Default, suitable for most networks\n* 3600 (1 hour) - For testing or temporary networks\n* 604800 (1 week) - For stable networks with static clients\n* 2592000 (30 days) - For very stable networks"},"dhcpRelayEnabled":{"type":"boolean","description":"Enables DHCP relay for this network. When enabled:\n* DHCP requests are forwarded to an external DHCP server\n* Local DHCP server is disabled\n* Useful for centralized DHCP management"},"dhcpStart":{"type":"string","description":"The starting IPv4 address of the DHCP range. Examples:\n* For subnet 192.168.1.0/24, typical start: '192.168.1.100'\n* For subnet 10.0.0.0/24, typical start: '10.0.0.100'\nEnsure this address is within the network's subnet."},"dhcpStop":{"type":"string","description":"The ending IPv4 address of the DHCP range. Examples:\n* For subnet 192.168.1.0/24, typical stop: '192.168.1.254'\n* For subnet 10.0.0.0/24, typical stop: '10.0.0.254'\nMust be greater than\u003cspan pulumi-lang-nodejs=\" dhcpStart \" pulumi-lang-dotnet=\" DhcpStart \" pulumi-lang-go=\" dhcpStart \" pulumi-lang-python=\" dhcp_start \" pulumi-lang-yaml=\" dhcpStart \" pulumi-lang-java=\" dhcpStart \"\u003e dhcp_start \u003c/span\u003eand within the network's subnet."},"dhcpV6Dns":{"type":"array","items":{"type":"string"},"description":"List of IPv6 DNS server addresses for DHCPv6 clients. Examples:\n* Use ['2001:4860:4860::8888', '2001:4860:4860::8844'] for Google DNS\n* Use ['2606:4700:4700::1111', '2606:4700:4700::1001'] for Cloudflare DNS\nOnly used when\u003cspan pulumi-lang-nodejs=\" dhcpV6DnsAuto \" pulumi-lang-dotnet=\" DhcpV6DnsAuto \" pulumi-lang-go=\" dhcpV6DnsAuto \" pulumi-lang-python=\" dhcp_v6_dns_auto \" pulumi-lang-yaml=\" dhcpV6DnsAuto \" pulumi-lang-java=\" dhcpV6DnsAuto \"\u003e dhcp_v6_dns_auto \u003c/span\u003eis false. Maximum of 4 addresses are allowed."},"dhcpV6DnsAuto":{"type":"boolean","description":"Controls DNS server source for DHCPv6 clients:\n* true - Use upstream DNS servers (recommended)\n* false - Use manually specified servers from\u003cspan pulumi-lang-nodejs=\" dhcpV6Dns\n\" pulumi-lang-dotnet=\" DhcpV6Dns\n\" pulumi-lang-go=\" dhcpV6Dns\n\" pulumi-lang-python=\" dhcp_v6_dns\n\" pulumi-lang-yaml=\" dhcpV6Dns\n\" pulumi-lang-java=\" dhcpV6Dns\n\"\u003e dhcp_v6_dns\n\u003c/span\u003eDefault is true for easier management."},"dhcpV6Enabled":{"type":"boolean","description":"Enables stateful DHCPv6 for IPv6 address assignment. When enabled:\n* Provides IPv6 addresses to clients\n* Works alongside SLAAC if configured\n* Allows for more controlled IPv6 addressing"},"dhcpV6Lease":{"type":"integer","description":"The DHCPv6 lease time in seconds. Common values:\n* 86400 (1 day) - Default setting\n* 3600 (1 hour) - For testing\n* 604800 (1 week) - For stable networks\nTypically longer than IPv4 DHCP leases."},"dhcpV6Start":{"type":"string","description":"The starting IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.\nMust be a valid IPv6 address within your allocated IPv6 subnet."},"dhcpV6Stop":{"type":"string","description":"The ending IPv6 address for the DHCPv6 range. Used in static DHCPv6 configuration.\nMust be after\u003cspan pulumi-lang-nodejs=\" dhcpV6Start \" pulumi-lang-dotnet=\" DhcpV6Start \" pulumi-lang-go=\" dhcpV6Start \" pulumi-lang-python=\" dhcp_v6_start \" pulumi-lang-yaml=\" dhcpV6Start \" pulumi-lang-java=\" dhcpV6Start \"\u003e dhcp_v6_start \u003c/span\u003ein the IPv6 address space."},"dhcpdBootEnabled":{"type":"boolean","description":"Enables DHCP boot options for PXE boot or network boot configurations. When enabled:\n* Allows network devices to boot from a TFTP server\n* Requires\u003cspan pulumi-lang-nodejs=\" dhcpdBootServer \" pulumi-lang-dotnet=\" DhcpdBootServer \" pulumi-lang-go=\" dhcpdBootServer \" pulumi-lang-python=\" dhcpd_boot_server \" pulumi-lang-yaml=\" dhcpdBootServer \" pulumi-lang-java=\" dhcpdBootServer \"\u003e dhcpd_boot_server \u003c/span\u003eand\u003cspan pulumi-lang-nodejs=\" dhcpdBootFilename \" pulumi-lang-dotnet=\" DhcpdBootFilename \" pulumi-lang-go=\" dhcpdBootFilename \" pulumi-lang-python=\" dhcpd_boot_filename \" pulumi-lang-yaml=\" dhcpdBootFilename \" pulumi-lang-java=\" dhcpdBootFilename \"\u003e dhcpd_boot_filename \u003c/span\u003eto be set\n* Commonly used for diskless workstations or network installations"},"dhcpdBootFilename":{"type":"string","description":"The boot filename to be loaded from the TFTP server. Examples:\n* 'pxelinux.0' - Standard PXE boot loader\n* 'undionly.kpxe' - iPXE boot loader\n* Custom paths for specific boot images"},"dhcpdBootServer":{"type":"string","description":"The IPv4 address of the TFTP server for network boot. This setting:\n* Is required when\u003cspan pulumi-lang-nodejs=\" dhcpdBootEnabled \" pulumi-lang-dotnet=\" DhcpdBootEnabled \" pulumi-lang-go=\" dhcpdBootEnabled \" pulumi-lang-python=\" dhcpd_boot_enabled \" pulumi-lang-yaml=\" dhcpdBootEnabled \" pulumi-lang-java=\" dhcpdBootEnabled \"\u003e dhcpd_boot_enabled \u003c/span\u003eis true\n* Should be a reliable, always-on server\n* Must be accessible to all clients that need to boot"},"domainName":{"type":"string","description":"The domain name for this network. Examples:\n* 'corp.example.com' - For corporate networks\n* 'guest.example.com' - For guest networks\n* 'iot.example.com' - For IoT networks\nUsed for internal DNS resolution and DHCP options."},"enabled":{"type":"boolean","description":"Controls whether this network is active. When disabled:\n* Network will not be available to clients\n* DHCP services will be stopped\n* Existing clients will be disconnected\nUseful for temporary network maintenance or security measures."},"igmpSnooping":{"type":"boolean","description":"Enables IGMP (Internet Group Management Protocol) snooping. When enabled:\n* Optimizes multicast traffic flow\n* Reduces network congestion\n* Improves performance for multicast applications (e.g., IPTV)\nRecommended for networks with multicast traffic."},"internetAccessEnabled":{"type":"boolean","description":"Controls internet access for this network. When disabled:\n* Clients cannot access external networks\n* Internal network access remains available\n* Useful for creating isolated or secure networks"},"ipv6InterfaceType":{"type":"string","description":"Specifies the IPv6 connection type. Must be one of:\n* \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e - IPv6 disabled (default)\n* \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e - Static IPv6 addressing\n* \u003cspan pulumi-lang-nodejs=\"`pd`\" pulumi-lang-dotnet=\"`Pd`\" pulumi-lang-go=\"`pd`\" pulumi-lang-python=\"`pd`\" pulumi-lang-yaml=\"`pd`\" pulumi-lang-java=\"`pd`\"\u003e`pd`\u003c/span\u003e - Prefix Delegation from upstream\n\nChoose based on your IPv6 deployment strategy and ISP capabilities."},"ipv6PdInterface":{"type":"string","description":"The WAN interface to use for IPv6 Prefix Delegation. Options:\n* \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e - Primary WAN interface\n* \u003cspan pulumi-lang-nodejs=\"`wan2`\" pulumi-lang-dotnet=\"`Wan2`\" pulumi-lang-go=\"`wan2`\" pulumi-lang-python=\"`wan2`\" pulumi-lang-yaml=\"`wan2`\" pulumi-lang-java=\"`wan2`\"\u003e`wan2`\u003c/span\u003e - Secondary WAN interface\nOnly applicable when \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is 'pd'."},"ipv6PdPrefixid":{"type":"string","description":"The IPv6 Prefix ID for Prefix Delegation. Used to:\n* Differentiate multiple delegated prefixes\n* Create unique subnets from the delegated prefix\nTypically a hexadecimal value (e.g., '0', '1', 'a1')."},"ipv6PdStart":{"type":"string","description":"The starting IPv6 address for Prefix Delegation range.\nOnly used when \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is 'pd'.\nMust be within the delegated prefix range."},"ipv6PdStop":{"type":"string","description":"The ending IPv6 address for Prefix Delegation range.\nOnly used when \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is 'pd'.\nMust be after \u003cspan pulumi-lang-nodejs=\"`ipv6PdStart`\" pulumi-lang-dotnet=\"`Ipv6PdStart`\" pulumi-lang-go=\"`ipv6PdStart`\" pulumi-lang-python=\"`ipv6_pd_start`\" pulumi-lang-yaml=\"`ipv6PdStart`\" pulumi-lang-java=\"`ipv6PdStart`\"\u003e`ipv6_pd_start`\u003c/span\u003e within the delegated prefix."},"ipv6RaEnable":{"type":"boolean","description":"Enables IPv6 Router Advertisements (RA). When enabled:\n* Announces IPv6 prefix information to clients\n* Enables SLAAC address configuration\n* Required for most IPv6 deployments"},"ipv6RaPreferredLifetime":{"type":"integer","description":"The preferred lifetime (in seconds) for IPv6 addresses in Router Advertisements.\n* Must be less than or equal to \u003cspan pulumi-lang-nodejs=\"`ipv6RaValidLifetime`\" pulumi-lang-dotnet=\"`Ipv6RaValidLifetime`\" pulumi-lang-go=\"`ipv6RaValidLifetime`\" pulumi-lang-python=\"`ipv6_ra_valid_lifetime`\" pulumi-lang-yaml=\"`ipv6RaValidLifetime`\" pulumi-lang-java=\"`ipv6RaValidLifetime`\"\u003e`ipv6_ra_valid_lifetime`\u003c/span\u003e\n* Default: 14400 (4 hours)\n* After this time, addresses become deprecated but still usable"},"ipv6RaPriority":{"type":"string","description":"Sets the priority for IPv6 Router Advertisements. Options:\n* \u003cspan pulumi-lang-nodejs=\"`high`\" pulumi-lang-dotnet=\"`High`\" pulumi-lang-go=\"`high`\" pulumi-lang-python=\"`high`\" pulumi-lang-yaml=\"`high`\" pulumi-lang-java=\"`high`\"\u003e`high`\u003c/span\u003e - Preferred for primary networks\n* \u003cspan pulumi-lang-nodejs=\"`medium`\" pulumi-lang-dotnet=\"`Medium`\" pulumi-lang-go=\"`medium`\" pulumi-lang-python=\"`medium`\" pulumi-lang-yaml=\"`medium`\" pulumi-lang-java=\"`medium`\"\u003e`medium`\u003c/span\u003e - Standard priority\n* \u003cspan pulumi-lang-nodejs=\"`low`\" pulumi-lang-dotnet=\"`Low`\" pulumi-lang-go=\"`low`\" pulumi-lang-python=\"`low`\" pulumi-lang-yaml=\"`low`\" pulumi-lang-java=\"`low`\"\u003e`low`\u003c/span\u003e - For backup or secondary networks\nAffects router selection when multiple IPv6 routers exist."},"ipv6RaValidLifetime":{"type":"integer","description":"The valid lifetime (in seconds) for IPv6 addresses in Router Advertisements.\n* Must be greater than or equal to \u003cspan pulumi-lang-nodejs=\"`ipv6RaPreferredLifetime`\" pulumi-lang-dotnet=\"`Ipv6RaPreferredLifetime`\" pulumi-lang-go=\"`ipv6RaPreferredLifetime`\" pulumi-lang-python=\"`ipv6_ra_preferred_lifetime`\" pulumi-lang-yaml=\"`ipv6RaPreferredLifetime`\" pulumi-lang-java=\"`ipv6RaPreferredLifetime`\"\u003e`ipv6_ra_preferred_lifetime`\u003c/span\u003e\n* Default: 86400 (24 hours)\n* After this time, addresses become invalid"},"ipv6StaticSubnet":{"type":"string","description":"The static IPv6 subnet in CIDR notation (e.g., '2001:db8::/64') when using static IPv6.\nOnly applicable when \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is 'static'.\nMust be a valid IPv6 subnet allocated to your organization."},"multicastDns":{"type":"boolean","description":"Enables Multicast DNS (mDNS/Bonjour/Avahi) on the network. When enabled:\n* Allows device discovery (e.g., printers, Chromecasts)\n* Supports zero-configuration networking\n* Available on Controller version 7 and later"},"name":{"type":"string","description":"The name of the network. This should be a descriptive name that helps identify the network's purpose, such as 'Corporate-Main', 'Guest-Network', or 'IoT-VLAN'."},"networkGroup":{"type":"string","description":"The network group for this network. Default is 'LAN'. For WAN networks, use 'WAN' or 'WAN2'. Network groups help organize and apply policies to multiple networks."},"networkIsolationEnabled":{"type":"boolean","description":"Enables network isolation. When enabled:\n* Prevents communication between clients on this network\n* Each client can only communicate with the gateway\n* Commonly used for guest networks or IoT devices"},"purpose":{"type":"string","description":"The purpose/type of the network. Must be one of:\n* \u003cspan pulumi-lang-nodejs=\"`corporate`\" pulumi-lang-dotnet=\"`Corporate`\" pulumi-lang-go=\"`corporate`\" pulumi-lang-python=\"`corporate`\" pulumi-lang-yaml=\"`corporate`\" pulumi-lang-java=\"`corporate`\"\u003e`corporate`\u003c/span\u003e - Standard network for corporate use with full access\n* \u003cspan pulumi-lang-nodejs=\"`guest`\" pulumi-lang-dotnet=\"`Guest`\" pulumi-lang-go=\"`guest`\" pulumi-lang-python=\"`guest`\" pulumi-lang-yaml=\"`guest`\" pulumi-lang-java=\"`guest`\"\u003e`guest`\u003c/span\u003e - Isolated network for guest access with limited permissions\n* \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e - External network connection (WAN uplink)\n* `vlan-only` - VLAN network without DHCP services","willReplaceOnChanges":true},"site":{"type":"string","description":"The name of the site to associate the network with.","willReplaceOnChanges":true},"subnet":{"type":"string","description":"The IPv4 subnet for this network in CIDR notation (e.g., '192.168.1.0/24'). This defines the network's address space and determines the range of IP addresses available for DHCP."},"vlanId":{"type":"integer","description":"The VLAN ID for this network. Valid range is 0-4096. Common uses:\n* 1-4094: Standard VLAN range for network segmentation\n* 0: Untagged/native VLAN\n* \u003e4094: Reserved for special purposes"},"wanDhcpV6PdSize":{"type":"integer","description":"The IPv6 prefix size to request from ISP. Must be between 48 and 64.\nOnly applicable when \u003cspan pulumi-lang-nodejs=\"`wanTypeV6`\" pulumi-lang-dotnet=\"`WanTypeV6`\" pulumi-lang-go=\"`wanTypeV6`\" pulumi-lang-python=\"`wan_type_v6`\" pulumi-lang-yaml=\"`wanTypeV6`\" pulumi-lang-java=\"`wanTypeV6`\"\u003e`wan_type_v6`\u003c/span\u003e is 'dhcpv6'."},"wanDns":{"type":"array","items":{"type":"string"},"description":"List of IPv4 DNS servers for WAN interface. Examples:\n* ISP provided DNS servers\n* Public DNS services (e.g., 8.8.8.8, 1.1.1.1)\n* Maximum 4 servers can be specified"},"wanEgressQos":{"type":"integer","description":"Quality of Service (QoS) priority for WAN egress traffic (0-7).\n* 0 (default) - Best effort\n* 1-4 - Increasing priority\n* 5-7 - Highest priority, use sparingly\nHigher values get preferential treatment."},"wanGateway":{"type":"string","description":"The IPv4 gateway address for WAN interface.\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanType`\" pulumi-lang-dotnet=\"`WanType`\" pulumi-lang-go=\"`wanType`\" pulumi-lang-python=\"`wan_type`\" pulumi-lang-yaml=\"`wanType`\" pulumi-lang-java=\"`wanType`\"\u003e`wan_type`\u003c/span\u003e is 'static'.\nTypically the ISP's router IP address."},"wanGatewayV6":{"type":"string","description":"The IPv6 gateway address for WAN interface.\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanTypeV6`\" pulumi-lang-dotnet=\"`WanTypeV6`\" pulumi-lang-go=\"`wanTypeV6`\" pulumi-lang-python=\"`wan_type_v6`\" pulumi-lang-yaml=\"`wanTypeV6`\" pulumi-lang-java=\"`wanTypeV6`\"\u003e`wan_type_v6`\u003c/span\u003e is 'static'.\nTypically the ISP's router IPv6 address."},"wanIp":{"type":"string","description":"The static IPv4 address for WAN interface.\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanType`\" pulumi-lang-dotnet=\"`WanType`\" pulumi-lang-go=\"`wanType`\" pulumi-lang-python=\"`wan_type`\" pulumi-lang-yaml=\"`wanType`\" pulumi-lang-java=\"`wanType`\"\u003e`wan_type`\u003c/span\u003e is 'static'.\nMust be a valid public IP address assigned by your ISP."},"wanIpv6":{"type":"string","description":"The static IPv6 address for WAN interface.\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanTypeV6`\" pulumi-lang-dotnet=\"`WanTypeV6`\" pulumi-lang-go=\"`wanTypeV6`\" pulumi-lang-python=\"`wan_type_v6`\" pulumi-lang-yaml=\"`wanTypeV6`\" pulumi-lang-java=\"`wanTypeV6`\"\u003e`wan_type_v6`\u003c/span\u003e is 'static'.\nMust be a valid public IPv6 address assigned by your ISP."},"wanNetmask":{"type":"string","description":"The IPv4 netmask for WAN interface (e.g., '255.255.255.0').\nRequired when \u003cspan pulumi-lang-nodejs=\"`wanType`\" pulumi-lang-dotnet=\"`WanType`\" pulumi-lang-go=\"`wanType`\" pulumi-lang-python=\"`wan_type`\" pulumi-lang-yaml=\"`wanType`\" pulumi-lang-java=\"`wanType`\"\u003e`wan_type`\u003c/span\u003e is 'static'.\nMust match the subnet mask provided by your ISP."},"wanNetworkgroup":{"type":"string","description":"The WAN interface group assignment. Options:\n* `WAN` - Primary WAN interface\n* `WAN2` - Secondary WAN interface\n* `WAN_LTE_FAILOVER` - LTE backup connection\nUsed for dual WAN and failover configurations."},"wanPrefixlen":{"type":"integer","description":"The IPv6 prefix length for WAN interface. Must be between 1 and 128.\nOnly applicable when \u003cspan pulumi-lang-nodejs=\"`wanTypeV6`\" pulumi-lang-dotnet=\"`WanTypeV6`\" pulumi-lang-go=\"`wanTypeV6`\" pulumi-lang-python=\"`wan_type_v6`\" pulumi-lang-yaml=\"`wanTypeV6`\" pulumi-lang-java=\"`wanTypeV6`\"\u003e`wan_type_v6`\u003c/span\u003e is 'static'."},"wanType":{"type":"string","description":"The IPv4 WAN connection type. Options:\n* \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - WAN interface disabled\n* \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e - Static IP configuration\n* \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e - Dynamic IP from ISP\n* \u003cspan pulumi-lang-nodejs=\"`pppoe`\" pulumi-lang-dotnet=\"`Pppoe`\" pulumi-lang-go=\"`pppoe`\" pulumi-lang-python=\"`pppoe`\" pulumi-lang-yaml=\"`pppoe`\" pulumi-lang-java=\"`pppoe`\"\u003e`pppoe`\u003c/span\u003e - PPPoE connection (common for DSL)\nChoose based on your ISP's requirements."},"wanTypeV6":{"type":"string","description":"The IPv6 WAN connection type. Options:\n* \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - IPv6 disabled\n* \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e - Static IPv6 configuration\n* \u003cspan pulumi-lang-nodejs=\"`dhcpv6`\" pulumi-lang-dotnet=\"`Dhcpv6`\" pulumi-lang-go=\"`dhcpv6`\" pulumi-lang-python=\"`dhcpv6`\" pulumi-lang-yaml=\"`dhcpv6`\" pulumi-lang-java=\"`dhcpv6`\"\u003e`dhcpv6`\u003c/span\u003e - Dynamic IPv6 from ISP\nChoose based on your ISP's requirements."},"wanUsername":{"type":"string","description":"Username for WAN authentication.\n* Required for PPPoE connections\n* May be needed for some ISP configurations\n* Cannot contain spaces or special characters"},"xWanPassword":{"type":"string","description":"Password for WAN authentication.\n* Required for PPPoE connections\n* May be needed for some ISP configurations\n* Must be kept secret"}},"type":"object"}},"unifi:index/radiusProfile:RadiusProfile":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.RadiusProfile`\" pulumi-lang-dotnet=\"`unifi.RadiusProfile`\" pulumi-lang-go=\"`RadiusProfile`\" pulumi-lang-python=\"`RadiusProfile`\" pulumi-lang-yaml=\"`unifi.RadiusProfile`\" pulumi-lang-java=\"`unifi.RadiusProfile`\"\u003e`unifi.RadiusProfile`\u003c/span\u003e resource manages RADIUS authentication profiles for UniFi networks.\n\nRADIUS (Remote Authentication Dial-In User Service) profiles enable enterprise-grade authentication and authorization for:\n  * 802.1X network access control\n  * WPA2/WPA3-Enterprise wireless networks\n  * Dynamic VLAN assignment\n  * User activity accounting\n\nEach profile can be configured with:\n  * Multiple authentication and accounting servers\n  * VLAN assignment settings\n  * Accounting update intervals\n","properties":{"accountingEnabled":{"type":"boolean","description":"Enable RADIUS accounting to track user sessions, including login/logout times and data usage. Useful for billing and audit purposes."},"acctServers":{"type":"array","items":{"$ref":"#/types/unifi:index/RadiusProfileAcctServer:RadiusProfileAcctServer"},"description":"List of RADIUS accounting servers to use with this profile. Accounting servers track session data like connection time and data usage. Each server requires:\n  * IP address of the RADIUS server\n  * Port number (default: 1813)\n  * Shared secret for secure communication"},"authServers":{"type":"array","items":{"$ref":"#/types/unifi:index/RadiusProfileAuthServer:RadiusProfileAuthServer"},"description":"List of RADIUS authentication servers to use with this profile. Multiple servers provide failover - if the first server is unreachable, the system will try the next server in the list. Each server requires:\n  * IP address of the RADIUS server\n  * Shared secret for secure communication"},"interimUpdateEnabled":{"type":"boolean","description":"Enable periodic updates during active sessions. This allows tracking of ongoing session data like bandwidth usage."},"interimUpdateInterval":{"type":"integer","description":"The interval (in seconds) between interim updates when \u003cspan pulumi-lang-nodejs=\"`interimUpdateEnabled`\" pulumi-lang-dotnet=\"`InterimUpdateEnabled`\" pulumi-lang-go=\"`interimUpdateEnabled`\" pulumi-lang-python=\"`interim_update_enabled`\" pulumi-lang-yaml=\"`interimUpdateEnabled`\" pulumi-lang-java=\"`interimUpdateEnabled`\"\u003e`interim_update_enabled`\u003c/span\u003e is true. Default is 3600 seconds (1 hour)."},"name":{"type":"string","description":"A friendly name for the RADIUS profile to help identify its purpose (e.g., 'Corporate Users' or 'Guest Access')."},"site":{"type":"string","description":"The name of the UniFi site where the RADIUS profile should be created. If not specified, the default site will be used."},"useUsgAcctServer":{"type":"boolean","description":"Use the controller as a RADIUS accounting server. This allows local accounting without an external RADIUS server."},"useUsgAuthServer":{"type":"boolean","description":"Use the controller as a RADIUS authentication server. This allows local authentication without an external RADIUS server."},"vlanEnabled":{"type":"boolean","description":"Enable VLAN assignment for wired clients based on RADIUS attributes. This allows network segmentation based on user authentication."},"vlanWlanMode":{"type":"string","description":"VLAN assignment mode for wireless networks. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - Do not use RADIUS-assigned VLANs\n  * \u003cspan pulumi-lang-nodejs=\"`optional`\" pulumi-lang-dotnet=\"`Optional`\" pulumi-lang-go=\"`optional`\" pulumi-lang-python=\"`optional`\" pulumi-lang-yaml=\"`optional`\" pulumi-lang-java=\"`optional`\"\u003e`optional`\u003c/span\u003e - Use RADIUS-assigned VLAN if provided\n  * \u003cspan pulumi-lang-nodejs=\"`required`\" pulumi-lang-dotnet=\"`Required`\" pulumi-lang-go=\"`required`\" pulumi-lang-python=\"`required`\" pulumi-lang-yaml=\"`required`\" pulumi-lang-java=\"`required`\"\u003e`required`\u003c/span\u003e - Require RADIUS-assigned VLAN for authentication to succeed"}},"required":["name","site"],"inputProperties":{"accountingEnabled":{"type":"boolean","description":"Enable RADIUS accounting to track user sessions, including login/logout times and data usage. Useful for billing and audit purposes."},"acctServers":{"type":"array","items":{"$ref":"#/types/unifi:index/RadiusProfileAcctServer:RadiusProfileAcctServer"},"description":"List of RADIUS accounting servers to use with this profile. Accounting servers track session data like connection time and data usage. Each server requires:\n  * IP address of the RADIUS server\n  * Port number (default: 1813)\n  * Shared secret for secure communication"},"authServers":{"type":"array","items":{"$ref":"#/types/unifi:index/RadiusProfileAuthServer:RadiusProfileAuthServer"},"description":"List of RADIUS authentication servers to use with this profile. Multiple servers provide failover - if the first server is unreachable, the system will try the next server in the list. Each server requires:\n  * IP address of the RADIUS server\n  * Shared secret for secure communication"},"interimUpdateEnabled":{"type":"boolean","description":"Enable periodic updates during active sessions. This allows tracking of ongoing session data like bandwidth usage."},"interimUpdateInterval":{"type":"integer","description":"The interval (in seconds) between interim updates when \u003cspan pulumi-lang-nodejs=\"`interimUpdateEnabled`\" pulumi-lang-dotnet=\"`InterimUpdateEnabled`\" pulumi-lang-go=\"`interimUpdateEnabled`\" pulumi-lang-python=\"`interim_update_enabled`\" pulumi-lang-yaml=\"`interimUpdateEnabled`\" pulumi-lang-java=\"`interimUpdateEnabled`\"\u003e`interim_update_enabled`\u003c/span\u003e is true. Default is 3600 seconds (1 hour)."},"name":{"type":"string","description":"A friendly name for the RADIUS profile to help identify its purpose (e.g., 'Corporate Users' or 'Guest Access')."},"site":{"type":"string","description":"The name of the UniFi site where the RADIUS profile should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"useUsgAcctServer":{"type":"boolean","description":"Use the controller as a RADIUS accounting server. This allows local accounting without an external RADIUS server."},"useUsgAuthServer":{"type":"boolean","description":"Use the controller as a RADIUS authentication server. This allows local authentication without an external RADIUS server."},"vlanEnabled":{"type":"boolean","description":"Enable VLAN assignment for wired clients based on RADIUS attributes. This allows network segmentation based on user authentication."},"vlanWlanMode":{"type":"string","description":"VLAN assignment mode for wireless networks. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - Do not use RADIUS-assigned VLANs\n  * \u003cspan pulumi-lang-nodejs=\"`optional`\" pulumi-lang-dotnet=\"`Optional`\" pulumi-lang-go=\"`optional`\" pulumi-lang-python=\"`optional`\" pulumi-lang-yaml=\"`optional`\" pulumi-lang-java=\"`optional`\"\u003e`optional`\u003c/span\u003e - Use RADIUS-assigned VLAN if provided\n  * \u003cspan pulumi-lang-nodejs=\"`required`\" pulumi-lang-dotnet=\"`Required`\" pulumi-lang-go=\"`required`\" pulumi-lang-python=\"`required`\" pulumi-lang-yaml=\"`required`\" pulumi-lang-java=\"`required`\"\u003e`required`\u003c/span\u003e - Require RADIUS-assigned VLAN for authentication to succeed"}},"stateInputs":{"description":"Input properties used for looking up and filtering RadiusProfile resources.\n","properties":{"accountingEnabled":{"type":"boolean","description":"Enable RADIUS accounting to track user sessions, including login/logout times and data usage. Useful for billing and audit purposes."},"acctServers":{"type":"array","items":{"$ref":"#/types/unifi:index/RadiusProfileAcctServer:RadiusProfileAcctServer"},"description":"List of RADIUS accounting servers to use with this profile. Accounting servers track session data like connection time and data usage. Each server requires:\n  * IP address of the RADIUS server\n  * Port number (default: 1813)\n  * Shared secret for secure communication"},"authServers":{"type":"array","items":{"$ref":"#/types/unifi:index/RadiusProfileAuthServer:RadiusProfileAuthServer"},"description":"List of RADIUS authentication servers to use with this profile. Multiple servers provide failover - if the first server is unreachable, the system will try the next server in the list. Each server requires:\n  * IP address of the RADIUS server\n  * Shared secret for secure communication"},"interimUpdateEnabled":{"type":"boolean","description":"Enable periodic updates during active sessions. This allows tracking of ongoing session data like bandwidth usage."},"interimUpdateInterval":{"type":"integer","description":"The interval (in seconds) between interim updates when \u003cspan pulumi-lang-nodejs=\"`interimUpdateEnabled`\" pulumi-lang-dotnet=\"`InterimUpdateEnabled`\" pulumi-lang-go=\"`interimUpdateEnabled`\" pulumi-lang-python=\"`interim_update_enabled`\" pulumi-lang-yaml=\"`interimUpdateEnabled`\" pulumi-lang-java=\"`interimUpdateEnabled`\"\u003e`interim_update_enabled`\u003c/span\u003e is true. Default is 3600 seconds (1 hour)."},"name":{"type":"string","description":"A friendly name for the RADIUS profile to help identify its purpose (e.g., 'Corporate Users' or 'Guest Access')."},"site":{"type":"string","description":"The name of the UniFi site where the RADIUS profile should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"useUsgAcctServer":{"type":"boolean","description":"Use the controller as a RADIUS accounting server. This allows local accounting without an external RADIUS server."},"useUsgAuthServer":{"type":"boolean","description":"Use the controller as a RADIUS authentication server. This allows local authentication without an external RADIUS server."},"vlanEnabled":{"type":"boolean","description":"Enable VLAN assignment for wired clients based on RADIUS attributes. This allows network segmentation based on user authentication."},"vlanWlanMode":{"type":"string","description":"VLAN assignment mode for wireless networks. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - Do not use RADIUS-assigned VLANs\n  * \u003cspan pulumi-lang-nodejs=\"`optional`\" pulumi-lang-dotnet=\"`Optional`\" pulumi-lang-go=\"`optional`\" pulumi-lang-python=\"`optional`\" pulumi-lang-yaml=\"`optional`\" pulumi-lang-java=\"`optional`\"\u003e`optional`\u003c/span\u003e - Use RADIUS-assigned VLAN if provided\n  * \u003cspan pulumi-lang-nodejs=\"`required`\" pulumi-lang-dotnet=\"`Required`\" pulumi-lang-go=\"`required`\" pulumi-lang-python=\"`required`\" pulumi-lang-yaml=\"`required`\" pulumi-lang-java=\"`required`\"\u003e`required`\u003c/span\u003e - Require RADIUS-assigned VLAN for authentication to succeed"}},"type":"object"}},"unifi:index/site:Site":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.Site`\" pulumi-lang-dotnet=\"`unifi.Site`\" pulumi-lang-go=\"`Site`\" pulumi-lang-python=\"`Site`\" pulumi-lang-yaml=\"`unifi.Site`\" pulumi-lang-java=\"`unifi.Site`\"\u003e`unifi.Site`\u003c/span\u003e resource manages UniFi sites, which are logical groupings of UniFi devices and their configurations.\n\nSites in UniFi are used to:\n  * Organize network devices and settings for different physical locations\n  * Isolate configurations between different networks or customers\n  * Apply different policies and configurations to different groups of devices\n\nEach site maintains its own:\n  * Network configurations\n  * Wireless networks (WLANs)\n  * Security policies\n  * Device configurations\n\nA UniFi controller can manage multiple sites, making it ideal for multi-tenant or distributed network deployments.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst mysite = new unifi.Site(\"mysite\", {description: \"mysite\"});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nmysite = unifi.Site(\"mysite\", description=\"mysite\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var mysite = new Unifi.Site(\"mysite\", new()\n    {\n        Description = \"mysite\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := unifi.NewSite(ctx, \"mysite\", \u0026unifi.SiteArgs{\n\t\t\tDescription: pulumi.String(\"mysite\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.Site;\nimport com.pulumiverse.unifi.SiteArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var mysite = new Site(\"mysite\", SiteArgs.builder()\n            .description(\"mysite\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  mysite:\n    type: unifi:Site\n    properties:\n      description: mysite\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nimport using the API/UI ID\n\n```sh\n$ pulumi import unifi:index/site:Site mysite 5fe6261995fe130013456a36\n```\n\nimport using the name (short ID)\n\n```sh\n$ pulumi import unifi:index/site:Site mysite vq98kwez\n```\n\n","properties":{"description":{"type":"string","description":"A human-readable description of the site (e.g., 'Main Office', 'Remote Branch', 'Client A Network'). This is used as the display name in the UniFi controller interface.\n"},"name":{"type":"string","description":"The site's internal name in the UniFi system. This is automatically generated based on the description and is used in API calls and configurations. It's typically a lowercase, hyphenated version of the description.\n"}},"required":["description","name"],"inputProperties":{"description":{"type":"string","description":"A human-readable description of the site (e.g., 'Main Office', 'Remote Branch', 'Client A Network'). This is used as the display name in the UniFi controller interface.\n"}},"requiredInputs":["description"],"stateInputs":{"description":"Input properties used for looking up and filtering Site resources.\n","properties":{"description":{"type":"string","description":"A human-readable description of the site (e.g., 'Main Office', 'Remote Branch', 'Client A Network'). This is used as the display name in the UniFi controller interface.\n"},"name":{"type":"string","description":"The site's internal name in the UniFi system. This is automatically generated based on the description and is used in API calls and configurations. It's typically a lowercase, hyphenated version of the description.\n"}},"type":"object"}},"unifi:index/staticRoute:StaticRoute":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.StaticRoute`\" pulumi-lang-dotnet=\"`unifi.StaticRoute`\" pulumi-lang-go=\"`StaticRoute`\" pulumi-lang-python=\"`StaticRoute`\" pulumi-lang-yaml=\"`unifi.StaticRoute`\" pulumi-lang-java=\"`unifi.StaticRoute`\"\u003e`unifi.StaticRoute`\u003c/span\u003e resource manages static routes on UniFi Security Gateways (USG) and UniFi Dream Machines (UDM/UDM-Pro).\n\nStatic routes allow you to manually configure routing paths for specific networks. This is useful for:\n  * Connecting to networks not directly connected to your UniFi gateway\n  * Creating backup routes for redundancy\n  * Implementing policy-based routing\n  * Blocking traffic to specific networks using blackhole routes\n\nRoutes can be configured to use either a next-hop IP address, a specific interface, or as a blackhole route.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst nexthop = new unifi.StaticRoute(\"nexthop\", {\n    type: \"nexthop-route\",\n    network: \"172.17.0.0/16\",\n    name: \"basic nexthop\",\n    distance: 1,\n    nextHop: \"172.16.0.1\",\n});\nconst blackhole = new unifi.StaticRoute(\"blackhole\", {\n    type: \"blackhole\",\n    network: blackholeCidr,\n    name: \"blackhole traffice to cidr\",\n    distance: 1,\n});\nconst _interface = new unifi.StaticRoute(\"interface\", {\n    type: \"interface-route\",\n    network: wan2Cidr,\n    name: \"send traffic over wan2\",\n    distance: 1,\n    \"interface\": \"WAN2\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nnexthop = unifi.StaticRoute(\"nexthop\",\n    type=\"nexthop-route\",\n    network=\"172.17.0.0/16\",\n    name=\"basic nexthop\",\n    distance=1,\n    next_hop=\"172.16.0.1\")\nblackhole = unifi.StaticRoute(\"blackhole\",\n    type=\"blackhole\",\n    network=blackhole_cidr,\n    name=\"blackhole traffice to cidr\",\n    distance=1)\ninterface = unifi.StaticRoute(\"interface\",\n    type=\"interface-route\",\n    network=wan2_cidr,\n    name=\"send traffic over wan2\",\n    distance=1,\n    interface=\"WAN2\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var nexthop = new Unifi.StaticRoute(\"nexthop\", new()\n    {\n        Type = \"nexthop-route\",\n        Network = \"172.17.0.0/16\",\n        Name = \"basic nexthop\",\n        Distance = 1,\n        NextHop = \"172.16.0.1\",\n    });\n\n    var blackhole = new Unifi.StaticRoute(\"blackhole\", new()\n    {\n        Type = \"blackhole\",\n        Network = blackholeCidr,\n        Name = \"blackhole traffice to cidr\",\n        Distance = 1,\n    });\n\n    var @interface = new Unifi.StaticRoute(\"interface\", new()\n    {\n        Type = \"interface-route\",\n        Network = wan2Cidr,\n        Name = \"send traffic over wan2\",\n        Distance = 1,\n        Interface = \"WAN2\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := unifi.NewStaticRoute(ctx, \"nexthop\", \u0026unifi.StaticRouteArgs{\n\t\t\tType:     pulumi.String(\"nexthop-route\"),\n\t\t\tNetwork:  pulumi.String(\"172.17.0.0/16\"),\n\t\t\tName:     pulumi.String(\"basic nexthop\"),\n\t\t\tDistance: pulumi.Int(1),\n\t\t\tNextHop:  pulumi.String(\"172.16.0.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = unifi.NewStaticRoute(ctx, \"blackhole\", \u0026unifi.StaticRouteArgs{\n\t\t\tType:     pulumi.String(\"blackhole\"),\n\t\t\tNetwork:  pulumi.Any(blackholeCidr),\n\t\t\tName:     pulumi.String(\"blackhole traffice to cidr\"),\n\t\t\tDistance: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = unifi.NewStaticRoute(ctx, \"interface\", \u0026unifi.StaticRouteArgs{\n\t\t\tType:      pulumi.String(\"interface-route\"),\n\t\t\tNetwork:   pulumi.Any(wan2Cidr),\n\t\t\tName:      pulumi.String(\"send traffic over wan2\"),\n\t\t\tDistance:  pulumi.Int(1),\n\t\t\tInterface: pulumi.String(\"WAN2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.StaticRoute;\nimport com.pulumiverse.unifi.StaticRouteArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var nexthop = new StaticRoute(\"nexthop\", StaticRouteArgs.builder()\n            .type(\"nexthop-route\")\n            .network(\"172.17.0.0/16\")\n            .name(\"basic nexthop\")\n            .distance(1)\n            .nextHop(\"172.16.0.1\")\n            .build());\n\n        var blackhole = new StaticRoute(\"blackhole\", StaticRouteArgs.builder()\n            .type(\"blackhole\")\n            .network(blackholeCidr)\n            .name(\"blackhole traffice to cidr\")\n            .distance(1)\n            .build());\n\n        var interface_ = new StaticRoute(\"interface\", StaticRouteArgs.builder()\n            .type(\"interface-route\")\n            .network(wan2Cidr)\n            .name(\"send traffic over wan2\")\n            .distance(1)\n            .interface_(\"WAN2\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  nexthop:\n    type: unifi:StaticRoute\n    properties:\n      type: nexthop-route\n      network: 172.17.0.0/16\n      name: basic nexthop\n      distance: 1\n      nextHop: 172.16.0.1\n  blackhole:\n    type: unifi:StaticRoute\n    properties:\n      type: blackhole\n      network: ${blackholeCidr}\n      name: blackhole traffice to cidr\n      distance: 1\n  interface:\n    type: unifi:StaticRoute\n    properties:\n      type: interface-route\n      network: ${wan2Cidr}\n      name: send traffic over wan2\n      distance: 1\n      interface: WAN2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"distance":{"type":"integer","description":"The administrative distance for this route. Lower values are preferred. Use this to control route selection when multiple routes to the same destination exist."},"interface":{"type":"string","description":"The outbound interface to use for this route. Only used when type is set to 'interface-route'. Can be:\n  * `WAN1` - Primary WAN interface\n  * `WAN2` - Secondary WAN interface\n  * A network ID for internal networks"},"name":{"type":"string","description":"A friendly name for the static route to help identify its purpose (e.g., 'Backup DC Link' or 'Cloud VPN Route')."},"network":{"type":"string","description":"The destination network in CIDR notation that this route will direct traffic to (e.g., '10.0.0.0/16' or '192.168.100.0/24')."},"nextHop":{"type":"string","description":"The IP address of the next hop router for this route. Only used when type is set to 'nexthop-route'. This should be an IP address that is directly reachable from your UniFi gateway."},"site":{"type":"string","description":"The name of the UniFi site where the static route should be created. If not specified, the default site will be used."},"type":{"type":"string","description":"The type of static route. Valid values are:\n  * `interface-route` - Route traffic through a specific interface\n  * `nexthop-route` - Route traffic to a specific next-hop IP address\n  * \u003cspan pulumi-lang-nodejs=\"`blackhole`\" pulumi-lang-dotnet=\"`Blackhole`\" pulumi-lang-go=\"`blackhole`\" pulumi-lang-python=\"`blackhole`\" pulumi-lang-yaml=\"`blackhole`\" pulumi-lang-java=\"`blackhole`\"\u003e`blackhole`\u003c/span\u003e - Drop all traffic to this network"}},"required":["distance","name","network","site","type"],"inputProperties":{"distance":{"type":"integer","description":"The administrative distance for this route. Lower values are preferred. Use this to control route selection when multiple routes to the same destination exist."},"interface":{"type":"string","description":"The outbound interface to use for this route. Only used when type is set to 'interface-route'. Can be:\n  * `WAN1` - Primary WAN interface\n  * `WAN2` - Secondary WAN interface\n  * A network ID for internal networks"},"name":{"type":"string","description":"A friendly name for the static route to help identify its purpose (e.g., 'Backup DC Link' or 'Cloud VPN Route')."},"network":{"type":"string","description":"The destination network in CIDR notation that this route will direct traffic to (e.g., '10.0.0.0/16' or '192.168.100.0/24')."},"nextHop":{"type":"string","description":"The IP address of the next hop router for this route. Only used when type is set to 'nexthop-route'. This should be an IP address that is directly reachable from your UniFi gateway."},"site":{"type":"string","description":"The name of the UniFi site where the static route should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"type":{"type":"string","description":"The type of static route. Valid values are:\n  * `interface-route` - Route traffic through a specific interface\n  * `nexthop-route` - Route traffic to a specific next-hop IP address\n  * \u003cspan pulumi-lang-nodejs=\"`blackhole`\" pulumi-lang-dotnet=\"`Blackhole`\" pulumi-lang-go=\"`blackhole`\" pulumi-lang-python=\"`blackhole`\" pulumi-lang-yaml=\"`blackhole`\" pulumi-lang-java=\"`blackhole`\"\u003e`blackhole`\u003c/span\u003e - Drop all traffic to this network"}},"requiredInputs":["distance","network","type"],"stateInputs":{"description":"Input properties used for looking up and filtering StaticRoute resources.\n","properties":{"distance":{"type":"integer","description":"The administrative distance for this route. Lower values are preferred. Use this to control route selection when multiple routes to the same destination exist."},"interface":{"type":"string","description":"The outbound interface to use for this route. Only used when type is set to 'interface-route'. Can be:\n  * `WAN1` - Primary WAN interface\n  * `WAN2` - Secondary WAN interface\n  * A network ID for internal networks"},"name":{"type":"string","description":"A friendly name for the static route to help identify its purpose (e.g., 'Backup DC Link' or 'Cloud VPN Route')."},"network":{"type":"string","description":"The destination network in CIDR notation that this route will direct traffic to (e.g., '10.0.0.0/16' or '192.168.100.0/24')."},"nextHop":{"type":"string","description":"The IP address of the next hop router for this route. Only used when type is set to 'nexthop-route'. This should be an IP address that is directly reachable from your UniFi gateway."},"site":{"type":"string","description":"The name of the UniFi site where the static route should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"type":{"type":"string","description":"The type of static route. Valid values are:\n  * `interface-route` - Route traffic through a specific interface\n  * `nexthop-route` - Route traffic to a specific next-hop IP address\n  * \u003cspan pulumi-lang-nodejs=\"`blackhole`\" pulumi-lang-dotnet=\"`Blackhole`\" pulumi-lang-go=\"`blackhole`\" pulumi-lang-python=\"`blackhole`\" pulumi-lang-yaml=\"`blackhole`\" pulumi-lang-java=\"`blackhole`\"\u003e`blackhole`\u003c/span\u003e - Drop all traffic to this network"}},"type":"object"}},"unifi:index/wlan:Wlan":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.Wlan`\" pulumi-lang-dotnet=\"`unifi.Wlan`\" pulumi-lang-go=\"`Wlan`\" pulumi-lang-python=\"`Wlan`\" pulumi-lang-yaml=\"`unifi.Wlan`\" pulumi-lang-java=\"`unifi.Wlan`\"\u003e`unifi.Wlan`\u003c/span\u003e resource manages wireless networks (SSIDs) on UniFi access points.\n\nThis resource allows you to create and manage WiFi networks with various security options including WPA2, WPA3, and enterprise authentication. You can configure features such as guest policies, minimum data rates, band steering, and scheduled availability.\n\nEach WLAN can be customized with different security settings, VLAN assignments, and client options to meet specific networking requirements.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst config = new pulumi.Config();\nconst vlanId = config.getNumber(\"vlanId\") || 10;\nconst _default = unifi.getApGroup({});\nconst defaultGetGroup = unifi.iam.getGroup({});\nconst vlan = new unifi.Network(\"vlan\", {\n    name: \"wifi-vlan\",\n    purpose: \"corporate\",\n    subnet: \"10.0.0.1/24\",\n    vlanId: vlanId,\n    dhcpStart: \"10.0.0.6\",\n    dhcpStop: \"10.0.0.254\",\n    dhcpEnabled: true,\n});\nconst wifi = new unifi.Wlan(\"wifi\", {\n    name: \"myssid\",\n    passphrase: \"12345678\",\n    security: \"wpapsk\",\n    wpa3Support: true,\n    wpa3Transition: true,\n    pmfMode: \"optional\",\n    networkId: vlan.id,\n    apGroupIds: [_default.then(_default =\u003e _default.id)],\n    userGroupId: defaultGetGroup.then(defaultGetGroup =\u003e defaultGetGroup.id),\n});\n```\n```python\nimport pulumi\nimport pulumi_unifi as unifi\nimport pulumiverse_unifi as unifi\n\nconfig = pulumi.Config()\nvlan_id = config.get_float(\"vlanId\")\nif vlan_id is None:\n    vlan_id = 10\ndefault = unifi.get_ap_group()\ndefault_get_group = unifi.iam.get_group()\nvlan = unifi.Network(\"vlan\",\n    name=\"wifi-vlan\",\n    purpose=\"corporate\",\n    subnet=\"10.0.0.1/24\",\n    vlan_id=vlan_id,\n    dhcp_start=\"10.0.0.6\",\n    dhcp_stop=\"10.0.0.254\",\n    dhcp_enabled=True)\nwifi = unifi.Wlan(\"wifi\",\n    name=\"myssid\",\n    passphrase=\"12345678\",\n    security=\"wpapsk\",\n    wpa3_support=True,\n    wpa3_transition=True,\n    pmf_mode=\"optional\",\n    network_id=vlan.id,\n    ap_group_ids=[default.id],\n    user_group_id=default_get_group.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Config();\n    var vlanId = config.GetDouble(\"vlanId\") ?? 10;\n    var @default = Unifi.GetApGroup.Invoke();\n\n    var defaultGetGroup = Unifi.IAM.GetGroup.Invoke();\n\n    var vlan = new Unifi.Network(\"vlan\", new()\n    {\n        Name = \"wifi-vlan\",\n        Purpose = \"corporate\",\n        Subnet = \"10.0.0.1/24\",\n        VlanId = vlanId,\n        DhcpStart = \"10.0.0.6\",\n        DhcpStop = \"10.0.0.254\",\n        DhcpEnabled = true,\n    });\n\n    var wifi = new Unifi.Wlan(\"wifi\", new()\n    {\n        Name = \"myssid\",\n        Passphrase = \"12345678\",\n        Security = \"wpapsk\",\n        Wpa3Support = true,\n        Wpa3Transition = true,\n        PmfMode = \"optional\",\n        NetworkId = vlan.Id,\n        ApGroupIds = new[]\n        {\n            @default.Apply(@default =\u003e @default.Apply(getApGroupResult =\u003e getApGroupResult.Id)),\n        },\n        UserGroupId = defaultGetGroup.Apply(getGroupResult =\u003e getGroupResult.Id),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/iam\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tvlanId := float64(10)\n\t\tif param := cfg.GetFloat64(\"vlanId\"); param != 0 {\n\t\t\tvlanId = param\n\t\t}\n\t\t_default, err := unifi.GetApGroup(ctx, \u0026unifi.GetApGroupArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultGetGroup, err := iam.LookupGroup(ctx, \u0026iam.LookupGroupArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvlan, err := unifi.NewNetwork(ctx, \"vlan\", \u0026unifi.NetworkArgs{\n\t\t\tName:        pulumi.String(\"wifi-vlan\"),\n\t\t\tPurpose:     pulumi.String(\"corporate\"),\n\t\t\tSubnet:      pulumi.String(\"10.0.0.1/24\"),\n\t\t\tVlanId:      pulumi.Float64(vlanId),\n\t\t\tDhcpStart:   pulumi.String(\"10.0.0.6\"),\n\t\t\tDhcpStop:    pulumi.String(\"10.0.0.254\"),\n\t\t\tDhcpEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = unifi.NewWlan(ctx, \"wifi\", \u0026unifi.WlanArgs{\n\t\t\tName:           pulumi.String(\"myssid\"),\n\t\t\tPassphrase:     pulumi.String(\"12345678\"),\n\t\t\tSecurity:       pulumi.String(\"wpapsk\"),\n\t\t\tWpa3Support:    pulumi.Bool(true),\n\t\t\tWpa3Transition: pulumi.Bool(true),\n\t\t\tPmfMode:        pulumi.String(\"optional\"),\n\t\t\tNetworkId:      vlan.ID(),\n\t\t\tApGroupIds: pulumi.StringArray{\n\t\t\t\tpulumi.String(_default.Id),\n\t\t\t},\n\t\t\tUserGroupId: pulumi.String(defaultGetGroup.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.unifi.UnifiFunctions;\nimport com.pulumi.unifi.inputs.GetApGroupArgs;\nimport com.pulumi.unifi.iam.IamFunctions;\nimport com.pulumi.unifi.iam.inputs.GetGroupArgs;\nimport com.pulumiverse.unifi.Network;\nimport com.pulumiverse.unifi.NetworkArgs;\nimport com.pulumiverse.unifi.Wlan;\nimport com.pulumiverse.unifi.WlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var config = ctx.config();\n        final var vlanId = config.get(\"vlanId\").orElse(10);\n        final var default = UnifiFunctions.getApGroup(GetApGroupArgs.builder()\n            .build());\n\n        final var defaultGetGroup = IamFunctions.getGroup(GetGroupArgs.builder()\n            .build());\n\n        var vlan = new Network(\"vlan\", NetworkArgs.builder()\n            .name(\"wifi-vlan\")\n            .purpose(\"corporate\")\n            .subnet(\"10.0.0.1/24\")\n            .vlanId(vlanId)\n            .dhcpStart(\"10.0.0.6\")\n            .dhcpStop(\"10.0.0.254\")\n            .dhcpEnabled(true)\n            .build());\n\n        var wifi = new Wlan(\"wifi\", WlanArgs.builder()\n            .name(\"myssid\")\n            .passphrase(\"12345678\")\n            .security(\"wpapsk\")\n            .wpa3Support(true)\n            .wpa3Transition(true)\n            .pmfMode(\"optional\")\n            .networkId(vlan.id())\n            .apGroupIds(default_.id())\n            .userGroupId(defaultGetGroup.id())\n            .build());\n\n    }\n}\n```\n```yaml\nconfiguration:\n  vlanId:\n    type: number\n    default: 10\nresources:\n  vlan:\n    type: unifi:Network\n    properties:\n      name: wifi-vlan\n      purpose: corporate\n      subnet: 10.0.0.1/24\n      vlanId: ${vlanId}\n      dhcpStart: 10.0.0.6\n      dhcpStop: 10.0.0.254\n      dhcpEnabled: true\n  wifi:\n    type: unifi:Wlan\n    properties:\n      name: myssid\n      passphrase: '12345678'\n      security: wpapsk\n      wpa3Support: true\n      wpa3Transition: true\n      pmfMode: optional\n      networkId: ${vlan.id}\n      apGroupIds:\n        - ${default.id}\n      userGroupId: ${defaultGetGroup.id}\nvariables:\n  default:\n    fn::invoke:\n      function: unifi:getApGroup\n      arguments: {}\n  defaultGetGroup:\n    fn::invoke:\n      function: unifi:iam:getGroup\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nimport from provider configured site\n\n```sh\n$ pulumi import unifi:index/wlan:Wlan mywlan 5dc28e5e9106d105bdc87217\n```\n\nimport from another site\n\n```sh\n$ pulumi import unifi:index/wlan:Wlan mywlan bfa2l6i7:5dc28e5e9106d105bdc87217\n```\n\n","properties":{"apGroupIds":{"type":"array","items":{"type":"string"},"description":"IDs of the AP groups that should broadcast this SSID. Used to control which access points broadcast this network."},"bssTransition":{"type":"boolean","description":"Enable BSS Transition Management to help clients roam between APs more efficiently."},"fastRoamingEnabled":{"type":"boolean","description":"Enable 802.11r Fast BSS Transition for seamless roaming between APs. Requires client device support."},"hideSsid":{"type":"boolean","description":"When enabled, the access points will not broadcast the network name (SSID). Clients will need to manually enter the SSID to connect."},"isGuest":{"type":"boolean","description":"Mark this as a guest network. Guest networks are isolated from other networks and can have special restrictions like captive portals."},"l2Isolation":{"type":"boolean","description":"Isolates wireless clients from each other at layer 2 (ethernet) level. When enabled, devices on this WLAN cannot communicate directly with each other, improving security especially for guest networks or IoT devices. Each client can only communicate with the gateway/router."},"macFilterEnabled":{"type":"boolean","description":"Enable MAC address filtering to control network access based on client MAC addresses. Works in conjunction with \u003cspan pulumi-lang-nodejs=\"`macFilterList`\" pulumi-lang-dotnet=\"`MacFilterList`\" pulumi-lang-go=\"`macFilterList`\" pulumi-lang-python=\"`mac_filter_list`\" pulumi-lang-yaml=\"`macFilterList`\" pulumi-lang-java=\"`macFilterList`\"\u003e`mac_filter_list`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`macFilterPolicy`\" pulumi-lang-dotnet=\"`MacFilterPolicy`\" pulumi-lang-go=\"`macFilterPolicy`\" pulumi-lang-python=\"`mac_filter_policy`\" pulumi-lang-yaml=\"`macFilterPolicy`\" pulumi-lang-java=\"`macFilterPolicy`\"\u003e`mac_filter_policy`\u003c/span\u003e."},"macFilterLists":{"type":"array","items":{"type":"string"},"description":"List of MAC addresses to filter in XX:XX:XX:XX:XX:XX format. Only applied when \u003cspan pulumi-lang-nodejs=\"`macFilterEnabled`\" pulumi-lang-dotnet=\"`MacFilterEnabled`\" pulumi-lang-go=\"`macFilterEnabled`\" pulumi-lang-python=\"`mac_filter_enabled`\" pulumi-lang-yaml=\"`macFilterEnabled`\" pulumi-lang-java=\"`macFilterEnabled`\"\u003e`mac_filter_enabled`\u003c/span\u003e is true. MAC addresses are case-insensitive."},"macFilterPolicy":{"type":"string","description":"MAC address filter policy. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`allow`\" pulumi-lang-dotnet=\"`Allow`\" pulumi-lang-go=\"`allow`\" pulumi-lang-python=\"`allow`\" pulumi-lang-yaml=\"`allow`\" pulumi-lang-java=\"`allow`\"\u003e`allow`\u003c/span\u003e - Only allow listed MAC addresses\n  * \u003cspan pulumi-lang-nodejs=\"`deny`\" pulumi-lang-dotnet=\"`Deny`\" pulumi-lang-go=\"`deny`\" pulumi-lang-python=\"`deny`\" pulumi-lang-yaml=\"`deny`\" pulumi-lang-java=\"`deny`\"\u003e`deny`\u003c/span\u003e - Block listed MAC addresses"},"minimumDataRate2gKbps":{"type":"integer","description":"Minimum data rate for 2.4GHz devices in Kbps. Use \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e to disable. Valid values: \u003cspan pulumi-lang-nodejs=\"`1000`\" pulumi-lang-dotnet=\"`1000`\" pulumi-lang-go=\"`1000`\" pulumi-lang-python=\"`1000`\" pulumi-lang-yaml=\"`1000`\" pulumi-lang-java=\"`1000`\"\u003e`1000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`2000`\" pulumi-lang-dotnet=\"`2000`\" pulumi-lang-go=\"`2000`\" pulumi-lang-python=\"`2000`\" pulumi-lang-yaml=\"`2000`\" pulumi-lang-java=\"`2000`\"\u003e`2000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`5500`\" pulumi-lang-dotnet=\"`5500`\" pulumi-lang-go=\"`5500`\" pulumi-lang-python=\"`5500`\" pulumi-lang-yaml=\"`5500`\" pulumi-lang-java=\"`5500`\"\u003e`5500`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`6000`\" pulumi-lang-dotnet=\"`6000`\" pulumi-lang-go=\"`6000`\" pulumi-lang-python=\"`6000`\" pulumi-lang-yaml=\"`6000`\" pulumi-lang-java=\"`6000`\"\u003e`6000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`9000`\" pulumi-lang-dotnet=\"`9000`\" pulumi-lang-go=\"`9000`\" pulumi-lang-python=\"`9000`\" pulumi-lang-yaml=\"`9000`\" pulumi-lang-java=\"`9000`\"\u003e`9000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`11000`\" pulumi-lang-dotnet=\"`11000`\" pulumi-lang-go=\"`11000`\" pulumi-lang-python=\"`11000`\" pulumi-lang-yaml=\"`11000`\" pulumi-lang-java=\"`11000`\"\u003e`11000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`12000`\" pulumi-lang-dotnet=\"`12000`\" pulumi-lang-go=\"`12000`\" pulumi-lang-python=\"`12000`\" pulumi-lang-yaml=\"`12000`\" pulumi-lang-java=\"`12000`\"\u003e`12000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`18000`\" pulumi-lang-dotnet=\"`18000`\" pulumi-lang-go=\"`18000`\" pulumi-lang-python=\"`18000`\" pulumi-lang-yaml=\"`18000`\" pulumi-lang-java=\"`18000`\"\u003e`18000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`24000`\" pulumi-lang-dotnet=\"`24000`\" pulumi-lang-go=\"`24000`\" pulumi-lang-python=\"`24000`\" pulumi-lang-yaml=\"`24000`\" pulumi-lang-java=\"`24000`\"\u003e`24000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`36000`\" pulumi-lang-dotnet=\"`36000`\" pulumi-lang-go=\"`36000`\" pulumi-lang-python=\"`36000`\" pulumi-lang-yaml=\"`36000`\" pulumi-lang-java=\"`36000`\"\u003e`36000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`48000`\" pulumi-lang-dotnet=\"`48000`\" pulumi-lang-go=\"`48000`\" pulumi-lang-python=\"`48000`\" pulumi-lang-yaml=\"`48000`\" pulumi-lang-java=\"`48000`\"\u003e`48000`\u003c/span\u003e,  and \u003cspan pulumi-lang-nodejs=\"`54000`\" pulumi-lang-dotnet=\"`54000`\" pulumi-lang-go=\"`54000`\" pulumi-lang-python=\"`54000`\" pulumi-lang-yaml=\"`54000`\" pulumi-lang-java=\"`54000`\"\u003e`54000`\u003c/span\u003e"},"minimumDataRate5gKbps":{"type":"integer","description":"Minimum data rate for 5GHz devices in Kbps. Use \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e to disable. Valid values: \u003cspan pulumi-lang-nodejs=\"`6000`\" pulumi-lang-dotnet=\"`6000`\" pulumi-lang-go=\"`6000`\" pulumi-lang-python=\"`6000`\" pulumi-lang-yaml=\"`6000`\" pulumi-lang-java=\"`6000`\"\u003e`6000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`9000`\" pulumi-lang-dotnet=\"`9000`\" pulumi-lang-go=\"`9000`\" pulumi-lang-python=\"`9000`\" pulumi-lang-yaml=\"`9000`\" pulumi-lang-java=\"`9000`\"\u003e`9000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`12000`\" pulumi-lang-dotnet=\"`12000`\" pulumi-lang-go=\"`12000`\" pulumi-lang-python=\"`12000`\" pulumi-lang-yaml=\"`12000`\" pulumi-lang-java=\"`12000`\"\u003e`12000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`18000`\" pulumi-lang-dotnet=\"`18000`\" pulumi-lang-go=\"`18000`\" pulumi-lang-python=\"`18000`\" pulumi-lang-yaml=\"`18000`\" pulumi-lang-java=\"`18000`\"\u003e`18000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`24000`\" pulumi-lang-dotnet=\"`24000`\" pulumi-lang-go=\"`24000`\" pulumi-lang-python=\"`24000`\" pulumi-lang-yaml=\"`24000`\" pulumi-lang-java=\"`24000`\"\u003e`24000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`36000`\" pulumi-lang-dotnet=\"`36000`\" pulumi-lang-go=\"`36000`\" pulumi-lang-python=\"`36000`\" pulumi-lang-yaml=\"`36000`\" pulumi-lang-java=\"`36000`\"\u003e`36000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`48000`\" pulumi-lang-dotnet=\"`48000`\" pulumi-lang-go=\"`48000`\" pulumi-lang-python=\"`48000`\" pulumi-lang-yaml=\"`48000`\" pulumi-lang-java=\"`48000`\"\u003e`48000`\u003c/span\u003e,  and \u003cspan pulumi-lang-nodejs=\"`54000`\" pulumi-lang-dotnet=\"`54000`\" pulumi-lang-go=\"`54000`\" pulumi-lang-python=\"`54000`\" pulumi-lang-yaml=\"`54000`\" pulumi-lang-java=\"`54000`\"\u003e`54000`\u003c/span\u003e"},"multicastEnhance":{"type":"boolean","description":"Enable multicast enhancement to convert multicast traffic to unicast for better reliability and performance, especially for applications like video streaming."},"name":{"type":"string","description":"The SSID (network name) that will be broadcast by the access points. Must be between 1 and 32 characters long."},"networkId":{"type":"string","description":"ID of the network (VLAN) for this SSID. Used to assign the WLAN to a specific network segment."},"no2ghzOui":{"type":"boolean","description":"When enabled, devices from specific manufacturers (identified by their OUI - Organizationally Unique Identifier) will be prevented from connecting on 2.4GHz and forced to use 5GHz. This improves overall network performance by ensuring capable devices use the less congested 5GHz band. Common examples include newer smartphones and laptops."},"passphrase":{"type":"string","description":"The WPA pre-shared key (password) for the network. Required when security is not set to \u003cspan pulumi-lang-nodejs=\"`open`\" pulumi-lang-dotnet=\"`Open`\" pulumi-lang-go=\"`open`\" pulumi-lang-python=\"`open`\" pulumi-lang-yaml=\"`open`\" pulumi-lang-java=\"`open`\"\u003e`open`\u003c/span\u003e.","secret":true},"pmfMode":{"type":"string","description":"Protected Management Frames (PMF) mode. It cannot be disabled if using WPA3. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`required`\" pulumi-lang-dotnet=\"`Required`\" pulumi-lang-go=\"`required`\" pulumi-lang-python=\"`required`\" pulumi-lang-yaml=\"`required`\" pulumi-lang-java=\"`required`\"\u003e`required`\u003c/span\u003e - All clients must support PMF (required for WPA3)\n  * \u003cspan pulumi-lang-nodejs=\"`optional`\" pulumi-lang-dotnet=\"`Optional`\" pulumi-lang-go=\"`optional`\" pulumi-lang-python=\"`optional`\" pulumi-lang-yaml=\"`optional`\" pulumi-lang-java=\"`optional`\"\u003e`optional`\u003c/span\u003e - Clients can optionally use PMF (recommended when transitioning from WPA2 to WPA3)\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - PMF is disabled (not compatible with WPA3)"},"proxyArp":{"type":"boolean","description":"Enable ARP proxy on this WLAN. When enabled, the UniFi controller will respond to ARP requests on behalf of clients, reducing broadcast traffic and potentially improving network performance. This is particularly useful in high-density wireless environments."},"radiusProfileId":{"type":"string","description":"ID of the RADIUS profile to use for WPA Enterprise authentication (when security is 'wpaeap'). Reference existing profiles using the \u003cspan pulumi-lang-nodejs=\"`unifi.RadiusProfile`\" pulumi-lang-dotnet=\"`unifi.RadiusProfile`\" pulumi-lang-go=\"`RadiusProfile`\" pulumi-lang-python=\"`RadiusProfile`\" pulumi-lang-yaml=\"`unifi.RadiusProfile`\" pulumi-lang-java=\"`unifi.RadiusProfile`\"\u003e`unifi.RadiusProfile`\u003c/span\u003e data source."},"schedules":{"type":"array","items":{"$ref":"#/types/unifi:index/WlanSchedule:WlanSchedule"},"description":"Time-based access control configuration for the wireless network. Allows automatic enabling/disabling of the network on specified schedules."},"security":{"type":"string","description":"The security protocol for the wireless network. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`wpapsk`\" pulumi-lang-dotnet=\"`Wpapsk`\" pulumi-lang-go=\"`wpapsk`\" pulumi-lang-python=\"`wpapsk`\" pulumi-lang-yaml=\"`wpapsk`\" pulumi-lang-java=\"`wpapsk`\"\u003e`wpapsk`\u003c/span\u003e - WPA Personal (PSK) with WPA2/WPA3 options\n  * \u003cspan pulumi-lang-nodejs=\"`wpaeap`\" pulumi-lang-dotnet=\"`Wpaeap`\" pulumi-lang-go=\"`wpaeap`\" pulumi-lang-python=\"`wpaeap`\" pulumi-lang-yaml=\"`wpaeap`\" pulumi-lang-java=\"`wpaeap`\"\u003e`wpaeap`\u003c/span\u003e - WPA Enterprise (802.1x)\n  * \u003cspan pulumi-lang-nodejs=\"`open`\" pulumi-lang-dotnet=\"`Open`\" pulumi-lang-go=\"`open`\" pulumi-lang-python=\"`open`\" pulumi-lang-yaml=\"`open`\" pulumi-lang-java=\"`open`\"\u003e`open`\u003c/span\u003e - Open network (no encryption)"},"site":{"type":"string","description":"The name of the UniFi site where the wireless network should be created. If not specified, the default site will be used."},"uapsd":{"type":"boolean","description":"Enable Unscheduled Automatic Power Save Delivery to improve battery life for mobile devices."},"userGroupId":{"type":"string","description":"The ID of the user group that defines the rate limiting and firewall rules for clients on this network."},"wlanBand":{"type":"string","description":"Radio band selection. Valid values:\n  * \u003cspan pulumi-lang-nodejs=\"`both`\" pulumi-lang-dotnet=\"`Both`\" pulumi-lang-go=\"`both`\" pulumi-lang-python=\"`both`\" pulumi-lang-yaml=\"`both`\" pulumi-lang-java=\"`both`\"\u003e`both`\u003c/span\u003e - Both 2.4GHz and 5GHz (default)\n  * \u003cspan pulumi-lang-nodejs=\"`2g`\" pulumi-lang-dotnet=\"`2g`\" pulumi-lang-go=\"`2g`\" pulumi-lang-python=\"`2g`\" pulumi-lang-yaml=\"`2g`\" pulumi-lang-java=\"`2g`\"\u003e`2g`\u003c/span\u003e - 2.4GHz only\n  * \u003cspan pulumi-lang-nodejs=\"`5g`\" pulumi-lang-dotnet=\"`5g`\" pulumi-lang-go=\"`5g`\" pulumi-lang-python=\"`5g`\" pulumi-lang-yaml=\"`5g`\" pulumi-lang-java=\"`5g`\"\u003e`5g`\u003c/span\u003e - 5GHz only"},"wpa3Support":{"type":"boolean","description":"Enable WPA3 security protocol. Requires security to be set to \u003cspan pulumi-lang-nodejs=\"`wpapsk`\" pulumi-lang-dotnet=\"`Wpapsk`\" pulumi-lang-go=\"`wpapsk`\" pulumi-lang-python=\"`wpapsk`\" pulumi-lang-yaml=\"`wpapsk`\" pulumi-lang-java=\"`wpapsk`\"\u003e`wpapsk`\u003c/span\u003e and PMF mode to be enabled. WPA3 provides enhanced security features over WPA2."},"wpa3Transition":{"type":"boolean","description":"Enable WPA3 transition mode, which allows both WPA2 and WPA3 clients to connect. This provides backward compatibility while gradually transitioning to WPA3. Requires security to be set to \u003cspan pulumi-lang-nodejs=\"`wpapsk`\" pulumi-lang-dotnet=\"`Wpapsk`\" pulumi-lang-go=\"`wpapsk`\" pulumi-lang-python=\"`wpapsk`\" pulumi-lang-yaml=\"`wpapsk`\" pulumi-lang-java=\"`wpapsk`\"\u003e`wpapsk`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`wpa3Support`\" pulumi-lang-dotnet=\"`Wpa3Support`\" pulumi-lang-go=\"`wpa3Support`\" pulumi-lang-python=\"`wpa3_support`\" pulumi-lang-yaml=\"`wpa3Support`\" pulumi-lang-java=\"`wpa3Support`\"\u003e`wpa3_support`\u003c/span\u003e to be true."}},"required":["name","security","site","userGroupId"],"inputProperties":{"apGroupIds":{"type":"array","items":{"type":"string"},"description":"IDs of the AP groups that should broadcast this SSID. Used to control which access points broadcast this network."},"bssTransition":{"type":"boolean","description":"Enable BSS Transition Management to help clients roam between APs more efficiently."},"fastRoamingEnabled":{"type":"boolean","description":"Enable 802.11r Fast BSS Transition for seamless roaming between APs. Requires client device support."},"hideSsid":{"type":"boolean","description":"When enabled, the access points will not broadcast the network name (SSID). Clients will need to manually enter the SSID to connect."},"isGuest":{"type":"boolean","description":"Mark this as a guest network. Guest networks are isolated from other networks and can have special restrictions like captive portals."},"l2Isolation":{"type":"boolean","description":"Isolates wireless clients from each other at layer 2 (ethernet) level. When enabled, devices on this WLAN cannot communicate directly with each other, improving security especially for guest networks or IoT devices. Each client can only communicate with the gateway/router."},"macFilterEnabled":{"type":"boolean","description":"Enable MAC address filtering to control network access based on client MAC addresses. Works in conjunction with \u003cspan pulumi-lang-nodejs=\"`macFilterList`\" pulumi-lang-dotnet=\"`MacFilterList`\" pulumi-lang-go=\"`macFilterList`\" pulumi-lang-python=\"`mac_filter_list`\" pulumi-lang-yaml=\"`macFilterList`\" pulumi-lang-java=\"`macFilterList`\"\u003e`mac_filter_list`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`macFilterPolicy`\" pulumi-lang-dotnet=\"`MacFilterPolicy`\" pulumi-lang-go=\"`macFilterPolicy`\" pulumi-lang-python=\"`mac_filter_policy`\" pulumi-lang-yaml=\"`macFilterPolicy`\" pulumi-lang-java=\"`macFilterPolicy`\"\u003e`mac_filter_policy`\u003c/span\u003e."},"macFilterLists":{"type":"array","items":{"type":"string"},"description":"List of MAC addresses to filter in XX:XX:XX:XX:XX:XX format. Only applied when \u003cspan pulumi-lang-nodejs=\"`macFilterEnabled`\" pulumi-lang-dotnet=\"`MacFilterEnabled`\" pulumi-lang-go=\"`macFilterEnabled`\" pulumi-lang-python=\"`mac_filter_enabled`\" pulumi-lang-yaml=\"`macFilterEnabled`\" pulumi-lang-java=\"`macFilterEnabled`\"\u003e`mac_filter_enabled`\u003c/span\u003e is true. MAC addresses are case-insensitive."},"macFilterPolicy":{"type":"string","description":"MAC address filter policy. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`allow`\" pulumi-lang-dotnet=\"`Allow`\" pulumi-lang-go=\"`allow`\" pulumi-lang-python=\"`allow`\" pulumi-lang-yaml=\"`allow`\" pulumi-lang-java=\"`allow`\"\u003e`allow`\u003c/span\u003e - Only allow listed MAC addresses\n  * \u003cspan pulumi-lang-nodejs=\"`deny`\" pulumi-lang-dotnet=\"`Deny`\" pulumi-lang-go=\"`deny`\" pulumi-lang-python=\"`deny`\" pulumi-lang-yaml=\"`deny`\" pulumi-lang-java=\"`deny`\"\u003e`deny`\u003c/span\u003e - Block listed MAC addresses"},"minimumDataRate2gKbps":{"type":"integer","description":"Minimum data rate for 2.4GHz devices in Kbps. Use \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e to disable. Valid values: \u003cspan pulumi-lang-nodejs=\"`1000`\" pulumi-lang-dotnet=\"`1000`\" pulumi-lang-go=\"`1000`\" pulumi-lang-python=\"`1000`\" pulumi-lang-yaml=\"`1000`\" pulumi-lang-java=\"`1000`\"\u003e`1000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`2000`\" pulumi-lang-dotnet=\"`2000`\" pulumi-lang-go=\"`2000`\" pulumi-lang-python=\"`2000`\" pulumi-lang-yaml=\"`2000`\" pulumi-lang-java=\"`2000`\"\u003e`2000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`5500`\" pulumi-lang-dotnet=\"`5500`\" pulumi-lang-go=\"`5500`\" pulumi-lang-python=\"`5500`\" pulumi-lang-yaml=\"`5500`\" pulumi-lang-java=\"`5500`\"\u003e`5500`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`6000`\" pulumi-lang-dotnet=\"`6000`\" pulumi-lang-go=\"`6000`\" pulumi-lang-python=\"`6000`\" pulumi-lang-yaml=\"`6000`\" pulumi-lang-java=\"`6000`\"\u003e`6000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`9000`\" pulumi-lang-dotnet=\"`9000`\" pulumi-lang-go=\"`9000`\" pulumi-lang-python=\"`9000`\" pulumi-lang-yaml=\"`9000`\" pulumi-lang-java=\"`9000`\"\u003e`9000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`11000`\" pulumi-lang-dotnet=\"`11000`\" pulumi-lang-go=\"`11000`\" pulumi-lang-python=\"`11000`\" pulumi-lang-yaml=\"`11000`\" pulumi-lang-java=\"`11000`\"\u003e`11000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`12000`\" pulumi-lang-dotnet=\"`12000`\" pulumi-lang-go=\"`12000`\" pulumi-lang-python=\"`12000`\" pulumi-lang-yaml=\"`12000`\" pulumi-lang-java=\"`12000`\"\u003e`12000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`18000`\" pulumi-lang-dotnet=\"`18000`\" pulumi-lang-go=\"`18000`\" pulumi-lang-python=\"`18000`\" pulumi-lang-yaml=\"`18000`\" pulumi-lang-java=\"`18000`\"\u003e`18000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`24000`\" pulumi-lang-dotnet=\"`24000`\" pulumi-lang-go=\"`24000`\" pulumi-lang-python=\"`24000`\" pulumi-lang-yaml=\"`24000`\" pulumi-lang-java=\"`24000`\"\u003e`24000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`36000`\" pulumi-lang-dotnet=\"`36000`\" pulumi-lang-go=\"`36000`\" pulumi-lang-python=\"`36000`\" pulumi-lang-yaml=\"`36000`\" pulumi-lang-java=\"`36000`\"\u003e`36000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`48000`\" pulumi-lang-dotnet=\"`48000`\" pulumi-lang-go=\"`48000`\" pulumi-lang-python=\"`48000`\" pulumi-lang-yaml=\"`48000`\" pulumi-lang-java=\"`48000`\"\u003e`48000`\u003c/span\u003e,  and \u003cspan pulumi-lang-nodejs=\"`54000`\" pulumi-lang-dotnet=\"`54000`\" pulumi-lang-go=\"`54000`\" pulumi-lang-python=\"`54000`\" pulumi-lang-yaml=\"`54000`\" pulumi-lang-java=\"`54000`\"\u003e`54000`\u003c/span\u003e"},"minimumDataRate5gKbps":{"type":"integer","description":"Minimum data rate for 5GHz devices in Kbps. Use \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e to disable. Valid values: \u003cspan pulumi-lang-nodejs=\"`6000`\" pulumi-lang-dotnet=\"`6000`\" pulumi-lang-go=\"`6000`\" pulumi-lang-python=\"`6000`\" pulumi-lang-yaml=\"`6000`\" pulumi-lang-java=\"`6000`\"\u003e`6000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`9000`\" pulumi-lang-dotnet=\"`9000`\" pulumi-lang-go=\"`9000`\" pulumi-lang-python=\"`9000`\" pulumi-lang-yaml=\"`9000`\" pulumi-lang-java=\"`9000`\"\u003e`9000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`12000`\" pulumi-lang-dotnet=\"`12000`\" pulumi-lang-go=\"`12000`\" pulumi-lang-python=\"`12000`\" pulumi-lang-yaml=\"`12000`\" pulumi-lang-java=\"`12000`\"\u003e`12000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`18000`\" pulumi-lang-dotnet=\"`18000`\" pulumi-lang-go=\"`18000`\" pulumi-lang-python=\"`18000`\" pulumi-lang-yaml=\"`18000`\" pulumi-lang-java=\"`18000`\"\u003e`18000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`24000`\" pulumi-lang-dotnet=\"`24000`\" pulumi-lang-go=\"`24000`\" pulumi-lang-python=\"`24000`\" pulumi-lang-yaml=\"`24000`\" pulumi-lang-java=\"`24000`\"\u003e`24000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`36000`\" pulumi-lang-dotnet=\"`36000`\" pulumi-lang-go=\"`36000`\" pulumi-lang-python=\"`36000`\" pulumi-lang-yaml=\"`36000`\" pulumi-lang-java=\"`36000`\"\u003e`36000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`48000`\" pulumi-lang-dotnet=\"`48000`\" pulumi-lang-go=\"`48000`\" pulumi-lang-python=\"`48000`\" pulumi-lang-yaml=\"`48000`\" pulumi-lang-java=\"`48000`\"\u003e`48000`\u003c/span\u003e,  and \u003cspan pulumi-lang-nodejs=\"`54000`\" pulumi-lang-dotnet=\"`54000`\" pulumi-lang-go=\"`54000`\" pulumi-lang-python=\"`54000`\" pulumi-lang-yaml=\"`54000`\" pulumi-lang-java=\"`54000`\"\u003e`54000`\u003c/span\u003e"},"multicastEnhance":{"type":"boolean","description":"Enable multicast enhancement to convert multicast traffic to unicast for better reliability and performance, especially for applications like video streaming."},"name":{"type":"string","description":"The SSID (network name) that will be broadcast by the access points. Must be between 1 and 32 characters long."},"networkId":{"type":"string","description":"ID of the network (VLAN) for this SSID. Used to assign the WLAN to a specific network segment."},"no2ghzOui":{"type":"boolean","description":"When enabled, devices from specific manufacturers (identified by their OUI - Organizationally Unique Identifier) will be prevented from connecting on 2.4GHz and forced to use 5GHz. This improves overall network performance by ensuring capable devices use the less congested 5GHz band. Common examples include newer smartphones and laptops."},"passphrase":{"type":"string","description":"The WPA pre-shared key (password) for the network. Required when security is not set to \u003cspan pulumi-lang-nodejs=\"`open`\" pulumi-lang-dotnet=\"`Open`\" pulumi-lang-go=\"`open`\" pulumi-lang-python=\"`open`\" pulumi-lang-yaml=\"`open`\" pulumi-lang-java=\"`open`\"\u003e`open`\u003c/span\u003e.","secret":true},"pmfMode":{"type":"string","description":"Protected Management Frames (PMF) mode. It cannot be disabled if using WPA3. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`required`\" pulumi-lang-dotnet=\"`Required`\" pulumi-lang-go=\"`required`\" pulumi-lang-python=\"`required`\" pulumi-lang-yaml=\"`required`\" pulumi-lang-java=\"`required`\"\u003e`required`\u003c/span\u003e - All clients must support PMF (required for WPA3)\n  * \u003cspan pulumi-lang-nodejs=\"`optional`\" pulumi-lang-dotnet=\"`Optional`\" pulumi-lang-go=\"`optional`\" pulumi-lang-python=\"`optional`\" pulumi-lang-yaml=\"`optional`\" pulumi-lang-java=\"`optional`\"\u003e`optional`\u003c/span\u003e - Clients can optionally use PMF (recommended when transitioning from WPA2 to WPA3)\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - PMF is disabled (not compatible with WPA3)"},"proxyArp":{"type":"boolean","description":"Enable ARP proxy on this WLAN. When enabled, the UniFi controller will respond to ARP requests on behalf of clients, reducing broadcast traffic and potentially improving network performance. This is particularly useful in high-density wireless environments."},"radiusProfileId":{"type":"string","description":"ID of the RADIUS profile to use for WPA Enterprise authentication (when security is 'wpaeap'). Reference existing profiles using the \u003cspan pulumi-lang-nodejs=\"`unifi.RadiusProfile`\" pulumi-lang-dotnet=\"`unifi.RadiusProfile`\" pulumi-lang-go=\"`RadiusProfile`\" pulumi-lang-python=\"`RadiusProfile`\" pulumi-lang-yaml=\"`unifi.RadiusProfile`\" pulumi-lang-java=\"`unifi.RadiusProfile`\"\u003e`unifi.RadiusProfile`\u003c/span\u003e data source."},"schedules":{"type":"array","items":{"$ref":"#/types/unifi:index/WlanSchedule:WlanSchedule"},"description":"Time-based access control configuration for the wireless network. Allows automatic enabling/disabling of the network on specified schedules."},"security":{"type":"string","description":"The security protocol for the wireless network. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`wpapsk`\" pulumi-lang-dotnet=\"`Wpapsk`\" pulumi-lang-go=\"`wpapsk`\" pulumi-lang-python=\"`wpapsk`\" pulumi-lang-yaml=\"`wpapsk`\" pulumi-lang-java=\"`wpapsk`\"\u003e`wpapsk`\u003c/span\u003e - WPA Personal (PSK) with WPA2/WPA3 options\n  * \u003cspan pulumi-lang-nodejs=\"`wpaeap`\" pulumi-lang-dotnet=\"`Wpaeap`\" pulumi-lang-go=\"`wpaeap`\" pulumi-lang-python=\"`wpaeap`\" pulumi-lang-yaml=\"`wpaeap`\" pulumi-lang-java=\"`wpaeap`\"\u003e`wpaeap`\u003c/span\u003e - WPA Enterprise (802.1x)\n  * \u003cspan pulumi-lang-nodejs=\"`open`\" pulumi-lang-dotnet=\"`Open`\" pulumi-lang-go=\"`open`\" pulumi-lang-python=\"`open`\" pulumi-lang-yaml=\"`open`\" pulumi-lang-java=\"`open`\"\u003e`open`\u003c/span\u003e - Open network (no encryption)"},"site":{"type":"string","description":"The name of the UniFi site where the wireless network should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"uapsd":{"type":"boolean","description":"Enable Unscheduled Automatic Power Save Delivery to improve battery life for mobile devices."},"userGroupId":{"type":"string","description":"The ID of the user group that defines the rate limiting and firewall rules for clients on this network."},"wlanBand":{"type":"string","description":"Radio band selection. Valid values:\n  * \u003cspan pulumi-lang-nodejs=\"`both`\" pulumi-lang-dotnet=\"`Both`\" pulumi-lang-go=\"`both`\" pulumi-lang-python=\"`both`\" pulumi-lang-yaml=\"`both`\" pulumi-lang-java=\"`both`\"\u003e`both`\u003c/span\u003e - Both 2.4GHz and 5GHz (default)\n  * \u003cspan pulumi-lang-nodejs=\"`2g`\" pulumi-lang-dotnet=\"`2g`\" pulumi-lang-go=\"`2g`\" pulumi-lang-python=\"`2g`\" pulumi-lang-yaml=\"`2g`\" pulumi-lang-java=\"`2g`\"\u003e`2g`\u003c/span\u003e - 2.4GHz only\n  * \u003cspan pulumi-lang-nodejs=\"`5g`\" pulumi-lang-dotnet=\"`5g`\" pulumi-lang-go=\"`5g`\" pulumi-lang-python=\"`5g`\" pulumi-lang-yaml=\"`5g`\" pulumi-lang-java=\"`5g`\"\u003e`5g`\u003c/span\u003e - 5GHz only"},"wpa3Support":{"type":"boolean","description":"Enable WPA3 security protocol. Requires security to be set to \u003cspan pulumi-lang-nodejs=\"`wpapsk`\" pulumi-lang-dotnet=\"`Wpapsk`\" pulumi-lang-go=\"`wpapsk`\" pulumi-lang-python=\"`wpapsk`\" pulumi-lang-yaml=\"`wpapsk`\" pulumi-lang-java=\"`wpapsk`\"\u003e`wpapsk`\u003c/span\u003e and PMF mode to be enabled. WPA3 provides enhanced security features over WPA2."},"wpa3Transition":{"type":"boolean","description":"Enable WPA3 transition mode, which allows both WPA2 and WPA3 clients to connect. This provides backward compatibility while gradually transitioning to WPA3. Requires security to be set to \u003cspan pulumi-lang-nodejs=\"`wpapsk`\" pulumi-lang-dotnet=\"`Wpapsk`\" pulumi-lang-go=\"`wpapsk`\" pulumi-lang-python=\"`wpapsk`\" pulumi-lang-yaml=\"`wpapsk`\" pulumi-lang-java=\"`wpapsk`\"\u003e`wpapsk`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`wpa3Support`\" pulumi-lang-dotnet=\"`Wpa3Support`\" pulumi-lang-go=\"`wpa3Support`\" pulumi-lang-python=\"`wpa3_support`\" pulumi-lang-yaml=\"`wpa3Support`\" pulumi-lang-java=\"`wpa3Support`\"\u003e`wpa3_support`\u003c/span\u003e to be true."}},"requiredInputs":["security","userGroupId"],"stateInputs":{"description":"Input properties used for looking up and filtering Wlan resources.\n","properties":{"apGroupIds":{"type":"array","items":{"type":"string"},"description":"IDs of the AP groups that should broadcast this SSID. Used to control which access points broadcast this network."},"bssTransition":{"type":"boolean","description":"Enable BSS Transition Management to help clients roam between APs more efficiently."},"fastRoamingEnabled":{"type":"boolean","description":"Enable 802.11r Fast BSS Transition for seamless roaming between APs. Requires client device support."},"hideSsid":{"type":"boolean","description":"When enabled, the access points will not broadcast the network name (SSID). Clients will need to manually enter the SSID to connect."},"isGuest":{"type":"boolean","description":"Mark this as a guest network. Guest networks are isolated from other networks and can have special restrictions like captive portals."},"l2Isolation":{"type":"boolean","description":"Isolates wireless clients from each other at layer 2 (ethernet) level. When enabled, devices on this WLAN cannot communicate directly with each other, improving security especially for guest networks or IoT devices. Each client can only communicate with the gateway/router."},"macFilterEnabled":{"type":"boolean","description":"Enable MAC address filtering to control network access based on client MAC addresses. Works in conjunction with \u003cspan pulumi-lang-nodejs=\"`macFilterList`\" pulumi-lang-dotnet=\"`MacFilterList`\" pulumi-lang-go=\"`macFilterList`\" pulumi-lang-python=\"`mac_filter_list`\" pulumi-lang-yaml=\"`macFilterList`\" pulumi-lang-java=\"`macFilterList`\"\u003e`mac_filter_list`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`macFilterPolicy`\" pulumi-lang-dotnet=\"`MacFilterPolicy`\" pulumi-lang-go=\"`macFilterPolicy`\" pulumi-lang-python=\"`mac_filter_policy`\" pulumi-lang-yaml=\"`macFilterPolicy`\" pulumi-lang-java=\"`macFilterPolicy`\"\u003e`mac_filter_policy`\u003c/span\u003e."},"macFilterLists":{"type":"array","items":{"type":"string"},"description":"List of MAC addresses to filter in XX:XX:XX:XX:XX:XX format. Only applied when \u003cspan pulumi-lang-nodejs=\"`macFilterEnabled`\" pulumi-lang-dotnet=\"`MacFilterEnabled`\" pulumi-lang-go=\"`macFilterEnabled`\" pulumi-lang-python=\"`mac_filter_enabled`\" pulumi-lang-yaml=\"`macFilterEnabled`\" pulumi-lang-java=\"`macFilterEnabled`\"\u003e`mac_filter_enabled`\u003c/span\u003e is true. MAC addresses are case-insensitive."},"macFilterPolicy":{"type":"string","description":"MAC address filter policy. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`allow`\" pulumi-lang-dotnet=\"`Allow`\" pulumi-lang-go=\"`allow`\" pulumi-lang-python=\"`allow`\" pulumi-lang-yaml=\"`allow`\" pulumi-lang-java=\"`allow`\"\u003e`allow`\u003c/span\u003e - Only allow listed MAC addresses\n  * \u003cspan pulumi-lang-nodejs=\"`deny`\" pulumi-lang-dotnet=\"`Deny`\" pulumi-lang-go=\"`deny`\" pulumi-lang-python=\"`deny`\" pulumi-lang-yaml=\"`deny`\" pulumi-lang-java=\"`deny`\"\u003e`deny`\u003c/span\u003e - Block listed MAC addresses"},"minimumDataRate2gKbps":{"type":"integer","description":"Minimum data rate for 2.4GHz devices in Kbps. Use \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e to disable. Valid values: \u003cspan pulumi-lang-nodejs=\"`1000`\" pulumi-lang-dotnet=\"`1000`\" pulumi-lang-go=\"`1000`\" pulumi-lang-python=\"`1000`\" pulumi-lang-yaml=\"`1000`\" pulumi-lang-java=\"`1000`\"\u003e`1000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`2000`\" pulumi-lang-dotnet=\"`2000`\" pulumi-lang-go=\"`2000`\" pulumi-lang-python=\"`2000`\" pulumi-lang-yaml=\"`2000`\" pulumi-lang-java=\"`2000`\"\u003e`2000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`5500`\" pulumi-lang-dotnet=\"`5500`\" pulumi-lang-go=\"`5500`\" pulumi-lang-python=\"`5500`\" pulumi-lang-yaml=\"`5500`\" pulumi-lang-java=\"`5500`\"\u003e`5500`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`6000`\" pulumi-lang-dotnet=\"`6000`\" pulumi-lang-go=\"`6000`\" pulumi-lang-python=\"`6000`\" pulumi-lang-yaml=\"`6000`\" pulumi-lang-java=\"`6000`\"\u003e`6000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`9000`\" pulumi-lang-dotnet=\"`9000`\" pulumi-lang-go=\"`9000`\" pulumi-lang-python=\"`9000`\" pulumi-lang-yaml=\"`9000`\" pulumi-lang-java=\"`9000`\"\u003e`9000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`11000`\" pulumi-lang-dotnet=\"`11000`\" pulumi-lang-go=\"`11000`\" pulumi-lang-python=\"`11000`\" pulumi-lang-yaml=\"`11000`\" pulumi-lang-java=\"`11000`\"\u003e`11000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`12000`\" pulumi-lang-dotnet=\"`12000`\" pulumi-lang-go=\"`12000`\" pulumi-lang-python=\"`12000`\" pulumi-lang-yaml=\"`12000`\" pulumi-lang-java=\"`12000`\"\u003e`12000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`18000`\" pulumi-lang-dotnet=\"`18000`\" pulumi-lang-go=\"`18000`\" pulumi-lang-python=\"`18000`\" pulumi-lang-yaml=\"`18000`\" pulumi-lang-java=\"`18000`\"\u003e`18000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`24000`\" pulumi-lang-dotnet=\"`24000`\" pulumi-lang-go=\"`24000`\" pulumi-lang-python=\"`24000`\" pulumi-lang-yaml=\"`24000`\" pulumi-lang-java=\"`24000`\"\u003e`24000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`36000`\" pulumi-lang-dotnet=\"`36000`\" pulumi-lang-go=\"`36000`\" pulumi-lang-python=\"`36000`\" pulumi-lang-yaml=\"`36000`\" pulumi-lang-java=\"`36000`\"\u003e`36000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`48000`\" pulumi-lang-dotnet=\"`48000`\" pulumi-lang-go=\"`48000`\" pulumi-lang-python=\"`48000`\" pulumi-lang-yaml=\"`48000`\" pulumi-lang-java=\"`48000`\"\u003e`48000`\u003c/span\u003e,  and \u003cspan pulumi-lang-nodejs=\"`54000`\" pulumi-lang-dotnet=\"`54000`\" pulumi-lang-go=\"`54000`\" pulumi-lang-python=\"`54000`\" pulumi-lang-yaml=\"`54000`\" pulumi-lang-java=\"`54000`\"\u003e`54000`\u003c/span\u003e"},"minimumDataRate5gKbps":{"type":"integer","description":"Minimum data rate for 5GHz devices in Kbps. Use \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e to disable. Valid values: \u003cspan pulumi-lang-nodejs=\"`6000`\" pulumi-lang-dotnet=\"`6000`\" pulumi-lang-go=\"`6000`\" pulumi-lang-python=\"`6000`\" pulumi-lang-yaml=\"`6000`\" pulumi-lang-java=\"`6000`\"\u003e`6000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`9000`\" pulumi-lang-dotnet=\"`9000`\" pulumi-lang-go=\"`9000`\" pulumi-lang-python=\"`9000`\" pulumi-lang-yaml=\"`9000`\" pulumi-lang-java=\"`9000`\"\u003e`9000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`12000`\" pulumi-lang-dotnet=\"`12000`\" pulumi-lang-go=\"`12000`\" pulumi-lang-python=\"`12000`\" pulumi-lang-yaml=\"`12000`\" pulumi-lang-java=\"`12000`\"\u003e`12000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`18000`\" pulumi-lang-dotnet=\"`18000`\" pulumi-lang-go=\"`18000`\" pulumi-lang-python=\"`18000`\" pulumi-lang-yaml=\"`18000`\" pulumi-lang-java=\"`18000`\"\u003e`18000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`24000`\" pulumi-lang-dotnet=\"`24000`\" pulumi-lang-go=\"`24000`\" pulumi-lang-python=\"`24000`\" pulumi-lang-yaml=\"`24000`\" pulumi-lang-java=\"`24000`\"\u003e`24000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`36000`\" pulumi-lang-dotnet=\"`36000`\" pulumi-lang-go=\"`36000`\" pulumi-lang-python=\"`36000`\" pulumi-lang-yaml=\"`36000`\" pulumi-lang-java=\"`36000`\"\u003e`36000`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`48000`\" pulumi-lang-dotnet=\"`48000`\" pulumi-lang-go=\"`48000`\" pulumi-lang-python=\"`48000`\" pulumi-lang-yaml=\"`48000`\" pulumi-lang-java=\"`48000`\"\u003e`48000`\u003c/span\u003e,  and \u003cspan pulumi-lang-nodejs=\"`54000`\" pulumi-lang-dotnet=\"`54000`\" pulumi-lang-go=\"`54000`\" pulumi-lang-python=\"`54000`\" pulumi-lang-yaml=\"`54000`\" pulumi-lang-java=\"`54000`\"\u003e`54000`\u003c/span\u003e"},"multicastEnhance":{"type":"boolean","description":"Enable multicast enhancement to convert multicast traffic to unicast for better reliability and performance, especially for applications like video streaming."},"name":{"type":"string","description":"The SSID (network name) that will be broadcast by the access points. Must be between 1 and 32 characters long."},"networkId":{"type":"string","description":"ID of the network (VLAN) for this SSID. Used to assign the WLAN to a specific network segment."},"no2ghzOui":{"type":"boolean","description":"When enabled, devices from specific manufacturers (identified by their OUI - Organizationally Unique Identifier) will be prevented from connecting on 2.4GHz and forced to use 5GHz. This improves overall network performance by ensuring capable devices use the less congested 5GHz band. Common examples include newer smartphones and laptops."},"passphrase":{"type":"string","description":"The WPA pre-shared key (password) for the network. Required when security is not set to \u003cspan pulumi-lang-nodejs=\"`open`\" pulumi-lang-dotnet=\"`Open`\" pulumi-lang-go=\"`open`\" pulumi-lang-python=\"`open`\" pulumi-lang-yaml=\"`open`\" pulumi-lang-java=\"`open`\"\u003e`open`\u003c/span\u003e.","secret":true},"pmfMode":{"type":"string","description":"Protected Management Frames (PMF) mode. It cannot be disabled if using WPA3. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`required`\" pulumi-lang-dotnet=\"`Required`\" pulumi-lang-go=\"`required`\" pulumi-lang-python=\"`required`\" pulumi-lang-yaml=\"`required`\" pulumi-lang-java=\"`required`\"\u003e`required`\u003c/span\u003e - All clients must support PMF (required for WPA3)\n  * \u003cspan pulumi-lang-nodejs=\"`optional`\" pulumi-lang-dotnet=\"`Optional`\" pulumi-lang-go=\"`optional`\" pulumi-lang-python=\"`optional`\" pulumi-lang-yaml=\"`optional`\" pulumi-lang-java=\"`optional`\"\u003e`optional`\u003c/span\u003e - Clients can optionally use PMF (recommended when transitioning from WPA2 to WPA3)\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - PMF is disabled (not compatible with WPA3)"},"proxyArp":{"type":"boolean","description":"Enable ARP proxy on this WLAN. When enabled, the UniFi controller will respond to ARP requests on behalf of clients, reducing broadcast traffic and potentially improving network performance. This is particularly useful in high-density wireless environments."},"radiusProfileId":{"type":"string","description":"ID of the RADIUS profile to use for WPA Enterprise authentication (when security is 'wpaeap'). Reference existing profiles using the \u003cspan pulumi-lang-nodejs=\"`unifi.RadiusProfile`\" pulumi-lang-dotnet=\"`unifi.RadiusProfile`\" pulumi-lang-go=\"`RadiusProfile`\" pulumi-lang-python=\"`RadiusProfile`\" pulumi-lang-yaml=\"`unifi.RadiusProfile`\" pulumi-lang-java=\"`unifi.RadiusProfile`\"\u003e`unifi.RadiusProfile`\u003c/span\u003e data source."},"schedules":{"type":"array","items":{"$ref":"#/types/unifi:index/WlanSchedule:WlanSchedule"},"description":"Time-based access control configuration for the wireless network. Allows automatic enabling/disabling of the network on specified schedules."},"security":{"type":"string","description":"The security protocol for the wireless network. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`wpapsk`\" pulumi-lang-dotnet=\"`Wpapsk`\" pulumi-lang-go=\"`wpapsk`\" pulumi-lang-python=\"`wpapsk`\" pulumi-lang-yaml=\"`wpapsk`\" pulumi-lang-java=\"`wpapsk`\"\u003e`wpapsk`\u003c/span\u003e - WPA Personal (PSK) with WPA2/WPA3 options\n  * \u003cspan pulumi-lang-nodejs=\"`wpaeap`\" pulumi-lang-dotnet=\"`Wpaeap`\" pulumi-lang-go=\"`wpaeap`\" pulumi-lang-python=\"`wpaeap`\" pulumi-lang-yaml=\"`wpaeap`\" pulumi-lang-java=\"`wpaeap`\"\u003e`wpaeap`\u003c/span\u003e - WPA Enterprise (802.1x)\n  * \u003cspan pulumi-lang-nodejs=\"`open`\" pulumi-lang-dotnet=\"`Open`\" pulumi-lang-go=\"`open`\" pulumi-lang-python=\"`open`\" pulumi-lang-yaml=\"`open`\" pulumi-lang-java=\"`open`\"\u003e`open`\u003c/span\u003e - Open network (no encryption)"},"site":{"type":"string","description":"The name of the UniFi site where the wireless network should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"uapsd":{"type":"boolean","description":"Enable Unscheduled Automatic Power Save Delivery to improve battery life for mobile devices."},"userGroupId":{"type":"string","description":"The ID of the user group that defines the rate limiting and firewall rules for clients on this network."},"wlanBand":{"type":"string","description":"Radio band selection. Valid values:\n  * \u003cspan pulumi-lang-nodejs=\"`both`\" pulumi-lang-dotnet=\"`Both`\" pulumi-lang-go=\"`both`\" pulumi-lang-python=\"`both`\" pulumi-lang-yaml=\"`both`\" pulumi-lang-java=\"`both`\"\u003e`both`\u003c/span\u003e - Both 2.4GHz and 5GHz (default)\n  * \u003cspan pulumi-lang-nodejs=\"`2g`\" pulumi-lang-dotnet=\"`2g`\" pulumi-lang-go=\"`2g`\" pulumi-lang-python=\"`2g`\" pulumi-lang-yaml=\"`2g`\" pulumi-lang-java=\"`2g`\"\u003e`2g`\u003c/span\u003e - 2.4GHz only\n  * \u003cspan pulumi-lang-nodejs=\"`5g`\" pulumi-lang-dotnet=\"`5g`\" pulumi-lang-go=\"`5g`\" pulumi-lang-python=\"`5g`\" pulumi-lang-yaml=\"`5g`\" pulumi-lang-java=\"`5g`\"\u003e`5g`\u003c/span\u003e - 5GHz only"},"wpa3Support":{"type":"boolean","description":"Enable WPA3 security protocol. Requires security to be set to \u003cspan pulumi-lang-nodejs=\"`wpapsk`\" pulumi-lang-dotnet=\"`Wpapsk`\" pulumi-lang-go=\"`wpapsk`\" pulumi-lang-python=\"`wpapsk`\" pulumi-lang-yaml=\"`wpapsk`\" pulumi-lang-java=\"`wpapsk`\"\u003e`wpapsk`\u003c/span\u003e and PMF mode to be enabled. WPA3 provides enhanced security features over WPA2."},"wpa3Transition":{"type":"boolean","description":"Enable WPA3 transition mode, which allows both WPA2 and WPA3 clients to connect. This provides backward compatibility while gradually transitioning to WPA3. Requires security to be set to \u003cspan pulumi-lang-nodejs=\"`wpapsk`\" pulumi-lang-dotnet=\"`Wpapsk`\" pulumi-lang-go=\"`wpapsk`\" pulumi-lang-python=\"`wpapsk`\" pulumi-lang-yaml=\"`wpapsk`\" pulumi-lang-java=\"`wpapsk`\"\u003e`wpapsk`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`wpa3Support`\" pulumi-lang-dotnet=\"`Wpa3Support`\" pulumi-lang-go=\"`wpa3Support`\" pulumi-lang-python=\"`wpa3_support`\" pulumi-lang-yaml=\"`wpa3Support`\" pulumi-lang-java=\"`wpa3Support`\"\u003e`wpa3_support`\u003c/span\u003e to be true."}},"type":"object"}},"unifi:port/alFile:AlFile":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.port.AlFile`\" pulumi-lang-dotnet=\"`unifi.port.AlFile`\" pulumi-lang-go=\"`port.AlFile`\" pulumi-lang-python=\"`port.AlFile`\" pulumi-lang-yaml=\"`unifi.port.AlFile`\" pulumi-lang-java=\"`unifi.port.AlFile`\"\u003e`unifi.port.AlFile`\u003c/span\u003e resource manages files uploaded to the UniFi guest portal. This resource allows you to upload images that can be used in customizing the UniFi guest portal interface.\n\n**Note:** This resource uploads files to the UniFi controller. The file must exist on the local filesystem where Terraform is executed.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst file = new unifi.port.AlFile(\"file\", {filePath: \"/Users/username/Downloads/portal.png\"});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nfile = unifi.port.AlFile(\"file\", file_path=\"/Users/username/Downloads/portal.png\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var file = new Unifi.Port.AlFile(\"file\", new()\n    {\n        FilePath = \"/Users/username/Downloads/portal.png\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/port\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := port.NewAlFile(ctx, \"file\", \u0026port.AlFileArgs{\n\t\t\tFilePath: pulumi.String(\"/Users/username/Downloads/portal.png\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.port.AlFile;\nimport com.pulumiverse.unifi.port.AlFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var file = new AlFile(\"file\", AlFileArgs.builder()\n            .filePath(\"/Users/username/Downloads/portal.png\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  file:\n    type: unifi:port:AlFile\n    properties:\n      filePath: /Users/username/Downloads/portal.png\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"contentType":{"type":"string","description":"MIME type of the file.\n"},"filePath":{"type":"string","description":"Path to the file on the local filesystem to upload to the UniFi controller. The file must exist and be readable.\n"},"fileSize":{"type":"integer","description":"Size of the file in bytes.\n"},"filename":{"type":"string","description":"Name of the file as stored in the UniFi controller.\n"},"lastModified":{"type":"integer","description":"Timestamp when the file was last modified.\n"},"md5":{"type":"string","description":"MD5 hash of the file content.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"url":{"type":"string","description":"URL where the file can be accessed on the UniFi controller.\n"}},"required":["contentType","filePath","fileSize","filename","lastModified","md5","site","url"],"inputProperties":{"filePath":{"type":"string","description":"Path to the file on the local filesystem to upload to the UniFi controller. The file must exist and be readable.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"requiredInputs":["filePath"],"stateInputs":{"description":"Input properties used for looking up and filtering AlFile resources.\n","properties":{"contentType":{"type":"string","description":"MIME type of the file.\n"},"filePath":{"type":"string","description":"Path to the file on the local filesystem to upload to the UniFi controller. The file must exist and be readable.\n"},"fileSize":{"type":"integer","description":"Size of the file in bytes.\n"},"filename":{"type":"string","description":"Name of the file as stored in the UniFi controller.\n"},"lastModified":{"type":"integer","description":"Timestamp when the file was last modified.\n"},"md5":{"type":"string","description":"MD5 hash of the file content.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"url":{"type":"string","description":"URL where the file can be accessed on the UniFi controller.\n"}},"type":"object"}},"unifi:port/forward:Forward":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.port.Forward`\" pulumi-lang-dotnet=\"`unifi.port.Forward`\" pulumi-lang-go=\"`port.Forward`\" pulumi-lang-python=\"`port.Forward`\" pulumi-lang-yaml=\"`unifi.port.Forward`\" pulumi-lang-java=\"`unifi.port.Forward`\"\u003e`unifi.port.Forward`\u003c/span\u003e resource manages port forwarding rules on UniFi controllers.\n\nPort forwarding allows external traffic to reach services hosted on your internal network by mapping external ports to internal IP addresses and ports. This is commonly used for:\n  * Hosting web servers, game servers, or other services\n  * Remote access to internal services\n  * Application-specific requirements\n\nEach rule can be configured with source IP restrictions, protocol selection, and logging options for enhanced security and monitoring.\n","properties":{"dstPort":{"type":"string","description":"The external port(s) that will be forwarded. Can be a single port (e.g., '80') or a port range (e.g., '8080:8090')."},"enabled":{"type":"boolean","description":"Specifies whether the port forwarding rule is enabled or not.","deprecationMessage":"This will attribute will be removed in a future release. Instead of disabling a port forwarding rule you can remove it from your configuration."},"fwdIp":{"type":"string","description":"The internal IPv4 address of the device or service that will receive the forwarded traffic (e.g., '192.168.1.100')."},"fwdPort":{"type":"string","description":"The internal port(s) that will receive the forwarded traffic. Can be a single port (e.g., '8080') or a port range (e.g., '8080:8090')."},"log":{"type":"boolean","description":"Enable logging of traffic matching this port forwarding rule. Useful for monitoring and troubleshooting."},"name":{"type":"string","description":"A friendly name for the port forwarding rule to help identify its purpose (e.g., 'Web Server' or 'Game Server')."},"portForwardInterface":{"type":"string","description":"The WAN interface to apply the port forwarding rule to. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e - Primary WAN interface\n  * \u003cspan pulumi-lang-nodejs=\"`wan2`\" pulumi-lang-dotnet=\"`Wan2`\" pulumi-lang-go=\"`wan2`\" pulumi-lang-python=\"`wan2`\" pulumi-lang-yaml=\"`wan2`\" pulumi-lang-java=\"`wan2`\"\u003e`wan2`\u003c/span\u003e - Secondary WAN interface\n  * \u003cspan pulumi-lang-nodejs=\"`both`\" pulumi-lang-dotnet=\"`Both`\" pulumi-lang-go=\"`both`\" pulumi-lang-python=\"`both`\" pulumi-lang-yaml=\"`both`\" pulumi-lang-java=\"`both`\"\u003e`both`\u003c/span\u003e - Both WAN interfaces"},"protocol":{"type":"string","description":"The network protocol(s) this rule applies to. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`tcpUdp`\" pulumi-lang-dotnet=\"`TcpUdp`\" pulumi-lang-go=\"`tcpUdp`\" pulumi-lang-python=\"`tcp_udp`\" pulumi-lang-yaml=\"`tcpUdp`\" pulumi-lang-java=\"`tcpUdp`\"\u003e`tcp_udp`\u003c/span\u003e - Both TCP and UDP (default)\n  * \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e - TCP only\n  * \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e - UDP only"},"site":{"type":"string","description":"The name of the UniFi site where the port forwarding rule should be created. If not specified, the default site will be used."},"srcIp":{"type":"string","description":"The source IP address or network in CIDR notation that is allowed to use this port forward. Use 'any' to allow all source IPs. Examples: '203.0.113.1' for a single IP, '203.0.113.0/24' for a network, or 'any' for all IPs."}},"required":["name","site"],"inputProperties":{"dstPort":{"type":"string","description":"The external port(s) that will be forwarded. Can be a single port (e.g., '80') or a port range (e.g., '8080:8090')."},"enabled":{"type":"boolean","description":"Specifies whether the port forwarding rule is enabled or not.","deprecationMessage":"This will attribute will be removed in a future release. Instead of disabling a port forwarding rule you can remove it from your configuration."},"fwdIp":{"type":"string","description":"The internal IPv4 address of the device or service that will receive the forwarded traffic (e.g., '192.168.1.100')."},"fwdPort":{"type":"string","description":"The internal port(s) that will receive the forwarded traffic. Can be a single port (e.g., '8080') or a port range (e.g., '8080:8090')."},"log":{"type":"boolean","description":"Enable logging of traffic matching this port forwarding rule. Useful for monitoring and troubleshooting."},"name":{"type":"string","description":"A friendly name for the port forwarding rule to help identify its purpose (e.g., 'Web Server' or 'Game Server')."},"portForwardInterface":{"type":"string","description":"The WAN interface to apply the port forwarding rule to. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e - Primary WAN interface\n  * \u003cspan pulumi-lang-nodejs=\"`wan2`\" pulumi-lang-dotnet=\"`Wan2`\" pulumi-lang-go=\"`wan2`\" pulumi-lang-python=\"`wan2`\" pulumi-lang-yaml=\"`wan2`\" pulumi-lang-java=\"`wan2`\"\u003e`wan2`\u003c/span\u003e - Secondary WAN interface\n  * \u003cspan pulumi-lang-nodejs=\"`both`\" pulumi-lang-dotnet=\"`Both`\" pulumi-lang-go=\"`both`\" pulumi-lang-python=\"`both`\" pulumi-lang-yaml=\"`both`\" pulumi-lang-java=\"`both`\"\u003e`both`\u003c/span\u003e - Both WAN interfaces"},"protocol":{"type":"string","description":"The network protocol(s) this rule applies to. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`tcpUdp`\" pulumi-lang-dotnet=\"`TcpUdp`\" pulumi-lang-go=\"`tcpUdp`\" pulumi-lang-python=\"`tcp_udp`\" pulumi-lang-yaml=\"`tcpUdp`\" pulumi-lang-java=\"`tcpUdp`\"\u003e`tcp_udp`\u003c/span\u003e - Both TCP and UDP (default)\n  * \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e - TCP only\n  * \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e - UDP only"},"site":{"type":"string","description":"The name of the UniFi site where the port forwarding rule should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"srcIp":{"type":"string","description":"The source IP address or network in CIDR notation that is allowed to use this port forward. Use 'any' to allow all source IPs. Examples: '203.0.113.1' for a single IP, '203.0.113.0/24' for a network, or 'any' for all IPs."}},"stateInputs":{"description":"Input properties used for looking up and filtering Forward resources.\n","properties":{"dstPort":{"type":"string","description":"The external port(s) that will be forwarded. Can be a single port (e.g., '80') or a port range (e.g., '8080:8090')."},"enabled":{"type":"boolean","description":"Specifies whether the port forwarding rule is enabled or not.","deprecationMessage":"This will attribute will be removed in a future release. Instead of disabling a port forwarding rule you can remove it from your configuration."},"fwdIp":{"type":"string","description":"The internal IPv4 address of the device or service that will receive the forwarded traffic (e.g., '192.168.1.100')."},"fwdPort":{"type":"string","description":"The internal port(s) that will receive the forwarded traffic. Can be a single port (e.g., '8080') or a port range (e.g., '8080:8090')."},"log":{"type":"boolean","description":"Enable logging of traffic matching this port forwarding rule. Useful for monitoring and troubleshooting."},"name":{"type":"string","description":"A friendly name for the port forwarding rule to help identify its purpose (e.g., 'Web Server' or 'Game Server')."},"portForwardInterface":{"type":"string","description":"The WAN interface to apply the port forwarding rule to. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e - Primary WAN interface\n  * \u003cspan pulumi-lang-nodejs=\"`wan2`\" pulumi-lang-dotnet=\"`Wan2`\" pulumi-lang-go=\"`wan2`\" pulumi-lang-python=\"`wan2`\" pulumi-lang-yaml=\"`wan2`\" pulumi-lang-java=\"`wan2`\"\u003e`wan2`\u003c/span\u003e - Secondary WAN interface\n  * \u003cspan pulumi-lang-nodejs=\"`both`\" pulumi-lang-dotnet=\"`Both`\" pulumi-lang-go=\"`both`\" pulumi-lang-python=\"`both`\" pulumi-lang-yaml=\"`both`\" pulumi-lang-java=\"`both`\"\u003e`both`\u003c/span\u003e - Both WAN interfaces"},"protocol":{"type":"string","description":"The network protocol(s) this rule applies to. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`tcpUdp`\" pulumi-lang-dotnet=\"`TcpUdp`\" pulumi-lang-go=\"`tcpUdp`\" pulumi-lang-python=\"`tcp_udp`\" pulumi-lang-yaml=\"`tcpUdp`\" pulumi-lang-java=\"`tcpUdp`\"\u003e`tcp_udp`\u003c/span\u003e - Both TCP and UDP (default)\n  * \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e - TCP only\n  * \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e - UDP only"},"site":{"type":"string","description":"The name of the UniFi site where the port forwarding rule should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"srcIp":{"type":"string","description":"The source IP address or network in CIDR notation that is allowed to use this port forward. Use 'any' to allow all source IPs. Examples: '203.0.113.1' for a single IP, '203.0.113.0/24' for a network, or 'any' for all IPs."}},"type":"object"}},"unifi:port/profile:Profile":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.port.Profile`\" pulumi-lang-dotnet=\"`unifi.port.Profile`\" pulumi-lang-go=\"`port.Profile`\" pulumi-lang-python=\"`port.Profile`\" pulumi-lang-yaml=\"`unifi.port.Profile`\" pulumi-lang-java=\"`unifi.port.Profile`\"\u003e`unifi.port.Profile`\u003c/span\u003e resource manages port profiles that can be applied to UniFi switch ports.\n\nPort profiles define a collection of settings that can be applied to one or more switch ports, including:\n  * Network and VLAN settings\n  * Port speed and duplex settings\n  * Security features like 802.1X authentication and port isolation\n  * Rate limiting and QoS settings\n  * Network protocols like LLDP and STP\n\nCreating port profiles allows for consistent configuration across multiple switch ports and easier management of port settings.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst config = new pulumi.Config();\nconst vlanId = config.getNumber(\"vlanId\") || 10;\nconst vlan = new unifi.Network(\"vlan\", {\n    name: \"wifi-vlan\",\n    purpose: \"corporate\",\n    subnet: \"10.0.0.1/24\",\n    vlanId: vlanId,\n    dhcpStart: \"10.0.0.6\",\n    dhcpStop: \"10.0.0.254\",\n    dhcpEnabled: true,\n});\nconst poeDisabled = new unifi.port.Profile(\"poe_disabled\", {\n    name: \"POE Disabled\",\n    nativeNetworkconfId: vlan.id,\n    poeMode: \"off\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nconfig = pulumi.Config()\nvlan_id = config.get_float(\"vlanId\")\nif vlan_id is None:\n    vlan_id = 10\nvlan = unifi.Network(\"vlan\",\n    name=\"wifi-vlan\",\n    purpose=\"corporate\",\n    subnet=\"10.0.0.1/24\",\n    vlan_id=vlan_id,\n    dhcp_start=\"10.0.0.6\",\n    dhcp_stop=\"10.0.0.254\",\n    dhcp_enabled=True)\npoe_disabled = unifi.port.Profile(\"poe_disabled\",\n    name=\"POE Disabled\",\n    native_networkconf_id=vlan.id,\n    poe_mode=\"off\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Config();\n    var vlanId = config.GetDouble(\"vlanId\") ?? 10;\n    var vlan = new Unifi.Network(\"vlan\", new()\n    {\n        Name = \"wifi-vlan\",\n        Purpose = \"corporate\",\n        Subnet = \"10.0.0.1/24\",\n        VlanId = vlanId,\n        DhcpStart = \"10.0.0.6\",\n        DhcpStop = \"10.0.0.254\",\n        DhcpEnabled = true,\n    });\n\n    var poeDisabled = new Unifi.Port.Profile(\"poe_disabled\", new()\n    {\n        Name = \"POE Disabled\",\n        NativeNetworkconfId = vlan.Id,\n        PoeMode = \"off\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/port\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\tvlanId := float64(10)\n\t\tif param := cfg.GetFloat64(\"vlanId\"); param != 0 {\n\t\t\tvlanId = param\n\t\t}\n\t\tvlan, err := unifi.NewNetwork(ctx, \"vlan\", \u0026unifi.NetworkArgs{\n\t\t\tName:        pulumi.String(\"wifi-vlan\"),\n\t\t\tPurpose:     pulumi.String(\"corporate\"),\n\t\t\tSubnet:      pulumi.String(\"10.0.0.1/24\"),\n\t\t\tVlanId:      pulumi.Float64(vlanId),\n\t\t\tDhcpStart:   pulumi.String(\"10.0.0.6\"),\n\t\t\tDhcpStop:    pulumi.String(\"10.0.0.254\"),\n\t\t\tDhcpEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = port.NewProfile(ctx, \"poe_disabled\", \u0026port.ProfileArgs{\n\t\t\tName:                pulumi.String(\"POE Disabled\"),\n\t\t\tNativeNetworkconfId: vlan.ID(),\n\t\t\tPoeMode:             pulumi.String(\"off\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.Network;\nimport com.pulumiverse.unifi.NetworkArgs;\nimport com.pulumiverse.unifi.port.Profile;\nimport com.pulumiverse.unifi.port.ProfileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var config = ctx.config();\n        final var vlanId = config.get(\"vlanId\").orElse(10);\n        var vlan = new Network(\"vlan\", NetworkArgs.builder()\n            .name(\"wifi-vlan\")\n            .purpose(\"corporate\")\n            .subnet(\"10.0.0.1/24\")\n            .vlanId(vlanId)\n            .dhcpStart(\"10.0.0.6\")\n            .dhcpStop(\"10.0.0.254\")\n            .dhcpEnabled(true)\n            .build());\n\n        var poeDisabled = new Profile(\"poeDisabled\", ProfileArgs.builder()\n            .name(\"POE Disabled\")\n            .nativeNetworkconfId(vlan.id())\n            .poeMode(\"off\")\n            .build());\n\n    }\n}\n```\n```yaml\nconfiguration:\n  vlanId:\n    type: number\n    default: 10\nresources:\n  vlan:\n    type: unifi:Network\n    properties:\n      name: wifi-vlan\n      purpose: corporate\n      subnet: 10.0.0.1/24\n      vlanId: ${vlanId}\n      dhcpStart: 10.0.0.6\n      dhcpStop: 10.0.0.254\n      dhcpEnabled: true\n  poeDisabled:\n    type: unifi:port:Profile\n    name: poe_disabled\n    properties:\n      name: POE Disabled\n      nativeNetworkconfId: ${vlan.id}\n      poeMode: off\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"autoneg":{"type":"boolean","description":"Enable automatic negotiation of port speed and duplex settings. When enabled, this overrides manual speed and duplex settings. Recommended for most use cases."},"dot1xCtrl":{"type":"string","description":"802.1X port-based network access control (PNAC) mode. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`forceAuthorized`\" pulumi-lang-dotnet=\"`ForceAuthorized`\" pulumi-lang-go=\"`forceAuthorized`\" pulumi-lang-python=\"`force_authorized`\" pulumi-lang-yaml=\"`forceAuthorized`\" pulumi-lang-java=\"`forceAuthorized`\"\u003e`force_authorized`\u003c/span\u003e - Port allows all traffic, no authentication required (default)\n  * \u003cspan pulumi-lang-nodejs=\"`forceUnauthorized`\" pulumi-lang-dotnet=\"`ForceUnauthorized`\" pulumi-lang-go=\"`forceUnauthorized`\" pulumi-lang-python=\"`force_unauthorized`\" pulumi-lang-yaml=\"`forceUnauthorized`\" pulumi-lang-java=\"`forceUnauthorized`\"\u003e`force_unauthorized`\u003c/span\u003e - Port blocks all traffic regardless of authentication\n  * \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - Standard 802.1X authentication required before port access is granted\n  * \u003cspan pulumi-lang-nodejs=\"`macBased`\" pulumi-lang-dotnet=\"`MacBased`\" pulumi-lang-go=\"`macBased`\" pulumi-lang-python=\"`mac_based`\" pulumi-lang-yaml=\"`macBased`\" pulumi-lang-java=\"`macBased`\"\u003e`mac_based`\u003c/span\u003e - Authentication based on client MAC address, useful for devices that don't support 802.1X\n  * \u003cspan pulumi-lang-nodejs=\"`multiHost`\" pulumi-lang-dotnet=\"`MultiHost`\" pulumi-lang-go=\"`multiHost`\" pulumi-lang-python=\"`multi_host`\" pulumi-lang-yaml=\"`multiHost`\" pulumi-lang-java=\"`multiHost`\"\u003e`multi_host`\u003c/span\u003e - Allows multiple devices after first successful authentication, common in VoIP phone setups\n\nUse 'auto' for highest security, 'mac_based' for legacy devices, and 'multi_host' when daisy-chaining devices."},"dot1xIdleTimeout":{"type":"integer","description":"The number of seconds before an inactive authenticated MAC address is removed when using MAC-based 802.1X control. Range: 0-65535 seconds."},"egressRateLimitKbps":{"type":"integer","description":"The maximum outbound bandwidth allowed on the port in kilobits per second. Range: 64-9999999 kbps. Only applied when\u003cspan pulumi-lang-nodejs=\" egressRateLimitKbpsEnabled \" pulumi-lang-dotnet=\" EgressRateLimitKbpsEnabled \" pulumi-lang-go=\" egressRateLimitKbpsEnabled \" pulumi-lang-python=\" egress_rate_limit_kbps_enabled \" pulumi-lang-yaml=\" egressRateLimitKbpsEnabled \" pulumi-lang-java=\" egressRateLimitKbpsEnabled \"\u003e egress_rate_limit_kbps_enabled \u003c/span\u003eis true."},"egressRateLimitKbpsEnabled":{"type":"boolean","description":"Enable outbound bandwidth rate limiting on the port. When enabled, traffic will be limited to the rate specified in egress_rate_limit_kbps."},"excludedNetworkIds":{"type":"array","items":{"type":"string"},"description":"List of network IDs to exclude when forward is set to 'customize'. This allows you to prevent specific networks from being accessible on ports using this profile."},"forward":{"type":"string","description":"VLAN forwarding mode for the port. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e - Forward all VLANs (trunk port)\n  * \u003cspan pulumi-lang-nodejs=\"`native`\" pulumi-lang-dotnet=\"`Native`\" pulumi-lang-go=\"`native`\" pulumi-lang-python=\"`native`\" pulumi-lang-yaml=\"`native`\" pulumi-lang-java=\"`native`\"\u003e`native`\u003c/span\u003e - Only forward untagged traffic (access port)\n  * \u003cspan pulumi-lang-nodejs=\"`customize`\" pulumi-lang-dotnet=\"`Customize`\" pulumi-lang-go=\"`customize`\" pulumi-lang-python=\"`customize`\" pulumi-lang-yaml=\"`customize`\" pulumi-lang-java=\"`customize`\"\u003e`customize`\u003c/span\u003e - Forward selected VLANs (use with \u003cspan pulumi-lang-nodejs=\"`excludedNetworkIds`\" pulumi-lang-dotnet=\"`ExcludedNetworkIds`\" pulumi-lang-go=\"`excludedNetworkIds`\" pulumi-lang-python=\"`excluded_network_ids`\" pulumi-lang-yaml=\"`excludedNetworkIds`\" pulumi-lang-java=\"`excludedNetworkIds`\"\u003e`excluded_network_ids`\u003c/span\u003e)\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - Disable VLAN forwarding\n\nExamples:\n  * Use 'all' for uplink ports or connections to VLAN-aware devices\n  * Use 'native' for end-user devices or simple network connections\n  * Use 'customize' to create a selective trunk port (e.g., for a server needing access to specific VLANs)"},"fullDuplex":{"type":"boolean","description":"Enable full-duplex mode when auto-negotiation is disabled. Full duplex allows simultaneous two-way communication."},"isolation":{"type":"boolean","description":"Enable port isolation. When enabled, devices connected to ports with this profile cannot communicate with each other, providing enhanced security."},"lldpmedEnabled":{"type":"boolean","description":"Enable Link Layer Discovery Protocol-Media Endpoint Discovery (LLDP-MED). This allows for automatic discovery and configuration of devices like VoIP phones."},"lldpmedNotifyEnabled":{"type":"boolean","description":"Enable LLDP-MED topology change notifications. When enabled:\n* Network devices will be notified of topology changes\n* Useful for VoIP phones and other LLDP-MED capable devices\n* Helps maintain accurate network topology information\n* Facilitates faster device configuration and provisioning"},"name":{"type":"string","description":"A descriptive name for the port profile. Examples:\n* 'AP-Trunk-Port' - For access point uplinks\n* 'VoIP-Phone-Port' - For VoIP phone connections\n* 'User-Access-Port' - For standard user connections\n* 'IoT-Device-Port' - For IoT device connections"},"nativeNetworkconfId":{"type":"string","description":"The ID of the network to use as the native (untagged) network on ports using this profile. This is typically used for:\n* Access ports where devices need untagged access\n* Trunk ports to specify the native VLAN\n* Management networks for network devices"},"opMode":{"type":"string","description":"The operation mode for the port profile. Can only be \u003cspan pulumi-lang-nodejs=\"`switch`\" pulumi-lang-dotnet=\"`Switch`\" pulumi-lang-go=\"`switch`\" pulumi-lang-python=\"`switch`\" pulumi-lang-yaml=\"`switch`\" pulumi-lang-java=\"`switch`\"\u003e`switch`\u003c/span\u003e"},"poeMode":{"type":"string","description":"The POE mode for the port profile. Can be one of \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`passv24`\" pulumi-lang-dotnet=\"`Passv24`\" pulumi-lang-go=\"`passv24`\" pulumi-lang-python=\"`passv24`\" pulumi-lang-yaml=\"`passv24`\" pulumi-lang-java=\"`passv24`\"\u003e`passv24`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`passthrough`\" pulumi-lang-dotnet=\"`Passthrough`\" pulumi-lang-go=\"`passthrough`\" pulumi-lang-python=\"`passthrough`\" pulumi-lang-yaml=\"`passthrough`\" pulumi-lang-java=\"`passthrough`\"\u003e`passthrough`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e."},"portSecurityEnabled":{"type":"boolean","description":"Enable MAC address-based port security. When enabled:\n* Only devices with specified MAC addresses can connect\n* Unauthorized devices will be blocked\n* Provides protection against unauthorized network access\n* Must be used with\u003cspan pulumi-lang-nodejs=\" portSecurityMacAddress \" pulumi-lang-dotnet=\" PortSecurityMacAddress \" pulumi-lang-go=\" portSecurityMacAddress \" pulumi-lang-python=\" port_security_mac_address \" pulumi-lang-yaml=\" portSecurityMacAddress \" pulumi-lang-java=\" portSecurityMacAddress \"\u003e port_security_mac_address \u003c/span\u003elist"},"portSecurityMacAddresses":{"type":"array","items":{"type":"string"},"description":"List of allowed MAC addresses when port security is enabled. Each address should be:\n* In standard format (e.g., 'aa:bb:cc:dd:ee:ff')\n* Unique per device\n* Verified to belong to authorized devices\nOnly effective when\u003cspan pulumi-lang-nodejs=\" portSecurityEnabled \" pulumi-lang-dotnet=\" PortSecurityEnabled \" pulumi-lang-go=\" portSecurityEnabled \" pulumi-lang-python=\" port_security_enabled \" pulumi-lang-yaml=\" portSecurityEnabled \" pulumi-lang-java=\" portSecurityEnabled \"\u003e port_security_enabled \u003c/span\u003eis true"},"priorityQueue1Level":{"type":"integer","description":"Priority queue 1 level (0-100) for Quality of Service (QoS). Used for:\n* Low-priority background traffic\n* Bulk data transfers\n* Non-time-sensitive applications\nHigher values give more bandwidth to this queue"},"priorityQueue2Level":{"type":"integer","description":"Priority queue 2 level (0-100) for Quality of Service (QoS). Used for:\n* Standard user traffic\n* Web browsing and email\n* General business applications\nHigher values give more bandwidth to this queue"},"priorityQueue3Level":{"type":"integer","description":"Priority queue 3 level (0-100) for Quality of Service (QoS). Used for:\n* High-priority traffic\n* Voice and video conferencing\n* Time-sensitive applications\nHigher values give more bandwidth to this queue"},"priorityQueue4Level":{"type":"integer","description":"Priority queue 4 level (0-100) for Quality of Service (QoS). Used for:\n* Highest priority traffic\n* Critical real-time applications\n* Emergency communications\nHigher values give more bandwidth to this queue"},"site":{"type":"string","description":"The name of the UniFi site where the port profile should be created. If not specified, the default site will be used."},"speed":{"type":"integer","description":"Port speed in Mbps when auto-negotiation is disabled. Common values:\n* 10 - 10 Mbps (legacy devices)\n* 100 - 100 Mbps (Fast Ethernet)\n* 1000 - 1 Gbps (Gigabit Ethernet)\n* 2500 - 2.5 Gbps (Multi-Gigabit)\n* 5000 - 5 Gbps (Multi-Gigabit)\n* 10000 - 10 Gbps (10 Gigabit)\nOnly used when autoneg is false"},"stormctrlBcastEnabled":{"type":"boolean","description":"Enable broadcast storm control. When enabled:\n* Limits broadcast traffic to prevent network flooding\n* Protects against broadcast storms\n* Helps maintain network stability\nUse with\u003cspan pulumi-lang-nodejs=\" stormctrlBcastRate \" pulumi-lang-dotnet=\" StormctrlBcastRate \" pulumi-lang-go=\" stormctrlBcastRate \" pulumi-lang-python=\" stormctrl_bcast_rate \" pulumi-lang-yaml=\" stormctrlBcastRate \" pulumi-lang-java=\" stormctrlBcastRate \"\u003e stormctrl_bcast_rate \u003c/span\u003eto set threshold"},"stormctrlBcastLevel":{"type":"integer","description":"The broadcast Storm Control level for the port profile. Can be between 0 and 100."},"stormctrlBcastRate":{"type":"integer","description":"Maximum broadcast traffic rate in packets per second (0 - 14880000). Used to:\n* Control broadcast traffic levels\n* Prevent network congestion\n* Balance between necessary broadcasts and network protection\nOnly effective when \u003cspan pulumi-lang-nodejs=\"`stormctrlBcastEnabled`\" pulumi-lang-dotnet=\"`StormctrlBcastEnabled`\" pulumi-lang-go=\"`stormctrlBcastEnabled`\" pulumi-lang-python=\"`stormctrl_bcast_enabled`\" pulumi-lang-yaml=\"`stormctrlBcastEnabled`\" pulumi-lang-java=\"`stormctrlBcastEnabled`\"\u003e`stormctrl_bcast_enabled`\u003c/span\u003e is true"},"stormctrlMcastEnabled":{"type":"boolean","description":"Enable multicast storm control. When enabled:\n* Limits multicast traffic to prevent network flooding\n* Important for networks with multicast applications\n* Helps maintain quality of service\nUse with \u003cspan pulumi-lang-nodejs=\"`stormctrlMcastRate`\" pulumi-lang-dotnet=\"`StormctrlMcastRate`\" pulumi-lang-go=\"`stormctrlMcastRate`\" pulumi-lang-python=\"`stormctrl_mcast_rate`\" pulumi-lang-yaml=\"`stormctrlMcastRate`\" pulumi-lang-java=\"`stormctrlMcastRate`\"\u003e`stormctrl_mcast_rate`\u003c/span\u003e to set threshold"},"stormctrlMcastLevel":{"type":"integer","description":"The multicast Storm Control level for the port profile. Can be between 0 and 100."},"stormctrlMcastRate":{"type":"integer","description":"Maximum multicast traffic rate in packets per second (0 - 14880000). Used to:\n* Control multicast traffic levels\n* Ensure bandwidth for critical multicast services\n* Prevent multicast traffic from overwhelming the network\nOnly effective when\u003cspan pulumi-lang-nodejs=\" stormctrlMcastEnabled \" pulumi-lang-dotnet=\" StormctrlMcastEnabled \" pulumi-lang-go=\" stormctrlMcastEnabled \" pulumi-lang-python=\" stormctrl_mcast_enabled \" pulumi-lang-yaml=\" stormctrlMcastEnabled \" pulumi-lang-java=\" stormctrlMcastEnabled \"\u003e stormctrl_mcast_enabled \u003c/span\u003eis true"},"stormctrlType":{"type":"string","description":"The type of Storm Control to use for the port profile. Can be one of \u003cspan pulumi-lang-nodejs=\"`level`\" pulumi-lang-dotnet=\"`Level`\" pulumi-lang-go=\"`level`\" pulumi-lang-python=\"`level`\" pulumi-lang-yaml=\"`level`\" pulumi-lang-java=\"`level`\"\u003e`level`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`rate`\" pulumi-lang-dotnet=\"`Rate`\" pulumi-lang-go=\"`rate`\" pulumi-lang-python=\"`rate`\" pulumi-lang-yaml=\"`rate`\" pulumi-lang-java=\"`rate`\"\u003e`rate`\u003c/span\u003e."},"stormctrlUcastEnabled":{"type":"boolean","description":"Enable unknown unicast storm control. When enabled:\n* Limits unknown unicast traffic to prevent flooding\n* Protects against MAC spoofing attacks\n* Helps maintain network performance\nUse with\u003cspan pulumi-lang-nodejs=\" stormctrlUcastRate \" pulumi-lang-dotnet=\" StormctrlUcastRate \" pulumi-lang-go=\" stormctrlUcastRate \" pulumi-lang-python=\" stormctrl_ucast_rate \" pulumi-lang-yaml=\" stormctrlUcastRate \" pulumi-lang-java=\" stormctrlUcastRate \"\u003e stormctrl_ucast_rate \u003c/span\u003eto set threshold"},"stormctrlUcastLevel":{"type":"integer","description":"The unknown unicast Storm Control level for the port profile. Can be between 0 and 100."},"stormctrlUcastRate":{"type":"integer","description":"Maximum unknown unicast traffic rate in packets per second (0 - 14880000). Used to:\n* Control unknown unicast traffic levels\n* Prevent network saturation from unknown destinations\n* Balance security with network usability\nOnly effective when\u003cspan pulumi-lang-nodejs=\" stormctrlUcastEnabled \" pulumi-lang-dotnet=\" StormctrlUcastEnabled \" pulumi-lang-go=\" stormctrlUcastEnabled \" pulumi-lang-python=\" stormctrl_ucast_enabled \" pulumi-lang-yaml=\" stormctrlUcastEnabled \" pulumi-lang-java=\" stormctrlUcastEnabled \"\u003e stormctrl_ucast_enabled \u003c/span\u003eis true"},"stpPortMode":{"type":"boolean","description":"Spanning Tree Protocol (STP) configuration for the port. When enabled:\n* Prevents network loops in switch-to-switch connections\n* Provides automatic failover in redundant topologies\n* Helps maintain network stability\n\nBest practices:\n* Enable on switch uplink ports\n* Enable on ports connecting to other switches\n* Can be disabled on end-device ports for faster initialization"},"taggedVlanMgmt":{"type":"string","description":"VLAN tagging behavior for the port. Valid values are:\n* \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - Automatically handle VLAN tags (recommended)\n    - Intelligently manages tagged and untagged traffic\n    - Best for most deployments\n* \u003cspan pulumi-lang-nodejs=\"`blockAll`\" pulumi-lang-dotnet=\"`BlockAll`\" pulumi-lang-go=\"`blockAll`\" pulumi-lang-python=\"`block_all`\" pulumi-lang-yaml=\"`blockAll`\" pulumi-lang-java=\"`blockAll`\"\u003e`block_all`\u003c/span\u003e - Block all VLAN tagged traffic\n    - Use for security-sensitive ports\n    - Prevents VLAN hopping attacks\n* \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e - Custom VLAN configuration\n    - Manual control over VLAN behavior\n    - For specific VLAN requirements"},"voiceNetworkconfId":{"type":"string","description":"The ID of the network to use for Voice over IP (VoIP) traffic. Used for:\n* Automatic VoIP VLAN configuration\n* Voice traffic prioritization\n* QoS settings for voice packets\n\nCommon scenarios:\n* IP phone deployments with separate voice VLAN\n* Unified communications systems\n* Converged voice/data networks\n\nWorks in conjunction with LLDP-MED for automatic phone provisioning."}},"required":["name","site"],"inputProperties":{"autoneg":{"type":"boolean","description":"Enable automatic negotiation of port speed and duplex settings. When enabled, this overrides manual speed and duplex settings. Recommended for most use cases."},"dot1xCtrl":{"type":"string","description":"802.1X port-based network access control (PNAC) mode. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`forceAuthorized`\" pulumi-lang-dotnet=\"`ForceAuthorized`\" pulumi-lang-go=\"`forceAuthorized`\" pulumi-lang-python=\"`force_authorized`\" pulumi-lang-yaml=\"`forceAuthorized`\" pulumi-lang-java=\"`forceAuthorized`\"\u003e`force_authorized`\u003c/span\u003e - Port allows all traffic, no authentication required (default)\n  * \u003cspan pulumi-lang-nodejs=\"`forceUnauthorized`\" pulumi-lang-dotnet=\"`ForceUnauthorized`\" pulumi-lang-go=\"`forceUnauthorized`\" pulumi-lang-python=\"`force_unauthorized`\" pulumi-lang-yaml=\"`forceUnauthorized`\" pulumi-lang-java=\"`forceUnauthorized`\"\u003e`force_unauthorized`\u003c/span\u003e - Port blocks all traffic regardless of authentication\n  * \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - Standard 802.1X authentication required before port access is granted\n  * \u003cspan pulumi-lang-nodejs=\"`macBased`\" pulumi-lang-dotnet=\"`MacBased`\" pulumi-lang-go=\"`macBased`\" pulumi-lang-python=\"`mac_based`\" pulumi-lang-yaml=\"`macBased`\" pulumi-lang-java=\"`macBased`\"\u003e`mac_based`\u003c/span\u003e - Authentication based on client MAC address, useful for devices that don't support 802.1X\n  * \u003cspan pulumi-lang-nodejs=\"`multiHost`\" pulumi-lang-dotnet=\"`MultiHost`\" pulumi-lang-go=\"`multiHost`\" pulumi-lang-python=\"`multi_host`\" pulumi-lang-yaml=\"`multiHost`\" pulumi-lang-java=\"`multiHost`\"\u003e`multi_host`\u003c/span\u003e - Allows multiple devices after first successful authentication, common in VoIP phone setups\n\nUse 'auto' for highest security, 'mac_based' for legacy devices, and 'multi_host' when daisy-chaining devices."},"dot1xIdleTimeout":{"type":"integer","description":"The number of seconds before an inactive authenticated MAC address is removed when using MAC-based 802.1X control. Range: 0-65535 seconds."},"egressRateLimitKbps":{"type":"integer","description":"The maximum outbound bandwidth allowed on the port in kilobits per second. Range: 64-9999999 kbps. Only applied when\u003cspan pulumi-lang-nodejs=\" egressRateLimitKbpsEnabled \" pulumi-lang-dotnet=\" EgressRateLimitKbpsEnabled \" pulumi-lang-go=\" egressRateLimitKbpsEnabled \" pulumi-lang-python=\" egress_rate_limit_kbps_enabled \" pulumi-lang-yaml=\" egressRateLimitKbpsEnabled \" pulumi-lang-java=\" egressRateLimitKbpsEnabled \"\u003e egress_rate_limit_kbps_enabled \u003c/span\u003eis true."},"egressRateLimitKbpsEnabled":{"type":"boolean","description":"Enable outbound bandwidth rate limiting on the port. When enabled, traffic will be limited to the rate specified in egress_rate_limit_kbps."},"excludedNetworkIds":{"type":"array","items":{"type":"string"},"description":"List of network IDs to exclude when forward is set to 'customize'. This allows you to prevent specific networks from being accessible on ports using this profile."},"forward":{"type":"string","description":"VLAN forwarding mode for the port. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e - Forward all VLANs (trunk port)\n  * \u003cspan pulumi-lang-nodejs=\"`native`\" pulumi-lang-dotnet=\"`Native`\" pulumi-lang-go=\"`native`\" pulumi-lang-python=\"`native`\" pulumi-lang-yaml=\"`native`\" pulumi-lang-java=\"`native`\"\u003e`native`\u003c/span\u003e - Only forward untagged traffic (access port)\n  * \u003cspan pulumi-lang-nodejs=\"`customize`\" pulumi-lang-dotnet=\"`Customize`\" pulumi-lang-go=\"`customize`\" pulumi-lang-python=\"`customize`\" pulumi-lang-yaml=\"`customize`\" pulumi-lang-java=\"`customize`\"\u003e`customize`\u003c/span\u003e - Forward selected VLANs (use with \u003cspan pulumi-lang-nodejs=\"`excludedNetworkIds`\" pulumi-lang-dotnet=\"`ExcludedNetworkIds`\" pulumi-lang-go=\"`excludedNetworkIds`\" pulumi-lang-python=\"`excluded_network_ids`\" pulumi-lang-yaml=\"`excludedNetworkIds`\" pulumi-lang-java=\"`excludedNetworkIds`\"\u003e`excluded_network_ids`\u003c/span\u003e)\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - Disable VLAN forwarding\n\nExamples:\n  * Use 'all' for uplink ports or connections to VLAN-aware devices\n  * Use 'native' for end-user devices or simple network connections\n  * Use 'customize' to create a selective trunk port (e.g., for a server needing access to specific VLANs)"},"fullDuplex":{"type":"boolean","description":"Enable full-duplex mode when auto-negotiation is disabled. Full duplex allows simultaneous two-way communication."},"isolation":{"type":"boolean","description":"Enable port isolation. When enabled, devices connected to ports with this profile cannot communicate with each other, providing enhanced security."},"lldpmedEnabled":{"type":"boolean","description":"Enable Link Layer Discovery Protocol-Media Endpoint Discovery (LLDP-MED). This allows for automatic discovery and configuration of devices like VoIP phones."},"lldpmedNotifyEnabled":{"type":"boolean","description":"Enable LLDP-MED topology change notifications. When enabled:\n* Network devices will be notified of topology changes\n* Useful for VoIP phones and other LLDP-MED capable devices\n* Helps maintain accurate network topology information\n* Facilitates faster device configuration and provisioning"},"name":{"type":"string","description":"A descriptive name for the port profile. Examples:\n* 'AP-Trunk-Port' - For access point uplinks\n* 'VoIP-Phone-Port' - For VoIP phone connections\n* 'User-Access-Port' - For standard user connections\n* 'IoT-Device-Port' - For IoT device connections"},"nativeNetworkconfId":{"type":"string","description":"The ID of the network to use as the native (untagged) network on ports using this profile. This is typically used for:\n* Access ports where devices need untagged access\n* Trunk ports to specify the native VLAN\n* Management networks for network devices"},"opMode":{"type":"string","description":"The operation mode for the port profile. Can only be \u003cspan pulumi-lang-nodejs=\"`switch`\" pulumi-lang-dotnet=\"`Switch`\" pulumi-lang-go=\"`switch`\" pulumi-lang-python=\"`switch`\" pulumi-lang-yaml=\"`switch`\" pulumi-lang-java=\"`switch`\"\u003e`switch`\u003c/span\u003e"},"poeMode":{"type":"string","description":"The POE mode for the port profile. Can be one of \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`passv24`\" pulumi-lang-dotnet=\"`Passv24`\" pulumi-lang-go=\"`passv24`\" pulumi-lang-python=\"`passv24`\" pulumi-lang-yaml=\"`passv24`\" pulumi-lang-java=\"`passv24`\"\u003e`passv24`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`passthrough`\" pulumi-lang-dotnet=\"`Passthrough`\" pulumi-lang-go=\"`passthrough`\" pulumi-lang-python=\"`passthrough`\" pulumi-lang-yaml=\"`passthrough`\" pulumi-lang-java=\"`passthrough`\"\u003e`passthrough`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e."},"portSecurityEnabled":{"type":"boolean","description":"Enable MAC address-based port security. When enabled:\n* Only devices with specified MAC addresses can connect\n* Unauthorized devices will be blocked\n* Provides protection against unauthorized network access\n* Must be used with\u003cspan pulumi-lang-nodejs=\" portSecurityMacAddress \" pulumi-lang-dotnet=\" PortSecurityMacAddress \" pulumi-lang-go=\" portSecurityMacAddress \" pulumi-lang-python=\" port_security_mac_address \" pulumi-lang-yaml=\" portSecurityMacAddress \" pulumi-lang-java=\" portSecurityMacAddress \"\u003e port_security_mac_address \u003c/span\u003elist"},"portSecurityMacAddresses":{"type":"array","items":{"type":"string"},"description":"List of allowed MAC addresses when port security is enabled. Each address should be:\n* In standard format (e.g., 'aa:bb:cc:dd:ee:ff')\n* Unique per device\n* Verified to belong to authorized devices\nOnly effective when\u003cspan pulumi-lang-nodejs=\" portSecurityEnabled \" pulumi-lang-dotnet=\" PortSecurityEnabled \" pulumi-lang-go=\" portSecurityEnabled \" pulumi-lang-python=\" port_security_enabled \" pulumi-lang-yaml=\" portSecurityEnabled \" pulumi-lang-java=\" portSecurityEnabled \"\u003e port_security_enabled \u003c/span\u003eis true"},"priorityQueue1Level":{"type":"integer","description":"Priority queue 1 level (0-100) for Quality of Service (QoS). Used for:\n* Low-priority background traffic\n* Bulk data transfers\n* Non-time-sensitive applications\nHigher values give more bandwidth to this queue"},"priorityQueue2Level":{"type":"integer","description":"Priority queue 2 level (0-100) for Quality of Service (QoS). Used for:\n* Standard user traffic\n* Web browsing and email\n* General business applications\nHigher values give more bandwidth to this queue"},"priorityQueue3Level":{"type":"integer","description":"Priority queue 3 level (0-100) for Quality of Service (QoS). Used for:\n* High-priority traffic\n* Voice and video conferencing\n* Time-sensitive applications\nHigher values give more bandwidth to this queue"},"priorityQueue4Level":{"type":"integer","description":"Priority queue 4 level (0-100) for Quality of Service (QoS). Used for:\n* Highest priority traffic\n* Critical real-time applications\n* Emergency communications\nHigher values give more bandwidth to this queue"},"site":{"type":"string","description":"The name of the UniFi site where the port profile should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"speed":{"type":"integer","description":"Port speed in Mbps when auto-negotiation is disabled. Common values:\n* 10 - 10 Mbps (legacy devices)\n* 100 - 100 Mbps (Fast Ethernet)\n* 1000 - 1 Gbps (Gigabit Ethernet)\n* 2500 - 2.5 Gbps (Multi-Gigabit)\n* 5000 - 5 Gbps (Multi-Gigabit)\n* 10000 - 10 Gbps (10 Gigabit)\nOnly used when autoneg is false"},"stormctrlBcastEnabled":{"type":"boolean","description":"Enable broadcast storm control. When enabled:\n* Limits broadcast traffic to prevent network flooding\n* Protects against broadcast storms\n* Helps maintain network stability\nUse with\u003cspan pulumi-lang-nodejs=\" stormctrlBcastRate \" pulumi-lang-dotnet=\" StormctrlBcastRate \" pulumi-lang-go=\" stormctrlBcastRate \" pulumi-lang-python=\" stormctrl_bcast_rate \" pulumi-lang-yaml=\" stormctrlBcastRate \" pulumi-lang-java=\" stormctrlBcastRate \"\u003e stormctrl_bcast_rate \u003c/span\u003eto set threshold"},"stormctrlBcastLevel":{"type":"integer","description":"The broadcast Storm Control level for the port profile. Can be between 0 and 100."},"stormctrlBcastRate":{"type":"integer","description":"Maximum broadcast traffic rate in packets per second (0 - 14880000). Used to:\n* Control broadcast traffic levels\n* Prevent network congestion\n* Balance between necessary broadcasts and network protection\nOnly effective when \u003cspan pulumi-lang-nodejs=\"`stormctrlBcastEnabled`\" pulumi-lang-dotnet=\"`StormctrlBcastEnabled`\" pulumi-lang-go=\"`stormctrlBcastEnabled`\" pulumi-lang-python=\"`stormctrl_bcast_enabled`\" pulumi-lang-yaml=\"`stormctrlBcastEnabled`\" pulumi-lang-java=\"`stormctrlBcastEnabled`\"\u003e`stormctrl_bcast_enabled`\u003c/span\u003e is true"},"stormctrlMcastEnabled":{"type":"boolean","description":"Enable multicast storm control. When enabled:\n* Limits multicast traffic to prevent network flooding\n* Important for networks with multicast applications\n* Helps maintain quality of service\nUse with \u003cspan pulumi-lang-nodejs=\"`stormctrlMcastRate`\" pulumi-lang-dotnet=\"`StormctrlMcastRate`\" pulumi-lang-go=\"`stormctrlMcastRate`\" pulumi-lang-python=\"`stormctrl_mcast_rate`\" pulumi-lang-yaml=\"`stormctrlMcastRate`\" pulumi-lang-java=\"`stormctrlMcastRate`\"\u003e`stormctrl_mcast_rate`\u003c/span\u003e to set threshold"},"stormctrlMcastLevel":{"type":"integer","description":"The multicast Storm Control level for the port profile. Can be between 0 and 100."},"stormctrlMcastRate":{"type":"integer","description":"Maximum multicast traffic rate in packets per second (0 - 14880000). Used to:\n* Control multicast traffic levels\n* Ensure bandwidth for critical multicast services\n* Prevent multicast traffic from overwhelming the network\nOnly effective when\u003cspan pulumi-lang-nodejs=\" stormctrlMcastEnabled \" pulumi-lang-dotnet=\" StormctrlMcastEnabled \" pulumi-lang-go=\" stormctrlMcastEnabled \" pulumi-lang-python=\" stormctrl_mcast_enabled \" pulumi-lang-yaml=\" stormctrlMcastEnabled \" pulumi-lang-java=\" stormctrlMcastEnabled \"\u003e stormctrl_mcast_enabled \u003c/span\u003eis true"},"stormctrlType":{"type":"string","description":"The type of Storm Control to use for the port profile. Can be one of \u003cspan pulumi-lang-nodejs=\"`level`\" pulumi-lang-dotnet=\"`Level`\" pulumi-lang-go=\"`level`\" pulumi-lang-python=\"`level`\" pulumi-lang-yaml=\"`level`\" pulumi-lang-java=\"`level`\"\u003e`level`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`rate`\" pulumi-lang-dotnet=\"`Rate`\" pulumi-lang-go=\"`rate`\" pulumi-lang-python=\"`rate`\" pulumi-lang-yaml=\"`rate`\" pulumi-lang-java=\"`rate`\"\u003e`rate`\u003c/span\u003e."},"stormctrlUcastEnabled":{"type":"boolean","description":"Enable unknown unicast storm control. When enabled:\n* Limits unknown unicast traffic to prevent flooding\n* Protects against MAC spoofing attacks\n* Helps maintain network performance\nUse with\u003cspan pulumi-lang-nodejs=\" stormctrlUcastRate \" pulumi-lang-dotnet=\" StormctrlUcastRate \" pulumi-lang-go=\" stormctrlUcastRate \" pulumi-lang-python=\" stormctrl_ucast_rate \" pulumi-lang-yaml=\" stormctrlUcastRate \" pulumi-lang-java=\" stormctrlUcastRate \"\u003e stormctrl_ucast_rate \u003c/span\u003eto set threshold"},"stormctrlUcastLevel":{"type":"integer","description":"The unknown unicast Storm Control level for the port profile. Can be between 0 and 100."},"stormctrlUcastRate":{"type":"integer","description":"Maximum unknown unicast traffic rate in packets per second (0 - 14880000). Used to:\n* Control unknown unicast traffic levels\n* Prevent network saturation from unknown destinations\n* Balance security with network usability\nOnly effective when\u003cspan pulumi-lang-nodejs=\" stormctrlUcastEnabled \" pulumi-lang-dotnet=\" StormctrlUcastEnabled \" pulumi-lang-go=\" stormctrlUcastEnabled \" pulumi-lang-python=\" stormctrl_ucast_enabled \" pulumi-lang-yaml=\" stormctrlUcastEnabled \" pulumi-lang-java=\" stormctrlUcastEnabled \"\u003e stormctrl_ucast_enabled \u003c/span\u003eis true"},"stpPortMode":{"type":"boolean","description":"Spanning Tree Protocol (STP) configuration for the port. When enabled:\n* Prevents network loops in switch-to-switch connections\n* Provides automatic failover in redundant topologies\n* Helps maintain network stability\n\nBest practices:\n* Enable on switch uplink ports\n* Enable on ports connecting to other switches\n* Can be disabled on end-device ports for faster initialization"},"taggedVlanMgmt":{"type":"string","description":"VLAN tagging behavior for the port. Valid values are:\n* \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - Automatically handle VLAN tags (recommended)\n    - Intelligently manages tagged and untagged traffic\n    - Best for most deployments\n* \u003cspan pulumi-lang-nodejs=\"`blockAll`\" pulumi-lang-dotnet=\"`BlockAll`\" pulumi-lang-go=\"`blockAll`\" pulumi-lang-python=\"`block_all`\" pulumi-lang-yaml=\"`blockAll`\" pulumi-lang-java=\"`blockAll`\"\u003e`block_all`\u003c/span\u003e - Block all VLAN tagged traffic\n    - Use for security-sensitive ports\n    - Prevents VLAN hopping attacks\n* \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e - Custom VLAN configuration\n    - Manual control over VLAN behavior\n    - For specific VLAN requirements"},"voiceNetworkconfId":{"type":"string","description":"The ID of the network to use for Voice over IP (VoIP) traffic. Used for:\n* Automatic VoIP VLAN configuration\n* Voice traffic prioritization\n* QoS settings for voice packets\n\nCommon scenarios:\n* IP phone deployments with separate voice VLAN\n* Unified communications systems\n* Converged voice/data networks\n\nWorks in conjunction with LLDP-MED for automatic phone provisioning."}},"stateInputs":{"description":"Input properties used for looking up and filtering Profile resources.\n","properties":{"autoneg":{"type":"boolean","description":"Enable automatic negotiation of port speed and duplex settings. When enabled, this overrides manual speed and duplex settings. Recommended for most use cases."},"dot1xCtrl":{"type":"string","description":"802.1X port-based network access control (PNAC) mode. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`forceAuthorized`\" pulumi-lang-dotnet=\"`ForceAuthorized`\" pulumi-lang-go=\"`forceAuthorized`\" pulumi-lang-python=\"`force_authorized`\" pulumi-lang-yaml=\"`forceAuthorized`\" pulumi-lang-java=\"`forceAuthorized`\"\u003e`force_authorized`\u003c/span\u003e - Port allows all traffic, no authentication required (default)\n  * \u003cspan pulumi-lang-nodejs=\"`forceUnauthorized`\" pulumi-lang-dotnet=\"`ForceUnauthorized`\" pulumi-lang-go=\"`forceUnauthorized`\" pulumi-lang-python=\"`force_unauthorized`\" pulumi-lang-yaml=\"`forceUnauthorized`\" pulumi-lang-java=\"`forceUnauthorized`\"\u003e`force_unauthorized`\u003c/span\u003e - Port blocks all traffic regardless of authentication\n  * \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - Standard 802.1X authentication required before port access is granted\n  * \u003cspan pulumi-lang-nodejs=\"`macBased`\" pulumi-lang-dotnet=\"`MacBased`\" pulumi-lang-go=\"`macBased`\" pulumi-lang-python=\"`mac_based`\" pulumi-lang-yaml=\"`macBased`\" pulumi-lang-java=\"`macBased`\"\u003e`mac_based`\u003c/span\u003e - Authentication based on client MAC address, useful for devices that don't support 802.1X\n  * \u003cspan pulumi-lang-nodejs=\"`multiHost`\" pulumi-lang-dotnet=\"`MultiHost`\" pulumi-lang-go=\"`multiHost`\" pulumi-lang-python=\"`multi_host`\" pulumi-lang-yaml=\"`multiHost`\" pulumi-lang-java=\"`multiHost`\"\u003e`multi_host`\u003c/span\u003e - Allows multiple devices after first successful authentication, common in VoIP phone setups\n\nUse 'auto' for highest security, 'mac_based' for legacy devices, and 'multi_host' when daisy-chaining devices."},"dot1xIdleTimeout":{"type":"integer","description":"The number of seconds before an inactive authenticated MAC address is removed when using MAC-based 802.1X control. Range: 0-65535 seconds."},"egressRateLimitKbps":{"type":"integer","description":"The maximum outbound bandwidth allowed on the port in kilobits per second. Range: 64-9999999 kbps. Only applied when\u003cspan pulumi-lang-nodejs=\" egressRateLimitKbpsEnabled \" pulumi-lang-dotnet=\" EgressRateLimitKbpsEnabled \" pulumi-lang-go=\" egressRateLimitKbpsEnabled \" pulumi-lang-python=\" egress_rate_limit_kbps_enabled \" pulumi-lang-yaml=\" egressRateLimitKbpsEnabled \" pulumi-lang-java=\" egressRateLimitKbpsEnabled \"\u003e egress_rate_limit_kbps_enabled \u003c/span\u003eis true."},"egressRateLimitKbpsEnabled":{"type":"boolean","description":"Enable outbound bandwidth rate limiting on the port. When enabled, traffic will be limited to the rate specified in egress_rate_limit_kbps."},"excludedNetworkIds":{"type":"array","items":{"type":"string"},"description":"List of network IDs to exclude when forward is set to 'customize'. This allows you to prevent specific networks from being accessible on ports using this profile."},"forward":{"type":"string","description":"VLAN forwarding mode for the port. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`all`\" pulumi-lang-dotnet=\"`All`\" pulumi-lang-go=\"`all`\" pulumi-lang-python=\"`all`\" pulumi-lang-yaml=\"`all`\" pulumi-lang-java=\"`all`\"\u003e`all`\u003c/span\u003e - Forward all VLANs (trunk port)\n  * \u003cspan pulumi-lang-nodejs=\"`native`\" pulumi-lang-dotnet=\"`Native`\" pulumi-lang-go=\"`native`\" pulumi-lang-python=\"`native`\" pulumi-lang-yaml=\"`native`\" pulumi-lang-java=\"`native`\"\u003e`native`\u003c/span\u003e - Only forward untagged traffic (access port)\n  * \u003cspan pulumi-lang-nodejs=\"`customize`\" pulumi-lang-dotnet=\"`Customize`\" pulumi-lang-go=\"`customize`\" pulumi-lang-python=\"`customize`\" pulumi-lang-yaml=\"`customize`\" pulumi-lang-java=\"`customize`\"\u003e`customize`\u003c/span\u003e - Forward selected VLANs (use with \u003cspan pulumi-lang-nodejs=\"`excludedNetworkIds`\" pulumi-lang-dotnet=\"`ExcludedNetworkIds`\" pulumi-lang-go=\"`excludedNetworkIds`\" pulumi-lang-python=\"`excluded_network_ids`\" pulumi-lang-yaml=\"`excludedNetworkIds`\" pulumi-lang-java=\"`excludedNetworkIds`\"\u003e`excluded_network_ids`\u003c/span\u003e)\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - Disable VLAN forwarding\n\nExamples:\n  * Use 'all' for uplink ports or connections to VLAN-aware devices\n  * Use 'native' for end-user devices or simple network connections\n  * Use 'customize' to create a selective trunk port (e.g., for a server needing access to specific VLANs)"},"fullDuplex":{"type":"boolean","description":"Enable full-duplex mode when auto-negotiation is disabled. Full duplex allows simultaneous two-way communication."},"isolation":{"type":"boolean","description":"Enable port isolation. When enabled, devices connected to ports with this profile cannot communicate with each other, providing enhanced security."},"lldpmedEnabled":{"type":"boolean","description":"Enable Link Layer Discovery Protocol-Media Endpoint Discovery (LLDP-MED). This allows for automatic discovery and configuration of devices like VoIP phones."},"lldpmedNotifyEnabled":{"type":"boolean","description":"Enable LLDP-MED topology change notifications. When enabled:\n* Network devices will be notified of topology changes\n* Useful for VoIP phones and other LLDP-MED capable devices\n* Helps maintain accurate network topology information\n* Facilitates faster device configuration and provisioning"},"name":{"type":"string","description":"A descriptive name for the port profile. Examples:\n* 'AP-Trunk-Port' - For access point uplinks\n* 'VoIP-Phone-Port' - For VoIP phone connections\n* 'User-Access-Port' - For standard user connections\n* 'IoT-Device-Port' - For IoT device connections"},"nativeNetworkconfId":{"type":"string","description":"The ID of the network to use as the native (untagged) network on ports using this profile. This is typically used for:\n* Access ports where devices need untagged access\n* Trunk ports to specify the native VLAN\n* Management networks for network devices"},"opMode":{"type":"string","description":"The operation mode for the port profile. Can only be \u003cspan pulumi-lang-nodejs=\"`switch`\" pulumi-lang-dotnet=\"`Switch`\" pulumi-lang-go=\"`switch`\" pulumi-lang-python=\"`switch`\" pulumi-lang-yaml=\"`switch`\" pulumi-lang-java=\"`switch`\"\u003e`switch`\u003c/span\u003e"},"poeMode":{"type":"string","description":"The POE mode for the port profile. Can be one of \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`passv24`\" pulumi-lang-dotnet=\"`Passv24`\" pulumi-lang-go=\"`passv24`\" pulumi-lang-python=\"`passv24`\" pulumi-lang-yaml=\"`passv24`\" pulumi-lang-java=\"`passv24`\"\u003e`passv24`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`passthrough`\" pulumi-lang-dotnet=\"`Passthrough`\" pulumi-lang-go=\"`passthrough`\" pulumi-lang-python=\"`passthrough`\" pulumi-lang-yaml=\"`passthrough`\" pulumi-lang-java=\"`passthrough`\"\u003e`passthrough`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e."},"portSecurityEnabled":{"type":"boolean","description":"Enable MAC address-based port security. When enabled:\n* Only devices with specified MAC addresses can connect\n* Unauthorized devices will be blocked\n* Provides protection against unauthorized network access\n* Must be used with\u003cspan pulumi-lang-nodejs=\" portSecurityMacAddress \" pulumi-lang-dotnet=\" PortSecurityMacAddress \" pulumi-lang-go=\" portSecurityMacAddress \" pulumi-lang-python=\" port_security_mac_address \" pulumi-lang-yaml=\" portSecurityMacAddress \" pulumi-lang-java=\" portSecurityMacAddress \"\u003e port_security_mac_address \u003c/span\u003elist"},"portSecurityMacAddresses":{"type":"array","items":{"type":"string"},"description":"List of allowed MAC addresses when port security is enabled. Each address should be:\n* In standard format (e.g., 'aa:bb:cc:dd:ee:ff')\n* Unique per device\n* Verified to belong to authorized devices\nOnly effective when\u003cspan pulumi-lang-nodejs=\" portSecurityEnabled \" pulumi-lang-dotnet=\" PortSecurityEnabled \" pulumi-lang-go=\" portSecurityEnabled \" pulumi-lang-python=\" port_security_enabled \" pulumi-lang-yaml=\" portSecurityEnabled \" pulumi-lang-java=\" portSecurityEnabled \"\u003e port_security_enabled \u003c/span\u003eis true"},"priorityQueue1Level":{"type":"integer","description":"Priority queue 1 level (0-100) for Quality of Service (QoS). Used for:\n* Low-priority background traffic\n* Bulk data transfers\n* Non-time-sensitive applications\nHigher values give more bandwidth to this queue"},"priorityQueue2Level":{"type":"integer","description":"Priority queue 2 level (0-100) for Quality of Service (QoS). Used for:\n* Standard user traffic\n* Web browsing and email\n* General business applications\nHigher values give more bandwidth to this queue"},"priorityQueue3Level":{"type":"integer","description":"Priority queue 3 level (0-100) for Quality of Service (QoS). Used for:\n* High-priority traffic\n* Voice and video conferencing\n* Time-sensitive applications\nHigher values give more bandwidth to this queue"},"priorityQueue4Level":{"type":"integer","description":"Priority queue 4 level (0-100) for Quality of Service (QoS). Used for:\n* Highest priority traffic\n* Critical real-time applications\n* Emergency communications\nHigher values give more bandwidth to this queue"},"site":{"type":"string","description":"The name of the UniFi site where the port profile should be created. If not specified, the default site will be used.","willReplaceOnChanges":true},"speed":{"type":"integer","description":"Port speed in Mbps when auto-negotiation is disabled. Common values:\n* 10 - 10 Mbps (legacy devices)\n* 100 - 100 Mbps (Fast Ethernet)\n* 1000 - 1 Gbps (Gigabit Ethernet)\n* 2500 - 2.5 Gbps (Multi-Gigabit)\n* 5000 - 5 Gbps (Multi-Gigabit)\n* 10000 - 10 Gbps (10 Gigabit)\nOnly used when autoneg is false"},"stormctrlBcastEnabled":{"type":"boolean","description":"Enable broadcast storm control. When enabled:\n* Limits broadcast traffic to prevent network flooding\n* Protects against broadcast storms\n* Helps maintain network stability\nUse with\u003cspan pulumi-lang-nodejs=\" stormctrlBcastRate \" pulumi-lang-dotnet=\" StormctrlBcastRate \" pulumi-lang-go=\" stormctrlBcastRate \" pulumi-lang-python=\" stormctrl_bcast_rate \" pulumi-lang-yaml=\" stormctrlBcastRate \" pulumi-lang-java=\" stormctrlBcastRate \"\u003e stormctrl_bcast_rate \u003c/span\u003eto set threshold"},"stormctrlBcastLevel":{"type":"integer","description":"The broadcast Storm Control level for the port profile. Can be between 0 and 100."},"stormctrlBcastRate":{"type":"integer","description":"Maximum broadcast traffic rate in packets per second (0 - 14880000). Used to:\n* Control broadcast traffic levels\n* Prevent network congestion\n* Balance between necessary broadcasts and network protection\nOnly effective when \u003cspan pulumi-lang-nodejs=\"`stormctrlBcastEnabled`\" pulumi-lang-dotnet=\"`StormctrlBcastEnabled`\" pulumi-lang-go=\"`stormctrlBcastEnabled`\" pulumi-lang-python=\"`stormctrl_bcast_enabled`\" pulumi-lang-yaml=\"`stormctrlBcastEnabled`\" pulumi-lang-java=\"`stormctrlBcastEnabled`\"\u003e`stormctrl_bcast_enabled`\u003c/span\u003e is true"},"stormctrlMcastEnabled":{"type":"boolean","description":"Enable multicast storm control. When enabled:\n* Limits multicast traffic to prevent network flooding\n* Important for networks with multicast applications\n* Helps maintain quality of service\nUse with \u003cspan pulumi-lang-nodejs=\"`stormctrlMcastRate`\" pulumi-lang-dotnet=\"`StormctrlMcastRate`\" pulumi-lang-go=\"`stormctrlMcastRate`\" pulumi-lang-python=\"`stormctrl_mcast_rate`\" pulumi-lang-yaml=\"`stormctrlMcastRate`\" pulumi-lang-java=\"`stormctrlMcastRate`\"\u003e`stormctrl_mcast_rate`\u003c/span\u003e to set threshold"},"stormctrlMcastLevel":{"type":"integer","description":"The multicast Storm Control level for the port profile. Can be between 0 and 100."},"stormctrlMcastRate":{"type":"integer","description":"Maximum multicast traffic rate in packets per second (0 - 14880000). Used to:\n* Control multicast traffic levels\n* Ensure bandwidth for critical multicast services\n* Prevent multicast traffic from overwhelming the network\nOnly effective when\u003cspan pulumi-lang-nodejs=\" stormctrlMcastEnabled \" pulumi-lang-dotnet=\" StormctrlMcastEnabled \" pulumi-lang-go=\" stormctrlMcastEnabled \" pulumi-lang-python=\" stormctrl_mcast_enabled \" pulumi-lang-yaml=\" stormctrlMcastEnabled \" pulumi-lang-java=\" stormctrlMcastEnabled \"\u003e stormctrl_mcast_enabled \u003c/span\u003eis true"},"stormctrlType":{"type":"string","description":"The type of Storm Control to use for the port profile. Can be one of \u003cspan pulumi-lang-nodejs=\"`level`\" pulumi-lang-dotnet=\"`Level`\" pulumi-lang-go=\"`level`\" pulumi-lang-python=\"`level`\" pulumi-lang-yaml=\"`level`\" pulumi-lang-java=\"`level`\"\u003e`level`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`rate`\" pulumi-lang-dotnet=\"`Rate`\" pulumi-lang-go=\"`rate`\" pulumi-lang-python=\"`rate`\" pulumi-lang-yaml=\"`rate`\" pulumi-lang-java=\"`rate`\"\u003e`rate`\u003c/span\u003e."},"stormctrlUcastEnabled":{"type":"boolean","description":"Enable unknown unicast storm control. When enabled:\n* Limits unknown unicast traffic to prevent flooding\n* Protects against MAC spoofing attacks\n* Helps maintain network performance\nUse with\u003cspan pulumi-lang-nodejs=\" stormctrlUcastRate \" pulumi-lang-dotnet=\" StormctrlUcastRate \" pulumi-lang-go=\" stormctrlUcastRate \" pulumi-lang-python=\" stormctrl_ucast_rate \" pulumi-lang-yaml=\" stormctrlUcastRate \" pulumi-lang-java=\" stormctrlUcastRate \"\u003e stormctrl_ucast_rate \u003c/span\u003eto set threshold"},"stormctrlUcastLevel":{"type":"integer","description":"The unknown unicast Storm Control level for the port profile. Can be between 0 and 100."},"stormctrlUcastRate":{"type":"integer","description":"Maximum unknown unicast traffic rate in packets per second (0 - 14880000). Used to:\n* Control unknown unicast traffic levels\n* Prevent network saturation from unknown destinations\n* Balance security with network usability\nOnly effective when\u003cspan pulumi-lang-nodejs=\" stormctrlUcastEnabled \" pulumi-lang-dotnet=\" StormctrlUcastEnabled \" pulumi-lang-go=\" stormctrlUcastEnabled \" pulumi-lang-python=\" stormctrl_ucast_enabled \" pulumi-lang-yaml=\" stormctrlUcastEnabled \" pulumi-lang-java=\" stormctrlUcastEnabled \"\u003e stormctrl_ucast_enabled \u003c/span\u003eis true"},"stpPortMode":{"type":"boolean","description":"Spanning Tree Protocol (STP) configuration for the port. When enabled:\n* Prevents network loops in switch-to-switch connections\n* Provides automatic failover in redundant topologies\n* Helps maintain network stability\n\nBest practices:\n* Enable on switch uplink ports\n* Enable on ports connecting to other switches\n* Can be disabled on end-device ports for faster initialization"},"taggedVlanMgmt":{"type":"string","description":"VLAN tagging behavior for the port. Valid values are:\n* \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - Automatically handle VLAN tags (recommended)\n    - Intelligently manages tagged and untagged traffic\n    - Best for most deployments\n* \u003cspan pulumi-lang-nodejs=\"`blockAll`\" pulumi-lang-dotnet=\"`BlockAll`\" pulumi-lang-go=\"`blockAll`\" pulumi-lang-python=\"`block_all`\" pulumi-lang-yaml=\"`blockAll`\" pulumi-lang-java=\"`blockAll`\"\u003e`block_all`\u003c/span\u003e - Block all VLAN tagged traffic\n    - Use for security-sensitive ports\n    - Prevents VLAN hopping attacks\n* \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e - Custom VLAN configuration\n    - Manual control over VLAN behavior\n    - For specific VLAN requirements"},"voiceNetworkconfId":{"type":"string","description":"The ID of the network to use for Voice over IP (VoIP) traffic. Used for:\n* Automatic VoIP VLAN configuration\n* Voice traffic prioritization\n* QoS settings for voice packets\n\nCommon scenarios:\n* IP phone deployments with separate voice VLAN\n* Unified communications systems\n* Converged voice/data networks\n\nWorks in conjunction with LLDP-MED for automatic phone provisioning."}},"type":"object"}},"unifi:setting/autoSpeedtest:AutoSpeedtest":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.setting.AutoSpeedtest`\" pulumi-lang-dotnet=\"`unifi.setting.AutoSpeedtest`\" pulumi-lang-go=\"`setting.AutoSpeedtest`\" pulumi-lang-python=\"`setting.AutoSpeedtest`\" pulumi-lang-yaml=\"`unifi.setting.AutoSpeedtest`\" pulumi-lang-java=\"`unifi.setting.AutoSpeedtest`\"\u003e`unifi.setting.AutoSpeedtest`\u003c/span\u003e resource manages the automatic speedtest settings in the UniFi controller.Automatic speedtests can be scheduled to run at regular intervals to monitor the network performance.\n\n**NOTE:** Automatic speedtests where not verified and tested on all UniFi controller versions due to limitations of controller used in acceptance testing.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.AutoSpeedtest(\"example\", {\n    enabled: true,\n    cron: \"0 0 * * *\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.AutoSpeedtest(\"example\",\n    enabled=True,\n    cron=\"0 0 * * *\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.AutoSpeedtest(\"example\", new()\n    {\n        Enabled = true,\n        Cron = \"0 0 * * *\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewAutoSpeedtest(ctx, \"example\", \u0026setting.AutoSpeedtestArgs{\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tCron:    pulumi.String(\"0 0 * * *\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.AutoSpeedtest;\nimport com.pulumiverse.unifi.setting.AutoSpeedtestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new AutoSpeedtest(\"example\", AutoSpeedtestArgs.builder()\n            .enabled(true)\n            .cron(\"0 0 * * *\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:AutoSpeedtest\n    properties:\n      enabled: true # Schedule for running speedtests using cron syntax\n      #   # This example runs at midnight every day\n      cron: 0 0 * * *\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"cron":{"type":"string","description":"Cron expression defining the schedule for automatic speedtests.\n"},"enabled":{"type":"boolean","description":"Whether the automatic speedtest is enabled.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"required":["enabled","site"],"inputProperties":{"cron":{"type":"string","description":"Cron expression defining the schedule for automatic speedtests.\n"},"enabled":{"type":"boolean","description":"Whether the automatic speedtest is enabled.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"requiredInputs":["enabled"],"stateInputs":{"description":"Input properties used for looking up and filtering AutoSpeedtest resources.\n","properties":{"cron":{"type":"string","description":"Cron expression defining the schedule for automatic speedtests.\n"},"enabled":{"type":"boolean","description":"Whether the automatic speedtest is enabled.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"type":"object"}},"unifi:setting/country:Country":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.setting.Country`\" pulumi-lang-dotnet=\"`unifi.setting.Country`\" pulumi-lang-go=\"`setting.Country`\" pulumi-lang-python=\"`setting.Country`\" pulumi-lang-yaml=\"`unifi.setting.Country`\" pulumi-lang-java=\"`unifi.setting.Country`\"\u003e`unifi.setting.Country`\u003c/span\u003e resource allows you to configure the country settings for your UniFi network.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.Country(\"example\", {code: \"US\"});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.Country(\"example\", code=\"US\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.Country(\"example\", new()\n    {\n        Code = \"US\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewCountry(ctx, \"example\", \u0026setting.CountryArgs{\n\t\t\tCode: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.Country;\nimport com.pulumiverse.unifi.setting.CountryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new Country(\"example\", CountryArgs.builder()\n            .code(\"US\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:Country\n    properties:\n      code: US\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"code":{"type":"string","description":"The country code to set for the UniFi site. The country code must be a valid ISO 3166-1 alpha-2 code.\n"},"codeNumeric":{"type":"integer","description":"The numeric representation in ISO 3166-1 of the country code.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"required":["code","codeNumeric","site"],"inputProperties":{"code":{"type":"string","description":"The country code to set for the UniFi site. The country code must be a valid ISO 3166-1 alpha-2 code.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"requiredInputs":["code"],"stateInputs":{"description":"Input properties used for looking up and filtering Country resources.\n","properties":{"code":{"type":"string","description":"The country code to set for the UniFi site. The country code must be a valid ISO 3166-1 alpha-2 code.\n"},"codeNumeric":{"type":"integer","description":"The numeric representation in ISO 3166-1 of the country code.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"type":"object"}},"unifi:setting/dpi:Dpi":{"description":"Manages Deep Packet Inspection (DPI) settings for a UniFi site. DPI is a feature that allows the UniFi controller to analyze network traffic and identify applications and services being used on the network.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.Dpi(\"example\", {\n    enabled: true,\n    fingerprintingEnabled: true,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.Dpi(\"example\",\n    enabled=True,\n    fingerprinting_enabled=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.Dpi(\"example\", new()\n    {\n        Enabled = true,\n        FingerprintingEnabled = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewDpi(ctx, \"example\", \u0026setting.DpiArgs{\n\t\t\tEnabled:               pulumi.Bool(true),\n\t\t\tFingerprintingEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.Dpi;\nimport com.pulumiverse.unifi.setting.DpiArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new Dpi(\"example\", DpiArgs.builder()\n            .enabled(true)\n            .fingerprintingEnabled(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:Dpi\n    properties:\n      enabled: true # Enable DPI fingerprinting for more accurate application identification\n      fingerprintingEnabled: true # Specify the site (optional, defaults to site configured in provider, otherwise \"default\")\n      #   # site = \"default\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"enabled":{"type":"boolean","description":"Whether Deep Packet Inspection is enabled.\n"},"fingerprintingEnabled":{"type":"boolean","description":"Whether DPI fingerprinting is enabled. Fingerprinting allows the controller to identify applications and services based on traffic patterns.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"required":["enabled","fingerprintingEnabled","site"],"inputProperties":{"enabled":{"type":"boolean","description":"Whether Deep Packet Inspection is enabled.\n"},"fingerprintingEnabled":{"type":"boolean","description":"Whether DPI fingerprinting is enabled. Fingerprinting allows the controller to identify applications and services based on traffic patterns.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"requiredInputs":["enabled","fingerprintingEnabled"],"stateInputs":{"description":"Input properties used for looking up and filtering Dpi resources.\n","properties":{"enabled":{"type":"boolean","description":"Whether Deep Packet Inspection is enabled.\n"},"fingerprintingEnabled":{"type":"boolean","description":"Whether DPI fingerprinting is enabled. Fingerprinting allows the controller to identify applications and services based on traffic patterns.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"type":"object"}},"unifi:setting/guestAccess:GuestAccess":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.setting.GuestAccess`\" pulumi-lang-dotnet=\"`unifi.setting.GuestAccess`\" pulumi-lang-go=\"`setting.GuestAccess`\" pulumi-lang-python=\"`setting.GuestAccess`\" pulumi-lang-yaml=\"`unifi.setting.GuestAccess`\" pulumi-lang-java=\"`unifi.setting.GuestAccess`\"\u003e`unifi.setting.GuestAccess`\u003c/span\u003e resource manages the guest access settings in the UniFi controller.\n\nThis resource allows you to configure all aspects of guest network access including authentication methods, portal customization, and payment options.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\n// Configure guest access settings for your UniFi network\n// This example demonstrates a comprehensive guest portal setup with various authentication options\nconst logo = new unifi.port.AlFile(\"logo\", {filePath: \"logo.png\"});\nconst guestPortal = new unifi.setting.GuestAccess(\"guest_portal\", {\n    auth: \"hotspot\",\n    portalEnabled: true,\n    portalUseHostname: true,\n    portalHostname: \"guest.example.com\",\n    templateEngine: \"angular\",\n    expire: 1440,\n    expireNumber: 1,\n    expireUnit: 1440,\n    ecEnabled: true,\n    password: \"guest-access-password\",\n    google: {\n        clientId: \"your-google-client-id\",\n        clientSecret: \"your-google-client-secret\",\n        domain: \"example.com\",\n        scopeEmail: true,\n    },\n    paymentGateway: \"paypal\",\n    paypal: {\n        username: \"business@example.com\",\n        password: \"paypal-api-password\",\n        signature: \"paypal-api-signature\",\n        useSandbox: true,\n    },\n    redirect: {\n        url: \"https://example.com/welcome\",\n        useHttps: true,\n        toHttps: true,\n    },\n    restrictedDnsServers: [\n        \"1.1.1.1\",\n        \"8.8.8.8\",\n    ],\n    portalCustomization: {\n        customized: true,\n        title: \"Welcome to Our Guest Network\",\n        welcomeText: \"Thanks for visiting our location. Please enjoy our complimentary WiFi.\",\n        welcomeTextEnabled: true,\n        welcomeTextPosition: \"top\",\n        bgColor: \"#f5f5f5\",\n        textColor: \"#333333\",\n        linkColor: \"#0078d4\",\n        boxColor: \"#ffffff\",\n        boxTextColor: \"#333333\",\n        boxLinkColor: \"#0078d4\",\n        boxOpacity: 90,\n        boxRadius: 5,\n        logoFileId: logo.id,\n        buttonColor: \"#0078d4\",\n        buttonTextColor: \"#ffffff\",\n        buttonText: \"Connect\",\n        tosEnabled: true,\n        tos: \"By using this service, you agree to our terms and conditions. Unauthorized use is prohibited.\",\n        languages: [\"PL\"],\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\n# Configure guest access settings for your UniFi network\n# This example demonstrates a comprehensive guest portal setup with various authentication options\nlogo = unifi.port.AlFile(\"logo\", file_path=\"logo.png\")\nguest_portal = unifi.setting.GuestAccess(\"guest_portal\",\n    auth=\"hotspot\",\n    portal_enabled=True,\n    portal_use_hostname=True,\n    portal_hostname=\"guest.example.com\",\n    template_engine=\"angular\",\n    expire=1440,\n    expire_number=1,\n    expire_unit=1440,\n    ec_enabled=True,\n    password=\"guest-access-password\",\n    google={\n        \"client_id\": \"your-google-client-id\",\n        \"client_secret\": \"your-google-client-secret\",\n        \"domain\": \"example.com\",\n        \"scope_email\": True,\n    },\n    payment_gateway=\"paypal\",\n    paypal={\n        \"username\": \"business@example.com\",\n        \"password\": \"paypal-api-password\",\n        \"signature\": \"paypal-api-signature\",\n        \"use_sandbox\": True,\n    },\n    redirect={\n        \"url\": \"https://example.com/welcome\",\n        \"use_https\": True,\n        \"to_https\": True,\n    },\n    restricted_dns_servers=[\n        \"1.1.1.1\",\n        \"8.8.8.8\",\n    ],\n    portal_customization={\n        \"customized\": True,\n        \"title\": \"Welcome to Our Guest Network\",\n        \"welcome_text\": \"Thanks for visiting our location. Please enjoy our complimentary WiFi.\",\n        \"welcome_text_enabled\": True,\n        \"welcome_text_position\": \"top\",\n        \"bg_color\": \"#f5f5f5\",\n        \"text_color\": \"#333333\",\n        \"link_color\": \"#0078d4\",\n        \"box_color\": \"#ffffff\",\n        \"box_text_color\": \"#333333\",\n        \"box_link_color\": \"#0078d4\",\n        \"box_opacity\": 90,\n        \"box_radius\": 5,\n        \"logo_file_id\": logo.id,\n        \"button_color\": \"#0078d4\",\n        \"button_text_color\": \"#ffffff\",\n        \"button_text\": \"Connect\",\n        \"tos_enabled\": True,\n        \"tos\": \"By using this service, you agree to our terms and conditions. Unauthorized use is prohibited.\",\n        \"languages\": [\"PL\"],\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // Configure guest access settings for your UniFi network\n    // This example demonstrates a comprehensive guest portal setup with various authentication options\n    var logo = new Unifi.Port.AlFile(\"logo\", new()\n    {\n        FilePath = \"logo.png\",\n    });\n\n    var guestPortal = new Unifi.Setting.GuestAccess(\"guest_portal\", new()\n    {\n        Auth = \"hotspot\",\n        PortalEnabled = true,\n        PortalUseHostname = true,\n        PortalHostname = \"guest.example.com\",\n        TemplateEngine = \"angular\",\n        Expire = 1440,\n        ExpireNumber = 1,\n        ExpireUnit = 1440,\n        EcEnabled = true,\n        Password = \"guest-access-password\",\n        Google = new Unifi.Setting.Inputs.GuestAccessGoogleArgs\n        {\n            ClientId = \"your-google-client-id\",\n            ClientSecret = \"your-google-client-secret\",\n            Domain = \"example.com\",\n            ScopeEmail = true,\n        },\n        PaymentGateway = \"paypal\",\n        Paypal = new Unifi.Setting.Inputs.GuestAccessPaypalArgs\n        {\n            Username = \"business@example.com\",\n            Password = \"paypal-api-password\",\n            Signature = \"paypal-api-signature\",\n            UseSandbox = true,\n        },\n        Redirect = new Unifi.Setting.Inputs.GuestAccessRedirectArgs\n        {\n            Url = \"https://example.com/welcome\",\n            UseHttps = true,\n            ToHttps = true,\n        },\n        RestrictedDnsServers = new[]\n        {\n            \"1.1.1.1\",\n            \"8.8.8.8\",\n        },\n        PortalCustomization = new Unifi.Setting.Inputs.GuestAccessPortalCustomizationArgs\n        {\n            Customized = true,\n            Title = \"Welcome to Our Guest Network\",\n            WelcomeText = \"Thanks for visiting our location. Please enjoy our complimentary WiFi.\",\n            WelcomeTextEnabled = true,\n            WelcomeTextPosition = \"top\",\n            BgColor = \"#f5f5f5\",\n            TextColor = \"#333333\",\n            LinkColor = \"#0078d4\",\n            BoxColor = \"#ffffff\",\n            BoxTextColor = \"#333333\",\n            BoxLinkColor = \"#0078d4\",\n            BoxOpacity = 90,\n            BoxRadius = 5,\n            LogoFileId = logo.Id,\n            ButtonColor = \"#0078d4\",\n            ButtonTextColor = \"#ffffff\",\n            ButtonText = \"Connect\",\n            TosEnabled = true,\n            Tos = \"By using this service, you agree to our terms and conditions. Unauthorized use is prohibited.\",\n            Languages = new[]\n            {\n                \"PL\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/port\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// Configure guest access settings for your UniFi network\n\t\t// This example demonstrates a comprehensive guest portal setup with various authentication options\n\t\tlogo, err := port.NewAlFile(ctx, \"logo\", \u0026port.AlFileArgs{\n\t\t\tFilePath: pulumi.String(\"logo.png\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = setting.NewGuestAccess(ctx, \"guest_portal\", \u0026setting.GuestAccessArgs{\n\t\t\tAuth:              pulumi.String(\"hotspot\"),\n\t\t\tPortalEnabled:     pulumi.Bool(true),\n\t\t\tPortalUseHostname: pulumi.Bool(true),\n\t\t\tPortalHostname:    pulumi.String(\"guest.example.com\"),\n\t\t\tTemplateEngine:    pulumi.String(\"angular\"),\n\t\t\tExpire:            pulumi.Int(1440),\n\t\t\tExpireNumber:      pulumi.Int(1),\n\t\t\tExpireUnit:        pulumi.Int(1440),\n\t\t\tEcEnabled:         pulumi.Bool(true),\n\t\t\tPassword:          pulumi.String(\"guest-access-password\"),\n\t\t\tGoogle: \u0026setting.GuestAccessGoogleArgs{\n\t\t\t\tClientId:     pulumi.String(\"your-google-client-id\"),\n\t\t\t\tClientSecret: pulumi.String(\"your-google-client-secret\"),\n\t\t\t\tDomain:       pulumi.String(\"example.com\"),\n\t\t\t\tScopeEmail:   pulumi.Bool(true),\n\t\t\t},\n\t\t\tPaymentGateway: pulumi.String(\"paypal\"),\n\t\t\tPaypal: \u0026setting.GuestAccessPaypalArgs{\n\t\t\t\tUsername:   pulumi.String(\"business@example.com\"),\n\t\t\t\tPassword:   pulumi.String(\"paypal-api-password\"),\n\t\t\t\tSignature:  pulumi.String(\"paypal-api-signature\"),\n\t\t\t\tUseSandbox: pulumi.Bool(true),\n\t\t\t},\n\t\t\tRedirect: \u0026setting.GuestAccessRedirectArgs{\n\t\t\t\tUrl:      pulumi.String(\"https://example.com/welcome\"),\n\t\t\t\tUseHttps: pulumi.Bool(true),\n\t\t\t\tToHttps:  pulumi.Bool(true),\n\t\t\t},\n\t\t\tRestrictedDnsServers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"1.1.1.1\"),\n\t\t\t\tpulumi.String(\"8.8.8.8\"),\n\t\t\t},\n\t\t\tPortalCustomization: \u0026setting.GuestAccessPortalCustomizationArgs{\n\t\t\t\tCustomized:          pulumi.Bool(true),\n\t\t\t\tTitle:               pulumi.String(\"Welcome to Our Guest Network\"),\n\t\t\t\tWelcomeText:         pulumi.String(\"Thanks for visiting our location. Please enjoy our complimentary WiFi.\"),\n\t\t\t\tWelcomeTextEnabled:  pulumi.Bool(true),\n\t\t\t\tWelcomeTextPosition: pulumi.String(\"top\"),\n\t\t\t\tBgColor:             pulumi.String(\"#f5f5f5\"),\n\t\t\t\tTextColor:           pulumi.String(\"#333333\"),\n\t\t\t\tLinkColor:           pulumi.String(\"#0078d4\"),\n\t\t\t\tBoxColor:            pulumi.String(\"#ffffff\"),\n\t\t\t\tBoxTextColor:        pulumi.String(\"#333333\"),\n\t\t\t\tBoxLinkColor:        pulumi.String(\"#0078d4\"),\n\t\t\t\tBoxOpacity:          pulumi.Int(90),\n\t\t\t\tBoxRadius:           pulumi.Int(5),\n\t\t\t\tLogoFileId:          logo.ID(),\n\t\t\t\tButtonColor:         pulumi.String(\"#0078d4\"),\n\t\t\t\tButtonTextColor:     pulumi.String(\"#ffffff\"),\n\t\t\t\tButtonText:          pulumi.String(\"Connect\"),\n\t\t\t\tTosEnabled:          pulumi.Bool(true),\n\t\t\t\tTos:                 pulumi.String(\"By using this service, you agree to our terms and conditions. Unauthorized use is prohibited.\"),\n\t\t\t\tLanguages: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"PL\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.port.AlFile;\nimport com.pulumiverse.unifi.port.AlFileArgs;\nimport com.pulumiverse.unifi.setting.GuestAccess;\nimport com.pulumiverse.unifi.setting.GuestAccessArgs;\nimport com.pulumi.unifi.setting.inputs.GuestAccessGoogleArgs;\nimport com.pulumi.unifi.setting.inputs.GuestAccessPaypalArgs;\nimport com.pulumi.unifi.setting.inputs.GuestAccessRedirectArgs;\nimport com.pulumi.unifi.setting.inputs.GuestAccessPortalCustomizationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // Configure guest access settings for your UniFi network\n        // This example demonstrates a comprehensive guest portal setup with various authentication options\n        var logo = new AlFile(\"logo\", AlFileArgs.builder()\n            .filePath(\"logo.png\")\n            .build());\n\n        var guestPortal = new GuestAccess(\"guestPortal\", GuestAccessArgs.builder()\n            .auth(\"hotspot\")\n            .portalEnabled(true)\n            .portalUseHostname(true)\n            .portalHostname(\"guest.example.com\")\n            .templateEngine(\"angular\")\n            .expire(1440)\n            .expireNumber(1)\n            .expireUnit(1440)\n            .ecEnabled(true)\n            .password(\"guest-access-password\")\n            .google(GuestAccessGoogleArgs.builder()\n                .clientId(\"your-google-client-id\")\n                .clientSecret(\"your-google-client-secret\")\n                .domain(\"example.com\")\n                .scopeEmail(true)\n                .build())\n            .paymentGateway(\"paypal\")\n            .paypal(GuestAccessPaypalArgs.builder()\n                .username(\"business@example.com\")\n                .password(\"paypal-api-password\")\n                .signature(\"paypal-api-signature\")\n                .useSandbox(true)\n                .build())\n            .redirect(GuestAccessRedirectArgs.builder()\n                .url(\"https://example.com/welcome\")\n                .useHttps(true)\n                .toHttps(true)\n                .build())\n            .restrictedDnsServers(            \n                \"1.1.1.1\",\n                \"8.8.8.8\")\n            .portalCustomization(GuestAccessPortalCustomizationArgs.builder()\n                .customized(true)\n                .title(\"Welcome to Our Guest Network\")\n                .welcomeText(\"Thanks for visiting our location. Please enjoy our complimentary WiFi.\")\n                .welcomeTextEnabled(true)\n                .welcomeTextPosition(\"top\")\n                .bgColor(\"#f5f5f5\")\n                .textColor(\"#333333\")\n                .linkColor(\"#0078d4\")\n                .boxColor(\"#ffffff\")\n                .boxTextColor(\"#333333\")\n                .boxLinkColor(\"#0078d4\")\n                .boxOpacity(90)\n                .boxRadius(5)\n                .logoFileId(logo.id())\n                .buttonColor(\"#0078d4\")\n                .buttonTextColor(\"#ffffff\")\n                .buttonText(\"Connect\")\n                .tosEnabled(true)\n                .tos(\"By using this service, you agree to our terms and conditions. Unauthorized use is prohibited.\")\n                .languages(\"PL\")\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # Configure guest access settings for your UniFi network\n  # This example demonstrates a comprehensive guest portal setup with various authentication options\n  logo:\n    type: unifi:port:AlFile\n    properties:\n      filePath: logo.png\n  guestPortal:\n    type: unifi:setting:GuestAccess\n    name: guest_portal\n    properties:\n      auth: hotspot\n      portalEnabled: true # Enable the guest portal\n      portalUseHostname: true # Use hostname for the portal\n      portalHostname: guest.example.com\n      templateEngine: angular\n      expire: 1440 # Minutes until expiration\n      expireNumber: 1 # Number of time units\n      expireUnit: 1440 # Enable external captive portal detection\n      ecEnabled: true # Password protection for guest access\n      password: guest-access-password\n      google:\n        clientId: your-google-client-id\n        clientSecret: your-google-client-secret\n        domain: example.com\n        scopeEmail: true\n      paymentGateway: paypal\n      paypal:\n        username: business@example.com\n        password: paypal-api-password\n        signature: paypal-api-signature\n        useSandbox: true\n      redirect:\n        url: https://example.com/welcome\n        useHttps: true\n        toHttps: true\n      restrictedDnsServers:\n        - 1.1.1.1\n        - 8.8.8.8\n      portalCustomization:\n        customized: true\n        title: Welcome to Our Guest Network\n        welcomeText: Thanks for visiting our location. Please enjoy our complimentary WiFi.\n        welcomeTextEnabled: true\n        welcomeTextPosition: top\n        bgColor: '#f5f5f5'\n        textColor: '#333333'\n        linkColor: '#0078d4'\n        boxColor: '#ffffff'\n        boxTextColor: '#333333'\n        boxLinkColor: '#0078d4'\n        boxOpacity: 90\n        boxRadius: 5\n        logoFileId: ${logo.id}\n        buttonColor: '#0078d4'\n        buttonTextColor: '#ffffff'\n        buttonText: Connect\n        tosEnabled: true\n        tos: By using this service, you agree to our terms and conditions. Unauthorized use is prohibited.\n        languages:\n          - PL\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"allowedSubnet":{"type":"string","description":"Subnet allowed for guest access.\n"},"auth":{"type":"string","description":"Authentication method for guest access. Valid values are:\n"},"authUrl":{"type":"string","description":"URL for authentication. Must be a valid URL including the protocol."},"authorize":{"$ref":"#/types/unifi:setting/GuestAccessAuthorize:GuestAccessAuthorize","description":"Authorize.net payment settings."},"customIp":{"type":"string","description":"Custom IP address. Must be a valid IPv4 address (e.g., `192.168.1.1`)."},"ecEnabled":{"type":"boolean","description":"Enable enterprise controller functionality."},"expire":{"type":"integer","description":"Expiration time for guest access."},"expireNumber":{"type":"integer","description":"Number value for the expiration time."},"expireUnit":{"type":"integer","description":"Unit for the expiration time. Valid values are:\n* \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e - Minute\n* \u003cspan pulumi-lang-nodejs=\"`60`\" pulumi-lang-dotnet=\"`60`\" pulumi-lang-go=\"`60`\" pulumi-lang-python=\"`60`\" pulumi-lang-yaml=\"`60`\" pulumi-lang-java=\"`60`\"\u003e`60`\u003c/span\u003e - Hour\n* \u003cspan pulumi-lang-nodejs=\"`1440`\" pulumi-lang-dotnet=\"`1440`\" pulumi-lang-go=\"`1440`\" pulumi-lang-python=\"`1440`\" pulumi-lang-yaml=\"`1440`\" pulumi-lang-java=\"`1440`\"\u003e`1440`\u003c/span\u003e - Day\n* \u003cspan pulumi-lang-nodejs=\"`10080`\" pulumi-lang-dotnet=\"`10080`\" pulumi-lang-go=\"`10080`\" pulumi-lang-python=\"`10080`\" pulumi-lang-yaml=\"`10080`\" pulumi-lang-java=\"`10080`\"\u003e`10080`\u003c/span\u003e - Week"},"facebook":{"$ref":"#/types/unifi:setting/GuestAccessFacebook:GuestAccessFacebook","description":"Facebook authentication settings."},"facebookEnabled":{"type":"boolean","description":"Whether Facebook authentication for guest access is enabled."},"facebookWifi":{"$ref":"#/types/unifi:setting/GuestAccessFacebookWifi:GuestAccessFacebookWifi","description":"- Facebook auth entication\n"},"google":{"$ref":"#/types/unifi:setting/GuestAccessGoogle:GuestAccessGoogle","description":"Google authentication settings."},"googleEnabled":{"type":"boolean","description":"Whether Google authentication for guest access is enabled."},"ippay":{"$ref":"#/types/unifi:setting/GuestAccessIppay:GuestAccessIppay","description":"IPpay Payments settings."},"merchantWarrior":{"$ref":"#/types/unifi:setting/GuestAccessMerchantWarrior:GuestAccessMerchantWarrior","description":"MerchantWarrior payment settings."},"password":{"type":"string","description":"Password for guest access.","secret":true},"passwordEnabled":{"type":"boolean","description":"Enable password authentication for guest access."},"paymentEnabled":{"type":"boolean","description":"Enable payment for guest access."},"paymentGateway":{"type":"string","description":"Payment gateway. Valid values are:\n* \u003cspan pulumi-lang-nodejs=\"`paypal`\" pulumi-lang-dotnet=\"`Paypal`\" pulumi-lang-go=\"`paypal`\" pulumi-lang-python=\"`paypal`\" pulumi-lang-yaml=\"`paypal`\" pulumi-lang-java=\"`paypal`\"\u003e`paypal`\u003c/span\u003e - PayPal\n* \u003cspan pulumi-lang-nodejs=\"`stripe`\" pulumi-lang-dotnet=\"`Stripe`\" pulumi-lang-go=\"`stripe`\" pulumi-lang-python=\"`stripe`\" pulumi-lang-yaml=\"`stripe`\" pulumi-lang-java=\"`stripe`\"\u003e`stripe`\u003c/span\u003e - Stripe\n* \u003cspan pulumi-lang-nodejs=\"`authorize`\" pulumi-lang-dotnet=\"`Authorize`\" pulumi-lang-go=\"`authorize`\" pulumi-lang-python=\"`authorize`\" pulumi-lang-yaml=\"`authorize`\" pulumi-lang-java=\"`authorize`\"\u003e`authorize`\u003c/span\u003e - Authorize.net\n* \u003cspan pulumi-lang-nodejs=\"`quickpay`\" pulumi-lang-dotnet=\"`Quickpay`\" pulumi-lang-go=\"`quickpay`\" pulumi-lang-python=\"`quickpay`\" pulumi-lang-yaml=\"`quickpay`\" pulumi-lang-java=\"`quickpay`\"\u003e`quickpay`\u003c/span\u003e - QuickPay\n* \u003cspan pulumi-lang-nodejs=\"`merchantwarrior`\" pulumi-lang-dotnet=\"`Merchantwarrior`\" pulumi-lang-go=\"`merchantwarrior`\" pulumi-lang-python=\"`merchantwarrior`\" pulumi-lang-yaml=\"`merchantwarrior`\" pulumi-lang-java=\"`merchantwarrior`\"\u003e`merchantwarrior`\u003c/span\u003e - Merchant Warrior\n* \u003cspan pulumi-lang-nodejs=\"`ippay`\" pulumi-lang-dotnet=\"`Ippay`\" pulumi-lang-go=\"`ippay`\" pulumi-lang-python=\"`ippay`\" pulumi-lang-yaml=\"`ippay`\" pulumi-lang-java=\"`ippay`\"\u003e`ippay`\u003c/span\u003e - IP Payments"},"paypal":{"$ref":"#/types/unifi:setting/GuestAccessPaypal:GuestAccessPaypal","description":"PayPal payment settings."},"portalCustomization":{"$ref":"#/types/unifi:setting/GuestAccessPortalCustomization:GuestAccessPortalCustomization","description":"Portal customization settings."},"portalEnabled":{"type":"boolean","description":"Enable the guest portal."},"portalHostname":{"type":"string","description":"Hostname to use for the captive portal."},"portalUseHostname":{"type":"boolean","description":"Use a custom hostname for the portal."},"quickpay":{"$ref":"#/types/unifi:setting/GuestAccessQuickpay:GuestAccessQuickpay","description":"QuickPay payment settings."},"radius":{"$ref":"#/types/unifi:setting/GuestAccessRadius:GuestAccessRadius","description":"RADIUS authentication settings."},"radiusEnabled":{"type":"boolean","description":"Whether RADIUS authentication for guest access is enabled."},"redirect":{"$ref":"#/types/unifi:setting/GuestAccessRedirect:GuestAccessRedirect","description":"Redirect after authentication settings."},"redirectEnabled":{"type":"boolean","description":"Whether redirect after authentication is enabled."},"restrictedDnsEnabled":{"type":"boolean","description":"Whether restricted DNS servers for guest networks are enabled."},"restrictedDnsServers":{"type":"array","items":{"type":"string"},"description":"List of restricted DNS servers for guest networks. Each value must be a valid IPv4 address."},"restrictedSubnet":{"type":"string","description":"Subnet for restricted guest access."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"stripe":{"$ref":"#/types/unifi:setting/GuestAccessStripe:GuestAccessStripe","description":"Stripe payment settings."},"templateEngine":{"type":"string","description":"Template engine for the portal. Valid values are: \u003cspan pulumi-lang-nodejs=\"`jsp`\" pulumi-lang-dotnet=\"`Jsp`\" pulumi-lang-go=\"`jsp`\" pulumi-lang-python=\"`jsp`\" pulumi-lang-yaml=\"`jsp`\" pulumi-lang-java=\"`jsp`\"\u003e`jsp`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`angular`\" pulumi-lang-dotnet=\"`Angular`\" pulumi-lang-go=\"`angular`\" pulumi-lang-python=\"`angular`\" pulumi-lang-yaml=\"`angular`\" pulumi-lang-java=\"`angular`\"\u003e`angular`\u003c/span\u003e."},"voucherCustomized":{"type":"boolean","description":"Whether vouchers are customized."},"voucherEnabled":{"type":"boolean","description":"Enable voucher-based authentication for guest access."},"wechat":{"$ref":"#/types/unifi:setting/GuestAccessWechat:GuestAccessWechat","description":"WeChat authentication settings."},"wechatEnabled":{"type":"boolean","description":"Whether WeChat authentication for guest access is enabled."}},"required":["allowedSubnet","auth","authUrl","ecEnabled","expire","expireNumber","expireUnit","facebookEnabled","googleEnabled","passwordEnabled","paymentEnabled","portalCustomization","portalEnabled","portalHostname","portalUseHostname","radiusEnabled","redirectEnabled","restrictedDnsEnabled","restrictedDnsServers","restrictedSubnet","site","templateEngine","voucherCustomized","voucherEnabled","wechatEnabled"],"inputProperties":{"allowedSubnet":{"type":"string","description":"Subnet allowed for guest access.\n"},"auth":{"type":"string","description":"Authentication method for guest access. Valid values are:\n"},"authUrl":{"type":"string","description":"URL for authentication. Must be a valid URL including the protocol."},"authorize":{"$ref":"#/types/unifi:setting/GuestAccessAuthorize:GuestAccessAuthorize","description":"Authorize.net payment settings."},"customIp":{"type":"string","description":"Custom IP address. Must be a valid IPv4 address (e.g., `192.168.1.1`)."},"ecEnabled":{"type":"boolean","description":"Enable enterprise controller functionality."},"expire":{"type":"integer","description":"Expiration time for guest access."},"expireNumber":{"type":"integer","description":"Number value for the expiration time."},"expireUnit":{"type":"integer","description":"Unit for the expiration time. Valid values are:\n* \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e - Minute\n* \u003cspan pulumi-lang-nodejs=\"`60`\" pulumi-lang-dotnet=\"`60`\" pulumi-lang-go=\"`60`\" pulumi-lang-python=\"`60`\" pulumi-lang-yaml=\"`60`\" pulumi-lang-java=\"`60`\"\u003e`60`\u003c/span\u003e - Hour\n* \u003cspan pulumi-lang-nodejs=\"`1440`\" pulumi-lang-dotnet=\"`1440`\" pulumi-lang-go=\"`1440`\" pulumi-lang-python=\"`1440`\" pulumi-lang-yaml=\"`1440`\" pulumi-lang-java=\"`1440`\"\u003e`1440`\u003c/span\u003e - Day\n* \u003cspan pulumi-lang-nodejs=\"`10080`\" pulumi-lang-dotnet=\"`10080`\" pulumi-lang-go=\"`10080`\" pulumi-lang-python=\"`10080`\" pulumi-lang-yaml=\"`10080`\" pulumi-lang-java=\"`10080`\"\u003e`10080`\u003c/span\u003e - Week"},"facebook":{"$ref":"#/types/unifi:setting/GuestAccessFacebook:GuestAccessFacebook","description":"Facebook authentication settings."},"facebookWifi":{"$ref":"#/types/unifi:setting/GuestAccessFacebookWifi:GuestAccessFacebookWifi","description":"- Facebook auth entication\n"},"google":{"$ref":"#/types/unifi:setting/GuestAccessGoogle:GuestAccessGoogle","description":"Google authentication settings."},"ippay":{"$ref":"#/types/unifi:setting/GuestAccessIppay:GuestAccessIppay","description":"IPpay Payments settings."},"merchantWarrior":{"$ref":"#/types/unifi:setting/GuestAccessMerchantWarrior:GuestAccessMerchantWarrior","description":"MerchantWarrior payment settings."},"password":{"type":"string","description":"Password for guest access.","secret":true},"paymentGateway":{"type":"string","description":"Payment gateway. Valid values are:\n* \u003cspan pulumi-lang-nodejs=\"`paypal`\" pulumi-lang-dotnet=\"`Paypal`\" pulumi-lang-go=\"`paypal`\" pulumi-lang-python=\"`paypal`\" pulumi-lang-yaml=\"`paypal`\" pulumi-lang-java=\"`paypal`\"\u003e`paypal`\u003c/span\u003e - PayPal\n* \u003cspan pulumi-lang-nodejs=\"`stripe`\" pulumi-lang-dotnet=\"`Stripe`\" pulumi-lang-go=\"`stripe`\" pulumi-lang-python=\"`stripe`\" pulumi-lang-yaml=\"`stripe`\" pulumi-lang-java=\"`stripe`\"\u003e`stripe`\u003c/span\u003e - Stripe\n* \u003cspan pulumi-lang-nodejs=\"`authorize`\" pulumi-lang-dotnet=\"`Authorize`\" pulumi-lang-go=\"`authorize`\" pulumi-lang-python=\"`authorize`\" pulumi-lang-yaml=\"`authorize`\" pulumi-lang-java=\"`authorize`\"\u003e`authorize`\u003c/span\u003e - Authorize.net\n* \u003cspan pulumi-lang-nodejs=\"`quickpay`\" pulumi-lang-dotnet=\"`Quickpay`\" pulumi-lang-go=\"`quickpay`\" pulumi-lang-python=\"`quickpay`\" pulumi-lang-yaml=\"`quickpay`\" pulumi-lang-java=\"`quickpay`\"\u003e`quickpay`\u003c/span\u003e - QuickPay\n* \u003cspan pulumi-lang-nodejs=\"`merchantwarrior`\" pulumi-lang-dotnet=\"`Merchantwarrior`\" pulumi-lang-go=\"`merchantwarrior`\" pulumi-lang-python=\"`merchantwarrior`\" pulumi-lang-yaml=\"`merchantwarrior`\" pulumi-lang-java=\"`merchantwarrior`\"\u003e`merchantwarrior`\u003c/span\u003e - Merchant Warrior\n* \u003cspan pulumi-lang-nodejs=\"`ippay`\" pulumi-lang-dotnet=\"`Ippay`\" pulumi-lang-go=\"`ippay`\" pulumi-lang-python=\"`ippay`\" pulumi-lang-yaml=\"`ippay`\" pulumi-lang-java=\"`ippay`\"\u003e`ippay`\u003c/span\u003e - IP Payments"},"paypal":{"$ref":"#/types/unifi:setting/GuestAccessPaypal:GuestAccessPaypal","description":"PayPal payment settings."},"portalCustomization":{"$ref":"#/types/unifi:setting/GuestAccessPortalCustomization:GuestAccessPortalCustomization","description":"Portal customization settings."},"portalEnabled":{"type":"boolean","description":"Enable the guest portal."},"portalHostname":{"type":"string","description":"Hostname to use for the captive portal."},"portalUseHostname":{"type":"boolean","description":"Use a custom hostname for the portal."},"quickpay":{"$ref":"#/types/unifi:setting/GuestAccessQuickpay:GuestAccessQuickpay","description":"QuickPay payment settings."},"radius":{"$ref":"#/types/unifi:setting/GuestAccessRadius:GuestAccessRadius","description":"RADIUS authentication settings."},"redirect":{"$ref":"#/types/unifi:setting/GuestAccessRedirect:GuestAccessRedirect","description":"Redirect after authentication settings."},"restrictedDnsServers":{"type":"array","items":{"type":"string"},"description":"List of restricted DNS servers for guest networks. Each value must be a valid IPv4 address."},"restrictedSubnet":{"type":"string","description":"Subnet for restricted guest access."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"stripe":{"$ref":"#/types/unifi:setting/GuestAccessStripe:GuestAccessStripe","description":"Stripe payment settings."},"templateEngine":{"type":"string","description":"Template engine for the portal. Valid values are: \u003cspan pulumi-lang-nodejs=\"`jsp`\" pulumi-lang-dotnet=\"`Jsp`\" pulumi-lang-go=\"`jsp`\" pulumi-lang-python=\"`jsp`\" pulumi-lang-yaml=\"`jsp`\" pulumi-lang-java=\"`jsp`\"\u003e`jsp`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`angular`\" pulumi-lang-dotnet=\"`Angular`\" pulumi-lang-go=\"`angular`\" pulumi-lang-python=\"`angular`\" pulumi-lang-yaml=\"`angular`\" pulumi-lang-java=\"`angular`\"\u003e`angular`\u003c/span\u003e."},"voucherCustomized":{"type":"boolean","description":"Whether vouchers are customized."},"voucherEnabled":{"type":"boolean","description":"Enable voucher-based authentication for guest access."},"wechat":{"$ref":"#/types/unifi:setting/GuestAccessWechat:GuestAccessWechat","description":"WeChat authentication settings."}},"stateInputs":{"description":"Input properties used for looking up and filtering GuestAccess resources.\n","properties":{"allowedSubnet":{"type":"string","description":"Subnet allowed for guest access.\n"},"auth":{"type":"string","description":"Authentication method for guest access. Valid values are:\n"},"authUrl":{"type":"string","description":"URL for authentication. Must be a valid URL including the protocol."},"authorize":{"$ref":"#/types/unifi:setting/GuestAccessAuthorize:GuestAccessAuthorize","description":"Authorize.net payment settings."},"customIp":{"type":"string","description":"Custom IP address. Must be a valid IPv4 address (e.g., `192.168.1.1`)."},"ecEnabled":{"type":"boolean","description":"Enable enterprise controller functionality."},"expire":{"type":"integer","description":"Expiration time for guest access."},"expireNumber":{"type":"integer","description":"Number value for the expiration time."},"expireUnit":{"type":"integer","description":"Unit for the expiration time. Valid values are:\n* \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e - Minute\n* \u003cspan pulumi-lang-nodejs=\"`60`\" pulumi-lang-dotnet=\"`60`\" pulumi-lang-go=\"`60`\" pulumi-lang-python=\"`60`\" pulumi-lang-yaml=\"`60`\" pulumi-lang-java=\"`60`\"\u003e`60`\u003c/span\u003e - Hour\n* \u003cspan pulumi-lang-nodejs=\"`1440`\" pulumi-lang-dotnet=\"`1440`\" pulumi-lang-go=\"`1440`\" pulumi-lang-python=\"`1440`\" pulumi-lang-yaml=\"`1440`\" pulumi-lang-java=\"`1440`\"\u003e`1440`\u003c/span\u003e - Day\n* \u003cspan pulumi-lang-nodejs=\"`10080`\" pulumi-lang-dotnet=\"`10080`\" pulumi-lang-go=\"`10080`\" pulumi-lang-python=\"`10080`\" pulumi-lang-yaml=\"`10080`\" pulumi-lang-java=\"`10080`\"\u003e`10080`\u003c/span\u003e - Week"},"facebook":{"$ref":"#/types/unifi:setting/GuestAccessFacebook:GuestAccessFacebook","description":"Facebook authentication settings."},"facebookEnabled":{"type":"boolean","description":"Whether Facebook authentication for guest access is enabled."},"facebookWifi":{"$ref":"#/types/unifi:setting/GuestAccessFacebookWifi:GuestAccessFacebookWifi","description":"- Facebook auth entication\n"},"google":{"$ref":"#/types/unifi:setting/GuestAccessGoogle:GuestAccessGoogle","description":"Google authentication settings."},"googleEnabled":{"type":"boolean","description":"Whether Google authentication for guest access is enabled."},"ippay":{"$ref":"#/types/unifi:setting/GuestAccessIppay:GuestAccessIppay","description":"IPpay Payments settings."},"merchantWarrior":{"$ref":"#/types/unifi:setting/GuestAccessMerchantWarrior:GuestAccessMerchantWarrior","description":"MerchantWarrior payment settings."},"password":{"type":"string","description":"Password for guest access.","secret":true},"passwordEnabled":{"type":"boolean","description":"Enable password authentication for guest access."},"paymentEnabled":{"type":"boolean","description":"Enable payment for guest access."},"paymentGateway":{"type":"string","description":"Payment gateway. Valid values are:\n* \u003cspan pulumi-lang-nodejs=\"`paypal`\" pulumi-lang-dotnet=\"`Paypal`\" pulumi-lang-go=\"`paypal`\" pulumi-lang-python=\"`paypal`\" pulumi-lang-yaml=\"`paypal`\" pulumi-lang-java=\"`paypal`\"\u003e`paypal`\u003c/span\u003e - PayPal\n* \u003cspan pulumi-lang-nodejs=\"`stripe`\" pulumi-lang-dotnet=\"`Stripe`\" pulumi-lang-go=\"`stripe`\" pulumi-lang-python=\"`stripe`\" pulumi-lang-yaml=\"`stripe`\" pulumi-lang-java=\"`stripe`\"\u003e`stripe`\u003c/span\u003e - Stripe\n* \u003cspan pulumi-lang-nodejs=\"`authorize`\" pulumi-lang-dotnet=\"`Authorize`\" pulumi-lang-go=\"`authorize`\" pulumi-lang-python=\"`authorize`\" pulumi-lang-yaml=\"`authorize`\" pulumi-lang-java=\"`authorize`\"\u003e`authorize`\u003c/span\u003e - Authorize.net\n* \u003cspan pulumi-lang-nodejs=\"`quickpay`\" pulumi-lang-dotnet=\"`Quickpay`\" pulumi-lang-go=\"`quickpay`\" pulumi-lang-python=\"`quickpay`\" pulumi-lang-yaml=\"`quickpay`\" pulumi-lang-java=\"`quickpay`\"\u003e`quickpay`\u003c/span\u003e - QuickPay\n* \u003cspan pulumi-lang-nodejs=\"`merchantwarrior`\" pulumi-lang-dotnet=\"`Merchantwarrior`\" pulumi-lang-go=\"`merchantwarrior`\" pulumi-lang-python=\"`merchantwarrior`\" pulumi-lang-yaml=\"`merchantwarrior`\" pulumi-lang-java=\"`merchantwarrior`\"\u003e`merchantwarrior`\u003c/span\u003e - Merchant Warrior\n* \u003cspan pulumi-lang-nodejs=\"`ippay`\" pulumi-lang-dotnet=\"`Ippay`\" pulumi-lang-go=\"`ippay`\" pulumi-lang-python=\"`ippay`\" pulumi-lang-yaml=\"`ippay`\" pulumi-lang-java=\"`ippay`\"\u003e`ippay`\u003c/span\u003e - IP Payments"},"paypal":{"$ref":"#/types/unifi:setting/GuestAccessPaypal:GuestAccessPaypal","description":"PayPal payment settings."},"portalCustomization":{"$ref":"#/types/unifi:setting/GuestAccessPortalCustomization:GuestAccessPortalCustomization","description":"Portal customization settings."},"portalEnabled":{"type":"boolean","description":"Enable the guest portal."},"portalHostname":{"type":"string","description":"Hostname to use for the captive portal."},"portalUseHostname":{"type":"boolean","description":"Use a custom hostname for the portal."},"quickpay":{"$ref":"#/types/unifi:setting/GuestAccessQuickpay:GuestAccessQuickpay","description":"QuickPay payment settings."},"radius":{"$ref":"#/types/unifi:setting/GuestAccessRadius:GuestAccessRadius","description":"RADIUS authentication settings."},"radiusEnabled":{"type":"boolean","description":"Whether RADIUS authentication for guest access is enabled."},"redirect":{"$ref":"#/types/unifi:setting/GuestAccessRedirect:GuestAccessRedirect","description":"Redirect after authentication settings."},"redirectEnabled":{"type":"boolean","description":"Whether redirect after authentication is enabled."},"restrictedDnsEnabled":{"type":"boolean","description":"Whether restricted DNS servers for guest networks are enabled."},"restrictedDnsServers":{"type":"array","items":{"type":"string"},"description":"List of restricted DNS servers for guest networks. Each value must be a valid IPv4 address."},"restrictedSubnet":{"type":"string","description":"Subnet for restricted guest access."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"stripe":{"$ref":"#/types/unifi:setting/GuestAccessStripe:GuestAccessStripe","description":"Stripe payment settings."},"templateEngine":{"type":"string","description":"Template engine for the portal. Valid values are: \u003cspan pulumi-lang-nodejs=\"`jsp`\" pulumi-lang-dotnet=\"`Jsp`\" pulumi-lang-go=\"`jsp`\" pulumi-lang-python=\"`jsp`\" pulumi-lang-yaml=\"`jsp`\" pulumi-lang-java=\"`jsp`\"\u003e`jsp`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`angular`\" pulumi-lang-dotnet=\"`Angular`\" pulumi-lang-go=\"`angular`\" pulumi-lang-python=\"`angular`\" pulumi-lang-yaml=\"`angular`\" pulumi-lang-java=\"`angular`\"\u003e`angular`\u003c/span\u003e."},"voucherCustomized":{"type":"boolean","description":"Whether vouchers are customized."},"voucherEnabled":{"type":"boolean","description":"Enable voucher-based authentication for guest access."},"wechat":{"$ref":"#/types/unifi:setting/GuestAccessWechat:GuestAccessWechat","description":"WeChat authentication settings."},"wechatEnabled":{"type":"boolean","description":"Whether WeChat authentication for guest access is enabled."}},"type":"object"}},"unifi:setting/ips:Ips":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.setting.Ips`\" pulumi-lang-dotnet=\"`unifi.setting.Ips`\" pulumi-lang-go=\"`setting.Ips`\" pulumi-lang-python=\"`setting.Ips`\" pulumi-lang-yaml=\"`unifi.setting.Ips`\" pulumi-lang-java=\"`unifi.setting.Ips`\"\u003e`unifi.setting.Ips`\u003c/span\u003e resource allows you to configure the Intrusion Prevention System (IPS) settings for your UniFi network. IPS provides network threat protection by monitoring, detecting, and preventing malicious traffic based on configured rules and policies. Requires controller version 7.4 or later\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst test = new unifi.Network(\"test\", {\n    name: \"My Network\",\n    purpose: \"corporate\",\n    subnet: \"192.168.1.0/24\",\n    vlanId: 10,\n});\nconst example = new unifi.setting.Ips(\"example\", {\n    ipsMode: \"ips\",\n    enabledNetworks: [test.id],\n    advancedFilteringPreference: \"manual\",\n    enabledCategories: [\n        \"emerging-dos\",\n        \"emerging-exploit\",\n        \"emerging-malware\",\n    ],\n    adBlockedNetworks: [test.id],\n    honeypots: [{\n        ipAddress: \"192.168.1.10\",\n        networkId: test.id,\n    }],\n    dnsFilters: [{\n        name: \"Work Filter\",\n        filter: \"work\",\n        description: \"Block non-work related sites\",\n        allowedSites: [\n            \"example.com\",\n            \"company.com\",\n        ],\n        blockedSites: [\n            \"gaming.example.com\",\n            \"social.example.com\",\n        ],\n        blockedTld: [\"xyz\"],\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\ntest = unifi.Network(\"test\",\n    name=\"My Network\",\n    purpose=\"corporate\",\n    subnet=\"192.168.1.0/24\",\n    vlan_id=10)\nexample = unifi.setting.Ips(\"example\",\n    ips_mode=\"ips\",\n    enabled_networks=[test.id],\n    advanced_filtering_preference=\"manual\",\n    enabled_categories=[\n        \"emerging-dos\",\n        \"emerging-exploit\",\n        \"emerging-malware\",\n    ],\n    ad_blocked_networks=[test.id],\n    honeypots=[{\n        \"ip_address\": \"192.168.1.10\",\n        \"network_id\": test.id,\n    }],\n    dns_filters=[{\n        \"name\": \"Work Filter\",\n        \"filter\": \"work\",\n        \"description\": \"Block non-work related sites\",\n        \"allowed_sites\": [\n            \"example.com\",\n            \"company.com\",\n        ],\n        \"blocked_sites\": [\n            \"gaming.example.com\",\n            \"social.example.com\",\n        ],\n        \"blocked_tld\": [\"xyz\"],\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Unifi.Network(\"test\", new()\n    {\n        Name = \"My Network\",\n        Purpose = \"corporate\",\n        Subnet = \"192.168.1.0/24\",\n        VlanId = 10,\n    });\n\n    var example = new Unifi.Setting.Ips(\"example\", new()\n    {\n        IpsMode = \"ips\",\n        EnabledNetworks = new[]\n        {\n            test.Id,\n        },\n        AdvancedFilteringPreference = \"manual\",\n        EnabledCategories = new[]\n        {\n            \"emerging-dos\",\n            \"emerging-exploit\",\n            \"emerging-malware\",\n        },\n        AdBlockedNetworks = new[]\n        {\n            test.Id,\n        },\n        Honeypots = new[]\n        {\n            new Unifi.Setting.Inputs.IpsHoneypotArgs\n            {\n                IpAddress = \"192.168.1.10\",\n                NetworkId = test.Id,\n            },\n        },\n        DnsFilters = new[]\n        {\n            new Unifi.Setting.Inputs.IpsDnsFilterArgs\n            {\n                Name = \"Work Filter\",\n                Filter = \"work\",\n                Description = \"Block non-work related sites\",\n                AllowedSites = new[]\n                {\n                    \"example.com\",\n                    \"company.com\",\n                },\n                BlockedSites = new[]\n                {\n                    \"gaming.example.com\",\n                    \"social.example.com\",\n                },\n                BlockedTld = new[]\n                {\n                    \"xyz\",\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := unifi.NewNetwork(ctx, \"test\", \u0026unifi.NetworkArgs{\n\t\t\tName:    pulumi.String(\"My Network\"),\n\t\t\tPurpose: pulumi.String(\"corporate\"),\n\t\t\tSubnet:  pulumi.String(\"192.168.1.0/24\"),\n\t\t\tVlanId:  pulumi.Int(10),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = setting.NewIps(ctx, \"example\", \u0026setting.IpsArgs{\n\t\t\tIpsMode: pulumi.String(\"ips\"),\n\t\t\tEnabledNetworks: pulumi.StringArray{\n\t\t\t\ttest.ID(),\n\t\t\t},\n\t\t\tAdvancedFilteringPreference: pulumi.String(\"manual\"),\n\t\t\tEnabledCategories: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"emerging-dos\"),\n\t\t\t\tpulumi.String(\"emerging-exploit\"),\n\t\t\t\tpulumi.String(\"emerging-malware\"),\n\t\t\t},\n\t\t\tAdBlockedNetworks: pulumi.StringArray{\n\t\t\t\ttest.ID(),\n\t\t\t},\n\t\t\tHoneypots: setting.IpsHoneypotArray{\n\t\t\t\t\u0026setting.IpsHoneypotArgs{\n\t\t\t\t\tIpAddress: pulumi.String(\"192.168.1.10\"),\n\t\t\t\t\tNetworkId: test.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDnsFilters: setting.IpsDnsFilterArray{\n\t\t\t\t\u0026setting.IpsDnsFilterArgs{\n\t\t\t\t\tName:        pulumi.String(\"Work Filter\"),\n\t\t\t\t\tFilter:      pulumi.String(\"work\"),\n\t\t\t\t\tDescription: pulumi.String(\"Block non-work related sites\"),\n\t\t\t\t\tAllowedSites: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"example.com\"),\n\t\t\t\t\t\tpulumi.String(\"company.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tBlockedSites: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"gaming.example.com\"),\n\t\t\t\t\t\tpulumi.String(\"social.example.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tBlockedTld: []string{\n\t\t\t\t\t\t\"xyz\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.Network;\nimport com.pulumiverse.unifi.NetworkArgs;\nimport com.pulumiverse.unifi.setting.Ips;\nimport com.pulumiverse.unifi.setting.IpsArgs;\nimport com.pulumi.unifi.setting.inputs.IpsHoneypotArgs;\nimport com.pulumi.unifi.setting.inputs.IpsDnsFilterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Network(\"test\", NetworkArgs.builder()\n            .name(\"My Network\")\n            .purpose(\"corporate\")\n            .subnet(\"192.168.1.0/24\")\n            .vlanId(10)\n            .build());\n\n        var example = new Ips(\"example\", IpsArgs.builder()\n            .ipsMode(\"ips\")\n            .enabledNetworks(test.id())\n            .advancedFilteringPreference(\"manual\")\n            .enabledCategories(            \n                \"emerging-dos\",\n                \"emerging-exploit\",\n                \"emerging-malware\")\n            .adBlockedNetworks(test.id())\n            .honeypots(IpsHoneypotArgs.builder()\n                .ipAddress(\"192.168.1.10\")\n                .networkId(test.id())\n                .build())\n            .dnsFilters(IpsDnsFilterArgs.builder()\n                .name(\"Work Filter\")\n                .filter(\"work\")\n                .description(\"Block non-work related sites\")\n                .allowedSites(                \n                    \"example.com\",\n                    \"company.com\")\n                .blockedSites(                \n                    \"gaming.example.com\",\n                    \"social.example.com\")\n                .blockedTld(List.of(\"xyz\"))\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: unifi:Network\n    properties:\n      name: My Network\n      purpose: corporate\n      subnet: 192.168.1.0/24\n      vlanId: 10\n  example:\n    type: unifi:setting:Ips\n    properties:\n      ipsMode: ips\n      enabledNetworks:\n        - ${test.id}\n      advancedFilteringPreference: manual\n      enabledCategories:\n        - emerging-dos\n        - emerging-exploit\n        - emerging-malware\n      adBlockedNetworks:\n        - ${test.id}\n      honeypots:\n        - ipAddress: 192.168.1.10\n          networkId: ${test.id}\n      dnsFilters: # Specify the site (optional, defaults to site configured in provider, otherwise \"default\")\n      #   # site = \"default\"\n        - name: Work Filter\n          filter: work\n          description: Block non-work related sites\n          allowedSites:\n            - example.com\n            - company.com\n          blockedSites:\n            - gaming.example.com\n            - social.example.com\n          blockedTld:\n            - xyz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"adBlockedNetworks":{"type":"array","items":{"type":"string"},"description":"List of network IDs to enable ad blocking for. If any networks are configured, ad blocking will be automatically enabled. Each entry should be a valid network ID from your UniFi configuration. Leave empty to disable ad blocking."},"advancedFilteringPreference":{"type":"string","description":"The advanced filtering preference for IPS. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - Advanced filtering is disabled\n  * \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e - Advanced filtering is enabled and manually configured"},"dnsFilters":{"type":"array","items":{"$ref":"#/types/unifi:setting/IpsDnsFilter:IpsDnsFilter"},"description":"DNS filters configuration. If any filters are configured, DNS filtering will be automatically enabled. Each filter can be applied to a specific network and provides content filtering capabilities."},"enabledCategories":{"type":"array","items":{"type":"string"},"description":"List of enabled IPS threat categories. Each entry enables detection and prevention for a specific type of threat. The list of valid categories includes common threats like malware, exploits, scanning, and policy violations. See the validator for the complete list of available categories."},"enabledNetworks":{"type":"array","items":{"type":"string"},"description":"List of network IDs to enable IPS protection for. Each entry should be a valid network ID from your UniFi configuration. IPS will only monitor and protect traffic on these networks."},"honeypots":{"type":"array","items":{"$ref":"#/types/unifi:setting/IpsHoneypot:IpsHoneypot"},"description":"Honeypots configuration. Honeypots are decoy systems designed to detect, deflect, or study hacking attempts. They appear as legitimate parts of the network but are isolated and monitored."},"ipsMode":{"type":"string","description":"The IPS operation mode. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`ids`\" pulumi-lang-dotnet=\"`Ids`\" pulumi-lang-go=\"`ids`\" pulumi-lang-python=\"`ids`\" pulumi-lang-yaml=\"`ids`\" pulumi-lang-java=\"`ids`\"\u003e`ids`\u003c/span\u003e - Intrusion Detection System mode (detect and log threats only)\n  * \u003cspan pulumi-lang-nodejs=\"`ips`\" pulumi-lang-dotnet=\"`Ips`\" pulumi-lang-go=\"`ips`\" pulumi-lang-python=\"`ips`\" pulumi-lang-yaml=\"`ips`\" pulumi-lang-java=\"`ips`\"\u003e`ips`\u003c/span\u003e - Intrusion Prevention System mode (detect and block threats)\n  * `ipsInline` - Inline Intrusion Prevention System mode (more aggressive blocking)\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - IPS functionality is completely disabled"},"memoryOptimized":{"type":"boolean","description":"Whether memory optimization is enabled for IPS. When set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, the system will use less memory at the cost of potentially reduced detection capabilities. Useful for devices with limited resources. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. Requires controller version 9.0 or later."},"restrictTorrents":{"type":"boolean","description":"Whether to restrict BitTorrent and other peer-to-peer file sharing traffic. When set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, the system will block P2P traffic across the network. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"suppression":{"$ref":"#/types/unifi:setting/IpsSuppression:IpsSuppression","description":"Suppression configuration for IPS. This allows you to customize which alerts are suppressed or tracked, and define whitelisted traffic that should never trigger IPS alerts."}},"required":["adBlockedNetworks","advancedFilteringPreference","dnsFilters","enabledCategories","enabledNetworks","honeypots","ipsMode","memoryOptimized","restrictTorrents","site","suppression"],"inputProperties":{"adBlockedNetworks":{"type":"array","items":{"type":"string"},"description":"List of network IDs to enable ad blocking for. If any networks are configured, ad blocking will be automatically enabled. Each entry should be a valid network ID from your UniFi configuration. Leave empty to disable ad blocking."},"advancedFilteringPreference":{"type":"string","description":"The advanced filtering preference for IPS. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - Advanced filtering is disabled\n  * \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e - Advanced filtering is enabled and manually configured"},"dnsFilters":{"type":"array","items":{"$ref":"#/types/unifi:setting/IpsDnsFilter:IpsDnsFilter"},"description":"DNS filters configuration. If any filters are configured, DNS filtering will be automatically enabled. Each filter can be applied to a specific network and provides content filtering capabilities."},"enabledCategories":{"type":"array","items":{"type":"string"},"description":"List of enabled IPS threat categories. Each entry enables detection and prevention for a specific type of threat. The list of valid categories includes common threats like malware, exploits, scanning, and policy violations. See the validator for the complete list of available categories."},"enabledNetworks":{"type":"array","items":{"type":"string"},"description":"List of network IDs to enable IPS protection for. Each entry should be a valid network ID from your UniFi configuration. IPS will only monitor and protect traffic on these networks."},"honeypots":{"type":"array","items":{"$ref":"#/types/unifi:setting/IpsHoneypot:IpsHoneypot"},"description":"Honeypots configuration. Honeypots are decoy systems designed to detect, deflect, or study hacking attempts. They appear as legitimate parts of the network but are isolated and monitored."},"ipsMode":{"type":"string","description":"The IPS operation mode. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`ids`\" pulumi-lang-dotnet=\"`Ids`\" pulumi-lang-go=\"`ids`\" pulumi-lang-python=\"`ids`\" pulumi-lang-yaml=\"`ids`\" pulumi-lang-java=\"`ids`\"\u003e`ids`\u003c/span\u003e - Intrusion Detection System mode (detect and log threats only)\n  * \u003cspan pulumi-lang-nodejs=\"`ips`\" pulumi-lang-dotnet=\"`Ips`\" pulumi-lang-go=\"`ips`\" pulumi-lang-python=\"`ips`\" pulumi-lang-yaml=\"`ips`\" pulumi-lang-java=\"`ips`\"\u003e`ips`\u003c/span\u003e - Intrusion Prevention System mode (detect and block threats)\n  * `ipsInline` - Inline Intrusion Prevention System mode (more aggressive blocking)\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - IPS functionality is completely disabled"},"memoryOptimized":{"type":"boolean","description":"Whether memory optimization is enabled for IPS. When set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, the system will use less memory at the cost of potentially reduced detection capabilities. Useful for devices with limited resources. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. Requires controller version 9.0 or later."},"restrictTorrents":{"type":"boolean","description":"Whether to restrict BitTorrent and other peer-to-peer file sharing traffic. When set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, the system will block P2P traffic across the network. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"suppression":{"$ref":"#/types/unifi:setting/IpsSuppression:IpsSuppression","description":"Suppression configuration for IPS. This allows you to customize which alerts are suppressed or tracked, and define whitelisted traffic that should never trigger IPS alerts."}},"stateInputs":{"description":"Input properties used for looking up and filtering Ips resources.\n","properties":{"adBlockedNetworks":{"type":"array","items":{"type":"string"},"description":"List of network IDs to enable ad blocking for. If any networks are configured, ad blocking will be automatically enabled. Each entry should be a valid network ID from your UniFi configuration. Leave empty to disable ad blocking."},"advancedFilteringPreference":{"type":"string","description":"The advanced filtering preference for IPS. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - Advanced filtering is disabled\n  * \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e - Advanced filtering is enabled and manually configured"},"dnsFilters":{"type":"array","items":{"$ref":"#/types/unifi:setting/IpsDnsFilter:IpsDnsFilter"},"description":"DNS filters configuration. If any filters are configured, DNS filtering will be automatically enabled. Each filter can be applied to a specific network and provides content filtering capabilities."},"enabledCategories":{"type":"array","items":{"type":"string"},"description":"List of enabled IPS threat categories. Each entry enables detection and prevention for a specific type of threat. The list of valid categories includes common threats like malware, exploits, scanning, and policy violations. See the validator for the complete list of available categories."},"enabledNetworks":{"type":"array","items":{"type":"string"},"description":"List of network IDs to enable IPS protection for. Each entry should be a valid network ID from your UniFi configuration. IPS will only monitor and protect traffic on these networks."},"honeypots":{"type":"array","items":{"$ref":"#/types/unifi:setting/IpsHoneypot:IpsHoneypot"},"description":"Honeypots configuration. Honeypots are decoy systems designed to detect, deflect, or study hacking attempts. They appear as legitimate parts of the network but are isolated and monitored."},"ipsMode":{"type":"string","description":"The IPS operation mode. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`ids`\" pulumi-lang-dotnet=\"`Ids`\" pulumi-lang-go=\"`ids`\" pulumi-lang-python=\"`ids`\" pulumi-lang-yaml=\"`ids`\" pulumi-lang-java=\"`ids`\"\u003e`ids`\u003c/span\u003e - Intrusion Detection System mode (detect and log threats only)\n  * \u003cspan pulumi-lang-nodejs=\"`ips`\" pulumi-lang-dotnet=\"`Ips`\" pulumi-lang-go=\"`ips`\" pulumi-lang-python=\"`ips`\" pulumi-lang-yaml=\"`ips`\" pulumi-lang-java=\"`ips`\"\u003e`ips`\u003c/span\u003e - Intrusion Prevention System mode (detect and block threats)\n  * `ipsInline` - Inline Intrusion Prevention System mode (more aggressive blocking)\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - IPS functionality is completely disabled"},"memoryOptimized":{"type":"boolean","description":"Whether memory optimization is enabled for IPS. When set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, the system will use less memory at the cost of potentially reduced detection capabilities. Useful for devices with limited resources. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e. Requires controller version 9.0 or later."},"restrictTorrents":{"type":"boolean","description":"Whether to restrict BitTorrent and other peer-to-peer file sharing traffic. When set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e, the system will block P2P traffic across the network. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"suppression":{"$ref":"#/types/unifi:setting/IpsSuppression:IpsSuppression","description":"Suppression configuration for IPS. This allows you to customize which alerts are suppressed or tracked, and define whitelisted traffic that should never trigger IPS alerts."}},"type":"object"}},"unifi:setting/lcdMonitor:LcdMonitor":{"description":"Manages LCD Monitor (LCM) settings for UniFi devices with built-in displays, such as the UniFi Dream Machine Pro (UDM Pro) and UniFi Network Video Recorder (UNVR).\n","properties":{"brightness":{"type":"integer","description":"The brightness level of the LCD display. Valid values are 1-100.\n"},"enabled":{"type":"boolean","description":"Whether the LCD display is enabled.\n"},"idleTimeout":{"type":"integer","description":"The time in seconds after which the display turns off when idle. Valid values are 10-3600.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"sync":{"type":"boolean","description":"Whether to synchronize display settings across multiple devices.\n"},"touchEvent":{"type":"boolean","description":"Whether touch interactions with the display are enabled.\n"}},"required":["enabled","site"],"inputProperties":{"brightness":{"type":"integer","description":"The brightness level of the LCD display. Valid values are 1-100.\n"},"enabled":{"type":"boolean","description":"Whether the LCD display is enabled.\n"},"idleTimeout":{"type":"integer","description":"The time in seconds after which the display turns off when idle. Valid values are 10-3600.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"sync":{"type":"boolean","description":"Whether to synchronize display settings across multiple devices.\n"},"touchEvent":{"type":"boolean","description":"Whether touch interactions with the display are enabled.\n"}},"requiredInputs":["enabled"],"stateInputs":{"description":"Input properties used for looking up and filtering LcdMonitor resources.\n","properties":{"brightness":{"type":"integer","description":"The brightness level of the LCD display. Valid values are 1-100.\n"},"enabled":{"type":"boolean","description":"Whether the LCD display is enabled.\n"},"idleTimeout":{"type":"integer","description":"The time in seconds after which the display turns off when idle. Valid values are 10-3600.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"sync":{"type":"boolean","description":"Whether to synchronize display settings across multiple devices.\n"},"touchEvent":{"type":"boolean","description":"Whether touch interactions with the display are enabled.\n"}},"type":"object"}},"unifi:setting/locale:Locale":{"description":"Manages locale settings for a UniFi site.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.Locale(\"example\", {timezone: \"America/New_York\"});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.Locale(\"example\", timezone=\"America/New_York\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.Locale(\"example\", new()\n    {\n        Timezone = \"America/New_York\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewLocale(ctx, \"example\", \u0026setting.LocaleArgs{\n\t\t\tTimezone: pulumi.String(\"America/New_York\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.Locale;\nimport com.pulumiverse.unifi.setting.LocaleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new Locale(\"example\", LocaleArgs.builder()\n            .timezone(\"America/New_York\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:Locale\n    properties:\n      timezone: America/New_York\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"timezone":{"type":"string","description":"Timezone for the UniFi controller, e.g., `America/Los_Angeles`\n"}},"required":["site","timezone"],"inputProperties":{"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"timezone":{"type":"string","description":"Timezone for the UniFi controller, e.g., `America/Los_Angeles`\n"}},"requiredInputs":["timezone"],"stateInputs":{"description":"Input properties used for looking up and filtering Locale resources.\n","properties":{"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"timezone":{"type":"string","description":"Timezone for the UniFi controller, e.g., `America/Los_Angeles`\n"}},"type":"object"}},"unifi:setting/magicSiteToSiteVpn:MagicSiteToSiteVpn":{"description":"Manages Magic Site to Site VPN settings for a UniFi site.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.MagicSiteToSiteVpn(\"example\", {enabled: true});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.MagicSiteToSiteVpn(\"example\", enabled=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.MagicSiteToSiteVpn(\"example\", new()\n    {\n        Enabled = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewMagicSiteToSiteVpn(ctx, \"example\", \u0026setting.MagicSiteToSiteVpnArgs{\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.MagicSiteToSiteVpn;\nimport com.pulumiverse.unifi.setting.MagicSiteToSiteVpnArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new MagicSiteToSiteVpn(\"example\", MagicSiteToSiteVpnArgs.builder()\n            .enabled(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:MagicSiteToSiteVpn\n    properties:\n      enabled: true # Specify the site (optional, defaults to site configured in provider, otherwise \"default\")\n      #   # site = \"default\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"enabled":{"type":"boolean","description":"Whether the Magic Site to Site VPN is enabled.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"required":["enabled","site"],"inputProperties":{"enabled":{"type":"boolean","description":"Whether the Magic Site to Site VPN is enabled.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"requiredInputs":["enabled"],"stateInputs":{"description":"Input properties used for looking up and filtering MagicSiteToSiteVpn resources.\n","properties":{"enabled":{"type":"boolean","description":"Whether the Magic Site to Site VPN is enabled.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"type":"object"}},"unifi:setting/mgmt:Mgmt":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.setting.Mgmt`\" pulumi-lang-dotnet=\"`unifi.setting.Mgmt`\" pulumi-lang-go=\"`setting.Mgmt`\" pulumi-lang-python=\"`setting.Mgmt`\" pulumi-lang-yaml=\"`unifi.setting.Mgmt`\" pulumi-lang-java=\"`unifi.setting.Mgmt`\"\u003e`unifi.setting.Mgmt`\u003c/span\u003e resource manages site-wide management settings in the UniFi controller.\n\nThis resource allows you to configure important management features including:\n  * Automatic firmware upgrades for UniFi devices\n  * SSH access for advanced configuration and troubleshooting\n  * SSH key management for secure remote access\n\nThese settings affect how the UniFi controller manages devices at the site level. They are particularly important for:\n  * Maintaining device security through automatic updates\n  * Enabling secure remote administration\n  * Implementing SSH key-based authentication\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.Site(\"example\", {description: \"example\"});\nconst exampleMgmt = new unifi.setting.Mgmt(\"example\", {\n    site: example.name,\n    autoUpgrade: true,\n    autoUpgradeHour: 3,\n    advancedFeatureEnabled: true,\n    alertEnabled: true,\n    bootSound: false,\n    debugToolsEnabled: true,\n    directConnectEnabled: false,\n    ledEnabled: true,\n    outdoorModeEnabled: false,\n    unifiIdpEnabled: false,\n    wifimanEnabled: true,\n    sshEnabled: true,\n    sshAuthPasswordEnabled: true,\n    sshBindWildcard: false,\n    sshUsername: \"admin\",\n    sshKeys: [{\n        name: \"Admin Key\",\n        type: \"ssh-rsa\",\n        key: \"AAAAB3NzaC1yc2EAAAADAQABAAABAQCxxx...\",\n        comment: \"admin@example.com\",\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.Site(\"example\", description=\"example\")\nexample_mgmt = unifi.setting.Mgmt(\"example\",\n    site=example.name,\n    auto_upgrade=True,\n    auto_upgrade_hour=3,\n    advanced_feature_enabled=True,\n    alert_enabled=True,\n    boot_sound=False,\n    debug_tools_enabled=True,\n    direct_connect_enabled=False,\n    led_enabled=True,\n    outdoor_mode_enabled=False,\n    unifi_idp_enabled=False,\n    wifiman_enabled=True,\n    ssh_enabled=True,\n    ssh_auth_password_enabled=True,\n    ssh_bind_wildcard=False,\n    ssh_username=\"admin\",\n    ssh_keys=[{\n        \"name\": \"Admin Key\",\n        \"type\": \"ssh-rsa\",\n        \"key\": \"AAAAB3NzaC1yc2EAAAADAQABAAABAQCxxx...\",\n        \"comment\": \"admin@example.com\",\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Site(\"example\", new()\n    {\n        Description = \"example\",\n    });\n\n    var exampleMgmt = new Unifi.Setting.Mgmt(\"example\", new()\n    {\n        Site = example.Name,\n        AutoUpgrade = true,\n        AutoUpgradeHour = 3,\n        AdvancedFeatureEnabled = true,\n        AlertEnabled = true,\n        BootSound = false,\n        DebugToolsEnabled = true,\n        DirectConnectEnabled = false,\n        LedEnabled = true,\n        OutdoorModeEnabled = false,\n        UnifiIdpEnabled = false,\n        WifimanEnabled = true,\n        SshEnabled = true,\n        SshAuthPasswordEnabled = true,\n        SshBindWildcard = false,\n        SshUsername = \"admin\",\n        SshKeys = new[]\n        {\n            new Unifi.Setting.Inputs.MgmtSshKeyArgs\n            {\n                Name = \"Admin Key\",\n                Type = \"ssh-rsa\",\n                Key = \"AAAAB3NzaC1yc2EAAAADAQABAAABAQCxxx...\",\n                Comment = \"admin@example.com\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := unifi.NewSite(ctx, \"example\", \u0026unifi.SiteArgs{\n\t\t\tDescription: pulumi.String(\"example\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = setting.NewMgmt(ctx, \"example\", \u0026setting.MgmtArgs{\n\t\t\tSite:                   example.Name,\n\t\t\tAutoUpgrade:            pulumi.Bool(true),\n\t\t\tAutoUpgradeHour:        pulumi.Int(3),\n\t\t\tAdvancedFeatureEnabled: pulumi.Bool(true),\n\t\t\tAlertEnabled:           pulumi.Bool(true),\n\t\t\tBootSound:              pulumi.Bool(false),\n\t\t\tDebugToolsEnabled:      pulumi.Bool(true),\n\t\t\tDirectConnectEnabled:   pulumi.Bool(false),\n\t\t\tLedEnabled:             pulumi.Bool(true),\n\t\t\tOutdoorModeEnabled:     pulumi.Bool(false),\n\t\t\tUnifiIdpEnabled:        pulumi.Bool(false),\n\t\t\tWifimanEnabled:         pulumi.Bool(true),\n\t\t\tSshEnabled:             pulumi.Bool(true),\n\t\t\tSshAuthPasswordEnabled: pulumi.Bool(true),\n\t\t\tSshBindWildcard:        pulumi.Bool(false),\n\t\t\tSshUsername:            pulumi.String(\"admin\"),\n\t\t\tSshKeys: setting.MgmtSshKeyArray{\n\t\t\t\t\u0026setting.MgmtSshKeyArgs{\n\t\t\t\t\tName:    pulumi.String(\"Admin Key\"),\n\t\t\t\t\tType:    pulumi.String(\"ssh-rsa\"),\n\t\t\t\t\tKey:     pulumi.String(\"AAAAB3NzaC1yc2EAAAADAQABAAABAQCxxx...\"),\n\t\t\t\t\tComment: pulumi.String(\"admin@example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.Site;\nimport com.pulumiverse.unifi.SiteArgs;\nimport com.pulumiverse.unifi.setting.Mgmt;\nimport com.pulumiverse.unifi.setting.MgmtArgs;\nimport com.pulumi.unifi.setting.inputs.MgmtSshKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new Site(\"example\", SiteArgs.builder()\n            .description(\"example\")\n            .build());\n\n        var exampleMgmt = new Mgmt(\"exampleMgmt\", MgmtArgs.builder()\n            .site(example.name())\n            .autoUpgrade(true)\n            .autoUpgradeHour(3)\n            .advancedFeatureEnabled(true)\n            .alertEnabled(true)\n            .bootSound(false)\n            .debugToolsEnabled(true)\n            .directConnectEnabled(false)\n            .ledEnabled(true)\n            .outdoorModeEnabled(false)\n            .unifiIdpEnabled(false)\n            .wifimanEnabled(true)\n            .sshEnabled(true)\n            .sshAuthPasswordEnabled(true)\n            .sshBindWildcard(false)\n            .sshUsername(\"admin\")\n            .sshKeys(MgmtSshKeyArgs.builder()\n                .name(\"Admin Key\")\n                .type(\"ssh-rsa\")\n                .key(\"AAAAB3NzaC1yc2EAAAADAQABAAABAQCxxx...\")\n                .comment(\"admin@example.com\")\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:Site\n    properties:\n      description: example\n  exampleMgmt:\n    type: unifi:setting:Mgmt\n    name: example\n    properties:\n      site: ${example.name}\n      autoUpgrade: true\n      autoUpgradeHour: 3 # Device management settings\n      advancedFeatureEnabled: true\n      alertEnabled: true\n      bootSound: false\n      debugToolsEnabled: true\n      directConnectEnabled: false\n      ledEnabled: true\n      outdoorModeEnabled: false\n      unifiIdpEnabled: false\n      wifimanEnabled: true # SSH access configuration\n      sshEnabled: true\n      sshAuthPasswordEnabled: true\n      sshBindWildcard: false\n      sshUsername: admin\n      sshKeys:\n        - name: Admin Key\n          type: ssh-rsa\n          key: AAAAB3NzaC1yc2EAAAADAQABAAABAQCxxx...\n          comment: admin@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"advancedFeatureEnabled":{"type":"boolean","description":"Enable advanced features for UniFi devices at this site."},"alertEnabled":{"type":"boolean","description":"Enable alerts for UniFi devices at this site."},"autoUpgrade":{"type":"boolean","description":"Enable automatic firmware upgrades for all UniFi devices at this site. When enabled, devices will automatically update to the latest stable firmware version approved for your controller version."},"autoUpgradeHour":{"type":"integer","description":"The hour of the day (0-23) when automatic firmware upgrades will occur."},"bootSound":{"type":"boolean","description":"Enable the boot sound for UniFi devices at this site."},"debugToolsEnabled":{"type":"boolean","description":"Enable debug tools for UniFi devices at this site. Requires controller version 7.3 or later."},"directConnectEnabled":{"type":"boolean","description":"Enable direct connect for UniFi devices at this site."},"ledEnabled":{"type":"boolean","description":"Enable the LED light for UniFi devices at this site."},"outdoorModeEnabled":{"type":"boolean","description":"Enable outdoor mode for UniFi devices at this site."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"sshAuthPasswordEnabled":{"type":"boolean","description":"Enable SSH password authentication for UniFi devices at this site."},"sshBindWildcard":{"type":"boolean","description":"Enable SSH bind wildcard for UniFi devices at this site."},"sshEnabled":{"type":"boolean","description":"Enable SSH access to UniFi devices at this site. When enabled, you can connect to devices using SSH for advanced configuration and troubleshooting. It's recommended to only enable this temporarily when needed."},"sshKeys":{"type":"array","items":{"$ref":"#/types/unifi:setting/MgmtSshKey:MgmtSshKey"},"description":"List of SSH public keys that are allowed to connect to UniFi devices when SSH is enabled. Using SSH keys is more secure than password authentication."},"sshPassword":{"type":"string","description":"The SSH password for UniFi devices at this site.","secret":true},"sshUsername":{"type":"string","description":"The SSH username for UniFi devices at this site."},"unifiIdpEnabled":{"type":"boolean","description":"Enable UniFi IDP for UniFi devices at this site."},"wifimanEnabled":{"type":"boolean","description":"Enable WiFiman for UniFi devices at this site."}},"required":["advancedFeatureEnabled","alertEnabled","autoUpgrade","autoUpgradeHour","bootSound","debugToolsEnabled","directConnectEnabled","ledEnabled","outdoorModeEnabled","site","sshAuthPasswordEnabled","sshBindWildcard","sshEnabled","sshPassword","sshUsername","unifiIdpEnabled","wifimanEnabled"],"inputProperties":{"advancedFeatureEnabled":{"type":"boolean","description":"Enable advanced features for UniFi devices at this site."},"alertEnabled":{"type":"boolean","description":"Enable alerts for UniFi devices at this site."},"autoUpgrade":{"type":"boolean","description":"Enable automatic firmware upgrades for all UniFi devices at this site. When enabled, devices will automatically update to the latest stable firmware version approved for your controller version."},"autoUpgradeHour":{"type":"integer","description":"The hour of the day (0-23) when automatic firmware upgrades will occur."},"bootSound":{"type":"boolean","description":"Enable the boot sound for UniFi devices at this site."},"debugToolsEnabled":{"type":"boolean","description":"Enable debug tools for UniFi devices at this site. Requires controller version 7.3 or later."},"directConnectEnabled":{"type":"boolean","description":"Enable direct connect for UniFi devices at this site."},"ledEnabled":{"type":"boolean","description":"Enable the LED light for UniFi devices at this site."},"outdoorModeEnabled":{"type":"boolean","description":"Enable outdoor mode for UniFi devices at this site."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"sshAuthPasswordEnabled":{"type":"boolean","description":"Enable SSH password authentication for UniFi devices at this site."},"sshBindWildcard":{"type":"boolean","description":"Enable SSH bind wildcard for UniFi devices at this site."},"sshEnabled":{"type":"boolean","description":"Enable SSH access to UniFi devices at this site. When enabled, you can connect to devices using SSH for advanced configuration and troubleshooting. It's recommended to only enable this temporarily when needed."},"sshKeys":{"type":"array","items":{"$ref":"#/types/unifi:setting/MgmtSshKey:MgmtSshKey"},"description":"List of SSH public keys that are allowed to connect to UniFi devices when SSH is enabled. Using SSH keys is more secure than password authentication."},"sshPassword":{"type":"string","description":"The SSH password for UniFi devices at this site.","secret":true},"sshUsername":{"type":"string","description":"The SSH username for UniFi devices at this site."},"unifiIdpEnabled":{"type":"boolean","description":"Enable UniFi IDP for UniFi devices at this site."},"wifimanEnabled":{"type":"boolean","description":"Enable WiFiman for UniFi devices at this site."}},"stateInputs":{"description":"Input properties used for looking up and filtering Mgmt resources.\n","properties":{"advancedFeatureEnabled":{"type":"boolean","description":"Enable advanced features for UniFi devices at this site."},"alertEnabled":{"type":"boolean","description":"Enable alerts for UniFi devices at this site."},"autoUpgrade":{"type":"boolean","description":"Enable automatic firmware upgrades for all UniFi devices at this site. When enabled, devices will automatically update to the latest stable firmware version approved for your controller version."},"autoUpgradeHour":{"type":"integer","description":"The hour of the day (0-23) when automatic firmware upgrades will occur."},"bootSound":{"type":"boolean","description":"Enable the boot sound for UniFi devices at this site."},"debugToolsEnabled":{"type":"boolean","description":"Enable debug tools for UniFi devices at this site. Requires controller version 7.3 or later."},"directConnectEnabled":{"type":"boolean","description":"Enable direct connect for UniFi devices at this site."},"ledEnabled":{"type":"boolean","description":"Enable the LED light for UniFi devices at this site."},"outdoorModeEnabled":{"type":"boolean","description":"Enable outdoor mode for UniFi devices at this site."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"sshAuthPasswordEnabled":{"type":"boolean","description":"Enable SSH password authentication for UniFi devices at this site."},"sshBindWildcard":{"type":"boolean","description":"Enable SSH bind wildcard for UniFi devices at this site."},"sshEnabled":{"type":"boolean","description":"Enable SSH access to UniFi devices at this site. When enabled, you can connect to devices using SSH for advanced configuration and troubleshooting. It's recommended to only enable this temporarily when needed."},"sshKeys":{"type":"array","items":{"$ref":"#/types/unifi:setting/MgmtSshKey:MgmtSshKey"},"description":"List of SSH public keys that are allowed to connect to UniFi devices when SSH is enabled. Using SSH keys is more secure than password authentication."},"sshPassword":{"type":"string","description":"The SSH password for UniFi devices at this site.","secret":true},"sshUsername":{"type":"string","description":"The SSH username for UniFi devices at this site."},"unifiIdpEnabled":{"type":"boolean","description":"Enable UniFi IDP for UniFi devices at this site."},"wifimanEnabled":{"type":"boolean","description":"Enable WiFiman for UniFi devices at this site."}},"type":"object"}},"unifi:setting/networkOptimization:NetworkOptimization":{"description":"Manages Network Optimization settings for a UniFi site. UniFi network optimization is a feature designed to automatically enhance the performance of a UniFi network by making automatic adjustments to various settings such as channel selection, transmit power, or frequency usage\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.NetworkOptimization(\"example\", {enabled: true});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.NetworkOptimization(\"example\", enabled=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.NetworkOptimization(\"example\", new()\n    {\n        Enabled = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewNetworkOptimization(ctx, \"example\", \u0026setting.NetworkOptimizationArgs{\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.NetworkOptimization;\nimport com.pulumiverse.unifi.setting.NetworkOptimizationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new NetworkOptimization(\"example\", NetworkOptimizationArgs.builder()\n            .enabled(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:NetworkOptimization\n    properties:\n      enabled: true # Specify the site (optional, defaults to site configured in provider, otherwise \"default\")\n      #   # site = \"default\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"enabled":{"type":"boolean","description":"Whether the Network Optimization is enabled.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"required":["enabled","site"],"inputProperties":{"enabled":{"type":"boolean","description":"Whether the Network Optimization is enabled.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"requiredInputs":["enabled"],"stateInputs":{"description":"Input properties used for looking up and filtering NetworkOptimization resources.\n","properties":{"enabled":{"type":"boolean","description":"Whether the Network Optimization is enabled.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"type":"object"}},"unifi:setting/ntp:Ntp":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.setting.Ntp`\" pulumi-lang-dotnet=\"`unifi.setting.Ntp`\" pulumi-lang-go=\"`setting.Ntp`\" pulumi-lang-python=\"`setting.Ntp`\" pulumi-lang-yaml=\"`unifi.setting.Ntp`\" pulumi-lang-java=\"`unifi.setting.Ntp`\"\u003e`unifi.setting.Ntp`\u003c/span\u003e resource allows you to configure Network Time Protocol (NTP) server settings for your UniFi network.\n\nNTP servers provide time synchronization for your network devices. This resource supports both automatic and manual NTP configuration modes.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.Ntp(\"example\", {\n    mode: \"manual\",\n    ntpServer1: \"time.cloudflare.com\",\n    ntpServer2: \"pool.ntp.org\",\n    ntpServer3: \"time.google.com\",\n    ntpServer4: \"0.pool.ntp.org\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.Ntp(\"example\",\n    mode=\"manual\",\n    ntp_server1=\"time.cloudflare.com\",\n    ntp_server2=\"pool.ntp.org\",\n    ntp_server3=\"time.google.com\",\n    ntp_server4=\"0.pool.ntp.org\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.Ntp(\"example\", new()\n    {\n        Mode = \"manual\",\n        NtpServer1 = \"time.cloudflare.com\",\n        NtpServer2 = \"pool.ntp.org\",\n        NtpServer3 = \"time.google.com\",\n        NtpServer4 = \"0.pool.ntp.org\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewNtp(ctx, \"example\", \u0026setting.NtpArgs{\n\t\t\tMode:       pulumi.String(\"manual\"),\n\t\t\tNtpServer1: pulumi.String(\"time.cloudflare.com\"),\n\t\t\tNtpServer2: pulumi.String(\"pool.ntp.org\"),\n\t\t\tNtpServer3: pulumi.String(\"time.google.com\"),\n\t\t\tNtpServer4: pulumi.String(\"0.pool.ntp.org\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.Ntp;\nimport com.pulumiverse.unifi.setting.NtpArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new Ntp(\"example\", NtpArgs.builder()\n            .mode(\"manual\")\n            .ntpServer1(\"time.cloudflare.com\")\n            .ntpServer2(\"pool.ntp.org\")\n            .ntpServer3(\"time.google.com\")\n            .ntpServer4(\"0.pool.ntp.org\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:Ntp\n    properties:\n      mode: manual\n      ntpServer1: time.cloudflare.com\n      ntpServer2: pool.ntp.org\n      ntpServer3: time.google.com\n      ntpServer4: 0.pool.ntp.org\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"mode":{"type":"string","description":"NTP server configuration mode. Valid values are:\n"},"ntpServer1":{"type":"string","description":"Primary NTP server hostname or IP address. Must be a valid hostname (e.g., `pool.ntp.org`) or IPv4 address. Only applicable when \u003cspan pulumi-lang-nodejs=\"`mode`\" pulumi-lang-dotnet=\"`Mode`\" pulumi-lang-go=\"`mode`\" pulumi-lang-python=\"`mode`\" pulumi-lang-yaml=\"`mode`\" pulumi-lang-java=\"`mode`\"\u003e`mode`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"ntpServer2":{"type":"string","description":"Secondary NTP server hostname or IP address. Must be a valid hostname (e.g., `time.google.com`) or IPv4 address. Only applicable when \u003cspan pulumi-lang-nodejs=\"`mode`\" pulumi-lang-dotnet=\"`Mode`\" pulumi-lang-go=\"`mode`\" pulumi-lang-python=\"`mode`\" pulumi-lang-yaml=\"`mode`\" pulumi-lang-java=\"`mode`\"\u003e`mode`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"ntpServer3":{"type":"string","description":"Tertiary NTP server hostname or IP address. Must be a valid hostname or IPv4 address. Only applicable when \u003cspan pulumi-lang-nodejs=\"`mode`\" pulumi-lang-dotnet=\"`Mode`\" pulumi-lang-go=\"`mode`\" pulumi-lang-python=\"`mode`\" pulumi-lang-yaml=\"`mode`\" pulumi-lang-java=\"`mode`\"\u003e`mode`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"ntpServer4":{"type":"string","description":"Quaternary NTP server hostname or IP address. Must be a valid hostname or IPv4 address. Only applicable when \u003cspan pulumi-lang-nodejs=\"`mode`\" pulumi-lang-dotnet=\"`Mode`\" pulumi-lang-go=\"`mode`\" pulumi-lang-python=\"`mode`\" pulumi-lang-yaml=\"`mode`\" pulumi-lang-java=\"`mode`\"\u003e`mode`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."}},"required":["mode","ntpServer1","ntpServer2","ntpServer3","ntpServer4","site"],"inputProperties":{"mode":{"type":"string","description":"NTP server configuration mode. Valid values are:\n"},"ntpServer1":{"type":"string","description":"Primary NTP server hostname or IP address. Must be a valid hostname (e.g., `pool.ntp.org`) or IPv4 address. Only applicable when \u003cspan pulumi-lang-nodejs=\"`mode`\" pulumi-lang-dotnet=\"`Mode`\" pulumi-lang-go=\"`mode`\" pulumi-lang-python=\"`mode`\" pulumi-lang-yaml=\"`mode`\" pulumi-lang-java=\"`mode`\"\u003e`mode`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"ntpServer2":{"type":"string","description":"Secondary NTP server hostname or IP address. Must be a valid hostname (e.g., `time.google.com`) or IPv4 address. Only applicable when \u003cspan pulumi-lang-nodejs=\"`mode`\" pulumi-lang-dotnet=\"`Mode`\" pulumi-lang-go=\"`mode`\" pulumi-lang-python=\"`mode`\" pulumi-lang-yaml=\"`mode`\" pulumi-lang-java=\"`mode`\"\u003e`mode`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"ntpServer3":{"type":"string","description":"Tertiary NTP server hostname or IP address. Must be a valid hostname or IPv4 address. Only applicable when \u003cspan pulumi-lang-nodejs=\"`mode`\" pulumi-lang-dotnet=\"`Mode`\" pulumi-lang-go=\"`mode`\" pulumi-lang-python=\"`mode`\" pulumi-lang-yaml=\"`mode`\" pulumi-lang-java=\"`mode`\"\u003e`mode`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"ntpServer4":{"type":"string","description":"Quaternary NTP server hostname or IP address. Must be a valid hostname or IPv4 address. Only applicable when \u003cspan pulumi-lang-nodejs=\"`mode`\" pulumi-lang-dotnet=\"`Mode`\" pulumi-lang-go=\"`mode`\" pulumi-lang-python=\"`mode`\" pulumi-lang-yaml=\"`mode`\" pulumi-lang-java=\"`mode`\"\u003e`mode`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."}},"stateInputs":{"description":"Input properties used for looking up and filtering Ntp resources.\n","properties":{"mode":{"type":"string","description":"NTP server configuration mode. Valid values are:\n"},"ntpServer1":{"type":"string","description":"Primary NTP server hostname or IP address. Must be a valid hostname (e.g., `pool.ntp.org`) or IPv4 address. Only applicable when \u003cspan pulumi-lang-nodejs=\"`mode`\" pulumi-lang-dotnet=\"`Mode`\" pulumi-lang-go=\"`mode`\" pulumi-lang-python=\"`mode`\" pulumi-lang-yaml=\"`mode`\" pulumi-lang-java=\"`mode`\"\u003e`mode`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"ntpServer2":{"type":"string","description":"Secondary NTP server hostname or IP address. Must be a valid hostname (e.g., `time.google.com`) or IPv4 address. Only applicable when \u003cspan pulumi-lang-nodejs=\"`mode`\" pulumi-lang-dotnet=\"`Mode`\" pulumi-lang-go=\"`mode`\" pulumi-lang-python=\"`mode`\" pulumi-lang-yaml=\"`mode`\" pulumi-lang-java=\"`mode`\"\u003e`mode`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"ntpServer3":{"type":"string","description":"Tertiary NTP server hostname or IP address. Must be a valid hostname or IPv4 address. Only applicable when \u003cspan pulumi-lang-nodejs=\"`mode`\" pulumi-lang-dotnet=\"`Mode`\" pulumi-lang-go=\"`mode`\" pulumi-lang-python=\"`mode`\" pulumi-lang-yaml=\"`mode`\" pulumi-lang-java=\"`mode`\"\u003e`mode`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"ntpServer4":{"type":"string","description":"Quaternary NTP server hostname or IP address. Must be a valid hostname or IPv4 address. Only applicable when \u003cspan pulumi-lang-nodejs=\"`mode`\" pulumi-lang-dotnet=\"`Mode`\" pulumi-lang-go=\"`mode`\" pulumi-lang-python=\"`mode`\" pulumi-lang-yaml=\"`mode`\" pulumi-lang-java=\"`mode`\"\u003e`mode`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."}},"type":"object"}},"unifi:setting/radius:Radius":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.setting.Radius`\" pulumi-lang-dotnet=\"`unifi.setting.Radius`\" pulumi-lang-go=\"`setting.Radius`\" pulumi-lang-python=\"`setting.Radius`\" pulumi-lang-yaml=\"`unifi.setting.Radius`\" pulumi-lang-java=\"`unifi.setting.Radius`\"\u003e`unifi.setting.Radius`\u003c/span\u003e resource manages the built-in RADIUS server configuration in the UniFi controller.\n\nThis resource allows you to configure:\n  * Authentication settings for network access control\n  * Accounting settings for tracking user sessions\n  * Security features like tunneled replies\n\nThe RADIUS server is commonly used for:\n  * Enterprise WPA2/WPA3-Enterprise wireless networks\n  * 802.1X port-based network access control\n  * Centralized user authentication and accounting\n\nWhen enabled, the RADIUS server can authenticate clients using the UniFi user database or external authentication sources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.Radius(\"example\", {\n    enabled: true,\n    secret: \"your-secure-secret\",\n    accountingEnabled: true,\n    authPort: 1812,\n    accountingPort: 1813,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.Radius(\"example\",\n    enabled=True,\n    secret=\"your-secure-secret\",\n    accounting_enabled=True,\n    auth_port=1812,\n    accounting_port=1813)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.Radius(\"example\", new()\n    {\n        Enabled = true,\n        Secret = \"your-secure-secret\",\n        AccountingEnabled = true,\n        AuthPort = 1812,\n        AccountingPort = 1813,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewRadius(ctx, \"example\", \u0026setting.RadiusArgs{\n\t\t\tEnabled:           pulumi.Bool(true),\n\t\t\tSecret:            pulumi.String(\"your-secure-secret\"),\n\t\t\tAccountingEnabled: pulumi.Bool(true),\n\t\t\tAuthPort:          pulumi.Int(1812),\n\t\t\tAccountingPort:    pulumi.Int(1813),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.Radius;\nimport com.pulumiverse.unifi.setting.RadiusArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new Radius(\"example\", RadiusArgs.builder()\n            .enabled(true)\n            .secret(\"your-secure-secret\")\n            .accountingEnabled(true)\n            .authPort(1812)\n            .accountingPort(1813)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:Radius\n    properties:\n      enabled: true # RADIUS server secret\n      secret: your-secure-secret\n      accountingEnabled: true # Optional: Configure custom ports\n      authPort: 1812\n      accountingPort: 1813 # Specify the site (optional, defaults to site configured in provider, otherwise \"default\")\n      #   # site = \"default\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"accountingEnabled":{"type":"boolean","description":"Enable RADIUS accounting to track user sessions, including connection time, data usage, and other metrics. This information can be useful for billing, capacity planning, and security auditing. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"accountingPort":{"type":"integer","description":"The UDP port number for RADIUS accounting communications. The standard port is 1813. Only change this if you need to avoid port conflicts or match specific network requirements. Defaults to \u003cspan pulumi-lang-nodejs=\"`1813`\" pulumi-lang-dotnet=\"`1813`\" pulumi-lang-go=\"`1813`\" pulumi-lang-python=\"`1813`\" pulumi-lang-yaml=\"`1813`\" pulumi-lang-java=\"`1813`\"\u003e`1813`\u003c/span\u003e.\n"},"authPort":{"type":"integer","description":"The UDP port number for RADIUS authentication communications. The standard port is 1812. Only change this if you need to avoid port conflicts or match specific network requirements. Defaults to \u003cspan pulumi-lang-nodejs=\"`1812`\" pulumi-lang-dotnet=\"`1812`\" pulumi-lang-go=\"`1812`\" pulumi-lang-python=\"`1812`\" pulumi-lang-yaml=\"`1812`\" pulumi-lang-java=\"`1812`\"\u003e`1812`\u003c/span\u003e.\n"},"enabled":{"type":"boolean","description":"Enable or disable the built-in RADIUS server. When disabled, no RADIUS authentication or accounting services will be provided, affecting any network services that rely on RADIUS (like WPA2-Enterprise networks). Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"interimUpdateInterval":{"type":"integer","description":"The interval (in seconds) at which the RADIUS server collects and updates statistics from connected clients. Default is 3600 seconds (1 hour). Lower values provide more frequent updates but increase server load. Defaults to \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e.\n"},"secret":{"type":"string","description":"The shared secret passphrase used to authenticate RADIUS clients (like wireless access points) with the RADIUS server. This should be a strong, random string known only to the server and its clients. Defaults to ``.\n","secret":true},"site":{"type":"string","description":"The name of the UniFi site where these RADIUS settings should be applied. If not specified, the default site will be used.\n"},"tunneledReply":{"type":"boolean","description":"Enable encrypted communication between the RADIUS server and clients using RADIUS tunneling. This adds an extra layer of security by protecting RADIUS attributes in transit. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"}},"required":["site"],"inputProperties":{"accountingEnabled":{"type":"boolean","description":"Enable RADIUS accounting to track user sessions, including connection time, data usage, and other metrics. This information can be useful for billing, capacity planning, and security auditing. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"accountingPort":{"type":"integer","description":"The UDP port number for RADIUS accounting communications. The standard port is 1813. Only change this if you need to avoid port conflicts or match specific network requirements. Defaults to \u003cspan pulumi-lang-nodejs=\"`1813`\" pulumi-lang-dotnet=\"`1813`\" pulumi-lang-go=\"`1813`\" pulumi-lang-python=\"`1813`\" pulumi-lang-yaml=\"`1813`\" pulumi-lang-java=\"`1813`\"\u003e`1813`\u003c/span\u003e.\n"},"authPort":{"type":"integer","description":"The UDP port number for RADIUS authentication communications. The standard port is 1812. Only change this if you need to avoid port conflicts or match specific network requirements. Defaults to \u003cspan pulumi-lang-nodejs=\"`1812`\" pulumi-lang-dotnet=\"`1812`\" pulumi-lang-go=\"`1812`\" pulumi-lang-python=\"`1812`\" pulumi-lang-yaml=\"`1812`\" pulumi-lang-java=\"`1812`\"\u003e`1812`\u003c/span\u003e.\n"},"enabled":{"type":"boolean","description":"Enable or disable the built-in RADIUS server. When disabled, no RADIUS authentication or accounting services will be provided, affecting any network services that rely on RADIUS (like WPA2-Enterprise networks). Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"interimUpdateInterval":{"type":"integer","description":"The interval (in seconds) at which the RADIUS server collects and updates statistics from connected clients. Default is 3600 seconds (1 hour). Lower values provide more frequent updates but increase server load. Defaults to \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e.\n"},"secret":{"type":"string","description":"The shared secret passphrase used to authenticate RADIUS clients (like wireless access points) with the RADIUS server. This should be a strong, random string known only to the server and its clients. Defaults to ``.\n","secret":true},"site":{"type":"string","description":"The name of the UniFi site where these RADIUS settings should be applied. If not specified, the default site will be used.\n","willReplaceOnChanges":true},"tunneledReply":{"type":"boolean","description":"Enable encrypted communication between the RADIUS server and clients using RADIUS tunneling. This adds an extra layer of security by protecting RADIUS attributes in transit. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Radius resources.\n","properties":{"accountingEnabled":{"type":"boolean","description":"Enable RADIUS accounting to track user sessions, including connection time, data usage, and other metrics. This information can be useful for billing, capacity planning, and security auditing. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"accountingPort":{"type":"integer","description":"The UDP port number for RADIUS accounting communications. The standard port is 1813. Only change this if you need to avoid port conflicts or match specific network requirements. Defaults to \u003cspan pulumi-lang-nodejs=\"`1813`\" pulumi-lang-dotnet=\"`1813`\" pulumi-lang-go=\"`1813`\" pulumi-lang-python=\"`1813`\" pulumi-lang-yaml=\"`1813`\" pulumi-lang-java=\"`1813`\"\u003e`1813`\u003c/span\u003e.\n"},"authPort":{"type":"integer","description":"The UDP port number for RADIUS authentication communications. The standard port is 1812. Only change this if you need to avoid port conflicts or match specific network requirements. Defaults to \u003cspan pulumi-lang-nodejs=\"`1812`\" pulumi-lang-dotnet=\"`1812`\" pulumi-lang-go=\"`1812`\" pulumi-lang-python=\"`1812`\" pulumi-lang-yaml=\"`1812`\" pulumi-lang-java=\"`1812`\"\u003e`1812`\u003c/span\u003e.\n"},"enabled":{"type":"boolean","description":"Enable or disable the built-in RADIUS server. When disabled, no RADIUS authentication or accounting services will be provided, affecting any network services that rely on RADIUS (like WPA2-Enterprise networks). Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"interimUpdateInterval":{"type":"integer","description":"The interval (in seconds) at which the RADIUS server collects and updates statistics from connected clients. Default is 3600 seconds (1 hour). Lower values provide more frequent updates but increase server load. Defaults to \u003cspan pulumi-lang-nodejs=\"`3600`\" pulumi-lang-dotnet=\"`3600`\" pulumi-lang-go=\"`3600`\" pulumi-lang-python=\"`3600`\" pulumi-lang-yaml=\"`3600`\" pulumi-lang-java=\"`3600`\"\u003e`3600`\u003c/span\u003e.\n"},"secret":{"type":"string","description":"The shared secret passphrase used to authenticate RADIUS clients (like wireless access points) with the RADIUS server. This should be a strong, random string known only to the server and its clients. Defaults to ``.\n","secret":true},"site":{"type":"string","description":"The name of the UniFi site where these RADIUS settings should be applied. If not specified, the default site will be used.\n","willReplaceOnChanges":true},"tunneledReply":{"type":"boolean","description":"Enable encrypted communication between the RADIUS server and clients using RADIUS tunneling. This adds an extra layer of security by protecting RADIUS attributes in transit. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"}},"type":"object"}},"unifi:setting/rsyslogd:Rsyslogd":{"description":"Manages Remote Syslog (rsyslogd) settings for UniFi devices. Controller version 8.5 or later is required.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.Rsyslogd(\"example\", {\n    enabled: true,\n    ip: \"192.168.1.200\",\n    port: 514,\n    contents: [\n        \"device\",\n        \"client\",\n        \"admin_activity\",\n    ],\n    debug: true,\n    netconsoleEnabled: true,\n    netconsoleHost: \"192.168.1.150\",\n    netconsolePort: 1514,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.Rsyslogd(\"example\",\n    enabled=True,\n    ip=\"192.168.1.200\",\n    port=514,\n    contents=[\n        \"device\",\n        \"client\",\n        \"admin_activity\",\n    ],\n    debug=True,\n    netconsole_enabled=True,\n    netconsole_host=\"192.168.1.150\",\n    netconsole_port=1514)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.Rsyslogd(\"example\", new()\n    {\n        Enabled = true,\n        Ip = \"192.168.1.200\",\n        Port = 514,\n        Contents = new[]\n        {\n            \"device\",\n            \"client\",\n            \"admin_activity\",\n        },\n        Debug = true,\n        NetconsoleEnabled = true,\n        NetconsoleHost = \"192.168.1.150\",\n        NetconsolePort = 1514,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewRsyslogd(ctx, \"example\", \u0026setting.RsyslogdArgs{\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tIp:      pulumi.String(\"192.168.1.200\"),\n\t\t\tPort:    pulumi.Int(514),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"device\"),\n\t\t\t\tpulumi.String(\"client\"),\n\t\t\t\tpulumi.String(\"admin_activity\"),\n\t\t\t},\n\t\t\tDebug:             pulumi.Bool(true),\n\t\t\tNetconsoleEnabled: pulumi.Bool(true),\n\t\t\tNetconsoleHost:    pulumi.String(\"192.168.1.150\"),\n\t\t\tNetconsolePort:    pulumi.Int(1514),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.Rsyslogd;\nimport com.pulumiverse.unifi.setting.RsyslogdArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new Rsyslogd(\"example\", RsyslogdArgs.builder()\n            .enabled(true)\n            .ip(\"192.168.1.200\")\n            .port(514)\n            .contents(            \n                \"device\",\n                \"client\",\n                \"admin_activity\")\n            .debug(true)\n            .netconsoleEnabled(true)\n            .netconsoleHost(\"192.168.1.150\")\n            .netconsolePort(1514)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:Rsyslogd\n    properties:\n      enabled: true # Remote syslog server IP address\n      ip: 192.168.1.200\n      port: 514 # Types of log content to send\n      #   # Valid options: \"device\", \"client\", \"admin_activity\"\n      contents:\n        - device\n        - client\n        - admin_activity\n      debug: true # Netconsole configuration (optional)\n      netconsoleEnabled: true\n      netconsoleHost: 192.168.1.150\n      netconsolePort: 1514 # Specify the site (optional, defaults to site configured in provider, otherwise \"default\")\n      #   # site = \"default\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"contents":{"type":"array","items":{"type":"string"},"description":"List of log types to include in the remote syslog. Valid values: device, client, firewall*default*policy, triggers, updates, admin*activity, critical, security*detections, vpn.\n"},"debug":{"type":"boolean","description":"Whether debug logging is enabled.\n"},"enabled":{"type":"boolean","description":"Whether remote syslog is enabled.\n"},"ip":{"type":"string","description":"IP address of the remote syslog server.\n"},"logAllContents":{"type":"boolean","description":"Whether to log all content types.\n"},"netconsoleEnabled":{"type":"boolean","description":"Whether netconsole logging is enabled.\n"},"netconsoleHost":{"type":"string","description":"Hostname or IP address of the netconsole server.\n"},"netconsolePort":{"type":"integer","description":"Port number for the netconsole server. Valid values: 1-65535.\n"},"port":{"type":"integer","description":"Port number for the remote syslog server. Valid values: 1-65535.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"thisController":{"type":"boolean","description":"Whether to use this controller as the syslog server.\n"},"thisControllerEncryptedOnly":{"type":"boolean","description":"Whether to only use encrypted connections to this controller for syslog.\n"}},"required":["contents","debug","enabled","ip","logAllContents","netconsoleEnabled","netconsoleHost","netconsolePort","port","site","thisController","thisControllerEncryptedOnly"],"inputProperties":{"contents":{"type":"array","items":{"type":"string"},"description":"List of log types to include in the remote syslog. Valid values: device, client, firewall*default*policy, triggers, updates, admin*activity, critical, security*detections, vpn.\n"},"debug":{"type":"boolean","description":"Whether debug logging is enabled.\n"},"enabled":{"type":"boolean","description":"Whether remote syslog is enabled.\n"},"ip":{"type":"string","description":"IP address of the remote syslog server.\n"},"logAllContents":{"type":"boolean","description":"Whether to log all content types.\n"},"netconsoleEnabled":{"type":"boolean","description":"Whether netconsole logging is enabled.\n"},"netconsoleHost":{"type":"string","description":"Hostname or IP address of the netconsole server.\n"},"netconsolePort":{"type":"integer","description":"Port number for the netconsole server. Valid values: 1-65535.\n"},"port":{"type":"integer","description":"Port number for the remote syslog server. Valid values: 1-65535.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"thisController":{"type":"boolean","description":"Whether to use this controller as the syslog server.\n"},"thisControllerEncryptedOnly":{"type":"boolean","description":"Whether to only use encrypted connections to this controller for syslog.\n"}},"requiredInputs":["enabled"],"stateInputs":{"description":"Input properties used for looking up and filtering Rsyslogd resources.\n","properties":{"contents":{"type":"array","items":{"type":"string"},"description":"List of log types to include in the remote syslog. Valid values: device, client, firewall*default*policy, triggers, updates, admin*activity, critical, security*detections, vpn.\n"},"debug":{"type":"boolean","description":"Whether debug logging is enabled.\n"},"enabled":{"type":"boolean","description":"Whether remote syslog is enabled.\n"},"ip":{"type":"string","description":"IP address of the remote syslog server.\n"},"logAllContents":{"type":"boolean","description":"Whether to log all content types.\n"},"netconsoleEnabled":{"type":"boolean","description":"Whether netconsole logging is enabled.\n"},"netconsoleHost":{"type":"string","description":"Hostname or IP address of the netconsole server.\n"},"netconsolePort":{"type":"integer","description":"Port number for the netconsole server. Valid values: 1-65535.\n"},"port":{"type":"integer","description":"Port number for the remote syslog server. Valid values: 1-65535.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"thisController":{"type":"boolean","description":"Whether to use this controller as the syslog server.\n"},"thisControllerEncryptedOnly":{"type":"boolean","description":"Whether to only use encrypted connections to this controller for syslog.\n"}},"type":"object"}},"unifi:setting/sslInspection:SslInspection":{"description":"Manages SSL Inspection settings for a UniFi site. SSL inspection is a security feature that allows the UniFi Security Gateway (USG) to inspect encrypted traffic for security threats.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.SslInspection(\"example\", {state: \"advanced\"});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.SslInspection(\"example\", state=\"advanced\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.SslInspection(\"example\", new()\n    {\n        State = \"advanced\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewSslInspection(ctx, \"example\", \u0026setting.SslInspectionArgs{\n\t\t\tState: pulumi.String(\"advanced\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.SslInspection;\nimport com.pulumiverse.unifi.setting.SslInspectionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new SslInspection(\"example\", SslInspectionArgs.builder()\n            .state(\"advanced\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:SslInspection\n    properties:\n      state: advanced\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"state":{"type":"string","description":"The mode of SSL inspection. Valid values are: \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`simple`\" pulumi-lang-dotnet=\"`Simple`\" pulumi-lang-go=\"`simple`\" pulumi-lang-python=\"`simple`\" pulumi-lang-yaml=\"`simple`\" pulumi-lang-java=\"`simple`\"\u003e`simple`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`advanced`\" pulumi-lang-dotnet=\"`Advanced`\" pulumi-lang-go=\"`advanced`\" pulumi-lang-python=\"`advanced`\" pulumi-lang-yaml=\"`advanced`\" pulumi-lang-java=\"`advanced`\"\u003e`advanced`\u003c/span\u003e.\n"}},"required":["site","state"],"inputProperties":{"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"state":{"type":"string","description":"The mode of SSL inspection. Valid values are: \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`simple`\" pulumi-lang-dotnet=\"`Simple`\" pulumi-lang-go=\"`simple`\" pulumi-lang-python=\"`simple`\" pulumi-lang-yaml=\"`simple`\" pulumi-lang-java=\"`simple`\"\u003e`simple`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`advanced`\" pulumi-lang-dotnet=\"`Advanced`\" pulumi-lang-go=\"`advanced`\" pulumi-lang-python=\"`advanced`\" pulumi-lang-yaml=\"`advanced`\" pulumi-lang-java=\"`advanced`\"\u003e`advanced`\u003c/span\u003e.\n"}},"requiredInputs":["state"],"stateInputs":{"description":"Input properties used for looking up and filtering SslInspection resources.\n","properties":{"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"state":{"type":"string","description":"The mode of SSL inspection. Valid values are: \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`simple`\" pulumi-lang-dotnet=\"`Simple`\" pulumi-lang-go=\"`simple`\" pulumi-lang-python=\"`simple`\" pulumi-lang-yaml=\"`simple`\" pulumi-lang-java=\"`simple`\"\u003e`simple`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`advanced`\" pulumi-lang-dotnet=\"`Advanced`\" pulumi-lang-go=\"`advanced`\" pulumi-lang-python=\"`advanced`\" pulumi-lang-yaml=\"`advanced`\" pulumi-lang-java=\"`advanced`\"\u003e`advanced`\u003c/span\u003e.\n"}},"type":"object"}},"unifi:setting/teleport:Teleport":{"description":"Manages Teleport settings for a UniFi site. Teleport is a secure remote access technology that allows authorized users to connect to UniFi devices from anywhere.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.Teleport(\"example\", {\n    enabled: true,\n    subnet: \"192.168.100.0/24\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.Teleport(\"example\",\n    enabled=True,\n    subnet=\"192.168.100.0/24\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.Teleport(\"example\", new()\n    {\n        Enabled = true,\n        Subnet = \"192.168.100.0/24\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewTeleport(ctx, \"example\", \u0026setting.TeleportArgs{\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tSubnet:  pulumi.String(\"192.168.100.0/24\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.Teleport;\nimport com.pulumiverse.unifi.setting.TeleportArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new Teleport(\"example\", TeleportArgs.builder()\n            .enabled(true)\n            .subnet(\"192.168.100.0/24\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:Teleport\n    properties:\n      enabled: true # Optional subnet configuration for Teleport\n      #   # Specify a CIDR notation subnet for Teleport to use\n      subnet: 192.168.100.0/24\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"enabled":{"type":"boolean","description":"Whether Teleport is enabled.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"subnet":{"type":"string","description":"The subnet CIDR for Teleport (e.g., `192.168.1.0/24`). Can be empty but must be set explicitly.\n"}},"required":["enabled","site","subnet"],"inputProperties":{"enabled":{"type":"boolean","description":"Whether Teleport is enabled.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"subnet":{"type":"string","description":"The subnet CIDR for Teleport (e.g., `192.168.1.0/24`). Can be empty but must be set explicitly.\n"}},"requiredInputs":["enabled"],"stateInputs":{"description":"Input properties used for looking up and filtering Teleport resources.\n","properties":{"enabled":{"type":"boolean","description":"Whether Teleport is enabled.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"subnet":{"type":"string","description":"The subnet CIDR for Teleport (e.g., `192.168.1.0/24`). Can be empty but must be set explicitly.\n"}},"type":"object"}},"unifi:setting/uSG:USG":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.setting.USG`\" pulumi-lang-dotnet=\"`unifi.setting.USG`\" pulumi-lang-go=\"`setting.USG`\" pulumi-lang-python=\"`setting.USG`\" pulumi-lang-yaml=\"`unifi.setting.USG`\" pulumi-lang-java=\"`unifi.setting.USG`\"\u003e`unifi.setting.USG`\u003c/span\u003e resource manages advanced settings for UniFi Security Gateways (USG) and UniFi Dream Machines (UDM/UDM-Pro).\n\nThis resource allows you to configure gateway-specific features including:\n  * Multicast DNS (mDNS) for cross-VLAN service discovery\n  * DHCP relay for forwarding DHCP requests to external servers\n  * Geo IP filtering for country-based traffic control\n  * UPNP/NAT-PMP for automatic port forwarding\n  * Protocol helpers for FTP, GRE, H323, PPTP, SIP, and TFTP\n  * TCP/UDP timeout settings for connection tracking\n  * Security features like SYN cookies and ICMP redirect controls\n  * MSS clamping for optimizing MTU issues\n\nNote: Some settings may not be available on all controller versions. For example,\u003cspan pulumi-lang-nodejs=\" multicastDnsEnabled \" pulumi-lang-dotnet=\" MulticastDnsEnabled \" pulumi-lang-go=\" multicastDnsEnabled \" pulumi-lang-python=\" multicast_dns_enabled \" pulumi-lang-yaml=\" multicastDnsEnabled \" pulumi-lang-java=\" multicastDnsEnabled \"\u003e multicast_dns_enabled \u003c/span\u003eis not supported on UniFi OS v7+. Changes to certain attributes may not be reflected in the plan unless explicitly modified in the configuration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.USG(\"example\", {\n    geoIpFiltering: {\n        block: \"block\",\n        countries: [\n            \"UK\",\n            \"CN\",\n            \"AU\",\n        ],\n        trafficDirection: \"both\",\n    },\n    upnp: {\n        natPmpEnabled: true,\n        secureMode: true,\n        wanInterface: \"WAN\",\n    },\n    dnsVerification: {\n        domain: \"example.com\",\n        primaryDnsServer: \"1.1.1.1\",\n        secondaryDnsServer: \"1.0.0.1\",\n        settingPreference: \"manual\",\n    },\n    tcpTimeouts: {\n        closeTimeout: 10,\n        establishedTimeout: 3600,\n        closeWaitTimeout: 20,\n        finWaitTimeout: 30,\n        lastAckTimeout: 30,\n        synRecvTimeout: 60,\n        synSentTimeout: 120,\n        timeWaitTimeout: 120,\n    },\n    arpCacheTimeout: \"custom\",\n    arpCacheBaseReachable: 60,\n    broadcastPing: true,\n    dhcpdHostfileUpdate: true,\n    dhcpdUseDnsmasq: true,\n    dnsmasqAllServers: true,\n    dhcpRelay: {\n        agentsPackets: \"forward\",\n        hopCount: 5,\n    },\n    dhcpRelayServers: [\n        \"10.1.2.3\",\n        \"10.1.2.4\",\n    ],\n    echoServer: \"echo.example.com\",\n    ftpModule: true,\n    greModule: true,\n    tftpModule: true,\n    icmpTimeout: 20,\n    lldpEnableAll: true,\n    mssClamp: \"auto\",\n    mssClampMss: 1452,\n    offloadAccounting: true,\n    offloadL2Blocking: true,\n    offloadScheduling: false,\n    otherTimeout: 600,\n    timeoutSettingPreference: \"auto\",\n    receiveRedirects: false,\n    sendRedirects: true,\n    synCookies: true,\n    udpOtherTimeout: 30,\n    udpStreamTimeout: 120,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.USG(\"example\",\n    geo_ip_filtering={\n        \"block\": \"block\",\n        \"countries\": [\n            \"UK\",\n            \"CN\",\n            \"AU\",\n        ],\n        \"traffic_direction\": \"both\",\n    },\n    upnp={\n        \"nat_pmp_enabled\": True,\n        \"secure_mode\": True,\n        \"wan_interface\": \"WAN\",\n    },\n    dns_verification={\n        \"domain\": \"example.com\",\n        \"primary_dns_server\": \"1.1.1.1\",\n        \"secondary_dns_server\": \"1.0.0.1\",\n        \"setting_preference\": \"manual\",\n    },\n    tcp_timeouts={\n        \"close_timeout\": 10,\n        \"established_timeout\": 3600,\n        \"close_wait_timeout\": 20,\n        \"fin_wait_timeout\": 30,\n        \"last_ack_timeout\": 30,\n        \"syn_recv_timeout\": 60,\n        \"syn_sent_timeout\": 120,\n        \"time_wait_timeout\": 120,\n    },\n    arp_cache_timeout=\"custom\",\n    arp_cache_base_reachable=60,\n    broadcast_ping=True,\n    dhcpd_hostfile_update=True,\n    dhcpd_use_dnsmasq=True,\n    dnsmasq_all_servers=True,\n    dhcp_relay={\n        \"agents_packets\": \"forward\",\n        \"hop_count\": 5,\n    },\n    dhcp_relay_servers=[\n        \"10.1.2.3\",\n        \"10.1.2.4\",\n    ],\n    echo_server=\"echo.example.com\",\n    ftp_module=True,\n    gre_module=True,\n    tftp_module=True,\n    icmp_timeout=20,\n    lldp_enable_all=True,\n    mss_clamp=\"auto\",\n    mss_clamp_mss=1452,\n    offload_accounting=True,\n    offload_l2_blocking=True,\n    offload_scheduling=False,\n    other_timeout=600,\n    timeout_setting_preference=\"auto\",\n    receive_redirects=False,\n    send_redirects=True,\n    syn_cookies=True,\n    udp_other_timeout=30,\n    udp_stream_timeout=120)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.USG(\"example\", new()\n    {\n        GeoIpFiltering = new Unifi.Setting.Inputs.USGGeoIpFilteringArgs\n        {\n            Block = \"block\",\n            Countries = new[]\n            {\n                \"UK\",\n                \"CN\",\n                \"AU\",\n            },\n            TrafficDirection = \"both\",\n        },\n        Upnp = new Unifi.Setting.Inputs.USGUpnpArgs\n        {\n            NatPmpEnabled = true,\n            SecureMode = true,\n            WanInterface = \"WAN\",\n        },\n        DnsVerification = new Unifi.Setting.Inputs.USGDnsVerificationArgs\n        {\n            Domain = \"example.com\",\n            PrimaryDnsServer = \"1.1.1.1\",\n            SecondaryDnsServer = \"1.0.0.1\",\n            SettingPreference = \"manual\",\n        },\n        TcpTimeouts = new Unifi.Setting.Inputs.USGTcpTimeoutsArgs\n        {\n            CloseTimeout = 10,\n            EstablishedTimeout = 3600,\n            CloseWaitTimeout = 20,\n            FinWaitTimeout = 30,\n            LastAckTimeout = 30,\n            SynRecvTimeout = 60,\n            SynSentTimeout = 120,\n            TimeWaitTimeout = 120,\n        },\n        ArpCacheTimeout = \"custom\",\n        ArpCacheBaseReachable = 60,\n        BroadcastPing = true,\n        DhcpdHostfileUpdate = true,\n        DhcpdUseDnsmasq = true,\n        DnsmasqAllServers = true,\n        DhcpRelay = new Unifi.Setting.Inputs.USGDhcpRelayArgs\n        {\n            AgentsPackets = \"forward\",\n            HopCount = 5,\n        },\n        DhcpRelayServers = new[]\n        {\n            \"10.1.2.3\",\n            \"10.1.2.4\",\n        },\n        EchoServer = \"echo.example.com\",\n        FtpModule = true,\n        GreModule = true,\n        TftpModule = true,\n        IcmpTimeout = 20,\n        LldpEnableAll = true,\n        MssClamp = \"auto\",\n        MssClampMss = 1452,\n        OffloadAccounting = true,\n        OffloadL2Blocking = true,\n        OffloadScheduling = false,\n        OtherTimeout = 600,\n        TimeoutSettingPreference = \"auto\",\n        ReceiveRedirects = false,\n        SendRedirects = true,\n        SynCookies = true,\n        UdpOtherTimeout = 30,\n        UdpStreamTimeout = 120,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewUSG(ctx, \"example\", \u0026setting.USGArgs{\n\t\t\tGeoIpFiltering: \u0026setting.USGGeoIpFilteringArgs{\n\t\t\t\tBlock: \"block\",\n\t\t\t\tCountries: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"UK\"),\n\t\t\t\t\tpulumi.String(\"CN\"),\n\t\t\t\t\tpulumi.String(\"AU\"),\n\t\t\t\t},\n\t\t\t\tTrafficDirection: pulumi.String(\"both\"),\n\t\t\t},\n\t\t\tUpnp: \u0026setting.USGUpnpArgs{\n\t\t\t\tNatPmpEnabled: pulumi.Bool(true),\n\t\t\t\tSecureMode:    pulumi.Bool(true),\n\t\t\t\tWanInterface:  pulumi.String(\"WAN\"),\n\t\t\t},\n\t\t\tDnsVerification: \u0026setting.USGDnsVerificationArgs{\n\t\t\t\tDomain:             pulumi.String(\"example.com\"),\n\t\t\t\tPrimaryDnsServer:   pulumi.String(\"1.1.1.1\"),\n\t\t\t\tSecondaryDnsServer: pulumi.String(\"1.0.0.1\"),\n\t\t\t\tSettingPreference:  pulumi.String(\"manual\"),\n\t\t\t},\n\t\t\tTcpTimeouts: \u0026setting.USGTcpTimeoutsArgs{\n\t\t\t\tCloseTimeout:       pulumi.Int(10),\n\t\t\t\tEstablishedTimeout: pulumi.Int(3600),\n\t\t\t\tCloseWaitTimeout:   pulumi.Int(20),\n\t\t\t\tFinWaitTimeout:     pulumi.Int(30),\n\t\t\t\tLastAckTimeout:     pulumi.Int(30),\n\t\t\t\tSynRecvTimeout:     pulumi.Int(60),\n\t\t\t\tSynSentTimeout:     pulumi.Int(120),\n\t\t\t\tTimeWaitTimeout:    pulumi.Int(120),\n\t\t\t},\n\t\t\tArpCacheTimeout:       pulumi.String(\"custom\"),\n\t\t\tArpCacheBaseReachable: pulumi.Int(60),\n\t\t\tBroadcastPing:         pulumi.Bool(true),\n\t\t\tDhcpdHostfileUpdate:   pulumi.Bool(true),\n\t\t\tDhcpdUseDnsmasq:       pulumi.Bool(true),\n\t\t\tDnsmasqAllServers:     pulumi.Bool(true),\n\t\t\tDhcpRelay: \u0026setting.USGDhcpRelayArgs{\n\t\t\t\tAgentsPackets: pulumi.String(\"forward\"),\n\t\t\t\tHopCount:      pulumi.Int(5),\n\t\t\t},\n\t\t\tDhcpRelayServers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"10.1.2.3\"),\n\t\t\t\tpulumi.String(\"10.1.2.4\"),\n\t\t\t},\n\t\t\tEchoServer:               pulumi.String(\"echo.example.com\"),\n\t\t\tFtpModule:                pulumi.Bool(true),\n\t\t\tGreModule:                pulumi.Bool(true),\n\t\t\tTftpModule:               pulumi.Bool(true),\n\t\t\tIcmpTimeout:              pulumi.Int(20),\n\t\t\tLldpEnableAll:            pulumi.Bool(true),\n\t\t\tMssClamp:                 pulumi.String(\"auto\"),\n\t\t\tMssClampMss:              pulumi.Int(1452),\n\t\t\tOffloadAccounting:        pulumi.Bool(true),\n\t\t\tOffloadL2Blocking:        pulumi.Bool(true),\n\t\t\tOffloadScheduling:        false,\n\t\t\tOtherTimeout:             pulumi.Int(600),\n\t\t\tTimeoutSettingPreference: pulumi.String(\"auto\"),\n\t\t\tReceiveRedirects:         pulumi.Bool(false),\n\t\t\tSendRedirects:            pulumi.Bool(true),\n\t\t\tSynCookies:               pulumi.Bool(true),\n\t\t\tUdpOtherTimeout:          pulumi.Int(30),\n\t\t\tUdpStreamTimeout:         pulumi.Int(120),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.USG;\nimport com.pulumiverse.unifi.setting.USGArgs;\nimport com.pulumi.unifi.setting.inputs.USGGeoIpFilteringArgs;\nimport com.pulumi.unifi.setting.inputs.USGUpnpArgs;\nimport com.pulumi.unifi.setting.inputs.USGDnsVerificationArgs;\nimport com.pulumi.unifi.setting.inputs.USGTcpTimeoutsArgs;\nimport com.pulumi.unifi.setting.inputs.USGDhcpRelayArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new USG(\"example\", USGArgs.builder()\n            .geoIpFiltering(USGGeoIpFilteringArgs.builder()\n                .block(\"block\")\n                .countries(                \n                    \"UK\",\n                    \"CN\",\n                    \"AU\")\n                .trafficDirection(\"both\")\n                .build())\n            .upnp(USGUpnpArgs.builder()\n                .natPmpEnabled(true)\n                .secureMode(true)\n                .wanInterface(\"WAN\")\n                .build())\n            .dnsVerification(USGDnsVerificationArgs.builder()\n                .domain(\"example.com\")\n                .primaryDnsServer(\"1.1.1.1\")\n                .secondaryDnsServer(\"1.0.0.1\")\n                .settingPreference(\"manual\")\n                .build())\n            .tcpTimeouts(USGTcpTimeoutsArgs.builder()\n                .closeTimeout(10)\n                .establishedTimeout(3600)\n                .closeWaitTimeout(20)\n                .finWaitTimeout(30)\n                .lastAckTimeout(30)\n                .synRecvTimeout(60)\n                .synSentTimeout(120)\n                .timeWaitTimeout(120)\n                .build())\n            .arpCacheTimeout(\"custom\")\n            .arpCacheBaseReachable(60)\n            .broadcastPing(true)\n            .dhcpdHostfileUpdate(true)\n            .dhcpdUseDnsmasq(true)\n            .dnsmasqAllServers(true)\n            .dhcpRelay(USGDhcpRelayArgs.builder()\n                .agentsPackets(\"forward\")\n                .hopCount(5)\n                .build())\n            .dhcpRelayServers(            \n                \"10.1.2.3\",\n                \"10.1.2.4\")\n            .echoServer(\"echo.example.com\")\n            .ftpModule(true)\n            .greModule(true)\n            .tftpModule(true)\n            .icmpTimeout(20)\n            .lldpEnableAll(true)\n            .mssClamp(\"auto\")\n            .mssClampMss(1452)\n            .offloadAccounting(true)\n            .offloadL2Blocking(true)\n            .offloadScheduling(false)\n            .otherTimeout(600)\n            .timeoutSettingPreference(\"auto\")\n            .receiveRedirects(false)\n            .sendRedirects(true)\n            .synCookies(true)\n            .udpOtherTimeout(30)\n            .udpStreamTimeout(120)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:USG\n    properties:\n      geoIpFiltering:\n        block: block\n        countries:\n          - UK\n          - CN\n          - AU\n        trafficDirection: both\n      upnp:\n        natPmpEnabled: true\n        secureMode: true\n        wanInterface: WAN\n      dnsVerification:\n        domain: example.com\n        primaryDnsServer: 1.1.1.1\n        secondaryDnsServer: 1.0.0.1\n        settingPreference: manual\n      tcpTimeouts:\n        closeTimeout: 10\n        establishedTimeout: 3600\n        closeWaitTimeout: 20\n        finWaitTimeout: 30\n        lastAckTimeout: 30\n        synRecvTimeout: 60\n        synSentTimeout: 120\n        timeWaitTimeout: 120\n      arpCacheTimeout: custom\n      arpCacheBaseReachable: 60 # DHCP Configuration\n      broadcastPing: true\n      dhcpdHostfileUpdate: true\n      dhcpdUseDnsmasq: true\n      dnsmasqAllServers: true # DHCP Relay Configuration\n      dhcpRelay:\n        agentsPackets: forward\n        hopCount: 5\n      dhcpRelayServers:\n        - 10.1.2.3\n        - 10.1.2.4\n      echoServer: echo.example.com\n      ftpModule: true\n      greModule: true\n      tftpModule: true # ICMP \u0026 LLDP Settings\n      icmpTimeout: 20\n      lldpEnableAll: true # MSS Clamp Settings\n      mssClamp: auto\n      mssClampMss: 1452 # Offload Settings\n      offloadAccounting: true\n      offloadL2Blocking: true\n      offloadScheduling: false # Timeout Settings\n      otherTimeout: 600\n      timeoutSettingPreference: auto\n      receiveRedirects: false\n      sendRedirects: true\n      synCookies: true # UDP Timeout Settings\n      udpOtherTimeout: 30\n      udpStreamTimeout: 120 # Specify the site (optional)\n      #   # site = \"default\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"arpCacheBaseReachable":{"type":"integer","description":"The base reachable timeout (in seconds) for ARP cache entries. This controls how long the gateway considers a MAC-to-IP mapping valid without needing to refresh it. Higher values reduce network traffic but may cause stale entries if devices change IP addresses frequently."},"arpCacheTimeout":{"type":"string","description":"The timeout strategy for ARP cache entries. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`normal`\" pulumi-lang-dotnet=\"`Normal`\" pulumi-lang-go=\"`normal`\" pulumi-lang-python=\"`normal`\" pulumi-lang-yaml=\"`normal`\" pulumi-lang-java=\"`normal`\"\u003e`normal`\u003c/span\u003e - Use system default timeouts\n  * `min-dhcp-lease` - Set ARP timeout to match the minimum DHCP lease time\n  * \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e - Use the custom timeout value specified in \u003cspan pulumi-lang-nodejs=\"`arpCacheBaseReachable`\" pulumi-lang-dotnet=\"`ArpCacheBaseReachable`\" pulumi-lang-go=\"`arpCacheBaseReachable`\" pulumi-lang-python=\"`arp_cache_base_reachable`\" pulumi-lang-yaml=\"`arpCacheBaseReachable`\" pulumi-lang-java=\"`arpCacheBaseReachable`\"\u003e`arp_cache_base_reachable`\u003c/span\u003e\n\nThis setting determines how long MAC-to-IP mappings are stored in the ARP cache before being refreshed."},"broadcastPing":{"type":"boolean","description":"Enable responding to broadcast ping requests (ICMP echo requests sent to the broadcast address). When enabled, the gateway will respond to pings sent to the broadcast address of the network (e.g., 192.168.1.255). This can be useful for network diagnostics but may also be used in certain denial-of-service attacks."},"dhcpRelay":{"$ref":"#/types/unifi:setting/USGDhcpRelay:USGDhcpRelay","description":"Advanced DHCP relay configuration settings. Controls how the gateway forwards DHCP requests to external servers and manages DHCP relay agent behavior. Use this block to fine-tune DHCP relay functionality beyond simply specifying relay servers."},"dhcpRelayServers":{"type":"array","items":{"type":"string"},"description":"List of up to 5 DHCP relay servers (specified by IP address) that will receive forwarded DHCP requests. This is useful when you want to use external DHCP servers instead of the built-in DHCP server on the USG/UDM. When configured, the gateway will forward DHCP discovery packets from clients to these external servers, allowing centralized IP address management across multiple networks. Example: `['192.168.1.5', '192.168.2.5']`","deprecationMessage":"This attribute is deprecated and will be removed in a future release. `dhcp_relay.servers` attribute will be introduced as a replacement."},"dhcpdHostfileUpdate":{"type":"boolean","description":"Enable updating the gateway's host files with DHCP client information. When enabled, the gateway will automatically add entries to its host file for each DHCP client, allowing hostname resolution for devices that receive IP addresses via DHCP. This improves name resolution on the local network."},"dhcpdUseDnsmasq":{"type":"boolean","description":"Use dnsmasq for DHCP services instead of the default DHCP server. Dnsmasq provides integrated DNS and DHCP functionality with additional features like DNS caching, DHCP static leases, and local domain name resolution. This can improve DNS resolution performance and provide more flexible DHCP options."},"dnsVerification":{"$ref":"#/types/unifi:setting/USGDnsVerification:USGDnsVerification","description":"DNS verification settings for validating DNS responses. This feature helps detect and prevent DNS spoofing attacks by verifying DNS responses against trusted DNS servers. When configured, the gateway can compare DNS responses with those from known trusted servers to identify potential tampering or poisoning attempts. Requires controller version 8.5 or later."},"dnsmasqAllServers":{"type":"boolean","description":"When enabled, dnsmasq will query all configured DNS servers simultaneously and use the fastest response. This can improve DNS resolution speed but may increase DNS traffic. By default, dnsmasq queries servers sequentially, only trying the next server if the current one fails to respond."},"echoServer":{"type":"string","description":"The hostname or IP address of a server to use for network echo tests. Echo tests send packets to this server and measure response times to evaluate network connectivity and performance. This can be used for network diagnostics and monitoring."},"ftpModule":{"type":"boolean","description":"Enable the FTP (File Transfer Protocol) helper module. This module allows the gateway to properly handle FTP connections through NAT by tracking the control channel and dynamically opening required data ports. Without this helper, passive FTP connections may fail when clients are behind NAT."},"geoIpFiltering":{"$ref":"#/types/unifi:setting/USGGeoIpFiltering:USGGeoIpFiltering","description":"Geographic IP filtering configuration that allows blocking or allowing traffic based on country of origin. This feature uses IP geolocation databases to identify the country associated with IP addresses and apply filtering rules. Useful for implementing country-specific access policies or blocking traffic from high-risk regions. Requires controller version 7.0 or later."},"geoIpFilteringEnabled":{"type":"boolean","description":"Whether Geo IP Filtering is enabled. When enabled, the gateway will apply the specified country-based"},"greModule":{"type":"boolean","description":"Enable the GRE (Generic Routing Encapsulation) protocol helper module. This module allows proper handling of GRE tunneling protocol through the gateway's firewall. GRE is commonly used for VPN tunnels and other encapsulation needs. Required if you plan to use PPTP VPNs (see \u003cspan pulumi-lang-nodejs=\"`pptpModule`\" pulumi-lang-dotnet=\"`PptpModule`\" pulumi-lang-go=\"`pptpModule`\" pulumi-lang-python=\"`pptp_module`\" pulumi-lang-yaml=\"`pptpModule`\" pulumi-lang-java=\"`pptpModule`\"\u003e`pptp_module`\u003c/span\u003e)."},"h323Module":{"type":"boolean","description":"Enable the H.323 protocol helper module. H.323 is a standard for multimedia communications (audio, video, and data) over packet-based networks. This helper allows H.323-based applications like video conferencing systems to work properly through NAT by tracking connection details and opening required ports."},"icmpTimeout":{"type":"integer","description":"ICMP timeout in seconds for connection tracking. This controls how long the gateway maintains state information for ICMP (ping) packets in its connection tracking table. Higher values maintain ICMP connection state longer, while lower values reclaim resources more quickly but may affect some diagnostic tools."},"lldpEnableAll":{"type":"boolean","description":"Enable Link Layer Discovery Protocol (LLDP) on all interfaces. LLDP is a vendor-neutral protocol that allows network devices to advertise their identity, capabilities, and neighbors on a local network. When enabled, the gateway will both send and receive LLDP packets, facilitating network discovery and management tools."},"mssClamp":{"type":"string","description":"TCP Maximum Segment Size (MSS) clamping mode. MSS clamping adjusts the maximum segment size of TCP packets to prevent fragmentation issues when packets traverse networks with different MTU sizes. Valid values include:\n  * \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - Automatically determine appropriate MSS values based on interface MTUs\n  * \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e - Use the custom MSS value specified in \u003cspan pulumi-lang-nodejs=\"`mssClampMss`\" pulumi-lang-dotnet=\"`MssClampMss`\" pulumi-lang-go=\"`mssClampMss`\" pulumi-lang-python=\"`mss_clamp_mss`\" pulumi-lang-yaml=\"`mssClampMss`\" pulumi-lang-java=\"`mssClampMss`\"\u003e`mss_clamp_mss`\u003c/span\u003e\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - Do not perform MSS clamping\n\nThis setting is particularly important for VPN connections and networks with non-standard MTU sizes."},"mssClampMss":{"type":"integer","description":"Custom TCP Maximum Segment Size (MSS) value in bytes. This value is used when \u003cspan pulumi-lang-nodejs=\"`mssClamp`\" pulumi-lang-dotnet=\"`MssClamp`\" pulumi-lang-go=\"`mssClamp`\" pulumi-lang-python=\"`mss_clamp`\" pulumi-lang-yaml=\"`mssClamp`\" pulumi-lang-java=\"`mssClamp`\"\u003e`mss_clamp`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e. The MSS value should typically be set to the path MTU minus 40 bytes (for IPv4) or minus 60 bytes (for IPv6) to account for TCP/IP header overhead. Valid values range from 100 to 9999, with common values being 1460 (for standard 1500 MTU) or 1400 (for VPN tunnels)."},"multicastDnsEnabled":{"type":"boolean","description":"Enable multicast DNS (mDNS/Bonjour/Avahi) forwarding across VLANs. This allows devices to discover services (like printers, Chromecasts, Apple devices, etc.) even when they are on different networks or VLANs. When enabled, the gateway will forward mDNS packets between networks, facilitating cross-VLAN service discovery. Note: This setting is not supported on UniFi OS v7+ as it has been replaced by mDNS settings in the network configuration."},"offloadAccounting":{"type":"boolean","description":"Enable hardware accounting offload. When enabled, the gateway will use hardware acceleration for traffic accounting functions, reducing CPU load and potentially improving throughput for high-traffic environments. This setting may not be supported on all hardware models."},"offloadL2Blocking":{"type":"boolean","description":"Enable hardware offload for Layer 2 (L2) blocking functions. When enabled, the gateway will use hardware acceleration for blocking traffic at the data link layer (MAC address level), which can improve performance when implementing MAC-based filtering or isolation. This setting may not be supported on all hardware models."},"offloadSch":{"type":"boolean","description":"Enable hardware scheduling offload. When enabled, the gateway will use hardware acceleration for packet scheduling functions, which can improve QoS (Quality of Service) performance and throughput for prioritized traffic. This setting may not be supported on all hardware models and may affect other hardware offload capabilities."},"otherTimeout":{"type":"integer","description":"Timeout (in seconds) for connection tracking of protocols other than TCP, UDP, and ICMP. This controls how long the gateway maintains state information for connections using other protocols. Higher values maintain connection state longer, while lower values reclaim resources more quickly but may affect some applications using non-standard protocols."},"pptpModule":{"type":"boolean","description":"Enable the PPTP (Point-to-Point Tunneling Protocol) helper module. This module allows PPTP VPN connections to work properly through the gateway's firewall and NAT. PPTP uses GRE for tunneling, so the \u003cspan pulumi-lang-nodejs=\"`greModule`\" pulumi-lang-dotnet=\"`GreModule`\" pulumi-lang-go=\"`greModule`\" pulumi-lang-python=\"`gre_module`\" pulumi-lang-yaml=\"`greModule`\" pulumi-lang-java=\"`greModule`\"\u003e`gre_module`\u003c/span\u003e must also be enabled for PPTP to function correctly. Note that PPTP has known security vulnerabilities and more secure VPN protocols are generally recommended."},"receiveRedirects":{"type":"boolean","description":"Enable accepting ICMP redirect messages. ICMP redirects are messages sent by routers to inform hosts of better routes to specific destinations. When enabled, the gateway will update its routing table based on these messages. While useful for route optimization, this can potentially be exploited for man-in-the-middle attacks, so it's often disabled in security-sensitive environments."},"sendRedirects":{"type":"boolean","description":"Enable sending ICMP redirect messages. When enabled, the gateway will send ICMP redirect messages to hosts on the local network to inform them of better routes to specific destinations. This can help optimize network traffic but is typically only needed when the gateway has multiple interfaces on the same subnet or in complex routing scenarios."},"sipModule":{"type":"boolean","description":"Enable the SIP (Session Initiation Protocol) helper module. SIP is used for initiating, maintaining, and terminating real-time sessions for voice, video, and messaging applications (VoIP, video conferencing). This helper allows SIP-based applications to work correctly through NAT by tracking SIP connections and dynamically opening the necessary ports for media streams."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"synCookies":{"type":"boolean","description":"Enable SYN cookies to protect against SYN flood attacks. SYN cookies are a technique that helps mitigate TCP SYN flood attacks by avoiding the need to track incomplete connections in a backlog queue. When enabled, the gateway can continue to establish legitimate connections even when under a SYN flood attack. This is a recommended security setting for internet-facing gateways."},"tcpTimeouts":{"$ref":"#/types/unifi:setting/USGTcpTimeouts:USGTcpTimeouts","description":"TCP connection timeout settings for various TCP connection states. These settings control how long the gateway maintains state information for TCP connections in different states before removing them from the connection tracking table. Proper timeout values balance resource usage with connection reliability. These settings are particularly relevant when \u003cspan pulumi-lang-nodejs=\"`timeoutSettingPreference`\" pulumi-lang-dotnet=\"`TimeoutSettingPreference`\" pulumi-lang-go=\"`timeoutSettingPreference`\" pulumi-lang-python=\"`timeout_setting_preference`\" pulumi-lang-yaml=\"`timeoutSettingPreference`\" pulumi-lang-java=\"`timeoutSettingPreference`\"\u003e`timeout_setting_preference`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"tftpModule":{"type":"boolean","description":"Enable the TFTP (Trivial File Transfer Protocol) helper module. This module allows TFTP connections to work properly through the gateway's firewall and NAT. TFTP is commonly used for firmware updates, configuration file transfers, and network booting of devices. The helper tracks TFTP connections and ensures return traffic is properly handled."},"timeoutSettingPreference":{"type":"string","description":"Determines how connection timeout values are configured. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - The gateway will automatically determine appropriate timeout values based on system defaults\n  * \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e - Use the manually specified timeout values for various connection types\n\nWhen set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e, you should specify values for the various timeout settings like \u003cspan pulumi-lang-nodejs=\"`tcpTimeouts`\" pulumi-lang-dotnet=\"`TcpTimeouts`\" pulumi-lang-go=\"`tcpTimeouts`\" pulumi-lang-python=\"`tcp_timeouts`\" pulumi-lang-yaml=\"`tcpTimeouts`\" pulumi-lang-java=\"`tcpTimeouts`\"\u003e`tcp_timeouts`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`udpStreamTimeout`\" pulumi-lang-dotnet=\"`UdpStreamTimeout`\" pulumi-lang-go=\"`udpStreamTimeout`\" pulumi-lang-python=\"`udp_stream_timeout`\" pulumi-lang-yaml=\"`udpStreamTimeout`\" pulumi-lang-java=\"`udpStreamTimeout`\"\u003e`udp_stream_timeout`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`udpOtherTimeout`\" pulumi-lang-dotnet=\"`UdpOtherTimeout`\" pulumi-lang-go=\"`udpOtherTimeout`\" pulumi-lang-python=\"`udp_other_timeout`\" pulumi-lang-yaml=\"`udpOtherTimeout`\" pulumi-lang-java=\"`udpOtherTimeout`\"\u003e`udp_other_timeout`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`icmpTimeout`\" pulumi-lang-dotnet=\"`IcmpTimeout`\" pulumi-lang-go=\"`icmpTimeout`\" pulumi-lang-python=\"`icmp_timeout`\" pulumi-lang-yaml=\"`icmpTimeout`\" pulumi-lang-java=\"`icmpTimeout`\"\u003e`icmp_timeout`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`otherTimeout`\" pulumi-lang-dotnet=\"`OtherTimeout`\" pulumi-lang-go=\"`otherTimeout`\" pulumi-lang-python=\"`other_timeout`\" pulumi-lang-yaml=\"`otherTimeout`\" pulumi-lang-java=\"`otherTimeout`\"\u003e`other_timeout`\u003c/span\u003e. Requires controller version 7.0 or later."},"udpOtherTimeout":{"type":"integer","description":"Timeout (in seconds) for general UDP connections. Since UDP is connectionless, this timeout determines how long the gateway maintains state information for UDP packets that don't match the criteria for stream connections. This applies to most short-lived UDP communications like DNS queries. Lower values free resources more quickly but may affect some applications that expect longer session persistence."},"udpStreamTimeout":{"type":"integer","description":"Timeout (in seconds) for UDP stream connections. This applies to UDP traffic patterns that resemble ongoing streams, such as VoIP calls, video streaming, or online gaming. The gateway identifies these based on traffic patterns and maintains state information longer than for regular UDP traffic. Higher values improve reliability for streaming applications but consume more connection tracking resources."},"unbindWanMonitors":{"type":"boolean","description":"Unbind WAN monitors to prevent unnecessary traffic. When enabled, the gateway will stop certain monitoring processes that periodically check WAN connectivity. This can reduce unnecessary traffic on metered connections or in environments where the monitoring traffic might trigger security alerts. However, disabling these monitors may affect the gateway's ability to detect and respond to WAN connectivity issues. Requires controller version 9.0 or later."},"upnp":{"$ref":"#/types/unifi:setting/USGUpnp:USGUpnp","description":"UPNP (Universal Plug and Play) configuration settings. UPNP allows compatible applications and devices to automatically configure port forwarding rules on the gateway without manual intervention. This is commonly used by gaming consoles, media servers, VoIP applications, and other network services that require incoming connections."},"upnpEnabled":{"type":"boolean","description":"Whether UPNP is enabled. When enabled, the gateway will automatically forward ports for UPNP-compatible devices"}},"required":["arpCacheBaseReachable","arpCacheTimeout","broadcastPing","dhcpRelay","dhcpRelayServers","dhcpdHostfileUpdate","dhcpdUseDnsmasq","dnsVerification","dnsmasqAllServers","echoServer","ftpModule","geoIpFilteringEnabled","greModule","h323Module","icmpTimeout","lldpEnableAll","mssClamp","mssClampMss","multicastDnsEnabled","offloadAccounting","offloadL2Blocking","offloadSch","otherTimeout","pptpModule","receiveRedirects","sendRedirects","sipModule","site","synCookies","tcpTimeouts","tftpModule","timeoutSettingPreference","udpOtherTimeout","udpStreamTimeout","unbindWanMonitors","upnpEnabled"],"inputProperties":{"arpCacheBaseReachable":{"type":"integer","description":"The base reachable timeout (in seconds) for ARP cache entries. This controls how long the gateway considers a MAC-to-IP mapping valid without needing to refresh it. Higher values reduce network traffic but may cause stale entries if devices change IP addresses frequently."},"arpCacheTimeout":{"type":"string","description":"The timeout strategy for ARP cache entries. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`normal`\" pulumi-lang-dotnet=\"`Normal`\" pulumi-lang-go=\"`normal`\" pulumi-lang-python=\"`normal`\" pulumi-lang-yaml=\"`normal`\" pulumi-lang-java=\"`normal`\"\u003e`normal`\u003c/span\u003e - Use system default timeouts\n  * `min-dhcp-lease` - Set ARP timeout to match the minimum DHCP lease time\n  * \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e - Use the custom timeout value specified in \u003cspan pulumi-lang-nodejs=\"`arpCacheBaseReachable`\" pulumi-lang-dotnet=\"`ArpCacheBaseReachable`\" pulumi-lang-go=\"`arpCacheBaseReachable`\" pulumi-lang-python=\"`arp_cache_base_reachable`\" pulumi-lang-yaml=\"`arpCacheBaseReachable`\" pulumi-lang-java=\"`arpCacheBaseReachable`\"\u003e`arp_cache_base_reachable`\u003c/span\u003e\n\nThis setting determines how long MAC-to-IP mappings are stored in the ARP cache before being refreshed."},"broadcastPing":{"type":"boolean","description":"Enable responding to broadcast ping requests (ICMP echo requests sent to the broadcast address). When enabled, the gateway will respond to pings sent to the broadcast address of the network (e.g., 192.168.1.255). This can be useful for network diagnostics but may also be used in certain denial-of-service attacks."},"dhcpRelay":{"$ref":"#/types/unifi:setting/USGDhcpRelay:USGDhcpRelay","description":"Advanced DHCP relay configuration settings. Controls how the gateway forwards DHCP requests to external servers and manages DHCP relay agent behavior. Use this block to fine-tune DHCP relay functionality beyond simply specifying relay servers."},"dhcpRelayServers":{"type":"array","items":{"type":"string"},"description":"List of up to 5 DHCP relay servers (specified by IP address) that will receive forwarded DHCP requests. This is useful when you want to use external DHCP servers instead of the built-in DHCP server on the USG/UDM. When configured, the gateway will forward DHCP discovery packets from clients to these external servers, allowing centralized IP address management across multiple networks. Example: `['192.168.1.5', '192.168.2.5']`","deprecationMessage":"This attribute is deprecated and will be removed in a future release. `dhcp_relay.servers` attribute will be introduced as a replacement."},"dhcpdHostfileUpdate":{"type":"boolean","description":"Enable updating the gateway's host files with DHCP client information. When enabled, the gateway will automatically add entries to its host file for each DHCP client, allowing hostname resolution for devices that receive IP addresses via DHCP. This improves name resolution on the local network."},"dhcpdUseDnsmasq":{"type":"boolean","description":"Use dnsmasq for DHCP services instead of the default DHCP server. Dnsmasq provides integrated DNS and DHCP functionality with additional features like DNS caching, DHCP static leases, and local domain name resolution. This can improve DNS resolution performance and provide more flexible DHCP options."},"dnsVerification":{"$ref":"#/types/unifi:setting/USGDnsVerification:USGDnsVerification","description":"DNS verification settings for validating DNS responses. This feature helps detect and prevent DNS spoofing attacks by verifying DNS responses against trusted DNS servers. When configured, the gateway can compare DNS responses with those from known trusted servers to identify potential tampering or poisoning attempts. Requires controller version 8.5 or later."},"dnsmasqAllServers":{"type":"boolean","description":"When enabled, dnsmasq will query all configured DNS servers simultaneously and use the fastest response. This can improve DNS resolution speed but may increase DNS traffic. By default, dnsmasq queries servers sequentially, only trying the next server if the current one fails to respond."},"echoServer":{"type":"string","description":"The hostname or IP address of a server to use for network echo tests. Echo tests send packets to this server and measure response times to evaluate network connectivity and performance. This can be used for network diagnostics and monitoring."},"ftpModule":{"type":"boolean","description":"Enable the FTP (File Transfer Protocol) helper module. This module allows the gateway to properly handle FTP connections through NAT by tracking the control channel and dynamically opening required data ports. Without this helper, passive FTP connections may fail when clients are behind NAT."},"geoIpFiltering":{"$ref":"#/types/unifi:setting/USGGeoIpFiltering:USGGeoIpFiltering","description":"Geographic IP filtering configuration that allows blocking or allowing traffic based on country of origin. This feature uses IP geolocation databases to identify the country associated with IP addresses and apply filtering rules. Useful for implementing country-specific access policies or blocking traffic from high-risk regions. Requires controller version 7.0 or later."},"greModule":{"type":"boolean","description":"Enable the GRE (Generic Routing Encapsulation) protocol helper module. This module allows proper handling of GRE tunneling protocol through the gateway's firewall. GRE is commonly used for VPN tunnels and other encapsulation needs. Required if you plan to use PPTP VPNs (see \u003cspan pulumi-lang-nodejs=\"`pptpModule`\" pulumi-lang-dotnet=\"`PptpModule`\" pulumi-lang-go=\"`pptpModule`\" pulumi-lang-python=\"`pptp_module`\" pulumi-lang-yaml=\"`pptpModule`\" pulumi-lang-java=\"`pptpModule`\"\u003e`pptp_module`\u003c/span\u003e)."},"h323Module":{"type":"boolean","description":"Enable the H.323 protocol helper module. H.323 is a standard for multimedia communications (audio, video, and data) over packet-based networks. This helper allows H.323-based applications like video conferencing systems to work properly through NAT by tracking connection details and opening required ports."},"icmpTimeout":{"type":"integer","description":"ICMP timeout in seconds for connection tracking. This controls how long the gateway maintains state information for ICMP (ping) packets in its connection tracking table. Higher values maintain ICMP connection state longer, while lower values reclaim resources more quickly but may affect some diagnostic tools."},"lldpEnableAll":{"type":"boolean","description":"Enable Link Layer Discovery Protocol (LLDP) on all interfaces. LLDP is a vendor-neutral protocol that allows network devices to advertise their identity, capabilities, and neighbors on a local network. When enabled, the gateway will both send and receive LLDP packets, facilitating network discovery and management tools."},"mssClamp":{"type":"string","description":"TCP Maximum Segment Size (MSS) clamping mode. MSS clamping adjusts the maximum segment size of TCP packets to prevent fragmentation issues when packets traverse networks with different MTU sizes. Valid values include:\n  * \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - Automatically determine appropriate MSS values based on interface MTUs\n  * \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e - Use the custom MSS value specified in \u003cspan pulumi-lang-nodejs=\"`mssClampMss`\" pulumi-lang-dotnet=\"`MssClampMss`\" pulumi-lang-go=\"`mssClampMss`\" pulumi-lang-python=\"`mss_clamp_mss`\" pulumi-lang-yaml=\"`mssClampMss`\" pulumi-lang-java=\"`mssClampMss`\"\u003e`mss_clamp_mss`\u003c/span\u003e\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - Do not perform MSS clamping\n\nThis setting is particularly important for VPN connections and networks with non-standard MTU sizes."},"mssClampMss":{"type":"integer","description":"Custom TCP Maximum Segment Size (MSS) value in bytes. This value is used when \u003cspan pulumi-lang-nodejs=\"`mssClamp`\" pulumi-lang-dotnet=\"`MssClamp`\" pulumi-lang-go=\"`mssClamp`\" pulumi-lang-python=\"`mss_clamp`\" pulumi-lang-yaml=\"`mssClamp`\" pulumi-lang-java=\"`mssClamp`\"\u003e`mss_clamp`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e. The MSS value should typically be set to the path MTU minus 40 bytes (for IPv4) or minus 60 bytes (for IPv6) to account for TCP/IP header overhead. Valid values range from 100 to 9999, with common values being 1460 (for standard 1500 MTU) or 1400 (for VPN tunnels)."},"multicastDnsEnabled":{"type":"boolean","description":"Enable multicast DNS (mDNS/Bonjour/Avahi) forwarding across VLANs. This allows devices to discover services (like printers, Chromecasts, Apple devices, etc.) even when they are on different networks or VLANs. When enabled, the gateway will forward mDNS packets between networks, facilitating cross-VLAN service discovery. Note: This setting is not supported on UniFi OS v7+ as it has been replaced by mDNS settings in the network configuration."},"offloadAccounting":{"type":"boolean","description":"Enable hardware accounting offload. When enabled, the gateway will use hardware acceleration for traffic accounting functions, reducing CPU load and potentially improving throughput for high-traffic environments. This setting may not be supported on all hardware models."},"offloadL2Blocking":{"type":"boolean","description":"Enable hardware offload for Layer 2 (L2) blocking functions. When enabled, the gateway will use hardware acceleration for blocking traffic at the data link layer (MAC address level), which can improve performance when implementing MAC-based filtering or isolation. This setting may not be supported on all hardware models."},"offloadSch":{"type":"boolean","description":"Enable hardware scheduling offload. When enabled, the gateway will use hardware acceleration for packet scheduling functions, which can improve QoS (Quality of Service) performance and throughput for prioritized traffic. This setting may not be supported on all hardware models and may affect other hardware offload capabilities."},"otherTimeout":{"type":"integer","description":"Timeout (in seconds) for connection tracking of protocols other than TCP, UDP, and ICMP. This controls how long the gateway maintains state information for connections using other protocols. Higher values maintain connection state longer, while lower values reclaim resources more quickly but may affect some applications using non-standard protocols."},"pptpModule":{"type":"boolean","description":"Enable the PPTP (Point-to-Point Tunneling Protocol) helper module. This module allows PPTP VPN connections to work properly through the gateway's firewall and NAT. PPTP uses GRE for tunneling, so the \u003cspan pulumi-lang-nodejs=\"`greModule`\" pulumi-lang-dotnet=\"`GreModule`\" pulumi-lang-go=\"`greModule`\" pulumi-lang-python=\"`gre_module`\" pulumi-lang-yaml=\"`greModule`\" pulumi-lang-java=\"`greModule`\"\u003e`gre_module`\u003c/span\u003e must also be enabled for PPTP to function correctly. Note that PPTP has known security vulnerabilities and more secure VPN protocols are generally recommended."},"receiveRedirects":{"type":"boolean","description":"Enable accepting ICMP redirect messages. ICMP redirects are messages sent by routers to inform hosts of better routes to specific destinations. When enabled, the gateway will update its routing table based on these messages. While useful for route optimization, this can potentially be exploited for man-in-the-middle attacks, so it's often disabled in security-sensitive environments."},"sendRedirects":{"type":"boolean","description":"Enable sending ICMP redirect messages. When enabled, the gateway will send ICMP redirect messages to hosts on the local network to inform them of better routes to specific destinations. This can help optimize network traffic but is typically only needed when the gateway has multiple interfaces on the same subnet or in complex routing scenarios."},"sipModule":{"type":"boolean","description":"Enable the SIP (Session Initiation Protocol) helper module. SIP is used for initiating, maintaining, and terminating real-time sessions for voice, video, and messaging applications (VoIP, video conferencing). This helper allows SIP-based applications to work correctly through NAT by tracking SIP connections and dynamically opening the necessary ports for media streams."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"synCookies":{"type":"boolean","description":"Enable SYN cookies to protect against SYN flood attacks. SYN cookies are a technique that helps mitigate TCP SYN flood attacks by avoiding the need to track incomplete connections in a backlog queue. When enabled, the gateway can continue to establish legitimate connections even when under a SYN flood attack. This is a recommended security setting for internet-facing gateways."},"tcpTimeouts":{"$ref":"#/types/unifi:setting/USGTcpTimeouts:USGTcpTimeouts","description":"TCP connection timeout settings for various TCP connection states. These settings control how long the gateway maintains state information for TCP connections in different states before removing them from the connection tracking table. Proper timeout values balance resource usage with connection reliability. These settings are particularly relevant when \u003cspan pulumi-lang-nodejs=\"`timeoutSettingPreference`\" pulumi-lang-dotnet=\"`TimeoutSettingPreference`\" pulumi-lang-go=\"`timeoutSettingPreference`\" pulumi-lang-python=\"`timeout_setting_preference`\" pulumi-lang-yaml=\"`timeoutSettingPreference`\" pulumi-lang-java=\"`timeoutSettingPreference`\"\u003e`timeout_setting_preference`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"tftpModule":{"type":"boolean","description":"Enable the TFTP (Trivial File Transfer Protocol) helper module. This module allows TFTP connections to work properly through the gateway's firewall and NAT. TFTP is commonly used for firmware updates, configuration file transfers, and network booting of devices. The helper tracks TFTP connections and ensures return traffic is properly handled."},"timeoutSettingPreference":{"type":"string","description":"Determines how connection timeout values are configured. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - The gateway will automatically determine appropriate timeout values based on system defaults\n  * \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e - Use the manually specified timeout values for various connection types\n\nWhen set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e, you should specify values for the various timeout settings like \u003cspan pulumi-lang-nodejs=\"`tcpTimeouts`\" pulumi-lang-dotnet=\"`TcpTimeouts`\" pulumi-lang-go=\"`tcpTimeouts`\" pulumi-lang-python=\"`tcp_timeouts`\" pulumi-lang-yaml=\"`tcpTimeouts`\" pulumi-lang-java=\"`tcpTimeouts`\"\u003e`tcp_timeouts`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`udpStreamTimeout`\" pulumi-lang-dotnet=\"`UdpStreamTimeout`\" pulumi-lang-go=\"`udpStreamTimeout`\" pulumi-lang-python=\"`udp_stream_timeout`\" pulumi-lang-yaml=\"`udpStreamTimeout`\" pulumi-lang-java=\"`udpStreamTimeout`\"\u003e`udp_stream_timeout`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`udpOtherTimeout`\" pulumi-lang-dotnet=\"`UdpOtherTimeout`\" pulumi-lang-go=\"`udpOtherTimeout`\" pulumi-lang-python=\"`udp_other_timeout`\" pulumi-lang-yaml=\"`udpOtherTimeout`\" pulumi-lang-java=\"`udpOtherTimeout`\"\u003e`udp_other_timeout`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`icmpTimeout`\" pulumi-lang-dotnet=\"`IcmpTimeout`\" pulumi-lang-go=\"`icmpTimeout`\" pulumi-lang-python=\"`icmp_timeout`\" pulumi-lang-yaml=\"`icmpTimeout`\" pulumi-lang-java=\"`icmpTimeout`\"\u003e`icmp_timeout`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`otherTimeout`\" pulumi-lang-dotnet=\"`OtherTimeout`\" pulumi-lang-go=\"`otherTimeout`\" pulumi-lang-python=\"`other_timeout`\" pulumi-lang-yaml=\"`otherTimeout`\" pulumi-lang-java=\"`otherTimeout`\"\u003e`other_timeout`\u003c/span\u003e. Requires controller version 7.0 or later."},"udpOtherTimeout":{"type":"integer","description":"Timeout (in seconds) for general UDP connections. Since UDP is connectionless, this timeout determines how long the gateway maintains state information for UDP packets that don't match the criteria for stream connections. This applies to most short-lived UDP communications like DNS queries. Lower values free resources more quickly but may affect some applications that expect longer session persistence."},"udpStreamTimeout":{"type":"integer","description":"Timeout (in seconds) for UDP stream connections. This applies to UDP traffic patterns that resemble ongoing streams, such as VoIP calls, video streaming, or online gaming. The gateway identifies these based on traffic patterns and maintains state information longer than for regular UDP traffic. Higher values improve reliability for streaming applications but consume more connection tracking resources."},"unbindWanMonitors":{"type":"boolean","description":"Unbind WAN monitors to prevent unnecessary traffic. When enabled, the gateway will stop certain monitoring processes that periodically check WAN connectivity. This can reduce unnecessary traffic on metered connections or in environments where the monitoring traffic might trigger security alerts. However, disabling these monitors may affect the gateway's ability to detect and respond to WAN connectivity issues. Requires controller version 9.0 or later."},"upnp":{"$ref":"#/types/unifi:setting/USGUpnp:USGUpnp","description":"UPNP (Universal Plug and Play) configuration settings. UPNP allows compatible applications and devices to automatically configure port forwarding rules on the gateway without manual intervention. This is commonly used by gaming consoles, media servers, VoIP applications, and other network services that require incoming connections."}},"stateInputs":{"description":"Input properties used for looking up and filtering USG resources.\n","properties":{"arpCacheBaseReachable":{"type":"integer","description":"The base reachable timeout (in seconds) for ARP cache entries. This controls how long the gateway considers a MAC-to-IP mapping valid without needing to refresh it. Higher values reduce network traffic but may cause stale entries if devices change IP addresses frequently."},"arpCacheTimeout":{"type":"string","description":"The timeout strategy for ARP cache entries. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`normal`\" pulumi-lang-dotnet=\"`Normal`\" pulumi-lang-go=\"`normal`\" pulumi-lang-python=\"`normal`\" pulumi-lang-yaml=\"`normal`\" pulumi-lang-java=\"`normal`\"\u003e`normal`\u003c/span\u003e - Use system default timeouts\n  * `min-dhcp-lease` - Set ARP timeout to match the minimum DHCP lease time\n  * \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e - Use the custom timeout value specified in \u003cspan pulumi-lang-nodejs=\"`arpCacheBaseReachable`\" pulumi-lang-dotnet=\"`ArpCacheBaseReachable`\" pulumi-lang-go=\"`arpCacheBaseReachable`\" pulumi-lang-python=\"`arp_cache_base_reachable`\" pulumi-lang-yaml=\"`arpCacheBaseReachable`\" pulumi-lang-java=\"`arpCacheBaseReachable`\"\u003e`arp_cache_base_reachable`\u003c/span\u003e\n\nThis setting determines how long MAC-to-IP mappings are stored in the ARP cache before being refreshed."},"broadcastPing":{"type":"boolean","description":"Enable responding to broadcast ping requests (ICMP echo requests sent to the broadcast address). When enabled, the gateway will respond to pings sent to the broadcast address of the network (e.g., 192.168.1.255). This can be useful for network diagnostics but may also be used in certain denial-of-service attacks."},"dhcpRelay":{"$ref":"#/types/unifi:setting/USGDhcpRelay:USGDhcpRelay","description":"Advanced DHCP relay configuration settings. Controls how the gateway forwards DHCP requests to external servers and manages DHCP relay agent behavior. Use this block to fine-tune DHCP relay functionality beyond simply specifying relay servers."},"dhcpRelayServers":{"type":"array","items":{"type":"string"},"description":"List of up to 5 DHCP relay servers (specified by IP address) that will receive forwarded DHCP requests. This is useful when you want to use external DHCP servers instead of the built-in DHCP server on the USG/UDM. When configured, the gateway will forward DHCP discovery packets from clients to these external servers, allowing centralized IP address management across multiple networks. Example: `['192.168.1.5', '192.168.2.5']`","deprecationMessage":"This attribute is deprecated and will be removed in a future release. `dhcp_relay.servers` attribute will be introduced as a replacement."},"dhcpdHostfileUpdate":{"type":"boolean","description":"Enable updating the gateway's host files with DHCP client information. When enabled, the gateway will automatically add entries to its host file for each DHCP client, allowing hostname resolution for devices that receive IP addresses via DHCP. This improves name resolution on the local network."},"dhcpdUseDnsmasq":{"type":"boolean","description":"Use dnsmasq for DHCP services instead of the default DHCP server. Dnsmasq provides integrated DNS and DHCP functionality with additional features like DNS caching, DHCP static leases, and local domain name resolution. This can improve DNS resolution performance and provide more flexible DHCP options."},"dnsVerification":{"$ref":"#/types/unifi:setting/USGDnsVerification:USGDnsVerification","description":"DNS verification settings for validating DNS responses. This feature helps detect and prevent DNS spoofing attacks by verifying DNS responses against trusted DNS servers. When configured, the gateway can compare DNS responses with those from known trusted servers to identify potential tampering or poisoning attempts. Requires controller version 8.5 or later."},"dnsmasqAllServers":{"type":"boolean","description":"When enabled, dnsmasq will query all configured DNS servers simultaneously and use the fastest response. This can improve DNS resolution speed but may increase DNS traffic. By default, dnsmasq queries servers sequentially, only trying the next server if the current one fails to respond."},"echoServer":{"type":"string","description":"The hostname or IP address of a server to use for network echo tests. Echo tests send packets to this server and measure response times to evaluate network connectivity and performance. This can be used for network diagnostics and monitoring."},"ftpModule":{"type":"boolean","description":"Enable the FTP (File Transfer Protocol) helper module. This module allows the gateway to properly handle FTP connections through NAT by tracking the control channel and dynamically opening required data ports. Without this helper, passive FTP connections may fail when clients are behind NAT."},"geoIpFiltering":{"$ref":"#/types/unifi:setting/USGGeoIpFiltering:USGGeoIpFiltering","description":"Geographic IP filtering configuration that allows blocking or allowing traffic based on country of origin. This feature uses IP geolocation databases to identify the country associated with IP addresses and apply filtering rules. Useful for implementing country-specific access policies or blocking traffic from high-risk regions. Requires controller version 7.0 or later."},"geoIpFilteringEnabled":{"type":"boolean","description":"Whether Geo IP Filtering is enabled. When enabled, the gateway will apply the specified country-based"},"greModule":{"type":"boolean","description":"Enable the GRE (Generic Routing Encapsulation) protocol helper module. This module allows proper handling of GRE tunneling protocol through the gateway's firewall. GRE is commonly used for VPN tunnels and other encapsulation needs. Required if you plan to use PPTP VPNs (see \u003cspan pulumi-lang-nodejs=\"`pptpModule`\" pulumi-lang-dotnet=\"`PptpModule`\" pulumi-lang-go=\"`pptpModule`\" pulumi-lang-python=\"`pptp_module`\" pulumi-lang-yaml=\"`pptpModule`\" pulumi-lang-java=\"`pptpModule`\"\u003e`pptp_module`\u003c/span\u003e)."},"h323Module":{"type":"boolean","description":"Enable the H.323 protocol helper module. H.323 is a standard for multimedia communications (audio, video, and data) over packet-based networks. This helper allows H.323-based applications like video conferencing systems to work properly through NAT by tracking connection details and opening required ports."},"icmpTimeout":{"type":"integer","description":"ICMP timeout in seconds for connection tracking. This controls how long the gateway maintains state information for ICMP (ping) packets in its connection tracking table. Higher values maintain ICMP connection state longer, while lower values reclaim resources more quickly but may affect some diagnostic tools."},"lldpEnableAll":{"type":"boolean","description":"Enable Link Layer Discovery Protocol (LLDP) on all interfaces. LLDP is a vendor-neutral protocol that allows network devices to advertise their identity, capabilities, and neighbors on a local network. When enabled, the gateway will both send and receive LLDP packets, facilitating network discovery and management tools."},"mssClamp":{"type":"string","description":"TCP Maximum Segment Size (MSS) clamping mode. MSS clamping adjusts the maximum segment size of TCP packets to prevent fragmentation issues when packets traverse networks with different MTU sizes. Valid values include:\n  * \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - Automatically determine appropriate MSS values based on interface MTUs\n  * \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e - Use the custom MSS value specified in \u003cspan pulumi-lang-nodejs=\"`mssClampMss`\" pulumi-lang-dotnet=\"`MssClampMss`\" pulumi-lang-go=\"`mssClampMss`\" pulumi-lang-python=\"`mss_clamp_mss`\" pulumi-lang-yaml=\"`mssClampMss`\" pulumi-lang-java=\"`mssClampMss`\"\u003e`mss_clamp_mss`\u003c/span\u003e\n  * \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e - Do not perform MSS clamping\n\nThis setting is particularly important for VPN connections and networks with non-standard MTU sizes."},"mssClampMss":{"type":"integer","description":"Custom TCP Maximum Segment Size (MSS) value in bytes. This value is used when \u003cspan pulumi-lang-nodejs=\"`mssClamp`\" pulumi-lang-dotnet=\"`MssClamp`\" pulumi-lang-go=\"`mssClamp`\" pulumi-lang-python=\"`mss_clamp`\" pulumi-lang-yaml=\"`mssClamp`\" pulumi-lang-java=\"`mssClamp`\"\u003e`mss_clamp`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e. The MSS value should typically be set to the path MTU minus 40 bytes (for IPv4) or minus 60 bytes (for IPv6) to account for TCP/IP header overhead. Valid values range from 100 to 9999, with common values being 1460 (for standard 1500 MTU) or 1400 (for VPN tunnels)."},"multicastDnsEnabled":{"type":"boolean","description":"Enable multicast DNS (mDNS/Bonjour/Avahi) forwarding across VLANs. This allows devices to discover services (like printers, Chromecasts, Apple devices, etc.) even when they are on different networks or VLANs. When enabled, the gateway will forward mDNS packets between networks, facilitating cross-VLAN service discovery. Note: This setting is not supported on UniFi OS v7+ as it has been replaced by mDNS settings in the network configuration."},"offloadAccounting":{"type":"boolean","description":"Enable hardware accounting offload. When enabled, the gateway will use hardware acceleration for traffic accounting functions, reducing CPU load and potentially improving throughput for high-traffic environments. This setting may not be supported on all hardware models."},"offloadL2Blocking":{"type":"boolean","description":"Enable hardware offload for Layer 2 (L2) blocking functions. When enabled, the gateway will use hardware acceleration for blocking traffic at the data link layer (MAC address level), which can improve performance when implementing MAC-based filtering or isolation. This setting may not be supported on all hardware models."},"offloadSch":{"type":"boolean","description":"Enable hardware scheduling offload. When enabled, the gateway will use hardware acceleration for packet scheduling functions, which can improve QoS (Quality of Service) performance and throughput for prioritized traffic. This setting may not be supported on all hardware models and may affect other hardware offload capabilities."},"otherTimeout":{"type":"integer","description":"Timeout (in seconds) for connection tracking of protocols other than TCP, UDP, and ICMP. This controls how long the gateway maintains state information for connections using other protocols. Higher values maintain connection state longer, while lower values reclaim resources more quickly but may affect some applications using non-standard protocols."},"pptpModule":{"type":"boolean","description":"Enable the PPTP (Point-to-Point Tunneling Protocol) helper module. This module allows PPTP VPN connections to work properly through the gateway's firewall and NAT. PPTP uses GRE for tunneling, so the \u003cspan pulumi-lang-nodejs=\"`greModule`\" pulumi-lang-dotnet=\"`GreModule`\" pulumi-lang-go=\"`greModule`\" pulumi-lang-python=\"`gre_module`\" pulumi-lang-yaml=\"`greModule`\" pulumi-lang-java=\"`greModule`\"\u003e`gre_module`\u003c/span\u003e must also be enabled for PPTP to function correctly. Note that PPTP has known security vulnerabilities and more secure VPN protocols are generally recommended."},"receiveRedirects":{"type":"boolean","description":"Enable accepting ICMP redirect messages. ICMP redirects are messages sent by routers to inform hosts of better routes to specific destinations. When enabled, the gateway will update its routing table based on these messages. While useful for route optimization, this can potentially be exploited for man-in-the-middle attacks, so it's often disabled in security-sensitive environments."},"sendRedirects":{"type":"boolean","description":"Enable sending ICMP redirect messages. When enabled, the gateway will send ICMP redirect messages to hosts on the local network to inform them of better routes to specific destinations. This can help optimize network traffic but is typically only needed when the gateway has multiple interfaces on the same subnet or in complex routing scenarios."},"sipModule":{"type":"boolean","description":"Enable the SIP (Session Initiation Protocol) helper module. SIP is used for initiating, maintaining, and terminating real-time sessions for voice, video, and messaging applications (VoIP, video conferencing). This helper allows SIP-based applications to work correctly through NAT by tracking SIP connections and dynamically opening the necessary ports for media streams."},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used."},"synCookies":{"type":"boolean","description":"Enable SYN cookies to protect against SYN flood attacks. SYN cookies are a technique that helps mitigate TCP SYN flood attacks by avoiding the need to track incomplete connections in a backlog queue. When enabled, the gateway can continue to establish legitimate connections even when under a SYN flood attack. This is a recommended security setting for internet-facing gateways."},"tcpTimeouts":{"$ref":"#/types/unifi:setting/USGTcpTimeouts:USGTcpTimeouts","description":"TCP connection timeout settings for various TCP connection states. These settings control how long the gateway maintains state information for TCP connections in different states before removing them from the connection tracking table. Proper timeout values balance resource usage with connection reliability. These settings are particularly relevant when \u003cspan pulumi-lang-nodejs=\"`timeoutSettingPreference`\" pulumi-lang-dotnet=\"`TimeoutSettingPreference`\" pulumi-lang-go=\"`timeoutSettingPreference`\" pulumi-lang-python=\"`timeout_setting_preference`\" pulumi-lang-yaml=\"`timeoutSettingPreference`\" pulumi-lang-java=\"`timeoutSettingPreference`\"\u003e`timeout_setting_preference`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e."},"tftpModule":{"type":"boolean","description":"Enable the TFTP (Trivial File Transfer Protocol) helper module. This module allows TFTP connections to work properly through the gateway's firewall and NAT. TFTP is commonly used for firmware updates, configuration file transfers, and network booting of devices. The helper tracks TFTP connections and ensures return traffic is properly handled."},"timeoutSettingPreference":{"type":"string","description":"Determines how connection timeout values are configured. Valid values are:\n  * \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e - The gateway will automatically determine appropriate timeout values based on system defaults\n  * \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e - Use the manually specified timeout values for various connection types\n\nWhen set to \u003cspan pulumi-lang-nodejs=\"`manual`\" pulumi-lang-dotnet=\"`Manual`\" pulumi-lang-go=\"`manual`\" pulumi-lang-python=\"`manual`\" pulumi-lang-yaml=\"`manual`\" pulumi-lang-java=\"`manual`\"\u003e`manual`\u003c/span\u003e, you should specify values for the various timeout settings like \u003cspan pulumi-lang-nodejs=\"`tcpTimeouts`\" pulumi-lang-dotnet=\"`TcpTimeouts`\" pulumi-lang-go=\"`tcpTimeouts`\" pulumi-lang-python=\"`tcp_timeouts`\" pulumi-lang-yaml=\"`tcpTimeouts`\" pulumi-lang-java=\"`tcpTimeouts`\"\u003e`tcp_timeouts`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`udpStreamTimeout`\" pulumi-lang-dotnet=\"`UdpStreamTimeout`\" pulumi-lang-go=\"`udpStreamTimeout`\" pulumi-lang-python=\"`udp_stream_timeout`\" pulumi-lang-yaml=\"`udpStreamTimeout`\" pulumi-lang-java=\"`udpStreamTimeout`\"\u003e`udp_stream_timeout`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`udpOtherTimeout`\" pulumi-lang-dotnet=\"`UdpOtherTimeout`\" pulumi-lang-go=\"`udpOtherTimeout`\" pulumi-lang-python=\"`udp_other_timeout`\" pulumi-lang-yaml=\"`udpOtherTimeout`\" pulumi-lang-java=\"`udpOtherTimeout`\"\u003e`udp_other_timeout`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`icmpTimeout`\" pulumi-lang-dotnet=\"`IcmpTimeout`\" pulumi-lang-go=\"`icmpTimeout`\" pulumi-lang-python=\"`icmp_timeout`\" pulumi-lang-yaml=\"`icmpTimeout`\" pulumi-lang-java=\"`icmpTimeout`\"\u003e`icmp_timeout`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`otherTimeout`\" pulumi-lang-dotnet=\"`OtherTimeout`\" pulumi-lang-go=\"`otherTimeout`\" pulumi-lang-python=\"`other_timeout`\" pulumi-lang-yaml=\"`otherTimeout`\" pulumi-lang-java=\"`otherTimeout`\"\u003e`other_timeout`\u003c/span\u003e. Requires controller version 7.0 or later."},"udpOtherTimeout":{"type":"integer","description":"Timeout (in seconds) for general UDP connections. Since UDP is connectionless, this timeout determines how long the gateway maintains state information for UDP packets that don't match the criteria for stream connections. This applies to most short-lived UDP communications like DNS queries. Lower values free resources more quickly but may affect some applications that expect longer session persistence."},"udpStreamTimeout":{"type":"integer","description":"Timeout (in seconds) for UDP stream connections. This applies to UDP traffic patterns that resemble ongoing streams, such as VoIP calls, video streaming, or online gaming. The gateway identifies these based on traffic patterns and maintains state information longer than for regular UDP traffic. Higher values improve reliability for streaming applications but consume more connection tracking resources."},"unbindWanMonitors":{"type":"boolean","description":"Unbind WAN monitors to prevent unnecessary traffic. When enabled, the gateway will stop certain monitoring processes that periodically check WAN connectivity. This can reduce unnecessary traffic on metered connections or in environments where the monitoring traffic might trigger security alerts. However, disabling these monitors may affect the gateway's ability to detect and respond to WAN connectivity issues. Requires controller version 9.0 or later."},"upnp":{"$ref":"#/types/unifi:setting/USGUpnp:USGUpnp","description":"UPNP (Universal Plug and Play) configuration settings. UPNP allows compatible applications and devices to automatically configure port forwarding rules on the gateway without manual intervention. This is commonly used by gaming consoles, media servers, VoIP applications, and other network services that require incoming connections."},"upnpEnabled":{"type":"boolean","description":"Whether UPNP is enabled. When enabled, the gateway will automatically forward ports for UPNP-compatible devices"}},"type":"object"}},"unifi:setting/usw:Usw":{"description":"Manages UniFi Switch (USW) settings for a UniFi site. These settings control global switch behaviors such as DHCP snooping.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst example = new unifi.setting.Usw(\"example\", {dhcpSnoop: true});\n```\n```python\nimport pulumi\nimport pulumiverse_unifi as unifi\n\nexample = unifi.setting.Usw(\"example\", dhcp_snoop=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Unifi.Setting.Usw(\"example\", new()\n    {\n        DhcpSnoop = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/setting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := setting.NewUsw(ctx, \"example\", \u0026setting.UswArgs{\n\t\t\tDhcpSnoop: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumiverse.unifi.setting.Usw;\nimport com.pulumiverse.unifi.setting.UswArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new Usw(\"example\", UswArgs.builder()\n            .dhcpSnoop(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: unifi:setting:Usw\n    properties:\n      dhcpSnoop: true # Specify the site (optional, defaults to site configured in provider, otherwise \"default\")\n      #   # site = \"default\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"dhcpSnoop":{"type":"boolean","description":"Whether DHCP snooping is enabled. DHCP snooping is a security feature that filters untrusted DHCP messages and builds a binding database of valid hosts.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"required":["dhcpSnoop","site"],"inputProperties":{"dhcpSnoop":{"type":"boolean","description":"Whether DHCP snooping is enabled. DHCP snooping is a security feature that filters untrusted DHCP messages and builds a binding database of valid hosts.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"requiredInputs":["dhcpSnoop"],"stateInputs":{"description":"Input properties used for looking up and filtering Usw resources.\n","properties":{"dhcpSnoop":{"type":"boolean","description":"Whether DHCP snooping is enabled. DHCP snooping is a security feature that filters untrusted DHCP messages and builds a binding database of valid hosts.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"type":"object"}}},"functions":{"pulumi:providers:unifi/terraformConfig":{"description":"This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider.","inputs":{"properties":{"__self__":{"type":"ref","$ref":"#/provider"}},"type":"pulumi:providers:unifi/terraformConfig","required":["__self__"]},"outputs":{"properties":{"result":{"additionalProperties":{"$ref":"pulumi.json#/Any"},"type":"object"}},"required":["result"],"type":"object"}},"unifi:dns/getRecord:getRecord":{"description":"Retrieves information about a specific DNS record configured in your UniFi network. This data source allows you to look up DNS records by either their name or record content. It's particularly useful for validating existing DNS configurations or referencing DNS records in other resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst byName = unifi.dns.getRecord({\n    name: \"example.mydomain.com\",\n});\nconst byRecord = unifi.dns.getRecord({\n    value: \"192.168.0.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_unifi as unifi\n\nby_name = unifi.dns.get_record(name=\"example.mydomain.com\")\nby_record = unifi.dns.get_record(value=\"192.168.0.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var byName = Unifi.Dns.GetRecord.Invoke(new()\n    {\n        Name = \"example.mydomain.com\",\n    });\n\n    var byRecord = Unifi.Dns.GetRecord.Invoke(new()\n    {\n        Value = \"192.168.0.1\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/dns\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dns.LookupRecord(ctx, \u0026dns.LookupRecordArgs{\n\t\t\tName: pulumi.StringRef(\"example.mydomain.com\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dns.LookupRecord(ctx, \u0026dns.LookupRecordArgs{\n\t\t\tValue: pulumi.StringRef(\"192.168.0.1\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.unifi.dns.DnsFunctions;\nimport com.pulumi.unifi.dns.inputs.GetRecordArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var byName = DnsFunctions.getRecord(GetRecordArgs.builder()\n            .name(\"example.mydomain.com\")\n            .build());\n\n        final var byRecord = DnsFunctions.getRecord(GetRecordArgs.builder()\n            .value(\"192.168.0.1\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  byName:\n    fn::invoke:\n      function: unifi:dns:getRecord\n      arguments:\n        name: example.mydomain.com\n  byRecord:\n    fn::invoke:\n      function: unifi:dns:getRecord\n      arguments:\n        value: 192.168.0.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getRecord.\n","properties":{"name":{"type":"string","description":"DNS record name.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"},"value":{"type":"string","description":"DNS record content.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getRecord.\n","properties":{"enabled":{"description":"Whether the DNS record is enabled.\n","type":"boolean"},"id":{"description":"The unique identifier of this resource.\n","type":"string"},"name":{"description":"DNS record name.\n","type":"string"},"port":{"description":"The port of the DNS record.\n","type":"integer"},"priority":{"description":"Priority of the DNS records. Present only for MX and SRV records; unused by other record types.\n","type":"integer"},"site":{"description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n","type":"string"},"ttl":{"description":"Time To Live (TTL) of the DNS record in seconds. Setting to 0 means 'automatic'.\n","type":"integer"},"type":{"description":"The type of the DNS record.\n","type":"string"},"value":{"description":"DNS record content.\n","type":"string"},"weight":{"description":"A numeric value indicating the relative weight of the record.\n","type":"integer"}},"required":["enabled","id","name","port","priority","value","site","ttl","type","weight"],"type":"object"}},"unifi:dns/getRecords:getRecords":{"description":"Retrieves information about a all DNS records.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst _default = unifi.dns.getRecords({});\n```\n```python\nimport pulumi\nimport pulumi_unifi as unifi\n\ndefault = unifi.dns.get_records()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var @default = Unifi.Dns.GetRecords.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/dns\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dns.LookupRecords(ctx, \u0026dns.LookupRecordsArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.unifi.dns.DnsFunctions;\nimport com.pulumi.unifi.dns.inputs.GetRecordsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var default = DnsFunctions.getRecords(GetRecordsArgs.builder()\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  default:\n    fn::invoke:\n      function: unifi:dns:getRecords\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getRecords.\n","properties":{"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getRecords.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"results":{"description":"The list of DNS records.\n","items":{"$ref":"#/types/unifi:dns/getRecordsResult:getRecordsResult"},"type":"array"},"site":{"description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n","type":"string"}},"required":["results","site","id"],"type":"object"}},"unifi:firewall/getZone:getZone":{"description":"The \u003cspan pulumi-lang-nodejs=\"`unifi.firewall.Zone`\" pulumi-lang-dotnet=\"`unifi.firewall.Zone`\" pulumi-lang-go=\"`firewall.Zone`\" pulumi-lang-python=\"`firewall.Zone`\" pulumi-lang-yaml=\"`unifi.firewall.Zone`\" pulumi-lang-java=\"`unifi.firewall.Zone`\"\u003e`unifi.firewall.Zone`\u003c/span\u003e datsources allows retrieving existing firewall zone details from the UniFi controller by the zone name.\n","inputs":{"description":"A collection of arguments for invoking getZone.\n","properties":{"name":{"type":"string","description":"The name of the firewall zone.\n"},"site":{"type":"string","description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getZone.\n","properties":{"id":{"description":"The unique identifier of this resource.\n","type":"string"},"name":{"description":"The name of the firewall zone.\n","type":"string"},"networks":{"description":"List of network IDs that this firewall zone contains.\n","items":{"type":"string"},"type":"array"},"site":{"description":"The name of the UniFi site where this resource should be applied. If not specified, the default site will be used.\n","type":"string"}},"required":["id","name","networks","site"],"type":"object"}},"unifi:iam/getGroup:getGroup":{"description":"\u003cspan pulumi-lang-nodejs=\"`unifi.iam.Group`\" pulumi-lang-dotnet=\"`unifi.iam.Group`\" pulumi-lang-go=\"`iam.Group`\" pulumi-lang-python=\"`iam.Group`\" pulumi-lang-yaml=\"`unifi.iam.Group`\" pulumi-lang-java=\"`unifi.iam.Group`\"\u003e`unifi.iam.Group`\u003c/span\u003e data source can be used to retrieve the ID for a user group by name.\n","inputs":{"description":"A collection of arguments for invoking getGroup.\n","properties":{"name":{"type":"string","description":"The name of the user group to look up. Defaults to `Default`.\n"},"site":{"type":"string","description":"The name of the site the user group is associated with.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getGroup.\n","properties":{"id":{"description":"The ID of this AP group.\n","type":"string"},"name":{"description":"The name of the user group to look up. Defaults to `Default`.\n","type":"string"},"qosRateMaxDown":{"type":"integer"},"qosRateMaxUp":{"type":"integer"},"site":{"description":"The name of the site the user group is associated with.\n","type":"string"}},"required":["id","qosRateMaxDown","qosRateMaxUp","site"],"type":"object"}},"unifi:iam/getUser:getUser":{"description":"\u003cspan pulumi-lang-nodejs=\"`unifi.iam.User`\" pulumi-lang-dotnet=\"`unifi.iam.User`\" pulumi-lang-go=\"`iam.User`\" pulumi-lang-python=\"`iam.User`\" pulumi-lang-yaml=\"`unifi.iam.User`\" pulumi-lang-java=\"`unifi.iam.User`\"\u003e`unifi.iam.User`\u003c/span\u003e retrieves properties of a user (or \"client\" in the UI) of the network by MAC address.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst client = unifi.iam.getUser({\n    mac: \"01:23:45:67:89:ab\",\n});\n```\n```python\nimport pulumi\nimport pulumi_unifi as unifi\n\nclient = unifi.iam.get_user(mac=\"01:23:45:67:89:ab\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var client = Unifi.IAM.GetUser.Invoke(new()\n    {\n        Mac = \"01:23:45:67:89:ab\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/iam\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.LookupUser(ctx, \u0026iam.LookupUserArgs{\n\t\t\tMac: \"01:23:45:67:89:ab\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.unifi.iam.IamFunctions;\nimport com.pulumi.unifi.iam.inputs.GetUserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var client = IamFunctions.getUser(GetUserArgs.builder()\n            .mac(\"01:23:45:67:89:ab\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  client:\n    fn::invoke:\n      function: unifi:iam:getUser\n      arguments:\n        mac: 01:23:45:67:89:ab\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getUser.\n","properties":{"mac":{"type":"string","description":"The MAC address of the user.\n"},"site":{"type":"string","description":"The name of the site the user is associated with.\n"}},"type":"object","required":["mac"]},"outputs":{"description":"A collection of values returned by getUser.\n","properties":{"blocked":{"description":"Specifies whether this user should be blocked from the network.\n","type":"boolean"},"devIdOverride":{"description":"Override the device fingerprint.\n","type":"integer"},"fixedIp":{"description":"Fixed IPv4 address set for this user.\n","type":"string"},"hostname":{"description":"The hostname of the user.\n","type":"string"},"id":{"description":"The ID of the user.\n","type":"string"},"ip":{"description":"The IP address of the user.\n","type":"string"},"localDnsRecord":{"description":"The local DNS record for this user.\n","type":"string"},"mac":{"description":"The MAC address of the user.\n","type":"string"},"name":{"description":"The name of the user.\n","type":"string"},"networkId":{"description":"The network ID for this user.\n","type":"string"},"note":{"description":"A note with additional information for the user.\n","type":"string"},"site":{"description":"The name of the site the user is associated with.\n","type":"string"},"userGroupId":{"description":"The user group ID for the user.\n","type":"string"}},"required":["blocked","devIdOverride","fixedIp","hostname","id","ip","localDnsRecord","mac","name","networkId","note","site","userGroupId"],"type":"object"}},"unifi:index/getAccount:getAccount":{"description":"unifi_account data source can be used to retrieve RADIUS user accounts\n","inputs":{"description":"A collection of arguments for invoking getAccount.\n","properties":{"name":{"type":"string","description":"The name of the account to look up\n"},"site":{"type":"string","description":"The name of the site the account is associated with.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getAccount.\n","properties":{"id":{"description":"The ID of this account.\n","type":"string"},"name":{"description":"The name of the account to look up\n","type":"string"},"networkId":{"description":"ID of the network for this account\n","type":"string"},"password":{"description":"The password of the account.\n","secret":true,"type":"string"},"site":{"description":"The name of the site the account is associated with.\n","type":"string"},"tunnelMediumType":{"description":"See RFC2868 section 3.2\n","type":"integer"},"tunnelType":{"description":"See RFC2868 section 3.1\n","type":"integer"}},"required":["id","name","networkId","password","site","tunnelMediumType","tunnelType"],"type":"object"}},"unifi:index/getApGroup:getApGroup":{"description":"\u003cspan pulumi-lang-nodejs=\"`unifi.getApGroup`\" pulumi-lang-dotnet=\"`unifi.getApGroup`\" pulumi-lang-go=\"`getApGroup`\" pulumi-lang-python=\"`get_ap_group`\" pulumi-lang-yaml=\"`unifi.getApGroup`\" pulumi-lang-java=\"`unifi.getApGroup`\"\u003e`unifi.getApGroup`\u003c/span\u003e data source can be used to retrieve the ID for an AP group by name.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst _default = unifi.getApGroup({});\n```\n```python\nimport pulumi\nimport pulumi_unifi as unifi\n\ndefault = unifi.get_ap_group()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var @default = Unifi.GetApGroup.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := unifi.GetApGroup(ctx, \u0026unifi.GetApGroupArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.unifi.UnifiFunctions;\nimport com.pulumi.unifi.inputs.GetApGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var default = UnifiFunctions.getApGroup(GetApGroupArgs.builder()\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  default:\n    fn::invoke:\n      function: unifi:getApGroup\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getApGroup.\n","properties":{"name":{"type":"string","description":"The name of the AP group to look up, leave blank to look up the default AP group.\n"},"site":{"type":"string","description":"The name of the site the AP group is associated with.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getApGroup.\n","properties":{"id":{"description":"The ID of this AP group.\n","type":"string"},"name":{"description":"The name of the AP group to look up, leave blank to look up the default AP group.\n","type":"string"},"site":{"description":"The name of the site the AP group is associated with.\n","type":"string"}},"required":["id","site"],"type":"object"}},"unifi:index/getNetwork:getNetwork":{"description":"\u003cspan pulumi-lang-nodejs=\"`unifi.Network`\" pulumi-lang-dotnet=\"`unifi.Network`\" pulumi-lang-go=\"`Network`\" pulumi-lang-python=\"`Network`\" pulumi-lang-yaml=\"`unifi.Network`\" pulumi-lang-java=\"`unifi.Network`\"\u003e`unifi.Network`\u003c/span\u003e data source can be used to retrieve settings for a network by name or ID.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\n//retrieve network data by unifi network name\nconst lanNetwork = unifi.getNetwork({\n    name: \"Default\",\n});\n//retrieve network data from user record\nconst myDevice = unifi.iam.getUser({\n    mac: \"01:23:45:67:89:ab\",\n});\nconst myNetwork = myDevice.then(myDevice =\u003e unifi.getNetwork({\n    id: myDevice.networkId,\n}));\n```\n```python\nimport pulumi\nimport pulumi_unifi as unifi\n\n#retrieve network data by unifi network name\nlan_network = unifi.get_network(name=\"Default\")\n#retrieve network data from user record\nmy_device = unifi.iam.get_user(mac=\"01:23:45:67:89:ab\")\nmy_network = unifi.get_network(id=my_device.network_id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    //retrieve network data by unifi network name\n    var lanNetwork = Unifi.GetNetwork.Invoke(new()\n    {\n        Name = \"Default\",\n    });\n\n    //retrieve network data from user record\n    var myDevice = Unifi.IAM.GetUser.Invoke(new()\n    {\n        Mac = \"01:23:45:67:89:ab\",\n    });\n\n    var myNetwork = Unifi.GetNetwork.Invoke(new()\n    {\n        Id = myDevice.Apply(getUserResult =\u003e getUserResult.NetworkId),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/iam\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// retrieve network data by unifi network name\n\t\t_, err := unifi.LookupNetwork(ctx, \u0026unifi.LookupNetworkArgs{\n\t\t\tName: pulumi.StringRef(\"Default\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// retrieve network data from user record\n\t\tmyDevice, err := iam.LookupUser(ctx, \u0026iam.LookupUserArgs{\n\t\t\tMac: \"01:23:45:67:89:ab\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = unifi.LookupNetwork(ctx, \u0026unifi.LookupNetworkArgs{\n\t\t\tId: pulumi.StringRef(myDevice.NetworkId),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.unifi.UnifiFunctions;\nimport com.pulumi.unifi.inputs.GetNetworkArgs;\nimport com.pulumi.unifi.iam.IamFunctions;\nimport com.pulumi.unifi.iam.inputs.GetUserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        //retrieve network data by unifi network name\n        final var lanNetwork = UnifiFunctions.getNetwork(GetNetworkArgs.builder()\n            .name(\"Default\")\n            .build());\n\n        //retrieve network data from user record\n        final var myDevice = IamFunctions.getUser(GetUserArgs.builder()\n            .mac(\"01:23:45:67:89:ab\")\n            .build());\n\n        final var myNetwork = UnifiFunctions.getNetwork(GetNetworkArgs.builder()\n            .id(myDevice.networkId())\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  #retrieve network data by unifi network name\n  lanNetwork:\n    fn::invoke:\n      function: unifi:getNetwork\n      arguments:\n        name: Default\n  #retrieve network data from user record\n  myDevice:\n    fn::invoke:\n      function: unifi:iam:getUser\n      arguments:\n        mac: 01:23:45:67:89:ab\n  myNetwork:\n    fn::invoke:\n      function: unifi:getNetwork\n      arguments:\n        id: ${myDevice.networkId}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNetwork.\n","properties":{"id":{"type":"string","description":"The ID of the network.\n"},"name":{"type":"string","description":"The name of the network.\n"},"site":{"type":"string","description":"The name of the site to associate the network with.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getNetwork.\n","properties":{"dhcpDns":{"description":"IPv4 addresses for the DNS server to be returned from the DHCP server.\n","items":{"type":"string"},"type":"array"},"dhcpEnabled":{"description":"whether DHCP is enabled or not on this network.\n","type":"boolean"},"dhcpLease":{"description":"lease time for DHCP addresses.\n","type":"integer"},"dhcpStart":{"description":"The IPv4 address where the DHCP range of addresses starts.\n","type":"string"},"dhcpStop":{"description":"The IPv4 address where the DHCP range of addresses stops.\n","type":"string"},"dhcpV6Dns":{"description":"Specifies the IPv6 addresses for the DNS server to be returned from the DHCP server. Used if \u003cspan pulumi-lang-nodejs=\"`dhcpV6DnsAuto`\" pulumi-lang-dotnet=\"`DhcpV6DnsAuto`\" pulumi-lang-go=\"`dhcpV6DnsAuto`\" pulumi-lang-python=\"`dhcp_v6_dns_auto`\" pulumi-lang-yaml=\"`dhcpV6DnsAuto`\" pulumi-lang-java=\"`dhcpV6DnsAuto`\"\u003e`dhcp_v6_dns_auto`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n","items":{"type":"string"},"type":"array"},"dhcpV6DnsAuto":{"description":"Specifies DNS source to propagate. If set \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e the entries in \u003cspan pulumi-lang-nodejs=\"`dhcpV6Dns`\" pulumi-lang-dotnet=\"`DhcpV6Dns`\" pulumi-lang-go=\"`dhcpV6Dns`\" pulumi-lang-python=\"`dhcp_v6_dns`\" pulumi-lang-yaml=\"`dhcpV6Dns`\" pulumi-lang-java=\"`dhcpV6Dns`\"\u003e`dhcp_v6_dns`\u003c/span\u003e are used, the upstream entries otherwise\n","type":"boolean"},"dhcpV6Enabled":{"description":"Enable stateful DHCPv6 for static configuration.\n","type":"boolean"},"dhcpV6Lease":{"description":"Specifies the lease time for DHCPv6 addresses.\n","type":"integer"},"dhcpV6Start":{"description":"start address of the DHCPv6 range. Used in static DHCPv6 configuration.\n","type":"string"},"dhcpV6Stop":{"description":"End address of the DHCPv6 range. Used in static DHCPv6 configuration.\n","type":"string"},"dhcpdBootEnabled":{"description":"Toggles on the DHCP boot options. will be set to true if you have dhcpd*boot*filename, and dhcpd*boot*server set.\n","type":"boolean"},"dhcpdBootFilename":{"description":"the file to PXE boot from on the dhcpd*boot*server.\n","type":"string"},"dhcpdBootServer":{"description":"IPv4 address of a TFTP server to network boot from.\n","type":"string"},"domainName":{"description":"The domain name of this network.\n","type":"string"},"id":{"description":"The ID of the network.\n","type":"string"},"igmpSnooping":{"description":"Specifies whether IGMP snooping is enabled or not.\n","type":"boolean"},"ipv6InterfaceType":{"description":"Specifies which type of IPv6 connection to use. Must be one of either \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`pd`\" pulumi-lang-dotnet=\"`Pd`\" pulumi-lang-go=\"`pd`\" pulumi-lang-python=\"`pd`\" pulumi-lang-yaml=\"`pd`\" pulumi-lang-java=\"`pd`\"\u003e`pd`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n","type":"string"},"ipv6PdInterface":{"description":"Specifies which WAN interface to use for IPv6 PD. Must be one of either \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`wan2`\" pulumi-lang-dotnet=\"`Wan2`\" pulumi-lang-go=\"`wan2`\" pulumi-lang-python=\"`wan2`\" pulumi-lang-yaml=\"`wan2`\" pulumi-lang-java=\"`wan2`\"\u003e`wan2`\u003c/span\u003e.\n","type":"string"},"ipv6PdPrefixid":{"description":"Specifies the IPv6 Prefix ID.\n","type":"string"},"ipv6PdStart":{"description":"start address of the DHCPv6 range. Used if \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`pd`\" pulumi-lang-dotnet=\"`Pd`\" pulumi-lang-go=\"`pd`\" pulumi-lang-python=\"`pd`\" pulumi-lang-yaml=\"`pd`\" pulumi-lang-java=\"`pd`\"\u003e`pd`\u003c/span\u003e.\n","type":"string"},"ipv6PdStop":{"description":"End address of the DHCPv6 range. Used if \u003cspan pulumi-lang-nodejs=\"`ipv6InterfaceType`\" pulumi-lang-dotnet=\"`Ipv6InterfaceType`\" pulumi-lang-go=\"`ipv6InterfaceType`\" pulumi-lang-python=\"`ipv6_interface_type`\" pulumi-lang-yaml=\"`ipv6InterfaceType`\" pulumi-lang-java=\"`ipv6InterfaceType`\"\u003e`ipv6_interface_type`\u003c/span\u003e is set to \u003cspan pulumi-lang-nodejs=\"`pd`\" pulumi-lang-dotnet=\"`Pd`\" pulumi-lang-go=\"`pd`\" pulumi-lang-python=\"`pd`\" pulumi-lang-yaml=\"`pd`\" pulumi-lang-java=\"`pd`\"\u003e`pd`\u003c/span\u003e.\n","type":"string"},"ipv6RaEnable":{"description":"Specifies whether to enable router advertisements or not.\n","type":"boolean"},"ipv6RaPreferredLifetime":{"description":"Lifetime in which the address can be used. Address becomes deprecated afterwards. Must be lower than or equal to \u003cspan pulumi-lang-nodejs=\"`ipv6RaValidLifetime`\" pulumi-lang-dotnet=\"`Ipv6RaValidLifetime`\" pulumi-lang-go=\"`ipv6RaValidLifetime`\" pulumi-lang-python=\"`ipv6_ra_valid_lifetime`\" pulumi-lang-yaml=\"`ipv6RaValidLifetime`\" pulumi-lang-java=\"`ipv6RaValidLifetime`\"\u003e`ipv6_ra_valid_lifetime`\u003c/span\u003e\n","type":"integer"},"ipv6RaPriority":{"description":"IPv6 router advertisement priority. Must be one of either \u003cspan pulumi-lang-nodejs=\"`high`\" pulumi-lang-dotnet=\"`High`\" pulumi-lang-go=\"`high`\" pulumi-lang-python=\"`high`\" pulumi-lang-yaml=\"`high`\" pulumi-lang-java=\"`high`\"\u003e`high`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`medium`\" pulumi-lang-dotnet=\"`Medium`\" pulumi-lang-go=\"`medium`\" pulumi-lang-python=\"`medium`\" pulumi-lang-yaml=\"`medium`\" pulumi-lang-java=\"`medium`\"\u003e`medium`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`low`\" pulumi-lang-dotnet=\"`Low`\" pulumi-lang-go=\"`low`\" pulumi-lang-python=\"`low`\" pulumi-lang-yaml=\"`low`\" pulumi-lang-java=\"`low`\"\u003e`low`\u003c/span\u003e\n","type":"string"},"ipv6RaValidLifetime":{"description":"Total lifetime in which the address can be used. Must be equal to or greater than \u003cspan pulumi-lang-nodejs=\"`ipv6RaPreferredLifetime`\" pulumi-lang-dotnet=\"`Ipv6RaPreferredLifetime`\" pulumi-lang-go=\"`ipv6RaPreferredLifetime`\" pulumi-lang-python=\"`ipv6_ra_preferred_lifetime`\" pulumi-lang-yaml=\"`ipv6RaPreferredLifetime`\" pulumi-lang-java=\"`ipv6RaPreferredLifetime`\"\u003e`ipv6_ra_preferred_lifetime`\u003c/span\u003e.\n","type":"integer"},"ipv6StaticSubnet":{"description":"Specifies the static IPv6 subnet (when ipv6*interface*type is 'static').\n","type":"string"},"multicastDns":{"description":"Specifies whether Multicast DNS (mDNS) is enabled or not on the network (Controller \u003e=v7).\n","type":"boolean"},"name":{"description":"The name of the network.\n","type":"string"},"networkGroup":{"description":"The group of the network.\n","type":"string"},"purpose":{"description":"The purpose of the network. One of \u003cspan pulumi-lang-nodejs=\"`corporate`\" pulumi-lang-dotnet=\"`Corporate`\" pulumi-lang-go=\"`corporate`\" pulumi-lang-python=\"`corporate`\" pulumi-lang-yaml=\"`corporate`\" pulumi-lang-java=\"`corporate`\"\u003e`corporate`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`guest`\" pulumi-lang-dotnet=\"`Guest`\" pulumi-lang-go=\"`guest`\" pulumi-lang-python=\"`guest`\" pulumi-lang-yaml=\"`guest`\" pulumi-lang-java=\"`guest`\"\u003e`guest`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`wan`\" pulumi-lang-dotnet=\"`Wan`\" pulumi-lang-go=\"`wan`\" pulumi-lang-python=\"`wan`\" pulumi-lang-yaml=\"`wan`\" pulumi-lang-java=\"`wan`\"\u003e`wan`\u003c/span\u003e, or `vlan-only`.\n","type":"string"},"site":{"description":"The name of the site to associate the network with.\n","type":"string"},"subnet":{"description":"The subnet of the network (CIDR address).\n","type":"string"},"vlanId":{"description":"The VLAN ID of the network.\n","type":"integer"},"wanDhcpV6PdSize":{"description":"Specifies the IPv6 prefix size to request from ISP. Must be a number between 48 and 64.\n","type":"integer"},"wanDns":{"description":"DNS servers IPs of the WAN.\n","items":{"type":"string"},"type":"array"},"wanEgressQos":{"description":"Specifies the WAN egress quality of service.\n","type":"integer"},"wanGateway":{"description":"The IPv4 gateway of the WAN.\n","type":"string"},"wanGatewayV6":{"description":"The IPv6 gateway of the WAN.\n","type":"string"},"wanIp":{"description":"The IPv4 address of the WAN.\n","type":"string"},"wanIpv6":{"description":"The IPv6 address of the WAN.\n","type":"string"},"wanNetmask":{"description":"The IPv4 netmask of the WAN.\n","type":"string"},"wanNetworkgroup":{"description":"Specifies the WAN network group. One of either `WAN`, `WAN2` or `WAN_LTE_FAILOVER`.\n","type":"string"},"wanPrefixlen":{"description":"The IPv6 prefix length of the WAN. Must be between 1 and 128.\n","type":"integer"},"wanType":{"description":"Specifies the IPV4 WAN connection type. One of either \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`pppoe`\" pulumi-lang-dotnet=\"`Pppoe`\" pulumi-lang-go=\"`pppoe`\" pulumi-lang-python=\"`pppoe`\" pulumi-lang-yaml=\"`pppoe`\" pulumi-lang-java=\"`pppoe`\"\u003e`pppoe`\u003c/span\u003e.\n","type":"string"},"wanTypeV6":{"description":"Specifies the IPV6 WAN connection type. Must be one of either \u003cspan pulumi-lang-nodejs=\"`disabled`\" pulumi-lang-dotnet=\"`Disabled`\" pulumi-lang-go=\"`disabled`\" pulumi-lang-python=\"`disabled`\" pulumi-lang-yaml=\"`disabled`\" pulumi-lang-java=\"`disabled`\"\u003e`disabled`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`dhcpv6`\" pulumi-lang-dotnet=\"`Dhcpv6`\" pulumi-lang-go=\"`dhcpv6`\" pulumi-lang-python=\"`dhcpv6`\" pulumi-lang-yaml=\"`dhcpv6`\" pulumi-lang-java=\"`dhcpv6`\"\u003e`dhcpv6`\u003c/span\u003e.\n","type":"string"},"wanUsername":{"description":"Specifies the IPV4 WAN username.\n","type":"string"},"xWanPassword":{"description":"Specifies the IPV4 WAN password.\n","type":"string"}},"required":["dhcpDns","dhcpEnabled","dhcpLease","dhcpStart","dhcpStop","dhcpV6Dns","dhcpV6DnsAuto","dhcpV6Enabled","dhcpV6Lease","dhcpV6Start","dhcpV6Stop","dhcpdBootEnabled","dhcpdBootFilename","dhcpdBootServer","domainName","id","igmpSnooping","ipv6InterfaceType","ipv6PdInterface","ipv6PdPrefixid","ipv6PdStart","ipv6PdStop","ipv6RaEnable","ipv6RaPreferredLifetime","ipv6RaPriority","ipv6RaValidLifetime","ipv6StaticSubnet","multicastDns","name","networkGroup","purpose","site","subnet","vlanId","wanDhcpV6PdSize","wanDns","wanEgressQos","wanGateway","wanGatewayV6","wanIp","wanIpv6","wanNetmask","wanNetworkgroup","wanPrefixlen","wanType","wanTypeV6","wanUsername","xWanPassword"],"type":"object"}},"unifi:index/getRadiusProfile:getRadiusProfile":{"description":"\u003cspan pulumi-lang-nodejs=\"`unifi.RadiusProfile`\" pulumi-lang-dotnet=\"`unifi.RadiusProfile`\" pulumi-lang-go=\"`RadiusProfile`\" pulumi-lang-python=\"`RadiusProfile`\" pulumi-lang-yaml=\"`unifi.RadiusProfile`\" pulumi-lang-java=\"`unifi.RadiusProfile`\"\u003e`unifi.RadiusProfile`\u003c/span\u003e data source can be used to retrieve the ID for a RADIUS profile by name.\n","inputs":{"description":"A collection of arguments for invoking getRadiusProfile.\n","properties":{"name":{"type":"string","description":"The name of the RADIUS profile to look up. Defaults to `Default`.\n"},"site":{"type":"string","description":"The name of the site the RADIUS profile is associated with.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getRadiusProfile.\n","properties":{"id":{"description":"The ID of this AP group.\n","type":"string"},"name":{"description":"The name of the RADIUS profile to look up. Defaults to `Default`.\n","type":"string"},"site":{"description":"The name of the site the RADIUS profile is associated with.\n","type":"string"}},"required":["id","site"],"type":"object"}},"unifi:port/getProfile:getProfile":{"description":"\u003cspan pulumi-lang-nodejs=\"`unifi.port.Profile`\" pulumi-lang-dotnet=\"`unifi.port.Profile`\" pulumi-lang-go=\"`port.Profile`\" pulumi-lang-python=\"`port.Profile`\" pulumi-lang-yaml=\"`unifi.port.Profile`\" pulumi-lang-java=\"`unifi.port.Profile`\"\u003e`unifi.port.Profile`\u003c/span\u003e data source can be used to retrieve port profile configurations from your UniFi network. Port profiles define settings and behaviors for switch ports, including VLANs, PoE settings, and other port-specific configurations. This data source is particularly useful when you need to reference existing port profiles in switch port configurations.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as unifi from \"@pulumiverse/unifi\";\n\nconst all = unifi.port.getProfile({});\n```\n```python\nimport pulumi\nimport pulumi_unifi as unifi\n\nall = unifi.port.get_profile()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Unifi = Pulumiverse.Unifi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var all = Unifi.Port.GetProfile.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-unifi/sdk/go/unifi/port\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := port.LookupProfile(ctx, \u0026port.LookupProfileArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.unifi.port.PortFunctions;\nimport com.pulumi.unifi.port.inputs.GetProfileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var all = PortFunctions.getProfile(GetProfileArgs.builder()\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  all:\n    fn::invoke:\n      function: unifi:port:getProfile\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getProfile.\n","properties":{"name":{"type":"string","description":"The name of the port profile to look up. This is the friendly name assigned to the profile in the UniFi controller. Defaults to \"All\" if not specified, which is the default port profile in UniFi. Defaults to `All`.\n"},"site":{"type":"string","description":"The name of the UniFi site where the port profile is configured. If not specified, the default site will be used.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getProfile.\n","properties":{"id":{"description":"The unique identifier of the port profile. This is automatically assigned by UniFi and can be used to reference this port profile in other resources.\n","type":"string"},"name":{"description":"The name of the port profile to look up. This is the friendly name assigned to the profile in the UniFi controller. Defaults to \"All\" if not specified, which is the default port profile in UniFi. Defaults to `All`.\n","type":"string"},"site":{"description":"The name of the UniFi site where the port profile is configured. If not specified, the default site will be used.\n","type":"string"}},"required":["id","site"],"type":"object"}}}}