<reponame>pulumiverse/pulumi-fortios// *** 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>
    /// BGP neighbor table.
    /// 
    /// &gt; The provider supports the definition of Neighbor in Router Bgp `fortios.RouterBgp`, and also allows the definition of separate Neighbor resources `fortios.RouterbgpNeighbor`, but do not use a `fortios.RouterBgp` with in-line Neighbor in conjunction with any `fortios.RouterbgpNeighbor` resources, otherwise conflicts and overwrite will occur.
    /// 
    /// ## Import
    /// 
    /// Routerbgp Neighbor can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/routerbgpNeighbor:RouterbgpNeighbor labelname {{ip}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/routerbgpNeighbor:RouterbgpNeighbor labelname {{ip}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/routerbgpNeighbor:RouterbgpNeighbor")]
    public partial class RouterbgpNeighbor : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Enable/disable address family IPv4 for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("activate")]
        public Output<string> Activate { get; private set; } = null!;

        /// <summary>
        /// Enable/disable address family IPv6 for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("activate6")]
        public Output<string> Activate6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable address family VPNv4 for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("activateVpnv4")]
        public Output<string> ActivateVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv4 additional-path capability. Valid values: `send`, `receive`, `both`, `disable`.
        /// </summary>
        [Output("additionalPath")]
        public Output<string> AdditionalPath { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv6 additional-path capability. Valid values: `send`, `receive`, `both`, `disable`.
        /// </summary>
        [Output("additionalPath6")]
        public Output<string> AdditionalPath6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable VPNv4 additional-path capability. Valid values: `send`, `receive`, `both`, `disable`.
        /// </summary>
        [Output("additionalPathVpnv4")]
        public Output<string> AdditionalPathVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Number of IPv4 additional paths that can be advertised to this neighbor.
        /// </summary>
        [Output("advAdditionalPath")]
        public Output<int> AdvAdditionalPath { get; private set; } = null!;

        /// <summary>
        /// Number of IPv6 additional paths that can be advertised to this neighbor.
        /// </summary>
        [Output("advAdditionalPath6")]
        public Output<int> AdvAdditionalPath6 { get; private set; } = null!;

        /// <summary>
        /// Number of VPNv4 additional paths that can be advertised to this neighbor.
        /// </summary>
        [Output("advAdditionalPathVpnv4")]
        public Output<int> AdvAdditionalPathVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Minimum interval (sec) between sending updates.
        /// </summary>
        [Output("advertisementInterval")]
        public Output<int> AdvertisementInterval { get; private set; } = null!;

        /// <summary>
        /// IPv4 The maximum number of occurrence of my AS number allowed.
        /// </summary>
        [Output("allowasIn")]
        public Output<int> AllowasIn { get; private set; } = null!;

        /// <summary>
        /// IPv6 The maximum number of occurrence of my AS number allowed.
        /// </summary>
        [Output("allowasIn6")]
        public Output<int> AllowasIn6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv4 Enable to allow my AS in AS path. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("allowasInEnable")]
        public Output<string> AllowasInEnable { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv6 Enable to allow my AS in AS path. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("allowasInEnable6")]
        public Output<string> AllowasInEnable6 { get; private set; } = null!;

        /// <summary>
        /// The maximum number of occurrence of my AS number allowed for VPNv4 route.
        /// </summary>
        [Output("allowasInVpnv4")]
        public Output<int> AllowasInVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable replace peer AS with own AS for IPv4. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("asOverride")]
        public Output<string> AsOverride { get; private set; } = null!;

        /// <summary>
        /// Enable/disable replace peer AS with own AS for IPv6. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("asOverride6")]
        public Output<string> AsOverride6 { get; private set; } = null!;

        /// <summary>
        /// IPv4 List of attributes that should be unchanged. Valid values: `as-path`, `med`, `next-hop`.
        /// </summary>
        [Output("attributeUnchanged")]
        public Output<string> AttributeUnchanged { get; private set; } = null!;

        /// <summary>
        /// IPv6 List of attributes that should be unchanged. Valid values: `as-path`, `med`, `next-hop`.
        /// </summary>
        [Output("attributeUnchanged6")]
        public Output<string> AttributeUnchanged6 { get; private set; } = null!;

        /// <summary>
        /// List of attributes that should be unchanged for VPNv4 route. Valid values: `as-path`, `med`, `next-hop`.
        /// </summary>
        [Output("attributeUnchangedVpnv4")]
        public Output<string> AttributeUnchangedVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable BFD for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("bfd")]
        public Output<string> Bfd { get; private set; } = null!;

        /// <summary>
        /// Enable/disable advertise default IPv4 route to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("capabilityDefaultOriginate")]
        public Output<string> CapabilityDefaultOriginate { get; private set; } = null!;

        /// <summary>
        /// Enable/disable advertise default IPv6 route to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("capabilityDefaultOriginate6")]
        public Output<string> CapabilityDefaultOriginate6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable advertise dynamic capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("capabilityDynamic")]
        public Output<string> CapabilityDynamic { get; private set; } = null!;

        /// <summary>
        /// Enable/disable advertise IPv4 graceful restart capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("capabilityGracefulRestart")]
        public Output<string> CapabilityGracefulRestart { get; private set; } = null!;

        /// <summary>
        /// Enable/disable advertise IPv6 graceful restart capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("capabilityGracefulRestart6")]
        public Output<string> CapabilityGracefulRestart6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable advertise VPNv4 graceful restart capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("capabilityGracefulRestartVpnv4")]
        public Output<string> CapabilityGracefulRestartVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Accept/Send IPv4 ORF lists to/from this neighbor. Valid values: `none`, `receive`, `send`, `both`.
        /// </summary>
        [Output("capabilityOrf")]
        public Output<string> CapabilityOrf { get; private set; } = null!;

        /// <summary>
        /// Accept/Send IPv6 ORF lists to/from this neighbor. Valid values: `none`, `receive`, `send`, `both`.
        /// </summary>
        [Output("capabilityOrf6")]
        public Output<string> CapabilityOrf6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable advertise route refresh capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("capabilityRouteRefresh")]
        public Output<string> CapabilityRouteRefresh { get; private set; } = null!;

        /// <summary>
        /// IPv6 conditional advertisement. The structure of `conditional_advertise6` block is documented below.
        /// </summary>
        [Output("conditionalAdvertise6s")]
        public Output<ImmutableArray<Outputs.RouterbgpNeighborConditionalAdvertise6>> ConditionalAdvertise6s { get; private set; } = null!;

        /// <summary>
        /// Conditional advertisement. The structure of `conditional_advertise` block is documented below.
        /// </summary>
        [Output("conditionalAdvertises")]
        public Output<ImmutableArray<Outputs.RouterbgpNeighborConditionalAdvertise>> ConditionalAdvertises { get; private set; } = null!;

        /// <summary>
        /// Interval (sec) for connect timer.
        /// </summary>
        [Output("connectTimer")]
        public Output<int> ConnectTimer { get; private set; } = null!;

        /// <summary>
        /// Route map to specify criteria to originate IPv4 default.
        /// </summary>
        [Output("defaultOriginateRoutemap")]
        public Output<string> DefaultOriginateRoutemap { get; private set; } = null!;

        /// <summary>
        /// Route map to specify criteria to originate IPv6 default.
        /// </summary>
        [Output("defaultOriginateRoutemap6")]
        public Output<string> DefaultOriginateRoutemap6 { get; private set; } = null!;

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

        /// <summary>
        /// Filter for IPv4 updates from this neighbor.
        /// </summary>
        [Output("distributeListIn")]
        public Output<string> DistributeListIn { get; private set; } = null!;

        /// <summary>
        /// Filter for IPv6 updates from this neighbor.
        /// </summary>
        [Output("distributeListIn6")]
        public Output<string> DistributeListIn6 { get; private set; } = null!;

        /// <summary>
        /// Filter for VPNv4 updates from this neighbor.
        /// </summary>
        [Output("distributeListInVpnv4")]
        public Output<string> DistributeListInVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Filter for IPv4 updates to this neighbor.
        /// </summary>
        [Output("distributeListOut")]
        public Output<string> DistributeListOut { get; private set; } = null!;

        /// <summary>
        /// Filter for IPv6 updates to this neighbor.
        /// </summary>
        [Output("distributeListOut6")]
        public Output<string> DistributeListOut6 { get; private set; } = null!;

        /// <summary>
        /// Filter for VPNv4 updates to this neighbor.
        /// </summary>
        [Output("distributeListOutVpnv4")]
        public Output<string> DistributeListOutVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Don't negotiate capabilities with this neighbor Valid values: `enable`, `disable`.
        /// </summary>
        [Output("dontCapabilityNegotiate")]
        public Output<string> DontCapabilityNegotiate { 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>
        /// Enable/disable allow multi-hop EBGP neighbors. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ebgpEnforceMultihop")]
        public Output<string> EbgpEnforceMultihop { get; private set; } = null!;

        /// <summary>
        /// EBGP multihop TTL for this peer.
        /// </summary>
        [Output("ebgpMultihopTtl")]
        public Output<int> EbgpMultihopTtl { get; private set; } = null!;

        /// <summary>
        /// BGP filter for IPv4 inbound routes.
        /// </summary>
        [Output("filterListIn")]
        public Output<string> FilterListIn { get; private set; } = null!;

        /// <summary>
        /// BGP filter for IPv6 inbound routes.
        /// </summary>
        [Output("filterListIn6")]
        public Output<string> FilterListIn6 { get; private set; } = null!;

        /// <summary>
        /// BGP filter for IPv4 outbound routes.
        /// </summary>
        [Output("filterListOut")]
        public Output<string> FilterListOut { get; private set; } = null!;

        /// <summary>
        /// BGP filter for IPv6 outbound routes.
        /// </summary>
        [Output("filterListOut6")]
        public Output<string> FilterListOut6 { get; private set; } = null!;

        /// <summary>
        /// Interval (sec) before peer considered dead.
        /// </summary>
        [Output("holdtimeTimer")]
        public Output<int> HoldtimeTimer { get; private set; } = null!;

        /// <summary>
        /// Interface
        /// </summary>
        [Output("interface")]
        public Output<string> Interface { get; private set; } = null!;

        /// <summary>
        /// IP/IPv6 address of neighbor.
        /// </summary>
        [Output("ip")]
        public Output<string> Ip { get; private set; } = null!;

        /// <summary>
        /// Keep alive timer interval (sec).
        /// </summary>
        [Output("keepAliveTimer")]
        public Output<int> KeepAliveTimer { get; private set; } = null!;

        /// <summary>
        /// Enable/disable failover upon link down. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("linkDownFailover")]
        public Output<string> LinkDownFailover { get; private set; } = null!;

        /// <summary>
        /// Local AS number of neighbor.
        /// </summary>
        [Output("localAs")]
        public Output<int> LocalAs { get; private set; } = null!;

        /// <summary>
        /// Do not prepend local-as to incoming updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("localAsNoPrepend")]
        public Output<string> LocalAsNoPrepend { get; private set; } = null!;

        /// <summary>
        /// Replace real AS with local-as in outgoing updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("localAsReplaceAs")]
        public Output<string> LocalAsReplaceAs { get; private set; } = null!;

        /// <summary>
        /// Maximum number of IPv4 prefixes to accept from this peer.
        /// </summary>
        [Output("maximumPrefix")]
        public Output<int> MaximumPrefix { get; private set; } = null!;

        /// <summary>
        /// Maximum number of IPv6 prefixes to accept from this peer.
        /// </summary>
        [Output("maximumPrefix6")]
        public Output<int> MaximumPrefix6 { get; private set; } = null!;

        /// <summary>
        /// Maximum IPv4 prefix threshold value (1 - 100 percent).
        /// </summary>
        [Output("maximumPrefixThreshold")]
        public Output<int> MaximumPrefixThreshold { get; private set; } = null!;

        /// <summary>
        /// Maximum IPv6 prefix threshold value (1 - 100 percent).
        /// </summary>
        [Output("maximumPrefixThreshold6")]
        public Output<int> MaximumPrefixThreshold6 { get; private set; } = null!;

        /// <summary>
        /// Maximum VPNv4 prefix threshold value (1 - 100 percent).
        /// </summary>
        [Output("maximumPrefixThresholdVpnv4")]
        public Output<int> MaximumPrefixThresholdVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Maximum number of VPNv4 prefixes to accept from this peer.
        /// </summary>
        [Output("maximumPrefixVpnv4")]
        public Output<int> MaximumPrefixVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv4 Only give warning message when limit is exceeded. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("maximumPrefixWarningOnly")]
        public Output<string> MaximumPrefixWarningOnly { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv6 Only give warning message when limit is exceeded. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("maximumPrefixWarningOnly6")]
        public Output<string> MaximumPrefixWarningOnly6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable only giving warning message when limit is exceeded for VPNv4 routes. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("maximumPrefixWarningOnlyVpnv4")]
        public Output<string> MaximumPrefixWarningOnlyVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv4 next-hop calculation for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("nextHopSelf")]
        public Output<string> NextHopSelf { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv6 next-hop calculation for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("nextHopSelf6")]
        public Output<string> NextHopSelf6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable setting nexthop's address to interface's IPv4 address for route-reflector routes. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("nextHopSelfRr")]
        public Output<string> NextHopSelfRr { get; private set; } = null!;

        /// <summary>
        /// Enable/disable setting nexthop's address to interface's IPv6 address for route-reflector routes. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("nextHopSelfRr6")]
        public Output<string> NextHopSelfRr6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable setting VPNv4 next-hop to interface's IP address for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("nextHopSelfVpnv4")]
        public Output<string> NextHopSelfVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable override result of capability negotiation. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("overrideCapability")]
        public Output<string> OverrideCapability { get; private set; } = null!;

        /// <summary>
        /// Enable/disable sending of open messages to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("passive")]
        public Output<string> Passive { get; private set; } = null!;

        /// <summary>
        /// Password used in MD5 authentication.
        /// </summary>
        [Output("password")]
        public Output<string?> Password { get; private set; } = null!;

        /// <summary>
        /// IPv4 Inbound filter for updates from this neighbor.
        /// </summary>
        [Output("prefixListIn")]
        public Output<string> PrefixListIn { get; private set; } = null!;

        /// <summary>
        /// IPv6 Inbound filter for updates from this neighbor.
        /// </summary>
        [Output("prefixListIn6")]
        public Output<string> PrefixListIn6 { get; private set; } = null!;

        /// <summary>
        /// Inbound filter for VPNv4 updates from this neighbor.
        /// </summary>
        [Output("prefixListInVpnv4")]
        public Output<string> PrefixListInVpnv4 { get; private set; } = null!;

        /// <summary>
        /// IPv4 Outbound filter for updates to this neighbor.
        /// </summary>
        [Output("prefixListOut")]
        public Output<string> PrefixListOut { get; private set; } = null!;

        /// <summary>
        /// IPv6 Outbound filter for updates to this neighbor.
        /// </summary>
        [Output("prefixListOut6")]
        public Output<string> PrefixListOut6 { get; private set; } = null!;

        /// <summary>
        /// Outbound filter for VPNv4 updates to this neighbor.
        /// </summary>
        [Output("prefixListOutVpnv4")]
        public Output<string> PrefixListOutVpnv4 { get; private set; } = null!;

        /// <summary>
        /// AS number of neighbor.
        /// </summary>
        [Output("remoteAs")]
        public Output<int> RemoteAs { get; private set; } = null!;

        /// <summary>
        /// Enable/disable remove private AS number from IPv4 outbound updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("removePrivateAs")]
        public Output<string> RemovePrivateAs { get; private set; } = null!;

        /// <summary>
        /// Enable/disable remove private AS number from IPv6 outbound updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("removePrivateAs6")]
        public Output<string> RemovePrivateAs6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable remove private AS number from VPNv4 outbound updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("removePrivateAsVpnv4")]
        public Output<string> RemovePrivateAsVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Graceful restart delay time (sec, 0 = global default).
        /// </summary>
        [Output("restartTime")]
        public Output<int> RestartTime { get; private set; } = null!;

        /// <summary>
        /// Time to retain stale routes.
        /// </summary>
        [Output("retainStaleTime")]
        public Output<int> RetainStaleTime { get; private set; } = null!;

        /// <summary>
        /// IPv4 Inbound route map filter.
        /// </summary>
        [Output("routeMapIn")]
        public Output<string> RouteMapIn { get; private set; } = null!;

        /// <summary>
        /// IPv6 Inbound route map filter.
        /// </summary>
        [Output("routeMapIn6")]
        public Output<string> RouteMapIn6 { get; private set; } = null!;

        /// <summary>
        /// VPNv4 inbound route map filter.
        /// </summary>
        [Output("routeMapInVpnv4")]
        public Output<string> RouteMapInVpnv4 { get; private set; } = null!;

        /// <summary>
        /// IPv4 Outbound route map filter.
        /// </summary>
        [Output("routeMapOut")]
        public Output<string> RouteMapOut { get; private set; } = null!;

        /// <summary>
        /// IPv6 Outbound route map filter.
        /// </summary>
        [Output("routeMapOut6")]
        public Output<string> RouteMapOut6 { get; private set; } = null!;

        /// <summary>
        /// IPv6 outbound route map filter if the peer is preferred.
        /// </summary>
        [Output("routeMapOut6Preferable")]
        public Output<string> RouteMapOut6Preferable { get; private set; } = null!;

        /// <summary>
        /// IPv4 outbound route map filter if the peer is preferred.
        /// </summary>
        [Output("routeMapOutPreferable")]
        public Output<string> RouteMapOutPreferable { get; private set; } = null!;

        /// <summary>
        /// VPNv4 outbound route map filter.
        /// </summary>
        [Output("routeMapOutVpnv4")]
        public Output<string> RouteMapOutVpnv4 { get; private set; } = null!;

        /// <summary>
        /// VPNv4 outbound route map filter if the peer is preferred.
        /// </summary>
        [Output("routeMapOutVpnv4Preferable")]
        public Output<string> RouteMapOutVpnv4Preferable { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv4 AS route reflector client. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("routeReflectorClient")]
        public Output<string> RouteReflectorClient { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv6 AS route reflector client. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("routeReflectorClient6")]
        public Output<string> RouteReflectorClient6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable VPNv4 AS route reflector client for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("routeReflectorClientVpnv4")]
        public Output<string> RouteReflectorClientVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv4 AS route server client. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("routeServerClient")]
        public Output<string> RouteServerClient { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv6 AS route server client. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("routeServerClient6")]
        public Output<string> RouteServerClient6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable VPNv4 AS route server client for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("routeServerClientVpnv4")]
        public Output<string> RouteServerClientVpnv4 { get; private set; } = null!;

        /// <summary>
        /// IPv4 Send community attribute to neighbor. Valid values: `standard`, `extended`, `both`, `disable`.
        /// </summary>
        [Output("sendCommunity")]
        public Output<string> SendCommunity { get; private set; } = null!;

        /// <summary>
        /// IPv6 Send community attribute to neighbor. Valid values: `standard`, `extended`, `both`, `disable`.
        /// </summary>
        [Output("sendCommunity6")]
        public Output<string> SendCommunity6 { get; private set; } = null!;

        /// <summary>
        /// Send community attribute to neighbor for VPNv4 address family. Valid values: `standard`, `extended`, `both`, `disable`.
        /// </summary>
        [Output("sendCommunityVpnv4")]
        public Output<string> SendCommunityVpnv4 { get; private set; } = null!;

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

        /// <summary>
        /// Enable/disable allow IPv4 inbound soft reconfiguration. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("softReconfiguration")]
        public Output<string> SoftReconfiguration { get; private set; } = null!;

        /// <summary>
        /// Enable/disable allow IPv6 inbound soft reconfiguration. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("softReconfiguration6")]
        public Output<string> SoftReconfiguration6 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable allow VPNv4 inbound soft reconfiguration. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("softReconfigurationVpnv4")]
        public Output<string> SoftReconfigurationVpnv4 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable stale route after neighbor down. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("staleRoute")]
        public Output<string> StaleRoute { get; private set; } = null!;

        /// <summary>
        /// Enable/disable strict capability matching. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("strictCapabilityMatch")]
        public Output<string> StrictCapabilityMatch { get; private set; } = null!;

        /// <summary>
        /// IPv4 Route map to selectively unsuppress suppressed routes.
        /// </summary>
        [Output("unsuppressMap")]
        public Output<string> UnsuppressMap { get; private set; } = null!;

        /// <summary>
        /// IPv6 Route map to selectively unsuppress suppressed routes.
        /// </summary>
        [Output("unsuppressMap6")]
        public Output<string> UnsuppressMap6 { get; private set; } = null!;

        /// <summary>
        /// Interface to use as source IP/IPv6 address of TCP connections.
        /// </summary>
        [Output("updateSource")]
        public Output<string> UpdateSource { 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>
        /// Neighbor weight.
        /// </summary>
        [Output("weight")]
        public Output<int> Weight { get; private set; } = null!;


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

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

    public sealed class RouterbgpNeighborArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable address family IPv4 for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("activate")]
        public Input<string>? Activate { get; set; }

        /// <summary>
        /// Enable/disable address family IPv6 for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("activate6")]
        public Input<string>? Activate6 { get; set; }

        /// <summary>
        /// Enable/disable address family VPNv4 for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("activateVpnv4")]
        public Input<string>? ActivateVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable IPv4 additional-path capability. Valid values: `send`, `receive`, `both`, `disable`.
        /// </summary>
        [Input("additionalPath")]
        public Input<string>? AdditionalPath { get; set; }

        /// <summary>
        /// Enable/disable IPv6 additional-path capability. Valid values: `send`, `receive`, `both`, `disable`.
        /// </summary>
        [Input("additionalPath6")]
        public Input<string>? AdditionalPath6 { get; set; }

        /// <summary>
        /// Enable/disable VPNv4 additional-path capability. Valid values: `send`, `receive`, `both`, `disable`.
        /// </summary>
        [Input("additionalPathVpnv4")]
        public Input<string>? AdditionalPathVpnv4 { get; set; }

        /// <summary>
        /// Number of IPv4 additional paths that can be advertised to this neighbor.
        /// </summary>
        [Input("advAdditionalPath")]
        public Input<int>? AdvAdditionalPath { get; set; }

        /// <summary>
        /// Number of IPv6 additional paths that can be advertised to this neighbor.
        /// </summary>
        [Input("advAdditionalPath6")]
        public Input<int>? AdvAdditionalPath6 { get; set; }

        /// <summary>
        /// Number of VPNv4 additional paths that can be advertised to this neighbor.
        /// </summary>
        [Input("advAdditionalPathVpnv4")]
        public Input<int>? AdvAdditionalPathVpnv4 { get; set; }

        /// <summary>
        /// Minimum interval (sec) between sending updates.
        /// </summary>
        [Input("advertisementInterval")]
        public Input<int>? AdvertisementInterval { get; set; }

        /// <summary>
        /// IPv4 The maximum number of occurrence of my AS number allowed.
        /// </summary>
        [Input("allowasIn")]
        public Input<int>? AllowasIn { get; set; }

        /// <summary>
        /// IPv6 The maximum number of occurrence of my AS number allowed.
        /// </summary>
        [Input("allowasIn6")]
        public Input<int>? AllowasIn6 { get; set; }

        /// <summary>
        /// Enable/disable IPv4 Enable to allow my AS in AS path. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowasInEnable")]
        public Input<string>? AllowasInEnable { get; set; }

        /// <summary>
        /// Enable/disable IPv6 Enable to allow my AS in AS path. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowasInEnable6")]
        public Input<string>? AllowasInEnable6 { get; set; }

        /// <summary>
        /// The maximum number of occurrence of my AS number allowed for VPNv4 route.
        /// </summary>
        [Input("allowasInVpnv4")]
        public Input<int>? AllowasInVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable replace peer AS with own AS for IPv4. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("asOverride")]
        public Input<string>? AsOverride { get; set; }

        /// <summary>
        /// Enable/disable replace peer AS with own AS for IPv6. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("asOverride6")]
        public Input<string>? AsOverride6 { get; set; }

        /// <summary>
        /// IPv4 List of attributes that should be unchanged. Valid values: `as-path`, `med`, `next-hop`.
        /// </summary>
        [Input("attributeUnchanged")]
        public Input<string>? AttributeUnchanged { get; set; }

        /// <summary>
        /// IPv6 List of attributes that should be unchanged. Valid values: `as-path`, `med`, `next-hop`.
        /// </summary>
        [Input("attributeUnchanged6")]
        public Input<string>? AttributeUnchanged6 { get; set; }

        /// <summary>
        /// List of attributes that should be unchanged for VPNv4 route. Valid values: `as-path`, `med`, `next-hop`.
        /// </summary>
        [Input("attributeUnchangedVpnv4")]
        public Input<string>? AttributeUnchangedVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable BFD for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("bfd")]
        public Input<string>? Bfd { get; set; }

        /// <summary>
        /// Enable/disable advertise default IPv4 route to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityDefaultOriginate")]
        public Input<string>? CapabilityDefaultOriginate { get; set; }

        /// <summary>
        /// Enable/disable advertise default IPv6 route to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityDefaultOriginate6")]
        public Input<string>? CapabilityDefaultOriginate6 { get; set; }

        /// <summary>
        /// Enable/disable advertise dynamic capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityDynamic")]
        public Input<string>? CapabilityDynamic { get; set; }

        /// <summary>
        /// Enable/disable advertise IPv4 graceful restart capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityGracefulRestart")]
        public Input<string>? CapabilityGracefulRestart { get; set; }

        /// <summary>
        /// Enable/disable advertise IPv6 graceful restart capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityGracefulRestart6")]
        public Input<string>? CapabilityGracefulRestart6 { get; set; }

        /// <summary>
        /// Enable/disable advertise VPNv4 graceful restart capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityGracefulRestartVpnv4")]
        public Input<string>? CapabilityGracefulRestartVpnv4 { get; set; }

        /// <summary>
        /// Accept/Send IPv4 ORF lists to/from this neighbor. Valid values: `none`, `receive`, `send`, `both`.
        /// </summary>
        [Input("capabilityOrf")]
        public Input<string>? CapabilityOrf { get; set; }

        /// <summary>
        /// Accept/Send IPv6 ORF lists to/from this neighbor. Valid values: `none`, `receive`, `send`, `both`.
        /// </summary>
        [Input("capabilityOrf6")]
        public Input<string>? CapabilityOrf6 { get; set; }

        /// <summary>
        /// Enable/disable advertise route refresh capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityRouteRefresh")]
        public Input<string>? CapabilityRouteRefresh { get; set; }

        [Input("conditionalAdvertise6s")]
        private InputList<Inputs.RouterbgpNeighborConditionalAdvertise6Args>? _conditionalAdvertise6s;

        /// <summary>
        /// IPv6 conditional advertisement. The structure of `conditional_advertise6` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterbgpNeighborConditionalAdvertise6Args> ConditionalAdvertise6s
        {
            get => _conditionalAdvertise6s ?? (_conditionalAdvertise6s = new InputList<Inputs.RouterbgpNeighborConditionalAdvertise6Args>());
            set => _conditionalAdvertise6s = value;
        }

        [Input("conditionalAdvertises")]
        private InputList<Inputs.RouterbgpNeighborConditionalAdvertiseArgs>? _conditionalAdvertises;

        /// <summary>
        /// Conditional advertisement. The structure of `conditional_advertise` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterbgpNeighborConditionalAdvertiseArgs> ConditionalAdvertises
        {
            get => _conditionalAdvertises ?? (_conditionalAdvertises = new InputList<Inputs.RouterbgpNeighborConditionalAdvertiseArgs>());
            set => _conditionalAdvertises = value;
        }

        /// <summary>
        /// Interval (sec) for connect timer.
        /// </summary>
        [Input("connectTimer")]
        public Input<int>? ConnectTimer { get; set; }

        /// <summary>
        /// Route map to specify criteria to originate IPv4 default.
        /// </summary>
        [Input("defaultOriginateRoutemap")]
        public Input<string>? DefaultOriginateRoutemap { get; set; }

        /// <summary>
        /// Route map to specify criteria to originate IPv6 default.
        /// </summary>
        [Input("defaultOriginateRoutemap6")]
        public Input<string>? DefaultOriginateRoutemap6 { get; set; }

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

        /// <summary>
        /// Filter for IPv4 updates from this neighbor.
        /// </summary>
        [Input("distributeListIn")]
        public Input<string>? DistributeListIn { get; set; }

        /// <summary>
        /// Filter for IPv6 updates from this neighbor.
        /// </summary>
        [Input("distributeListIn6")]
        public Input<string>? DistributeListIn6 { get; set; }

        /// <summary>
        /// Filter for VPNv4 updates from this neighbor.
        /// </summary>
        [Input("distributeListInVpnv4")]
        public Input<string>? DistributeListInVpnv4 { get; set; }

        /// <summary>
        /// Filter for IPv4 updates to this neighbor.
        /// </summary>
        [Input("distributeListOut")]
        public Input<string>? DistributeListOut { get; set; }

        /// <summary>
        /// Filter for IPv6 updates to this neighbor.
        /// </summary>
        [Input("distributeListOut6")]
        public Input<string>? DistributeListOut6 { get; set; }

        /// <summary>
        /// Filter for VPNv4 updates to this neighbor.
        /// </summary>
        [Input("distributeListOutVpnv4")]
        public Input<string>? DistributeListOutVpnv4 { get; set; }

        /// <summary>
        /// Don't negotiate capabilities with this neighbor Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dontCapabilityNegotiate")]
        public Input<string>? DontCapabilityNegotiate { 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; }

        /// <summary>
        /// Enable/disable allow multi-hop EBGP neighbors. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ebgpEnforceMultihop")]
        public Input<string>? EbgpEnforceMultihop { get; set; }

        /// <summary>
        /// EBGP multihop TTL for this peer.
        /// </summary>
        [Input("ebgpMultihopTtl")]
        public Input<int>? EbgpMultihopTtl { get; set; }

        /// <summary>
        /// BGP filter for IPv4 inbound routes.
        /// </summary>
        [Input("filterListIn")]
        public Input<string>? FilterListIn { get; set; }

        /// <summary>
        /// BGP filter for IPv6 inbound routes.
        /// </summary>
        [Input("filterListIn6")]
        public Input<string>? FilterListIn6 { get; set; }

        /// <summary>
        /// BGP filter for IPv4 outbound routes.
        /// </summary>
        [Input("filterListOut")]
        public Input<string>? FilterListOut { get; set; }

        /// <summary>
        /// BGP filter for IPv6 outbound routes.
        /// </summary>
        [Input("filterListOut6")]
        public Input<string>? FilterListOut6 { get; set; }

        /// <summary>
        /// Interval (sec) before peer considered dead.
        /// </summary>
        [Input("holdtimeTimer")]
        public Input<int>? HoldtimeTimer { get; set; }

        /// <summary>
        /// Interface
        /// </summary>
        [Input("interface")]
        public Input<string>? Interface { get; set; }

        /// <summary>
        /// IP/IPv6 address of neighbor.
        /// </summary>
        [Input("ip", required: true)]
        public Input<string> Ip { get; set; } = null!;

        /// <summary>
        /// Keep alive timer interval (sec).
        /// </summary>
        [Input("keepAliveTimer")]
        public Input<int>? KeepAliveTimer { get; set; }

        /// <summary>
        /// Enable/disable failover upon link down. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("linkDownFailover")]
        public Input<string>? LinkDownFailover { get; set; }

        /// <summary>
        /// Local AS number of neighbor.
        /// </summary>
        [Input("localAs")]
        public Input<int>? LocalAs { get; set; }

        /// <summary>
        /// Do not prepend local-as to incoming updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("localAsNoPrepend")]
        public Input<string>? LocalAsNoPrepend { get; set; }

        /// <summary>
        /// Replace real AS with local-as in outgoing updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("localAsReplaceAs")]
        public Input<string>? LocalAsReplaceAs { get; set; }

        /// <summary>
        /// Maximum number of IPv4 prefixes to accept from this peer.
        /// </summary>
        [Input("maximumPrefix")]
        public Input<int>? MaximumPrefix { get; set; }

        /// <summary>
        /// Maximum number of IPv6 prefixes to accept from this peer.
        /// </summary>
        [Input("maximumPrefix6")]
        public Input<int>? MaximumPrefix6 { get; set; }

        /// <summary>
        /// Maximum IPv4 prefix threshold value (1 - 100 percent).
        /// </summary>
        [Input("maximumPrefixThreshold")]
        public Input<int>? MaximumPrefixThreshold { get; set; }

        /// <summary>
        /// Maximum IPv6 prefix threshold value (1 - 100 percent).
        /// </summary>
        [Input("maximumPrefixThreshold6")]
        public Input<int>? MaximumPrefixThreshold6 { get; set; }

        /// <summary>
        /// Maximum VPNv4 prefix threshold value (1 - 100 percent).
        /// </summary>
        [Input("maximumPrefixThresholdVpnv4")]
        public Input<int>? MaximumPrefixThresholdVpnv4 { get; set; }

        /// <summary>
        /// Maximum number of VPNv4 prefixes to accept from this peer.
        /// </summary>
        [Input("maximumPrefixVpnv4")]
        public Input<int>? MaximumPrefixVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable IPv4 Only give warning message when limit is exceeded. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("maximumPrefixWarningOnly")]
        public Input<string>? MaximumPrefixWarningOnly { get; set; }

        /// <summary>
        /// Enable/disable IPv6 Only give warning message when limit is exceeded. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("maximumPrefixWarningOnly6")]
        public Input<string>? MaximumPrefixWarningOnly6 { get; set; }

        /// <summary>
        /// Enable/disable only giving warning message when limit is exceeded for VPNv4 routes. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("maximumPrefixWarningOnlyVpnv4")]
        public Input<string>? MaximumPrefixWarningOnlyVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable IPv4 next-hop calculation for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("nextHopSelf")]
        public Input<string>? NextHopSelf { get; set; }

        /// <summary>
        /// Enable/disable IPv6 next-hop calculation for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("nextHopSelf6")]
        public Input<string>? NextHopSelf6 { get; set; }

        /// <summary>
        /// Enable/disable setting nexthop's address to interface's IPv4 address for route-reflector routes. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("nextHopSelfRr")]
        public Input<string>? NextHopSelfRr { get; set; }

        /// <summary>
        /// Enable/disable setting nexthop's address to interface's IPv6 address for route-reflector routes. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("nextHopSelfRr6")]
        public Input<string>? NextHopSelfRr6 { get; set; }

        /// <summary>
        /// Enable/disable setting VPNv4 next-hop to interface's IP address for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("nextHopSelfVpnv4")]
        public Input<string>? NextHopSelfVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable override result of capability negotiation. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("overrideCapability")]
        public Input<string>? OverrideCapability { get; set; }

        /// <summary>
        /// Enable/disable sending of open messages to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("passive")]
        public Input<string>? Passive { get; set; }

        [Input("password")]
        private Input<string>? _password;

        /// <summary>
        /// Password used in MD5 authentication.
        /// </summary>
        public Input<string>? Password
        {
            get => _password;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// IPv4 Inbound filter for updates from this neighbor.
        /// </summary>
        [Input("prefixListIn")]
        public Input<string>? PrefixListIn { get; set; }

        /// <summary>
        /// IPv6 Inbound filter for updates from this neighbor.
        /// </summary>
        [Input("prefixListIn6")]
        public Input<string>? PrefixListIn6 { get; set; }

        /// <summary>
        /// Inbound filter for VPNv4 updates from this neighbor.
        /// </summary>
        [Input("prefixListInVpnv4")]
        public Input<string>? PrefixListInVpnv4 { get; set; }

        /// <summary>
        /// IPv4 Outbound filter for updates to this neighbor.
        /// </summary>
        [Input("prefixListOut")]
        public Input<string>? PrefixListOut { get; set; }

        /// <summary>
        /// IPv6 Outbound filter for updates to this neighbor.
        /// </summary>
        [Input("prefixListOut6")]
        public Input<string>? PrefixListOut6 { get; set; }

        /// <summary>
        /// Outbound filter for VPNv4 updates to this neighbor.
        /// </summary>
        [Input("prefixListOutVpnv4")]
        public Input<string>? PrefixListOutVpnv4 { get; set; }

        /// <summary>
        /// AS number of neighbor.
        /// </summary>
        [Input("remoteAs")]
        public Input<int>? RemoteAs { get; set; }

        /// <summary>
        /// Enable/disable remove private AS number from IPv4 outbound updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("removePrivateAs")]
        public Input<string>? RemovePrivateAs { get; set; }

        /// <summary>
        /// Enable/disable remove private AS number from IPv6 outbound updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("removePrivateAs6")]
        public Input<string>? RemovePrivateAs6 { get; set; }

        /// <summary>
        /// Enable/disable remove private AS number from VPNv4 outbound updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("removePrivateAsVpnv4")]
        public Input<string>? RemovePrivateAsVpnv4 { get; set; }

        /// <summary>
        /// Graceful restart delay time (sec, 0 = global default).
        /// </summary>
        [Input("restartTime")]
        public Input<int>? RestartTime { get; set; }

        /// <summary>
        /// Time to retain stale routes.
        /// </summary>
        [Input("retainStaleTime")]
        public Input<int>? RetainStaleTime { get; set; }

        /// <summary>
        /// IPv4 Inbound route map filter.
        /// </summary>
        [Input("routeMapIn")]
        public Input<string>? RouteMapIn { get; set; }

        /// <summary>
        /// IPv6 Inbound route map filter.
        /// </summary>
        [Input("routeMapIn6")]
        public Input<string>? RouteMapIn6 { get; set; }

        /// <summary>
        /// VPNv4 inbound route map filter.
        /// </summary>
        [Input("routeMapInVpnv4")]
        public Input<string>? RouteMapInVpnv4 { get; set; }

        /// <summary>
        /// IPv4 Outbound route map filter.
        /// </summary>
        [Input("routeMapOut")]
        public Input<string>? RouteMapOut { get; set; }

        /// <summary>
        /// IPv6 Outbound route map filter.
        /// </summary>
        [Input("routeMapOut6")]
        public Input<string>? RouteMapOut6 { get; set; }

        /// <summary>
        /// IPv6 outbound route map filter if the peer is preferred.
        /// </summary>
        [Input("routeMapOut6Preferable")]
        public Input<string>? RouteMapOut6Preferable { get; set; }

        /// <summary>
        /// IPv4 outbound route map filter if the peer is preferred.
        /// </summary>
        [Input("routeMapOutPreferable")]
        public Input<string>? RouteMapOutPreferable { get; set; }

        /// <summary>
        /// VPNv4 outbound route map filter.
        /// </summary>
        [Input("routeMapOutVpnv4")]
        public Input<string>? RouteMapOutVpnv4 { get; set; }

        /// <summary>
        /// VPNv4 outbound route map filter if the peer is preferred.
        /// </summary>
        [Input("routeMapOutVpnv4Preferable")]
        public Input<string>? RouteMapOutVpnv4Preferable { get; set; }

        /// <summary>
        /// Enable/disable IPv4 AS route reflector client. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("routeReflectorClient")]
        public Input<string>? RouteReflectorClient { get; set; }

        /// <summary>
        /// Enable/disable IPv6 AS route reflector client. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("routeReflectorClient6")]
        public Input<string>? RouteReflectorClient6 { get; set; }

        /// <summary>
        /// Enable/disable VPNv4 AS route reflector client for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("routeReflectorClientVpnv4")]
        public Input<string>? RouteReflectorClientVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable IPv4 AS route server client. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("routeServerClient")]
        public Input<string>? RouteServerClient { get; set; }

        /// <summary>
        /// Enable/disable IPv6 AS route server client. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("routeServerClient6")]
        public Input<string>? RouteServerClient6 { get; set; }

        /// <summary>
        /// Enable/disable VPNv4 AS route server client for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("routeServerClientVpnv4")]
        public Input<string>? RouteServerClientVpnv4 { get; set; }

        /// <summary>
        /// IPv4 Send community attribute to neighbor. Valid values: `standard`, `extended`, `both`, `disable`.
        /// </summary>
        [Input("sendCommunity")]
        public Input<string>? SendCommunity { get; set; }

        /// <summary>
        /// IPv6 Send community attribute to neighbor. Valid values: `standard`, `extended`, `both`, `disable`.
        /// </summary>
        [Input("sendCommunity6")]
        public Input<string>? SendCommunity6 { get; set; }

        /// <summary>
        /// Send community attribute to neighbor for VPNv4 address family. Valid values: `standard`, `extended`, `both`, `disable`.
        /// </summary>
        [Input("sendCommunityVpnv4")]
        public Input<string>? SendCommunityVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable shutdown this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("shutdown")]
        public Input<string>? Shutdown { get; set; }

        /// <summary>
        /// Enable/disable allow IPv4 inbound soft reconfiguration. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("softReconfiguration")]
        public Input<string>? SoftReconfiguration { get; set; }

        /// <summary>
        /// Enable/disable allow IPv6 inbound soft reconfiguration. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("softReconfiguration6")]
        public Input<string>? SoftReconfiguration6 { get; set; }

        /// <summary>
        /// Enable/disable allow VPNv4 inbound soft reconfiguration. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("softReconfigurationVpnv4")]
        public Input<string>? SoftReconfigurationVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable stale route after neighbor down. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("staleRoute")]
        public Input<string>? StaleRoute { get; set; }

        /// <summary>
        /// Enable/disable strict capability matching. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("strictCapabilityMatch")]
        public Input<string>? StrictCapabilityMatch { get; set; }

        /// <summary>
        /// IPv4 Route map to selectively unsuppress suppressed routes.
        /// </summary>
        [Input("unsuppressMap")]
        public Input<string>? UnsuppressMap { get; set; }

        /// <summary>
        /// IPv6 Route map to selectively unsuppress suppressed routes.
        /// </summary>
        [Input("unsuppressMap6")]
        public Input<string>? UnsuppressMap6 { get; set; }

        /// <summary>
        /// Interface to use as source IP/IPv6 address of TCP connections.
        /// </summary>
        [Input("updateSource")]
        public Input<string>? UpdateSource { 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>
        /// Neighbor weight.
        /// </summary>
        [Input("weight")]
        public Input<int>? Weight { get; set; }

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

    public sealed class RouterbgpNeighborState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable address family IPv4 for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("activate")]
        public Input<string>? Activate { get; set; }

        /// <summary>
        /// Enable/disable address family IPv6 for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("activate6")]
        public Input<string>? Activate6 { get; set; }

        /// <summary>
        /// Enable/disable address family VPNv4 for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("activateVpnv4")]
        public Input<string>? ActivateVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable IPv4 additional-path capability. Valid values: `send`, `receive`, `both`, `disable`.
        /// </summary>
        [Input("additionalPath")]
        public Input<string>? AdditionalPath { get; set; }

        /// <summary>
        /// Enable/disable IPv6 additional-path capability. Valid values: `send`, `receive`, `both`, `disable`.
        /// </summary>
        [Input("additionalPath6")]
        public Input<string>? AdditionalPath6 { get; set; }

        /// <summary>
        /// Enable/disable VPNv4 additional-path capability. Valid values: `send`, `receive`, `both`, `disable`.
        /// </summary>
        [Input("additionalPathVpnv4")]
        public Input<string>? AdditionalPathVpnv4 { get; set; }

        /// <summary>
        /// Number of IPv4 additional paths that can be advertised to this neighbor.
        /// </summary>
        [Input("advAdditionalPath")]
        public Input<int>? AdvAdditionalPath { get; set; }

        /// <summary>
        /// Number of IPv6 additional paths that can be advertised to this neighbor.
        /// </summary>
        [Input("advAdditionalPath6")]
        public Input<int>? AdvAdditionalPath6 { get; set; }

        /// <summary>
        /// Number of VPNv4 additional paths that can be advertised to this neighbor.
        /// </summary>
        [Input("advAdditionalPathVpnv4")]
        public Input<int>? AdvAdditionalPathVpnv4 { get; set; }

        /// <summary>
        /// Minimum interval (sec) between sending updates.
        /// </summary>
        [Input("advertisementInterval")]
        public Input<int>? AdvertisementInterval { get; set; }

        /// <summary>
        /// IPv4 The maximum number of occurrence of my AS number allowed.
        /// </summary>
        [Input("allowasIn")]
        public Input<int>? AllowasIn { get; set; }

        /// <summary>
        /// IPv6 The maximum number of occurrence of my AS number allowed.
        /// </summary>
        [Input("allowasIn6")]
        public Input<int>? AllowasIn6 { get; set; }

        /// <summary>
        /// Enable/disable IPv4 Enable to allow my AS in AS path. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowasInEnable")]
        public Input<string>? AllowasInEnable { get; set; }

        /// <summary>
        /// Enable/disable IPv6 Enable to allow my AS in AS path. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowasInEnable6")]
        public Input<string>? AllowasInEnable6 { get; set; }

        /// <summary>
        /// The maximum number of occurrence of my AS number allowed for VPNv4 route.
        /// </summary>
        [Input("allowasInVpnv4")]
        public Input<int>? AllowasInVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable replace peer AS with own AS for IPv4. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("asOverride")]
        public Input<string>? AsOverride { get; set; }

        /// <summary>
        /// Enable/disable replace peer AS with own AS for IPv6. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("asOverride6")]
        public Input<string>? AsOverride6 { get; set; }

        /// <summary>
        /// IPv4 List of attributes that should be unchanged. Valid values: `as-path`, `med`, `next-hop`.
        /// </summary>
        [Input("attributeUnchanged")]
        public Input<string>? AttributeUnchanged { get; set; }

        /// <summary>
        /// IPv6 List of attributes that should be unchanged. Valid values: `as-path`, `med`, `next-hop`.
        /// </summary>
        [Input("attributeUnchanged6")]
        public Input<string>? AttributeUnchanged6 { get; set; }

        /// <summary>
        /// List of attributes that should be unchanged for VPNv4 route. Valid values: `as-path`, `med`, `next-hop`.
        /// </summary>
        [Input("attributeUnchangedVpnv4")]
        public Input<string>? AttributeUnchangedVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable BFD for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("bfd")]
        public Input<string>? Bfd { get; set; }

        /// <summary>
        /// Enable/disable advertise default IPv4 route to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityDefaultOriginate")]
        public Input<string>? CapabilityDefaultOriginate { get; set; }

        /// <summary>
        /// Enable/disable advertise default IPv6 route to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityDefaultOriginate6")]
        public Input<string>? CapabilityDefaultOriginate6 { get; set; }

        /// <summary>
        /// Enable/disable advertise dynamic capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityDynamic")]
        public Input<string>? CapabilityDynamic { get; set; }

        /// <summary>
        /// Enable/disable advertise IPv4 graceful restart capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityGracefulRestart")]
        public Input<string>? CapabilityGracefulRestart { get; set; }

        /// <summary>
        /// Enable/disable advertise IPv6 graceful restart capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityGracefulRestart6")]
        public Input<string>? CapabilityGracefulRestart6 { get; set; }

        /// <summary>
        /// Enable/disable advertise VPNv4 graceful restart capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityGracefulRestartVpnv4")]
        public Input<string>? CapabilityGracefulRestartVpnv4 { get; set; }

        /// <summary>
        /// Accept/Send IPv4 ORF lists to/from this neighbor. Valid values: `none`, `receive`, `send`, `both`.
        /// </summary>
        [Input("capabilityOrf")]
        public Input<string>? CapabilityOrf { get; set; }

        /// <summary>
        /// Accept/Send IPv6 ORF lists to/from this neighbor. Valid values: `none`, `receive`, `send`, `both`.
        /// </summary>
        [Input("capabilityOrf6")]
        public Input<string>? CapabilityOrf6 { get; set; }

        /// <summary>
        /// Enable/disable advertise route refresh capability to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("capabilityRouteRefresh")]
        public Input<string>? CapabilityRouteRefresh { get; set; }

        [Input("conditionalAdvertise6s")]
        private InputList<Inputs.RouterbgpNeighborConditionalAdvertise6GetArgs>? _conditionalAdvertise6s;

        /// <summary>
        /// IPv6 conditional advertisement. The structure of `conditional_advertise6` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterbgpNeighborConditionalAdvertise6GetArgs> ConditionalAdvertise6s
        {
            get => _conditionalAdvertise6s ?? (_conditionalAdvertise6s = new InputList<Inputs.RouterbgpNeighborConditionalAdvertise6GetArgs>());
            set => _conditionalAdvertise6s = value;
        }

        [Input("conditionalAdvertises")]
        private InputList<Inputs.RouterbgpNeighborConditionalAdvertiseGetArgs>? _conditionalAdvertises;

        /// <summary>
        /// Conditional advertisement. The structure of `conditional_advertise` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterbgpNeighborConditionalAdvertiseGetArgs> ConditionalAdvertises
        {
            get => _conditionalAdvertises ?? (_conditionalAdvertises = new InputList<Inputs.RouterbgpNeighborConditionalAdvertiseGetArgs>());
            set => _conditionalAdvertises = value;
        }

        /// <summary>
        /// Interval (sec) for connect timer.
        /// </summary>
        [Input("connectTimer")]
        public Input<int>? ConnectTimer { get; set; }

        /// <summary>
        /// Route map to specify criteria to originate IPv4 default.
        /// </summary>
        [Input("defaultOriginateRoutemap")]
        public Input<string>? DefaultOriginateRoutemap { get; set; }

        /// <summary>
        /// Route map to specify criteria to originate IPv6 default.
        /// </summary>
        [Input("defaultOriginateRoutemap6")]
        public Input<string>? DefaultOriginateRoutemap6 { get; set; }

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

        /// <summary>
        /// Filter for IPv4 updates from this neighbor.
        /// </summary>
        [Input("distributeListIn")]
        public Input<string>? DistributeListIn { get; set; }

        /// <summary>
        /// Filter for IPv6 updates from this neighbor.
        /// </summary>
        [Input("distributeListIn6")]
        public Input<string>? DistributeListIn6 { get; set; }

        /// <summary>
        /// Filter for VPNv4 updates from this neighbor.
        /// </summary>
        [Input("distributeListInVpnv4")]
        public Input<string>? DistributeListInVpnv4 { get; set; }

        /// <summary>
        /// Filter for IPv4 updates to this neighbor.
        /// </summary>
        [Input("distributeListOut")]
        public Input<string>? DistributeListOut { get; set; }

        /// <summary>
        /// Filter for IPv6 updates to this neighbor.
        /// </summary>
        [Input("distributeListOut6")]
        public Input<string>? DistributeListOut6 { get; set; }

        /// <summary>
        /// Filter for VPNv4 updates to this neighbor.
        /// </summary>
        [Input("distributeListOutVpnv4")]
        public Input<string>? DistributeListOutVpnv4 { get; set; }

        /// <summary>
        /// Don't negotiate capabilities with this neighbor Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dontCapabilityNegotiate")]
        public Input<string>? DontCapabilityNegotiate { 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; }

        /// <summary>
        /// Enable/disable allow multi-hop EBGP neighbors. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ebgpEnforceMultihop")]
        public Input<string>? EbgpEnforceMultihop { get; set; }

        /// <summary>
        /// EBGP multihop TTL for this peer.
        /// </summary>
        [Input("ebgpMultihopTtl")]
        public Input<int>? EbgpMultihopTtl { get; set; }

        /// <summary>
        /// BGP filter for IPv4 inbound routes.
        /// </summary>
        [Input("filterListIn")]
        public Input<string>? FilterListIn { get; set; }

        /// <summary>
        /// BGP filter for IPv6 inbound routes.
        /// </summary>
        [Input("filterListIn6")]
        public Input<string>? FilterListIn6 { get; set; }

        /// <summary>
        /// BGP filter for IPv4 outbound routes.
        /// </summary>
        [Input("filterListOut")]
        public Input<string>? FilterListOut { get; set; }

        /// <summary>
        /// BGP filter for IPv6 outbound routes.
        /// </summary>
        [Input("filterListOut6")]
        public Input<string>? FilterListOut6 { get; set; }

        /// <summary>
        /// Interval (sec) before peer considered dead.
        /// </summary>
        [Input("holdtimeTimer")]
        public Input<int>? HoldtimeTimer { get; set; }

        /// <summary>
        /// Interface
        /// </summary>
        [Input("interface")]
        public Input<string>? Interface { get; set; }

        /// <summary>
        /// IP/IPv6 address of neighbor.
        /// </summary>
        [Input("ip")]
        public Input<string>? Ip { get; set; }

        /// <summary>
        /// Keep alive timer interval (sec).
        /// </summary>
        [Input("keepAliveTimer")]
        public Input<int>? KeepAliveTimer { get; set; }

        /// <summary>
        /// Enable/disable failover upon link down. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("linkDownFailover")]
        public Input<string>? LinkDownFailover { get; set; }

        /// <summary>
        /// Local AS number of neighbor.
        /// </summary>
        [Input("localAs")]
        public Input<int>? LocalAs { get; set; }

        /// <summary>
        /// Do not prepend local-as to incoming updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("localAsNoPrepend")]
        public Input<string>? LocalAsNoPrepend { get; set; }

        /// <summary>
        /// Replace real AS with local-as in outgoing updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("localAsReplaceAs")]
        public Input<string>? LocalAsReplaceAs { get; set; }

        /// <summary>
        /// Maximum number of IPv4 prefixes to accept from this peer.
        /// </summary>
        [Input("maximumPrefix")]
        public Input<int>? MaximumPrefix { get; set; }

        /// <summary>
        /// Maximum number of IPv6 prefixes to accept from this peer.
        /// </summary>
        [Input("maximumPrefix6")]
        public Input<int>? MaximumPrefix6 { get; set; }

        /// <summary>
        /// Maximum IPv4 prefix threshold value (1 - 100 percent).
        /// </summary>
        [Input("maximumPrefixThreshold")]
        public Input<int>? MaximumPrefixThreshold { get; set; }

        /// <summary>
        /// Maximum IPv6 prefix threshold value (1 - 100 percent).
        /// </summary>
        [Input("maximumPrefixThreshold6")]
        public Input<int>? MaximumPrefixThreshold6 { get; set; }

        /// <summary>
        /// Maximum VPNv4 prefix threshold value (1 - 100 percent).
        /// </summary>
        [Input("maximumPrefixThresholdVpnv4")]
        public Input<int>? MaximumPrefixThresholdVpnv4 { get; set; }

        /// <summary>
        /// Maximum number of VPNv4 prefixes to accept from this peer.
        /// </summary>
        [Input("maximumPrefixVpnv4")]
        public Input<int>? MaximumPrefixVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable IPv4 Only give warning message when limit is exceeded. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("maximumPrefixWarningOnly")]
        public Input<string>? MaximumPrefixWarningOnly { get; set; }

        /// <summary>
        /// Enable/disable IPv6 Only give warning message when limit is exceeded. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("maximumPrefixWarningOnly6")]
        public Input<string>? MaximumPrefixWarningOnly6 { get; set; }

        /// <summary>
        /// Enable/disable only giving warning message when limit is exceeded for VPNv4 routes. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("maximumPrefixWarningOnlyVpnv4")]
        public Input<string>? MaximumPrefixWarningOnlyVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable IPv4 next-hop calculation for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("nextHopSelf")]
        public Input<string>? NextHopSelf { get; set; }

        /// <summary>
        /// Enable/disable IPv6 next-hop calculation for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("nextHopSelf6")]
        public Input<string>? NextHopSelf6 { get; set; }

        /// <summary>
        /// Enable/disable setting nexthop's address to interface's IPv4 address for route-reflector routes. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("nextHopSelfRr")]
        public Input<string>? NextHopSelfRr { get; set; }

        /// <summary>
        /// Enable/disable setting nexthop's address to interface's IPv6 address for route-reflector routes. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("nextHopSelfRr6")]
        public Input<string>? NextHopSelfRr6 { get; set; }

        /// <summary>
        /// Enable/disable setting VPNv4 next-hop to interface's IP address for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("nextHopSelfVpnv4")]
        public Input<string>? NextHopSelfVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable override result of capability negotiation. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("overrideCapability")]
        public Input<string>? OverrideCapability { get; set; }

        /// <summary>
        /// Enable/disable sending of open messages to this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("passive")]
        public Input<string>? Passive { get; set; }

        [Input("password")]
        private Input<string>? _password;

        /// <summary>
        /// Password used in MD5 authentication.
        /// </summary>
        public Input<string>? Password
        {
            get => _password;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// IPv4 Inbound filter for updates from this neighbor.
        /// </summary>
        [Input("prefixListIn")]
        public Input<string>? PrefixListIn { get; set; }

        /// <summary>
        /// IPv6 Inbound filter for updates from this neighbor.
        /// </summary>
        [Input("prefixListIn6")]
        public Input<string>? PrefixListIn6 { get; set; }

        /// <summary>
        /// Inbound filter for VPNv4 updates from this neighbor.
        /// </summary>
        [Input("prefixListInVpnv4")]
        public Input<string>? PrefixListInVpnv4 { get; set; }

        /// <summary>
        /// IPv4 Outbound filter for updates to this neighbor.
        /// </summary>
        [Input("prefixListOut")]
        public Input<string>? PrefixListOut { get; set; }

        /// <summary>
        /// IPv6 Outbound filter for updates to this neighbor.
        /// </summary>
        [Input("prefixListOut6")]
        public Input<string>? PrefixListOut6 { get; set; }

        /// <summary>
        /// Outbound filter for VPNv4 updates to this neighbor.
        /// </summary>
        [Input("prefixListOutVpnv4")]
        public Input<string>? PrefixListOutVpnv4 { get; set; }

        /// <summary>
        /// AS number of neighbor.
        /// </summary>
        [Input("remoteAs")]
        public Input<int>? RemoteAs { get; set; }

        /// <summary>
        /// Enable/disable remove private AS number from IPv4 outbound updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("removePrivateAs")]
        public Input<string>? RemovePrivateAs { get; set; }

        /// <summary>
        /// Enable/disable remove private AS number from IPv6 outbound updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("removePrivateAs6")]
        public Input<string>? RemovePrivateAs6 { get; set; }

        /// <summary>
        /// Enable/disable remove private AS number from VPNv4 outbound updates. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("removePrivateAsVpnv4")]
        public Input<string>? RemovePrivateAsVpnv4 { get; set; }

        /// <summary>
        /// Graceful restart delay time (sec, 0 = global default).
        /// </summary>
        [Input("restartTime")]
        public Input<int>? RestartTime { get; set; }

        /// <summary>
        /// Time to retain stale routes.
        /// </summary>
        [Input("retainStaleTime")]
        public Input<int>? RetainStaleTime { get; set; }

        /// <summary>
        /// IPv4 Inbound route map filter.
        /// </summary>
        [Input("routeMapIn")]
        public Input<string>? RouteMapIn { get; set; }

        /// <summary>
        /// IPv6 Inbound route map filter.
        /// </summary>
        [Input("routeMapIn6")]
        public Input<string>? RouteMapIn6 { get; set; }

        /// <summary>
        /// VPNv4 inbound route map filter.
        /// </summary>
        [Input("routeMapInVpnv4")]
        public Input<string>? RouteMapInVpnv4 { get; set; }

        /// <summary>
        /// IPv4 Outbound route map filter.
        /// </summary>
        [Input("routeMapOut")]
        public Input<string>? RouteMapOut { get; set; }

        /// <summary>
        /// IPv6 Outbound route map filter.
        /// </summary>
        [Input("routeMapOut6")]
        public Input<string>? RouteMapOut6 { get; set; }

        /// <summary>
        /// IPv6 outbound route map filter if the peer is preferred.
        /// </summary>
        [Input("routeMapOut6Preferable")]
        public Input<string>? RouteMapOut6Preferable { get; set; }

        /// <summary>
        /// IPv4 outbound route map filter if the peer is preferred.
        /// </summary>
        [Input("routeMapOutPreferable")]
        public Input<string>? RouteMapOutPreferable { get; set; }

        /// <summary>
        /// VPNv4 outbound route map filter.
        /// </summary>
        [Input("routeMapOutVpnv4")]
        public Input<string>? RouteMapOutVpnv4 { get; set; }

        /// <summary>
        /// VPNv4 outbound route map filter if the peer is preferred.
        /// </summary>
        [Input("routeMapOutVpnv4Preferable")]
        public Input<string>? RouteMapOutVpnv4Preferable { get; set; }

        /// <summary>
        /// Enable/disable IPv4 AS route reflector client. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("routeReflectorClient")]
        public Input<string>? RouteReflectorClient { get; set; }

        /// <summary>
        /// Enable/disable IPv6 AS route reflector client. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("routeReflectorClient6")]
        public Input<string>? RouteReflectorClient6 { get; set; }

        /// <summary>
        /// Enable/disable VPNv4 AS route reflector client for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("routeReflectorClientVpnv4")]
        public Input<string>? RouteReflectorClientVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable IPv4 AS route server client. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("routeServerClient")]
        public Input<string>? RouteServerClient { get; set; }

        /// <summary>
        /// Enable/disable IPv6 AS route server client. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("routeServerClient6")]
        public Input<string>? RouteServerClient6 { get; set; }

        /// <summary>
        /// Enable/disable VPNv4 AS route server client for this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("routeServerClientVpnv4")]
        public Input<string>? RouteServerClientVpnv4 { get; set; }

        /// <summary>
        /// IPv4 Send community attribute to neighbor. Valid values: `standard`, `extended`, `both`, `disable`.
        /// </summary>
        [Input("sendCommunity")]
        public Input<string>? SendCommunity { get; set; }

        /// <summary>
        /// IPv6 Send community attribute to neighbor. Valid values: `standard`, `extended`, `both`, `disable`.
        /// </summary>
        [Input("sendCommunity6")]
        public Input<string>? SendCommunity6 { get; set; }

        /// <summary>
        /// Send community attribute to neighbor for VPNv4 address family. Valid values: `standard`, `extended`, `both`, `disable`.
        /// </summary>
        [Input("sendCommunityVpnv4")]
        public Input<string>? SendCommunityVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable shutdown this neighbor. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("shutdown")]
        public Input<string>? Shutdown { get; set; }

        /// <summary>
        /// Enable/disable allow IPv4 inbound soft reconfiguration. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("softReconfiguration")]
        public Input<string>? SoftReconfiguration { get; set; }

        /// <summary>
        /// Enable/disable allow IPv6 inbound soft reconfiguration. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("softReconfiguration6")]
        public Input<string>? SoftReconfiguration6 { get; set; }

        /// <summary>
        /// Enable/disable allow VPNv4 inbound soft reconfiguration. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("softReconfigurationVpnv4")]
        public Input<string>? SoftReconfigurationVpnv4 { get; set; }

        /// <summary>
        /// Enable/disable stale route after neighbor down. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("staleRoute")]
        public Input<string>? StaleRoute { get; set; }

        /// <summary>
        /// Enable/disable strict capability matching. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("strictCapabilityMatch")]
        public Input<string>? StrictCapabilityMatch { get; set; }

        /// <summary>
        /// IPv4 Route map to selectively unsuppress suppressed routes.
        /// </summary>
        [Input("unsuppressMap")]
        public Input<string>? UnsuppressMap { get; set; }

        /// <summary>
        /// IPv6 Route map to selectively unsuppress suppressed routes.
        /// </summary>
        [Input("unsuppressMap6")]
        public Input<string>? UnsuppressMap6 { get; set; }

        /// <summary>
        /// Interface to use as source IP/IPv6 address of TCP connections.
        /// </summary>
        [Input("updateSource")]
        public Input<string>? UpdateSource { 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>
        /// Neighbor weight.
        /// </summary>
        [Input("weight")]
        public Input<int>? Weight { get; set; }

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