/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the ec2-2016-11-15.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.EC2.Model
{
    /// 
    /// Container for the parameters to the AssociateVpcCidrBlock operation.
    /// Associates a CIDR block with your VPC. You can associate a secondary IPv4 CIDR block,
    /// an Amazon-provided IPv6 CIDR block, or an IPv6 CIDR block from an IPv6 address pool
    /// that you provisioned through bring your own IP addresses (BYOIP).
    /// The IPv6 CIDR block size is fixed at /56.
    /// 
    ///  
    /// 
    /// You must specify one of the following in the request: an IPv4 CIDR block, an IPv6
    /// pool, or an Amazon-provided IPv6 CIDR block.
    /// 
    ///  
    /// 
    /// For more information about associating CIDR blocks with your VPC and applicable restrictions,
    /// see IP
    /// addressing for your VPCs and subnets in the Amazon VPC User Guide.
    /// 
    /// 
    public partial class AssociateVpcCidrBlockRequest : AmazonEC2Request
    {
        private bool? _amazonProvidedIpv6CidrBlock;
        private string _cidrBlock;
        private string _ipv4IpamPoolId;
        private int? _ipv4NetmaskLength;
        private string _ipv6CidrBlock;
        private string _ipv6CidrBlockNetworkBorderGroup;
        private string _ipv6IpamPoolId;
        private int? _ipv6NetmaskLength;
        private string _ipv6Pool;
        private string _vpcId;
        /// 
        /// Gets and sets the property AmazonProvidedIpv6CidrBlock. 
        /// 
        /// Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC.
        /// You cannot specify the range of IPv6 addresses, or the size of the CIDR block.
        /// 
        /// 
        public bool AmazonProvidedIpv6CidrBlock
        {
            get { return this._amazonProvidedIpv6CidrBlock.GetValueOrDefault(); }
            set { this._amazonProvidedIpv6CidrBlock = value; }
        }
        // Check to see if AmazonProvidedIpv6CidrBlock property is set
        internal bool IsSetAmazonProvidedIpv6CidrBlock()
        {
            return this._amazonProvidedIpv6CidrBlock.HasValue; 
        }
        /// 
        /// Gets and sets the property CidrBlock. 
        /// 
        /// An IPv4 CIDR block to associate with the VPC.
        /// 
        /// 
        public string CidrBlock
        {
            get { return this._cidrBlock; }
            set { this._cidrBlock = value; }
        }
        // Check to see if CidrBlock property is set
        internal bool IsSetCidrBlock()
        {
            return this._cidrBlock != null;
        }
        /// 
        /// Gets and sets the property Ipv4IpamPoolId. 
        /// 
        /// Associate a CIDR allocated from an IPv4 IPAM pool to a VPC. For more information about
        /// Amazon VPC IP Address Manager (IPAM), see What
        /// is IPAM? in the Amazon VPC IPAM User Guide.
        /// 
        /// 
        public string Ipv4IpamPoolId
        {
            get { return this._ipv4IpamPoolId; }
            set { this._ipv4IpamPoolId = value; }
        }
        // Check to see if Ipv4IpamPoolId property is set
        internal bool IsSetIpv4IpamPoolId()
        {
            return this._ipv4IpamPoolId != null;
        }
        /// 
        /// Gets and sets the property Ipv4NetmaskLength. 
        /// 
        /// The netmask length of the IPv4 CIDR you would like to associate from an Amazon VPC
        /// IP Address Manager (IPAM) pool. For more information about IPAM, see What
        /// is IPAM? in the Amazon VPC IPAM User Guide. 
        /// 
        /// 
        public int Ipv4NetmaskLength
        {
            get { return this._ipv4NetmaskLength.GetValueOrDefault(); }
            set { this._ipv4NetmaskLength = value; }
        }
        // Check to see if Ipv4NetmaskLength property is set
        internal bool IsSetIpv4NetmaskLength()
        {
            return this._ipv4NetmaskLength.HasValue; 
        }
        /// 
        /// Gets and sets the property Ipv6CidrBlock. 
        /// 
        /// An IPv6 CIDR block from the IPv6 address pool. You must also specify Ipv6Pool
        /// in the request.
        /// 
        ///  
        /// 
        /// To let Amazon choose the IPv6 CIDR block for you, omit this parameter.
        /// 
        /// 
        public string Ipv6CidrBlock
        {
            get { return this._ipv6CidrBlock; }
            set { this._ipv6CidrBlock = value; }
        }
        // Check to see if Ipv6CidrBlock property is set
        internal bool IsSetIpv6CidrBlock()
        {
            return this._ipv6CidrBlock != null;
        }
        /// 
        /// Gets and sets the property Ipv6CidrBlockNetworkBorderGroup. 
        /// 
        /// The name of the location from which we advertise the IPV6 CIDR block. Use this parameter
        /// to limit the CIDR block to this location.
        /// 
        ///  
        /// 
        ///  You must set AmazonProvidedIpv6CidrBlock to true to use
        /// this parameter.
        /// 
        ///  
        /// 
        ///  You can have one IPv6 CIDR block association per network border group.
        /// 
        /// 
        public string Ipv6CidrBlockNetworkBorderGroup
        {
            get { return this._ipv6CidrBlockNetworkBorderGroup; }
            set { this._ipv6CidrBlockNetworkBorderGroup = value; }
        }
        // Check to see if Ipv6CidrBlockNetworkBorderGroup property is set
        internal bool IsSetIpv6CidrBlockNetworkBorderGroup()
        {
            return this._ipv6CidrBlockNetworkBorderGroup != null;
        }
        /// 
        /// Gets and sets the property Ipv6IpamPoolId. 
        /// 
        /// Associates a CIDR allocated from an IPv6 IPAM pool to a VPC. For more information
        /// about Amazon VPC IP Address Manager (IPAM), see What
        /// is IPAM? in the Amazon VPC IPAM User Guide.
        /// 
        /// 
        public string Ipv6IpamPoolId
        {
            get { return this._ipv6IpamPoolId; }
            set { this._ipv6IpamPoolId = value; }
        }
        // Check to see if Ipv6IpamPoolId property is set
        internal bool IsSetIpv6IpamPoolId()
        {
            return this._ipv6IpamPoolId != null;
        }
        /// 
        /// Gets and sets the property Ipv6NetmaskLength. 
        /// 
        /// The netmask length of the IPv6 CIDR you would like to associate from an Amazon VPC
        /// IP Address Manager (IPAM) pool. For more information about IPAM, see What
        /// is IPAM? in the Amazon VPC IPAM User Guide. 
        /// 
        /// 
        public int Ipv6NetmaskLength
        {
            get { return this._ipv6NetmaskLength.GetValueOrDefault(); }
            set { this._ipv6NetmaskLength = value; }
        }
        // Check to see if Ipv6NetmaskLength property is set
        internal bool IsSetIpv6NetmaskLength()
        {
            return this._ipv6NetmaskLength.HasValue; 
        }
        /// 
        /// Gets and sets the property Ipv6Pool. 
        /// 
        /// The ID of an IPv6 address pool from which to allocate the IPv6 CIDR block.
        /// 
        /// 
        public string Ipv6Pool
        {
            get { return this._ipv6Pool; }
            set { this._ipv6Pool = value; }
        }
        // Check to see if Ipv6Pool property is set
        internal bool IsSetIpv6Pool()
        {
            return this._ipv6Pool != null;
        }
        /// 
        /// Gets and sets the property VpcId. 
        /// 
        /// The ID of the VPC.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string VpcId
        {
            get { return this._vpcId; }
            set { this._vpcId = value; }
        }
        // Check to see if VpcId property is set
        internal bool IsSetVpcId()
        {
            return this._vpcId != null;
        }
    }
}