blob: 88de952581d1bd1aa4443083f71682475a78853a [file] [log] [blame]
Jonathan Hartbac07a02014-10-13 21:29:54 -07001package org.onlab.onos.sdnip.config;
2
3import java.util.Objects;
Jonathan Hartdc711bd2014-10-15 11:24:23 -07004import java.util.Set;
Jonathan Hartbac07a02014-10-13 21:29:54 -07005
Jonathan Hartbac07a02014-10-13 21:29:54 -07006import org.onlab.onos.net.ConnectPoint;
Jonathan Hartdc711bd2014-10-15 11:24:23 -07007import org.onlab.onos.net.host.PortAddresses;
Jonathan Hartbac07a02014-10-13 21:29:54 -07008import org.onlab.packet.IpPrefix;
Jonathan Hartdc711bd2014-10-15 11:24:23 -07009import org.onlab.packet.MacAddress;
10
11import com.google.common.base.MoreObjects;
12import com.google.common.collect.Sets;
Jonathan Hartbac07a02014-10-13 21:29:54 -070013
14/**
Jonathan Hartdc711bd2014-10-15 11:24:23 -070015 * An Interface is a set of addresses that are logically mapped to a switch
16 * port in the network.
Jonathan Hartbac07a02014-10-13 21:29:54 -070017 */
18public class Interface {
Jonathan Hartdc711bd2014-10-15 11:24:23 -070019 private final ConnectPoint connectPoint;
20 private final Set<IpPrefix> ipAddresses;
21 private final MacAddress macAddress;
Jonathan Hartbac07a02014-10-13 21:29:54 -070022
23 /**
Jonathan Hartdc711bd2014-10-15 11:24:23 -070024 * Creates an Interface based on a connection point, a set of IP addresses
25 * and a MAC address.
Jonathan Hartbac07a02014-10-13 21:29:54 -070026 *
Jonathan Hartdc711bd2014-10-15 11:24:23 -070027 * @param connectPoint the connect point this interface is mapped to
28 * @param prefixAddress the IP addresses for the interface
29 * @param macAddress the MAC address of the interface
Jonathan Hartbac07a02014-10-13 21:29:54 -070030 */
Jonathan Hartdc711bd2014-10-15 11:24:23 -070031 public Interface(ConnectPoint connectPoint, Set<IpPrefix> prefixAddress,
32 MacAddress macAddress) {
33 this.connectPoint = connectPoint;
34 this.ipAddresses = Sets.newHashSet(prefixAddress);
35 this.macAddress = macAddress;
Jonathan Hartbac07a02014-10-13 21:29:54 -070036 }
37
38 /**
Jonathan Hartdc711bd2014-10-15 11:24:23 -070039 * Creates an Interface based on a PortAddresses object.
Jonathan Hartbac07a02014-10-13 21:29:54 -070040 *
Jonathan Hartdc711bd2014-10-15 11:24:23 -070041 * @param portAddresses the PortAddresses object to turn into an Interface
Jonathan Hartbac07a02014-10-13 21:29:54 -070042 */
Jonathan Hartdc711bd2014-10-15 11:24:23 -070043 public Interface(PortAddresses portAddresses) {
44 connectPoint = portAddresses.connectPoint();
45 ipAddresses = Sets.newHashSet(portAddresses.ips());
46 macAddress = portAddresses.mac();
Jonathan Hartbac07a02014-10-13 21:29:54 -070047 }
48
49 /**
Jonathan Hartdc711bd2014-10-15 11:24:23 -070050 * Retrieves the connection point that this interface maps to.
Jonathan Hartbac07a02014-10-13 21:29:54 -070051 *
Jonathan Hartdc711bd2014-10-15 11:24:23 -070052 * @return the connection point
Jonathan Hartbac07a02014-10-13 21:29:54 -070053 */
Jonathan Hartdc711bd2014-10-15 11:24:23 -070054 public ConnectPoint connectPoint() {
55 return connectPoint;
Jonathan Hartbac07a02014-10-13 21:29:54 -070056 }
57
58 /**
Jonathan Hartdc711bd2014-10-15 11:24:23 -070059 * Retrieves the set of IP addresses that are assigned to the interface.
Jonathan Hartbac07a02014-10-13 21:29:54 -070060 *
Jonathan Hartdc711bd2014-10-15 11:24:23 -070061 * @return the set of IP addresses
Jonathan Hartbac07a02014-10-13 21:29:54 -070062 */
Jonathan Hartdc711bd2014-10-15 11:24:23 -070063 public Set<IpPrefix> ips() {
64 return ipAddresses;
Jonathan Hartbac07a02014-10-13 21:29:54 -070065 }
66
Jonathan Hartdc711bd2014-10-15 11:24:23 -070067 /**
68 * Retrieves the MAC address that is assigned to the interface.
69 *
70 * @return the MAC address
71 */
72 public MacAddress mac() {
73 return macAddress;
74 }
75
Jonathan Hartbac07a02014-10-13 21:29:54 -070076 @Override
77 public boolean equals(Object other) {
78 if (!(other instanceof Interface)) {
79 return false;
80 }
81
82 Interface otherInterface = (Interface) other;
83
Jonathan Hartdc711bd2014-10-15 11:24:23 -070084 return connectPoint.equals(otherInterface.connectPoint) &&
85 ipAddresses.equals(otherInterface.ipAddresses) &&
86 macAddress.equals(otherInterface.macAddress);
Jonathan Hartbac07a02014-10-13 21:29:54 -070087 }
88
89 @Override
90 public int hashCode() {
Jonathan Hartdc711bd2014-10-15 11:24:23 -070091 return Objects.hash(connectPoint, ipAddresses, macAddress);
92 }
93
94 @Override
95 public String toString() {
96 return MoreObjects.toStringHelper(getClass())
97 .add("connectPoint", connectPoint)
98 .add("ipAddresses", ipAddresses)
99 .add("macAddress", macAddress)
100 .toString();
Jonathan Hartbac07a02014-10-13 21:29:54 -0700101 }
102}