/* * Copyright 2014-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.cordvtn; import org.onlab.packet.IpAddress; import org.onlab.packet.MacAddress; import org.onosproject.net.Port; import java.util.List; import static com.google.common.base.Preconditions.checkNotNull; /** * Contains destination information. */ public final class DestinationInfo { private final Port output; private final List ip; private final MacAddress mac; private final IpAddress remoteIp; private final long tunnelId; /** * Creates a new destination information. * * @param output output port * @param ip destination ip address * @param mac destination mac address * @param remoteIp tunnel remote ip address * @param tunnelId segment id */ public DestinationInfo(Port output, List ip, MacAddress mac, IpAddress remoteIp, long tunnelId) { this.output = checkNotNull(output); this.ip = ip; this.mac = mac; this.remoteIp = remoteIp; this.tunnelId = tunnelId; } /** * Returns output port. * * @return port */ public Port output() { return output; } /** * Returns destination ip addresses. * * @return list of ip address */ public List ip() { return ip; } /** * Returns destination mac address. * * @return mac address */ public MacAddress mac() { return mac; } /** * Returns tunnel remote ip address. * * @return ip address */ public IpAddress remoteIp() { return remoteIp; } /** * Returns tunnel id. * * @return tunnel id */ public long tunnelId() { return tunnelId; } /** * Returns a new destination info builder. * * @return destination info builder */ public static DestinationInfo.Builder builder(Port output) { return new Builder(output); } /** * DestinationInfo builder class. */ public static final class Builder { private final Port output; private List ip; private MacAddress mac; private IpAddress remoteIp; private long tunnelId; /** * Creates a new destination information builder. * * @param output output port */ public Builder(Port output) { this.output = checkNotNull(output, "Output port cannot be null"); } /** * Sets the destination ip address. * * @param ip ip address * @return destination info builder */ public Builder setIp(List ip) { this.ip = checkNotNull(ip, "IP cannot be null"); return this; } /** * Sets the destination mac address. * * @param mac mac address * @return destination info builder */ public Builder setMac(MacAddress mac) { this.mac = checkNotNull(mac, "MAC address cannot be null"); return this; } /** * Sets the tunnel remote ip address. * * @param remoteIp ip address * @return destination info builder */ public Builder setRemoteIp(IpAddress remoteIp) { this.remoteIp = checkNotNull(remoteIp, "Remote IP address cannot be null"); return this; } /** * Sets the tunnel id. * * @param tunnelId tunnel id * @return destination info builder */ public Builder setTunnelId(long tunnelId) { this.tunnelId = checkNotNull(tunnelId, "Tunnel ID cannot be null"); return this; } /** * Build a destination information. * * @return destination info object */ public DestinationInfo build() { return new DestinationInfo(this); } } private DestinationInfo(Builder builder) { output = builder.output; ip = builder.ip; mac = builder.mac; remoteIp = builder.remoteIp; tunnelId = builder.tunnelId; } }