blob: 09829fe31649869f628f942a9199c28f90fd6b0a [file] [log] [blame]
Ayaka Koshibe74a23922014-09-09 16:45:39 -07001package org.onlab.onos.net;
2
3import static com.google.common.base.MoreObjects.toStringHelper;
4
5import java.util.Collections;
6import java.util.HashSet;
7import java.util.Objects;
8import java.util.Set;
9
10import org.onlab.onos.net.provider.ProviderId;
Ayaka Koshibe1c7b38e2014-09-11 13:09:51 -070011import org.onlab.packet.IPAddress;
Ayaka Koshibe74a23922014-09-09 16:45:39 -070012import org.onlab.packet.MACAddress;
13
Ayaka Koshibe1c7b38e2014-09-11 13:09:51 -070014/**
15 * A basic implementation of a Host.
16 */
Ayaka Koshibe74a23922014-09-09 16:45:39 -070017public class DefaultHost extends AbstractElement implements Host {
18
19 private final MACAddress mac;
20 private final short vlan;
21 private final HostLocation location;
Ayaka Koshibe1c7b38e2014-09-11 13:09:51 -070022 private final Set<IPAddress> ips;
Ayaka Koshibe74a23922014-09-09 16:45:39 -070023
Ayaka Koshibee5652752014-09-10 23:27:34 -070024 public DefaultHost(ProviderId providerId, ElementId id, MACAddress mac,
Ayaka Koshibe1c7b38e2014-09-11 13:09:51 -070025 short vlan, HostLocation loc, Set<IPAddress> ips) {
Ayaka Koshibe74a23922014-09-09 16:45:39 -070026 super(providerId, id);
27 this.mac = mac;
28 this.vlan = vlan;
29 this.location = loc;
Ayaka Koshibe1c7b38e2014-09-11 13:09:51 -070030 this.ips = new HashSet<IPAddress>(ips);
Ayaka Koshibe74a23922014-09-09 16:45:39 -070031 }
32
33 @Override
34 public HostId id() {
35 return (HostId) super.id();
36 }
37
38 @Override
39 public MACAddress mac() {
40 return mac;
41 }
42
43 @Override
Ayaka Koshibe1c7b38e2014-09-11 13:09:51 -070044 public Set<IPAddress> ipAddresses() {
Ayaka Koshibe74a23922014-09-09 16:45:39 -070045 return Collections.unmodifiableSet(ips);
46 }
47
48 @Override
49 public HostLocation location() {
50 return location;
51 }
52
53 @Override
54 public short vlan() {
55 return vlan;
56 }
57
58 @Override
59 public int hashCode() {
60 return Objects.hash(id, mac, vlan, location);
61 }
62
63 @Override
64 public boolean equals(Object obj) {
65 if (obj instanceof DefaultHost) {
66 final DefaultHost other = (DefaultHost) obj;
67 return Objects.equals(this.id, other.id) &&
68 Objects.equals(this.mac, other.mac) &&
69 Objects.equals(this.vlan, other.vlan) &&
70 Objects.equals(this.location, other.location);
71 }
72 return false;
73 }
74
75 @Override
76 public String toString() {
77 return toStringHelper(this)
78 .add("id", id)
79 .add("mac", mac)
80 .add("vlan", vlan)
81 .add("location", location)
82 .add("ipAddresses", ips)
83 .toString();
84 }
85
86}