// *** 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 IPS global parameter.
    /// 
    /// ## 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.IpsGlobal("trname", new()
    ///     {
    ///         AnomalyMode = "continuous",
    ///         Database = "regular",
    ///         DeepAppInspDbLimit = 0,
    ///         DeepAppInspTimeout = 0,
    ///         EngineCount = 0,
    ///         ExcludeSignatures = "industrial",
    ///         FailOpen = "disable",
    ///         IntelligentMode = "enable",
    ///         SessionLimitMode = "heuristic",
    ///         SocketSize = 0,
    ///         SyncSessionTtl = "enable",
    ///         TrafficSubmit = "disable",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// Ips Global can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/ipsGlobal:IpsGlobal labelname IpsGlobal
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/ipsGlobal:IpsGlobal labelname IpsGlobal
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/ipsGlobal:IpsGlobal")]
    public partial class IpsGlobal : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Global blocking mode for rate-based anomalies. Valid values: `periodical`, `continuous`.
        /// </summary>
        [Output("anomalyMode")]
        public Output<string> AnomalyMode { get; private set; } = null!;

        /// <summary>
        /// IPS Pattern matching acceleration/offloading to CPx processors. Valid values: `none`, `basic`, `advanced`.
        /// </summary>
        [Output("cpAccelMode")]
        public Output<string> CpAccelMode { get; private set; } = null!;

        /// <summary>
        /// Regular or extended IPS database. Regular protects against the latest common and in-the-wild attacks. Extended includes protection from legacy attacks. Valid values: `regular`, `extended`.
        /// </summary>
        [Output("database")]
        public Output<string> Database { get; private set; } = null!;

        /// <summary>
        /// Limit on number of entries in deep application inspection database (1 - 2147483647, 0 = use recommended setting)
        /// </summary>
        [Output("deepAppInspDbLimit")]
        public Output<int> DeepAppInspDbLimit { get; private set; } = null!;

        /// <summary>
        /// Timeout for Deep application inspection (1 - 2147483647 sec., 0 = use recommended setting).
        /// </summary>
        [Output("deepAppInspTimeout")]
        public Output<int> DeepAppInspTimeout { get; private set; } = null!;

        /// <summary>
        /// Number of IPS engines running. If set to the default value of 0, FortiOS sets the number to optimize performance depending on the number of CPU cores.
        /// </summary>
        [Output("engineCount")]
        public Output<int> EngineCount { get; private set; } = null!;

        /// <summary>
        /// Excluded signatures. Valid values: `none`, `industrial`.
        /// </summary>
        [Output("excludeSignatures")]
        public Output<string> ExcludeSignatures { get; private set; } = null!;

        /// <summary>
        /// Enable to allow traffic if the IPS process crashes. Default is disable and IPS traffic is blocked when the IPS process crashes. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("failOpen")]
        public Output<string> FailOpen { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPS adaptive scanning (intelligent mode). Intelligent mode optimizes the scanning method for the type of traffic. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("intelligentMode")]
        public Output<string> IntelligentMode { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPS daemon's use of CPUs other than CPU 0 Valid values: `disable`, `enable`.
        /// </summary>
        [Output("ipsReserveCpu")]
        public Output<string> IpsReserveCpu { get; private set; } = null!;

        /// <summary>
        /// NGFW policy-mode app detection threshold.
        /// </summary>
        [Output("ngfwMaxScanRange")]
        public Output<int> NgfwMaxScanRange { get; private set; } = null!;

        /// <summary>
        /// Acceleration mode for IPS processing by NPx processors. Valid values: `none`, `basic`.
        /// </summary>
        [Output("npAccelMode")]
        public Output<string> NpAccelMode { get; private set; } = null!;

        /// <summary>
        /// Packet/pcap log queue depth per IPS engine.
        /// </summary>
        [Output("packetLogQueueDepth")]
        public Output<int> PacketLogQueueDepth { get; private set; } = null!;

        /// <summary>
        /// Method of counting concurrent sessions used by session limit anomalies. Choose between greater accuracy (accurate) or improved performance (heuristics). Valid values: `accurate`, `heuristic`.
        /// </summary>
        [Output("sessionLimitMode")]
        public Output<string> SessionLimitMode { get; private set; } = null!;

        /// <summary>
        /// Public IP addresses of your network that receive Skype sessions. Helps identify Skype sessions. Separate IP addresses with commas.
        /// </summary>
        [Output("skypeClientPublicIpaddr")]
        public Output<string?> SkypeClientPublicIpaddr { get; private set; } = null!;

        /// <summary>
        /// IPS socket buffer size (0 - 256 MB). Default depends on available memory. Can be changed to tune performance.
        /// </summary>
        [Output("socketSize")]
        public Output<int> SocketSize { get; private set; } = null!;

        /// <summary>
        /// Enable/disable use of kernel session TTL for IPS sessions. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("syncSessionTtl")]
        public Output<string> SyncSessionTtl { get; private set; } = null!;

        /// <summary>
        /// TLS active probe configuration. The structure of `tls_active_probe` block is documented below.
        /// </summary>
        [Output("tlsActiveProbe")]
        public Output<Outputs.IpsGlobalTlsActiveProbe> TlsActiveProbe { get; private set; } = null!;

        /// <summary>
        /// Enable/disable submitting attack data found by this FortiGate to FortiGuard. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("trafficSubmit")]
        public Output<string> TrafficSubmit { 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>
        /// Create a IpsGlobal 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 IpsGlobal(string name, IpsGlobalArgs? args = null, CustomResourceOptions? options = null)
            : base("fortios:index/ipsGlobal:IpsGlobal", name, args ?? new IpsGlobalArgs(), MakeResourceOptions(options, ""))
        {
        }

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

    public sealed class IpsGlobalArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Global blocking mode for rate-based anomalies. Valid values: `periodical`, `continuous`.
        /// </summary>
        [Input("anomalyMode")]
        public Input<string>? AnomalyMode { get; set; }

        /// <summary>
        /// IPS Pattern matching acceleration/offloading to CPx processors. Valid values: `none`, `basic`, `advanced`.
        /// </summary>
        [Input("cpAccelMode")]
        public Input<string>? CpAccelMode { get; set; }

        /// <summary>
        /// Regular or extended IPS database. Regular protects against the latest common and in-the-wild attacks. Extended includes protection from legacy attacks. Valid values: `regular`, `extended`.
        /// </summary>
        [Input("database")]
        public Input<string>? Database { get; set; }

        /// <summary>
        /// Limit on number of entries in deep application inspection database (1 - 2147483647, 0 = use recommended setting)
        /// </summary>
        [Input("deepAppInspDbLimit")]
        public Input<int>? DeepAppInspDbLimit { get; set; }

        /// <summary>
        /// Timeout for Deep application inspection (1 - 2147483647 sec., 0 = use recommended setting).
        /// </summary>
        [Input("deepAppInspTimeout")]
        public Input<int>? DeepAppInspTimeout { get; set; }

        /// <summary>
        /// Number of IPS engines running. If set to the default value of 0, FortiOS sets the number to optimize performance depending on the number of CPU cores.
        /// </summary>
        [Input("engineCount")]
        public Input<int>? EngineCount { get; set; }

        /// <summary>
        /// Excluded signatures. Valid values: `none`, `industrial`.
        /// </summary>
        [Input("excludeSignatures")]
        public Input<string>? ExcludeSignatures { get; set; }

        /// <summary>
        /// Enable to allow traffic if the IPS process crashes. Default is disable and IPS traffic is blocked when the IPS process crashes. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("failOpen")]
        public Input<string>? FailOpen { get; set; }

        /// <summary>
        /// Enable/disable IPS adaptive scanning (intelligent mode). Intelligent mode optimizes the scanning method for the type of traffic. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("intelligentMode")]
        public Input<string>? IntelligentMode { get; set; }

        /// <summary>
        /// Enable/disable IPS daemon's use of CPUs other than CPU 0 Valid values: `disable`, `enable`.
        /// </summary>
        [Input("ipsReserveCpu")]
        public Input<string>? IpsReserveCpu { get; set; }

        /// <summary>
        /// NGFW policy-mode app detection threshold.
        /// </summary>
        [Input("ngfwMaxScanRange")]
        public Input<int>? NgfwMaxScanRange { get; set; }

        /// <summary>
        /// Acceleration mode for IPS processing by NPx processors. Valid values: `none`, `basic`.
        /// </summary>
        [Input("npAccelMode")]
        public Input<string>? NpAccelMode { get; set; }

        /// <summary>
        /// Packet/pcap log queue depth per IPS engine.
        /// </summary>
        [Input("packetLogQueueDepth")]
        public Input<int>? PacketLogQueueDepth { get; set; }

        /// <summary>
        /// Method of counting concurrent sessions used by session limit anomalies. Choose between greater accuracy (accurate) or improved performance (heuristics). Valid values: `accurate`, `heuristic`.
        /// </summary>
        [Input("sessionLimitMode")]
        public Input<string>? SessionLimitMode { get; set; }

        /// <summary>
        /// Public IP addresses of your network that receive Skype sessions. Helps identify Skype sessions. Separate IP addresses with commas.
        /// </summary>
        [Input("skypeClientPublicIpaddr")]
        public Input<string>? SkypeClientPublicIpaddr { get; set; }

        /// <summary>
        /// IPS socket buffer size (0 - 256 MB). Default depends on available memory. Can be changed to tune performance.
        /// </summary>
        [Input("socketSize")]
        public Input<int>? SocketSize { get; set; }

        /// <summary>
        /// Enable/disable use of kernel session TTL for IPS sessions. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("syncSessionTtl")]
        public Input<string>? SyncSessionTtl { get; set; }

        /// <summary>
        /// TLS active probe configuration. The structure of `tls_active_probe` block is documented below.
        /// </summary>
        [Input("tlsActiveProbe")]
        public Input<Inputs.IpsGlobalTlsActiveProbeArgs>? TlsActiveProbe { get; set; }

        /// <summary>
        /// Enable/disable submitting attack data found by this FortiGate to FortiGuard. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("trafficSubmit")]
        public Input<string>? TrafficSubmit { 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; }

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

    public sealed class IpsGlobalState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Global blocking mode for rate-based anomalies. Valid values: `periodical`, `continuous`.
        /// </summary>
        [Input("anomalyMode")]
        public Input<string>? AnomalyMode { get; set; }

        /// <summary>
        /// IPS Pattern matching acceleration/offloading to CPx processors. Valid values: `none`, `basic`, `advanced`.
        /// </summary>
        [Input("cpAccelMode")]
        public Input<string>? CpAccelMode { get; set; }

        /// <summary>
        /// Regular or extended IPS database. Regular protects against the latest common and in-the-wild attacks. Extended includes protection from legacy attacks. Valid values: `regular`, `extended`.
        /// </summary>
        [Input("database")]
        public Input<string>? Database { get; set; }

        /// <summary>
        /// Limit on number of entries in deep application inspection database (1 - 2147483647, 0 = use recommended setting)
        /// </summary>
        [Input("deepAppInspDbLimit")]
        public Input<int>? DeepAppInspDbLimit { get; set; }

        /// <summary>
        /// Timeout for Deep application inspection (1 - 2147483647 sec., 0 = use recommended setting).
        /// </summary>
        [Input("deepAppInspTimeout")]
        public Input<int>? DeepAppInspTimeout { get; set; }

        /// <summary>
        /// Number of IPS engines running. If set to the default value of 0, FortiOS sets the number to optimize performance depending on the number of CPU cores.
        /// </summary>
        [Input("engineCount")]
        public Input<int>? EngineCount { get; set; }

        /// <summary>
        /// Excluded signatures. Valid values: `none`, `industrial`.
        /// </summary>
        [Input("excludeSignatures")]
        public Input<string>? ExcludeSignatures { get; set; }

        /// <summary>
        /// Enable to allow traffic if the IPS process crashes. Default is disable and IPS traffic is blocked when the IPS process crashes. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("failOpen")]
        public Input<string>? FailOpen { get; set; }

        /// <summary>
        /// Enable/disable IPS adaptive scanning (intelligent mode). Intelligent mode optimizes the scanning method for the type of traffic. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("intelligentMode")]
        public Input<string>? IntelligentMode { get; set; }

        /// <summary>
        /// Enable/disable IPS daemon's use of CPUs other than CPU 0 Valid values: `disable`, `enable`.
        /// </summary>
        [Input("ipsReserveCpu")]
        public Input<string>? IpsReserveCpu { get; set; }

        /// <summary>
        /// NGFW policy-mode app detection threshold.
        /// </summary>
        [Input("ngfwMaxScanRange")]
        public Input<int>? NgfwMaxScanRange { get; set; }

        /// <summary>
        /// Acceleration mode for IPS processing by NPx processors. Valid values: `none`, `basic`.
        /// </summary>
        [Input("npAccelMode")]
        public Input<string>? NpAccelMode { get; set; }

        /// <summary>
        /// Packet/pcap log queue depth per IPS engine.
        /// </summary>
        [Input("packetLogQueueDepth")]
        public Input<int>? PacketLogQueueDepth { get; set; }

        /// <summary>
        /// Method of counting concurrent sessions used by session limit anomalies. Choose between greater accuracy (accurate) or improved performance (heuristics). Valid values: `accurate`, `heuristic`.
        /// </summary>
        [Input("sessionLimitMode")]
        public Input<string>? SessionLimitMode { get; set; }

        /// <summary>
        /// Public IP addresses of your network that receive Skype sessions. Helps identify Skype sessions. Separate IP addresses with commas.
        /// </summary>
        [Input("skypeClientPublicIpaddr")]
        public Input<string>? SkypeClientPublicIpaddr { get; set; }

        /// <summary>
        /// IPS socket buffer size (0 - 256 MB). Default depends on available memory. Can be changed to tune performance.
        /// </summary>
        [Input("socketSize")]
        public Input<int>? SocketSize { get; set; }

        /// <summary>
        /// Enable/disable use of kernel session TTL for IPS sessions. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("syncSessionTtl")]
        public Input<string>? SyncSessionTtl { get; set; }

        /// <summary>
        /// TLS active probe configuration. The structure of `tls_active_probe` block is documented below.
        /// </summary>
        [Input("tlsActiveProbe")]
        public Input<Inputs.IpsGlobalTlsActiveProbeGetArgs>? TlsActiveProbe { get; set; }

        /// <summary>
        /// Enable/disable submitting attack data found by this FortiGate to FortiGuard. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("trafficSubmit")]
        public Input<string>? TrafficSubmit { 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; }

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