blob: 4e0da5e94d809cb43794cf3baf2ebf72908d0a84 [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 HIGUCHIbf0a8712014-06-30 18:59:46 -070046 return asSwitchPort().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 HIGUCHIbf0a8712014-06-30 18:59:46 -070051 return asSwitchPort().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
Jonathan Hart25bd53e2014-04-30 23:44:09 -070055 public SwitchPort asSwitchPort() {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070056 return id;
Jonathan Hart25bd53e2014-04-30 23:44:09 -070057 }
58
59 @Override
Ray Milkey269ffb92014-04-03 14:43:30 -070060 public String getDescription() {
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070061 return getStringAttribute(PortEvent.DESCRIPTION, "");
Ray Milkey269ffb92014-04-03 14:43:30 -070062 }
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080063
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -070064 @Override
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070065 public Long getHardwareAddress() {
66 // TODO implement using attributes?
67 throw new UnsupportedOperationException("Not implemented yet");
68 }
69
70 @Override
71 public Switch getSwitch() {
72 topology.acquireReadLock();
73 try {
74 return topology.getSwitch(getDpid());
75 } finally {
76 topology.releaseReadLock();
77 }
78 }
79
80 @Override
81 public Link getOutgoingLink() {
82 topology.acquireReadLock();
83 try {
84 return topology.getOutgoingLink(asSwitchPort());
85 } finally {
86 topology.releaseReadLock();
87 }
88 }
89
90 @Override
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -070091 public Link getOutgoingLink(String type) {
92 topology.acquireReadLock();
93 try {
94 return topology.getOutgoingLink(asSwitchPort(), type);
95 } finally {
96 topology.releaseReadLock();
97 }
98 }
99
100 @Override
101 public Collection<Link> getOutgoingLinks() {
102 topology.acquireReadLock();
103 try {
104 return topology.getOutgoingLinks(asSwitchPort());
105 } finally {
106 topology.releaseReadLock();
107 }
108 }
109
110 @Override
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700111 public Link getIncomingLink() {
112 topology.acquireReadLock();
113 try {
114 return topology.getIncomingLink(asSwitchPort());
115 } finally {
116 topology.releaseReadLock();
117 }
118 }
119
120 @Override
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -0700121 public Link getIncomingLink(String type) {
122 topology.acquireReadLock();
123 try {
124 return topology.getIncomingLink(asSwitchPort(), type);
125 } finally {
126 topology.releaseReadLock();
127 }
128 }
129
130 @Override
131 public Collection<Link> getIncomingLinks() {
132 topology.acquireReadLock();
133 try {
134 return topology.getIncomingLinks(asSwitchPort());
135 } finally {
136 topology.releaseReadLock();
137 }
138 }
139
140 @Override
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700141 public Collection<Host> getHosts() {
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700142 topology.acquireReadLock();
143 try {
Yuta HIGUCHIbfc77f02014-07-14 22:50:25 -0700144 return topology.getHosts(this.asSwitchPort());
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700145 } finally {
146 topology.releaseReadLock();
147 }
148 }
149
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700150 @Override
151 public String getStringAttribute(String attr) {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700152 return this.topology.getPortEvent(id).getStringAttribute(attr);
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700153 }
154
155 @Override
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -0700156 public String getStringAttribute(String attr, String def) {
157 final String v = getStringAttribute(attr);
158 if (v == null) {
159 return def;
160 } else {
161 return v;
162 }
163 }
164
165 @Override
166 public Map<String, String> getAllStringAttributes() {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700167 return this.topology.getPortEvent(id).getAllStringAttributes();
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -0700168 }
169
170 @Override
Ray Milkey269ffb92014-04-03 14:43:30 -0700171 public String toString() {
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700172 return String.format("%s:%s",
Ray Milkey269ffb92014-04-03 14:43:30 -0700173 getSwitch().getDpid(),
174 getNumber());
175 }
Praseed Balakrishnan57ed8432014-06-26 11:49:56 -0700176
177
178 /**
179 * Returns the type of topology object.
180 *
181 * @return the type of the topology object
182 */
183 @Override
184 public String getType() {
Yuta HIGUCHIdbc33122014-07-10 13:32:32 -0700185 return getStringAttribute(TopologyElement.TYPE, TopologyElement.TYPE_PACKET_LAYER);
Praseed Balakrishnan57ed8432014-06-26 11:49:56 -0700186 }
Jonathan Hart062a2e82014-02-03 09:41:57 -0800187}