blob: 2e9ea60a86f713bbb823b37150f4fef8a6b9f8dd [file] [log] [blame]
HIGUCHI Yutaed49ef72013-06-12 11:34:10 -07001package net.onrc.onos.ofcontroller.core.internal;
Pankaj Berde3200ea02013-01-04 15:48:36 -08002
3import java.util.Collection;
Pankaj Berde3200ea02013-01-04 15:48:36 -08004
HIGUCHI Yuta20514902013-06-12 11:24:16 -07005import net.onrc.onos.ofcontroller.core.ISwitchStorage;
6import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
7import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
Toshio Koide4f3d9eb2013-06-13 13:20:55 -07008import net.onrc.onos.util.GraphDBOperation;
Pankaj Berdeafb20532013-01-08 15:05:24 -08009
Pankaj Berde3200ea02013-01-04 15:48:36 -080010import org.openflow.protocol.OFPhysicalPort;
Pankaj Berde6a4075d2013-01-22 16:42:54 -080011import org.openflow.protocol.OFPhysicalPort.OFPortConfig;
12import org.openflow.protocol.OFPhysicalPort.OFPortState;
Pankaj Berde15193092013-03-21 17:30:14 -070013import org.slf4j.Logger;
14import org.slf4j.LoggerFactory;
Pankaj Berde3200ea02013-01-04 15:48:36 -080015
16public class SwitchStorageImpl implements ISwitchStorage {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070017 protected GraphDBOperation op;
Pankaj Berdeafb20532013-01-08 15:05:24 -080018 protected static Logger log = LoggerFactory.getLogger(SwitchStorageImpl.class);
Pankaj Berde3200ea02013-01-04 15:48:36 -080019
20 @Override
21 public void update(String dpid, SwitchState state, DM_OPERATION op) {
22 // TODO Auto-generated method stub
Pankaj Berde28cc61c2013-01-08 18:19:33 -080023 log.info("SwitchStorage:update dpid:{} state: {} ", dpid, state);
Pankaj Berde3200ea02013-01-04 15:48:36 -080024 switch(op) {
25
26 case UPDATE:
27 case INSERT:
28 case CREATE:
29 addSwitch(dpid);
30 if (state != SwitchState.ACTIVE) {
31 setStatus(dpid, state);
32 }
33 break;
34 case DELETE:
35 deleteSwitch(dpid);
36 break;
37 default:
38 }
39 }
40
41 private void setStatus(String dpid, SwitchState state) {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070042 ISwitchObject sw = op.searchSwitch(dpid);
Pankaj Berde15193092013-03-21 17:30:14 -070043 if (sw != null) {
44 sw.setState(state.toString());
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070045 op.commit();
Pankaj Berde15193092013-03-21 17:30:14 -070046 log.info("SwitchStorage:setStatus dpid:{} state: {} done", dpid, state);
47 } else {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070048 op.rollback();
Pankaj Berde62016142013-04-09 15:35:50 -070049 log.info("SwitchStorage:setStatus dpid:{} state: {} failed: switch not found", dpid, state);
Pankaj Berde3200ea02013-01-04 15:48:36 -080050 }
Pankaj Berde3200ea02013-01-04 15:48:36 -080051 }
52
53 @Override
54 public void addPort(String dpid, OFPhysicalPort port) {
55 // TODO Auto-generated method stub
Pankaj Berde6a4075d2013-01-22 16:42:54 -080056
57 boolean portDown = ((OFPortConfig.OFPPC_PORT_DOWN.getValue() & port.getConfig()) > 0) ||
58 ((OFPortState.OFPPS_LINK_DOWN.getValue() & port.getState()) > 0);
59 if (portDown) {
60 deletePort(dpid, port.getPortNumber());
61 return;
62 }
Pankaj Berde15193092013-03-21 17:30:14 -070063
Pankaj Berde3200ea02013-01-04 15:48:36 -080064 try {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070065 ISwitchObject sw = op.searchSwitch(dpid);
Pankaj Berde15193092013-03-21 17:30:14 -070066
67 if (sw != null) {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070068 IPortObject p = op.searchPort(dpid, port.getPortNumber());
Pankaj Berde0fc4e432013-01-12 09:47:22 -080069 log.info("SwitchStorage:addPort dpid:{} port:{}", dpid, port.getPortNumber());
Pankaj Berde15193092013-03-21 17:30:14 -070070 if (p != null) {
Pankaj Berde0a31dab2013-01-15 16:06:36 -080071 log.error("SwitchStorage:addPort dpid:{} port:{} exists", dpid, port.getPortNumber());
Pankaj Berde0fc4e432013-01-12 09:47:22 -080072 } else {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070073 p = op.newPort(port.getPortNumber());
Pankaj Berde15193092013-03-21 17:30:14 -070074 p.setState("ACTIVE");
75 p.setPortState(port.getState());
76 p.setDesc(port.getName());
77 sw.addPort(p);
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070078 op.commit();
Pankaj Berde0fc4e432013-01-12 09:47:22 -080079 }
Pankaj Berde62016142013-04-09 15:35:50 -070080 } else {
81 log.error("SwitchStorage:addPort dpid:{} port:{} : failed switch does not exist", dpid, port.getPortNumber());
Pankaj Berde3200ea02013-01-04 15:48:36 -080082 }
Pankaj Berde15193092013-03-21 17:30:14 -070083 } catch (Exception e) {
Pankaj Berde3200ea02013-01-04 15:48:36 -080084 // TODO: handle exceptions
Pankaj Berde62016142013-04-09 15:35:50 -070085 e.printStackTrace();
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070086 op.rollback();
Pankaj Berde0a31dab2013-01-15 16:06:36 -080087 log.error("SwitchStorage:addPort dpid:{} port:{} failed", dpid, port.getPortNumber());
Pankaj Berde3200ea02013-01-04 15:48:36 -080088 }
89
90 }
91
92 @Override
93 public Collection<OFPhysicalPort> getPorts(long dpid) {
94 // TODO Auto-generated method stub
95 return null;
96 }
97
98 @Override
99 public OFPhysicalPort getPort(String dpid, short portnum) {
100 // TODO Auto-generated method stub
101 return null;
102 }
103
104 @Override
105 public OFPhysicalPort getPort(String dpid, String portName) {
106 // TODO Auto-generated method stub
107 return null;
108 }
109
110 @Override
111 public void addSwitch(String dpid) {
112
Pankaj Berde28cc61c2013-01-08 18:19:33 -0800113 log.info("SwitchStorage:addSwitch(): dpid {} ", dpid);
Pankaj Berdeafb20532013-01-08 15:05:24 -0800114
Pankaj Berde62016142013-04-09 15:35:50 -0700115 try {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700116 ISwitchObject sw = op.searchSwitch(dpid);
Pankaj Berde62016142013-04-09 15:35:50 -0700117 if (sw != null) {
118 /*
119 * Do nothing or throw exception?
120 */
Pankaj Berde3200ea02013-01-04 15:48:36 -0800121
Pankaj Berde62016142013-04-09 15:35:50 -0700122 log.info("SwitchStorage:addSwitch dpid:{} already exists", dpid);
123 sw.setState(SwitchState.ACTIVE.toString());
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700124 op.commit();
Pankaj Berde62016142013-04-09 15:35:50 -0700125 } else {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700126 sw = op.newSwitch(dpid);
Pankaj Berde62016142013-04-09 15:35:50 -0700127
128 if (sw != null) {
Pankaj Berde62016142013-04-09 15:35:50 -0700129 sw.setState(SwitchState.ACTIVE.toString());
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700130 op.commit();
Pankaj Berde62016142013-04-09 15:35:50 -0700131 log.info("SwitchStorage:addSwitch dpid:{} added", dpid);
132 } else {
133 log.error("switchStorage:addSwitch dpid:{} failed -> newSwitch failed", dpid);
134 }
135 }
136 } catch (Exception e) {
137 /*
138 * retry?
139 */
140 e.printStackTrace();
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700141 op.rollback();
Pankaj Berde62016142013-04-09 15:35:50 -0700142 log.info("SwitchStorage:addSwitch dpid:{} failed", dpid);
143 }
Pankaj Berde3200ea02013-01-04 15:48:36 -0800144
145
146 }
147
148 @Override
149 public void deleteSwitch(String dpid) {
150 // TODO Setting inactive but we need to eventually remove data
Pankaj Berde15193092013-03-21 17:30:14 -0700151
Pankaj Berde0a31dab2013-01-15 16:06:36 -0800152 try {
Pankaj Berde15193092013-03-21 17:30:14 -0700153
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700154 ISwitchObject sw = op.searchSwitch(dpid);
Pankaj Berde15193092013-03-21 17:30:14 -0700155 if (sw != null) {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700156 op.removeSwitch(sw);
Pankaj Berde15193092013-03-21 17:30:14 -0700157
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700158 op.commit();
Pankaj Berde0a31dab2013-01-15 16:06:36 -0800159 log.info("SwitchStorage:DeleteSwitch dpid:{} done", dpid);
160 }
Pankaj Berde15193092013-03-21 17:30:14 -0700161 } catch (Exception e) {
Pankaj Berde0a31dab2013-01-15 16:06:36 -0800162 // TODO: handle exceptions
Pankaj Berde62016142013-04-09 15:35:50 -0700163 e.printStackTrace();
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700164 op.rollback();
Pankaj Berde0a31dab2013-01-15 16:06:36 -0800165 log.error("SwitchStorage:deleteSwitch {} failed", dpid);
166 }
Pankaj Berde3200ea02013-01-04 15:48:36 -0800167
168 }
169
170 @Override
171 public void deletePort(String dpid, short port) {
172 // TODO Auto-generated method stub
Pankaj Berde3200ea02013-01-04 15:48:36 -0800173 try {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700174 ISwitchObject sw = op.searchSwitch(dpid);
Pankaj Berde15193092013-03-21 17:30:14 -0700175
176 if (sw != null) {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700177 IPortObject p = op.searchPort(dpid, port);
Pankaj Berde15193092013-03-21 17:30:14 -0700178 if (p != null) {
Pankaj Berde28cc61c2013-01-08 18:19:33 -0800179 log.info("SwitchStorage:deletePort dpid:{} port:{} found and deleted", dpid, port);
Pankaj Berde15193092013-03-21 17:30:14 -0700180 sw.removePort(p);
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700181 op.removePort(p);
182 op.commit();
Pankaj Berde8557a462013-01-07 08:59:31 -0800183 }
Pankaj Berde3200ea02013-01-04 15:48:36 -0800184 }
Pankaj Berde15193092013-03-21 17:30:14 -0700185 } catch (Exception e) {
Pankaj Berde3200ea02013-01-04 15:48:36 -0800186 // TODO: handle exceptions
Pankaj Berde2239f0d2013-04-04 09:42:43 -0700187 e.printStackTrace();
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700188 op.rollback();
Pankaj Berde28cc61c2013-01-08 18:19:33 -0800189 log.info("SwitchStorage:deletePort dpid:{} port:{} failed", dpid, port);
Pankaj Berde3200ea02013-01-04 15:48:36 -0800190 }
Pankaj Berde3200ea02013-01-04 15:48:36 -0800191 }
192
193 @Override
194 public void deletePort(String dpid, String portName) {
195 // TODO Auto-generated method stub
196
197 }
198
Pankaj Berde5024ec12013-01-31 17:07:29 -0800199
Pankaj Berde3200ea02013-01-04 15:48:36 -0800200
201 @Override
202 public void init(String conf) {
Toshio Koidebfe9b922013-06-18 10:56:05 -0700203 op = new GraphDBOperation(conf);
Pankaj Berde3200ea02013-01-04 15:48:36 -0800204 }
205
Pankaj Berdeff421802013-01-29 20:28:52 -0800206
Pankaj Berdeff421802013-01-29 20:28:52 -0800207
Pankaj Berded18c7622013-02-04 10:28:35 -0800208 public void finalize() {
209 close();
210 }
211
212 @Override
213 public void close() {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700214 op.close();
Pankaj Berded18c7622013-02-04 10:28:35 -0800215 }
216
Pankaj Berded1259e82013-01-23 14:10:00 -0800217
Pankaj Berde3200ea02013-01-04 15:48:36 -0800218}