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

/** Network device limits. */
@Fluent
public final class DeviceLimits {
    /*
     * Maximum number of physical interfaces.
     */
    @JsonProperty(value = "physicalInterfaceCount")
    private Integer physicalInterfaceCount;

    /*
     * Maximum number of sub-interfaces.
     */
    @JsonProperty(value = "maxSubInterfaces")
    private Integer maxSubInterfaces;

    /*
     * Maximum number of tunnel interfaces.
     */
    @JsonProperty(value = "maxTunnelInterfaces")
    private Integer maxTunnelInterfaces;

    /*
     * Maximum number of virtual router functions.
     */
    @JsonProperty(value = "maxVirtualRouterFunctions")
    private Integer maxVirtualRouterFunctions;

    /*
     * Maximum number of Border Gateway Protocol (BGP) peers.
     */
    @JsonProperty(value = "maxBorderGatewayProtocolPeers")
    private Integer maxBorderGatewayProtocolPeers;

    /*
     * Maximum number of Bidirectional Forwarding Detection (BFD) peers.
     */
    @JsonProperty(value = "maxBidirectionalForwardingDetectionPeers")
    private Integer maxBidirectionalForwardingDetectionPeers;

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

    /**
     * Get the physicalInterfaceCount property: Maximum number of physical interfaces.
     *
     * @return the physicalInterfaceCount value.
     */
    public Integer physicalInterfaceCount() {
        return this.physicalInterfaceCount;
    }

    /**
     * Set the physicalInterfaceCount property: Maximum number of physical interfaces.
     *
     * @param physicalInterfaceCount the physicalInterfaceCount value to set.
     * @return the DeviceLimits object itself.
     */
    public DeviceLimits withPhysicalInterfaceCount(Integer physicalInterfaceCount) {
        this.physicalInterfaceCount = physicalInterfaceCount;
        return this;
    }

    /**
     * Get the maxSubInterfaces property: Maximum number of sub-interfaces.
     *
     * @return the maxSubInterfaces value.
     */
    public Integer maxSubInterfaces() {
        return this.maxSubInterfaces;
    }

    /**
     * Set the maxSubInterfaces property: Maximum number of sub-interfaces.
     *
     * @param maxSubInterfaces the maxSubInterfaces value to set.
     * @return the DeviceLimits object itself.
     */
    public DeviceLimits withMaxSubInterfaces(Integer maxSubInterfaces) {
        this.maxSubInterfaces = maxSubInterfaces;
        return this;
    }

    /**
     * Get the maxTunnelInterfaces property: Maximum number of tunnel interfaces.
     *
     * @return the maxTunnelInterfaces value.
     */
    public Integer maxTunnelInterfaces() {
        return this.maxTunnelInterfaces;
    }

    /**
     * Set the maxTunnelInterfaces property: Maximum number of tunnel interfaces.
     *
     * @param maxTunnelInterfaces the maxTunnelInterfaces value to set.
     * @return the DeviceLimits object itself.
     */
    public DeviceLimits withMaxTunnelInterfaces(Integer maxTunnelInterfaces) {
        this.maxTunnelInterfaces = maxTunnelInterfaces;
        return this;
    }

    /**
     * Get the maxVirtualRouterFunctions property: Maximum number of virtual router functions.
     *
     * @return the maxVirtualRouterFunctions value.
     */
    public Integer maxVirtualRouterFunctions() {
        return this.maxVirtualRouterFunctions;
    }

    /**
     * Set the maxVirtualRouterFunctions property: Maximum number of virtual router functions.
     *
     * @param maxVirtualRouterFunctions the maxVirtualRouterFunctions value to set.
     * @return the DeviceLimits object itself.
     */
    public DeviceLimits withMaxVirtualRouterFunctions(Integer maxVirtualRouterFunctions) {
        this.maxVirtualRouterFunctions = maxVirtualRouterFunctions;
        return this;
    }

    /**
     * Get the maxBorderGatewayProtocolPeers property: Maximum number of Border Gateway Protocol (BGP) peers.
     *
     * @return the maxBorderGatewayProtocolPeers value.
     */
    public Integer maxBorderGatewayProtocolPeers() {
        return this.maxBorderGatewayProtocolPeers;
    }

    /**
     * Set the maxBorderGatewayProtocolPeers property: Maximum number of Border Gateway Protocol (BGP) peers.
     *
     * @param maxBorderGatewayProtocolPeers the maxBorderGatewayProtocolPeers value to set.
     * @return the DeviceLimits object itself.
     */
    public DeviceLimits withMaxBorderGatewayProtocolPeers(Integer maxBorderGatewayProtocolPeers) {
        this.maxBorderGatewayProtocolPeers = maxBorderGatewayProtocolPeers;
        return this;
    }

    /**
     * Get the maxBidirectionalForwardingDetectionPeers property: Maximum number of Bidirectional Forwarding Detection
     * (BFD) peers.
     *
     * @return the maxBidirectionalForwardingDetectionPeers value.
     */
    public Integer maxBidirectionalForwardingDetectionPeers() {
        return this.maxBidirectionalForwardingDetectionPeers;
    }

    /**
     * Set the maxBidirectionalForwardingDetectionPeers property: Maximum number of Bidirectional Forwarding Detection
     * (BFD) peers.
     *
     * @param maxBidirectionalForwardingDetectionPeers the maxBidirectionalForwardingDetectionPeers value to set.
     * @return the DeviceLimits object itself.
     */
    public DeviceLimits withMaxBidirectionalForwardingDetectionPeers(Integer maxBidirectionalForwardingDetectionPeers) {
        this.maxBidirectionalForwardingDetectionPeers = maxBidirectionalForwardingDetectionPeers;
        return this;
    }

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