blob: 2521a9a72ded7739c7bf8a39e1110c7be657525f [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
6import org.apache.commons.lang.Validate;
7
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);
29 Validate.notNull(switchPort);
30 this.id = switchPort;
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070031 }
32
33 /**
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070034 * Creates a Port handler object.
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070035 *
36 * @param topology Topology instance this object belongs to
37 * @param dpid DPID
38 * @param number PortNumber
39 */
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070040 PortImpl(TopologyInternal topology, Dpid dpid, PortNumber number) {
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070041 this(topology, new SwitchPort(dpid, number));
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070042 }
43
Ray Milkey269ffb92014-04-03 14:43:30 -070044 @Override
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070045 public Dpid getDpid() {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070046 return getSwitchPort().getDpid();
Ray Milkey269ffb92014-04-03 14:43:30 -070047 }
Yuta HIGUCHIea516d62014-02-13 15:59:32 -080048
Ray Milkey269ffb92014-04-03 14:43:30 -070049 @Override
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070050 public PortNumber getNumber() {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070051 return getPortNumber();
Ray Milkey269ffb92014-04-03 14:43:30 -070052 }
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080053
Ray Milkey269ffb92014-04-03 14:43:30 -070054 @Override
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070055 public PortNumber getPortNumber() {
56 return getSwitchPort().getPortNumber();
57 }
58
59 @Override
60 public SwitchPort getSwitchPort() {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070061 return id;
Jonathan Hart25bd53e2014-04-30 23:44:09 -070062 }
63
64 @Override
Ray Milkey269ffb92014-04-03 14:43:30 -070065 public String getDescription() {
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070066 return getStringAttribute(PortEvent.DESCRIPTION, "");
Ray Milkey269ffb92014-04-03 14:43:30 -070067 }
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080068
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -070069 @Override
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070070 public Long getHardwareAddress() {
71 // TODO implement using attributes?
72 throw new UnsupportedOperationException("Not implemented yet");
73 }
74
75 @Override
76 public Switch getSwitch() {
77 topology.acquireReadLock();
78 try {
79 return topology.getSwitch(getDpid());
80 } finally {
81 topology.releaseReadLock();
82 }
83 }
84
85 @Override
86 public Link getOutgoingLink() {
87 topology.acquireReadLock();
88 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070089 return topology.getOutgoingLink(getSwitchPort());
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070090 } finally {
91 topology.releaseReadLock();
92 }
93 }
94
95 @Override
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -070096 public Link getOutgoingLink(String type) {
97 topology.acquireReadLock();
98 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070099 return topology.getOutgoingLink(getSwitchPort(), type);
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -0700100 } finally {
101 topology.releaseReadLock();
102 }
103 }
104
105 @Override
106 public Collection<Link> getOutgoingLinks() {
107 topology.acquireReadLock();
108 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -0700109 return topology.getOutgoingLinks(getSwitchPort());
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -0700110 } finally {
111 topology.releaseReadLock();
112 }
113 }
114
115 @Override
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700116 public Link getIncomingLink() {
117 topology.acquireReadLock();
118 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -0700119 return topology.getIncomingLink(getSwitchPort());
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700120 } finally {
121 topology.releaseReadLock();
122 }
123 }
124
125 @Override
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -0700126 public Link getIncomingLink(String type) {
127 topology.acquireReadLock();
128 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -0700129 return topology.getIncomingLink(getSwitchPort(), type);
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -0700130 } finally {
131 topology.releaseReadLock();
132 }
133 }
134
135 @Override
136 public Collection<Link> getIncomingLinks() {
137 topology.acquireReadLock();
138 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -0700139 return topology.getIncomingLinks(getSwitchPort());
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -0700140 } finally {
141 topology.releaseReadLock();
142 }
143 }
144
145 @Override
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700146 public Collection<Host> getHosts() {
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700147 topology.acquireReadLock();
148 try {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -0700149 return topology.getHosts(this.getSwitchPort());
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700150 } finally {
151 topology.releaseReadLock();
152 }
153 }
154
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700155 @Override
156 public String getStringAttribute(String attr) {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700157 return this.topology.getPortEvent(id).getStringAttribute(attr);
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700158 }
159
160 @Override
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -0700161 public String getStringAttribute(String attr, String def) {
162 final String v = getStringAttribute(attr);
163 if (v == null) {
164 return def;
165 } else {
166 return v;
167 }
168 }
169
170 @Override
171 public Map<String, String> getAllStringAttributes() {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700172 return this.topology.getPortEvent(id).getAllStringAttributes();
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -0700173 }
174
175 @Override
Ray Milkey269ffb92014-04-03 14:43:30 -0700176 public String toString() {
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700177 return String.format("%s:%s",
Ray Milkey269ffb92014-04-03 14:43:30 -0700178 getSwitch().getDpid(),
179 getNumber());
180 }
Praseed Balakrishnan57ed8432014-06-26 11:49:56 -0700181
182
183 /**
184 * Returns the type of topology object.
185 *
186 * @return the type of the topology object
187 */
188 @Override
189 public String getType() {
Yuta HIGUCHIdbc33122014-07-10 13:32:32 -0700190 return getStringAttribute(TopologyElement.TYPE, TopologyElement.TYPE_PACKET_LAYER);
Praseed Balakrishnan57ed8432014-06-26 11:49:56 -0700191 }
Praseed Balakrishnan2aa6c0b2014-07-17 11:42:05 -0700192
193 /**
194 * Returns the config state of topology element.
195 *
196 * @return ConfigState
197 */
198 @Override
199 public ConfigState getConfigState() {
200 return ConfigState.valueOf(getStringAttribute(TopologyElement.ELEMENT_CONFIG_STATE));
201
202 }
203
204 /**
205 * Returns the status of topology element.
206 *
207 * @return AdminStatus
208 */
209 @Override
210 public AdminStatus getStatus() {
211 return AdminStatus.valueOf(getStringAttribute(TopologyElement.ELEMENT_ADMIN_STATUS));
212 }
Jonathan Hart062a2e82014-02-03 09:41:57 -0800213}