DefaultSubnet.java 5.53 KB
/*
 * Copyright 2015 Open Networking Laboratory
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License 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.
 */
package org.onosproject.vtnrsc;

import static com.google.common.base.MoreObjects.toStringHelper;

import java.util.Objects;
import java.util.Set;

import org.onlab.packet.IpAddress;
import org.onlab.packet.IpAddress.Version;
import org.onlab.packet.IpPrefix;

/**
 * Default implementation of Subnet interface .
 */
public final class DefaultSubnet implements Subnet {
    private final SubnetId id;
    private final String subnetName;
    private final TenantNetworkId networkId;
    private final TenantId tenantId;
    private final Version ipVersion;
    private final IpPrefix cidr;
    private final IpAddress gatewayIp;
    private final boolean dhcpEnabled;
    private final boolean shared;
    private final Mode ipV6AddressMode;
    private final Mode ipV6RaMode;
    private final Set<HostRoute> hostRoutes;
    private final Set<AllocationPool> allocationPools;

    /**
     * Creates a subnet object.
     *
     * @param id subnet identifier
     * @param subnetName the name of subnet
     * @param networkId network identifier
     * @param tenantId tenant identifier
     * @param ipVersion Version of ipv4 or ipv6
     * @param cidr the cidr
     * @param gatewayIp gateway ip
     * @param dhcpEnabled dhcp enabled or not
     * @param shared indicates whether this network is shared across all
     *            tenants, By default, only administrative user can change this
     *            value
     * @param hostRoutes a collection of host routes
     * @param ipV6AddressMode ipV6AddressMode
     * @param ipV6RaMode ipV6RaMode
     * @param allocationPoolsIt a collection of allocationPools
     */
    public DefaultSubnet(SubnetId id, String subnetName,
                         TenantNetworkId networkId, TenantId tenantId,
                         Version ipVersion, IpPrefix cidr, IpAddress gatewayIp,
                         boolean dhcpEnabled, boolean shared,
                         Set<HostRoute> hostRoutes, Mode ipV6AddressMode,
                         Mode ipV6RaMode,
                         Set<AllocationPool> allocationPoolsIt) {
        this.id = id;
        this.subnetName = subnetName;
        this.networkId = networkId;
        this.tenantId = tenantId;
        this.ipVersion = ipVersion;
        this.cidr = cidr;
        this.gatewayIp = gatewayIp;
        this.dhcpEnabled = dhcpEnabled;
        this.shared = shared;
        this.ipV6AddressMode = ipV6AddressMode;
        this.ipV6RaMode = ipV6RaMode;
        this.hostRoutes = hostRoutes;
        this.allocationPools = allocationPoolsIt;
    }

    @Override
    public SubnetId id() {
        return id;
    }

    @Override
    public String subnetName() {
        return subnetName;
    }

    @Override
    public TenantNetworkId networkId() {
        return networkId;
    }

    @Override
    public TenantId tenantId() {
        return tenantId;
    }

    @Override
    public Version ipVersion() {
        return ipVersion;
    }

    @Override
    public IpPrefix cidr() {
        return cidr;
    }

    @Override
    public IpAddress gatewayIp() {
        return gatewayIp;
    }

    @Override
    public boolean dhcpEnabled() {
        return dhcpEnabled;
    }

    @Override
    public boolean shared() {
        return shared;
    }

    @Override
    public Iterable<HostRoute> hostRoutes() {
        return hostRoutes;
    }

    @Override
    public Mode ipV6AddressMode() {
        return ipV6AddressMode;
    }

    @Override
    public Mode ipV6RaMode() {
        return ipV6RaMode;
    }

    @Override
    public Iterable<AllocationPool> allocationPools() {
        return allocationPools;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, subnetName, ipVersion, cidr, gatewayIp,
                            dhcpEnabled, shared, tenantId);
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj instanceof DefaultSubnet) {
            final DefaultSubnet that = (DefaultSubnet) obj;
            return Objects.equals(this.id, that.id)
                    && Objects.equals(this.subnetName, that.subnetName)
                    && Objects.equals(this.ipVersion, that.ipVersion)
                    && Objects.equals(this.cidr, that.cidr)
                    && Objects.equals(this.shared, that.shared)
                    && Objects.equals(this.gatewayIp, that.gatewayIp)
                    && Objects.equals(this.dhcpEnabled, that.dhcpEnabled);
        }
        return false;
    }

    @Override
    public String toString() {
        return toStringHelper(this).add("id", id).add("subnetName", subnetName)
                .add("ipVersion", ipVersion).add("cidr", cidr)
                .add("shared", shared).add("gatewayIp", gatewayIp)
                .add("dhcpEnabled", dhcpEnabled).toString();
    }

}