blob: 5067049a6a970577c66110f62a9160b23737763d [file] [log] [blame]
Jonathan Hart472062d2014-04-03 10:56:48 -07001package net.onrc.onos.core.topology;
Jonathan Hart062a2e82014-02-03 09:41:57 -08002
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -07003import java.util.Collection;
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -07004import java.util.Map;
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -07005
Pavlin Radoslavova5637c02014-07-30 15:55:11 -07006import static com.google.common.base.Preconditions.checkNotNull;
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -07007
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -07008import net.onrc.onos.core.util.Dpid;
9import net.onrc.onos.core.util.PortNumber;
Jonathan Hart25bd53e2014-04-30 23:44:09 -070010import net.onrc.onos.core.util.SwitchPort;
11
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080012/**
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070013 * Handler to Port object stored in In-memory Topology snapshot.
Ray Milkey269ffb92014-04-03 14:43:30 -070014 * <p/>
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080015 */
Jonathan Harte37e4e22014-05-13 19:12:02 -070016public class PortImpl extends TopologyObject implements Port {
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080017
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070018 private final SwitchPort id;
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080019
Jonathan Hart25bd53e2014-04-30 23:44:09 -070020
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070021 /**
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070022 * Creates a Port handler object.
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070023 *
24 * @param topology Topology instance this object belongs to
25 * @param switchPort SwitchPort
26 */
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070027 PortImpl(TopologyInternal topology, SwitchPort switchPort) {
28 super(topology);
Pavlin Radoslavova5637c02014-07-30 15:55:11 -070029 this.id = checkNotNull(switchPort);
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070030 }
31
32 /**
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070033 * Creates a Port handler object.
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070034 *
35 * @param topology Topology instance this object belongs to
36 * @param dpid DPID
37 * @param number PortNumber
38 */
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070039 PortImpl(TopologyInternal topology, Dpid dpid, PortNumber number) {
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070040 this(topology, new SwitchPort(dpid, number));
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070041 }
42
Ray Milkey269ffb92014-04-03 14:43:30 -070043 @Override
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070044 public Dpid getDpid() {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070045 return getSwitchPort().getDpid();
Ray Milkey269ffb92014-04-03 14:43:30 -070046 }
Yuta HIGUCHIea516d62014-02-13 15:59:32 -080047
Ray Milkey269ffb92014-04-03 14:43:30 -070048 @Override
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070049 public PortNumber getNumber() {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070050 return getPortNumber();
Ray Milkey269ffb92014-04-03 14:43:30 -070051 }
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080052
Ray Milkey269ffb92014-04-03 14:43:30 -070053 @Override
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070054 public PortNumber getPortNumber() {
55 return getSwitchPort().getPortNumber();
56 }
57
58 @Override
59 public SwitchPort getSwitchPort() {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070060 return id;
Jonathan Hart25bd53e2014-04-30 23:44:09 -070061 }
62
63 @Override
Ray Milkey269ffb92014-04-03 14:43:30 -070064 public String getDescription() {
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070065 return getStringAttribute(PortEvent.DESCRIPTION, "");
Ray Milkey269ffb92014-04-03 14:43:30 -070066 }
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080067
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -070068 @Override
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070069 public Long getHardwareAddress() {
70 // TODO implement using attributes?
71 throw new UnsupportedOperationException("Not implemented yet");
72 }
73
74 @Override
75 public Switch getSwitch() {
76 topology.acquireReadLock();
77 try {
78 return topology.getSwitch(getDpid());
79 } finally {
80 topology.releaseReadLock();
81 }
82 }
83
84 @Override
85 public Link getOutgoingLink() {
86 topology.acquireReadLock();
87 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070088 return topology.getOutgoingLink(getSwitchPort());
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070089 } finally {
90 topology.releaseReadLock();
91 }
92 }
93
94 @Override
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -070095 public Link getOutgoingLink(String type) {
96 topology.acquireReadLock();
97 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070098 return topology.getOutgoingLink(getSwitchPort(), type);
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -070099 } finally {
100 topology.releaseReadLock();
101 }
102 }
103
104 @Override
105 public Collection<Link> getOutgoingLinks() {
106 topology.acquireReadLock();
107 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -0700108 return topology.getOutgoingLinks(getSwitchPort());
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -0700109 } finally {
110 topology.releaseReadLock();
111 }
112 }
113
114 @Override
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700115 public Link getIncomingLink() {
116 topology.acquireReadLock();
117 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -0700118 return topology.getIncomingLink(getSwitchPort());
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700119 } finally {
120 topology.releaseReadLock();
121 }
122 }
123
124 @Override
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -0700125 public Link getIncomingLink(String type) {
126 topology.acquireReadLock();
127 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -0700128 return topology.getIncomingLink(getSwitchPort(), type);
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -0700129 } finally {
130 topology.releaseReadLock();
131 }
132 }
133
134 @Override
135 public Collection<Link> getIncomingLinks() {
136 topology.acquireReadLock();
137 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -0700138 return topology.getIncomingLinks(getSwitchPort());
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -0700139 } finally {
140 topology.releaseReadLock();
141 }
142 }
143
144 @Override
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700145 public Collection<Host> getHosts() {
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700146 topology.acquireReadLock();
147 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -0700148 return topology.getHosts(this.getSwitchPort());
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700149 } finally {
150 topology.releaseReadLock();
151 }
152 }
153
Praseed Balakrishnanfa21be12014-07-15 14:42:26 -0700154 /**
155 * Returns the port type of this port.
156 *
157 * @return {@link net.onrc.onos.core.topology.PortType}
158 */
159 @Override
160 public PortType getPortType() {
161 return PortType.valueOf(getStringAttribute(TopologyElement.ELEMENT_TYPE,
162 PortType.ETHERNET_PORT.toString()));
163 }
164
165
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700166 @Override
167 public String getStringAttribute(String attr) {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700168 return this.topology.getPortEvent(id).getStringAttribute(attr);
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700169 }
170
171 @Override
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -0700172 public String getStringAttribute(String attr, String def) {
173 final String v = getStringAttribute(attr);
174 if (v == null) {
175 return def;
176 } else {
177 return v;
178 }
179 }
180
181 @Override
182 public Map<String, String> getAllStringAttributes() {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700183 return this.topology.getPortEvent(id).getAllStringAttributes();
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -0700184 }
185
186 @Override
Ray Milkey269ffb92014-04-03 14:43:30 -0700187 public String toString() {
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700188 return String.format("%s:%s",
Ray Milkey269ffb92014-04-03 14:43:30 -0700189 getSwitch().getDpid(),
190 getNumber());
191 }
Praseed Balakrishnan57ed8432014-06-26 11:49:56 -0700192
193
194 /**
195 * Returns the type of topology object.
196 *
197 * @return the type of the topology object
198 */
199 @Override
200 public String getType() {
Yuta HIGUCHIdbc33122014-07-10 13:32:32 -0700201 return getStringAttribute(TopologyElement.TYPE, TopologyElement.TYPE_PACKET_LAYER);
Praseed Balakrishnan57ed8432014-06-26 11:49:56 -0700202 }
Praseed Balakrishnan2aa6c0b2014-07-17 11:42:05 -0700203
204 /**
205 * Returns the config state of topology element.
206 *
207 * @return ConfigState
208 */
209 @Override
210 public ConfigState getConfigState() {
211 return ConfigState.valueOf(getStringAttribute(TopologyElement.ELEMENT_CONFIG_STATE));
212
213 }
214
215 /**
216 * Returns the status of topology element.
217 *
218 * @return AdminStatus
219 */
220 @Override
221 public AdminStatus getStatus() {
222 return AdminStatus.valueOf(getStringAttribute(TopologyElement.ELEMENT_ADMIN_STATUS));
223 }
Jonathan Hart062a2e82014-02-03 09:41:57 -0800224}