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