// *** 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.Inputs
{

    public sealed class SystemVirtualwanlinkServiceArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Address mode (IPv4 or IPv6). Valid values: `ipv4`, `ipv6`.
        /// </summary>
        [Input("addrMode")]
        public Input<string>? AddrMode { get; set; }

        /// <summary>
        /// Coefficient of reciprocal of available bidirectional bandwidth in the formula of custom-profile-1.
        /// </summary>
        [Input("bandwidthWeight")]
        public Input<int>? BandwidthWeight { get; set; }

        /// <summary>
        /// Enable/disable use of SD-WAN as default service. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("default")]
        public Input<string>? Default { get; set; }

        /// <summary>
        /// Enable/disable forward traffic DSCP tag. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dscpForward")]
        public Input<string>? DscpForward { get; set; }

        /// <summary>
        /// Forward traffic DSCP tag.
        /// </summary>
        [Input("dscpForwardTag")]
        public Input<string>? DscpForwardTag { get; set; }

        /// <summary>
        /// Enable/disable reverse traffic DSCP tag. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dscpReverse")]
        public Input<string>? DscpReverse { get; set; }

        /// <summary>
        /// Reverse traffic DSCP tag.
        /// </summary>
        [Input("dscpReverseTag")]
        public Input<string>? DscpReverseTag { get; set; }

        [Input("dst6s")]
        private InputList<Inputs.SystemVirtualwanlinkServiceDst6Args>? _dst6s;

        /// <summary>
        /// Destination address6 name. The structure of `dst6` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceDst6Args> Dst6s
        {
            get => _dst6s ?? (_dst6s = new InputList<Inputs.SystemVirtualwanlinkServiceDst6Args>());
            set => _dst6s = value;
        }

        /// <summary>
        /// Enable/disable negation of destination address match. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dstNegate")]
        public Input<string>? DstNegate { get; set; }

        [Input("dsts")]
        private InputList<Inputs.SystemVirtualwanlinkServiceDstArgs>? _dsts;

        /// <summary>
        /// Destination address name. The structure of `dst` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceDstArgs> Dsts
        {
            get => _dsts ?? (_dsts = new InputList<Inputs.SystemVirtualwanlinkServiceDstArgs>());
            set => _dsts = value;
        }

        /// <summary>
        /// End destination port number.
        /// </summary>
        [Input("endPort")]
        public Input<int>? EndPort { get; set; }

        /// <summary>
        /// Enable/disable SD-WAN service gateway. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("gateway")]
        public Input<string>? Gateway { get; set; }

        [Input("groups")]
        private InputList<Inputs.SystemVirtualwanlinkServiceGroupArgs>? _groups;

        /// <summary>
        /// User groups. The structure of `groups` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceGroupArgs> Groups
        {
            get => _groups ?? (_groups = new InputList<Inputs.SystemVirtualwanlinkServiceGroupArgs>());
            set => _groups = value;
        }

        /// <summary>
        /// Health check.
        /// </summary>
        [Input("healthCheck")]
        public Input<string>? HealthCheck { get; set; }

        /// <summary>
        /// Waiting period in seconds when switching from the back-up member to the primary member (0 - 10000000, default = 0).
        /// </summary>
        [Input("holdDownTime")]
        public Input<int>? HoldDownTime { get; set; }

        /// <summary>
        /// Priority rule ID (1 - 4000).
        /// </summary>
        [Input("id")]
        public Input<int>? Id { get; set; }

        /// <summary>
        /// Enable/disable negation of input device match. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("inputDeviceNegate")]
        public Input<string>? InputDeviceNegate { get; set; }

        [Input("inputDevices")]
        private InputList<Inputs.SystemVirtualwanlinkServiceInputDeviceArgs>? _inputDevices;

        /// <summary>
        /// Source interface name. The structure of `input_device` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceInputDeviceArgs> InputDevices
        {
            get => _inputDevices ?? (_inputDevices = new InputList<Inputs.SystemVirtualwanlinkServiceInputDeviceArgs>());
            set => _inputDevices = value;
        }

        /// <summary>
        /// Enable/disable use of Internet service for application-based load balancing. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("internetService")]
        public Input<string>? InternetService { get; set; }

        [Input("internetServiceAppCtrlGroups")]
        private InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceAppCtrlGroupArgs>? _internetServiceAppCtrlGroups;

        /// <summary>
        /// Application control based Internet Service group list. The structure of `internet_service_app_ctrl_group` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceAppCtrlGroupArgs> InternetServiceAppCtrlGroups
        {
            get => _internetServiceAppCtrlGroups ?? (_internetServiceAppCtrlGroups = new InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceAppCtrlGroupArgs>());
            set => _internetServiceAppCtrlGroups = value;
        }

        [Input("internetServiceAppCtrls")]
        private InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceAppCtrlArgs>? _internetServiceAppCtrls;

        /// <summary>
        /// Application control based Internet Service ID list. The structure of `internet_service_app_ctrl` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceAppCtrlArgs> InternetServiceAppCtrls
        {
            get => _internetServiceAppCtrls ?? (_internetServiceAppCtrls = new InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceAppCtrlArgs>());
            set => _internetServiceAppCtrls = value;
        }

        [Input("internetServiceCtrlGroups")]
        private InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceCtrlGroupArgs>? _internetServiceCtrlGroups;

        /// <summary>
        /// Control-based Internet Service group list. The structure of `internet_service_ctrl_group` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceCtrlGroupArgs> InternetServiceCtrlGroups
        {
            get => _internetServiceCtrlGroups ?? (_internetServiceCtrlGroups = new InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceCtrlGroupArgs>());
            set => _internetServiceCtrlGroups = value;
        }

        [Input("internetServiceCtrls")]
        private InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceCtrlArgs>? _internetServiceCtrls;

        /// <summary>
        /// Control-based Internet Service ID list. The structure of `internet_service_ctrl` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceCtrlArgs> InternetServiceCtrls
        {
            get => _internetServiceCtrls ?? (_internetServiceCtrls = new InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceCtrlArgs>());
            set => _internetServiceCtrls = value;
        }

        [Input("internetServiceCustomGroups")]
        private InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceCustomGroupArgs>? _internetServiceCustomGroups;

        /// <summary>
        /// Custom Internet Service group list. The structure of `internet_service_custom_group` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceCustomGroupArgs> InternetServiceCustomGroups
        {
            get => _internetServiceCustomGroups ?? (_internetServiceCustomGroups = new InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceCustomGroupArgs>());
            set => _internetServiceCustomGroups = value;
        }

        [Input("internetServiceCustoms")]
        private InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceCustomArgs>? _internetServiceCustoms;

        /// <summary>
        /// Custom Internet service name list. The structure of `internet_service_custom` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceCustomArgs> InternetServiceCustoms
        {
            get => _internetServiceCustoms ?? (_internetServiceCustoms = new InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceCustomArgs>());
            set => _internetServiceCustoms = value;
        }

        [Input("internetServiceGroups")]
        private InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceGroupArgs>? _internetServiceGroups;

        /// <summary>
        /// Internet Service group list. The structure of `internet_service_group` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceGroupArgs> InternetServiceGroups
        {
            get => _internetServiceGroups ?? (_internetServiceGroups = new InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceGroupArgs>());
            set => _internetServiceGroups = value;
        }

        [Input("internetServiceIds")]
        private InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceIdArgs>? _internetServiceIds;

        /// <summary>
        /// Internet service ID list. The structure of `internet_service_id` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceIdArgs> InternetServiceIds
        {
            get => _internetServiceIds ?? (_internetServiceIds = new InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceIdArgs>());
            set => _internetServiceIds = value;
        }

        [Input("internetServiceNames")]
        private InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceNameArgs>? _internetServiceNames;

        /// <summary>
        /// Internet service name list. The structure of `internet_service_name` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceNameArgs> InternetServiceNames
        {
            get => _internetServiceNames ?? (_internetServiceNames = new InputList<Inputs.SystemVirtualwanlinkServiceInternetServiceNameArgs>());
            set => _internetServiceNames = value;
        }

        /// <summary>
        /// Coefficient of jitter in the formula of custom-profile-1.
        /// </summary>
        [Input("jitterWeight")]
        public Input<int>? JitterWeight { get; set; }

        /// <summary>
        /// Coefficient of latency in the formula of custom-profile-1.
        /// </summary>
        [Input("latencyWeight")]
        public Input<int>? LatencyWeight { get; set; }

        /// <summary>
        /// Link cost factor. Valid values: `latency`, `jitter`, `packet-loss`, `inbandwidth`, `outbandwidth`, `bibandwidth`, `custom-profile-1`.
        /// </summary>
        [Input("linkCostFactor")]
        public Input<string>? LinkCostFactor { get; set; }

        /// <summary>
        /// Percentage threshold change of link cost values that will result in policy route regeneration (0 - 10000000, default = 10).
        /// </summary>
        [Input("linkCostThreshold")]
        public Input<int>? LinkCostThreshold { get; set; }

        /// <summary>
        /// Member sequence number.
        /// </summary>
        [Input("member")]
        public Input<int>? Member { get; set; }

        /// <summary>
        /// Control how the priority rule sets the priority of interfaces in the SD-WAN. Valid values: `auto`, `manual`, `priority`, `sla`, `load-balance`.
        /// </summary>
        [Input("mode")]
        public Input<string>? Mode { get; set; }

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

        /// <summary>
        /// Coefficient of packet-loss in the formula of custom-profile-1.
        /// </summary>
        [Input("packetLossWeight")]
        public Input<int>? PacketLossWeight { get; set; }

        [Input("priorityMembers")]
        private InputList<Inputs.SystemVirtualwanlinkServicePriorityMemberArgs>? _priorityMembers;

        /// <summary>
        /// Member sequence number list. The structure of `priority_members` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServicePriorityMemberArgs> PriorityMembers
        {
            get => _priorityMembers ?? (_priorityMembers = new InputList<Inputs.SystemVirtualwanlinkServicePriorityMemberArgs>());
            set => _priorityMembers = value;
        }

        /// <summary>
        /// Protocol number.
        /// </summary>
        [Input("protocol")]
        public Input<int>? Protocol { get; set; }

        /// <summary>
        /// Quality grade.
        /// </summary>
        [Input("qualityLink")]
        public Input<int>? QualityLink { get; set; }

        /// <summary>
        /// Service role to work with neighbor. Valid values: `standalone`, `primary`, `secondary`.
        /// </summary>
        [Input("role")]
        public Input<string>? Role { get; set; }

        /// <summary>
        /// IPv4 route map route-tag.
        /// </summary>
        [Input("routeTag")]
        public Input<int>? RouteTag { get; set; }

        /// <summary>
        /// Method to compare SLA value for sla and load balance mode.  Valid values: `order`, `number`.
        /// </summary>
        [Input("slaCompareMethod")]
        public Input<string>? SlaCompareMethod { get; set; }

        [Input("slas")]
        private InputList<Inputs.SystemVirtualwanlinkServiceSlaArgs>? _slas;

        /// <summary>
        /// Service level agreement (SLA). The structure of `sla` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceSlaArgs> Slas
        {
            get => _slas ?? (_slas = new InputList<Inputs.SystemVirtualwanlinkServiceSlaArgs>());
            set => _slas = value;
        }

        [Input("src6s")]
        private InputList<Inputs.SystemVirtualwanlinkServiceSrc6Args>? _src6s;

        /// <summary>
        /// Source address6 name. The structure of `src6` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceSrc6Args> Src6s
        {
            get => _src6s ?? (_src6s = new InputList<Inputs.SystemVirtualwanlinkServiceSrc6Args>());
            set => _src6s = value;
        }

        /// <summary>
        /// Enable/disable negation of source address match. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("srcNegate")]
        public Input<string>? SrcNegate { get; set; }

        [Input("srcs")]
        private InputList<Inputs.SystemVirtualwanlinkServiceSrcArgs>? _srcs;

        /// <summary>
        /// Source address name. The structure of `src` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceSrcArgs> Srcs
        {
            get => _srcs ?? (_srcs = new InputList<Inputs.SystemVirtualwanlinkServiceSrcArgs>());
            set => _srcs = value;
        }

        /// <summary>
        /// Enable/disable service when selected neighbor role is standalone while service role is not standalone. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("standaloneAction")]
        public Input<string>? StandaloneAction { get; set; }

        /// <summary>
        /// Start destination port number.
        /// </summary>
        [Input("startPort")]
        public Input<int>? StartPort { get; set; }

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

        /// <summary>
        /// Type of service bit pattern.
        /// </summary>
        [Input("tos")]
        public Input<string>? Tos { get; set; }

        /// <summary>
        /// Type of service evaluated bits.
        /// </summary>
        [Input("tosMask")]
        public Input<string>? TosMask { get; set; }

        [Input("users")]
        private InputList<Inputs.SystemVirtualwanlinkServiceUserArgs>? _users;

        /// <summary>
        /// User name. The structure of `users` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemVirtualwanlinkServiceUserArgs> Users
        {
            get => _users ?? (_users = new InputList<Inputs.SystemVirtualwanlinkServiceUserArgs>());
            set => _users = value;
        }

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