// *** 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
{
    public static class GetRouterBgp
    {
        /// <summary>
        /// Use this data source to get information on fortios router bgp
        /// 
        /// {{% examples %}}
        /// ## Example Usage
        /// {{% example %}}
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using System.Linq;
        /// using Pulumi;
        /// using Fortios = Pulumi.Fortios;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var sample1 = Fortios.GetRouterBgp.Invoke();
        /// 
        ///     return new Dictionary&lt;string, object?&gt;
        ///     {
        ///         ["output1"] = sample1.Apply(getRouterBgpResult =&gt; getRouterBgpResult.Neighbors),
        ///     };
        /// });
        /// ```
        /// {{% /example %}}
        /// {{% /examples %}}
        /// </summary>
        public static Task<GetRouterBgpResult> InvokeAsync(GetRouterBgpArgs? args = null, InvokeOptions? options = null)
            => global::Pulumi.Deployment.Instance.InvokeAsync<GetRouterBgpResult>("fortios:index/getRouterBgp:getRouterBgp", args ?? new GetRouterBgpArgs(), options.WithDefaults());

        /// <summary>
        /// Use this data source to get information on fortios router bgp
        /// 
        /// {{% examples %}}
        /// ## Example Usage
        /// {{% example %}}
        /// 
        /// ```csharp
        /// using System.Collections.Generic;
        /// using System.Linq;
        /// using Pulumi;
        /// using Fortios = Pulumi.Fortios;
        /// 
        /// return await Deployment.RunAsync(() =&gt; 
        /// {
        ///     var sample1 = Fortios.GetRouterBgp.Invoke();
        /// 
        ///     return new Dictionary&lt;string, object?&gt;
        ///     {
        ///         ["output1"] = sample1.Apply(getRouterBgpResult =&gt; getRouterBgpResult.Neighbors),
        ///     };
        /// });
        /// ```
        /// {{% /example %}}
        /// {{% /examples %}}
        /// </summary>
        public static Output<GetRouterBgpResult> Invoke(GetRouterBgpInvokeArgs? args = null, InvokeOptions? options = null)
            => global::Pulumi.Deployment.Instance.Invoke<GetRouterBgpResult>("fortios:index/getRouterBgp:getRouterBgp", args ?? new GetRouterBgpInvokeArgs(), options.WithDefaults());
    }


    public sealed class GetRouterBgpArgs : global::Pulumi.InvokeArgs
    {
        /// <summary>
        /// Specifies the vdom to which the data source 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 string? Vdomparam { get; set; }

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

    public sealed class GetRouterBgpInvokeArgs : global::Pulumi.InvokeArgs
    {
        /// <summary>
        /// Specifies the vdom to which the data source 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 GetRouterBgpInvokeArgs()
        {
        }
        public static new GetRouterBgpInvokeArgs Empty => new GetRouterBgpInvokeArgs();
    }


    [OutputType]
    public sealed class GetRouterBgpResult
    {
        /// <summary>
        /// Enable/disable IPv4 additional-path capability.
        /// </summary>
        public readonly string AdditionalPath;
        /// <summary>
        /// Enable/disable IPv6 additional-path capability.
        /// </summary>
        public readonly string AdditionalPath6;
        /// <summary>
        /// Number of additional paths to be selected for each IPv4 NLRI.
        /// </summary>
        public readonly int AdditionalPathSelect;
        /// <summary>
        /// Number of additional paths to be selected for each IPv6 NLRI.
        /// </summary>
        public readonly int AdditionalPathSelect6;
        /// <summary>
        /// Number of additional paths to be selected for each VPNv4 NLRI.
        /// </summary>
        public readonly int AdditionalPathSelectVpnv4;
        /// <summary>
        /// Enable/disable VPNv4 additional-path capability.
        /// </summary>
        public readonly string AdditionalPathVpnv4;
        /// <summary>
        /// Administrative distance modifications. The structure of `admin_distance` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpAdminDistanceResult> AdminDistances;
        /// <summary>
        /// BGP IPv6 aggregate address table. The structure of `aggregate_address6` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpAggregateAddress6Result> AggregateAddress6s;
        /// <summary>
        /// BGP aggregate address table. The structure of `aggregate_address` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpAggregateAddressResult> AggregateAddresses;
        /// <summary>
        /// Enable/disable always compare MED.
        /// </summary>
        public readonly string AlwaysCompareMed;
        /// <summary>
        /// Router AS number, valid from 1 to 4294967295, 0 to disable BGP.
        /// </summary>
        public readonly int As;
        /// <summary>
        /// Enable/disable ignore AS path.
        /// </summary>
        public readonly string BestpathAsPathIgnore;
        /// <summary>
        /// Enable/disable compare federation AS path length.
        /// </summary>
        public readonly string BestpathCmpConfedAspath;
        /// <summary>
        /// Enable/disable compare router ID for identical EBGP paths.
        /// </summary>
        public readonly string BestpathCmpRouterid;
        /// <summary>
        /// Enable/disable compare MED among confederation paths.
        /// </summary>
        public readonly string BestpathMedConfed;
        /// <summary>
        /// Enable/disable treat missing MED as least preferred.
        /// </summary>
        public readonly string BestpathMedMissingAsWorst;
        /// <summary>
        /// Enable/disable client-to-client route reflection.
        /// </summary>
        public readonly string ClientToClientReflection;
        /// <summary>
        /// Route reflector cluster ID.
        /// </summary>
        public readonly string ClusterId;
        /// <summary>
        /// Confederation identifier.
        /// </summary>
        public readonly int ConfederationIdentifier;
        /// <summary>
        /// Confederation peers. The structure of `confederation_peers` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpConfederationPeerResult> ConfederationPeers;
        /// <summary>
        /// Enable/disable route-flap dampening.
        /// </summary>
        public readonly string Dampening;
        /// <summary>
        /// Maximum minutes a route can be suppressed.
        /// </summary>
        public readonly int DampeningMaxSuppressTime;
        /// <summary>
        /// Reachability half-life time for penalty (min).
        /// </summary>
        public readonly int DampeningReachabilityHalfLife;
        /// <summary>
        /// Threshold to reuse routes.
        /// </summary>
        public readonly int DampeningReuse;
        /// <summary>
        /// Criteria for dampening.
        /// </summary>
        public readonly string DampeningRouteMap;
        /// <summary>
        /// Threshold to suppress routes.
        /// </summary>
        public readonly int DampeningSuppress;
        /// <summary>
        /// Unreachability half-life time for penalty (min).
        /// </summary>
        public readonly int DampeningUnreachabilityHalfLife;
        /// <summary>
        /// Default local preference.
        /// </summary>
        public readonly int DefaultLocalPreference;
        /// <summary>
        /// Enable/disable enforce deterministic comparison of MED.
        /// </summary>
        public readonly string DeterministicMed;
        /// <summary>
        /// Distance for routes external to the AS.
        /// </summary>
        public readonly int DistanceExternal;
        /// <summary>
        /// Distance for routes internal to the AS.
        /// </summary>
        public readonly int DistanceInternal;
        /// <summary>
        /// Distance for routes local to the AS.
        /// </summary>
        public readonly int DistanceLocal;
        /// <summary>
        /// Enable/disable EBGP multi-path.
        /// </summary>
        public readonly string EbgpMultipath;
        /// <summary>
        /// Enable/disable enforce first AS for EBGP routes.
        /// </summary>
        public readonly string EnforceFirstAs;
        /// <summary>
        /// Enable/disable reset peer BGP session if link goes down.
        /// </summary>
        public readonly string FastExternalFailover;
        /// <summary>
        /// Enable/disable to exit graceful restart on timer only.
        /// </summary>
        public readonly string GracefulEndOnTimer;
        /// <summary>
        /// Enable/disable BGP graceful restart capabilities.
        /// </summary>
        public readonly string GracefulRestart;
        /// <summary>
        /// Time needed for neighbors to restart (sec).
        /// </summary>
        public readonly int GracefulRestartTime;
        /// <summary>
        /// Time to hold stale paths of restarting neighbor (sec).
        /// </summary>
        public readonly int GracefulStalepathTime;
        /// <summary>
        /// Route advertisement/selection delay after restart (sec).
        /// </summary>
        public readonly int GracefulUpdateDelay;
        /// <summary>
        /// Interval (sec) before peer considered dead.
        /// </summary>
        public readonly int HoldtimeTimer;
        /// <summary>
        /// Enable/disable IBGP multi-path.
        /// </summary>
        public readonly string IbgpMultipath;
        /// <summary>
        /// The provider-assigned unique ID for this managed resource.
        /// </summary>
        public readonly string Id;
        /// <summary>
        /// Don't send unknown optional capability notification message
        /// </summary>
        public readonly string IgnoreOptionalCapability;
        /// <summary>
        /// Frequency to send keep alive requests.
        /// </summary>
        public readonly int KeepaliveTimer;
        /// <summary>
        /// Enable logging of BGP neighbour's changes
        /// </summary>
        public readonly string LogNeighbourChanges;
        /// <summary>
        /// Enable/disable use of recursive distance to select multipath.
        /// </summary>
        public readonly string MultipathRecursiveDistance;
        /// <summary>
        /// Neighbor group name.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpNeighborGroupResult> NeighborGroups;
        /// <summary>
        /// BGP IPv6 neighbor range table. The structure of `neighbor_range6` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpNeighborRange6Result> NeighborRange6s;
        /// <summary>
        /// BGP neighbor range table. The structure of `neighbor_range` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpNeighborRangeResult> NeighborRanges;
        /// <summary>
        /// BGP neighbor table. The structure of `neighbor` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpNeighborResult> Neighbors;
        /// <summary>
        /// BGP IPv6 network table. The structure of `network6` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpNetwork6Result> Network6s;
        /// <summary>
        /// Configure insurance of BGP network route existence in IGP.
        /// </summary>
        public readonly string NetworkImportCheck;
        /// <summary>
        /// BGP network table. The structure of `network` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpNetworkResult> Networks;
        /// <summary>
        /// Enable/disable priority inheritance for recursive resolution.
        /// </summary>
        public readonly string RecursiveInheritPriority;
        /// <summary>
        /// Enable/disable recursive resolution of next-hop using BGP route.
        /// </summary>
        public readonly string RecursiveNextHop;
        /// <summary>
        /// BGP IPv6 redistribute table. The structure of `redistribute6` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpRedistribute6Result> Redistribute6s;
        /// <summary>
        /// BGP IPv4 redistribute table. The structure of `redistribute` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpRedistributeResult> Redistributes;
        /// <summary>
        /// Router ID.
        /// </summary>
        public readonly string RouterId;
        /// <summary>
        /// Background scanner interval (sec), 0 to disable it.
        /// </summary>
        public readonly int ScanTime;
        /// <summary>
        /// Enable/disable only advertise routes from iBGP if routes present in an IGP.
        /// </summary>
        public readonly string Synchronization;
        /// <summary>
        /// Configure tag-match mode. Resolves BGP routes with other routes containing the same tag.
        /// </summary>
        public readonly string TagResolveMode;
        public readonly string? Vdomparam;
        /// <summary>
        /// BGP IPv6 VRF leaking table. The structure of `vrf6` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpVrf6Result> Vrf6s;
        /// <summary>
        /// BGP IPv6 VRF leaking table. The structure of `vrf_leak6` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpVrfLeak6Result> VrfLeak6s;
        /// <summary>
        /// BGP VRF leaking table. The structure of `vrf_leak` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpVrfLeakResult> VrfLeaks;
        /// <summary>
        /// Target VRF ID &lt;0 - 31&gt;.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterBgpVrfResult> Vrves;

        [OutputConstructor]
        private GetRouterBgpResult(
            string additionalPath,

            string additionalPath6,

            int additionalPathSelect,

            int additionalPathSelect6,

            int additionalPathSelectVpnv4,

            string additionalPathVpnv4,

            ImmutableArray<Outputs.GetRouterBgpAdminDistanceResult> adminDistances,

            ImmutableArray<Outputs.GetRouterBgpAggregateAddress6Result> aggregateAddress6s,

            ImmutableArray<Outputs.GetRouterBgpAggregateAddressResult> aggregateAddresses,

            string alwaysCompareMed,

            int @as,

            string bestpathAsPathIgnore,

            string bestpathCmpConfedAspath,

            string bestpathCmpRouterid,

            string bestpathMedConfed,

            string bestpathMedMissingAsWorst,

            string clientToClientReflection,

            string clusterId,

            int confederationIdentifier,

            ImmutableArray<Outputs.GetRouterBgpConfederationPeerResult> confederationPeers,

            string dampening,

            int dampeningMaxSuppressTime,

            int dampeningReachabilityHalfLife,

            int dampeningReuse,

            string dampeningRouteMap,

            int dampeningSuppress,

            int dampeningUnreachabilityHalfLife,

            int defaultLocalPreference,

            string deterministicMed,

            int distanceExternal,

            int distanceInternal,

            int distanceLocal,

            string ebgpMultipath,

            string enforceFirstAs,

            string fastExternalFailover,

            string gracefulEndOnTimer,

            string gracefulRestart,

            int gracefulRestartTime,

            int gracefulStalepathTime,

            int gracefulUpdateDelay,

            int holdtimeTimer,

            string ibgpMultipath,

            string id,

            string ignoreOptionalCapability,

            int keepaliveTimer,

            string logNeighbourChanges,

            string multipathRecursiveDistance,

            ImmutableArray<Outputs.GetRouterBgpNeighborGroupResult> neighborGroups,

            ImmutableArray<Outputs.GetRouterBgpNeighborRange6Result> neighborRange6s,

            ImmutableArray<Outputs.GetRouterBgpNeighborRangeResult> neighborRanges,

            ImmutableArray<Outputs.GetRouterBgpNeighborResult> neighbors,

            ImmutableArray<Outputs.GetRouterBgpNetwork6Result> network6s,

            string networkImportCheck,

            ImmutableArray<Outputs.GetRouterBgpNetworkResult> networks,

            string recursiveInheritPriority,

            string recursiveNextHop,

            ImmutableArray<Outputs.GetRouterBgpRedistribute6Result> redistribute6s,

            ImmutableArray<Outputs.GetRouterBgpRedistributeResult> redistributes,

            string routerId,

            int scanTime,

            string synchronization,

            string tagResolveMode,

            string? vdomparam,

            ImmutableArray<Outputs.GetRouterBgpVrf6Result> vrf6s,

            ImmutableArray<Outputs.GetRouterBgpVrfLeak6Result> vrfLeak6s,

            ImmutableArray<Outputs.GetRouterBgpVrfLeakResult> vrfLeaks,

            ImmutableArray<Outputs.GetRouterBgpVrfResult> vrves)
        {
            AdditionalPath = additionalPath;
            AdditionalPath6 = additionalPath6;
            AdditionalPathSelect = additionalPathSelect;
            AdditionalPathSelect6 = additionalPathSelect6;
            AdditionalPathSelectVpnv4 = additionalPathSelectVpnv4;
            AdditionalPathVpnv4 = additionalPathVpnv4;
            AdminDistances = adminDistances;
            AggregateAddress6s = aggregateAddress6s;
            AggregateAddresses = aggregateAddresses;
            AlwaysCompareMed = alwaysCompareMed;
            As = @as;
            BestpathAsPathIgnore = bestpathAsPathIgnore;
            BestpathCmpConfedAspath = bestpathCmpConfedAspath;
            BestpathCmpRouterid = bestpathCmpRouterid;
            BestpathMedConfed = bestpathMedConfed;
            BestpathMedMissingAsWorst = bestpathMedMissingAsWorst;
            ClientToClientReflection = clientToClientReflection;
            ClusterId = clusterId;
            ConfederationIdentifier = confederationIdentifier;
            ConfederationPeers = confederationPeers;
            Dampening = dampening;
            DampeningMaxSuppressTime = dampeningMaxSuppressTime;
            DampeningReachabilityHalfLife = dampeningReachabilityHalfLife;
            DampeningReuse = dampeningReuse;
            DampeningRouteMap = dampeningRouteMap;
            DampeningSuppress = dampeningSuppress;
            DampeningUnreachabilityHalfLife = dampeningUnreachabilityHalfLife;
            DefaultLocalPreference = defaultLocalPreference;
            DeterministicMed = deterministicMed;
            DistanceExternal = distanceExternal;
            DistanceInternal = distanceInternal;
            DistanceLocal = distanceLocal;
            EbgpMultipath = ebgpMultipath;
            EnforceFirstAs = enforceFirstAs;
            FastExternalFailover = fastExternalFailover;
            GracefulEndOnTimer = gracefulEndOnTimer;
            GracefulRestart = gracefulRestart;
            GracefulRestartTime = gracefulRestartTime;
            GracefulStalepathTime = gracefulStalepathTime;
            GracefulUpdateDelay = gracefulUpdateDelay;
            HoldtimeTimer = holdtimeTimer;
            IbgpMultipath = ibgpMultipath;
            Id = id;
            IgnoreOptionalCapability = ignoreOptionalCapability;
            KeepaliveTimer = keepaliveTimer;
            LogNeighbourChanges = logNeighbourChanges;
            MultipathRecursiveDistance = multipathRecursiveDistance;
            NeighborGroups = neighborGroups;
            NeighborRange6s = neighborRange6s;
            NeighborRanges = neighborRanges;
            Neighbors = neighbors;
            Network6s = network6s;
            NetworkImportCheck = networkImportCheck;
            Networks = networks;
            RecursiveInheritPriority = recursiveInheritPriority;
            RecursiveNextHop = recursiveNextHop;
            Redistribute6s = redistribute6s;
            Redistributes = redistributes;
            RouterId = routerId;
            ScanTime = scanTime;
            Synchronization = synchronization;
            TagResolveMode = tagResolveMode;
            Vdomparam = vdomparam;
            Vrf6s = vrf6s;
            VrfLeak6s = vrfLeak6s;
            VrfLeaks = vrfLeaks;
            Vrves = vrves;
        }
    }
}
