// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;
using Pulumi;

namespace Pulumiverse.Fortios.Inputs
{

    public sealed class RouterRoutemapRuleArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Action. Valid values: `permit`, `deny`.
        /// </summary>
        [Input("action")]
        public Input<string>? Action { get; set; }

        /// <summary>
        /// Rule ID.
        /// </summary>
        [Input("id")]
        public Input<int>? Id { get; set; }

        /// <summary>
        /// Match BGP AS path list.
        /// </summary>
        [Input("matchAsPath")]
        public Input<string>? MatchAsPath { get; set; }

        /// <summary>
        /// Match BGP community list.
        /// </summary>
        [Input("matchCommunity")]
        public Input<string>? MatchCommunity { get; set; }

        /// <summary>
        /// Enable/disable exact matching of communities. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("matchCommunityExact")]
        public Input<string>? MatchCommunityExact { get; set; }

        /// <summary>
        /// BGP flag value to match (0 - 65535)
        /// </summary>
        [Input("matchFlags")]
        public Input<int>? MatchFlags { get; set; }

        /// <summary>
        /// Match interface configuration.
        /// </summary>
        [Input("matchInterface")]
        public Input<string>? MatchInterface { get; set; }

        /// <summary>
        /// Match IPv6 address permitted by access-list6 or prefix-list6.
        /// </summary>
        [Input("matchIp6Address")]
        public Input<string>? MatchIp6Address { get; set; }

        /// <summary>
        /// Match next hop IPv6 address passed by access-list6 or prefix-list6.
        /// </summary>
        [Input("matchIp6Nexthop")]
        public Input<string>? MatchIp6Nexthop { get; set; }

        /// <summary>
        /// Match IP address permitted by access-list or prefix-list.
        /// </summary>
        [Input("matchIpAddress")]
        public Input<string>? MatchIpAddress { get; set; }

        /// <summary>
        /// Match next hop IP address passed by access-list or prefix-list.
        /// </summary>
        [Input("matchIpNexthop")]
        public Input<string>? MatchIpNexthop { get; set; }

        /// <summary>
        /// Match metric for redistribute routes.
        /// </summary>
        [Input("matchMetric")]
        public Input<int>? MatchMetric { get; set; }

        /// <summary>
        /// Match BGP origin code. Valid values: `none`, `egp`, `igp`, `incomplete`.
        /// </summary>
        [Input("matchOrigin")]
        public Input<string>? MatchOrigin { get; set; }

        /// <summary>
        /// Match route type.
        /// </summary>
        [Input("matchRouteType")]
        public Input<string>? MatchRouteType { get; set; }

        /// <summary>
        /// Match tag.
        /// </summary>
        [Input("matchTag")]
        public Input<int>? MatchTag { get; set; }

        /// <summary>
        /// Match VRF ID.
        /// </summary>
        [Input("matchVrf")]
        public Input<int>? MatchVrf { get; set; }

        /// <summary>
        /// BGP aggregator AS.
        /// </summary>
        [Input("setAggregatorAs")]
        public Input<int>? SetAggregatorAs { get; set; }

        /// <summary>
        /// BGP aggregator IP.
        /// </summary>
        [Input("setAggregatorIp")]
        public Input<string>? SetAggregatorIp { get; set; }

        /// <summary>
        /// Specify preferred action of set-aspath. Valid values: `prepend`, `replace`.
        /// </summary>
        [Input("setAspathAction")]
        public Input<string>? SetAspathAction { get; set; }

        [Input("setAspaths")]
        private InputList<Inputs.RouterRoutemapRuleSetAspathArgs>? _setAspaths;

        /// <summary>
        /// Prepend BGP AS path attribute. The structure of `set_aspath` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterRoutemapRuleSetAspathArgs> SetAspaths
        {
            get => _setAspaths ?? (_setAspaths = new InputList<Inputs.RouterRoutemapRuleSetAspathArgs>());
            set => _setAspaths = value;
        }

        /// <summary>
        /// Enable/disable BGP atomic aggregate attribute. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("setAtomicAggregate")]
        public Input<string>? SetAtomicAggregate { get; set; }

        [Input("setCommunities")]
        private InputList<Inputs.RouterRoutemapRuleSetCommunityArgs>? _setCommunities;

        /// <summary>
        /// BGP community attribute. The structure of `set_community` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterRoutemapRuleSetCommunityArgs> SetCommunities
        {
            get => _setCommunities ?? (_setCommunities = new InputList<Inputs.RouterRoutemapRuleSetCommunityArgs>());
            set => _setCommunities = value;
        }

        /// <summary>
        /// Enable/disable adding set-community to existing community. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("setCommunityAdditive")]
        public Input<string>? SetCommunityAdditive { get; set; }

        /// <summary>
        /// Delete communities matching community list.
        /// </summary>
        [Input("setCommunityDelete")]
        public Input<string>? SetCommunityDelete { get; set; }

        /// <summary>
        /// Maximum duration to suppress a route (1 - 255 min, 0 = unset).
        /// </summary>
        [Input("setDampeningMaxSuppress")]
        public Input<int>? SetDampeningMaxSuppress { get; set; }

        /// <summary>
        /// Reachability half-life time for the penalty (1 - 45 min, 0 = unset).
        /// </summary>
        [Input("setDampeningReachabilityHalfLife")]
        public Input<int>? SetDampeningReachabilityHalfLife { get; set; }

        /// <summary>
        /// Value to start reusing a route (1 - 20000, 0 = unset).
        /// </summary>
        [Input("setDampeningReuse")]
        public Input<int>? SetDampeningReuse { get; set; }

        /// <summary>
        /// Value to start suppressing a route (1 - 20000, 0 = unset).
        /// </summary>
        [Input("setDampeningSuppress")]
        public Input<int>? SetDampeningSuppress { get; set; }

        /// <summary>
        /// Unreachability Half-life time for the penalty (1 - 45 min, 0 = unset)
        /// </summary>
        [Input("setDampeningUnreachabilityHalfLife")]
        public Input<int>? SetDampeningUnreachabilityHalfLife { get; set; }

        [Input("setExtcommunityRts")]
        private InputList<Inputs.RouterRoutemapRuleSetExtcommunityRtArgs>? _setExtcommunityRts;

        /// <summary>
        /// Route Target extended community. The structure of `set_extcommunity_rt` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterRoutemapRuleSetExtcommunityRtArgs> SetExtcommunityRts
        {
            get => _setExtcommunityRts ?? (_setExtcommunityRts = new InputList<Inputs.RouterRoutemapRuleSetExtcommunityRtArgs>());
            set => _setExtcommunityRts = value;
        }

        [Input("setExtcommunitySoos")]
        private InputList<Inputs.RouterRoutemapRuleSetExtcommunitySooArgs>? _setExtcommunitySoos;

        /// <summary>
        /// Site-of-Origin extended community. The structure of `set_extcommunity_soo` block is documented below.
        /// </summary>
        public InputList<Inputs.RouterRoutemapRuleSetExtcommunitySooArgs> SetExtcommunitySoos
        {
            get => _setExtcommunitySoos ?? (_setExtcommunitySoos = new InputList<Inputs.RouterRoutemapRuleSetExtcommunitySooArgs>());
            set => _setExtcommunitySoos = value;
        }

        /// <summary>
        /// BGP flags value (0 - 65535)
        /// </summary>
        [Input("setFlags")]
        public Input<int>? SetFlags { get; set; }

        /// <summary>
        /// IPv6 global address of next hop.
        /// </summary>
        [Input("setIp6Nexthop")]
        public Input<string>? SetIp6Nexthop { get; set; }

        /// <summary>
        /// IPv6 local address of next hop.
        /// </summary>
        [Input("setIp6NexthopLocal")]
        public Input<string>? SetIp6NexthopLocal { get; set; }

        /// <summary>
        /// IP address of next hop.
        /// </summary>
        [Input("setIpNexthop")]
        public Input<string>? SetIpNexthop { get; set; }

        /// <summary>
        /// BGP local preference path attribute.
        /// </summary>
        [Input("setLocalPreference")]
        public Input<int>? SetLocalPreference { get; set; }

        /// <summary>
        /// Metric value.
        /// </summary>
        [Input("setMetric")]
        public Input<int>? SetMetric { get; set; }

        /// <summary>
        /// Metric type.
        /// </summary>
        [Input("setMetricType")]
        public Input<string>? SetMetricType { get; set; }

        /// <summary>
        /// BGP origin code. Valid values: `none`, `egp`, `igp`, `incomplete`.
        /// </summary>
        [Input("setOrigin")]
        public Input<string>? SetOrigin { get; set; }

        /// <summary>
        /// BGP originator ID attribute.
        /// </summary>
        [Input("setOriginatorId")]
        public Input<string>? SetOriginatorId { get; set; }

        /// <summary>
        /// Priority for routing table.
        /// </summary>
        [Input("setPriority")]
        public Input<int>? SetPriority { get; set; }

        /// <summary>
        /// Route tag for routing table.
        /// </summary>
        [Input("setRouteTag")]
        public Input<int>? SetRouteTag { get; set; }

        /// <summary>
        /// Tag value.
        /// </summary>
        [Input("setTag")]
        public Input<int>? SetTag { get; set; }

        /// <summary>
        /// BGP weight for routing table.
        /// </summary>
        [Input("setWeight")]
        public Input<int>? SetWeight { get; set; }

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