blob: 06dbdb21d542720d0bc4ffafa116d7978626b027 [file] [log] [blame]
/*
* 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.segmentrouting;
import java.util.Objects;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Tunnel Policy.
*/
public final class TunnelPolicy implements Policy {
private final Type type;
private final String id;
private final int priority;
private final String tunnelId;
private String dstIp;
private String srcIp;
private String ipProto;
private short srcPort;
private short dstPort;
private TunnelPolicy(String policyId, Type type, int priority, String tunnelId, String srcIp,
String dstIp, String ipProto, short srcPort, short dstPort) {
this.id = checkNotNull(policyId);
this.type = type;
this.tunnelId = tunnelId;
this.priority = priority;
this.dstIp = dstIp;
this.srcIp = srcIp;
this.ipProto = ipProto;
this.srcPort = srcPort;
this.dstPort = dstPort;
}
/**
* Creates a TunnelPolicy reference.
*
* @param p TunnelPolicy reference
*/
public TunnelPolicy(TunnelPolicy p) {
this.id = p.id;
this.type = p.type;
this.tunnelId = p.tunnelId;
this.priority = p.priority;
this.srcIp = p.srcIp;
this.dstIp = p.dstIp;
this.ipProto = p.ipProto;
this.srcPort = p.srcPort;
this.dstPort = p.dstPort;
}
/**
* Returns the TunnelPolicy builder reference.
*
* @return TunnelPolicy builder
*/
public static TunnelPolicy.Builder builder() {
return new Builder();
}
@Override
public String id() {
return this.id;
}
@Override
public int priority() {
return priority;
}
@Override
public Type type() {
return type;
}
@Override
public String srcIp() {
return srcIp;
}
@Override
public String dstIp() {
return dstIp;
}
@Override
public String ipProto() {
return ipProto;
}
@Override
public short srcPort() {
return srcPort;
}
@Override
public short dstPort() {
return dstPort;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o instanceof TunnelPolicy) {
TunnelPolicy that = (TunnelPolicy) o;
// We do not compare the policy ID
if (this.type.equals(that.type) &&
this.tunnelId.equals(that.tunnelId) &&
this.priority == that.priority &&
this.srcIp.equals(that.srcIp) &&
this.dstIp.equals(that.dstIp) &&
this.srcPort == that.srcPort &&
this.dstPort == that.dstPort &&
this.ipProto.equals(that.ipProto)) {
return true;
}
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(type, tunnelId, srcIp, dstIp, ipProto,
srcPort, dstPort, priority);
}
/**
* Returns the tunnel ID of the policy.
*
* @return Tunnel ID
*/
public String tunnelId() {
return this.tunnelId;
}
/**
* Tunnel Policy Builder.
*/
public static final class Builder {
private String id;
private Type type;
private int priority;
private String tunnelId;
private String dstIp;
private String srcIp;
private String ipProto;
private short srcPort;
private short dstPort;
/**
* Sets the policy Id.
*
* @param id policy Id
* @return Builder object
*/
public Builder setPolicyId(String id) {
this.id = id;
return this;
}
/**
* Sets the policy type.
*
* @param type policy type
* @return Builder object
*/
public Builder setType(Type type) {
this.type = type;
return this;
}
/**
* Sets the source IP address.
*
* @param srcIp source IP address
* @return Builder object
*/
public Builder setSrcIp(String srcIp) {
this.srcIp = srcIp;
return this;
}
/**
* Sets the destination IP address.
*
* @param dstIp destination IP address
* @return Builder object
*/
public Builder setDstIp(String dstIp) {
this.dstIp = dstIp;
return this;
}
/**
* Sets the IP protocol.
*
* @param proto IP protocol
* @return Builder object
*/
public Builder setIpProto(String proto) {
this.ipProto = proto;
return this;
}
/**
* Sets the source port.
*
* @param srcPort source port
* @return Builder object
*/
public Builder setSrcPort(short srcPort) {
this.srcPort = srcPort;
return this;
}
/**
* Sets the destination port.
*
* @param dstPort destination port
* @return Builder object
*/
public Builder setDstPort(short dstPort) {
this.dstPort = dstPort;
return this;
}
/**
* Sets the priority of the policy.
*
* @param p priority
* @return Builder object
*/
public Builder setPriority(int p) {
this.priority = p;
return this;
}
/**
* Sets the tunnel Id.
*
* @param tunnelId tunnel Id
* @return Builder object
*/
public Builder setTunnelId(String tunnelId) {
this.tunnelId = tunnelId;
return this;
}
/**
* Builds the policy.
*
* @return Tunnel Policy reference
*/
public Policy build() {
return new TunnelPolicy(id, type, priority, tunnelId, srcIp, dstIp,
ipProto, srcPort, dstPort);
}
}
}