// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.resourcemanager.managednetworkfabric.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;

/** Layer 3 primary and secondary ip address prefixes. */
@Fluent
public class Layer3IpPrefixProperties {
    /*
     * IPv4 Address Prefix of CE-PE interconnect links. Example: 172.31.0.0/31. The values can be specified at the time
     * of creation or can be updated afterwards. Any update to the values post-provisioning may disrupt traffic. The
     * 1st and 3rd IPs are to be configured on CE1 and CE2 for Option B interfaces. The 2nd and 4th IPs are to be
     * configured on PE1 and PE2 for Option B interfaces.
     */
    @JsonProperty(value = "primaryIpv4Prefix")
    private String primaryIpv4Prefix;

    /*
     * IPv6 Address Prefix of CE-PE interconnect links. Example: 3FFE:FFFF:0:CD30::a0/126. The values can be specified
     * at the time of creation or can be updated afterwards. Any update to the values post-provisioning may disrupt
     * traffic. The 1st and 3rd IPs are to be configured on CE1 and CE2 for Option B interfaces. The 2nd and 4th IPs
     * are to be configured on PE1 and PE2 for Option B interfaces.
     */
    @JsonProperty(value = "primaryIpv6Prefix")
    private String primaryIpv6Prefix;

    /*
     * Secondary IPv4 Address Prefix of CE-PE interconnect links. Example: 172.31.0.20/31. The values can be specified
     * at the time of creation or can be updated afterwards. Any update to the values post-provisioning may disrupt
     * traffic. The 1st and 3rd IPs are to be configured on CE1 and CE2 for Option B interfaces. The 2nd and 4th IPs
     * are to be configured on PE1 and PE2 for Option B interfaces.
     */
    @JsonProperty(value = "secondaryIpv4Prefix")
    private String secondaryIpv4Prefix;

    /*
     * Secondary IPv6 Address Prefix of CE-PE interconnect links. Example: 3FFE:FFFF:0:CD30::a4/126. The values can be
     * specified at the time of creation or can be updated afterwards. Any update to the values post-provisioning may
     * disrupt traffic. The 1st and 3rd IPs are to be configured on CE1 and CE2 for Option B interfaces. The 2nd and
     * 4th IPs are to be configured on PE1 and PE2 for Option B interfaces.
     */
    @JsonProperty(value = "secondaryIpv6Prefix")
    private String secondaryIpv6Prefix;

    /** Creates an instance of Layer3IpPrefixProperties class. */
    public Layer3IpPrefixProperties() {
    }

    /**
     * Get the primaryIpv4Prefix property: IPv4 Address Prefix of CE-PE interconnect links. Example: 172.31.0.0/31. The
     * values can be specified at the time of creation or can be updated afterwards. Any update to the values
     * post-provisioning may disrupt traffic. The 1st and 3rd IPs are to be configured on CE1 and CE2 for Option B
     * interfaces. The 2nd and 4th IPs are to be configured on PE1 and PE2 for Option B interfaces.
     *
     * @return the primaryIpv4Prefix value.
     */
    public String primaryIpv4Prefix() {
        return this.primaryIpv4Prefix;
    }

    /**
     * Set the primaryIpv4Prefix property: IPv4 Address Prefix of CE-PE interconnect links. Example: 172.31.0.0/31. The
     * values can be specified at the time of creation or can be updated afterwards. Any update to the values
     * post-provisioning may disrupt traffic. The 1st and 3rd IPs are to be configured on CE1 and CE2 for Option B
     * interfaces. The 2nd and 4th IPs are to be configured on PE1 and PE2 for Option B interfaces.
     *
     * @param primaryIpv4Prefix the primaryIpv4Prefix value to set.
     * @return the Layer3IpPrefixProperties object itself.
     */
    public Layer3IpPrefixProperties withPrimaryIpv4Prefix(String primaryIpv4Prefix) {
        this.primaryIpv4Prefix = primaryIpv4Prefix;
        return this;
    }

    /**
     * Get the primaryIpv6Prefix property: IPv6 Address Prefix of CE-PE interconnect links. Example:
     * 3FFE:FFFF:0:CD30::a0/126. The values can be specified at the time of creation or can be updated afterwards. Any
     * update to the values post-provisioning may disrupt traffic. The 1st and 3rd IPs are to be configured on CE1 and
     * CE2 for Option B interfaces. The 2nd and 4th IPs are to be configured on PE1 and PE2 for Option B interfaces.
     *
     * @return the primaryIpv6Prefix value.
     */
    public String primaryIpv6Prefix() {
        return this.primaryIpv6Prefix;
    }

    /**
     * Set the primaryIpv6Prefix property: IPv6 Address Prefix of CE-PE interconnect links. Example:
     * 3FFE:FFFF:0:CD30::a0/126. The values can be specified at the time of creation or can be updated afterwards. Any
     * update to the values post-provisioning may disrupt traffic. The 1st and 3rd IPs are to be configured on CE1 and
     * CE2 for Option B interfaces. The 2nd and 4th IPs are to be configured on PE1 and PE2 for Option B interfaces.
     *
     * @param primaryIpv6Prefix the primaryIpv6Prefix value to set.
     * @return the Layer3IpPrefixProperties object itself.
     */
    public Layer3IpPrefixProperties withPrimaryIpv6Prefix(String primaryIpv6Prefix) {
        this.primaryIpv6Prefix = primaryIpv6Prefix;
        return this;
    }

    /**
     * Get the secondaryIpv4Prefix property: Secondary IPv4 Address Prefix of CE-PE interconnect links. Example:
     * 172.31.0.20/31. The values can be specified at the time of creation or can be updated afterwards. Any update to
     * the values post-provisioning may disrupt traffic. The 1st and 3rd IPs are to be configured on CE1 and CE2 for
     * Option B interfaces. The 2nd and 4th IPs are to be configured on PE1 and PE2 for Option B interfaces.
     *
     * @return the secondaryIpv4Prefix value.
     */
    public String secondaryIpv4Prefix() {
        return this.secondaryIpv4Prefix;
    }

    /**
     * Set the secondaryIpv4Prefix property: Secondary IPv4 Address Prefix of CE-PE interconnect links. Example:
     * 172.31.0.20/31. The values can be specified at the time of creation or can be updated afterwards. Any update to
     * the values post-provisioning may disrupt traffic. The 1st and 3rd IPs are to be configured on CE1 and CE2 for
     * Option B interfaces. The 2nd and 4th IPs are to be configured on PE1 and PE2 for Option B interfaces.
     *
     * @param secondaryIpv4Prefix the secondaryIpv4Prefix value to set.
     * @return the Layer3IpPrefixProperties object itself.
     */
    public Layer3IpPrefixProperties withSecondaryIpv4Prefix(String secondaryIpv4Prefix) {
        this.secondaryIpv4Prefix = secondaryIpv4Prefix;
        return this;
    }

    /**
     * Get the secondaryIpv6Prefix property: Secondary IPv6 Address Prefix of CE-PE interconnect links. Example:
     * 3FFE:FFFF:0:CD30::a4/126. The values can be specified at the time of creation or can be updated afterwards. Any
     * update to the values post-provisioning may disrupt traffic. The 1st and 3rd IPs are to be configured on CE1 and
     * CE2 for Option B interfaces. The 2nd and 4th IPs are to be configured on PE1 and PE2 for Option B interfaces.
     *
     * @return the secondaryIpv6Prefix value.
     */
    public String secondaryIpv6Prefix() {
        return this.secondaryIpv6Prefix;
    }

    /**
     * Set the secondaryIpv6Prefix property: Secondary IPv6 Address Prefix of CE-PE interconnect links. Example:
     * 3FFE:FFFF:0:CD30::a4/126. The values can be specified at the time of creation or can be updated afterwards. Any
     * update to the values post-provisioning may disrupt traffic. The 1st and 3rd IPs are to be configured on CE1 and
     * CE2 for Option B interfaces. The 2nd and 4th IPs are to be configured on PE1 and PE2 for Option B interfaces.
     *
     * @param secondaryIpv6Prefix the secondaryIpv6Prefix value to set.
     * @return the Layer3IpPrefixProperties object itself.
     */
    public Layer3IpPrefixProperties withSecondaryIpv6Prefix(String secondaryIpv6Prefix) {
        this.secondaryIpv6Prefix = secondaryIpv6Prefix;
        return this;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    public void validate() {
    }
}
