// *** 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;

namespace Pulumi.Routeros.CapsMan
{
    /// <summary>
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using System.Linq;
    /// using Pulumi;
    /// using Routeros = Pulumi.Routeros;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var testDatapath = new Routeros.CapsMan.Datapath("testDatapath", new()
    ///     {
    ///         Arp = "local-proxy-arp",
    ///         Bridge = "bridge",
    ///         BridgeCost = 100,
    ///         BridgeHorizon = 200,
    ///         ClientToClientForwarding = true,
    ///         Comment = "test_datapath",
    ///         InterfaceList = "static",
    ///         L2mtu = 1450,
    ///         LocalForwarding = true,
    ///         Mtu = 1500,
    ///         VlanId = 101,
    ///         VlanMode = "no-tag",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// Import with the name of the CAPsMAN datapath configuration in case of the example use test-datapath-config
    /// 
    /// ```sh
    ///  $ pulumi import routeros:CapsMan/datapath:Datapath test_datapath test-datapath-config
    /// ```
    /// </summary>
    [RouterosResourceType("routeros:CapsMan/datapath:Datapath")]
    public partial class Datapath : global::Pulumi.CustomResource
    {
        /// <summary>
        /// &lt;em&gt;Resource ID type (.id / name). This is an internal service field, setting a value is not required.&lt;/em&gt;
        /// </summary>
        [Output("___id_")]
        public Output<int?> ___id_ { get; private set; } = null!;

        /// <summary>
        /// &lt;em&gt;Resource path for CRUD operations. This is an internal service field, setting a value is not required.&lt;/em&gt;
        /// </summary>
        [Output("___path_")]
        public Output<string?> ___path_ { get; private set; } = null!;

        /// <summary>
        /// ARP mode. See [docs](https://wiki.mikrotik.com/wiki/Manual:IP/ARP#ARP_Modes) for info.
        /// </summary>
        [Output("arp")]
        public Output<string?> Arp { get; private set; } = null!;

        /// <summary>
        /// Bridge to which particular interface should be automatically added as port. Required only when local-forwarding is not used.
        /// </summary>
        [Output("bridge")]
        public Output<string?> Bridge { get; private set; } = null!;

        /// <summary>
        /// Bridge port cost to use when adding as bridge port.
        /// </summary>
        [Output("bridgeCost")]
        public Output<int?> BridgeCost { get; private set; } = null!;

        /// <summary>
        /// Bridge horizon to use when adding as bridge port.
        /// </summary>
        [Output("bridgeHorizon")]
        public Output<int?> BridgeHorizon { get; private set; } = null!;

        /// <summary>
        /// Controls if client-to-client forwarding between wireless clients connected to interface should be allowed, in local forwarding mode this function is performed by CAP, otherwise it is performed by CAPsMAN.
        /// </summary>
        [Output("clientToClientForwarding")]
        public Output<bool?> ClientToClientForwarding { get; private set; } = null!;

        [Output("comment")]
        public Output<string?> Comment { get; private set; } = null!;

        /// <summary>
        /// Interface list name.
        /// </summary>
        [Output("interfaceList")]
        public Output<string?> InterfaceList { get; private set; } = null!;

        /// <summary>
        /// Layer2 MTU size.
        /// </summary>
        [Output("l2mtu")]
        public Output<int?> L2mtu { get; private set; } = null!;

        /// <summary>
        /// Controls forwarding mode. If disabled, all L2 and L3 data will be forwarded to CAPsMAN, and further forwarding decisions will be made only then. See [docs](https://wiki.mikrotik.com/wiki/Manual:CAPsMAN#Local_Forwarding_Mode) for info.
        /// </summary>
        [Output("localForwarding")]
        public Output<bool?> LocalForwarding { get; private set; } = null!;

        /// <summary>
        /// MTU size.
        /// </summary>
        [Output("mtu")]
        public Output<int?> Mtu { get; private set; } = null!;

        /// <summary>
        /// Changing the name of this resource will force it to be recreated. &gt; The links of other configuration properties to this
        /// resource may be lost! &gt; Changing the name of the resource outside of a Terraform will result in a loss of control
        /// integrity for that resource!
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// OpenFlow switch to add interface to, as port when enabled.
        /// </summary>
        [Output("openflowSwitch")]
        public Output<string?> OpenflowSwitch { get; private set; } = null!;

        /// <summary>
        /// VLAN ID to assign to interface if vlan-mode enables use of VLAN tagging.
        /// </summary>
        [Output("vlanId")]
        public Output<int?> VlanId { get; private set; } = null!;

        /// <summary>
        /// VLAN tagging mode specifies if VLAN tag should be assigned to interface (causes all received data to get tagged with VLAN tag and allows interface to only send out data tagged with given tag)
        /// </summary>
        [Output("vlanMode")]
        public Output<string?> VlanMode { get; private set; } = null!;


        /// <summary>
        /// Create a Datapath 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 Datapath(string name, DatapathArgs? args = null, CustomResourceOptions? options = null)
            : base("routeros:CapsMan/datapath:Datapath", name, args ?? new DatapathArgs(), MakeResourceOptions(options, ""))
        {
        }

        private Datapath(string name, Input<string> id, DatapathState? state = null, CustomResourceOptions? options = null)
            : base("routeros:CapsMan/datapath:Datapath", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
            };
            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 Datapath 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 Datapath Get(string name, Input<string> id, DatapathState? state = null, CustomResourceOptions? options = null)
        {
            return new Datapath(name, id, state, options);
        }
    }

    public sealed class DatapathArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// &lt;em&gt;Resource ID type (.id / name). This is an internal service field, setting a value is not required.&lt;/em&gt;
        /// </summary>
        [Input("___id_")]
        public Input<int>? ___id_ { get; set; }

        /// <summary>
        /// &lt;em&gt;Resource path for CRUD operations. This is an internal service field, setting a value is not required.&lt;/em&gt;
        /// </summary>
        [Input("___path_")]
        public Input<string>? ___path_ { get; set; }

        /// <summary>
        /// ARP mode. See [docs](https://wiki.mikrotik.com/wiki/Manual:IP/ARP#ARP_Modes) for info.
        /// </summary>
        [Input("arp")]
        public Input<string>? Arp { get; set; }

        /// <summary>
        /// Bridge to which particular interface should be automatically added as port. Required only when local-forwarding is not used.
        /// </summary>
        [Input("bridge")]
        public Input<string>? Bridge { get; set; }

        /// <summary>
        /// Bridge port cost to use when adding as bridge port.
        /// </summary>
        [Input("bridgeCost")]
        public Input<int>? BridgeCost { get; set; }

        /// <summary>
        /// Bridge horizon to use when adding as bridge port.
        /// </summary>
        [Input("bridgeHorizon")]
        public Input<int>? BridgeHorizon { get; set; }

        /// <summary>
        /// Controls if client-to-client forwarding between wireless clients connected to interface should be allowed, in local forwarding mode this function is performed by CAP, otherwise it is performed by CAPsMAN.
        /// </summary>
        [Input("clientToClientForwarding")]
        public Input<bool>? ClientToClientForwarding { get; set; }

        [Input("comment")]
        public Input<string>? Comment { get; set; }

        /// <summary>
        /// Interface list name.
        /// </summary>
        [Input("interfaceList")]
        public Input<string>? InterfaceList { get; set; }

        /// <summary>
        /// Layer2 MTU size.
        /// </summary>
        [Input("l2mtu")]
        public Input<int>? L2mtu { get; set; }

        /// <summary>
        /// Controls forwarding mode. If disabled, all L2 and L3 data will be forwarded to CAPsMAN, and further forwarding decisions will be made only then. See [docs](https://wiki.mikrotik.com/wiki/Manual:CAPsMAN#Local_Forwarding_Mode) for info.
        /// </summary>
        [Input("localForwarding")]
        public Input<bool>? LocalForwarding { get; set; }

        /// <summary>
        /// MTU size.
        /// </summary>
        [Input("mtu")]
        public Input<int>? Mtu { get; set; }

        /// <summary>
        /// Changing the name of this resource will force it to be recreated. &gt; The links of other configuration properties to this
        /// resource may be lost! &gt; Changing the name of the resource outside of a Terraform will result in a loss of control
        /// integrity for that resource!
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// OpenFlow switch to add interface to, as port when enabled.
        /// </summary>
        [Input("openflowSwitch")]
        public Input<string>? OpenflowSwitch { get; set; }

        /// <summary>
        /// VLAN ID to assign to interface if vlan-mode enables use of VLAN tagging.
        /// </summary>
        [Input("vlanId")]
        public Input<int>? VlanId { get; set; }

        /// <summary>
        /// VLAN tagging mode specifies if VLAN tag should be assigned to interface (causes all received data to get tagged with VLAN tag and allows interface to only send out data tagged with given tag)
        /// </summary>
        [Input("vlanMode")]
        public Input<string>? VlanMode { get; set; }

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

    public sealed class DatapathState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// &lt;em&gt;Resource ID type (.id / name). This is an internal service field, setting a value is not required.&lt;/em&gt;
        /// </summary>
        [Input("___id_")]
        public Input<int>? ___id_ { get; set; }

        /// <summary>
        /// &lt;em&gt;Resource path for CRUD operations. This is an internal service field, setting a value is not required.&lt;/em&gt;
        /// </summary>
        [Input("___path_")]
        public Input<string>? ___path_ { get; set; }

        /// <summary>
        /// ARP mode. See [docs](https://wiki.mikrotik.com/wiki/Manual:IP/ARP#ARP_Modes) for info.
        /// </summary>
        [Input("arp")]
        public Input<string>? Arp { get; set; }

        /// <summary>
        /// Bridge to which particular interface should be automatically added as port. Required only when local-forwarding is not used.
        /// </summary>
        [Input("bridge")]
        public Input<string>? Bridge { get; set; }

        /// <summary>
        /// Bridge port cost to use when adding as bridge port.
        /// </summary>
        [Input("bridgeCost")]
        public Input<int>? BridgeCost { get; set; }

        /// <summary>
        /// Bridge horizon to use when adding as bridge port.
        /// </summary>
        [Input("bridgeHorizon")]
        public Input<int>? BridgeHorizon { get; set; }

        /// <summary>
        /// Controls if client-to-client forwarding between wireless clients connected to interface should be allowed, in local forwarding mode this function is performed by CAP, otherwise it is performed by CAPsMAN.
        /// </summary>
        [Input("clientToClientForwarding")]
        public Input<bool>? ClientToClientForwarding { get; set; }

        [Input("comment")]
        public Input<string>? Comment { get; set; }

        /// <summary>
        /// Interface list name.
        /// </summary>
        [Input("interfaceList")]
        public Input<string>? InterfaceList { get; set; }

        /// <summary>
        /// Layer2 MTU size.
        /// </summary>
        [Input("l2mtu")]
        public Input<int>? L2mtu { get; set; }

        /// <summary>
        /// Controls forwarding mode. If disabled, all L2 and L3 data will be forwarded to CAPsMAN, and further forwarding decisions will be made only then. See [docs](https://wiki.mikrotik.com/wiki/Manual:CAPsMAN#Local_Forwarding_Mode) for info.
        /// </summary>
        [Input("localForwarding")]
        public Input<bool>? LocalForwarding { get; set; }

        /// <summary>
        /// MTU size.
        /// </summary>
        [Input("mtu")]
        public Input<int>? Mtu { get; set; }

        /// <summary>
        /// Changing the name of this resource will force it to be recreated. &gt; The links of other configuration properties to this
        /// resource may be lost! &gt; Changing the name of the resource outside of a Terraform will result in a loss of control
        /// integrity for that resource!
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// OpenFlow switch to add interface to, as port when enabled.
        /// </summary>
        [Input("openflowSwitch")]
        public Input<string>? OpenflowSwitch { get; set; }

        /// <summary>
        /// VLAN ID to assign to interface if vlan-mode enables use of VLAN tagging.
        /// </summary>
        [Input("vlanId")]
        public Input<int>? VlanId { get; set; }

        /// <summary>
        /// VLAN tagging mode specifies if VLAN tag should be assigned to interface (causes all received data to get tagged with VLAN tag and allows interface to only send out data tagged with given tag)
        /// </summary>
        [Input("vlanMode")]
        public Input<string>? VlanMode { get; set; }

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