/* * Copyright 2015-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; 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); } } }