// *** 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 GetRouterOspf
    {
        /// <summary>
        /// Use this data source to get information on fortios router ospf
        /// </summary>
        public static Task<GetRouterOspfResult> InvokeAsync(GetRouterOspfArgs? args = null, InvokeOptions? options = null)
            => global::Pulumi.Deployment.Instance.InvokeAsync<GetRouterOspfResult>("fortios:index/getRouterOspf:getRouterOspf", args ?? new GetRouterOspfArgs(), options.WithDefaults());

        /// <summary>
        /// Use this data source to get information on fortios router ospf
        /// </summary>
        public static Output<GetRouterOspfResult> Invoke(GetRouterOspfInvokeArgs? args = null, InvokeOptions? options = null)
            => global::Pulumi.Deployment.Instance.Invoke<GetRouterOspfResult>("fortios:index/getRouterOspf:getRouterOspf", args ?? new GetRouterOspfInvokeArgs(), options.WithDefaults());
    }


    public sealed class GetRouterOspfArgs : 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 GetRouterOspfArgs()
        {
        }
        public static new GetRouterOspfArgs Empty => new GetRouterOspfArgs();
    }

    public sealed class GetRouterOspfInvokeArgs : 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 GetRouterOspfInvokeArgs()
        {
        }
        public static new GetRouterOspfInvokeArgs Empty => new GetRouterOspfInvokeArgs();
    }


    [OutputType]
    public sealed class GetRouterOspfResult
    {
        /// <summary>
        /// Area border router type.
        /// </summary>
        public readonly string AbrType;
        /// <summary>
        /// Attach the network to area.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterOspfAreaResult> Areas;
        /// <summary>
        /// Reference bandwidth in terms of megabits per second.
        /// </summary>
        public readonly int AutoCostRefBandwidth;
        /// <summary>
        /// Bidirectional Forwarding Detection (BFD).
        /// </summary>
        public readonly string Bfd;
        /// <summary>
        /// Enable/disable database overflow.
        /// </summary>
        public readonly string DatabaseOverflow;
        /// <summary>
        /// Database overflow maximum LSAs.
        /// </summary>
        public readonly int DatabaseOverflowMaxLsas;
        /// <summary>
        /// Database overflow time to recover (sec).
        /// </summary>
        public readonly int DatabaseOverflowTimeToRecover;
        /// <summary>
        /// Default information metric.
        /// </summary>
        public readonly int DefaultInformationMetric;
        /// <summary>
        /// Default information metric type.
        /// </summary>
        public readonly string DefaultInformationMetricType;
        /// <summary>
        /// Enable/disable generation of default route.
        /// </summary>
        public readonly string DefaultInformationOriginate;
        /// <summary>
        /// Default information route map.
        /// </summary>
        public readonly string DefaultInformationRouteMap;
        /// <summary>
        /// Default metric of redistribute routes.
        /// </summary>
        public readonly int DefaultMetric;
        /// <summary>
        /// Distance of the route.
        /// </summary>
        public readonly int Distance;
        /// <summary>
        /// Administrative external distance.
        /// </summary>
        public readonly int DistanceExternal;
        /// <summary>
        /// Administrative inter-area distance.
        /// </summary>
        public readonly int DistanceInterArea;
        /// <summary>
        /// Administrative intra-area distance.
        /// </summary>
        public readonly int DistanceIntraArea;
        /// <summary>
        /// Filter incoming routes.
        /// </summary>
        public readonly string DistributeListIn;
        /// <summary>
        /// Distribute list configuration. The structure of `distribute_list` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterOspfDistributeListResult> DistributeLists;
        /// <summary>
        /// Filter incoming external routes by route-map.
        /// </summary>
        public readonly string DistributeRouteMapIn;
        /// <summary>
        /// The provider-assigned unique ID for this managed resource.
        /// </summary>
        public readonly string Id;
        /// <summary>
        /// Enable logging of OSPF neighbour's changes
        /// </summary>
        public readonly string LogNeighbourChanges;
        /// <summary>
        /// OSPF neighbor configuration are used when OSPF runs on non-broadcast media The structure of `neighbor` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterOspfNeighborResult> Neighbors;
        /// <summary>
        /// OSPF network configuration. The structure of `network` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterOspfNetworkResult> Networks;
        /// <summary>
        /// OSPF interface configuration. The structure of `ospf_interface` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterOspfOspfInterfaceResult> OspfInterfaces;
        /// <summary>
        /// Passive interface configuration. The structure of `passive_interface` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterOspfPassiveInterfaceResult> PassiveInterfaces;
        /// <summary>
        /// Redistribute configuration. The structure of `redistribute` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterOspfRedistributeResult> Redistributes;
        /// <summary>
        /// OSPF restart mode (graceful or LLS).
        /// </summary>
        public readonly string RestartMode;
        /// <summary>
        /// Enable/disable continuing graceful restart upon topology change.
        /// </summary>
        public readonly string RestartOnTopologyChange;
        /// <summary>
        /// Graceful restart period.
        /// </summary>
        public readonly int RestartPeriod;
        /// <summary>
        /// Enable/disable RFC1583 compatibility.
        /// </summary>
        public readonly string Rfc1583Compatible;
        /// <summary>
        /// Router ID.
        /// </summary>
        public readonly string RouterId;
        /// <summary>
        /// SPF calculation frequency.
        /// </summary>
        public readonly string SpfTimers;
        /// <summary>
        /// IP address summary configuration. The structure of `summary_address` block is documented below.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetRouterOspfSummaryAddressResult> SummaryAddresses;
        public readonly string? Vdomparam;

        [OutputConstructor]
        private GetRouterOspfResult(
            string abrType,

            ImmutableArray<Outputs.GetRouterOspfAreaResult> areas,

            int autoCostRefBandwidth,

            string bfd,

            string databaseOverflow,

            int databaseOverflowMaxLsas,

            int databaseOverflowTimeToRecover,

            int defaultInformationMetric,

            string defaultInformationMetricType,

            string defaultInformationOriginate,

            string defaultInformationRouteMap,

            int defaultMetric,

            int distance,

            int distanceExternal,

            int distanceInterArea,

            int distanceIntraArea,

            string distributeListIn,

            ImmutableArray<Outputs.GetRouterOspfDistributeListResult> distributeLists,

            string distributeRouteMapIn,

            string id,

            string logNeighbourChanges,

            ImmutableArray<Outputs.GetRouterOspfNeighborResult> neighbors,

            ImmutableArray<Outputs.GetRouterOspfNetworkResult> networks,

            ImmutableArray<Outputs.GetRouterOspfOspfInterfaceResult> ospfInterfaces,

            ImmutableArray<Outputs.GetRouterOspfPassiveInterfaceResult> passiveInterfaces,

            ImmutableArray<Outputs.GetRouterOspfRedistributeResult> redistributes,

            string restartMode,

            string restartOnTopologyChange,

            int restartPeriod,

            string rfc1583Compatible,

            string routerId,

            string spfTimers,

            ImmutableArray<Outputs.GetRouterOspfSummaryAddressResult> summaryAddresses,

            string? vdomparam)
        {
            AbrType = abrType;
            Areas = areas;
            AutoCostRefBandwidth = autoCostRefBandwidth;
            Bfd = bfd;
            DatabaseOverflow = databaseOverflow;
            DatabaseOverflowMaxLsas = databaseOverflowMaxLsas;
            DatabaseOverflowTimeToRecover = databaseOverflowTimeToRecover;
            DefaultInformationMetric = defaultInformationMetric;
            DefaultInformationMetricType = defaultInformationMetricType;
            DefaultInformationOriginate = defaultInformationOriginate;
            DefaultInformationRouteMap = defaultInformationRouteMap;
            DefaultMetric = defaultMetric;
            Distance = distance;
            DistanceExternal = distanceExternal;
            DistanceInterArea = distanceInterArea;
            DistanceIntraArea = distanceIntraArea;
            DistributeListIn = distributeListIn;
            DistributeLists = distributeLists;
            DistributeRouteMapIn = distributeRouteMapIn;
            Id = id;
            LogNeighbourChanges = logNeighbourChanges;
            Neighbors = neighbors;
            Networks = networks;
            OspfInterfaces = ospfInterfaces;
            PassiveInterfaces = passiveInterfaces;
            Redistributes = redistributes;
            RestartMode = restartMode;
            RestartOnTopologyChange = restartOnTopologyChange;
            RestartPeriod = restartPeriod;
            Rfc1583Compatible = rfc1583Compatible;
            RouterId = routerId;
            SpfTimers = spfTimers;
            SummaryAddresses = summaryAddresses;
            Vdomparam = vdomparam;
        }
    }
}
