/* | |
* 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 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 Iterable<HostRoute> hostRoutes; | |
private final Iterable<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, | |
Iterable<HostRoute> hostRoutes, Mode ipV6AddressMode, | |
Mode ipV6RaMode, | |
Iterable<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(); | |
} | |
} |