<filename>sdk/dotnet/FirewallVip.cs// *** 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 virtual IP for IPv4.
    /// 
    /// ## 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.FirewallVip("trname", new()
    ///     {
    ///         ArpReply = "enable",
    ///         Color = 0,
    ///         DnsMappingTtl = 0,
    ///         Extintf = "any",
    ///         Extip = "1.0.0.1-1.0.0.2",
    ///         Extport = "0-65535",
    ///         Fosid = 0,
    ///         HttpCookieAge = 60,
    ///         HttpCookieDomainFromHost = "disable",
    ///         HttpCookieGeneration = 0,
    ///         HttpCookieShare = "same-ip",
    ///         HttpIpHeader = "disable",
    ///         HttpMultiplex = "disable",
    ///         HttpsCookieSecure = "disable",
    ///         LdbMethod = "static",
    ///         Mappedips = new[]
    ///         {
    ///             new Fortios.Inputs.FirewallVipMappedipArgs
    ///             {
    ///                 Range = "3.0.0.0-3.0.0.1",
    ///             },
    ///         },
    ///         Mappedport = "0-65535",
    ///         MaxEmbryonicConnections = 1000,
    ///         NatSourceVip = "disable",
    ///         OutlookWebAccess = "disable",
    ///         Persistence = "none",
    ///         Portforward = "disable",
    ///         PortmappingType = "1-to-1",
    ///         Protocol = "tcp",
    ///         SslAlgorithm = "high",
    ///         SslClientFallback = "enable",
    ///         SslClientRenegotiation = "secure",
    ///         SslClientSessionStateMax = 1000,
    ///         SslClientSessionStateTimeout = 30,
    ///         SslClientSessionStateType = "both",
    ///         SslDhBits = "2048",
    ///         SslHpkp = "disable",
    ///         SslHpkpAge = 5184000,
    ///         SslHpkpIncludeSubdomains = "disable",
    ///         SslHsts = "disable",
    ///         SslHstsAge = 5184000,
    ///         SslHstsIncludeSubdomains = "disable",
    ///         SslHttpLocationConversion = "disable",
    ///         SslHttpMatchHost = "enable",
    ///         SslMaxVersion = "tls-1.2",
    ///         SslMinVersion = "tls-1.1",
    ///         SslMode = "half",
    ///         SslPfs = "require",
    ///         SslSendEmptyFrags = "enable",
    ///         SslServerAlgorithm = "client",
    ///         SslServerMaxVersion = "client",
    ///         SslServerMinVersion = "client",
    ///         SslServerSessionStateMax = 100,
    ///         SslServerSessionStateTimeout = 60,
    ///         SslServerSessionStateType = "both",
    ///         Type = "static-nat",
    ///         WeblogicServer = "disable",
    ///         WebsphereServer = "disable",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// Firewall Vip can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/firewallVip:FirewallVip labelname {{name}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/firewallVip:FirewallVip labelname {{name}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/firewallVip:FirewallVip")]
    public partial class FirewallVip : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Enable/disable adding NAT46 route. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("addNat46Route")]
        public Output<string> AddNat46Route { get; private set; } = null!;

        /// <summary>
        /// Enable to respond to ARP requests for this virtual IP address. Enabled by default. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("arpReply")]
        public Output<string> ArpReply { get; private set; } = null!;

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

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

        /// <summary>
        /// DNS mapping TTL (Set to zero to use TTL in DNS response, default = 0).
        /// </summary>
        [Output("dnsMappingTtl")]
        public Output<int> DnsMappingTtl { 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>
        /// External FQDN address name. The structure of `extaddr` block is documented below.
        /// </summary>
        [Output("extaddrs")]
        public Output<ImmutableArray<Outputs.FirewallVipExtaddr>> Extaddrs { get; private set; } = null!;

        /// <summary>
        /// Interface connected to the source network that receives the packets that will be forwarded to the destination network.
        /// </summary>
        [Output("extintf")]
        public Output<string> Extintf { get; private set; } = null!;

        /// <summary>
        /// IP address or address range on the external interface that you want to map to an address or address range on the destination network.
        /// </summary>
        [Output("extip")]
        public Output<string> Extip { get; private set; } = null!;

        /// <summary>
        /// Incoming port number range that you want to map to a port number range on the destination network.
        /// </summary>
        [Output("extport")]
        public Output<string> Extport { get; private set; } = null!;

        /// <summary>
        /// Custom defined ID.
        /// </summary>
        [Output("fosid")]
        public Output<int> Fosid { get; private set; } = null!;

        /// <summary>
        /// Enable to have the VIP send gratuitous ARPs. 0=disabled. Set from 5 up to 8640000 seconds to enable.
        /// </summary>
        [Output("gratuitousArpInterval")]
        public Output<int> GratuitousArpInterval { get; private set; } = null!;

        /// <summary>
        /// Time in minutes that client web browsers should keep a cookie. Default is 60 seconds. 0 = no time limit.
        /// </summary>
        [Output("httpCookieAge")]
        public Output<int> HttpCookieAge { get; private set; } = null!;

        /// <summary>
        /// Domain that HTTP cookie persistence should apply to.
        /// </summary>
        [Output("httpCookieDomain")]
        public Output<string> HttpCookieDomain { get; private set; } = null!;

        /// <summary>
        /// Enable/disable use of HTTP cookie domain from host field in HTTP. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("httpCookieDomainFromHost")]
        public Output<string> HttpCookieDomainFromHost { get; private set; } = null!;

        /// <summary>
        /// Generation of HTTP cookie to be accepted. Changing invalidates all existing cookies.
        /// </summary>
        [Output("httpCookieGeneration")]
        public Output<int> HttpCookieGeneration { get; private set; } = null!;

        /// <summary>
        /// Limit HTTP cookie persistence to the specified path.
        /// </summary>
        [Output("httpCookiePath")]
        public Output<string> HttpCookiePath { get; private set; } = null!;

        /// <summary>
        /// Control sharing of cookies across virtual servers. same-ip means a cookie from one virtual server can be used by another. Disable stops cookie sharing. Valid values: `disable`, `same-ip`.
        /// </summary>
        [Output("httpCookieShare")]
        public Output<string> HttpCookieShare { get; private set; } = null!;

        /// <summary>
        /// For HTTP multiplexing, enable to add the original client IP address in the XForwarded-For HTTP header. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("httpIpHeader")]
        public Output<string> HttpIpHeader { get; private set; } = null!;

        /// <summary>
        /// For HTTP multiplexing, enter a custom HTTPS header name. The original client IP address is added to this header. If empty, X-Forwarded-For is used.
        /// </summary>
        [Output("httpIpHeaderName")]
        public Output<string> HttpIpHeaderName { get; private set; } = null!;

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

        /// <summary>
        /// Enable/disable redirection of HTTP to HTTPS Valid values: `enable`, `disable`.
        /// </summary>
        [Output("httpRedirect")]
        public Output<string> HttpRedirect { get; private set; } = null!;

        /// <summary>
        /// Enable/disable verification that inserted HTTPS cookies are secure. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("httpsCookieSecure")]
        public Output<string> HttpsCookieSecure { get; private set; } = null!;

        /// <summary>
        /// Start-mapped-IPv6-address [-end mapped-IPv6-address].
        /// </summary>
        [Output("ipv6Mappedip")]
        public Output<string> Ipv6Mappedip { get; private set; } = null!;

        /// <summary>
        /// IPv6 port number range on the destination network to which the external port number range is mapped.
        /// </summary>
        [Output("ipv6Mappedport")]
        public Output<string> Ipv6Mappedport { get; private set; } = null!;

        /// <summary>
        /// Method used to distribute sessions to real servers. Valid values: `static`, `round-robin`, `weighted`, `least-session`, `least-rtt`, `first-alive`, `http-host`.
        /// </summary>
        [Output("ldbMethod")]
        public Output<string> LdbMethod { get; private set; } = null!;

        /// <summary>
        /// Mapped FQDN address name.
        /// </summary>
        [Output("mappedAddr")]
        public Output<string> MappedAddr { get; private set; } = null!;

        /// <summary>
        /// IP address or address range on the destination network to which the external IP address is mapped. The structure of `mappedip` block is documented below.
        /// </summary>
        [Output("mappedips")]
        public Output<ImmutableArray<Outputs.FirewallVipMappedip>> Mappedips { get; private set; } = null!;

        /// <summary>
        /// Port number range on the destination network to which the external port number range is mapped.
        /// </summary>
        [Output("mappedport")]
        public Output<string> Mappedport { get; private set; } = null!;

        /// <summary>
        /// Maximum number of incomplete connections.
        /// </summary>
        [Output("maxEmbryonicConnections")]
        public Output<int> MaxEmbryonicConnections { get; private set; } = null!;

        /// <summary>
        /// Name of the health check monitor to use when polling to determine a virtual server's connectivity status. The structure of `monitor` block is documented below.
        /// </summary>
        [Output("monitors")]
        public Output<ImmutableArray<Outputs.FirewallVipMonitor>> Monitors { get; private set; } = null!;

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

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

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

        /// <summary>
        /// Enable/disable forcing the source NAT mapped IP to the external IP for all traffic. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("natSourceVip")]
        public Output<string> NatSourceVip { get; private set; } = null!;

        /// <summary>
        /// Enable to add the Front-End-Https header for Microsoft Outlook Web Access. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("outlookWebAccess")]
        public Output<string> OutlookWebAccess { get; private set; } = null!;

        /// <summary>
        /// Configure how to make sure that clients connect to the same server every time they make a request that is part of the same session. Valid values: `none`, `http-cookie`, `ssl-session-id`.
        /// </summary>
        [Output("persistence")]
        public Output<string> Persistence { get; private set; } = null!;

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

        /// <summary>
        /// Port mapping type. Valid values: `1-to-1`, `m-to-n`.
        /// </summary>
        [Output("portmappingType")]
        public Output<string> PortmappingType { get; private set; } = null!;

        /// <summary>
        /// Protocol to use when forwarding packets. Valid values: `tcp`, `udp`, `sctp`, `icmp`.
        /// </summary>
        [Output("protocol")]
        public Output<string> Protocol { get; private set; } = null!;

        /// <summary>
        /// Select the real servers that this server load balancing VIP will distribute traffic to. The structure of `realservers` block is documented below.
        /// </summary>
        [Output("realservers")]
        public Output<ImmutableArray<Outputs.FirewallVipRealserver>> Realservers { get; private set; } = null!;

        /// <summary>
        /// Protocol to be load balanced by the virtual server (also called the server load balance virtual IP). Valid values: `http`, `https`, `imaps`, `pop3s`, `smtps`, `ssl`, `tcp`, `udp`, `ip`.
        /// </summary>
        [Output("serverType")]
        public Output<string> ServerType { get; private set; } = null!;

        /// <summary>
        /// Service name. The structure of `service` block is documented below.
        /// </summary>
        [Output("services")]
        public Output<ImmutableArray<Outputs.FirewallVipService>> Services { get; private set; } = null!;

        /// <summary>
        /// Source address filter. Each address must be either an IP/subnet (x.x.x.x/n) or a range (x.x.x.x-y.y.y.y). Separate addresses with spaces. The structure of `src_filter` block is documented below.
        /// </summary>
        [Output("srcFilters")]
        public Output<ImmutableArray<Outputs.FirewallVipSrcFilter>> SrcFilters { get; private set; } = null!;

        /// <summary>
        /// Interfaces to which the VIP applies. Separate the names with spaces. The structure of `srcintf_filter` block is documented below.
        /// </summary>
        [Output("srcintfFilters")]
        public Output<ImmutableArray<Outputs.FirewallVipSrcintfFilter>> SrcintfFilters { get; private set; } = null!;

        /// <summary>
        /// Enable/disable FFDHE cipher suite for SSL key exchange. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("sslAcceptFfdheGroups")]
        public Output<string> SslAcceptFfdheGroups { get; private set; } = null!;

        /// <summary>
        /// Permitted encryption algorithms for SSL sessions according to encryption strength. Valid values: `high`, `medium`, `low`, `custom`.
        /// </summary>
        [Output("sslAlgorithm")]
        public Output<string> SslAlgorithm { get; private set; } = null!;

        /// <summary>
        /// The name of the SSL certificate to use for SSL acceleration.
        /// </summary>
        [Output("sslCertificate")]
        public Output<string> SslCertificate { get; private set; } = null!;

        /// <summary>
        /// SSL/TLS cipher suites acceptable from a client, ordered by priority. The structure of `ssl_cipher_suites` block is documented below.
        /// </summary>
        [Output("sslCipherSuites")]
        public Output<ImmutableArray<Outputs.FirewallVipSslCipherSuite>> SslCipherSuites { get; private set; } = null!;

        /// <summary>
        /// Enable/disable support for preventing Downgrade Attacks on client connections (RFC 7507). Valid values: `disable`, `enable`.
        /// </summary>
        [Output("sslClientFallback")]
        public Output<string> SslClientFallback { get; private set; } = null!;

        /// <summary>
        /// Maximum length of data in MB before triggering a client rekey (0 = disable).
        /// </summary>
        [Output("sslClientRekeyCount")]
        public Output<int> SslClientRekeyCount { get; private set; } = null!;

        /// <summary>
        /// Allow, deny, or require secure renegotiation of client sessions to comply with RFC 5746. Valid values: `allow`, `deny`, `secure`.
        /// </summary>
        [Output("sslClientRenegotiation")]
        public Output<string> SslClientRenegotiation { get; private set; } = null!;

        /// <summary>
        /// Maximum number of client to FortiGate SSL session states to keep.
        /// </summary>
        [Output("sslClientSessionStateMax")]
        public Output<int> SslClientSessionStateMax { get; private set; } = null!;

        /// <summary>
        /// Number of minutes to keep client to FortiGate SSL session state.
        /// </summary>
        [Output("sslClientSessionStateTimeout")]
        public Output<int> SslClientSessionStateTimeout { get; private set; } = null!;

        /// <summary>
        /// How to expire SSL sessions for the segment of the SSL connection between the client and the FortiGate. Valid values: `disable`, `time`, `count`, `both`.
        /// </summary>
        [Output("sslClientSessionStateType")]
        public Output<string> SslClientSessionStateType { get; private set; } = null!;

        /// <summary>
        /// Number of bits to use in the Diffie-Hellman exchange for RSA encryption of SSL sessions. Valid values: `768`, `1024`, `1536`, `2048`, `3072`, `4096`.
        /// </summary>
        [Output("sslDhBits")]
        public Output<string> SslDhBits { get; private set; } = null!;

        /// <summary>
        /// Enable/disable including HPKP header in response. Valid values: `disable`, `enable`, `report-only`.
        /// </summary>
        [Output("sslHpkp")]
        public Output<string> SslHpkp { get; private set; } = null!;

        /// <summary>
        /// Number of seconds the client should honour the HPKP setting.
        /// </summary>
        [Output("sslHpkpAge")]
        public Output<int> SslHpkpAge { get; private set; } = null!;

        /// <summary>
        /// Certificate to generate backup HPKP pin from.
        /// </summary>
        [Output("sslHpkpBackup")]
        public Output<string> SslHpkpBackup { get; private set; } = null!;

        /// <summary>
        /// Indicate that HPKP header applies to all subdomains. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("sslHpkpIncludeSubdomains")]
        public Output<string> SslHpkpIncludeSubdomains { get; private set; } = null!;

        /// <summary>
        /// Certificate to generate primary HPKP pin from.
        /// </summary>
        [Output("sslHpkpPrimary")]
        public Output<string> SslHpkpPrimary { get; private set; } = null!;

        /// <summary>
        /// URL to report HPKP violations to.
        /// </summary>
        [Output("sslHpkpReportUri")]
        public Output<string?> SslHpkpReportUri { get; private set; } = null!;

        /// <summary>
        /// Enable/disable including HSTS header in response. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("sslHsts")]
        public Output<string> SslHsts { get; private set; } = null!;

        /// <summary>
        /// Number of seconds the client should honour the HSTS setting.
        /// </summary>
        [Output("sslHstsAge")]
        public Output<int> SslHstsAge { get; private set; } = null!;

        /// <summary>
        /// Indicate that HSTS header applies to all subdomains. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("sslHstsIncludeSubdomains")]
        public Output<string> SslHstsIncludeSubdomains { get; private set; } = null!;

        /// <summary>
        /// Enable to replace HTTP with HTTPS in the reply's Location HTTP header field. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("sslHttpLocationConversion")]
        public Output<string> SslHttpLocationConversion { get; private set; } = null!;

        /// <summary>
        /// Enable/disable HTTP host matching for location conversion. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("sslHttpMatchHost")]
        public Output<string> SslHttpMatchHost { get; private set; } = null!;

        /// <summary>
        /// Highest SSL/TLS version acceptable from a client.
        /// </summary>
        [Output("sslMaxVersion")]
        public Output<string> SslMaxVersion { get; private set; } = null!;

        /// <summary>
        /// Lowest SSL/TLS version acceptable from a client.
        /// </summary>
        [Output("sslMinVersion")]
        public Output<string> SslMinVersion { get; private set; } = null!;

        /// <summary>
        /// Apply SSL offloading between the client and the FortiGate (half) or from the client to the FortiGate and from the FortiGate to the server (full). Valid values: `half`, `full`.
        /// </summary>
        [Output("sslMode")]
        public Output<string> SslMode { get; private set; } = null!;

        /// <summary>
        /// Select the cipher suites that can be used for SSL perfect forward secrecy (PFS). Applies to both client and server sessions. Valid values: `require`, `deny`, `allow`.
        /// </summary>
        [Output("sslPfs")]
        public Output<string> SslPfs { get; private set; } = null!;

        /// <summary>
        /// Enable/disable sending empty fragments to avoid CBC IV attacks (SSL 3.0 &amp; TLS 1.0 only). May need to be disabled for compatibility with older systems. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("sslSendEmptyFrags")]
        public Output<string> SslSendEmptyFrags { get; private set; } = null!;

        /// <summary>
        /// Permitted encryption algorithms for the server side of SSL full mode sessions according to encryption strength. Valid values: `high`, `medium`, `low`, `custom`, `client`.
        /// </summary>
        [Output("sslServerAlgorithm")]
        public Output<string> SslServerAlgorithm { get; private set; } = null!;

        /// <summary>
        /// SSL/TLS cipher suites to offer to a server, ordered by priority. The structure of `ssl_server_cipher_suites` block is documented below.
        /// </summary>
        [Output("sslServerCipherSuites")]
        public Output<ImmutableArray<Outputs.FirewallVipSslServerCipherSuite>> SslServerCipherSuites { get; private set; } = null!;

        /// <summary>
        /// Highest SSL/TLS version acceptable from a server. Use the client setting by default.
        /// </summary>
        [Output("sslServerMaxVersion")]
        public Output<string> SslServerMaxVersion { get; private set; } = null!;

        /// <summary>
        /// Lowest SSL/TLS version acceptable from a server. Use the client setting by default.
        /// </summary>
        [Output("sslServerMinVersion")]
        public Output<string> SslServerMinVersion { get; private set; } = null!;

        /// <summary>
        /// Maximum number of FortiGate to Server SSL session states to keep.
        /// </summary>
        [Output("sslServerSessionStateMax")]
        public Output<int> SslServerSessionStateMax { get; private set; } = null!;

        /// <summary>
        /// Number of minutes to keep FortiGate to Server SSL session state.
        /// </summary>
        [Output("sslServerSessionStateTimeout")]
        public Output<int> SslServerSessionStateTimeout { get; private set; } = null!;

        /// <summary>
        /// How to expire SSL sessions for the segment of the SSL connection between the server and the FortiGate. Valid values: `disable`, `time`, `count`, `both`.
        /// </summary>
        [Output("sslServerSessionStateType")]
        public Output<string> SslServerSessionStateType { get; private set; } = null!;

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

        /// <summary>
        /// Configure a static NAT, load balance, server load balance, DNS translation, or FQDN VIP.
        /// </summary>
        [Output("type")]
        public Output<string> Type { get; private set; } = null!;

        /// <summary>
        /// Universally Unique Identifier (UUID; automatically assigned but can be manually reset).
        /// </summary>
        [Output("uuid")]
        public Output<string> Uuid { 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>
        /// Enable to add an HTTP header to indicate SSL offloading for a WebLogic server. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("weblogicServer")]
        public Output<string> WeblogicServer { get; private set; } = null!;

        /// <summary>
        /// Enable to add an HTTP header to indicate SSL offloading for a WebSphere server. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("websphereServer")]
        public Output<string> WebsphereServer { get; private set; } = null!;


        /// <summary>
        /// Create a FirewallVip 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 FirewallVip(string name, FirewallVipArgs? args = null, CustomResourceOptions? options = null)
            : base("fortios:index/firewallVip:FirewallVip", name, args ?? new FirewallVipArgs(), MakeResourceOptions(options, ""))
        {
        }

        private FirewallVip(string name, Input<string> id, FirewallVipState? state = null, CustomResourceOptions? options = null)
            : base("fortios:index/firewallVip:FirewallVip", 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",
            };
            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 FirewallVip 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 FirewallVip Get(string name, Input<string> id, FirewallVipState? state = null, CustomResourceOptions? options = null)
        {
            return new FirewallVip(name, id, state, options);
        }
    }

    public sealed class FirewallVipArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable adding NAT46 route. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("addNat46Route")]
        public Input<string>? AddNat46Route { get; set; }

        /// <summary>
        /// Enable to respond to ARP requests for this virtual IP address. Enabled by default. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("arpReply")]
        public Input<string>? ArpReply { get; set; }

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

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

        /// <summary>
        /// DNS mapping TTL (Set to zero to use TTL in DNS response, default = 0).
        /// </summary>
        [Input("dnsMappingTtl")]
        public Input<int>? DnsMappingTtl { 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; }

        [Input("extaddrs")]
        private InputList<Inputs.FirewallVipExtaddrArgs>? _extaddrs;

        /// <summary>
        /// External FQDN address name. The structure of `extaddr` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipExtaddrArgs> Extaddrs
        {
            get => _extaddrs ?? (_extaddrs = new InputList<Inputs.FirewallVipExtaddrArgs>());
            set => _extaddrs = value;
        }

        /// <summary>
        /// Interface connected to the source network that receives the packets that will be forwarded to the destination network.
        /// </summary>
        [Input("extintf")]
        public Input<string>? Extintf { get; set; }

        /// <summary>
        /// IP address or address range on the external interface that you want to map to an address or address range on the destination network.
        /// </summary>
        [Input("extip")]
        public Input<string>? Extip { get; set; }

        /// <summary>
        /// Incoming port number range that you want to map to a port number range on the destination network.
        /// </summary>
        [Input("extport")]
        public Input<string>? Extport { get; set; }

        /// <summary>
        /// Custom defined ID.
        /// </summary>
        [Input("fosid")]
        public Input<int>? Fosid { get; set; }

        /// <summary>
        /// Enable to have the VIP send gratuitous ARPs. 0=disabled. Set from 5 up to 8640000 seconds to enable.
        /// </summary>
        [Input("gratuitousArpInterval")]
        public Input<int>? GratuitousArpInterval { get; set; }

        /// <summary>
        /// Time in minutes that client web browsers should keep a cookie. Default is 60 seconds. 0 = no time limit.
        /// </summary>
        [Input("httpCookieAge")]
        public Input<int>? HttpCookieAge { get; set; }

        /// <summary>
        /// Domain that HTTP cookie persistence should apply to.
        /// </summary>
        [Input("httpCookieDomain")]
        public Input<string>? HttpCookieDomain { get; set; }

        /// <summary>
        /// Enable/disable use of HTTP cookie domain from host field in HTTP. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("httpCookieDomainFromHost")]
        public Input<string>? HttpCookieDomainFromHost { get; set; }

        /// <summary>
        /// Generation of HTTP cookie to be accepted. Changing invalidates all existing cookies.
        /// </summary>
        [Input("httpCookieGeneration")]
        public Input<int>? HttpCookieGeneration { get; set; }

        /// <summary>
        /// Limit HTTP cookie persistence to the specified path.
        /// </summary>
        [Input("httpCookiePath")]
        public Input<string>? HttpCookiePath { get; set; }

        /// <summary>
        /// Control sharing of cookies across virtual servers. same-ip means a cookie from one virtual server can be used by another. Disable stops cookie sharing. Valid values: `disable`, `same-ip`.
        /// </summary>
        [Input("httpCookieShare")]
        public Input<string>? HttpCookieShare { get; set; }

        /// <summary>
        /// For HTTP multiplexing, enable to add the original client IP address in the XForwarded-For HTTP header. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("httpIpHeader")]
        public Input<string>? HttpIpHeader { get; set; }

        /// <summary>
        /// For HTTP multiplexing, enter a custom HTTPS header name. The original client IP address is added to this header. If empty, X-Forwarded-For is used.
        /// </summary>
        [Input("httpIpHeaderName")]
        public Input<string>? HttpIpHeaderName { get; set; }

        /// <summary>
        /// Enable/disable HTTP multiplexing. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("httpMultiplex")]
        public Input<string>? HttpMultiplex { get; set; }

        /// <summary>
        /// Enable/disable redirection of HTTP to HTTPS Valid values: `enable`, `disable`.
        /// </summary>
        [Input("httpRedirect")]
        public Input<string>? HttpRedirect { get; set; }

        /// <summary>
        /// Enable/disable verification that inserted HTTPS cookies are secure. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("httpsCookieSecure")]
        public Input<string>? HttpsCookieSecure { get; set; }

        /// <summary>
        /// Start-mapped-IPv6-address [-end mapped-IPv6-address].
        /// </summary>
        [Input("ipv6Mappedip")]
        public Input<string>? Ipv6Mappedip { get; set; }

        /// <summary>
        /// IPv6 port number range on the destination network to which the external port number range is mapped.
        /// </summary>
        [Input("ipv6Mappedport")]
        public Input<string>? Ipv6Mappedport { get; set; }

        /// <summary>
        /// Method used to distribute sessions to real servers. Valid values: `static`, `round-robin`, `weighted`, `least-session`, `least-rtt`, `first-alive`, `http-host`.
        /// </summary>
        [Input("ldbMethod")]
        public Input<string>? LdbMethod { get; set; }

        /// <summary>
        /// Mapped FQDN address name.
        /// </summary>
        [Input("mappedAddr")]
        public Input<string>? MappedAddr { get; set; }

        [Input("mappedips")]
        private InputList<Inputs.FirewallVipMappedipArgs>? _mappedips;

        /// <summary>
        /// IP address or address range on the destination network to which the external IP address is mapped. The structure of `mappedip` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipMappedipArgs> Mappedips
        {
            get => _mappedips ?? (_mappedips = new InputList<Inputs.FirewallVipMappedipArgs>());
            set => _mappedips = value;
        }

        /// <summary>
        /// Port number range on the destination network to which the external port number range is mapped.
        /// </summary>
        [Input("mappedport")]
        public Input<string>? Mappedport { get; set; }

        /// <summary>
        /// Maximum number of incomplete connections.
        /// </summary>
        [Input("maxEmbryonicConnections")]
        public Input<int>? MaxEmbryonicConnections { get; set; }

        [Input("monitors")]
        private InputList<Inputs.FirewallVipMonitorArgs>? _monitors;

        /// <summary>
        /// Name of the health check monitor to use when polling to determine a virtual server's connectivity status. The structure of `monitor` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipMonitorArgs> Monitors
        {
            get => _monitors ?? (_monitors = new InputList<Inputs.FirewallVipMonitorArgs>());
            set => _monitors = value;
        }

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

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

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

        /// <summary>
        /// Enable/disable forcing the source NAT mapped IP to the external IP for all traffic. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("natSourceVip")]
        public Input<string>? NatSourceVip { get; set; }

        /// <summary>
        /// Enable to add the Front-End-Https header for Microsoft Outlook Web Access. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("outlookWebAccess")]
        public Input<string>? OutlookWebAccess { get; set; }

        /// <summary>
        /// Configure how to make sure that clients connect to the same server every time they make a request that is part of the same session. Valid values: `none`, `http-cookie`, `ssl-session-id`.
        /// </summary>
        [Input("persistence")]
        public Input<string>? Persistence { get; set; }

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

        /// <summary>
        /// Port mapping type. Valid values: `1-to-1`, `m-to-n`.
        /// </summary>
        [Input("portmappingType")]
        public Input<string>? PortmappingType { get; set; }

        /// <summary>
        /// Protocol to use when forwarding packets. Valid values: `tcp`, `udp`, `sctp`, `icmp`.
        /// </summary>
        [Input("protocol")]
        public Input<string>? Protocol { get; set; }

        [Input("realservers")]
        private InputList<Inputs.FirewallVipRealserverArgs>? _realservers;

        /// <summary>
        /// Select the real servers that this server load balancing VIP will distribute traffic to. The structure of `realservers` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipRealserverArgs> Realservers
        {
            get => _realservers ?? (_realservers = new InputList<Inputs.FirewallVipRealserverArgs>());
            set => _realservers = value;
        }

        /// <summary>
        /// Protocol to be load balanced by the virtual server (also called the server load balance virtual IP). Valid values: `http`, `https`, `imaps`, `pop3s`, `smtps`, `ssl`, `tcp`, `udp`, `ip`.
        /// </summary>
        [Input("serverType")]
        public Input<string>? ServerType { get; set; }

        [Input("services")]
        private InputList<Inputs.FirewallVipServiceArgs>? _services;

        /// <summary>
        /// Service name. The structure of `service` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipServiceArgs> Services
        {
            get => _services ?? (_services = new InputList<Inputs.FirewallVipServiceArgs>());
            set => _services = value;
        }

        [Input("srcFilters")]
        private InputList<Inputs.FirewallVipSrcFilterArgs>? _srcFilters;

        /// <summary>
        /// Source address filter. Each address must be either an IP/subnet (x.x.x.x/n) or a range (x.x.x.x-y.y.y.y). Separate addresses with spaces. The structure of `src_filter` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipSrcFilterArgs> SrcFilters
        {
            get => _srcFilters ?? (_srcFilters = new InputList<Inputs.FirewallVipSrcFilterArgs>());
            set => _srcFilters = value;
        }

        [Input("srcintfFilters")]
        private InputList<Inputs.FirewallVipSrcintfFilterArgs>? _srcintfFilters;

        /// <summary>
        /// Interfaces to which the VIP applies. Separate the names with spaces. The structure of `srcintf_filter` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipSrcintfFilterArgs> SrcintfFilters
        {
            get => _srcintfFilters ?? (_srcintfFilters = new InputList<Inputs.FirewallVipSrcintfFilterArgs>());
            set => _srcintfFilters = value;
        }

        /// <summary>
        /// Enable/disable FFDHE cipher suite for SSL key exchange. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sslAcceptFfdheGroups")]
        public Input<string>? SslAcceptFfdheGroups { get; set; }

        /// <summary>
        /// Permitted encryption algorithms for SSL sessions according to encryption strength. Valid values: `high`, `medium`, `low`, `custom`.
        /// </summary>
        [Input("sslAlgorithm")]
        public Input<string>? SslAlgorithm { get; set; }

        /// <summary>
        /// The name of the SSL certificate to use for SSL acceleration.
        /// </summary>
        [Input("sslCertificate")]
        public Input<string>? SslCertificate { get; set; }

        [Input("sslCipherSuites")]
        private InputList<Inputs.FirewallVipSslCipherSuiteArgs>? _sslCipherSuites;

        /// <summary>
        /// SSL/TLS cipher suites acceptable from a client, ordered by priority. The structure of `ssl_cipher_suites` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipSslCipherSuiteArgs> SslCipherSuites
        {
            get => _sslCipherSuites ?? (_sslCipherSuites = new InputList<Inputs.FirewallVipSslCipherSuiteArgs>());
            set => _sslCipherSuites = value;
        }

        /// <summary>
        /// Enable/disable support for preventing Downgrade Attacks on client connections (RFC 7507). Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslClientFallback")]
        public Input<string>? SslClientFallback { get; set; }

        /// <summary>
        /// Maximum length of data in MB before triggering a client rekey (0 = disable).
        /// </summary>
        [Input("sslClientRekeyCount")]
        public Input<int>? SslClientRekeyCount { get; set; }

        /// <summary>
        /// Allow, deny, or require secure renegotiation of client sessions to comply with RFC 5746. Valid values: `allow`, `deny`, `secure`.
        /// </summary>
        [Input("sslClientRenegotiation")]
        public Input<string>? SslClientRenegotiation { get; set; }

        /// <summary>
        /// Maximum number of client to FortiGate SSL session states to keep.
        /// </summary>
        [Input("sslClientSessionStateMax")]
        public Input<int>? SslClientSessionStateMax { get; set; }

        /// <summary>
        /// Number of minutes to keep client to FortiGate SSL session state.
        /// </summary>
        [Input("sslClientSessionStateTimeout")]
        public Input<int>? SslClientSessionStateTimeout { get; set; }

        /// <summary>
        /// How to expire SSL sessions for the segment of the SSL connection between the client and the FortiGate. Valid values: `disable`, `time`, `count`, `both`.
        /// </summary>
        [Input("sslClientSessionStateType")]
        public Input<string>? SslClientSessionStateType { get; set; }

        /// <summary>
        /// Number of bits to use in the Diffie-Hellman exchange for RSA encryption of SSL sessions. Valid values: `768`, `1024`, `1536`, `2048`, `3072`, `4096`.
        /// </summary>
        [Input("sslDhBits")]
        public Input<string>? SslDhBits { get; set; }

        /// <summary>
        /// Enable/disable including HPKP header in response. Valid values: `disable`, `enable`, `report-only`.
        /// </summary>
        [Input("sslHpkp")]
        public Input<string>? SslHpkp { get; set; }

        /// <summary>
        /// Number of seconds the client should honour the HPKP setting.
        /// </summary>
        [Input("sslHpkpAge")]
        public Input<int>? SslHpkpAge { get; set; }

        /// <summary>
        /// Certificate to generate backup HPKP pin from.
        /// </summary>
        [Input("sslHpkpBackup")]
        public Input<string>? SslHpkpBackup { get; set; }

        /// <summary>
        /// Indicate that HPKP header applies to all subdomains. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslHpkpIncludeSubdomains")]
        public Input<string>? SslHpkpIncludeSubdomains { get; set; }

        /// <summary>
        /// Certificate to generate primary HPKP pin from.
        /// </summary>
        [Input("sslHpkpPrimary")]
        public Input<string>? SslHpkpPrimary { get; set; }

        /// <summary>
        /// URL to report HPKP violations to.
        /// </summary>
        [Input("sslHpkpReportUri")]
        public Input<string>? SslHpkpReportUri { get; set; }

        /// <summary>
        /// Enable/disable including HSTS header in response. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslHsts")]
        public Input<string>? SslHsts { get; set; }

        /// <summary>
        /// Number of seconds the client should honour the HSTS setting.
        /// </summary>
        [Input("sslHstsAge")]
        public Input<int>? SslHstsAge { get; set; }

        /// <summary>
        /// Indicate that HSTS header applies to all subdomains. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslHstsIncludeSubdomains")]
        public Input<string>? SslHstsIncludeSubdomains { get; set; }

        /// <summary>
        /// Enable to replace HTTP with HTTPS in the reply's Location HTTP header field. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sslHttpLocationConversion")]
        public Input<string>? SslHttpLocationConversion { get; set; }

        /// <summary>
        /// Enable/disable HTTP host matching for location conversion. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sslHttpMatchHost")]
        public Input<string>? SslHttpMatchHost { get; set; }

        /// <summary>
        /// Highest SSL/TLS version acceptable from a client.
        /// </summary>
        [Input("sslMaxVersion")]
        public Input<string>? SslMaxVersion { get; set; }

        /// <summary>
        /// Lowest SSL/TLS version acceptable from a client.
        /// </summary>
        [Input("sslMinVersion")]
        public Input<string>? SslMinVersion { get; set; }

        /// <summary>
        /// Apply SSL offloading between the client and the FortiGate (half) or from the client to the FortiGate and from the FortiGate to the server (full). Valid values: `half`, `full`.
        /// </summary>
        [Input("sslMode")]
        public Input<string>? SslMode { get; set; }

        /// <summary>
        /// Select the cipher suites that can be used for SSL perfect forward secrecy (PFS). Applies to both client and server sessions. Valid values: `require`, `deny`, `allow`.
        /// </summary>
        [Input("sslPfs")]
        public Input<string>? SslPfs { get; set; }

        /// <summary>
        /// Enable/disable sending empty fragments to avoid CBC IV attacks (SSL 3.0 &amp; TLS 1.0 only). May need to be disabled for compatibility with older systems. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sslSendEmptyFrags")]
        public Input<string>? SslSendEmptyFrags { get; set; }

        /// <summary>
        /// Permitted encryption algorithms for the server side of SSL full mode sessions according to encryption strength. Valid values: `high`, `medium`, `low`, `custom`, `client`.
        /// </summary>
        [Input("sslServerAlgorithm")]
        public Input<string>? SslServerAlgorithm { get; set; }

        [Input("sslServerCipherSuites")]
        private InputList<Inputs.FirewallVipSslServerCipherSuiteArgs>? _sslServerCipherSuites;

        /// <summary>
        /// SSL/TLS cipher suites to offer to a server, ordered by priority. The structure of `ssl_server_cipher_suites` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipSslServerCipherSuiteArgs> SslServerCipherSuites
        {
            get => _sslServerCipherSuites ?? (_sslServerCipherSuites = new InputList<Inputs.FirewallVipSslServerCipherSuiteArgs>());
            set => _sslServerCipherSuites = value;
        }

        /// <summary>
        /// Highest SSL/TLS version acceptable from a server. Use the client setting by default.
        /// </summary>
        [Input("sslServerMaxVersion")]
        public Input<string>? SslServerMaxVersion { get; set; }

        /// <summary>
        /// Lowest SSL/TLS version acceptable from a server. Use the client setting by default.
        /// </summary>
        [Input("sslServerMinVersion")]
        public Input<string>? SslServerMinVersion { get; set; }

        /// <summary>
        /// Maximum number of FortiGate to Server SSL session states to keep.
        /// </summary>
        [Input("sslServerSessionStateMax")]
        public Input<int>? SslServerSessionStateMax { get; set; }

        /// <summary>
        /// Number of minutes to keep FortiGate to Server SSL session state.
        /// </summary>
        [Input("sslServerSessionStateTimeout")]
        public Input<int>? SslServerSessionStateTimeout { get; set; }

        /// <summary>
        /// How to expire SSL sessions for the segment of the SSL connection between the server and the FortiGate. Valid values: `disable`, `time`, `count`, `both`.
        /// </summary>
        [Input("sslServerSessionStateType")]
        public Input<string>? SslServerSessionStateType { get; set; }

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

        /// <summary>
        /// Configure a static NAT, load balance, server load balance, DNS translation, or FQDN VIP.
        /// </summary>
        [Input("type")]
        public Input<string>? Type { get; set; }

        /// <summary>
        /// Universally Unique Identifier (UUID; automatically assigned but can be manually reset).
        /// </summary>
        [Input("uuid")]
        public Input<string>? Uuid { 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>
        /// Enable to add an HTTP header to indicate SSL offloading for a WebLogic server. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("weblogicServer")]
        public Input<string>? WeblogicServer { get; set; }

        /// <summary>
        /// Enable to add an HTTP header to indicate SSL offloading for a WebSphere server. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("websphereServer")]
        public Input<string>? WebsphereServer { get; set; }

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

    public sealed class FirewallVipState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable adding NAT46 route. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("addNat46Route")]
        public Input<string>? AddNat46Route { get; set; }

        /// <summary>
        /// Enable to respond to ARP requests for this virtual IP address. Enabled by default. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("arpReply")]
        public Input<string>? ArpReply { get; set; }

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

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

        /// <summary>
        /// DNS mapping TTL (Set to zero to use TTL in DNS response, default = 0).
        /// </summary>
        [Input("dnsMappingTtl")]
        public Input<int>? DnsMappingTtl { 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; }

        [Input("extaddrs")]
        private InputList<Inputs.FirewallVipExtaddrGetArgs>? _extaddrs;

        /// <summary>
        /// External FQDN address name. The structure of `extaddr` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipExtaddrGetArgs> Extaddrs
        {
            get => _extaddrs ?? (_extaddrs = new InputList<Inputs.FirewallVipExtaddrGetArgs>());
            set => _extaddrs = value;
        }

        /// <summary>
        /// Interface connected to the source network that receives the packets that will be forwarded to the destination network.
        /// </summary>
        [Input("extintf")]
        public Input<string>? Extintf { get; set; }

        /// <summary>
        /// IP address or address range on the external interface that you want to map to an address or address range on the destination network.
        /// </summary>
        [Input("extip")]
        public Input<string>? Extip { get; set; }

        /// <summary>
        /// Incoming port number range that you want to map to a port number range on the destination network.
        /// </summary>
        [Input("extport")]
        public Input<string>? Extport { get; set; }

        /// <summary>
        /// Custom defined ID.
        /// </summary>
        [Input("fosid")]
        public Input<int>? Fosid { get; set; }

        /// <summary>
        /// Enable to have the VIP send gratuitous ARPs. 0=disabled. Set from 5 up to 8640000 seconds to enable.
        /// </summary>
        [Input("gratuitousArpInterval")]
        public Input<int>? GratuitousArpInterval { get; set; }

        /// <summary>
        /// Time in minutes that client web browsers should keep a cookie. Default is 60 seconds. 0 = no time limit.
        /// </summary>
        [Input("httpCookieAge")]
        public Input<int>? HttpCookieAge { get; set; }

        /// <summary>
        /// Domain that HTTP cookie persistence should apply to.
        /// </summary>
        [Input("httpCookieDomain")]
        public Input<string>? HttpCookieDomain { get; set; }

        /// <summary>
        /// Enable/disable use of HTTP cookie domain from host field in HTTP. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("httpCookieDomainFromHost")]
        public Input<string>? HttpCookieDomainFromHost { get; set; }

        /// <summary>
        /// Generation of HTTP cookie to be accepted. Changing invalidates all existing cookies.
        /// </summary>
        [Input("httpCookieGeneration")]
        public Input<int>? HttpCookieGeneration { get; set; }

        /// <summary>
        /// Limit HTTP cookie persistence to the specified path.
        /// </summary>
        [Input("httpCookiePath")]
        public Input<string>? HttpCookiePath { get; set; }

        /// <summary>
        /// Control sharing of cookies across virtual servers. same-ip means a cookie from one virtual server can be used by another. Disable stops cookie sharing. Valid values: `disable`, `same-ip`.
        /// </summary>
        [Input("httpCookieShare")]
        public Input<string>? HttpCookieShare { get; set; }

        /// <summary>
        /// For HTTP multiplexing, enable to add the original client IP address in the XForwarded-For HTTP header. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("httpIpHeader")]
        public Input<string>? HttpIpHeader { get; set; }

        /// <summary>
        /// For HTTP multiplexing, enter a custom HTTPS header name. The original client IP address is added to this header. If empty, X-Forwarded-For is used.
        /// </summary>
        [Input("httpIpHeaderName")]
        public Input<string>? HttpIpHeaderName { get; set; }

        /// <summary>
        /// Enable/disable HTTP multiplexing. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("httpMultiplex")]
        public Input<string>? HttpMultiplex { get; set; }

        /// <summary>
        /// Enable/disable redirection of HTTP to HTTPS Valid values: `enable`, `disable`.
        /// </summary>
        [Input("httpRedirect")]
        public Input<string>? HttpRedirect { get; set; }

        /// <summary>
        /// Enable/disable verification that inserted HTTPS cookies are secure. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("httpsCookieSecure")]
        public Input<string>? HttpsCookieSecure { get; set; }

        /// <summary>
        /// Start-mapped-IPv6-address [-end mapped-IPv6-address].
        /// </summary>
        [Input("ipv6Mappedip")]
        public Input<string>? Ipv6Mappedip { get; set; }

        /// <summary>
        /// IPv6 port number range on the destination network to which the external port number range is mapped.
        /// </summary>
        [Input("ipv6Mappedport")]
        public Input<string>? Ipv6Mappedport { get; set; }

        /// <summary>
        /// Method used to distribute sessions to real servers. Valid values: `static`, `round-robin`, `weighted`, `least-session`, `least-rtt`, `first-alive`, `http-host`.
        /// </summary>
        [Input("ldbMethod")]
        public Input<string>? LdbMethod { get; set; }

        /// <summary>
        /// Mapped FQDN address name.
        /// </summary>
        [Input("mappedAddr")]
        public Input<string>? MappedAddr { get; set; }

        [Input("mappedips")]
        private InputList<Inputs.FirewallVipMappedipGetArgs>? _mappedips;

        /// <summary>
        /// IP address or address range on the destination network to which the external IP address is mapped. The structure of `mappedip` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipMappedipGetArgs> Mappedips
        {
            get => _mappedips ?? (_mappedips = new InputList<Inputs.FirewallVipMappedipGetArgs>());
            set => _mappedips = value;
        }

        /// <summary>
        /// Port number range on the destination network to which the external port number range is mapped.
        /// </summary>
        [Input("mappedport")]
        public Input<string>? Mappedport { get; set; }

        /// <summary>
        /// Maximum number of incomplete connections.
        /// </summary>
        [Input("maxEmbryonicConnections")]
        public Input<int>? MaxEmbryonicConnections { get; set; }

        [Input("monitors")]
        private InputList<Inputs.FirewallVipMonitorGetArgs>? _monitors;

        /// <summary>
        /// Name of the health check monitor to use when polling to determine a virtual server's connectivity status. The structure of `monitor` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipMonitorGetArgs> Monitors
        {
            get => _monitors ?? (_monitors = new InputList<Inputs.FirewallVipMonitorGetArgs>());
            set => _monitors = value;
        }

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

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

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

        /// <summary>
        /// Enable/disable forcing the source NAT mapped IP to the external IP for all traffic. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("natSourceVip")]
        public Input<string>? NatSourceVip { get; set; }

        /// <summary>
        /// Enable to add the Front-End-Https header for Microsoft Outlook Web Access. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("outlookWebAccess")]
        public Input<string>? OutlookWebAccess { get; set; }

        /// <summary>
        /// Configure how to make sure that clients connect to the same server every time they make a request that is part of the same session. Valid values: `none`, `http-cookie`, `ssl-session-id`.
        /// </summary>
        [Input("persistence")]
        public Input<string>? Persistence { get; set; }

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

        /// <summary>
        /// Port mapping type. Valid values: `1-to-1`, `m-to-n`.
        /// </summary>
        [Input("portmappingType")]
        public Input<string>? PortmappingType { get; set; }

        /// <summary>
        /// Protocol to use when forwarding packets. Valid values: `tcp`, `udp`, `sctp`, `icmp`.
        /// </summary>
        [Input("protocol")]
        public Input<string>? Protocol { get; set; }

        [Input("realservers")]
        private InputList<Inputs.FirewallVipRealserverGetArgs>? _realservers;

        /// <summary>
        /// Select the real servers that this server load balancing VIP will distribute traffic to. The structure of `realservers` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipRealserverGetArgs> Realservers
        {
            get => _realservers ?? (_realservers = new InputList<Inputs.FirewallVipRealserverGetArgs>());
            set => _realservers = value;
        }

        /// <summary>
        /// Protocol to be load balanced by the virtual server (also called the server load balance virtual IP). Valid values: `http`, `https`, `imaps`, `pop3s`, `smtps`, `ssl`, `tcp`, `udp`, `ip`.
        /// </summary>
        [Input("serverType")]
        public Input<string>? ServerType { get; set; }

        [Input("services")]
        private InputList<Inputs.FirewallVipServiceGetArgs>? _services;

        /// <summary>
        /// Service name. The structure of `service` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipServiceGetArgs> Services
        {
            get => _services ?? (_services = new InputList<Inputs.FirewallVipServiceGetArgs>());
            set => _services = value;
        }

        [Input("srcFilters")]
        private InputList<Inputs.FirewallVipSrcFilterGetArgs>? _srcFilters;

        /// <summary>
        /// Source address filter. Each address must be either an IP/subnet (x.x.x.x/n) or a range (x.x.x.x-y.y.y.y). Separate addresses with spaces. The structure of `src_filter` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipSrcFilterGetArgs> SrcFilters
        {
            get => _srcFilters ?? (_srcFilters = new InputList<Inputs.FirewallVipSrcFilterGetArgs>());
            set => _srcFilters = value;
        }

        [Input("srcintfFilters")]
        private InputList<Inputs.FirewallVipSrcintfFilterGetArgs>? _srcintfFilters;

        /// <summary>
        /// Interfaces to which the VIP applies. Separate the names with spaces. The structure of `srcintf_filter` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipSrcintfFilterGetArgs> SrcintfFilters
        {
            get => _srcintfFilters ?? (_srcintfFilters = new InputList<Inputs.FirewallVipSrcintfFilterGetArgs>());
            set => _srcintfFilters = value;
        }

        /// <summary>
        /// Enable/disable FFDHE cipher suite for SSL key exchange. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sslAcceptFfdheGroups")]
        public Input<string>? SslAcceptFfdheGroups { get; set; }

        /// <summary>
        /// Permitted encryption algorithms for SSL sessions according to encryption strength. Valid values: `high`, `medium`, `low`, `custom`.
        /// </summary>
        [Input("sslAlgorithm")]
        public Input<string>? SslAlgorithm { get; set; }

        /// <summary>
        /// The name of the SSL certificate to use for SSL acceleration.
        /// </summary>
        [Input("sslCertificate")]
        public Input<string>? SslCertificate { get; set; }

        [Input("sslCipherSuites")]
        private InputList<Inputs.FirewallVipSslCipherSuiteGetArgs>? _sslCipherSuites;

        /// <summary>
        /// SSL/TLS cipher suites acceptable from a client, ordered by priority. The structure of `ssl_cipher_suites` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipSslCipherSuiteGetArgs> SslCipherSuites
        {
            get => _sslCipherSuites ?? (_sslCipherSuites = new InputList<Inputs.FirewallVipSslCipherSuiteGetArgs>());
            set => _sslCipherSuites = value;
        }

        /// <summary>
        /// Enable/disable support for preventing Downgrade Attacks on client connections (RFC 7507). Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslClientFallback")]
        public Input<string>? SslClientFallback { get; set; }

        /// <summary>
        /// Maximum length of data in MB before triggering a client rekey (0 = disable).
        /// </summary>
        [Input("sslClientRekeyCount")]
        public Input<int>? SslClientRekeyCount { get; set; }

        /// <summary>
        /// Allow, deny, or require secure renegotiation of client sessions to comply with RFC 5746. Valid values: `allow`, `deny`, `secure`.
        /// </summary>
        [Input("sslClientRenegotiation")]
        public Input<string>? SslClientRenegotiation { get; set; }

        /// <summary>
        /// Maximum number of client to FortiGate SSL session states to keep.
        /// </summary>
        [Input("sslClientSessionStateMax")]
        public Input<int>? SslClientSessionStateMax { get; set; }

        /// <summary>
        /// Number of minutes to keep client to FortiGate SSL session state.
        /// </summary>
        [Input("sslClientSessionStateTimeout")]
        public Input<int>? SslClientSessionStateTimeout { get; set; }

        /// <summary>
        /// How to expire SSL sessions for the segment of the SSL connection between the client and the FortiGate. Valid values: `disable`, `time`, `count`, `both`.
        /// </summary>
        [Input("sslClientSessionStateType")]
        public Input<string>? SslClientSessionStateType { get; set; }

        /// <summary>
        /// Number of bits to use in the Diffie-Hellman exchange for RSA encryption of SSL sessions. Valid values: `768`, `1024`, `1536`, `2048`, `3072`, `4096`.
        /// </summary>
        [Input("sslDhBits")]
        public Input<string>? SslDhBits { get; set; }

        /// <summary>
        /// Enable/disable including HPKP header in response. Valid values: `disable`, `enable`, `report-only`.
        /// </summary>
        [Input("sslHpkp")]
        public Input<string>? SslHpkp { get; set; }

        /// <summary>
        /// Number of seconds the client should honour the HPKP setting.
        /// </summary>
        [Input("sslHpkpAge")]
        public Input<int>? SslHpkpAge { get; set; }

        /// <summary>
        /// Certificate to generate backup HPKP pin from.
        /// </summary>
        [Input("sslHpkpBackup")]
        public Input<string>? SslHpkpBackup { get; set; }

        /// <summary>
        /// Indicate that HPKP header applies to all subdomains. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslHpkpIncludeSubdomains")]
        public Input<string>? SslHpkpIncludeSubdomains { get; set; }

        /// <summary>
        /// Certificate to generate primary HPKP pin from.
        /// </summary>
        [Input("sslHpkpPrimary")]
        public Input<string>? SslHpkpPrimary { get; set; }

        /// <summary>
        /// URL to report HPKP violations to.
        /// </summary>
        [Input("sslHpkpReportUri")]
        public Input<string>? SslHpkpReportUri { get; set; }

        /// <summary>
        /// Enable/disable including HSTS header in response. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslHsts")]
        public Input<string>? SslHsts { get; set; }

        /// <summary>
        /// Number of seconds the client should honour the HSTS setting.
        /// </summary>
        [Input("sslHstsAge")]
        public Input<int>? SslHstsAge { get; set; }

        /// <summary>
        /// Indicate that HSTS header applies to all subdomains. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("sslHstsIncludeSubdomains")]
        public Input<string>? SslHstsIncludeSubdomains { get; set; }

        /// <summary>
        /// Enable to replace HTTP with HTTPS in the reply's Location HTTP header field. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sslHttpLocationConversion")]
        public Input<string>? SslHttpLocationConversion { get; set; }

        /// <summary>
        /// Enable/disable HTTP host matching for location conversion. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sslHttpMatchHost")]
        public Input<string>? SslHttpMatchHost { get; set; }

        /// <summary>
        /// Highest SSL/TLS version acceptable from a client.
        /// </summary>
        [Input("sslMaxVersion")]
        public Input<string>? SslMaxVersion { get; set; }

        /// <summary>
        /// Lowest SSL/TLS version acceptable from a client.
        /// </summary>
        [Input("sslMinVersion")]
        public Input<string>? SslMinVersion { get; set; }

        /// <summary>
        /// Apply SSL offloading between the client and the FortiGate (half) or from the client to the FortiGate and from the FortiGate to the server (full). Valid values: `half`, `full`.
        /// </summary>
        [Input("sslMode")]
        public Input<string>? SslMode { get; set; }

        /// <summary>
        /// Select the cipher suites that can be used for SSL perfect forward secrecy (PFS). Applies to both client and server sessions. Valid values: `require`, `deny`, `allow`.
        /// </summary>
        [Input("sslPfs")]
        public Input<string>? SslPfs { get; set; }

        /// <summary>
        /// Enable/disable sending empty fragments to avoid CBC IV attacks (SSL 3.0 &amp; TLS 1.0 only). May need to be disabled for compatibility with older systems. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sslSendEmptyFrags")]
        public Input<string>? SslSendEmptyFrags { get; set; }

        /// <summary>
        /// Permitted encryption algorithms for the server side of SSL full mode sessions according to encryption strength. Valid values: `high`, `medium`, `low`, `custom`, `client`.
        /// </summary>
        [Input("sslServerAlgorithm")]
        public Input<string>? SslServerAlgorithm { get; set; }

        [Input("sslServerCipherSuites")]
        private InputList<Inputs.FirewallVipSslServerCipherSuiteGetArgs>? _sslServerCipherSuites;

        /// <summary>
        /// SSL/TLS cipher suites to offer to a server, ordered by priority. The structure of `ssl_server_cipher_suites` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallVipSslServerCipherSuiteGetArgs> SslServerCipherSuites
        {
            get => _sslServerCipherSuites ?? (_sslServerCipherSuites = new InputList<Inputs.FirewallVipSslServerCipherSuiteGetArgs>());
            set => _sslServerCipherSuites = value;
        }

        /// <summary>
        /// Highest SSL/TLS version acceptable from a server. Use the client setting by default.
        /// </summary>
        [Input("sslServerMaxVersion")]
        public Input<string>? SslServerMaxVersion { get; set; }

        /// <summary>
        /// Lowest SSL/TLS version acceptable from a server. Use the client setting by default.
        /// </summary>
        [Input("sslServerMinVersion")]
        public Input<string>? SslServerMinVersion { get; set; }

        /// <summary>
        /// Maximum number of FortiGate to Server SSL session states to keep.
        /// </summary>
        [Input("sslServerSessionStateMax")]
        public Input<int>? SslServerSessionStateMax { get; set; }

        /// <summary>
        /// Number of minutes to keep FortiGate to Server SSL session state.
        /// </summary>
        [Input("sslServerSessionStateTimeout")]
        public Input<int>? SslServerSessionStateTimeout { get; set; }

        /// <summary>
        /// How to expire SSL sessions for the segment of the SSL connection between the server and the FortiGate. Valid values: `disable`, `time`, `count`, `both`.
        /// </summary>
        [Input("sslServerSessionStateType")]
        public Input<string>? SslServerSessionStateType { get; set; }

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

        /// <summary>
        /// Configure a static NAT, load balance, server load balance, DNS translation, or FQDN VIP.
        /// </summary>
        [Input("type")]
        public Input<string>? Type { get; set; }

        /// <summary>
        /// Universally Unique Identifier (UUID; automatically assigned but can be manually reset).
        /// </summary>
        [Input("uuid")]
        public Input<string>? Uuid { 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>
        /// Enable to add an HTTP header to indicate SSL offloading for a WebLogic server. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("weblogicServer")]
        public Input<string>? WeblogicServer { get; set; }

        /// <summary>
        /// Enable to add an HTTP header to indicate SSL offloading for a WebSphere server. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("websphereServer")]
        public Input<string>? WebsphereServer { get; set; }

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