blob: ed26e14c69a8e71c6f4442f0bf49c0a0f70416d5 [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 Koshibea9c199f2014-09-16 16:21:40 -070011import org.onlab.packet.IpAddress;
12import 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 Koshibea9c199f2014-09-16 16:21:40 -070023 private final Set<IpAddress> 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,
26 VlanId vlan, HostLocation loc, Set<IpAddress> 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 Koshibea9c199f2014-09-16 16:21:40 -070031 this.ips = new HashSet<IpAddress>(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 Koshibea9c199f2014-09-16 16:21:40 -070045 public Set<IpAddress> 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) {
66 if (obj instanceof DefaultHost) {
67 final DefaultHost other = (DefaultHost) obj;
68 return Objects.equals(this.id, other.id) &&
69 Objects.equals(this.mac, other.mac) &&
70 Objects.equals(this.vlan, other.vlan) &&
71 Objects.equals(this.location, other.location);
72 }
73 return false;
74 }
75
76 @Override
77 public String toString() {
78 return toStringHelper(this)
79 .add("id", id)
80 .add("mac", mac)
81 .add("vlan", vlan)
82 .add("location", location)
83 .add("ipAddresses", ips)
84 .toString();
85 }
86
87}