blob: 53d040cb587862a2c41971db8d6c37bd99672fda [file] [log] [blame]
/*
* Copyright 2016-present 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.pwaas;
import com.google.common.base.MoreObjects;
import org.onlab.packet.VlanId;
import org.onosproject.net.ConnectPoint;
import java.util.Objects;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Implementation of the default l2 tunnel policy.
*/
public class DefaultL2TunnelPolicy {
/**
* Id of the tunnel associated to this policy.
*/
private long tunnelId;
/**
* First connect point.
*/
private ConnectPoint cP1;
/**
* Second connect point.
*/
private ConnectPoint cP2;
/**
* cP1 inner vlan tag. Used in QinQ packets.
*/
private VlanId cP1InnerTag;
/**
* cP1 outer vlan tag.
*/
private VlanId cP1OuterTag;
/**
* cP2 inner vlan tag. Used in QinQ packets.
*/
private VlanId cP2InnerTag;
/**
* cP2 outer vlan tag.
*/
private VlanId cP2OuterTag;
/**
* Boolean value to indicate if the pseudo wire is port based.
*/
private boolean allVlan;
/**
* Creates a default l2 tunnel policy using
* the given parameters.
*
* @param tunnelId the tunnel id
* @param cP1 the first connect point
* @param cP1InnerTag the cP1 inner tag
* @param cP1OuterTag the cP1 outer tag
* @param cP2 the second connect point
* @param cP2InnerTag the cP2 inner tag
* @param cP2OuterTag the cP2 outer tag
* @param allVlan if the tunnel is port based or not
*/
public DefaultL2TunnelPolicy(long tunnelId,
ConnectPoint cP1, VlanId cP1InnerTag, VlanId cP1OuterTag,
ConnectPoint cP2, VlanId cP2InnerTag, VlanId cP2OuterTag,
boolean allVlan) {
this.cP1 = checkNotNull(cP1);
this.cP2 = checkNotNull(cP2);
this.tunnelId = tunnelId;
this.cP1InnerTag = cP1InnerTag;
this.cP1OuterTag = cP1OuterTag;
this.cP2InnerTag = cP2InnerTag;
this.cP2OuterTag = cP2OuterTag;
this.allVlan = allVlan;
}
/**
* Returns the first connect point of the policy.
*
* @return first connect point
*/
public ConnectPoint cP1() {
return cP1;
}
/**
* Returns the second connect point of the policy.
*
* @return second connect point
*/
public ConnectPoint cP2() {
return cP2;
}
/**
* Returns the cP1 inner vlan tag of the policy.
*
* @return cP1 inner vlan tag
*/
public VlanId cP1InnerTag() {
return cP1InnerTag;
}
/**
* Returns the cP1 outer vlan tag of the policy.
*
* @return cP1 outer vlan tag
*/
public VlanId cP1OuterTag() {
return cP1OuterTag;
}
/**
* Returns the cP2 inner vlan tag of the policy.
*
* @return cP2 inner vlan tag
*/
public VlanId cP2InnerTag() {
return cP2InnerTag;
}
/**
* Returns the cP2 outer vlan tag of the policy.
*
* @return cP2 outer vlan tag
*/
public VlanId cP2OuterTag() {
return cP2OuterTag;
}
/**
* Return all vlan value.
*
* @return true, if the pw is port based. False if the traffic is sliced
* through the inner and outer tags
*/
public boolean isAllVlan() {
return allVlan;
}
/**
* Returns the tunnel ID of the policy.
*
* @return Tunnel ID
*/
public long tunnelId() {
return this.tunnelId;
}
@Override
public int hashCode() {
return Objects.hash(tunnelId,
cP1,
cP2,
cP1InnerTag,
cP1OuterTag,
cP2InnerTag,
cP2OuterTag,
allVlan
);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o instanceof DefaultL2TunnelPolicy) {
DefaultL2TunnelPolicy that = (DefaultL2TunnelPolicy) o;
if (this.tunnelId == that.tunnelId &&
this.cP1.equals(that.cP1) &&
this.cP2.equals(that.cP2) &&
this.cP1InnerTag.equals(that.cP1InnerTag) &&
this.cP1OuterTag.equals(that.cP1OuterTag) &&
this.cP2InnerTag.equals(that.cP2InnerTag) &&
this.cP2OuterTag.equals(that.cP2OuterTag) &&
this.allVlan == that.allVlan) {
return true;
}
}
return false;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("tunnelId", tunnelId())
.add("cP1", cP1())
.add("cP2", cP2())
.add("cP1InnerTag", cP1InnerTag())
.add("cP1OuterTag", cP1OuterTag())
.add("cP2InnerTag", cP2InnerTag())
.add("cP2OuterTag", cP2OuterTag())
.add("allVlan", isAllVlan())
.toString();
}
}