blob: 90af82b8cd1aac4b3142b5ff0fd12e7a6fc0a142 [file] [log] [blame]
Jonathan Hart472062d2014-04-03 10:56:48 -07001package net.onrc.onos.core.topology;
Toshio Koide5799b602014-02-10 15:29:06 -08002
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -07003import java.util.ArrayList;
4import java.util.List;
5
Pavlin Radoslavova5637c02014-07-30 15:55:11 -07006import static com.google.common.base.Preconditions.checkNotNull;
Toshio Koide5799b602014-02-10 15:29:06 -08007import net.floodlightcontroller.util.MACAddress;
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -07008import net.onrc.onos.core.util.SwitchPort;
Toshio Koide5799b602014-02-10 15:29:06 -08009
10/**
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070011 * Handler to Host object stored in In-memory Topology snapshot.
Toshio Koide5799b602014-02-10 15:29:06 -080012 */
Yuta HIGUCHIbfc77f02014-07-14 22:50:25 -070013public class HostImpl extends TopologyObject implements Host {
Toshio Koide5799b602014-02-10 15:29:06 -080014
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070015 private final MACAddress id;
Toshio Koide5799b602014-02-10 15:29:06 -080016
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070017
18 /**
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070019 * Creates a Host handler object.
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070020 *
21 * @param topology Topology instance this object belongs to
22 * @param mac MAC address of the host
23 */
Yuta HIGUCHI9e6223d2014-08-26 00:01:32 -070024 HostImpl(BaseInternalTopology topology, MACAddress mac) {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070025 super(topology);
Pavlin Radoslavova5637c02014-07-30 15:55:11 -070026 this.id = checkNotNull(mac);
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080027 }
Toshio Koide5799b602014-02-10 15:29:06 -080028
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080029 @Override
30 public MACAddress getMacAddress() {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070031 return id;
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080032 }
Toshio Koide5799b602014-02-10 15:29:06 -080033
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080034 @Override
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080035 public Iterable<Port> getAttachmentPoints() {
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070036 List<Port> ports = new ArrayList<>();
Yuta HIGUCHI9e6223d2014-08-26 00:01:32 -070037 final BaseTopologyAdaptor topo = new BaseTopologyAdaptor(topology);
38 for (SwitchPort swp : getHostEvent().getAttachmentPoints()) {
39 Port port = topo.getPort(swp);
40 if (port != null) {
41 ports.add(port);
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070042 }
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070043 }
44 return ports;
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080045 }
46
47 @Override
48 public long getLastSeenTime() {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070049 return this.topology.getHostEvent(id).getLastSeenTime();
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080050 }
51
52 @Override
53 public String toString() {
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070054 return getMacAddress().toString();
TeruUd1c5b652014-03-24 13:58:46 -070055 }
Ray Milkey269ffb92014-04-03 14:43:30 -070056
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080057 /**
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070058 * Gets the current HostEvent.
Ray Milkey269ffb92014-04-03 14:43:30 -070059 *
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070060 * @return HostEvent
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080061 */
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070062 private HostEvent getHostEvent() {
63 return this.topology.getHostEvent(id);
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080064 }
65
66 /**
Praseed Balakrishnan57ed8432014-06-26 11:49:56 -070067 * Returns the type of topology object.
68 *
69 * @return the type of the topology object
70 */
71 @Override
72 public String getType() {
Pavlin Radoslavov53b208a2014-07-28 13:16:11 -070073 // FIXME assuming Host is always in packet layer for now.
Yuta HIGUCHIdbc33122014-07-10 13:32:32 -070074 return TopologyElement.TYPE_PACKET_LAYER;
Praseed Balakrishnan57ed8432014-06-26 11:49:56 -070075 }
Praseed Balakrishnan2aa6c0b2014-07-17 11:42:05 -070076
77 /**
78 * Returns the config state of topology element.
79 *
80 * @return ConfigState
81 */
82 @Override
83 public ConfigState getConfigState() {
84 return ConfigState.NOT_CONFIGURED;
85 }
86
87 /**
88 * Returns the status of topology element.
89 *
90 * @return AdminStatus
91 */
92 @Override
93 public AdminStatus getStatus() {
94 return AdminStatus.ACTIVE;
95 }
Toshio Koide5799b602014-02-10 15:29:06 -080096}