blob: b6d1239d301bd7b1b95bf7e976f556501b764d6c [file] [log] [blame]
Jonathan Hartac60c082014-09-23 08:55:17 -07001package org.onlab.onos.net.host;
2
Jonathan Hartc884f1b2014-09-24 11:53:33 -07003import java.util.Collections;
Jonathan Hart09585c62014-09-23 16:58:04 -07004import java.util.HashSet;
Jonathan Hartc884f1b2014-09-24 11:53:33 -07005import java.util.Objects;
Jonathan Hart09585c62014-09-23 16:58:04 -07006import java.util.Set;
7
Jonathan Hartac60c082014-09-23 08:55:17 -07008import org.onlab.onos.net.ConnectPoint;
Jonathan Hartac60c082014-09-23 08:55:17 -07009import org.onlab.packet.MacAddress;
10
Jonathan Hart74f9c3b2014-09-29 20:03:50 -070011import com.google.common.base.MoreObjects;
12
Jonathan Hartac60c082014-09-23 08:55:17 -070013/**
14 * Represents address information bound to a port.
15 */
Jonathan Hart09585c62014-09-23 16:58:04 -070016public class PortAddresses {
17
18 private final ConnectPoint connectPoint;
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -070019 private final Set<InterfaceIpAddress> ipAddresses;
Jonathan Hart09585c62014-09-23 16:58:04 -070020 private final MacAddress macAddress;
21
22 /**
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -070023 * Constructs a PortAddresses object for the given connection point, with a
Jonathan Hart09585c62014-09-23 16:58:04 -070024 * set of IP addresses and a MAC address.
25 * <p/>
26 * Both address parameters are optional and can be set to null.
27 *
28 * @param connectPoint the connection point these addresses are for
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -070029 * @param ipAddresses a set of interface IP addresses
Jonathan Hart09585c62014-09-23 16:58:04 -070030 * @param mac a MAC address
31 */
32 public PortAddresses(ConnectPoint connectPoint,
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -070033 Set<InterfaceIpAddress> ipAddresses, MacAddress mac) {
Jonathan Hart09585c62014-09-23 16:58:04 -070034 this.connectPoint = connectPoint;
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -070035 this.ipAddresses = (ipAddresses == null) ?
36 Collections.<InterfaceIpAddress>emptySet()
37 : new HashSet<>(ipAddresses);
Jonathan Hart09585c62014-09-23 16:58:04 -070038 this.macAddress = mac;
39 }
Jonathan Hartac60c082014-09-23 08:55:17 -070040
41 /**
42 * Returns the connection point this address information is bound to.
43 *
44 * @return the connection point
45 */
Jonathan Hart09585c62014-09-23 16:58:04 -070046 public ConnectPoint connectPoint() {
47 return connectPoint;
48 }
Jonathan Hartac60c082014-09-23 08:55:17 -070049
50 /**
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -070051 * Returns the set of interface IP addresses.
Jonathan Hartac60c082014-09-23 08:55:17 -070052 *
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -070053 * @return the interface IP addresses
Jonathan Hartac60c082014-09-23 08:55:17 -070054 */
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -070055 public Set<InterfaceIpAddress> ipAddresses() {
Jonathan Hart09585c62014-09-23 16:58:04 -070056 return ipAddresses;
57 }
Jonathan Hartac60c082014-09-23 08:55:17 -070058
59 /**
Jonathan Hart09585c62014-09-23 16:58:04 -070060 * Returns the MAC address.
Jonathan Hartac60c082014-09-23 08:55:17 -070061 *
Jonathan Hart09585c62014-09-23 16:58:04 -070062 * @return the MAC address
Jonathan Hartac60c082014-09-23 08:55:17 -070063 */
Jonathan Hart09585c62014-09-23 16:58:04 -070064 public MacAddress mac() {
65 return macAddress;
66 }
67
Jonathan Hartc884f1b2014-09-24 11:53:33 -070068 @Override
69 public boolean equals(Object other) {
70 if (this == other) {
71 return true;
72 }
73
74 if (!(other instanceof PortAddresses)) {
75 return false;
76 }
77
78 PortAddresses otherPa = (PortAddresses) other;
79
80 return Objects.equals(this.connectPoint, otherPa.connectPoint)
81 && Objects.equals(this.ipAddresses, otherPa.ipAddresses)
82 && Objects.equals(this.macAddress, otherPa.macAddress);
83 }
84
85 @Override
86 public int hashCode() {
87 return Objects.hash(connectPoint, ipAddresses, macAddress);
88 }
Jonathan Hart74f9c3b2014-09-29 20:03:50 -070089
90 @Override
91 public String toString() {
92 return MoreObjects.toStringHelper(getClass())
93 .add("connect-point", connectPoint)
94 .add("ip-addresses", ipAddresses)
95 .add("mac-address", macAddress)
96 .toString();
97 }
Jonathan Hartac60c082014-09-23 08:55:17 -070098}