blob: 8a2d6e65bcf58e6aa5d9d6b4a33445aac2821d82 [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 Koshibe1d56fe42014-09-19 16:51:58 -070011import org.onlab.packet.IpPrefix;
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070012import org.onlab.packet.MacAddress;
13import org.onlab.packet.VlanId;
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;
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070023 private final Set<IpPrefix> ips;
Ayaka Koshibe74a23922014-09-09 16:45:39 -070024
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070025 public DefaultHost(ProviderId providerId, HostId id, MacAddress mac,
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070026 VlanId vlan, HostLocation loc, Set<IpPrefix> ips) {
Ayaka Koshibe74a23922014-09-09 16:45:39 -070027 super(providerId, id);
28 this.mac = mac;
29 this.vlan = vlan;
30 this.location = loc;
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070031 this.ips = new HashSet<IpPrefix>(ips);
Ayaka Koshibe74a23922014-09-09 16:45:39 -070032 }
33
34 @Override
35 public HostId id() {
36 return (HostId) super.id();
37 }
38
39 @Override
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070040 public MacAddress mac() {
Ayaka Koshibe74a23922014-09-09 16:45:39 -070041 return mac;
42 }
43
44 @Override
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070045 public Set<IpPrefix> ipAddresses() {
Ayaka Koshibe74a23922014-09-09 16:45:39 -070046 return Collections.unmodifiableSet(ips);
47 }
48
49 @Override
50 public HostLocation location() {
51 return location;
52 }
53
54 @Override
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070055 public VlanId vlan() {
Ayaka Koshibe74a23922014-09-09 16:45:39 -070056 return vlan;
57 }
58
59 @Override
60 public int hashCode() {
61 return Objects.hash(id, mac, vlan, location);
62 }
63
64 @Override
65 public boolean equals(Object obj) {
tomfc9a4ff2014-09-22 18:22:47 -070066 if (this == obj) {
67 return true;
68 }
Ayaka Koshibe74a23922014-09-09 16:45:39 -070069 if (obj instanceof DefaultHost) {
70 final DefaultHost other = (DefaultHost) obj;
71 return Objects.equals(this.id, other.id) &&
72 Objects.equals(this.mac, other.mac) &&
73 Objects.equals(this.vlan, other.vlan) &&
74 Objects.equals(this.location, other.location);
75 }
76 return false;
77 }
78
79 @Override
80 public String toString() {
81 return toStringHelper(this)
82 .add("id", id)
83 .add("mac", mac)
84 .add("vlan", vlan)
85 .add("location", location)
86 .add("ipAddresses", ips)
87 .toString();
88 }
89
90}