blob: d8d6c622d4764bb93e6d81a9b0ef002d4140fc4d [file] [log] [blame]
Ayaka Koshibe74a23922014-09-09 16:45:39 -07001package org.onlab.onos.net;
2
tomf5d85d42014-10-02 05:27:56 -07003import org.onlab.onos.net.provider.ProviderId;
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -07004import org.onlab.packet.IpAddress;
tomf5d85d42014-10-02 05:27:56 -07005import org.onlab.packet.MacAddress;
6import org.onlab.packet.VlanId;
Ayaka Koshibe74a23922014-09-09 16:45:39 -07007
8import java.util.Collections;
9import java.util.HashSet;
10import java.util.Objects;
11import java.util.Set;
12
tomf5d85d42014-10-02 05:27:56 -070013import static com.google.common.base.MoreObjects.toStringHelper;
Ayaka Koshibe74a23922014-09-09 16:45:39 -070014
Ayaka Koshibe1c7b38e2014-09-11 13:09:51 -070015/**
16 * A basic implementation of a Host.
17 */
Ayaka Koshibe74a23922014-09-09 16:45:39 -070018public class DefaultHost extends AbstractElement implements Host {
19
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070020 private final MacAddress mac;
21 private final VlanId vlan;
Ayaka Koshibe74a23922014-09-09 16:45:39 -070022 private final HostLocation location;
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -070023 private final Set<IpAddress> ips;
Ayaka Koshibe74a23922014-09-09 16:45:39 -070024
tomf5d85d42014-10-02 05:27:56 -070025 /**
26 * Creates an end-station host using the supplied information.
27 *
28 * @param providerId provider identity
29 * @param id host identifier
30 * @param mac host MAC address
31 * @param vlan host VLAN identifier
32 * @param location host location
33 * @param ips host IP addresses
34 * @param annotations optional key/value annotations
35 */
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070036 public DefaultHost(ProviderId providerId, HostId id, MacAddress mac,
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -070037 VlanId vlan, HostLocation location, Set<IpAddress> ips,
tomf5d85d42014-10-02 05:27:56 -070038 Annotations... annotations) {
39 super(providerId, id, annotations);
Ayaka Koshibe74a23922014-09-09 16:45:39 -070040 this.mac = mac;
41 this.vlan = vlan;
tomf5d85d42014-10-02 05:27:56 -070042 this.location = location;
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -070043 this.ips = new HashSet<>(ips);
Ayaka Koshibe74a23922014-09-09 16:45:39 -070044 }
45
46 @Override
47 public HostId id() {
tom5a9383a2014-10-02 07:33:52 -070048 return (HostId) id;
Ayaka Koshibe74a23922014-09-09 16:45:39 -070049 }
50
51 @Override
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070052 public MacAddress mac() {
Ayaka Koshibe74a23922014-09-09 16:45:39 -070053 return mac;
54 }
55
56 @Override
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -070057 public Set<IpAddress> ipAddresses() {
Ayaka Koshibe74a23922014-09-09 16:45:39 -070058 return Collections.unmodifiableSet(ips);
59 }
60
61 @Override
62 public HostLocation location() {
63 return location;
64 }
65
66 @Override
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070067 public VlanId vlan() {
Ayaka Koshibe74a23922014-09-09 16:45:39 -070068 return vlan;
69 }
70
71 @Override
72 public int hashCode() {
73 return Objects.hash(id, mac, vlan, location);
74 }
75
76 @Override
77 public boolean equals(Object obj) {
tomfc9a4ff2014-09-22 18:22:47 -070078 if (this == obj) {
79 return true;
80 }
Ayaka Koshibe74a23922014-09-09 16:45:39 -070081 if (obj instanceof DefaultHost) {
82 final DefaultHost other = (DefaultHost) obj;
83 return Objects.equals(this.id, other.id) &&
84 Objects.equals(this.mac, other.mac) &&
85 Objects.equals(this.vlan, other.vlan) &&
86 Objects.equals(this.location, other.location);
87 }
88 return false;
89 }
90
91 @Override
92 public String toString() {
93 return toStringHelper(this)
94 .add("id", id)
95 .add("mac", mac)
96 .add("vlan", vlan)
97 .add("location", location)
98 .add("ipAddresses", ips)
99 .toString();
100 }
101
102}