blob: 8b8f966deaa95bd92b00c084df03bf0e698f9584 [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 HIGUCHI8f3dfa32014-06-25 00:14:25 -07007import net.onrc.onos.core.util.Dpid;
8import net.onrc.onos.core.util.PortNumber;
Jonathan Hart25bd53e2014-04-30 23:44:09 -07009import net.onrc.onos.core.util.SwitchPort;
10
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080011/**
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070012 * Handler to Port object stored in In-memory Topology snapshot.
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080013 */
Jonathan Harte37e4e22014-05-13 19:12:02 -070014public class PortImpl extends TopologyObject implements Port {
Yuta HIGUCHI181d34d2014-02-05 15:05:46 -080015
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070016 private final SwitchPort id;
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080017
Jonathan Hart25bd53e2014-04-30 23:44:09 -070018
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070019 /**
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070020 * Creates a Port handler object.
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070021 *
22 * @param topology Topology instance this object belongs to
23 * @param switchPort SwitchPort
24 */
Yuta HIGUCHI9e6223d2014-08-26 00:01:32 -070025 PortImpl(BaseInternalTopology topology, SwitchPort switchPort) {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070026 super(topology);
Pavlin Radoslavova5637c02014-07-30 15:55:11 -070027 this.id = checkNotNull(switchPort);
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070028 }
29
30 /**
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070031 * Creates a Port handler object.
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070032 *
33 * @param topology Topology instance this object belongs to
34 * @param dpid DPID
35 * @param number PortNumber
36 */
Yuta HIGUCHI9e6223d2014-08-26 00:01:32 -070037 PortImpl(BaseInternalTopology topology, Dpid dpid, PortNumber number) {
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070038 this(topology, new SwitchPort(dpid, number));
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070039 }
40
Ray Milkey269ffb92014-04-03 14:43:30 -070041 @Override
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070042 public Dpid getDpid() {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070043 return getSwitchPort().getDpid();
Ray Milkey269ffb92014-04-03 14:43:30 -070044 }
Yuta HIGUCHIea516d62014-02-13 15:59:32 -080045
Ray Milkey269ffb92014-04-03 14:43:30 -070046 @Override
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070047 public PortNumber getNumber() {
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070048 return getPortNumber();
Ray Milkey269ffb92014-04-03 14:43:30 -070049 }
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080050
Ray Milkey269ffb92014-04-03 14:43:30 -070051 @Override
Yuta HIGUCHIcd14dda2014-07-24 09:57:22 -070052 public PortNumber getPortNumber() {
53 return getSwitchPort().getPortNumber();
54 }
55
56 @Override
57 public SwitchPort getSwitchPort() {
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -070058 return id;
Jonathan Hart25bd53e2014-04-30 23:44:09 -070059 }
60
61 @Override
Ray Milkey269ffb92014-04-03 14:43:30 -070062 public String getDescription() {
Yuta HIGUCHI93d35ea2014-08-31 23:26:13 -070063 return getStringAttribute(PortData.DESCRIPTION, "");
Ray Milkey269ffb92014-04-03 14:43:30 -070064 }
Yuta HIGUCHIc0366272014-02-10 21:04:57 -080065
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -070066 @Override
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070067 public Long getHardwareAddress() {
68 // TODO implement using attributes?
69 throw new UnsupportedOperationException("Not implemented yet");
70 }
71
72 @Override
73 public Switch getSwitch() {
Yuta HIGUCHI9e6223d2014-08-26 00:01:32 -070074 // TODO Cache BaseTopologyAdaptor instance?
75 return new BaseTopologyAdaptor(topology).getSwitch(getDpid());
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070076 }
77
78 @Override
79 public Link getOutgoingLink() {
Yuta HIGUCHI9e6223d2014-08-26 00:01:32 -070080 return new BaseTopologyAdaptor(topology).getOutgoingLink(getSwitchPort());
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070081 }
82
83 @Override
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -070084 public Link getOutgoingLink(String type) {
Yuta HIGUCHI9e6223d2014-08-26 00:01:32 -070085 return new BaseTopologyAdaptor(topology).getOutgoingLink(getSwitchPort(), type);
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -070086 }
87
88 @Override
89 public Collection<Link> getOutgoingLinks() {
Yuta HIGUCHI9e6223d2014-08-26 00:01:32 -070090 return new BaseTopologyAdaptor(topology).getOutgoingLinks(getSwitchPort());
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -070091 }
92
93 @Override
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070094 public Link getIncomingLink() {
Yuta HIGUCHI9e6223d2014-08-26 00:01:32 -070095 return new BaseTopologyAdaptor(topology).getIncomingLink(getSwitchPort());
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -070096 }
97
98 @Override
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -070099 public Link getIncomingLink(String type) {
Yuta HIGUCHI9e6223d2014-08-26 00:01:32 -0700100 return new BaseTopologyAdaptor(topology).getIncomingLink(getSwitchPort(), type);
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -0700101 }
102
103 @Override
104 public Collection<Link> getIncomingLinks() {
Yuta HIGUCHI9e6223d2014-08-26 00:01:32 -0700105 return new BaseTopologyAdaptor(topology).getIncomingLinks(getSwitchPort());
Yuta HIGUCHI8313f0b2014-07-09 16:36:03 -0700106 }
107
108 @Override
Yuta HIGUCHI8b389a72014-07-18 13:50:00 -0700109 public Collection<Host> getHosts() {
Yuta HIGUCHI9e6223d2014-08-26 00:01:32 -0700110 return new BaseTopologyAdaptor(topology).getHosts(this.getSwitchPort());
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700111 }
112
Praseed Balakrishnanfa21be12014-07-15 14:42:26 -0700113 /**
114 * Returns the port type of this port.
115 *
116 * @return {@link net.onrc.onos.core.topology.PortType}
117 */
118 @Override
119 public PortType getPortType() {
120 return PortType.valueOf(getStringAttribute(TopologyElement.ELEMENT_TYPE,
121 PortType.ETHERNET_PORT.toString()));
122 }
123
124
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700125 @Override
126 public String getStringAttribute(String attr) {
Yuta HIGUCHI93d35ea2014-08-31 23:26:13 -0700127 return this.topology.getPortData(id).getStringAttribute(attr);
Yuta HIGUCHIbf0a8712014-06-30 18:59:46 -0700128 }
129
130 @Override
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -0700131 public String getStringAttribute(String attr, String def) {
132 final String v = getStringAttribute(attr);
133 if (v == null) {
134 return def;
135 } else {
136 return v;
137 }
138 }
139
140 @Override
141 public Map<String, String> getAllStringAttributes() {
Yuta HIGUCHI93d35ea2014-08-31 23:26:13 -0700142 return this.topology.getPortData(id).getAllStringAttributes();
Yuta HIGUCHIdb1b8302014-06-26 10:50:39 -0700143 }
144
145 @Override
Ray Milkey269ffb92014-04-03 14:43:30 -0700146 public String toString() {
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700147 return String.format("%s:%s",
Ray Milkey269ffb92014-04-03 14:43:30 -0700148 getSwitch().getDpid(),
149 getNumber());
150 }
Praseed Balakrishnan57ed8432014-06-26 11:49:56 -0700151
152
153 /**
154 * Returns the type of topology object.
155 *
156 * @return the type of the topology object
157 */
158 @Override
159 public String getType() {
Yuta HIGUCHIdbc33122014-07-10 13:32:32 -0700160 return getStringAttribute(TopologyElement.TYPE, TopologyElement.TYPE_PACKET_LAYER);
Praseed Balakrishnan57ed8432014-06-26 11:49:56 -0700161 }
Praseed Balakrishnan2aa6c0b2014-07-17 11:42:05 -0700162
163 /**
164 * Returns the config state of topology element.
165 *
166 * @return ConfigState
167 */
168 @Override
169 public ConfigState getConfigState() {
170 return ConfigState.valueOf(getStringAttribute(TopologyElement.ELEMENT_CONFIG_STATE));
171
172 }
173
174 /**
175 * Returns the status of topology element.
176 *
177 * @return AdminStatus
178 */
179 @Override
180 public AdminStatus getStatus() {
181 return AdminStatus.valueOf(getStringAttribute(TopologyElement.ELEMENT_ADMIN_STATUS));
182 }
Jonathan Hart062a2e82014-02-03 09:41:57 -0800183}