<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.Inputs
{

    public sealed class SystemInterfaceIpv6Args : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Enable/disable address auto config. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("autoconf")]
        public Input<string>? Autoconf { get; set; }

        /// <summary>
        /// CLI IPv6 connection status.
        /// </summary>
        [Input("cliConn6Status")]
        public Input<int>? CliConn6Status { get; set; }

        /// <summary>
        /// DHCPv6 client options. Valid values: `rapid`, `iapd`, `iana`.
        /// </summary>
        [Input("dhcp6ClientOptions")]
        public Input<string>? Dhcp6ClientOptions { get; set; }

        [Input("dhcp6IapdLists")]
        private InputList<Inputs.SystemInterfaceIpv6Dhcp6IapdListArgs>? _dhcp6IapdLists;

        /// <summary>
        /// DHCPv6 IA-PD list The structure of `dhcp6_iapd_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceIpv6Dhcp6IapdListArgs> Dhcp6IapdLists
        {
            get => _dhcp6IapdLists ?? (_dhcp6IapdLists = new InputList<Inputs.SystemInterfaceIpv6Dhcp6IapdListArgs>());
            set => _dhcp6IapdLists = value;
        }

        /// <summary>
        /// Enable/disable DHCPv6 information request. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dhcp6InformationRequest")]
        public Input<string>? Dhcp6InformationRequest { get; set; }

        /// <summary>
        /// Enable/disable DHCPv6 prefix delegation. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dhcp6PrefixDelegation")]
        public Input<string>? Dhcp6PrefixDelegation { get; set; }

        /// <summary>
        /// DHCPv6 prefix that will be used as a hint to the upstream DHCPv6 server.
        /// </summary>
        [Input("dhcp6PrefixHint")]
        public Input<string>? Dhcp6PrefixHint { get; set; }

        /// <summary>
        /// DHCPv6 prefix hint preferred life time (sec), 0 means unlimited lease time.
        /// </summary>
        [Input("dhcp6PrefixHintPlt")]
        public Input<int>? Dhcp6PrefixHintPlt { get; set; }

        /// <summary>
        /// DHCPv6 prefix hint valid life time (sec).
        /// </summary>
        [Input("dhcp6PrefixHintVlt")]
        public Input<int>? Dhcp6PrefixHintVlt { get; set; }

        /// <summary>
        /// DHCPv6 relay IP address.
        /// </summary>
        [Input("dhcp6RelayIp")]
        public Input<string>? Dhcp6RelayIp { get; set; }

        /// <summary>
        /// Enable/disable DHCPv6 relay. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("dhcp6RelayService")]
        public Input<string>? Dhcp6RelayService { get; set; }

        /// <summary>
        /// DHCPv6 relay type. Valid values: `regular`.
        /// </summary>
        [Input("dhcp6RelayType")]
        public Input<string>? Dhcp6RelayType { get; set; }

        /// <summary>
        /// Enable/disable sending of ICMPv6 redirects. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("icmp6SendRedirect")]
        public Input<string>? Icmp6SendRedirect { get; set; }

        /// <summary>
        /// IPv6 interface identifier.
        /// </summary>
        [Input("interfaceIdentifier")]
        public Input<string>? InterfaceIdentifier { get; set; }

        /// <summary>
        /// Primary IPv6 address prefix, syntax: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/xxx
        /// </summary>
        [Input("ip6Address")]
        public Input<string>? Ip6Address { get; set; }

        /// <summary>
        /// Allow management access to the interface.
        /// </summary>
        [Input("ip6Allowaccess")]
        public Input<string>? Ip6Allowaccess { get; set; }

        /// <summary>
        /// Default life (sec).
        /// </summary>
        [Input("ip6DefaultLife")]
        public Input<int>? Ip6DefaultLife { get; set; }

        /// <summary>
        /// IAID of obtained delegated-prefix from the upstream interface.
        /// </summary>
        [Input("ip6DelegatedPrefixIaid")]
        public Input<int>? Ip6DelegatedPrefixIaid { get; set; }

        [Input("ip6DelegatedPrefixLists")]
        private InputList<Inputs.SystemInterfaceIpv6Ip6DelegatedPrefixListArgs>? _ip6DelegatedPrefixLists;

        /// <summary>
        /// Advertised IPv6 delegated prefix list. The structure of `ip6_delegated_prefix_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceIpv6Ip6DelegatedPrefixListArgs> Ip6DelegatedPrefixLists
        {
            get => _ip6DelegatedPrefixLists ?? (_ip6DelegatedPrefixLists = new InputList<Inputs.SystemInterfaceIpv6Ip6DelegatedPrefixListArgs>());
            set => _ip6DelegatedPrefixLists = value;
        }

        /// <summary>
        /// Enable/disable using the DNS server acquired by DHCP. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ip6DnsServerOverride")]
        public Input<string>? Ip6DnsServerOverride { get; set; }

        [Input("ip6ExtraAddrs")]
        private InputList<Inputs.SystemInterfaceIpv6Ip6ExtraAddrArgs>? _ip6ExtraAddrs;

        /// <summary>
        /// Extra IPv6 address prefixes of interface. The structure of `ip6_extra_addr` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceIpv6Ip6ExtraAddrArgs> Ip6ExtraAddrs
        {
            get => _ip6ExtraAddrs ?? (_ip6ExtraAddrs = new InputList<Inputs.SystemInterfaceIpv6Ip6ExtraAddrArgs>());
            set => _ip6ExtraAddrs = value;
        }

        /// <summary>
        /// Hop limit (0 means unspecified).
        /// </summary>
        [Input("ip6HopLimit")]
        public Input<int>? Ip6HopLimit { get; set; }

        /// <summary>
        /// IPv6 link MTU.
        /// </summary>
        [Input("ip6LinkMtu")]
        public Input<int>? Ip6LinkMtu { get; set; }

        /// <summary>
        /// Enable/disable the managed flag. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ip6ManageFlag")]
        public Input<string>? Ip6ManageFlag { get; set; }

        /// <summary>
        /// IPv6 maximum interval (4 to 1800 sec).
        /// </summary>
        [Input("ip6MaxInterval")]
        public Input<int>? Ip6MaxInterval { get; set; }

        /// <summary>
        /// IPv6 minimum interval (3 to 1350 sec).
        /// </summary>
        [Input("ip6MinInterval")]
        public Input<int>? Ip6MinInterval { get; set; }

        /// <summary>
        /// Addressing mode (static, DHCP, delegated). Valid values: `static`, `dhcp`, `pppoe`, `delegated`.
        /// </summary>
        [Input("ip6Mode")]
        public Input<string>? Ip6Mode { get; set; }

        /// <summary>
        /// Enable/disable the other IPv6 flag. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ip6OtherFlag")]
        public Input<string>? Ip6OtherFlag { get; set; }

        [Input("ip6PrefixLists")]
        private InputList<Inputs.SystemInterfaceIpv6Ip6PrefixListArgs>? _ip6PrefixLists;

        /// <summary>
        /// Advertised prefix list. The structure of `ip6_prefix_list` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemInterfaceIpv6Ip6PrefixListArgs> Ip6PrefixLists
        {
            get => _ip6PrefixLists ?? (_ip6PrefixLists = new InputList<Inputs.SystemInterfaceIpv6Ip6PrefixListArgs>());
            set => _ip6PrefixLists = value;
        }

        /// <summary>
        /// Assigning a prefix from DHCP or RA. Valid values: `dhcp6`, `ra`.
        /// </summary>
        [Input("ip6PrefixMode")]
        public Input<string>? Ip6PrefixMode { get; set; }

        /// <summary>
        /// IPv6 reachable time (milliseconds; 0 means unspecified).
        /// </summary>
        [Input("ip6ReachableTime")]
        public Input<int>? Ip6ReachableTime { get; set; }

        /// <summary>
        /// IPv6 retransmit time (milliseconds; 0 means unspecified).
        /// </summary>
        [Input("ip6RetransTime")]
        public Input<int>? Ip6RetransTime { get; set; }

        /// <summary>
        /// Enable/disable sending advertisements about the interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ip6SendAdv")]
        public Input<string>? Ip6SendAdv { get; set; }

        /// <summary>
        /// Subnet to routing prefix, syntax: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/xxx
        /// </summary>
        [Input("ip6Subnet")]
        public Input<string>? Ip6Subnet { get; set; }

        /// <summary>
        /// Interface name providing delegated information.
        /// </summary>
        [Input("ip6UpstreamInterface")]
        public Input<string>? Ip6UpstreamInterface { get; set; }

        /// <summary>
        /// Neighbor discovery certificate.
        /// </summary>
        [Input("ndCert")]
        public Input<string>? NdCert { get; set; }

        /// <summary>
        /// Neighbor discovery CGA modifier.
        /// </summary>
        [Input("ndCgaModifier")]
        public Input<string>? NdCgaModifier { get; set; }

        /// <summary>
        /// Neighbor discovery mode. Valid values: `basic`, `SEND-compatible`.
        /// </summary>
        [Input("ndMode")]
        public Input<string>? NdMode { get; set; }

        /// <summary>
        /// Neighbor discovery security level (0 - 7; 0 = least secure, default = 0).
        /// </summary>
        [Input("ndSecurityLevel")]
        public Input<int>? NdSecurityLevel { get; set; }

        /// <summary>
        /// Neighbor discovery timestamp delta value (1 - 3600 sec; default = 300).
        /// </summary>
        [Input("ndTimestampDelta")]
        public Input<int>? NdTimestampDelta { get; set; }

        /// <summary>
        /// Neighbor discovery timestamp fuzz factor (1 - 60 sec; default = 1).
        /// </summary>
        [Input("ndTimestampFuzz")]
        public Input<int>? NdTimestampFuzz { get; set; }

        /// <summary>
        /// Enable/disable sending link MTU in RA packet. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("raSendMtu")]
        public Input<string>? RaSendMtu { get; set; }

        /// <summary>
        /// Enable/disable unique auto config address. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("uniqueAutoconfAddr")]
        public Input<string>? UniqueAutoconfAddr { get; set; }

        /// <summary>
        /// Link-local IPv6 address of virtual router.
        /// </summary>
        [Input("vrip6LinkLocal")]
        public Input<string>? Vrip6LinkLocal { get; set; }

        [Input("vrrp6s")]
        private InputList<Inputs.SystemInterfaceIpv6Vrrp6Args>? _vrrp6s;

        /// <summary>
        /// IPv6 VRRP configuration. The structure of `vrrp6` block is documented below.
        /// 
        /// The `ip6_extra_addr` block supports:
        /// </summary>
        public InputList<Inputs.SystemInterfaceIpv6Vrrp6Args> Vrrp6s
        {
            get => _vrrp6s ?? (_vrrp6s = new InputList<Inputs.SystemInterfaceIpv6Vrrp6Args>());
            set => _vrrp6s = value;
        }

        /// <summary>
        /// Enable/disable virtual MAC for VRRP. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("vrrpVirtualMac6")]
        public Input<string>? VrrpVirtualMac6 { get; set; }

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