<filename>sdk/dotnet/SystemInterface.cs<gh_stars>0// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;
using Pulumi;

namespace Pulumiverse.Fortios
{
    /// <summary>
    /// Configure interfaces.
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using System.Linq;
    /// using Pulumi;
    /// using Fortios = Pulumiverse.Fortios;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var trname = new Fortios.SystemInterface("trname", new()
    ///     {
    ///         Algorithm = "L4",
    ///         Defaultgw = "enable",
    ///         Description = "Created by Terraform Provider for FortiOS",
    ///         Distance = 5,
    ///         Ip = "0.0.0.0 0.0.0.0",
    ///         Ipv6 = new Fortios.Inputs.SystemInterfaceIpv6Args
    ///         {
    ///             NdMode = "basic",
    ///         },
    ///         Mode = "dhcp",
    ///         Mtu = 1500,
    ///         MtuOverride = "disable",
    ///         SnmpIndex = 3,
    ///         Type = "physical",
    ///         Vdom = "root",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// System Interface can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemInterface:SystemInterface labelname {{name}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemInterface:SystemInterface labelname {{name}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/systemInterface:SystemInterface")]
    public partial class SystemInterface : global::Pulumi.CustomResource
    {
        /// <summary>
        /// PPPoE server name.
        /// </summary>
        [Output("acName")]
        public Output<string> AcName { get; private set; } = null!;

        /// <summary>
        /// Aggregate interface.
        /// </summary>
        [Output("aggregate")]
        public Output<string> Aggregate { get; private set; } = null!;

        /// <summary>
        /// Type of aggregation. Valid values: `physical`, `vxlan`.
        /// </summary>
        [Output("aggregateType")]
        public Output<string> AggregateType { get; private set; } = null!;

        /// <summary>
        /// Frame distribution algorithm.
        /// </summary>
        [Output("algorithm")]
        public Output<string> Algorithm { get; private set; } = null!;

        /// <summary>
        /// Alias will be displayed with the interface name to make it easier to distinguish.
        /// </summary>
        [Output("alias")]
        public Output<string> Alias { get; private set; } = null!;

        /// <summary>
        /// Permitted types of management access to this interface.
        /// </summary>
        [Output("allowaccess")]
        public Output<string> Allowaccess { get; private set; } = null!;

        /// <summary>
        /// Enable/disable automatic registration of unknown FortiAP devices. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("apDiscover")]
        public Output<string> ApDiscover { get; private set; } = null!;

        /// <summary>
        /// Enable/disable ARP forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("arpforward")]
        public Output<string> Arpforward { get; private set; } = null!;

        /// <summary>
        /// HTTPS server certificate.
        /// </summary>
        [Output("authCert")]
        public Output<string> AuthCert { get; private set; } = null!;

        /// <summary>
        /// Address of captive portal.
        /// </summary>
        [Output("authPortalAddr")]
        public Output<string> AuthPortalAddr { get; private set; } = null!;

        /// <summary>
        /// PPP authentication type to use. Valid values: `auto`, `pap`, `chap`, `mschapv1`, `mschapv2`.
        /// </summary>
        [Output("authType")]
        public Output<string> AuthType { get; private set; } = null!;

        /// <summary>
        /// Enable/disable automatic authorization of dedicated Fortinet extension device on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("autoAuthExtensionDevice")]
        public Output<string> AutoAuthExtensionDevice { get; private set; } = null!;

        /// <summary>
        /// Indicates whether the interface is automatically created by FortiGate, for example, created during the VPN creation process. If it is, set it to "auto", else keep it empty.
        /// </summary>
        [Output("autogenerated")]
        public Output<string> Autogenerated { get; private set; } = null!;

        /// <summary>
        /// Bandwidth measure time
        /// </summary>
        [Output("bandwidthMeasureTime")]
        public Output<int> BandwidthMeasureTime { get; private set; } = null!;

        /// <summary>
        /// Bidirectional Forwarding Detection (BFD) settings. Valid values: `global`, `enable`, `disable`.
        /// </summary>
        [Output("bfd")]
        public Output<string> Bfd { get; private set; } = null!;

        /// <summary>
        /// BFD desired minimal transmit interval.
        /// </summary>
        [Output("bfdDesiredMinTx")]
        public Output<int> BfdDesiredMinTx { get; private set; } = null!;

        /// <summary>
        /// BFD detection multiplier.
        /// </summary>
        [Output("bfdDetectMult")]
        public Output<int> BfdDetectMult { get; private set; } = null!;

        /// <summary>
        /// BFD required minimal receive interval.
        /// </summary>
        [Output("bfdRequiredMinRx")]
        public Output<int> BfdRequiredMinRx { get; private set; } = null!;

        /// <summary>
        /// Enable/disable broadcasting FortiClient discovery messages. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("broadcastForticlientDiscovery")]
        public Output<string> BroadcastForticlientDiscovery { get; private set; } = null!;

        /// <summary>
        /// Enable/disable broadcast forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("broadcastForward")]
        public Output<string> BroadcastForward { get; private set; } = null!;

        /// <summary>
        /// Enable/disable captive portal.
        /// </summary>
        [Output("captivePortal")]
        public Output<int> CaptivePortal { get; private set; } = null!;

        /// <summary>
        /// CLI connection status.
        /// </summary>
        [Output("cliConnStatus")]
        public Output<int> CliConnStatus { get; private set; } = null!;

        /// <summary>
        /// DHCP client options. The structure of `client_options` block is documented below.
        /// </summary>
        [Output("clientOptions")]
        public Output<ImmutableArray<Outputs.SystemInterfaceClientOption>> ClientOptions { get; private set; } = null!;

        /// <summary>
        /// Color of icon on the GUI.
        /// </summary>
        [Output("color")]
        public Output<int> Color { get; private set; } = null!;

        /// <summary>
        /// Configure interface for single purpose. Valid values: `none`, `management`.
        /// </summary>
        [Output("dedicatedTo")]
        public Output<string> DedicatedTo { get; private set; } = null!;

        /// <summary>
        /// Enable to get the gateway IP from the DHCP or PPPoE server. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("defaultgw")]
        public Output<string> Defaultgw { get; private set; } = null!;

        /// <summary>
        /// Description.
        /// </summary>
        [Output("description")]
        public Output<string?> Description { get; private set; } = null!;

        /// <summary>
        /// MTU of detected peer (0 - 4294967295).
        /// </summary>
        [Output("detectedPeerMtu")]
        public Output<int> DetectedPeerMtu { get; private set; } = null!;

        /// <summary>
        /// Protocols used to detect the server. Valid values: `ping`, `tcp-echo`, `udp-echo`.
        /// </summary>
        [Output("detectprotocol")]
        public Output<string> Detectprotocol { get; private set; } = null!;

        /// <summary>
        /// Gateway's ping server for this IP.
        /// </summary>
        [Output("detectserver")]
        public Output<string> Detectserver { get; private set; } = null!;

        /// <summary>
        /// Device access list.
        /// </summary>
        [Output("deviceAccessList")]
        public Output<string> DeviceAccessList { get; private set; } = null!;

        /// <summary>
        /// Enable/disable passively gathering of device identity information about the devices on the network connected to this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("deviceIdentification")]
        public Output<string> DeviceIdentification { get; private set; } = null!;

        /// <summary>
        /// Enable/disable active gathering of device identity information about the devices on the network connected to this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("deviceIdentificationActiveScan")]
        public Output<string> DeviceIdentificationActiveScan { get; private set; } = null!;

        /// <summary>
        /// Enable/disable inclusion of devices detected on this interface in network vulnerability scans. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("deviceNetscan")]
        public Output<string> DeviceNetscan { get; private set; } = null!;

        /// <summary>
        /// Enable/disable passive gathering of user identity information about users on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("deviceUserIdentification")]
        public Output<string> DeviceUserIdentification { get; private set; } = null!;

        /// <summary>
        /// Device Index.
        /// </summary>
        [Output("devindex")]
        public Output<int> Devindex { get; private set; } = null!;

        /// <summary>
        /// Enable/disable addition of classless static routes retrieved from DHCP server. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("dhcpClasslessRouteAddition")]
        public Output<string> DhcpClasslessRouteAddition { get; private set; } = null!;

        /// <summary>
        /// DHCP client identifier.
        /// </summary>
        [Output("dhcpClientIdentifier")]
        public Output<string> DhcpClientIdentifier { get; private set; } = null!;

        /// <summary>
        /// Enable/disable DHCP relay agent option. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("dhcpRelayAgentOption")]
        public Output<string> DhcpRelayAgentOption { get; private set; } = null!;

        /// <summary>
        /// Specify outgoing interface to reach server.
        /// </summary>
        [Output("dhcpRelayInterface")]
        public Output<string> DhcpRelayInterface { get; private set; } = null!;

        /// <summary>
        /// Specify how to select outgoing interface to reach server. Valid values: `auto`, `sdwan`, `specify`.
        /// </summary>
        [Output("dhcpRelayInterfaceSelectMethod")]
        public Output<string> DhcpRelayInterfaceSelectMethod { get; private set; } = null!;

        /// <summary>
        /// DHCP relay IP address.
        /// </summary>
        [Output("dhcpRelayIp")]
        public Output<string> DhcpRelayIp { get; private set; } = null!;

        /// <summary>
        /// DHCP relay link selection.
        /// </summary>
        [Output("dhcpRelayLinkSelection")]
        public Output<string> DhcpRelayLinkSelection { get; private set; } = null!;

        /// <summary>
        /// Enable/disable sending DHCP request to all servers. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("dhcpRelayRequestAllServer")]
        public Output<string> DhcpRelayRequestAllServer { get; private set; } = null!;

        /// <summary>
        /// Enable/disable allowing this interface to act as a DHCP relay. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("dhcpRelayService")]
        public Output<string> DhcpRelayService { get; private set; } = null!;

        /// <summary>
        /// DHCP relay type (regular or IPsec). Valid values: `regular`, `ipsec`.
        /// </summary>
        [Output("dhcpRelayType")]
        public Output<string> DhcpRelayType { get; private set; } = null!;

        /// <summary>
        /// DHCP renew time in seconds (300-604800), 0 means use the renew time provided by the server.
        /// </summary>
        [Output("dhcpRenewTime")]
        public Output<int> DhcpRenewTime { get; private set; } = null!;

        /// <summary>
        /// Configure DHCP server access list. The structure of `dhcp_snooping_server_list` block is documented below.
        /// </summary>
        [Output("dhcpSnoopingServerLists")]
        public Output<ImmutableArray<Outputs.SystemInterfaceDhcpSnoopingServerList>> DhcpSnoopingServerLists { get; private set; } = null!;

        /// <summary>
        /// Time in seconds to wait before retrying to start a PPPoE discovery, 0 means no timeout.
        /// </summary>
        [Output("discRetryTimeout")]
        public Output<int> DiscRetryTimeout { get; private set; } = null!;

        /// <summary>
        /// Time in milliseconds to wait before sending a notification that this interface is down or disconnected.
        /// </summary>
        [Output("disconnectThreshold")]
        public Output<int> DisconnectThreshold { get; private set; } = null!;

        /// <summary>
        /// Distance for routes learned through PPPoE or DHCP, lower distance indicates preferred route.
        /// </summary>
        [Output("distance")]
        public Output<int> Distance { get; private set; } = null!;

        /// <summary>
        /// Enable/disable use DNS acquired by DHCP or PPPoE. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("dnsServerOverride")]
        public Output<string> DnsServerOverride { get; private set; } = null!;

        /// <summary>
        /// DNS transport protocols. Valid values: `cleartext`, `dot`, `doh`.
        /// </summary>
        [Output("dnsServerProtocol")]
        public Output<string> DnsServerProtocol { get; private set; } = null!;

        /// <summary>
        /// Enable/disable drop fragment packets. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("dropFragment")]
        public Output<string> DropFragment { get; private set; } = null!;

        /// <summary>
        /// Enable/disable drop overlapped fragment packets. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("dropOverlappedFragment")]
        public Output<string> DropOverlappedFragment { get; private set; } = null!;

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Output("dynamicSortSubtable")]
        public Output<string?> DynamicSortSubtable { get; private set; } = null!;

        /// <summary>
        /// EAP CA certificate name.
        /// </summary>
        [Output("eapCaCert")]
        public Output<string> EapCaCert { get; private set; } = null!;

        /// <summary>
        /// EAP identity.
        /// </summary>
        [Output("eapIdentity")]
        public Output<string> EapIdentity { get; private set; } = null!;

        /// <summary>
        /// EAP method. Valid values: `tls`, `peap`.
        /// </summary>
        [Output("eapMethod")]
        public Output<string> EapMethod { get; private set; } = null!;

        /// <summary>
        /// EAP password.
        /// </summary>
        [Output("eapPassword")]
        public Output<string?> EapPassword { get; private set; } = null!;

        /// <summary>
        /// Enable/disable EAP-Supplicant. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("eapSupplicant")]
        public Output<string> EapSupplicant { get; private set; } = null!;

        /// <summary>
        /// EAP user certificate name.
        /// </summary>
        [Output("eapUserCert")]
        public Output<string> EapUserCert { get; private set; } = null!;

        /// <summary>
        /// Outgoing traffic shaping profile.
        /// </summary>
        [Output("egressShapingProfile")]
        public Output<string> EgressShapingProfile { get; private set; } = null!;

        /// <summary>
        /// Enable/disable endpoint compliance enforcement. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("endpointCompliance")]
        public Output<string> EndpointCompliance { get; private set; } = null!;

        /// <summary>
        /// Estimated maximum downstream bandwidth (kbps). Used to estimate link utilization.
        /// </summary>
        [Output("estimatedDownstreamBandwidth")]
        public Output<int> EstimatedDownstreamBandwidth { get; private set; } = null!;

        /// <summary>
        /// Estimated maximum upstream bandwidth (kbps). Used to estimate link utilization.
        /// </summary>
        [Output("estimatedUpstreamBandwidth")]
        public Output<int> EstimatedUpstreamBandwidth { get; private set; } = null!;

        /// <summary>
        /// Enable/disable the explicit FTP proxy on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("explicitFtpProxy")]
        public Output<string> ExplicitFtpProxy { get; private set; } = null!;

        /// <summary>
        /// Enable/disable the explicit web proxy on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("explicitWebProxy")]
        public Output<string> ExplicitWebProxy { get; private set; } = null!;

        /// <summary>
        /// Enable/disable identifying the interface as an external interface (which usually means it's connected to the Internet). Valid values: `enable`, `disable`.
        /// </summary>
        [Output("external")]
        public Output<string> External { get; private set; } = null!;

        /// <summary>
        /// Action on extender when interface fail . Valid values: `soft-restart`, `hard-restart`, `reboot`.
        /// </summary>
        [Output("failActionOnExtender")]
        public Output<string> FailActionOnExtender { get; private set; } = null!;

        /// <summary>
        /// Names of the FortiGate interfaces from which the link failure alert is sent for this interface. The structure of `fail_alert_interfaces` block is documented below.
        /// </summary>
        [Output("failAlertInterfaces")]
        public Output<ImmutableArray<Outputs.SystemInterfaceFailAlertInterface>> FailAlertInterfaces { get; private set; } = null!;

        /// <summary>
        /// Select link-failed-signal or link-down method to alert about a failed link. Valid values: `link-failed-signal`, `link-down`.
        /// </summary>
        [Output("failAlertMethod")]
        public Output<string> FailAlertMethod { get; private set; } = null!;

        /// <summary>
        /// Enable/disable fail detection features for this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("failDetect")]
        public Output<string> FailDetect { get; private set; } = null!;

        /// <summary>
        /// Options for detecting that this interface has failed. Valid values: `detectserver`, `link-down`.
        /// </summary>
        [Output("failDetectOption")]
        public Output<string> FailDetectOption { get; private set; } = null!;

        /// <summary>
        /// Enable/disable FortiHeartBeat (FortiTelemetry on GUI). Valid values: `enable`, `disable`.
        /// </summary>
        [Output("fortiheartbeat")]
        public Output<string> Fortiheartbeat { get; private set; } = null!;

        /// <summary>
        /// Enable FortiLink to dedicate this interface to manage other Fortinet devices. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("fortilink")]
        public Output<string> Fortilink { get; private set; } = null!;

        /// <summary>
        /// fortilink split interface backup link.
        /// </summary>
        [Output("fortilinkBackupLink")]
        public Output<int> FortilinkBackupLink { get; private set; } = null!;

        /// <summary>
        /// Protocol for FortiGate neighbor discovery. Valid values: `lldp`, `fortilink`.
        /// </summary>
        [Output("fortilinkNeighborDetect")]
        public Output<string> FortilinkNeighborDetect { get; private set; } = null!;

        /// <summary>
        /// Enable/disable FortiLink split interface to connect member link to different FortiSwitch in stack for uplink redundancy. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("fortilinkSplitInterface")]
        public Output<string> FortilinkSplitInterface { get; private set; } = null!;

        /// <summary>
        /// Enable/disable FortiLink switch-stacking on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("fortilinkStacking")]
        public Output<string> FortilinkStacking { get; private set; } = null!;

        /// <summary>
        /// Transparent mode forward domain.
        /// </summary>
        [Output("forwardDomain")]
        public Output<int> ForwardDomain { get; private set; } = null!;

        /// <summary>
        /// Configure forward error correction (FEC). Valid values: `none`, `disable`, `cl91-rs-fec`, `cl74-fc-fec`.
        /// </summary>
        [Output("forwardErrorCorrection")]
        public Output<string> ForwardErrorCorrection { get; private set; } = null!;

        /// <summary>
        /// Enable/disable detect gateway alive for first. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("gwdetect")]
        public Output<string> Gwdetect { get; private set; } = null!;

        /// <summary>
        /// HA election priority for the PING server.
        /// </summary>
        [Output("haPriority")]
        public Output<int> HaPriority { get; private set; } = null!;

        /// <summary>
        /// Enable/disable ICMP accept redirect. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("icmpAcceptRedirect")]
        public Output<string> IcmpAcceptRedirect { get; private set; } = null!;

        /// <summary>
        /// Enable/disable ICMP send redirect. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("icmpSendRedirect")]
        public Output<string> IcmpSendRedirect { get; private set; } = null!;

        /// <summary>
        /// Enable/disable authentication for this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("identAccept")]
        public Output<string> IdentAccept { get; private set; } = null!;

        /// <summary>
        /// PPPoE auto disconnect after idle timeout seconds, 0 means no timeout.
        /// </summary>
        [Output("idleTimeout")]
        public Output<int> IdleTimeout { get; private set; } = null!;

        /// <summary>
        /// Configure IKE authentication SAML server.
        /// </summary>
        [Output("ikeSamlServer")]
        public Output<string> IkeSamlServer { get; private set; } = null!;

        /// <summary>
        /// Bandwidth limit for incoming traffic (0 - 16776000 kbps), 0 means unlimited.
        /// </summary>
        [Output("inbandwidth")]
        public Output<int> Inbandwidth { get; private set; } = null!;

        /// <summary>
        /// Incoming traffic shaping profile.
        /// </summary>
        [Output("ingressShapingProfile")]
        public Output<string> IngressShapingProfile { get; private set; } = null!;

        /// <summary>
        /// Ingress Spillover threshold (0 - 16776000 kbps).
        /// </summary>
        [Output("ingressSpilloverThreshold")]
        public Output<int> IngressSpilloverThreshold { get; private set; } = null!;

        /// <summary>
        /// Interface name.
        /// </summary>
        [Output("interface")]
        public Output<string> Interface { get; private set; } = null!;

        /// <summary>
        /// Implicitly created.
        /// </summary>
        [Output("internal")]
        public Output<int> Internal { get; private set; } = null!;

        /// <summary>
        /// Interface IPv4 address and subnet mask, syntax: X.X.X.X/24.
        /// </summary>
        [Output("ip")]
        public Output<string> Ip { get; private set; } = null!;

        /// <summary>
        /// Enable/disable automatic IP address assignment of this interface by FortiIPAM. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ipManagedByFortiipam")]
        public Output<string> IpManagedByFortiipam { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IP/MAC binding. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ipmac")]
        public Output<string> Ipmac { get; private set; } = null!;

        /// <summary>
        /// Enable/disable the use of this interface as a one-armed sniffer. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ipsSnifferMode")]
        public Output<string> IpsSnifferMode { get; private set; } = null!;

        /// <summary>
        /// Unnumbered IP used for PPPoE interfaces for which no unique local address is provided.
        /// </summary>
        [Output("ipunnumbered")]
        public Output<string> Ipunnumbered { get; private set; } = null!;

        /// <summary>
        /// IPv6 of interface. The structure of `ipv6` block is documented below.
        /// </summary>
        [Output("ipv6")]
        public Output<Outputs.SystemInterfaceIpv6> Ipv6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable l2 forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("l2forward")]
        public Output<string> L2forward { get; private set; } = null!;

        /// <summary>
        /// LACP HA secondary member. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("lacpHaSecondary")]
        public Output<string> LacpHaSecondary { get; private set; } = null!;

        /// <summary>
        /// LACP HA slave. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("lacpHaSlave")]
        public Output<string> LacpHaSlave { get; private set; } = null!;

        /// <summary>
        /// LACP mode. Valid values: `static`, `passive`, `active`.
        /// </summary>
        [Output("lacpMode")]
        public Output<string> LacpMode { get; private set; } = null!;

        /// <summary>
        /// How often the interface sends LACP messages. Valid values: `slow`, `fast`.
        /// </summary>
        [Output("lacpSpeed")]
        public Output<string> LacpSpeed { get; private set; } = null!;

        /// <summary>
        /// Time in seconds between PPPoE Link Control Protocol (LCP) echo requests.
        /// </summary>
        [Output("lcpEchoInterval")]
        public Output<int> LcpEchoInterval { get; private set; } = null!;

        /// <summary>
        /// Maximum missed LCP echo messages before disconnect.
        /// </summary>
        [Output("lcpMaxEchoFails")]
        public Output<int> LcpMaxEchoFails { get; private set; } = null!;

        /// <summary>
        /// Number of milliseconds to wait before considering a link is up.
        /// </summary>
        [Output("linkUpDelay")]
        public Output<int> LinkUpDelay { get; private set; } = null!;

        /// <summary>
        /// LLDP-MED network policy profile.
        /// </summary>
        [Output("lldpNetworkPolicy")]
        public Output<string> LldpNetworkPolicy { get; private set; } = null!;

        /// <summary>
        /// Enable/disable Link Layer Discovery Protocol (LLDP) reception. Valid values: `enable`, `disable`, `vdom`.
        /// </summary>
        [Output("lldpReception")]
        public Output<string> LldpReception { get; private set; } = null!;

        /// <summary>
        /// Enable/disable Link Layer Discovery Protocol (LLDP) transmission. Valid values: `enable`, `disable`, `vdom`.
        /// </summary>
        [Output("lldpTransmission")]
        public Output<string> LldpTransmission { get; private set; } = null!;

        /// <summary>
        /// Change the interface's MAC address.
        /// </summary>
        [Output("macaddr")]
        public Output<string> Macaddr { get; private set; } = null!;

        /// <summary>
        /// Available when FortiLink is enabled, used for managed devices through FortiLink interface. The structure of `managed_device` block is documented below.
        /// </summary>
        [Output("managedDevices")]
        public Output<ImmutableArray<Outputs.SystemInterfaceManagedDevice>> ManagedDevices { get; private set; } = null!;

        /// <summary>
        /// Number of IP addresses to be allocated by FortiIPAM and used by this FortiGate unit's DHCP server settings.
        /// </summary>
        [Output("managedSubnetworkSize")]
        public Output<string> ManagedSubnetworkSize { get; private set; } = null!;

        /// <summary>
        /// High Availability in-band management IP address of this interface.
        /// </summary>
        [Output("managementIp")]
        public Output<string> ManagementIp { get; private set; } = null!;

        /// <summary>
        /// Measured downstream bandwidth (kbps).
        /// </summary>
        [Output("measuredDownstreamBandwidth")]
        public Output<int> MeasuredDownstreamBandwidth { get; private set; } = null!;

        /// <summary>
        /// Measured upstream bandwidth (kbps).
        /// </summary>
        [Output("measuredUpstreamBandwidth")]
        public Output<int> MeasuredUpstreamBandwidth { get; private set; } = null!;

        /// <summary>
        /// Select SFP media interface type Valid values: `none`, `gmii`, `sgmii`, `sr`, `lr`, `cr`, `sr4`, `lr4`, `cr4`.
        /// </summary>
        [Output("mediatype")]
        public Output<string> Mediatype { get; private set; } = null!;

        /// <summary>
        /// Physical interfaces that belong to the aggregate or redundant interface. The structure of `member` block is documented below.
        /// </summary>
        [Output("members")]
        public Output<ImmutableArray<Outputs.SystemInterfaceMember>> Members { get; private set; } = null!;

        /// <summary>
        /// Minimum number of aggregated ports that must be up.
        /// </summary>
        [Output("minLinks")]
        public Output<int> MinLinks { get; private set; } = null!;

        /// <summary>
        /// Action to take when less than the configured minimum number of links are active. Valid values: `operational`, `administrative`.
        /// </summary>
        [Output("minLinksDown")]
        public Output<string> MinLinksDown { get; private set; } = null!;

        /// <summary>
        /// Addressing mode (static, DHCP, PPPoE). Valid values: `static`, `dhcp`, `pppoe`.
        /// </summary>
        [Output("mode")]
        public Output<string> Mode { get; private set; } = null!;

        /// <summary>
        /// Enable monitoring bandwidth on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("monitorBandwidth")]
        public Output<string> MonitorBandwidth { get; private set; } = null!;

        /// <summary>
        /// MTU value for this interface.
        /// </summary>
        [Output("mtu")]
        public Output<int> Mtu { get; private set; } = null!;

        /// <summary>
        /// Enable to set a custom MTU for this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("mtuOverride")]
        public Output<string> MtuOverride { get; private set; } = null!;

        /// <summary>
        /// Name.
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// Enable/disable NDISC forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ndiscforward")]
        public Output<string> Ndiscforward { get; private set; } = null!;

        /// <summary>
        /// Enable/disable NETBIOS forwarding. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("netbiosForward")]
        public Output<string> NetbiosForward { get; private set; } = null!;

        /// <summary>
        /// Enable/disable NetFlow on this interface and set the data that NetFlow collects (rx, tx, or both). Valid values: `disable`, `tx`, `rx`, `both`.
        /// </summary>
        [Output("netflowSampler")]
        public Output<string> NetflowSampler { get; private set; } = null!;

        /// <summary>
        /// Bandwidth limit for outgoing traffic (0 - 16776000 kbps).
        /// </summary>
        [Output("outbandwidth")]
        public Output<int> Outbandwidth { get; private set; } = null!;

        /// <summary>
        /// PPPoE Active Discovery Terminate (PADT) used to terminate sessions after an idle time.
        /// </summary>
        [Output("padtRetryTimeout")]
        public Output<int> PadtRetryTimeout { get; private set; } = null!;

        /// <summary>
        /// PPPoE account's password.
        /// </summary>
        [Output("password")]
        public Output<string?> Password { get; private set; } = null!;

        /// <summary>
        /// PING server status.
        /// </summary>
        [Output("pingServStatus")]
        public Output<int> PingServStatus { get; private set; } = null!;

        /// <summary>
        /// sFlow polling interval (1 - 255 sec).
        /// </summary>
        [Output("pollingInterval")]
        public Output<int> PollingInterval { get; private set; } = null!;

        /// <summary>
        /// Enable/disable PPPoE unnumbered negotiation. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("pppoeUnnumberedNegotiate")]
        public Output<string> PppoeUnnumberedNegotiate { get; private set; } = null!;

        /// <summary>
        /// PPTP authentication type. Valid values: `auto`, `pap`, `chap`, `mschapv1`, `mschapv2`.
        /// </summary>
        [Output("pptpAuthType")]
        public Output<string> PptpAuthType { get; private set; } = null!;

        /// <summary>
        /// Enable/disable PPTP client. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("pptpClient")]
        public Output<string> PptpClient { get; private set; } = null!;

        /// <summary>
        /// PPTP password.
        /// </summary>
        [Output("pptpPassword")]
        public Output<string?> PptpPassword { get; private set; } = null!;

        /// <summary>
        /// PPTP server IP address.
        /// </summary>
        [Output("pptpServerIp")]
        public Output<string> PptpServerIp { get; private set; } = null!;

        /// <summary>
        /// Idle timer in minutes (0 for disabled).
        /// </summary>
        [Output("pptpTimeout")]
        public Output<int> PptpTimeout { get; private set; } = null!;

        /// <summary>
        /// PPTP user name.
        /// </summary>
        [Output("pptpUser")]
        public Output<string> PptpUser { get; private set; } = null!;

        /// <summary>
        /// Enable/disable preservation of session route when dirty. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("preserveSessionRoute")]
        public Output<string> PreserveSessionRoute { get; private set; } = null!;

        /// <summary>
        /// Priority of learned routes.
        /// </summary>
        [Output("priority")]
        public Output<int> Priority { get; private set; } = null!;

        /// <summary>
        /// Enable/disable fail back to higher priority port once recovered. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("priorityOverride")]
        public Output<string> PriorityOverride { get; private set; } = null!;

        /// <summary>
        /// Enable/disable proxy captive portal on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("proxyCaptivePortal")]
        public Output<string> ProxyCaptivePortal { get; private set; } = null!;

        /// <summary>
        /// IPv4 reachable time in milliseconds (30000 - 3600000, default = 30000).
        /// </summary>
        [Output("reachableTime")]
        public Output<int> ReachableTime { get; private set; } = null!;

        /// <summary>
        /// Redundant interface.
        /// </summary>
        [Output("redundantInterface")]
        public Output<string> RedundantInterface { get; private set; } = null!;

        /// <summary>
        /// Remote IP address of tunnel.
        /// </summary>
        [Output("remoteIp")]
        public Output<string> RemoteIp { get; private set; } = null!;

        /// <summary>
        /// Replacement message override group.
        /// </summary>
        [Output("replacemsgOverrideGroup")]
        public Output<string> ReplacemsgOverrideGroup { get; private set; } = null!;

        /// <summary>
        /// RX ring size.
        /// </summary>
        [Output("ringRx")]
        public Output<int> RingRx { get; private set; } = null!;

        /// <summary>
        /// TX ring size.
        /// </summary>
        [Output("ringTx")]
        public Output<int> RingTx { get; private set; } = null!;

        /// <summary>
        /// Interface role. Valid values: `lan`, `wan`, `dmz`, `undefined`.
        /// </summary>
        [Output("role")]
        public Output<string> Role { get; private set; } = null!;

        /// <summary>
        /// Data that NetFlow collects (rx, tx, or both). Valid values: `tx`, `rx`, `both`.
        /// </summary>
        [Output("sampleDirection")]
        public Output<string> SampleDirection { get; private set; } = null!;

        /// <summary>
        /// sFlow sample rate (10 - 99999).
        /// </summary>
        [Output("sampleRate")]
        public Output<int> SampleRate { get; private set; } = null!;

        /// <summary>
        /// Enable monitoring or blocking connections to Botnet servers through this interface. Valid values: `disable`, `block`, `monitor`.
        /// </summary>
        [Output("scanBotnetConnections")]
        public Output<string> ScanBotnetConnections { get; private set; } = null!;

        /// <summary>
        /// Enable/disable adding a secondary IP to this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("secondaryIp")]
        public Output<string> SecondaryIp { get; private set; } = null!;

        /// <summary>
        /// Second IP address of interface. The structure of `secondaryip` block is documented below.
        /// </summary>
        [Output("secondaryips")]
        public Output<ImmutableArray<Outputs.SystemInterfaceSecondaryip>> Secondaryips { get; private set; } = null!;

        /// <summary>
        /// Name of security-exempt-list.
        /// </summary>
        [Output("securityExemptList")]
        public Output<string> SecurityExemptList { get; private set; } = null!;

        /// <summary>
        /// URL of external authentication logout server.
        /// </summary>
        [Output("securityExternalLogout")]
        public Output<string> SecurityExternalLogout { get; private set; } = null!;

        /// <summary>
        /// URL of external authentication web server.
        /// </summary>
        [Output("securityExternalWeb")]
        public Output<string> SecurityExternalWeb { get; private set; } = null!;

        /// <summary>
        /// User groups that can authenticate with the captive portal. The structure of `security_groups` block is documented below.
        /// </summary>
        [Output("securityGroups")]
        public Output<ImmutableArray<Outputs.SystemInterfaceSecurityGroup>> SecurityGroups { get; private set; } = null!;

        /// <summary>
        /// Enable/disable MAC authentication bypass. Valid values: `mac-auth-only`, `enable`, `disable`.
        /// </summary>
        [Output("securityMacAuthBypass")]
        public Output<string> SecurityMacAuthBypass { get; private set; } = null!;

        /// <summary>
        /// Turn on captive portal authentication for this interface. Valid values: `none`, `captive-portal`, `802.1X`.
        /// </summary>
        [Output("securityMode")]
        public Output<string> SecurityMode { get; private set; } = null!;

        /// <summary>
        /// URL redirection after disclaimer/authentication.
        /// </summary>
        [Output("securityRedirectUrl")]
        public Output<string> SecurityRedirectUrl { get; private set; } = null!;

        /// <summary>
        /// PPPoE service name.
        /// </summary>
        [Output("serviceName")]
        public Output<string> ServiceName { get; private set; } = null!;

        /// <summary>
        /// Enable/disable sFlow on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("sflowSampler")]
        public Output<string> SflowSampler { get; private set; } = null!;

        /// <summary>
        /// Permanent SNMP Index of the interface.
        /// </summary>
        [Output("snmpIndex")]
        public Output<int> SnmpIndex { get; private set; } = null!;

        /// <summary>
        /// Interface speed. The default setting and the options available depend on the interface hardware.
        /// </summary>
        [Output("speed")]
        public Output<string> Speed { get; private set; } = null!;

        /// <summary>
        /// Egress Spillover threshold (0 - 16776000 kbps), 0 means unlimited.
        /// </summary>
        [Output("spilloverThreshold")]
        public Output<int> SpilloverThreshold { get; private set; } = null!;

        /// <summary>
        /// Enable/disable source IP check. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("srcCheck")]
        public Output<string> SrcCheck { get; private set; } = null!;

        /// <summary>
        /// Bring the interface up or shut the interface down. Valid values: `up`, `down`.
        /// </summary>
        [Output("status")]
        public Output<string> Status { get; private set; } = null!;

        /// <summary>
        /// Enable/disable STP. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("stp")]
        public Output<string> Stp { get; private set; } = null!;

        /// <summary>
        /// Control STP behaviour on HA secondary. Valid values: `disable`, `enable`, `priority-adjust`.
        /// </summary>
        [Output("stpHaSecondary")]
        public Output<string> StpHaSecondary { get; private set; } = null!;

        /// <summary>
        /// Enable/disable STP forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("stpforward")]
        public Output<string> Stpforward { get; private set; } = null!;

        /// <summary>
        /// Configure STP forwarding mode. Valid values: `rpl-all-ext-id`, `rpl-bridge-ext-id`, `rpl-nothing`.
        /// </summary>
        [Output("stpforwardMode")]
        public Output<string> StpforwardMode { get; private set; } = null!;

        /// <summary>
        /// Enable to always send packets from this interface to a destination MAC address. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("subst")]
        public Output<string> Subst { get; private set; } = null!;

        /// <summary>
        /// Destination MAC address that all packets are sent to from this interface.
        /// </summary>
        [Output("substituteDstMac")]
        public Output<string> SubstituteDstMac { get; private set; } = null!;

        /// <summary>
        /// Initial create for switch-controller VLANs.
        /// </summary>
        [Output("swcFirstCreate")]
        public Output<int> SwcFirstCreate { get; private set; } = null!;

        /// <summary>
        /// Creation status for switch-controller VLANs.
        /// </summary>
        [Output("swcVlan")]
        public Output<int> SwcVlan { get; private set; } = null!;

        /// <summary>
        /// Contained in switch.
        /// </summary>
        [Output("switch")]
        public Output<string> Switch { get; private set; } = null!;

        /// <summary>
        /// Block FortiSwitch port-to-port traffic. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("switchControllerAccessVlan")]
        public Output<string> SwitchControllerAccessVlan { get; private set; } = null!;

        /// <summary>
        /// Enable/disable FortiSwitch ARP inspection. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("switchControllerArpInspection")]
        public Output<string> SwitchControllerArpInspection { get; private set; } = null!;

        /// <summary>
        /// Switch controller DHCP snooping. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("switchControllerDhcpSnooping")]
        public Output<string> SwitchControllerDhcpSnooping { get; private set; } = null!;

        /// <summary>
        /// Switch controller DHCP snooping option82. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("switchControllerDhcpSnoopingOption82")]
        public Output<string> SwitchControllerDhcpSnoopingOption82 { get; private set; } = null!;

        /// <summary>
        /// Switch controller DHCP snooping verify MAC. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("switchControllerDhcpSnoopingVerifyMac")]
        public Output<string> SwitchControllerDhcpSnoopingVerifyMac { get; private set; } = null!;

        /// <summary>
        /// Integrated FortiLink settings for managed FortiSwitch.
        /// </summary>
        [Output("switchControllerDynamic")]
        public Output<string> SwitchControllerDynamic { get; private set; } = null!;

        /// <summary>
        /// Interface's purpose when assigning traffic (read only).
        /// </summary>
        [Output("switchControllerFeature")]
        public Output<string> SwitchControllerFeature { get; private set; } = null!;

        /// <summary>
        /// Switch controller IGMP snooping. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("switchControllerIgmpSnooping")]
        public Output<string> SwitchControllerIgmpSnooping { get; private set; } = null!;

        /// <summary>
        /// Switch controller IGMP snooping fast-leave. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("switchControllerIgmpSnoopingFastLeave")]
        public Output<string> SwitchControllerIgmpSnoopingFastLeave { get; private set; } = null!;

        /// <summary>
        /// Switch controller IGMP snooping proxy. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("switchControllerIgmpSnoopingProxy")]
        public Output<string> SwitchControllerIgmpSnoopingProxy { get; private set; } = null!;

        /// <summary>
        /// Enable/disable managed FortiSwitch IoT scanning. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("switchControllerIotScanning")]
        public Output<string> SwitchControllerIotScanning { get; private set; } = null!;

        /// <summary>
        /// Limit the number of dynamic MAC addresses on this VLAN (1 - 128, 0 = no limit, default).
        /// </summary>
        [Output("switchControllerLearningLimit")]
        public Output<int> SwitchControllerLearningLimit { get; private set; } = null!;

        /// <summary>
        /// VLAN to use for FortiLink management purposes.
        /// </summary>
        [Output("switchControllerMgmtVlan")]
        public Output<int> SwitchControllerMgmtVlan { get; private set; } = null!;

        /// <summary>
        /// Integrated NAC settings for managed FortiSwitch.
        /// </summary>
        [Output("switchControllerNac")]
        public Output<string> SwitchControllerNac { get; private set; } = null!;

        /// <summary>
        /// NetFlow collection and processing. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("switchControllerNetflowCollect")]
        public Output<string> SwitchControllerNetflowCollect { get; private set; } = null!;

        /// <summary>
        /// Stop Layer2 MAC learning and interception of BPDUs and other packets on this interface. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("switchControllerRspanMode")]
        public Output<string> SwitchControllerRspanMode { get; private set; } = null!;

        /// <summary>
        /// Source IP address used in FortiLink over L3 connections. Valid values: `outbound`, `fixed`.
        /// </summary>
        [Output("switchControllerSourceIp")]
        public Output<string> SwitchControllerSourceIp { get; private set; } = null!;

        /// <summary>
        /// Switch controller traffic policy for the VLAN.
        /// </summary>
        [Output("switchControllerTrafficPolicy")]
        public Output<string> SwitchControllerTrafficPolicy { get; private set; } = null!;

        /// <summary>
        /// Define a system ID for the aggregate interface.
        /// </summary>
        [Output("systemId")]
        public Output<string> SystemId { get; private set; } = null!;

        /// <summary>
        /// Method in which system ID is generated. Valid values: `auto`, `user`.
        /// </summary>
        [Output("systemIdType")]
        public Output<string> SystemIdType { get; private set; } = null!;

        /// <summary>
        /// Config object tagging. The structure of `tagging` block is documented below.
        /// </summary>
        [Output("taggings")]
        public Output<ImmutableArray<Outputs.SystemInterfaceTagging>> Taggings { get; private set; } = null!;

        /// <summary>
        /// TCP maximum segment size. 0 means do not change segment size.
        /// </summary>
        [Output("tcpMss")]
        public Output<int> TcpMss { get; private set; } = null!;

        /// <summary>
        /// Enable/disable VLAN trunk. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("trunk")]
        public Output<string> Trunk { get; private set; } = null!;

        /// <summary>
        /// Trusted host for dedicated management traffic (0.0.0.0/24 for all hosts).
        /// </summary>
        [Output("trustIp1")]
        public Output<string> TrustIp1 { get; private set; } = null!;

        /// <summary>
        /// Trusted host for dedicated management traffic (0.0.0.0/24 for all hosts).
        /// </summary>
        [Output("trustIp2")]
        public Output<string> TrustIp2 { get; private set; } = null!;

        /// <summary>
        /// Trusted host for dedicated management traffic (0.0.0.0/24 for all hosts).
        /// </summary>
        [Output("trustIp3")]
        public Output<string> TrustIp3 { get; private set; } = null!;

        /// <summary>
        /// Trusted IPv6 host for dedicated management traffic (::/0 for all hosts).
        /// </summary>
        [Output("trustIp61")]
        public Output<string> TrustIp61 { get; private set; } = null!;

        /// <summary>
        /// Trusted IPv6 host for dedicated management traffic (::/0 for all hosts).
        /// </summary>
        [Output("trustIp62")]
        public Output<string> TrustIp62 { get; private set; } = null!;

        /// <summary>
        /// Trusted IPv6 host for dedicated management traffic (::/0 for all hosts).
        /// </summary>
        [Output("trustIp63")]
        public Output<string> TrustIp63 { get; private set; } = null!;

        /// <summary>
        /// Interface type.
        /// </summary>
        [Output("type")]
        public Output<string> Type { get; private set; } = null!;

        /// <summary>
        /// Username of the PPPoE account, provided by your ISP.
        /// </summary>
        [Output("username")]
        public Output<string> Username { get; private set; } = null!;

        /// <summary>
        /// Interface is in this virtual domain (VDOM).
        /// </summary>
        [Output("vdom")]
        public Output<string> Vdom { get; private set; } = null!;

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Output("vdomparam")]
        public Output<string?> Vdomparam { get; private set; } = null!;

        /// <summary>
        /// Switch control interface VLAN ID.
        /// </summary>
        [Output("vindex")]
        public Output<int> Vindex { get; private set; } = null!;

        /// <summary>
        /// Ethernet protocol of VLAN. Valid values: `8021q`, `8021ad`.
        /// </summary>
        [Output("vlanProtocol")]
        public Output<string> VlanProtocol { get; private set; } = null!;

        /// <summary>
        /// Enable/disable traffic forwarding between VLANs on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("vlanforward")]
        public Output<string> Vlanforward { get; private set; } = null!;

        /// <summary>
        /// VLAN ID (1 - 4094).
        /// </summary>
        [Output("vlanid")]
        public Output<int> Vlanid { get; private set; } = null!;

        /// <summary>
        /// Virtual Routing Forwarding ID.
        /// </summary>
        [Output("vrf")]
        public Output<int> Vrf { get; private set; } = null!;

        /// <summary>
        /// Enable/disable use of virtual MAC for VRRP. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("vrrpVirtualMac")]
        public Output<string> VrrpVirtualMac { get; private set; } = null!;

        /// <summary>
        /// VRRP configuration. The structure of `vrrp` block is documented below.
        /// </summary>
        [Output("vrrps")]
        public Output<ImmutableArray<Outputs.SystemInterfaceVrrp>> Vrrps { get; private set; } = null!;

        /// <summary>
        /// Enable/disable WCCP on this interface. Used for encapsulated WCCP communication between WCCP clients and servers. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("wccp")]
        public Output<string> Wccp { get; private set; } = null!;

        /// <summary>
        /// Default weight for static routes (if route has no weight configured).
        /// </summary>
        [Output("weight")]
        public Output<int> Weight { get; private set; } = null!;

        /// <summary>
        /// WINS server IP.
        /// </summary>
        [Output("winsIp")]
        public Output<string> WinsIp { get; private set; } = null!;


        /// <summary>
        /// Create a SystemInterface resource with the given unique name, arguments, and options.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resource</param>
        /// <param name="args">The arguments used to populate this resource's properties</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public SystemInterface(string name, SystemInterfaceArgs args, CustomResourceOptions? options = null)
            : base("fortios:index/systemInterface:SystemInterface", name, args ?? new SystemInterfaceArgs(), MakeResourceOptions(options, ""))
        {
        }

        private SystemInterface(string name, Input<string> id, SystemInterfaceState? state = null, CustomResourceOptions? options = null)
            : base("fortios:index/systemInterface:SystemInterface", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
                PluginDownloadURL = "github://api.github.com/pulumiverse/pulumi-fortios",
                AdditionalSecretOutputs =
                {
                    "eapPassword",
                    "password",
                    "pptpPassword",
                },
            };
            var merged = CustomResourceOptions.Merge(defaultOptions, options);
            // Override the ID if one was specified for consistency with other language SDKs.
            merged.Id = id ?? merged.Id;
            return merged;
        }
        /// <summary>
        /// Get an existing SystemInterface resource's state with the given name, ID, and optional extra
        /// properties used to qualify the lookup.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resulting resource.</param>
        /// <param name="id">The unique provider ID of the resource to lookup.</param>
        /// <param name="state">Any extra arguments used during the lookup.</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public static SystemInterface Get(string name, Input<string> id, SystemInterfaceState? state = null, CustomResourceOptions? options = null)
        {
            return new SystemInterface(name, id, state, options);
        }
    }

    public sealed class SystemInterfaceArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// PPPoE server name.
        /// </summary>
        [Input("acName")]
        public Input<string>? AcName { get; set; }

        /// <summary>
        /// Aggregate interface.
        /// </summary>
        [Input("aggregate")]
        public Input<string>? Aggregate { get; set; }

        /// <summary>
        /// Type of aggregation. Valid values: `physical`, `vxlan`.
        /// </summary>
        [Input("aggregateType")]
        public Input<string>? AggregateType { get; set; }

        /// <summary>
        /// Frame distribution algorithm.
        /// </summary>
        [Input("algorithm")]
        public Input<string>? Algorithm { get; set; }

        /// <summary>
        /// Alias will be displayed with the interface name to make it easier to distinguish.
        /// </summary>
        [Input("alias")]
        public Input<string>? Alias { get; set; }

        /// <summary>
        /// Permitted types of management access to this interface.
        /// </summary>
        [Input("allowaccess")]
        public Input<string>? Allowaccess { get; set; }

        /// <summary>
        /// Enable/disable automatic registration of unknown FortiAP devices. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("apDiscover")]
        public Input<string>? ApDiscover { get; set; }

        /// <summary>
        /// Enable/disable ARP forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("arpforward")]
        public Input<string>? Arpforward { get; set; }

        /// <summary>
        /// HTTPS server certificate.
        /// </summary>
        [Input("authCert")]
        public Input<string>? AuthCert { get; set; }

        /// <summary>
        /// Address of captive portal.
        /// </summary>
        [Input("authPortalAddr")]
        public Input<string>? AuthPortalAddr { get; set; }

        /// <summary>
        /// PPP authentication type to use. Valid values: `auto`, `pap`, `chap`, `mschapv1`, `mschapv2`.
        /// </summary>
        [Input("authType")]
        public Input<string>? AuthType { get; set; }

        /// <summary>
        /// Enable/disable automatic authorization of dedicated Fortinet extension device on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("autoAuthExtensionDevice")]
        public Input<string>? AutoAuthExtensionDevice { get; set; }

        /// <summary>
        /// Indicates whether the interface is automatically created by FortiGate, for example, created during the VPN creation process. If it is, set it to "auto", else keep it empty.
        /// </summary>
        [Input("autogenerated")]
        public Input<string>? Autogenerated { get; set; }

        /// <summary>
        /// Bandwidth measure time
        /// </summary>
        [Input("bandwidthMeasureTime")]
        public Input<int>? BandwidthMeasureTime { get; set; }

        /// <summary>
        /// Bidirectional Forwarding Detection (BFD) settings. Valid values: `global`, `enable`, `disable`.
        /// </summary>
        [Input("bfd")]
        public Input<string>? Bfd { get; set; }

        /// <summary>
        /// BFD desired minimal transmit interval.
        /// </summary>
        [Input("bfdDesiredMinTx")]
        public Input<int>? BfdDesiredMinTx { get; set; }

        /// <summary>
        /// BFD detection multiplier.
        /// </summary>
        [Input("bfdDetectMult")]
        public Input<int>? BfdDetectMult { get; set; }

        /// <summary>
        /// BFD required minimal receive interval.
        /// </summary>
        [Input("bfdRequiredMinRx")]
        public Input<int>? BfdRequiredMinRx { get; set; }

        /// <summary>
        /// Enable/disable broadcasting FortiClient discovery messages. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("broadcastForticlientDiscovery")]
        public Input<string>? BroadcastForticlientDiscovery { get; set; }

        /// <summary>
        /// Enable/disable broadcast forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("broadcastForward")]
        public Input<string>? BroadcastForward { get; set; }

        /// <summary>
        /// Enable/disable captive portal.
        /// </summary>
        [Input("captivePortal")]
        public Input<int>? CaptivePortal { get; set; }

        /// <summary>
        /// CLI connection status.
        /// </summary>
        [Input("cliConnStatus")]
        public Input<int>? CliConnStatus { get; set; }

        [Input("clientOptions")]
        private InputList<Inputs.SystemInterfaceClientOptionArgs>? _clientOptions;

        /// <summary>
        /// DHCP client options. The structure of `client_options` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceClientOptionArgs> ClientOptions
        {
            get => _clientOptions ?? (_clientOptions = new InputList<Inputs.SystemInterfaceClientOptionArgs>());
            set => _clientOptions = value;
        }

        /// <summary>
        /// Color of icon on the GUI.
        /// </summary>
        [Input("color")]
        public Input<int>? Color { get; set; }

        /// <summary>
        /// Configure interface for single purpose. Valid values: `none`, `management`.
        /// </summary>
        [Input("dedicatedTo")]
        public Input<string>? DedicatedTo { get; set; }

        /// <summary>
        /// Enable to get the gateway IP from the DHCP or PPPoE server. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("defaultgw")]
        public Input<string>? Defaultgw { get; set; }

        /// <summary>
        /// Description.
        /// </summary>
        [Input("description")]
        public Input<string>? Description { get; set; }

        /// <summary>
        /// MTU of detected peer (0 - 4294967295).
        /// </summary>
        [Input("detectedPeerMtu")]
        public Input<int>? DetectedPeerMtu { get; set; }

        /// <summary>
        /// Protocols used to detect the server. Valid values: `ping`, `tcp-echo`, `udp-echo`.
        /// </summary>
        [Input("detectprotocol")]
        public Input<string>? Detectprotocol { get; set; }

        /// <summary>
        /// Gateway's ping server for this IP.
        /// </summary>
        [Input("detectserver")]
        public Input<string>? Detectserver { get; set; }

        /// <summary>
        /// Device access list.
        /// </summary>
        [Input("deviceAccessList")]
        public Input<string>? DeviceAccessList { get; set; }

        /// <summary>
        /// Enable/disable passively gathering of device identity information about the devices on the network connected to this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("deviceIdentification")]
        public Input<string>? DeviceIdentification { get; set; }

        /// <summary>
        /// Enable/disable active gathering of device identity information about the devices on the network connected to this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("deviceIdentificationActiveScan")]
        public Input<string>? DeviceIdentificationActiveScan { get; set; }

        /// <summary>
        /// Enable/disable inclusion of devices detected on this interface in network vulnerability scans. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("deviceNetscan")]
        public Input<string>? DeviceNetscan { get; set; }

        /// <summary>
        /// Enable/disable passive gathering of user identity information about users on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("deviceUserIdentification")]
        public Input<string>? DeviceUserIdentification { get; set; }

        /// <summary>
        /// Device Index.
        /// </summary>
        [Input("devindex")]
        public Input<int>? Devindex { get; set; }

        /// <summary>
        /// Enable/disable addition of classless static routes retrieved from DHCP server. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dhcpClasslessRouteAddition")]
        public Input<string>? DhcpClasslessRouteAddition { get; set; }

        /// <summary>
        /// DHCP client identifier.
        /// </summary>
        [Input("dhcpClientIdentifier")]
        public Input<string>? DhcpClientIdentifier { get; set; }

        /// <summary>
        /// Enable/disable DHCP relay agent option. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dhcpRelayAgentOption")]
        public Input<string>? DhcpRelayAgentOption { get; set; }

        /// <summary>
        /// Specify outgoing interface to reach server.
        /// </summary>
        [Input("dhcpRelayInterface")]
        public Input<string>? DhcpRelayInterface { get; set; }

        /// <summary>
        /// Specify how to select outgoing interface to reach server. Valid values: `auto`, `sdwan`, `specify`.
        /// </summary>
        [Input("dhcpRelayInterfaceSelectMethod")]
        public Input<string>? DhcpRelayInterfaceSelectMethod { get; set; }

        /// <summary>
        /// DHCP relay IP address.
        /// </summary>
        [Input("dhcpRelayIp")]
        public Input<string>? DhcpRelayIp { get; set; }

        /// <summary>
        /// DHCP relay link selection.
        /// </summary>
        [Input("dhcpRelayLinkSelection")]
        public Input<string>? DhcpRelayLinkSelection { get; set; }

        /// <summary>
        /// Enable/disable sending DHCP request to all servers. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("dhcpRelayRequestAllServer")]
        public Input<string>? DhcpRelayRequestAllServer { get; set; }

        /// <summary>
        /// Enable/disable allowing this interface to act as a DHCP relay. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("dhcpRelayService")]
        public Input<string>? DhcpRelayService { get; set; }

        /// <summary>
        /// DHCP relay type (regular or IPsec). Valid values: `regular`, `ipsec`.
        /// </summary>
        [Input("dhcpRelayType")]
        public Input<string>? DhcpRelayType { get; set; }

        /// <summary>
        /// DHCP renew time in seconds (300-604800), 0 means use the renew time provided by the server.
        /// </summary>
        [Input("dhcpRenewTime")]
        public Input<int>? DhcpRenewTime { get; set; }

        [Input("dhcpSnoopingServerLists")]
        private InputList<Inputs.SystemInterfaceDhcpSnoopingServerListArgs>? _dhcpSnoopingServerLists;

        /// <summary>
        /// Configure DHCP server access list. The structure of `dhcp_snooping_server_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceDhcpSnoopingServerListArgs> DhcpSnoopingServerLists
        {
            get => _dhcpSnoopingServerLists ?? (_dhcpSnoopingServerLists = new InputList<Inputs.SystemInterfaceDhcpSnoopingServerListArgs>());
            set => _dhcpSnoopingServerLists = value;
        }

        /// <summary>
        /// Time in seconds to wait before retrying to start a PPPoE discovery, 0 means no timeout.
        /// </summary>
        [Input("discRetryTimeout")]
        public Input<int>? DiscRetryTimeout { get; set; }

        /// <summary>
        /// Time in milliseconds to wait before sending a notification that this interface is down or disconnected.
        /// </summary>
        [Input("disconnectThreshold")]
        public Input<int>? DisconnectThreshold { get; set; }

        /// <summary>
        /// Distance for routes learned through PPPoE or DHCP, lower distance indicates preferred route.
        /// </summary>
        [Input("distance")]
        public Input<int>? Distance { get; set; }

        /// <summary>
        /// Enable/disable use DNS acquired by DHCP or PPPoE. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dnsServerOverride")]
        public Input<string>? DnsServerOverride { get; set; }

        /// <summary>
        /// DNS transport protocols. Valid values: `cleartext`, `dot`, `doh`.
        /// </summary>
        [Input("dnsServerProtocol")]
        public Input<string>? DnsServerProtocol { get; set; }

        /// <summary>
        /// Enable/disable drop fragment packets. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dropFragment")]
        public Input<string>? DropFragment { get; set; }

        /// <summary>
        /// Enable/disable drop overlapped fragment packets. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dropOverlappedFragment")]
        public Input<string>? DropOverlappedFragment { get; set; }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        /// <summary>
        /// EAP CA certificate name.
        /// </summary>
        [Input("eapCaCert")]
        public Input<string>? EapCaCert { get; set; }

        /// <summary>
        /// EAP identity.
        /// </summary>
        [Input("eapIdentity")]
        public Input<string>? EapIdentity { get; set; }

        /// <summary>
        /// EAP method. Valid values: `tls`, `peap`.
        /// </summary>
        [Input("eapMethod")]
        public Input<string>? EapMethod { get; set; }

        [Input("eapPassword")]
        private Input<string>? _eapPassword;

        /// <summary>
        /// EAP password.
        /// </summary>
        public Input<string>? EapPassword
        {
            get => _eapPassword;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _eapPassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Enable/disable EAP-Supplicant. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("eapSupplicant")]
        public Input<string>? EapSupplicant { get; set; }

        /// <summary>
        /// EAP user certificate name.
        /// </summary>
        [Input("eapUserCert")]
        public Input<string>? EapUserCert { get; set; }

        /// <summary>
        /// Outgoing traffic shaping profile.
        /// </summary>
        [Input("egressShapingProfile")]
        public Input<string>? EgressShapingProfile { get; set; }

        /// <summary>
        /// Enable/disable endpoint compliance enforcement. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("endpointCompliance")]
        public Input<string>? EndpointCompliance { get; set; }

        /// <summary>
        /// Estimated maximum downstream bandwidth (kbps). Used to estimate link utilization.
        /// </summary>
        [Input("estimatedDownstreamBandwidth")]
        public Input<int>? EstimatedDownstreamBandwidth { get; set; }

        /// <summary>
        /// Estimated maximum upstream bandwidth (kbps). Used to estimate link utilization.
        /// </summary>
        [Input("estimatedUpstreamBandwidth")]
        public Input<int>? EstimatedUpstreamBandwidth { get; set; }

        /// <summary>
        /// Enable/disable the explicit FTP proxy on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("explicitFtpProxy")]
        public Input<string>? ExplicitFtpProxy { get; set; }

        /// <summary>
        /// Enable/disable the explicit web proxy on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("explicitWebProxy")]
        public Input<string>? ExplicitWebProxy { get; set; }

        /// <summary>
        /// Enable/disable identifying the interface as an external interface (which usually means it's connected to the Internet). Valid values: `enable`, `disable`.
        /// </summary>
        [Input("external")]
        public Input<string>? External { get; set; }

        /// <summary>
        /// Action on extender when interface fail . Valid values: `soft-restart`, `hard-restart`, `reboot`.
        /// </summary>
        [Input("failActionOnExtender")]
        public Input<string>? FailActionOnExtender { get; set; }

        [Input("failAlertInterfaces")]
        private InputList<Inputs.SystemInterfaceFailAlertInterfaceArgs>? _failAlertInterfaces;

        /// <summary>
        /// Names of the FortiGate interfaces from which the link failure alert is sent for this interface. The structure of `fail_alert_interfaces` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceFailAlertInterfaceArgs> FailAlertInterfaces
        {
            get => _failAlertInterfaces ?? (_failAlertInterfaces = new InputList<Inputs.SystemInterfaceFailAlertInterfaceArgs>());
            set => _failAlertInterfaces = value;
        }

        /// <summary>
        /// Select link-failed-signal or link-down method to alert about a failed link. Valid values: `link-failed-signal`, `link-down`.
        /// </summary>
        [Input("failAlertMethod")]
        public Input<string>? FailAlertMethod { get; set; }

        /// <summary>
        /// Enable/disable fail detection features for this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("failDetect")]
        public Input<string>? FailDetect { get; set; }

        /// <summary>
        /// Options for detecting that this interface has failed. Valid values: `detectserver`, `link-down`.
        /// </summary>
        [Input("failDetectOption")]
        public Input<string>? FailDetectOption { get; set; }

        /// <summary>
        /// Enable/disable FortiHeartBeat (FortiTelemetry on GUI). Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fortiheartbeat")]
        public Input<string>? Fortiheartbeat { get; set; }

        /// <summary>
        /// Enable FortiLink to dedicate this interface to manage other Fortinet devices. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fortilink")]
        public Input<string>? Fortilink { get; set; }

        /// <summary>
        /// fortilink split interface backup link.
        /// </summary>
        [Input("fortilinkBackupLink")]
        public Input<int>? FortilinkBackupLink { get; set; }

        /// <summary>
        /// Protocol for FortiGate neighbor discovery. Valid values: `lldp`, `fortilink`.
        /// </summary>
        [Input("fortilinkNeighborDetect")]
        public Input<string>? FortilinkNeighborDetect { get; set; }

        /// <summary>
        /// Enable/disable FortiLink split interface to connect member link to different FortiSwitch in stack for uplink redundancy. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fortilinkSplitInterface")]
        public Input<string>? FortilinkSplitInterface { get; set; }

        /// <summary>
        /// Enable/disable FortiLink switch-stacking on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fortilinkStacking")]
        public Input<string>? FortilinkStacking { get; set; }

        /// <summary>
        /// Transparent mode forward domain.
        /// </summary>
        [Input("forwardDomain")]
        public Input<int>? ForwardDomain { get; set; }

        /// <summary>
        /// Configure forward error correction (FEC). Valid values: `none`, `disable`, `cl91-rs-fec`, `cl74-fc-fec`.
        /// </summary>
        [Input("forwardErrorCorrection")]
        public Input<string>? ForwardErrorCorrection { get; set; }

        /// <summary>
        /// Enable/disable detect gateway alive for first. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("gwdetect")]
        public Input<string>? Gwdetect { get; set; }

        /// <summary>
        /// HA election priority for the PING server.
        /// </summary>
        [Input("haPriority")]
        public Input<int>? HaPriority { get; set; }

        /// <summary>
        /// Enable/disable ICMP accept redirect. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("icmpAcceptRedirect")]
        public Input<string>? IcmpAcceptRedirect { get; set; }

        /// <summary>
        /// Enable/disable ICMP send redirect. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("icmpSendRedirect")]
        public Input<string>? IcmpSendRedirect { get; set; }

        /// <summary>
        /// Enable/disable authentication for this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("identAccept")]
        public Input<string>? IdentAccept { get; set; }

        /// <summary>
        /// PPPoE auto disconnect after idle timeout seconds, 0 means no timeout.
        /// </summary>
        [Input("idleTimeout")]
        public Input<int>? IdleTimeout { get; set; }

        /// <summary>
        /// Configure IKE authentication SAML server.
        /// </summary>
        [Input("ikeSamlServer")]
        public Input<string>? IkeSamlServer { get; set; }

        /// <summary>
        /// Bandwidth limit for incoming traffic (0 - 16776000 kbps), 0 means unlimited.
        /// </summary>
        [Input("inbandwidth")]
        public Input<int>? Inbandwidth { get; set; }

        /// <summary>
        /// Incoming traffic shaping profile.
        /// </summary>
        [Input("ingressShapingProfile")]
        public Input<string>? IngressShapingProfile { get; set; }

        /// <summary>
        /// Ingress Spillover threshold (0 - 16776000 kbps).
        /// </summary>
        [Input("ingressSpilloverThreshold")]
        public Input<int>? IngressSpilloverThreshold { get; set; }

        /// <summary>
        /// Interface name.
        /// </summary>
        [Input("interface")]
        public Input<string>? Interface { get; set; }

        /// <summary>
        /// Implicitly created.
        /// </summary>
        [Input("internal")]
        public Input<int>? Internal { get; set; }

        /// <summary>
        /// Interface IPv4 address and subnet mask, syntax: X.X.X.X/24.
        /// </summary>
        [Input("ip")]
        public Input<string>? Ip { get; set; }

        /// <summary>
        /// Enable/disable automatic IP address assignment of this interface by FortiIPAM. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipManagedByFortiipam")]
        public Input<string>? IpManagedByFortiipam { get; set; }

        /// <summary>
        /// Enable/disable IP/MAC binding. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipmac")]
        public Input<string>? Ipmac { get; set; }

        /// <summary>
        /// Enable/disable the use of this interface as a one-armed sniffer. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipsSnifferMode")]
        public Input<string>? IpsSnifferMode { get; set; }

        /// <summary>
        /// Unnumbered IP used for PPPoE interfaces for which no unique local address is provided.
        /// </summary>
        [Input("ipunnumbered")]
        public Input<string>? Ipunnumbered { get; set; }

        /// <summary>
        /// IPv6 of interface. The structure of `ipv6` block is documented below.
        /// </summary>
        [Input("ipv6")]
        public Input<Inputs.SystemInterfaceIpv6Args>? Ipv6 { get; set; }

        /// <summary>
        /// Enable/disable l2 forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("l2forward")]
        public Input<string>? L2forward { get; set; }

        /// <summary>
        /// LACP HA secondary member. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("lacpHaSecondary")]
        public Input<string>? LacpHaSecondary { get; set; }

        /// <summary>
        /// LACP HA slave. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("lacpHaSlave")]
        public Input<string>? LacpHaSlave { get; set; }

        /// <summary>
        /// LACP mode. Valid values: `static`, `passive`, `active`.
        /// </summary>
        [Input("lacpMode")]
        public Input<string>? LacpMode { get; set; }

        /// <summary>
        /// How often the interface sends LACP messages. Valid values: `slow`, `fast`.
        /// </summary>
        [Input("lacpSpeed")]
        public Input<string>? LacpSpeed { get; set; }

        /// <summary>
        /// Time in seconds between PPPoE Link Control Protocol (LCP) echo requests.
        /// </summary>
        [Input("lcpEchoInterval")]
        public Input<int>? LcpEchoInterval { get; set; }

        /// <summary>
        /// Maximum missed LCP echo messages before disconnect.
        /// </summary>
        [Input("lcpMaxEchoFails")]
        public Input<int>? LcpMaxEchoFails { get; set; }

        /// <summary>
        /// Number of milliseconds to wait before considering a link is up.
        /// </summary>
        [Input("linkUpDelay")]
        public Input<int>? LinkUpDelay { get; set; }

        /// <summary>
        /// LLDP-MED network policy profile.
        /// </summary>
        [Input("lldpNetworkPolicy")]
        public Input<string>? LldpNetworkPolicy { get; set; }

        /// <summary>
        /// Enable/disable Link Layer Discovery Protocol (LLDP) reception. Valid values: `enable`, `disable`, `vdom`.
        /// </summary>
        [Input("lldpReception")]
        public Input<string>? LldpReception { get; set; }

        /// <summary>
        /// Enable/disable Link Layer Discovery Protocol (LLDP) transmission. Valid values: `enable`, `disable`, `vdom`.
        /// </summary>
        [Input("lldpTransmission")]
        public Input<string>? LldpTransmission { get; set; }

        /// <summary>
        /// Change the interface's MAC address.
        /// </summary>
        [Input("macaddr")]
        public Input<string>? Macaddr { get; set; }

        [Input("managedDevices")]
        private InputList<Inputs.SystemInterfaceManagedDeviceArgs>? _managedDevices;

        /// <summary>
        /// Available when FortiLink is enabled, used for managed devices through FortiLink interface. The structure of `managed_device` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceManagedDeviceArgs> ManagedDevices
        {
            get => _managedDevices ?? (_managedDevices = new InputList<Inputs.SystemInterfaceManagedDeviceArgs>());
            set => _managedDevices = value;
        }

        /// <summary>
        /// Number of IP addresses to be allocated by FortiIPAM and used by this FortiGate unit's DHCP server settings.
        /// </summary>
        [Input("managedSubnetworkSize")]
        public Input<string>? ManagedSubnetworkSize { get; set; }

        /// <summary>
        /// High Availability in-band management IP address of this interface.
        /// </summary>
        [Input("managementIp")]
        public Input<string>? ManagementIp { get; set; }

        /// <summary>
        /// Measured downstream bandwidth (kbps).
        /// </summary>
        [Input("measuredDownstreamBandwidth")]
        public Input<int>? MeasuredDownstreamBandwidth { get; set; }

        /// <summary>
        /// Measured upstream bandwidth (kbps).
        /// </summary>
        [Input("measuredUpstreamBandwidth")]
        public Input<int>? MeasuredUpstreamBandwidth { get; set; }

        /// <summary>
        /// Select SFP media interface type Valid values: `none`, `gmii`, `sgmii`, `sr`, `lr`, `cr`, `sr4`, `lr4`, `cr4`.
        /// </summary>
        [Input("mediatype")]
        public Input<string>? Mediatype { get; set; }

        [Input("members")]
        private InputList<Inputs.SystemInterfaceMemberArgs>? _members;

        /// <summary>
        /// Physical interfaces that belong to the aggregate or redundant interface. The structure of `member` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceMemberArgs> Members
        {
            get => _members ?? (_members = new InputList<Inputs.SystemInterfaceMemberArgs>());
            set => _members = value;
        }

        /// <summary>
        /// Minimum number of aggregated ports that must be up.
        /// </summary>
        [Input("minLinks")]
        public Input<int>? MinLinks { get; set; }

        /// <summary>
        /// Action to take when less than the configured minimum number of links are active. Valid values: `operational`, `administrative`.
        /// </summary>
        [Input("minLinksDown")]
        public Input<string>? MinLinksDown { get; set; }

        /// <summary>
        /// Addressing mode (static, DHCP, PPPoE). Valid values: `static`, `dhcp`, `pppoe`.
        /// </summary>
        [Input("mode")]
        public Input<string>? Mode { get; set; }

        /// <summary>
        /// Enable monitoring bandwidth on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("monitorBandwidth")]
        public Input<string>? MonitorBandwidth { get; set; }

        /// <summary>
        /// MTU value for this interface.
        /// </summary>
        [Input("mtu")]
        public Input<int>? Mtu { get; set; }

        /// <summary>
        /// Enable to set a custom MTU for this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("mtuOverride")]
        public Input<string>? MtuOverride { get; set; }

        /// <summary>
        /// Name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Enable/disable NDISC forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ndiscforward")]
        public Input<string>? Ndiscforward { get; set; }

        /// <summary>
        /// Enable/disable NETBIOS forwarding. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("netbiosForward")]
        public Input<string>? NetbiosForward { get; set; }

        /// <summary>
        /// Enable/disable NetFlow on this interface and set the data that NetFlow collects (rx, tx, or both). Valid values: `disable`, `tx`, `rx`, `both`.
        /// </summary>
        [Input("netflowSampler")]
        public Input<string>? NetflowSampler { get; set; }

        /// <summary>
        /// Bandwidth limit for outgoing traffic (0 - 16776000 kbps).
        /// </summary>
        [Input("outbandwidth")]
        public Input<int>? Outbandwidth { get; set; }

        /// <summary>
        /// PPPoE Active Discovery Terminate (PADT) used to terminate sessions after an idle time.
        /// </summary>
        [Input("padtRetryTimeout")]
        public Input<int>? PadtRetryTimeout { get; set; }

        [Input("password")]
        private Input<string>? _password;

        /// <summary>
        /// PPPoE account's password.
        /// </summary>
        public Input<string>? Password
        {
            get => _password;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// PING server status.
        /// </summary>
        [Input("pingServStatus")]
        public Input<int>? PingServStatus { get; set; }

        /// <summary>
        /// sFlow polling interval (1 - 255 sec).
        /// </summary>
        [Input("pollingInterval")]
        public Input<int>? PollingInterval { get; set; }

        /// <summary>
        /// Enable/disable PPPoE unnumbered negotiation. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("pppoeUnnumberedNegotiate")]
        public Input<string>? PppoeUnnumberedNegotiate { get; set; }

        /// <summary>
        /// PPTP authentication type. Valid values: `auto`, `pap`, `chap`, `mschapv1`, `mschapv2`.
        /// </summary>
        [Input("pptpAuthType")]
        public Input<string>? PptpAuthType { get; set; }

        /// <summary>
        /// Enable/disable PPTP client. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("pptpClient")]
        public Input<string>? PptpClient { get; set; }

        [Input("pptpPassword")]
        private Input<string>? _pptpPassword;

        /// <summary>
        /// PPTP password.
        /// </summary>
        public Input<string>? PptpPassword
        {
            get => _pptpPassword;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _pptpPassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// PPTP server IP address.
        /// </summary>
        [Input("pptpServerIp")]
        public Input<string>? PptpServerIp { get; set; }

        /// <summary>
        /// Idle timer in minutes (0 for disabled).
        /// </summary>
        [Input("pptpTimeout")]
        public Input<int>? PptpTimeout { get; set; }

        /// <summary>
        /// PPTP user name.
        /// </summary>
        [Input("pptpUser")]
        public Input<string>? PptpUser { get; set; }

        /// <summary>
        /// Enable/disable preservation of session route when dirty. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("preserveSessionRoute")]
        public Input<string>? PreserveSessionRoute { get; set; }

        /// <summary>
        /// Priority of learned routes.
        /// </summary>
        [Input("priority")]
        public Input<int>? Priority { get; set; }

        /// <summary>
        /// Enable/disable fail back to higher priority port once recovered. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("priorityOverride")]
        public Input<string>? PriorityOverride { get; set; }

        /// <summary>
        /// Enable/disable proxy captive portal on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("proxyCaptivePortal")]
        public Input<string>? ProxyCaptivePortal { get; set; }

        /// <summary>
        /// IPv4 reachable time in milliseconds (30000 - 3600000, default = 30000).
        /// </summary>
        [Input("reachableTime")]
        public Input<int>? ReachableTime { get; set; }

        /// <summary>
        /// Redundant interface.
        /// </summary>
        [Input("redundantInterface")]
        public Input<string>? RedundantInterface { get; set; }

        /// <summary>
        /// Remote IP address of tunnel.
        /// </summary>
        [Input("remoteIp")]
        public Input<string>? RemoteIp { get; set; }

        /// <summary>
        /// Replacement message override group.
        /// </summary>
        [Input("replacemsgOverrideGroup")]
        public Input<string>? ReplacemsgOverrideGroup { get; set; }

        /// <summary>
        /// RX ring size.
        /// </summary>
        [Input("ringRx")]
        public Input<int>? RingRx { get; set; }

        /// <summary>
        /// TX ring size.
        /// </summary>
        [Input("ringTx")]
        public Input<int>? RingTx { get; set; }

        /// <summary>
        /// Interface role. Valid values: `lan`, `wan`, `dmz`, `undefined`.
        /// </summary>
        [Input("role")]
        public Input<string>? Role { get; set; }

        /// <summary>
        /// Data that NetFlow collects (rx, tx, or both). Valid values: `tx`, `rx`, `both`.
        /// </summary>
        [Input("sampleDirection")]
        public Input<string>? SampleDirection { get; set; }

        /// <summary>
        /// sFlow sample rate (10 - 99999).
        /// </summary>
        [Input("sampleRate")]
        public Input<int>? SampleRate { get; set; }

        /// <summary>
        /// Enable monitoring or blocking connections to Botnet servers through this interface. Valid values: `disable`, `block`, `monitor`.
        /// </summary>
        [Input("scanBotnetConnections")]
        public Input<string>? ScanBotnetConnections { get; set; }

        /// <summary>
        /// Enable/disable adding a secondary IP to this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("secondaryIp")]
        public Input<string>? SecondaryIp { get; set; }

        [Input("secondaryips")]
        private InputList<Inputs.SystemInterfaceSecondaryipArgs>? _secondaryips;

        /// <summary>
        /// Second IP address of interface. The structure of `secondaryip` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceSecondaryipArgs> Secondaryips
        {
            get => _secondaryips ?? (_secondaryips = new InputList<Inputs.SystemInterfaceSecondaryipArgs>());
            set => _secondaryips = value;
        }

        /// <summary>
        /// Name of security-exempt-list.
        /// </summary>
        [Input("securityExemptList")]
        public Input<string>? SecurityExemptList { get; set; }

        /// <summary>
        /// URL of external authentication logout server.
        /// </summary>
        [Input("securityExternalLogout")]
        public Input<string>? SecurityExternalLogout { get; set; }

        /// <summary>
        /// URL of external authentication web server.
        /// </summary>
        [Input("securityExternalWeb")]
        public Input<string>? SecurityExternalWeb { get; set; }

        [Input("securityGroups")]
        private InputList<Inputs.SystemInterfaceSecurityGroupArgs>? _securityGroups;

        /// <summary>
        /// User groups that can authenticate with the captive portal. The structure of `security_groups` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceSecurityGroupArgs> SecurityGroups
        {
            get => _securityGroups ?? (_securityGroups = new InputList<Inputs.SystemInterfaceSecurityGroupArgs>());
            set => _securityGroups = value;
        }

        /// <summary>
        /// Enable/disable MAC authentication bypass. Valid values: `mac-auth-only`, `enable`, `disable`.
        /// </summary>
        [Input("securityMacAuthBypass")]
        public Input<string>? SecurityMacAuthBypass { get; set; }

        /// <summary>
        /// Turn on captive portal authentication for this interface. Valid values: `none`, `captive-portal`, `802.1X`.
        /// </summary>
        [Input("securityMode")]
        public Input<string>? SecurityMode { get; set; }

        /// <summary>
        /// URL redirection after disclaimer/authentication.
        /// </summary>
        [Input("securityRedirectUrl")]
        public Input<string>? SecurityRedirectUrl { get; set; }

        /// <summary>
        /// PPPoE service name.
        /// </summary>
        [Input("serviceName")]
        public Input<string>? ServiceName { get; set; }

        /// <summary>
        /// Enable/disable sFlow on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sflowSampler")]
        public Input<string>? SflowSampler { get; set; }

        /// <summary>
        /// Permanent SNMP Index of the interface.
        /// </summary>
        [Input("snmpIndex")]
        public Input<int>? SnmpIndex { get; set; }

        /// <summary>
        /// Interface speed. The default setting and the options available depend on the interface hardware.
        /// </summary>
        [Input("speed")]
        public Input<string>? Speed { get; set; }

        /// <summary>
        /// Egress Spillover threshold (0 - 16776000 kbps), 0 means unlimited.
        /// </summary>
        [Input("spilloverThreshold")]
        public Input<int>? SpilloverThreshold { get; set; }

        /// <summary>
        /// Enable/disable source IP check. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("srcCheck")]
        public Input<string>? SrcCheck { get; set; }

        /// <summary>
        /// Bring the interface up or shut the interface down. Valid values: `up`, `down`.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// Enable/disable STP. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("stp")]
        public Input<string>? Stp { get; set; }

        /// <summary>
        /// Control STP behaviour on HA secondary. Valid values: `disable`, `enable`, `priority-adjust`.
        /// </summary>
        [Input("stpHaSecondary")]
        public Input<string>? StpHaSecondary { get; set; }

        /// <summary>
        /// Enable/disable STP forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("stpforward")]
        public Input<string>? Stpforward { get; set; }

        /// <summary>
        /// Configure STP forwarding mode. Valid values: `rpl-all-ext-id`, `rpl-bridge-ext-id`, `rpl-nothing`.
        /// </summary>
        [Input("stpforwardMode")]
        public Input<string>? StpforwardMode { get; set; }

        /// <summary>
        /// Enable to always send packets from this interface to a destination MAC address. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("subst")]
        public Input<string>? Subst { get; set; }

        /// <summary>
        /// Destination MAC address that all packets are sent to from this interface.
        /// </summary>
        [Input("substituteDstMac")]
        public Input<string>? SubstituteDstMac { get; set; }

        /// <summary>
        /// Initial create for switch-controller VLANs.
        /// </summary>
        [Input("swcFirstCreate")]
        public Input<int>? SwcFirstCreate { get; set; }

        /// <summary>
        /// Creation status for switch-controller VLANs.
        /// </summary>
        [Input("swcVlan")]
        public Input<int>? SwcVlan { get; set; }

        /// <summary>
        /// Contained in switch.
        /// </summary>
        [Input("switch")]
        public Input<string>? Switch { get; set; }

        /// <summary>
        /// Block FortiSwitch port-to-port traffic. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerAccessVlan")]
        public Input<string>? SwitchControllerAccessVlan { get; set; }

        /// <summary>
        /// Enable/disable FortiSwitch ARP inspection. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerArpInspection")]
        public Input<string>? SwitchControllerArpInspection { get; set; }

        /// <summary>
        /// Switch controller DHCP snooping. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerDhcpSnooping")]
        public Input<string>? SwitchControllerDhcpSnooping { get; set; }

        /// <summary>
        /// Switch controller DHCP snooping option82. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerDhcpSnoopingOption82")]
        public Input<string>? SwitchControllerDhcpSnoopingOption82 { get; set; }

        /// <summary>
        /// Switch controller DHCP snooping verify MAC. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerDhcpSnoopingVerifyMac")]
        public Input<string>? SwitchControllerDhcpSnoopingVerifyMac { get; set; }

        /// <summary>
        /// Integrated FortiLink settings for managed FortiSwitch.
        /// </summary>
        [Input("switchControllerDynamic")]
        public Input<string>? SwitchControllerDynamic { get; set; }

        /// <summary>
        /// Interface's purpose when assigning traffic (read only).
        /// </summary>
        [Input("switchControllerFeature")]
        public Input<string>? SwitchControllerFeature { get; set; }

        /// <summary>
        /// Switch controller IGMP snooping. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerIgmpSnooping")]
        public Input<string>? SwitchControllerIgmpSnooping { get; set; }

        /// <summary>
        /// Switch controller IGMP snooping fast-leave. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerIgmpSnoopingFastLeave")]
        public Input<string>? SwitchControllerIgmpSnoopingFastLeave { get; set; }

        /// <summary>
        /// Switch controller IGMP snooping proxy. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerIgmpSnoopingProxy")]
        public Input<string>? SwitchControllerIgmpSnoopingProxy { get; set; }

        /// <summary>
        /// Enable/disable managed FortiSwitch IoT scanning. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerIotScanning")]
        public Input<string>? SwitchControllerIotScanning { get; set; }

        /// <summary>
        /// Limit the number of dynamic MAC addresses on this VLAN (1 - 128, 0 = no limit, default).
        /// </summary>
        [Input("switchControllerLearningLimit")]
        public Input<int>? SwitchControllerLearningLimit { get; set; }

        /// <summary>
        /// VLAN to use for FortiLink management purposes.
        /// </summary>
        [Input("switchControllerMgmtVlan")]
        public Input<int>? SwitchControllerMgmtVlan { get; set; }

        /// <summary>
        /// Integrated NAC settings for managed FortiSwitch.
        /// </summary>
        [Input("switchControllerNac")]
        public Input<string>? SwitchControllerNac { get; set; }

        /// <summary>
        /// NetFlow collection and processing. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("switchControllerNetflowCollect")]
        public Input<string>? SwitchControllerNetflowCollect { get; set; }

        /// <summary>
        /// Stop Layer2 MAC learning and interception of BPDUs and other packets on this interface. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("switchControllerRspanMode")]
        public Input<string>? SwitchControllerRspanMode { get; set; }

        /// <summary>
        /// Source IP address used in FortiLink over L3 connections. Valid values: `outbound`, `fixed`.
        /// </summary>
        [Input("switchControllerSourceIp")]
        public Input<string>? SwitchControllerSourceIp { get; set; }

        /// <summary>
        /// Switch controller traffic policy for the VLAN.
        /// </summary>
        [Input("switchControllerTrafficPolicy")]
        public Input<string>? SwitchControllerTrafficPolicy { get; set; }

        /// <summary>
        /// Define a system ID for the aggregate interface.
        /// </summary>
        [Input("systemId")]
        public Input<string>? SystemId { get; set; }

        /// <summary>
        /// Method in which system ID is generated. Valid values: `auto`, `user`.
        /// </summary>
        [Input("systemIdType")]
        public Input<string>? SystemIdType { get; set; }

        [Input("taggings")]
        private InputList<Inputs.SystemInterfaceTaggingArgs>? _taggings;

        /// <summary>
        /// Config object tagging. The structure of `tagging` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceTaggingArgs> Taggings
        {
            get => _taggings ?? (_taggings = new InputList<Inputs.SystemInterfaceTaggingArgs>());
            set => _taggings = value;
        }

        /// <summary>
        /// TCP maximum segment size. 0 means do not change segment size.
        /// </summary>
        [Input("tcpMss")]
        public Input<int>? TcpMss { get; set; }

        /// <summary>
        /// Enable/disable VLAN trunk. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("trunk")]
        public Input<string>? Trunk { get; set; }

        /// <summary>
        /// Trusted host for dedicated management traffic (0.0.0.0/24 for all hosts).
        /// </summary>
        [Input("trustIp1")]
        public Input<string>? TrustIp1 { get; set; }

        /// <summary>
        /// Trusted host for dedicated management traffic (0.0.0.0/24 for all hosts).
        /// </summary>
        [Input("trustIp2")]
        public Input<string>? TrustIp2 { get; set; }

        /// <summary>
        /// Trusted host for dedicated management traffic (0.0.0.0/24 for all hosts).
        /// </summary>
        [Input("trustIp3")]
        public Input<string>? TrustIp3 { get; set; }

        /// <summary>
        /// Trusted IPv6 host for dedicated management traffic (::/0 for all hosts).
        /// </summary>
        [Input("trustIp61")]
        public Input<string>? TrustIp61 { get; set; }

        /// <summary>
        /// Trusted IPv6 host for dedicated management traffic (::/0 for all hosts).
        /// </summary>
        [Input("trustIp62")]
        public Input<string>? TrustIp62 { get; set; }

        /// <summary>
        /// Trusted IPv6 host for dedicated management traffic (::/0 for all hosts).
        /// </summary>
        [Input("trustIp63")]
        public Input<string>? TrustIp63 { get; set; }

        /// <summary>
        /// Interface type.
        /// </summary>
        [Input("type")]
        public Input<string>? Type { get; set; }

        /// <summary>
        /// Username of the PPPoE account, provided by your ISP.
        /// </summary>
        [Input("username")]
        public Input<string>? Username { get; set; }

        /// <summary>
        /// Interface is in this virtual domain (VDOM).
        /// </summary>
        [Input("vdom", required: true)]
        public Input<string> Vdom { get; set; } = null!;

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

        /// <summary>
        /// Switch control interface VLAN ID.
        /// </summary>
        [Input("vindex")]
        public Input<int>? Vindex { get; set; }

        /// <summary>
        /// Ethernet protocol of VLAN. Valid values: `8021q`, `8021ad`.
        /// </summary>
        [Input("vlanProtocol")]
        public Input<string>? VlanProtocol { get; set; }

        /// <summary>
        /// Enable/disable traffic forwarding between VLANs on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("vlanforward")]
        public Input<string>? Vlanforward { get; set; }

        /// <summary>
        /// VLAN ID (1 - 4094).
        /// </summary>
        [Input("vlanid")]
        public Input<int>? Vlanid { get; set; }

        /// <summary>
        /// Virtual Routing Forwarding ID.
        /// </summary>
        [Input("vrf")]
        public Input<int>? Vrf { get; set; }

        /// <summary>
        /// Enable/disable use of virtual MAC for VRRP. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("vrrpVirtualMac")]
        public Input<string>? VrrpVirtualMac { get; set; }

        [Input("vrrps")]
        private InputList<Inputs.SystemInterfaceVrrpArgs>? _vrrps;

        /// <summary>
        /// VRRP configuration. The structure of `vrrp` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceVrrpArgs> Vrrps
        {
            get => _vrrps ?? (_vrrps = new InputList<Inputs.SystemInterfaceVrrpArgs>());
            set => _vrrps = value;
        }

        /// <summary>
        /// Enable/disable WCCP on this interface. Used for encapsulated WCCP communication between WCCP clients and servers. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("wccp")]
        public Input<string>? Wccp { get; set; }

        /// <summary>
        /// Default weight for static routes (if route has no weight configured).
        /// </summary>
        [Input("weight")]
        public Input<int>? Weight { get; set; }

        /// <summary>
        /// WINS server IP.
        /// </summary>
        [Input("winsIp")]
        public Input<string>? WinsIp { get; set; }

        public SystemInterfaceArgs()
        {
        }
        public static new SystemInterfaceArgs Empty => new SystemInterfaceArgs();
    }

    public sealed class SystemInterfaceState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// PPPoE server name.
        /// </summary>
        [Input("acName")]
        public Input<string>? AcName { get; set; }

        /// <summary>
        /// Aggregate interface.
        /// </summary>
        [Input("aggregate")]
        public Input<string>? Aggregate { get; set; }

        /// <summary>
        /// Type of aggregation. Valid values: `physical`, `vxlan`.
        /// </summary>
        [Input("aggregateType")]
        public Input<string>? AggregateType { get; set; }

        /// <summary>
        /// Frame distribution algorithm.
        /// </summary>
        [Input("algorithm")]
        public Input<string>? Algorithm { get; set; }

        /// <summary>
        /// Alias will be displayed with the interface name to make it easier to distinguish.
        /// </summary>
        [Input("alias")]
        public Input<string>? Alias { get; set; }

        /// <summary>
        /// Permitted types of management access to this interface.
        /// </summary>
        [Input("allowaccess")]
        public Input<string>? Allowaccess { get; set; }

        /// <summary>
        /// Enable/disable automatic registration of unknown FortiAP devices. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("apDiscover")]
        public Input<string>? ApDiscover { get; set; }

        /// <summary>
        /// Enable/disable ARP forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("arpforward")]
        public Input<string>? Arpforward { get; set; }

        /// <summary>
        /// HTTPS server certificate.
        /// </summary>
        [Input("authCert")]
        public Input<string>? AuthCert { get; set; }

        /// <summary>
        /// Address of captive portal.
        /// </summary>
        [Input("authPortalAddr")]
        public Input<string>? AuthPortalAddr { get; set; }

        /// <summary>
        /// PPP authentication type to use. Valid values: `auto`, `pap`, `chap`, `mschapv1`, `mschapv2`.
        /// </summary>
        [Input("authType")]
        public Input<string>? AuthType { get; set; }

        /// <summary>
        /// Enable/disable automatic authorization of dedicated Fortinet extension device on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("autoAuthExtensionDevice")]
        public Input<string>? AutoAuthExtensionDevice { get; set; }

        /// <summary>
        /// Indicates whether the interface is automatically created by FortiGate, for example, created during the VPN creation process. If it is, set it to "auto", else keep it empty.
        /// </summary>
        [Input("autogenerated")]
        public Input<string>? Autogenerated { get; set; }

        /// <summary>
        /// Bandwidth measure time
        /// </summary>
        [Input("bandwidthMeasureTime")]
        public Input<int>? BandwidthMeasureTime { get; set; }

        /// <summary>
        /// Bidirectional Forwarding Detection (BFD) settings. Valid values: `global`, `enable`, `disable`.
        /// </summary>
        [Input("bfd")]
        public Input<string>? Bfd { get; set; }

        /// <summary>
        /// BFD desired minimal transmit interval.
        /// </summary>
        [Input("bfdDesiredMinTx")]
        public Input<int>? BfdDesiredMinTx { get; set; }

        /// <summary>
        /// BFD detection multiplier.
        /// </summary>
        [Input("bfdDetectMult")]
        public Input<int>? BfdDetectMult { get; set; }

        /// <summary>
        /// BFD required minimal receive interval.
        /// </summary>
        [Input("bfdRequiredMinRx")]
        public Input<int>? BfdRequiredMinRx { get; set; }

        /// <summary>
        /// Enable/disable broadcasting FortiClient discovery messages. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("broadcastForticlientDiscovery")]
        public Input<string>? BroadcastForticlientDiscovery { get; set; }

        /// <summary>
        /// Enable/disable broadcast forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("broadcastForward")]
        public Input<string>? BroadcastForward { get; set; }

        /// <summary>
        /// Enable/disable captive portal.
        /// </summary>
        [Input("captivePortal")]
        public Input<int>? CaptivePortal { get; set; }

        /// <summary>
        /// CLI connection status.
        /// </summary>
        [Input("cliConnStatus")]
        public Input<int>? CliConnStatus { get; set; }

        [Input("clientOptions")]
        private InputList<Inputs.SystemInterfaceClientOptionGetArgs>? _clientOptions;

        /// <summary>
        /// DHCP client options. The structure of `client_options` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceClientOptionGetArgs> ClientOptions
        {
            get => _clientOptions ?? (_clientOptions = new InputList<Inputs.SystemInterfaceClientOptionGetArgs>());
            set => _clientOptions = value;
        }

        /// <summary>
        /// Color of icon on the GUI.
        /// </summary>
        [Input("color")]
        public Input<int>? Color { get; set; }

        /// <summary>
        /// Configure interface for single purpose. Valid values: `none`, `management`.
        /// </summary>
        [Input("dedicatedTo")]
        public Input<string>? DedicatedTo { get; set; }

        /// <summary>
        /// Enable to get the gateway IP from the DHCP or PPPoE server. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("defaultgw")]
        public Input<string>? Defaultgw { get; set; }

        /// <summary>
        /// Description.
        /// </summary>
        [Input("description")]
        public Input<string>? Description { get; set; }

        /// <summary>
        /// MTU of detected peer (0 - 4294967295).
        /// </summary>
        [Input("detectedPeerMtu")]
        public Input<int>? DetectedPeerMtu { get; set; }

        /// <summary>
        /// Protocols used to detect the server. Valid values: `ping`, `tcp-echo`, `udp-echo`.
        /// </summary>
        [Input("detectprotocol")]
        public Input<string>? Detectprotocol { get; set; }

        /// <summary>
        /// Gateway's ping server for this IP.
        /// </summary>
        [Input("detectserver")]
        public Input<string>? Detectserver { get; set; }

        /// <summary>
        /// Device access list.
        /// </summary>
        [Input("deviceAccessList")]
        public Input<string>? DeviceAccessList { get; set; }

        /// <summary>
        /// Enable/disable passively gathering of device identity information about the devices on the network connected to this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("deviceIdentification")]
        public Input<string>? DeviceIdentification { get; set; }

        /// <summary>
        /// Enable/disable active gathering of device identity information about the devices on the network connected to this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("deviceIdentificationActiveScan")]
        public Input<string>? DeviceIdentificationActiveScan { get; set; }

        /// <summary>
        /// Enable/disable inclusion of devices detected on this interface in network vulnerability scans. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("deviceNetscan")]
        public Input<string>? DeviceNetscan { get; set; }

        /// <summary>
        /// Enable/disable passive gathering of user identity information about users on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("deviceUserIdentification")]
        public Input<string>? DeviceUserIdentification { get; set; }

        /// <summary>
        /// Device Index.
        /// </summary>
        [Input("devindex")]
        public Input<int>? Devindex { get; set; }

        /// <summary>
        /// Enable/disable addition of classless static routes retrieved from DHCP server. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dhcpClasslessRouteAddition")]
        public Input<string>? DhcpClasslessRouteAddition { get; set; }

        /// <summary>
        /// DHCP client identifier.
        /// </summary>
        [Input("dhcpClientIdentifier")]
        public Input<string>? DhcpClientIdentifier { get; set; }

        /// <summary>
        /// Enable/disable DHCP relay agent option. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dhcpRelayAgentOption")]
        public Input<string>? DhcpRelayAgentOption { get; set; }

        /// <summary>
        /// Specify outgoing interface to reach server.
        /// </summary>
        [Input("dhcpRelayInterface")]
        public Input<string>? DhcpRelayInterface { get; set; }

        /// <summary>
        /// Specify how to select outgoing interface to reach server. Valid values: `auto`, `sdwan`, `specify`.
        /// </summary>
        [Input("dhcpRelayInterfaceSelectMethod")]
        public Input<string>? DhcpRelayInterfaceSelectMethod { get; set; }

        /// <summary>
        /// DHCP relay IP address.
        /// </summary>
        [Input("dhcpRelayIp")]
        public Input<string>? DhcpRelayIp { get; set; }

        /// <summary>
        /// DHCP relay link selection.
        /// </summary>
        [Input("dhcpRelayLinkSelection")]
        public Input<string>? DhcpRelayLinkSelection { get; set; }

        /// <summary>
        /// Enable/disable sending DHCP request to all servers. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("dhcpRelayRequestAllServer")]
        public Input<string>? DhcpRelayRequestAllServer { get; set; }

        /// <summary>
        /// Enable/disable allowing this interface to act as a DHCP relay. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("dhcpRelayService")]
        public Input<string>? DhcpRelayService { get; set; }

        /// <summary>
        /// DHCP relay type (regular or IPsec). Valid values: `regular`, `ipsec`.
        /// </summary>
        [Input("dhcpRelayType")]
        public Input<string>? DhcpRelayType { get; set; }

        /// <summary>
        /// DHCP renew time in seconds (300-604800), 0 means use the renew time provided by the server.
        /// </summary>
        [Input("dhcpRenewTime")]
        public Input<int>? DhcpRenewTime { get; set; }

        [Input("dhcpSnoopingServerLists")]
        private InputList<Inputs.SystemInterfaceDhcpSnoopingServerListGetArgs>? _dhcpSnoopingServerLists;

        /// <summary>
        /// Configure DHCP server access list. The structure of `dhcp_snooping_server_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceDhcpSnoopingServerListGetArgs> DhcpSnoopingServerLists
        {
            get => _dhcpSnoopingServerLists ?? (_dhcpSnoopingServerLists = new InputList<Inputs.SystemInterfaceDhcpSnoopingServerListGetArgs>());
            set => _dhcpSnoopingServerLists = value;
        }

        /// <summary>
        /// Time in seconds to wait before retrying to start a PPPoE discovery, 0 means no timeout.
        /// </summary>
        [Input("discRetryTimeout")]
        public Input<int>? DiscRetryTimeout { get; set; }

        /// <summary>
        /// Time in milliseconds to wait before sending a notification that this interface is down or disconnected.
        /// </summary>
        [Input("disconnectThreshold")]
        public Input<int>? DisconnectThreshold { get; set; }

        /// <summary>
        /// Distance for routes learned through PPPoE or DHCP, lower distance indicates preferred route.
        /// </summary>
        [Input("distance")]
        public Input<int>? Distance { get; set; }

        /// <summary>
        /// Enable/disable use DNS acquired by DHCP or PPPoE. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dnsServerOverride")]
        public Input<string>? DnsServerOverride { get; set; }

        /// <summary>
        /// DNS transport protocols. Valid values: `cleartext`, `dot`, `doh`.
        /// </summary>
        [Input("dnsServerProtocol")]
        public Input<string>? DnsServerProtocol { get; set; }

        /// <summary>
        /// Enable/disable drop fragment packets. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dropFragment")]
        public Input<string>? DropFragment { get; set; }

        /// <summary>
        /// Enable/disable drop overlapped fragment packets. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dropOverlappedFragment")]
        public Input<string>? DropOverlappedFragment { get; set; }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        /// <summary>
        /// EAP CA certificate name.
        /// </summary>
        [Input("eapCaCert")]
        public Input<string>? EapCaCert { get; set; }

        /// <summary>
        /// EAP identity.
        /// </summary>
        [Input("eapIdentity")]
        public Input<string>? EapIdentity { get; set; }

        /// <summary>
        /// EAP method. Valid values: `tls`, `peap`.
        /// </summary>
        [Input("eapMethod")]
        public Input<string>? EapMethod { get; set; }

        [Input("eapPassword")]
        private Input<string>? _eapPassword;

        /// <summary>
        /// EAP password.
        /// </summary>
        public Input<string>? EapPassword
        {
            get => _eapPassword;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _eapPassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Enable/disable EAP-Supplicant. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("eapSupplicant")]
        public Input<string>? EapSupplicant { get; set; }

        /// <summary>
        /// EAP user certificate name.
        /// </summary>
        [Input("eapUserCert")]
        public Input<string>? EapUserCert { get; set; }

        /// <summary>
        /// Outgoing traffic shaping profile.
        /// </summary>
        [Input("egressShapingProfile")]
        public Input<string>? EgressShapingProfile { get; set; }

        /// <summary>
        /// Enable/disable endpoint compliance enforcement. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("endpointCompliance")]
        public Input<string>? EndpointCompliance { get; set; }

        /// <summary>
        /// Estimated maximum downstream bandwidth (kbps). Used to estimate link utilization.
        /// </summary>
        [Input("estimatedDownstreamBandwidth")]
        public Input<int>? EstimatedDownstreamBandwidth { get; set; }

        /// <summary>
        /// Estimated maximum upstream bandwidth (kbps). Used to estimate link utilization.
        /// </summary>
        [Input("estimatedUpstreamBandwidth")]
        public Input<int>? EstimatedUpstreamBandwidth { get; set; }

        /// <summary>
        /// Enable/disable the explicit FTP proxy on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("explicitFtpProxy")]
        public Input<string>? ExplicitFtpProxy { get; set; }

        /// <summary>
        /// Enable/disable the explicit web proxy on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("explicitWebProxy")]
        public Input<string>? ExplicitWebProxy { get; set; }

        /// <summary>
        /// Enable/disable identifying the interface as an external interface (which usually means it's connected to the Internet). Valid values: `enable`, `disable`.
        /// </summary>
        [Input("external")]
        public Input<string>? External { get; set; }

        /// <summary>
        /// Action on extender when interface fail . Valid values: `soft-restart`, `hard-restart`, `reboot`.
        /// </summary>
        [Input("failActionOnExtender")]
        public Input<string>? FailActionOnExtender { get; set; }

        [Input("failAlertInterfaces")]
        private InputList<Inputs.SystemInterfaceFailAlertInterfaceGetArgs>? _failAlertInterfaces;

        /// <summary>
        /// Names of the FortiGate interfaces from which the link failure alert is sent for this interface. The structure of `fail_alert_interfaces` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceFailAlertInterfaceGetArgs> FailAlertInterfaces
        {
            get => _failAlertInterfaces ?? (_failAlertInterfaces = new InputList<Inputs.SystemInterfaceFailAlertInterfaceGetArgs>());
            set => _failAlertInterfaces = value;
        }

        /// <summary>
        /// Select link-failed-signal or link-down method to alert about a failed link. Valid values: `link-failed-signal`, `link-down`.
        /// </summary>
        [Input("failAlertMethod")]
        public Input<string>? FailAlertMethod { get; set; }

        /// <summary>
        /// Enable/disable fail detection features for this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("failDetect")]
        public Input<string>? FailDetect { get; set; }

        /// <summary>
        /// Options for detecting that this interface has failed. Valid values: `detectserver`, `link-down`.
        /// </summary>
        [Input("failDetectOption")]
        public Input<string>? FailDetectOption { get; set; }

        /// <summary>
        /// Enable/disable FortiHeartBeat (FortiTelemetry on GUI). Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fortiheartbeat")]
        public Input<string>? Fortiheartbeat { get; set; }

        /// <summary>
        /// Enable FortiLink to dedicate this interface to manage other Fortinet devices. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fortilink")]
        public Input<string>? Fortilink { get; set; }

        /// <summary>
        /// fortilink split interface backup link.
        /// </summary>
        [Input("fortilinkBackupLink")]
        public Input<int>? FortilinkBackupLink { get; set; }

        /// <summary>
        /// Protocol for FortiGate neighbor discovery. Valid values: `lldp`, `fortilink`.
        /// </summary>
        [Input("fortilinkNeighborDetect")]
        public Input<string>? FortilinkNeighborDetect { get; set; }

        /// <summary>
        /// Enable/disable FortiLink split interface to connect member link to different FortiSwitch in stack for uplink redundancy. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fortilinkSplitInterface")]
        public Input<string>? FortilinkSplitInterface { get; set; }

        /// <summary>
        /// Enable/disable FortiLink switch-stacking on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fortilinkStacking")]
        public Input<string>? FortilinkStacking { get; set; }

        /// <summary>
        /// Transparent mode forward domain.
        /// </summary>
        [Input("forwardDomain")]
        public Input<int>? ForwardDomain { get; set; }

        /// <summary>
        /// Configure forward error correction (FEC). Valid values: `none`, `disable`, `cl91-rs-fec`, `cl74-fc-fec`.
        /// </summary>
        [Input("forwardErrorCorrection")]
        public Input<string>? ForwardErrorCorrection { get; set; }

        /// <summary>
        /// Enable/disable detect gateway alive for first. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("gwdetect")]
        public Input<string>? Gwdetect { get; set; }

        /// <summary>
        /// HA election priority for the PING server.
        /// </summary>
        [Input("haPriority")]
        public Input<int>? HaPriority { get; set; }

        /// <summary>
        /// Enable/disable ICMP accept redirect. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("icmpAcceptRedirect")]
        public Input<string>? IcmpAcceptRedirect { get; set; }

        /// <summary>
        /// Enable/disable ICMP send redirect. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("icmpSendRedirect")]
        public Input<string>? IcmpSendRedirect { get; set; }

        /// <summary>
        /// Enable/disable authentication for this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("identAccept")]
        public Input<string>? IdentAccept { get; set; }

        /// <summary>
        /// PPPoE auto disconnect after idle timeout seconds, 0 means no timeout.
        /// </summary>
        [Input("idleTimeout")]
        public Input<int>? IdleTimeout { get; set; }

        /// <summary>
        /// Configure IKE authentication SAML server.
        /// </summary>
        [Input("ikeSamlServer")]
        public Input<string>? IkeSamlServer { get; set; }

        /// <summary>
        /// Bandwidth limit for incoming traffic (0 - 16776000 kbps), 0 means unlimited.
        /// </summary>
        [Input("inbandwidth")]
        public Input<int>? Inbandwidth { get; set; }

        /// <summary>
        /// Incoming traffic shaping profile.
        /// </summary>
        [Input("ingressShapingProfile")]
        public Input<string>? IngressShapingProfile { get; set; }

        /// <summary>
        /// Ingress Spillover threshold (0 - 16776000 kbps).
        /// </summary>
        [Input("ingressSpilloverThreshold")]
        public Input<int>? IngressSpilloverThreshold { get; set; }

        /// <summary>
        /// Interface name.
        /// </summary>
        [Input("interface")]
        public Input<string>? Interface { get; set; }

        /// <summary>
        /// Implicitly created.
        /// </summary>
        [Input("internal")]
        public Input<int>? Internal { get; set; }

        /// <summary>
        /// Interface IPv4 address and subnet mask, syntax: X.X.X.X/24.
        /// </summary>
        [Input("ip")]
        public Input<string>? Ip { get; set; }

        /// <summary>
        /// Enable/disable automatic IP address assignment of this interface by FortiIPAM. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipManagedByFortiipam")]
        public Input<string>? IpManagedByFortiipam { get; set; }

        /// <summary>
        /// Enable/disable IP/MAC binding. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipmac")]
        public Input<string>? Ipmac { get; set; }

        /// <summary>
        /// Enable/disable the use of this interface as a one-armed sniffer. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipsSnifferMode")]
        public Input<string>? IpsSnifferMode { get; set; }

        /// <summary>
        /// Unnumbered IP used for PPPoE interfaces for which no unique local address is provided.
        /// </summary>
        [Input("ipunnumbered")]
        public Input<string>? Ipunnumbered { get; set; }

        /// <summary>
        /// IPv6 of interface. The structure of `ipv6` block is documented below.
        /// </summary>
        [Input("ipv6")]
        public Input<Inputs.SystemInterfaceIpv6GetArgs>? Ipv6 { get; set; }

        /// <summary>
        /// Enable/disable l2 forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("l2forward")]
        public Input<string>? L2forward { get; set; }

        /// <summary>
        /// LACP HA secondary member. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("lacpHaSecondary")]
        public Input<string>? LacpHaSecondary { get; set; }

        /// <summary>
        /// LACP HA slave. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("lacpHaSlave")]
        public Input<string>? LacpHaSlave { get; set; }

        /// <summary>
        /// LACP mode. Valid values: `static`, `passive`, `active`.
        /// </summary>
        [Input("lacpMode")]
        public Input<string>? LacpMode { get; set; }

        /// <summary>
        /// How often the interface sends LACP messages. Valid values: `slow`, `fast`.
        /// </summary>
        [Input("lacpSpeed")]
        public Input<string>? LacpSpeed { get; set; }

        /// <summary>
        /// Time in seconds between PPPoE Link Control Protocol (LCP) echo requests.
        /// </summary>
        [Input("lcpEchoInterval")]
        public Input<int>? LcpEchoInterval { get; set; }

        /// <summary>
        /// Maximum missed LCP echo messages before disconnect.
        /// </summary>
        [Input("lcpMaxEchoFails")]
        public Input<int>? LcpMaxEchoFails { get; set; }

        /// <summary>
        /// Number of milliseconds to wait before considering a link is up.
        /// </summary>
        [Input("linkUpDelay")]
        public Input<int>? LinkUpDelay { get; set; }

        /// <summary>
        /// LLDP-MED network policy profile.
        /// </summary>
        [Input("lldpNetworkPolicy")]
        public Input<string>? LldpNetworkPolicy { get; set; }

        /// <summary>
        /// Enable/disable Link Layer Discovery Protocol (LLDP) reception. Valid values: `enable`, `disable`, `vdom`.
        /// </summary>
        [Input("lldpReception")]
        public Input<string>? LldpReception { get; set; }

        /// <summary>
        /// Enable/disable Link Layer Discovery Protocol (LLDP) transmission. Valid values: `enable`, `disable`, `vdom`.
        /// </summary>
        [Input("lldpTransmission")]
        public Input<string>? LldpTransmission { get; set; }

        /// <summary>
        /// Change the interface's MAC address.
        /// </summary>
        [Input("macaddr")]
        public Input<string>? Macaddr { get; set; }

        [Input("managedDevices")]
        private InputList<Inputs.SystemInterfaceManagedDeviceGetArgs>? _managedDevices;

        /// <summary>
        /// Available when FortiLink is enabled, used for managed devices through FortiLink interface. The structure of `managed_device` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceManagedDeviceGetArgs> ManagedDevices
        {
            get => _managedDevices ?? (_managedDevices = new InputList<Inputs.SystemInterfaceManagedDeviceGetArgs>());
            set => _managedDevices = value;
        }

        /// <summary>
        /// Number of IP addresses to be allocated by FortiIPAM and used by this FortiGate unit's DHCP server settings.
        /// </summary>
        [Input("managedSubnetworkSize")]
        public Input<string>? ManagedSubnetworkSize { get; set; }

        /// <summary>
        /// High Availability in-band management IP address of this interface.
        /// </summary>
        [Input("managementIp")]
        public Input<string>? ManagementIp { get; set; }

        /// <summary>
        /// Measured downstream bandwidth (kbps).
        /// </summary>
        [Input("measuredDownstreamBandwidth")]
        public Input<int>? MeasuredDownstreamBandwidth { get; set; }

        /// <summary>
        /// Measured upstream bandwidth (kbps).
        /// </summary>
        [Input("measuredUpstreamBandwidth")]
        public Input<int>? MeasuredUpstreamBandwidth { get; set; }

        /// <summary>
        /// Select SFP media interface type Valid values: `none`, `gmii`, `sgmii`, `sr`, `lr`, `cr`, `sr4`, `lr4`, `cr4`.
        /// </summary>
        [Input("mediatype")]
        public Input<string>? Mediatype { get; set; }

        [Input("members")]
        private InputList<Inputs.SystemInterfaceMemberGetArgs>? _members;

        /// <summary>
        /// Physical interfaces that belong to the aggregate or redundant interface. The structure of `member` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceMemberGetArgs> Members
        {
            get => _members ?? (_members = new InputList<Inputs.SystemInterfaceMemberGetArgs>());
            set => _members = value;
        }

        /// <summary>
        /// Minimum number of aggregated ports that must be up.
        /// </summary>
        [Input("minLinks")]
        public Input<int>? MinLinks { get; set; }

        /// <summary>
        /// Action to take when less than the configured minimum number of links are active. Valid values: `operational`, `administrative`.
        /// </summary>
        [Input("minLinksDown")]
        public Input<string>? MinLinksDown { get; set; }

        /// <summary>
        /// Addressing mode (static, DHCP, PPPoE). Valid values: `static`, `dhcp`, `pppoe`.
        /// </summary>
        [Input("mode")]
        public Input<string>? Mode { get; set; }

        /// <summary>
        /// Enable monitoring bandwidth on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("monitorBandwidth")]
        public Input<string>? MonitorBandwidth { get; set; }

        /// <summary>
        /// MTU value for this interface.
        /// </summary>
        [Input("mtu")]
        public Input<int>? Mtu { get; set; }

        /// <summary>
        /// Enable to set a custom MTU for this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("mtuOverride")]
        public Input<string>? MtuOverride { get; set; }

        /// <summary>
        /// Name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Enable/disable NDISC forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ndiscforward")]
        public Input<string>? Ndiscforward { get; set; }

        /// <summary>
        /// Enable/disable NETBIOS forwarding. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("netbiosForward")]
        public Input<string>? NetbiosForward { get; set; }

        /// <summary>
        /// Enable/disable NetFlow on this interface and set the data that NetFlow collects (rx, tx, or both). Valid values: `disable`, `tx`, `rx`, `both`.
        /// </summary>
        [Input("netflowSampler")]
        public Input<string>? NetflowSampler { get; set; }

        /// <summary>
        /// Bandwidth limit for outgoing traffic (0 - 16776000 kbps).
        /// </summary>
        [Input("outbandwidth")]
        public Input<int>? Outbandwidth { get; set; }

        /// <summary>
        /// PPPoE Active Discovery Terminate (PADT) used to terminate sessions after an idle time.
        /// </summary>
        [Input("padtRetryTimeout")]
        public Input<int>? PadtRetryTimeout { get; set; }

        [Input("password")]
        private Input<string>? _password;

        /// <summary>
        /// PPPoE account's password.
        /// </summary>
        public Input<string>? Password
        {
            get => _password;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// PING server status.
        /// </summary>
        [Input("pingServStatus")]
        public Input<int>? PingServStatus { get; set; }

        /// <summary>
        /// sFlow polling interval (1 - 255 sec).
        /// </summary>
        [Input("pollingInterval")]
        public Input<int>? PollingInterval { get; set; }

        /// <summary>
        /// Enable/disable PPPoE unnumbered negotiation. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("pppoeUnnumberedNegotiate")]
        public Input<string>? PppoeUnnumberedNegotiate { get; set; }

        /// <summary>
        /// PPTP authentication type. Valid values: `auto`, `pap`, `chap`, `mschapv1`, `mschapv2`.
        /// </summary>
        [Input("pptpAuthType")]
        public Input<string>? PptpAuthType { get; set; }

        /// <summary>
        /// Enable/disable PPTP client. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("pptpClient")]
        public Input<string>? PptpClient { get; set; }

        [Input("pptpPassword")]
        private Input<string>? _pptpPassword;

        /// <summary>
        /// PPTP password.
        /// </summary>
        public Input<string>? PptpPassword
        {
            get => _pptpPassword;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _pptpPassword = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// PPTP server IP address.
        /// </summary>
        [Input("pptpServerIp")]
        public Input<string>? PptpServerIp { get; set; }

        /// <summary>
        /// Idle timer in minutes (0 for disabled).
        /// </summary>
        [Input("pptpTimeout")]
        public Input<int>? PptpTimeout { get; set; }

        /// <summary>
        /// PPTP user name.
        /// </summary>
        [Input("pptpUser")]
        public Input<string>? PptpUser { get; set; }

        /// <summary>
        /// Enable/disable preservation of session route when dirty. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("preserveSessionRoute")]
        public Input<string>? PreserveSessionRoute { get; set; }

        /// <summary>
        /// Priority of learned routes.
        /// </summary>
        [Input("priority")]
        public Input<int>? Priority { get; set; }

        /// <summary>
        /// Enable/disable fail back to higher priority port once recovered. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("priorityOverride")]
        public Input<string>? PriorityOverride { get; set; }

        /// <summary>
        /// Enable/disable proxy captive portal on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("proxyCaptivePortal")]
        public Input<string>? ProxyCaptivePortal { get; set; }

        /// <summary>
        /// IPv4 reachable time in milliseconds (30000 - 3600000, default = 30000).
        /// </summary>
        [Input("reachableTime")]
        public Input<int>? ReachableTime { get; set; }

        /// <summary>
        /// Redundant interface.
        /// </summary>
        [Input("redundantInterface")]
        public Input<string>? RedundantInterface { get; set; }

        /// <summary>
        /// Remote IP address of tunnel.
        /// </summary>
        [Input("remoteIp")]
        public Input<string>? RemoteIp { get; set; }

        /// <summary>
        /// Replacement message override group.
        /// </summary>
        [Input("replacemsgOverrideGroup")]
        public Input<string>? ReplacemsgOverrideGroup { get; set; }

        /// <summary>
        /// RX ring size.
        /// </summary>
        [Input("ringRx")]
        public Input<int>? RingRx { get; set; }

        /// <summary>
        /// TX ring size.
        /// </summary>
        [Input("ringTx")]
        public Input<int>? RingTx { get; set; }

        /// <summary>
        /// Interface role. Valid values: `lan`, `wan`, `dmz`, `undefined`.
        /// </summary>
        [Input("role")]
        public Input<string>? Role { get; set; }

        /// <summary>
        /// Data that NetFlow collects (rx, tx, or both). Valid values: `tx`, `rx`, `both`.
        /// </summary>
        [Input("sampleDirection")]
        public Input<string>? SampleDirection { get; set; }

        /// <summary>
        /// sFlow sample rate (10 - 99999).
        /// </summary>
        [Input("sampleRate")]
        public Input<int>? SampleRate { get; set; }

        /// <summary>
        /// Enable monitoring or blocking connections to Botnet servers through this interface. Valid values: `disable`, `block`, `monitor`.
        /// </summary>
        [Input("scanBotnetConnections")]
        public Input<string>? ScanBotnetConnections { get; set; }

        /// <summary>
        /// Enable/disable adding a secondary IP to this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("secondaryIp")]
        public Input<string>? SecondaryIp { get; set; }

        [Input("secondaryips")]
        private InputList<Inputs.SystemInterfaceSecondaryipGetArgs>? _secondaryips;

        /// <summary>
        /// Second IP address of interface. The structure of `secondaryip` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceSecondaryipGetArgs> Secondaryips
        {
            get => _secondaryips ?? (_secondaryips = new InputList<Inputs.SystemInterfaceSecondaryipGetArgs>());
            set => _secondaryips = value;
        }

        /// <summary>
        /// Name of security-exempt-list.
        /// </summary>
        [Input("securityExemptList")]
        public Input<string>? SecurityExemptList { get; set; }

        /// <summary>
        /// URL of external authentication logout server.
        /// </summary>
        [Input("securityExternalLogout")]
        public Input<string>? SecurityExternalLogout { get; set; }

        /// <summary>
        /// URL of external authentication web server.
        /// </summary>
        [Input("securityExternalWeb")]
        public Input<string>? SecurityExternalWeb { get; set; }

        [Input("securityGroups")]
        private InputList<Inputs.SystemInterfaceSecurityGroupGetArgs>? _securityGroups;

        /// <summary>
        /// User groups that can authenticate with the captive portal. The structure of `security_groups` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceSecurityGroupGetArgs> SecurityGroups
        {
            get => _securityGroups ?? (_securityGroups = new InputList<Inputs.SystemInterfaceSecurityGroupGetArgs>());
            set => _securityGroups = value;
        }

        /// <summary>
        /// Enable/disable MAC authentication bypass. Valid values: `mac-auth-only`, `enable`, `disable`.
        /// </summary>
        [Input("securityMacAuthBypass")]
        public Input<string>? SecurityMacAuthBypass { get; set; }

        /// <summary>
        /// Turn on captive portal authentication for this interface. Valid values: `none`, `captive-portal`, `802.1X`.
        /// </summary>
        [Input("securityMode")]
        public Input<string>? SecurityMode { get; set; }

        /// <summary>
        /// URL redirection after disclaimer/authentication.
        /// </summary>
        [Input("securityRedirectUrl")]
        public Input<string>? SecurityRedirectUrl { get; set; }

        /// <summary>
        /// PPPoE service name.
        /// </summary>
        [Input("serviceName")]
        public Input<string>? ServiceName { get; set; }

        /// <summary>
        /// Enable/disable sFlow on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sflowSampler")]
        public Input<string>? SflowSampler { get; set; }

        /// <summary>
        /// Permanent SNMP Index of the interface.
        /// </summary>
        [Input("snmpIndex")]
        public Input<int>? SnmpIndex { get; set; }

        /// <summary>
        /// Interface speed. The default setting and the options available depend on the interface hardware.
        /// </summary>
        [Input("speed")]
        public Input<string>? Speed { get; set; }

        /// <summary>
        /// Egress Spillover threshold (0 - 16776000 kbps), 0 means unlimited.
        /// </summary>
        [Input("spilloverThreshold")]
        public Input<int>? SpilloverThreshold { get; set; }

        /// <summary>
        /// Enable/disable source IP check. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("srcCheck")]
        public Input<string>? SrcCheck { get; set; }

        /// <summary>
        /// Bring the interface up or shut the interface down. Valid values: `up`, `down`.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// Enable/disable STP. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("stp")]
        public Input<string>? Stp { get; set; }

        /// <summary>
        /// Control STP behaviour on HA secondary. Valid values: `disable`, `enable`, `priority-adjust`.
        /// </summary>
        [Input("stpHaSecondary")]
        public Input<string>? StpHaSecondary { get; set; }

        /// <summary>
        /// Enable/disable STP forwarding. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("stpforward")]
        public Input<string>? Stpforward { get; set; }

        /// <summary>
        /// Configure STP forwarding mode. Valid values: `rpl-all-ext-id`, `rpl-bridge-ext-id`, `rpl-nothing`.
        /// </summary>
        [Input("stpforwardMode")]
        public Input<string>? StpforwardMode { get; set; }

        /// <summary>
        /// Enable to always send packets from this interface to a destination MAC address. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("subst")]
        public Input<string>? Subst { get; set; }

        /// <summary>
        /// Destination MAC address that all packets are sent to from this interface.
        /// </summary>
        [Input("substituteDstMac")]
        public Input<string>? SubstituteDstMac { get; set; }

        /// <summary>
        /// Initial create for switch-controller VLANs.
        /// </summary>
        [Input("swcFirstCreate")]
        public Input<int>? SwcFirstCreate { get; set; }

        /// <summary>
        /// Creation status for switch-controller VLANs.
        /// </summary>
        [Input("swcVlan")]
        public Input<int>? SwcVlan { get; set; }

        /// <summary>
        /// Contained in switch.
        /// </summary>
        [Input("switch")]
        public Input<string>? Switch { get; set; }

        /// <summary>
        /// Block FortiSwitch port-to-port traffic. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerAccessVlan")]
        public Input<string>? SwitchControllerAccessVlan { get; set; }

        /// <summary>
        /// Enable/disable FortiSwitch ARP inspection. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerArpInspection")]
        public Input<string>? SwitchControllerArpInspection { get; set; }

        /// <summary>
        /// Switch controller DHCP snooping. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerDhcpSnooping")]
        public Input<string>? SwitchControllerDhcpSnooping { get; set; }

        /// <summary>
        /// Switch controller DHCP snooping option82. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerDhcpSnoopingOption82")]
        public Input<string>? SwitchControllerDhcpSnoopingOption82 { get; set; }

        /// <summary>
        /// Switch controller DHCP snooping verify MAC. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerDhcpSnoopingVerifyMac")]
        public Input<string>? SwitchControllerDhcpSnoopingVerifyMac { get; set; }

        /// <summary>
        /// Integrated FortiLink settings for managed FortiSwitch.
        /// </summary>
        [Input("switchControllerDynamic")]
        public Input<string>? SwitchControllerDynamic { get; set; }

        /// <summary>
        /// Interface's purpose when assigning traffic (read only).
        /// </summary>
        [Input("switchControllerFeature")]
        public Input<string>? SwitchControllerFeature { get; set; }

        /// <summary>
        /// Switch controller IGMP snooping. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerIgmpSnooping")]
        public Input<string>? SwitchControllerIgmpSnooping { get; set; }

        /// <summary>
        /// Switch controller IGMP snooping fast-leave. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerIgmpSnoopingFastLeave")]
        public Input<string>? SwitchControllerIgmpSnoopingFastLeave { get; set; }

        /// <summary>
        /// Switch controller IGMP snooping proxy. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerIgmpSnoopingProxy")]
        public Input<string>? SwitchControllerIgmpSnoopingProxy { get; set; }

        /// <summary>
        /// Enable/disable managed FortiSwitch IoT scanning. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("switchControllerIotScanning")]
        public Input<string>? SwitchControllerIotScanning { get; set; }

        /// <summary>
        /// Limit the number of dynamic MAC addresses on this VLAN (1 - 128, 0 = no limit, default).
        /// </summary>
        [Input("switchControllerLearningLimit")]
        public Input<int>? SwitchControllerLearningLimit { get; set; }

        /// <summary>
        /// VLAN to use for FortiLink management purposes.
        /// </summary>
        [Input("switchControllerMgmtVlan")]
        public Input<int>? SwitchControllerMgmtVlan { get; set; }

        /// <summary>
        /// Integrated NAC settings for managed FortiSwitch.
        /// </summary>
        [Input("switchControllerNac")]
        public Input<string>? SwitchControllerNac { get; set; }

        /// <summary>
        /// NetFlow collection and processing. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("switchControllerNetflowCollect")]
        public Input<string>? SwitchControllerNetflowCollect { get; set; }

        /// <summary>
        /// Stop Layer2 MAC learning and interception of BPDUs and other packets on this interface. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("switchControllerRspanMode")]
        public Input<string>? SwitchControllerRspanMode { get; set; }

        /// <summary>
        /// Source IP address used in FortiLink over L3 connections. Valid values: `outbound`, `fixed`.
        /// </summary>
        [Input("switchControllerSourceIp")]
        public Input<string>? SwitchControllerSourceIp { get; set; }

        /// <summary>
        /// Switch controller traffic policy for the VLAN.
        /// </summary>
        [Input("switchControllerTrafficPolicy")]
        public Input<string>? SwitchControllerTrafficPolicy { get; set; }

        /// <summary>
        /// Define a system ID for the aggregate interface.
        /// </summary>
        [Input("systemId")]
        public Input<string>? SystemId { get; set; }

        /// <summary>
        /// Method in which system ID is generated. Valid values: `auto`, `user`.
        /// </summary>
        [Input("systemIdType")]
        public Input<string>? SystemIdType { get; set; }

        [Input("taggings")]
        private InputList<Inputs.SystemInterfaceTaggingGetArgs>? _taggings;

        /// <summary>
        /// Config object tagging. The structure of `tagging` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceTaggingGetArgs> Taggings
        {
            get => _taggings ?? (_taggings = new InputList<Inputs.SystemInterfaceTaggingGetArgs>());
            set => _taggings = value;
        }

        /// <summary>
        /// TCP maximum segment size. 0 means do not change segment size.
        /// </summary>
        [Input("tcpMss")]
        public Input<int>? TcpMss { get; set; }

        /// <summary>
        /// Enable/disable VLAN trunk. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("trunk")]
        public Input<string>? Trunk { get; set; }

        /// <summary>
        /// Trusted host for dedicated management traffic (0.0.0.0/24 for all hosts).
        /// </summary>
        [Input("trustIp1")]
        public Input<string>? TrustIp1 { get; set; }

        /// <summary>
        /// Trusted host for dedicated management traffic (0.0.0.0/24 for all hosts).
        /// </summary>
        [Input("trustIp2")]
        public Input<string>? TrustIp2 { get; set; }

        /// <summary>
        /// Trusted host for dedicated management traffic (0.0.0.0/24 for all hosts).
        /// </summary>
        [Input("trustIp3")]
        public Input<string>? TrustIp3 { get; set; }

        /// <summary>
        /// Trusted IPv6 host for dedicated management traffic (::/0 for all hosts).
        /// </summary>
        [Input("trustIp61")]
        public Input<string>? TrustIp61 { get; set; }

        /// <summary>
        /// Trusted IPv6 host for dedicated management traffic (::/0 for all hosts).
        /// </summary>
        [Input("trustIp62")]
        public Input<string>? TrustIp62 { get; set; }

        /// <summary>
        /// Trusted IPv6 host for dedicated management traffic (::/0 for all hosts).
        /// </summary>
        [Input("trustIp63")]
        public Input<string>? TrustIp63 { get; set; }

        /// <summary>
        /// Interface type.
        /// </summary>
        [Input("type")]
        public Input<string>? Type { get; set; }

        /// <summary>
        /// Username of the PPPoE account, provided by your ISP.
        /// </summary>
        [Input("username")]
        public Input<string>? Username { get; set; }

        /// <summary>
        /// Interface is in this virtual domain (VDOM).
        /// </summary>
        [Input("vdom")]
        public Input<string>? Vdom { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

        /// <summary>
        /// Switch control interface VLAN ID.
        /// </summary>
        [Input("vindex")]
        public Input<int>? Vindex { get; set; }

        /// <summary>
        /// Ethernet protocol of VLAN. Valid values: `8021q`, `8021ad`.
        /// </summary>
        [Input("vlanProtocol")]
        public Input<string>? VlanProtocol { get; set; }

        /// <summary>
        /// Enable/disable traffic forwarding between VLANs on this interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("vlanforward")]
        public Input<string>? Vlanforward { get; set; }

        /// <summary>
        /// VLAN ID (1 - 4094).
        /// </summary>
        [Input("vlanid")]
        public Input<int>? Vlanid { get; set; }

        /// <summary>
        /// Virtual Routing Forwarding ID.
        /// </summary>
        [Input("vrf")]
        public Input<int>? Vrf { get; set; }

        /// <summary>
        /// Enable/disable use of virtual MAC for VRRP. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("vrrpVirtualMac")]
        public Input<string>? VrrpVirtualMac { get; set; }

        [Input("vrrps")]
        private InputList<Inputs.SystemInterfaceVrrpGetArgs>? _vrrps;

        /// <summary>
        /// VRRP configuration. The structure of `vrrp` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceVrrpGetArgs> Vrrps
        {
            get => _vrrps ?? (_vrrps = new InputList<Inputs.SystemInterfaceVrrpGetArgs>());
            set => _vrrps = value;
        }

        /// <summary>
        /// Enable/disable WCCP on this interface. Used for encapsulated WCCP communication between WCCP clients and servers. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("wccp")]
        public Input<string>? Wccp { get; set; }

        /// <summary>
        /// Default weight for static routes (if route has no weight configured).
        /// </summary>
        [Input("weight")]
        public Input<int>? Weight { get; set; }

        /// <summary>
        /// WINS server IP.
        /// </summary>
        [Input("winsIp")]
        public Input<string>? WinsIp { get; set; }

        public SystemInterfaceState()
        {
        }
        public static new SystemInterfaceState Empty => new SystemInterfaceState();
    }
}
