blob: 8f46f31492619b394ed81ddff48fd5f1ff2661cc [file] [log] [blame]
Toshio Koide5799b602014-02-10 15:29:06 -08001package net.onrc.onos.ofcontroller.networkgraph;
2
3import java.net.InetAddress;
4import java.util.Collection;
Yuta HIGUCHIc0366272014-02-10 21:04:57 -08005import java.util.Collections;
6import java.util.HashSet;
Toshio Koide5799b602014-02-10 15:29:06 -08007import java.util.LinkedList;
Yuta HIGUCHIc0366272014-02-10 21:04:57 -08008import java.util.Set;
Toshio Koide5799b602014-02-10 15:29:06 -08009
10import net.floodlightcontroller.util.MACAddress;
11
12/**
13 * @author Toshio Koide (t-koide@onlab.us)
14 */
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080015public class DeviceImpl extends NetworkGraphObject implements Device {
Toshio Koide5799b602014-02-10 15:29:06 -080016
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080017 private final MACAddress macAddr;
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080018 protected LinkedList<Port> attachmentPoints;
19 protected Set<InetAddress> ipAddresses;
TeruUd1c5b652014-03-24 13:58:46 -070020 private long lastSeenTime;
Toshio Koide5799b602014-02-10 15:29:06 -080021
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080022 public DeviceImpl(NetworkGraph graph, MACAddress mac) {
TeruUd1c5b652014-03-24 13:58:46 -070023 super(graph);
24 this.macAddr = mac;
25 this.attachmentPoints = new LinkedList<>();
26 this.ipAddresses = new HashSet<>();
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() {
TeruUd1c5b652014-03-24 13:58:46 -070031 return this.macAddr;
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
35 public Collection<InetAddress> getIpAddress() {
TeruUd1c5b652014-03-24 13:58:46 -070036 return Collections.unmodifiableSet(ipAddresses);
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080037 }
38
39 @Override
40 public Iterable<Port> getAttachmentPoints() {
TeruUd1c5b652014-03-24 13:58:46 -070041 return Collections.unmodifiableList(this.attachmentPoints);
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080042 }
43
44 @Override
45 public long getLastSeenTime() {
TeruUd1c5b652014-03-24 13:58:46 -070046 return lastSeenTime;
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080047 }
48
49 @Override
50 public String toString() {
TeruUd1c5b652014-03-24 13:58:46 -070051 return macAddr.toString();
52 }
53
54 void setLastSeenTime(long lastSeenTime) {
55 this.lastSeenTime = lastSeenTime;
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080056 }
57
58 /**
Pavlin Radoslavovdb7dbb22014-02-18 14:45:10 -080059 * Only {@link TopologyManager} should use this method
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080060 * @param p
61 */
62 void addAttachmentPoint(Port p) {
TeruUd1c5b652014-03-24 13:58:46 -070063 this.attachmentPoints.remove(p);
64 this.attachmentPoints.addFirst(p);
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080065 }
66
67 /**
Pavlin Radoslavovdb7dbb22014-02-18 14:45:10 -080068 * Only {@link TopologyManager} should use this method
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080069 * @param p
70 */
71 boolean removeAttachmentPoint(Port p) {
TeruUd1c5b652014-03-24 13:58:46 -070072 return this.attachmentPoints.remove(p);
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080073 }
74
75 /**
Pavlin Radoslavovdb7dbb22014-02-18 14:45:10 -080076 * Only {@link TopologyManager} should use this method
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080077 * @param p
78 */
79 boolean addIpAddress(InetAddress addr) {
TeruUd1c5b652014-03-24 13:58:46 -070080 return this.ipAddresses.add(addr);
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080081 }
82
83 /**
Pavlin Radoslavovdb7dbb22014-02-18 14:45:10 -080084 * Only {@link TopologyManager} should use this method
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080085 * @param p
86 */
87 boolean removeIpAddress(InetAddress addr) {
TeruUd1c5b652014-03-24 13:58:46 -070088 return this.ipAddresses.remove(addr);
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080089 }
Toshio Koide5799b602014-02-10 15:29:06 -080090}