blob: 04a33072fdff19fd57adfffe1b8b56b6b1b27563 [file] [log] [blame]
Pankaj Berde3200ea02013-01-04 15:48:36 -08001package net.floodlightcontroller.core.internal;
2
3import java.util.Collection;
Pankaj Berde3200ea02013-01-04 15:48:36 -08004
Pankaj Berde15193092013-03-21 17:30:14 -07005import net.floodlightcontroller.core.INetMapTopologyObjects.IPortObject;
6import net.floodlightcontroller.core.INetMapTopologyObjects.ISwitchObject;
7import net.floodlightcontroller.core.ISwitchStorage;
8import net.onrc.onos.util.GraphDBConnection;
Toshio Koide4f3d9eb2013-06-13 13:20:55 -07009import net.onrc.onos.util.GraphDBOperation;
Pankaj Berdeafb20532013-01-08 15:05:24 -080010
Pankaj Berde3200ea02013-01-04 15:48:36 -080011import org.openflow.protocol.OFPhysicalPort;
Pankaj Berde6a4075d2013-01-22 16:42:54 -080012import org.openflow.protocol.OFPhysicalPort.OFPortConfig;
13import org.openflow.protocol.OFPhysicalPort.OFPortState;
Pankaj Berde15193092013-03-21 17:30:14 -070014import org.slf4j.Logger;
15import org.slf4j.LoggerFactory;
Pankaj Berde3200ea02013-01-04 15:48:36 -080016
17public class SwitchStorageImpl implements ISwitchStorage {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070018 protected GraphDBOperation op;
Pankaj Berdeafb20532013-01-08 15:05:24 -080019 protected static Logger log = LoggerFactory.getLogger(SwitchStorageImpl.class);
Pankaj Berde3200ea02013-01-04 15:48:36 -080020
21 @Override
22 public void update(String dpid, SwitchState state, DM_OPERATION op) {
23 // TODO Auto-generated method stub
Pankaj Berde28cc61c2013-01-08 18:19:33 -080024 log.info("SwitchStorage:update dpid:{} state: {} ", dpid, state);
Pankaj Berde3200ea02013-01-04 15:48:36 -080025 switch(op) {
26
27 case UPDATE:
28 case INSERT:
29 case CREATE:
30 addSwitch(dpid);
31 if (state != SwitchState.ACTIVE) {
32 setStatus(dpid, state);
33 }
34 break;
35 case DELETE:
36 deleteSwitch(dpid);
37 break;
38 default:
39 }
40 }
41
42 private void setStatus(String dpid, SwitchState state) {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070043 ISwitchObject sw = op.searchSwitch(dpid);
Pankaj Berde15193092013-03-21 17:30:14 -070044 if (sw != null) {
45 sw.setState(state.toString());
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070046 op.commit();
Pankaj Berde15193092013-03-21 17:30:14 -070047 log.info("SwitchStorage:setStatus dpid:{} state: {} done", dpid, state);
48 } else {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070049 op.rollback();
Pankaj Berde62016142013-04-09 15:35:50 -070050 log.info("SwitchStorage:setStatus dpid:{} state: {} failed: switch not found", dpid, state);
Pankaj Berde3200ea02013-01-04 15:48:36 -080051 }
Pankaj Berde3200ea02013-01-04 15:48:36 -080052 }
53
54 @Override
55 public void addPort(String dpid, OFPhysicalPort port) {
56 // TODO Auto-generated method stub
Pankaj Berde6a4075d2013-01-22 16:42:54 -080057
58 boolean portDown = ((OFPortConfig.OFPPC_PORT_DOWN.getValue() & port.getConfig()) > 0) ||
59 ((OFPortState.OFPPS_LINK_DOWN.getValue() & port.getState()) > 0);
60 if (portDown) {
61 deletePort(dpid, port.getPortNumber());
62 return;
63 }
Pankaj Berde15193092013-03-21 17:30:14 -070064
Pankaj Berde3200ea02013-01-04 15:48:36 -080065 try {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070066 ISwitchObject sw = op.searchSwitch(dpid);
Pankaj Berde15193092013-03-21 17:30:14 -070067
68 if (sw != null) {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070069 IPortObject p = op.searchPort(dpid, port.getPortNumber());
Pankaj Berde0fc4e432013-01-12 09:47:22 -080070 log.info("SwitchStorage:addPort dpid:{} port:{}", dpid, port.getPortNumber());
Pankaj Berde15193092013-03-21 17:30:14 -070071 if (p != null) {
Pankaj Berde0a31dab2013-01-15 16:06:36 -080072 log.error("SwitchStorage:addPort dpid:{} port:{} exists", dpid, port.getPortNumber());
Pankaj Berde0fc4e432013-01-12 09:47:22 -080073 } else {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070074 p = op.newPort(port.getPortNumber());
Pankaj Berde15193092013-03-21 17:30:14 -070075 p.setState("ACTIVE");
76 p.setPortState(port.getState());
77 p.setDesc(port.getName());
78 sw.addPort(p);
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070079 op.commit();
Pankaj Berde0fc4e432013-01-12 09:47:22 -080080 }
Pankaj Berde62016142013-04-09 15:35:50 -070081 } else {
82 log.error("SwitchStorage:addPort dpid:{} port:{} : failed switch does not exist", dpid, port.getPortNumber());
Pankaj Berde3200ea02013-01-04 15:48:36 -080083 }
Pankaj Berde15193092013-03-21 17:30:14 -070084 } catch (Exception e) {
Pankaj Berde3200ea02013-01-04 15:48:36 -080085 // TODO: handle exceptions
Pankaj Berde62016142013-04-09 15:35:50 -070086 e.printStackTrace();
Toshio Koide4f3d9eb2013-06-13 13:20:55 -070087 op.rollback();
Pankaj Berde0a31dab2013-01-15 16:06:36 -080088 log.error("SwitchStorage:addPort dpid:{} port:{} failed", dpid, port.getPortNumber());
Pankaj Berde3200ea02013-01-04 15:48:36 -080089 }
90
91 }
92
93 @Override
94 public Collection<OFPhysicalPort> getPorts(long dpid) {
95 // TODO Auto-generated method stub
96 return null;
97 }
98
99 @Override
100 public OFPhysicalPort getPort(String dpid, short portnum) {
101 // TODO Auto-generated method stub
102 return null;
103 }
104
105 @Override
106 public OFPhysicalPort getPort(String dpid, String portName) {
107 // TODO Auto-generated method stub
108 return null;
109 }
110
111 @Override
112 public void addSwitch(String dpid) {
113
Pankaj Berde28cc61c2013-01-08 18:19:33 -0800114 log.info("SwitchStorage:addSwitch(): dpid {} ", dpid);
Pankaj Berdeafb20532013-01-08 15:05:24 -0800115
Pankaj Berde62016142013-04-09 15:35:50 -0700116 try {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700117 ISwitchObject sw = op.searchSwitch(dpid);
Pankaj Berde62016142013-04-09 15:35:50 -0700118 if (sw != null) {
119 /*
120 * Do nothing or throw exception?
121 */
Pankaj Berde3200ea02013-01-04 15:48:36 -0800122
Pankaj Berde62016142013-04-09 15:35:50 -0700123 log.info("SwitchStorage:addSwitch dpid:{} already exists", dpid);
124 sw.setState(SwitchState.ACTIVE.toString());
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700125 op.commit();
Pankaj Berde62016142013-04-09 15:35:50 -0700126 } else {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700127 sw = op.newSwitch(dpid);
Pankaj Berde62016142013-04-09 15:35:50 -0700128
129 if (sw != null) {
Pankaj Berde62016142013-04-09 15:35:50 -0700130 sw.setState(SwitchState.ACTIVE.toString());
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700131 op.commit();
Pankaj Berde62016142013-04-09 15:35:50 -0700132 log.info("SwitchStorage:addSwitch dpid:{} added", dpid);
133 } else {
134 log.error("switchStorage:addSwitch dpid:{} failed -> newSwitch failed", dpid);
135 }
136 }
137 } catch (Exception e) {
138 /*
139 * retry?
140 */
141 e.printStackTrace();
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700142 op.rollback();
Pankaj Berde62016142013-04-09 15:35:50 -0700143 log.info("SwitchStorage:addSwitch dpid:{} failed", dpid);
144 }
Pankaj Berde3200ea02013-01-04 15:48:36 -0800145
146
147 }
148
149 @Override
150 public void deleteSwitch(String dpid) {
151 // TODO Setting inactive but we need to eventually remove data
Pankaj Berde15193092013-03-21 17:30:14 -0700152
Pankaj Berde0a31dab2013-01-15 16:06:36 -0800153 try {
Pankaj Berde15193092013-03-21 17:30:14 -0700154
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700155 ISwitchObject sw = op.searchSwitch(dpid);
Pankaj Berde15193092013-03-21 17:30:14 -0700156 if (sw != null) {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700157 op.removeSwitch(sw);
Pankaj Berde15193092013-03-21 17:30:14 -0700158
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700159 op.commit();
Pankaj Berde0a31dab2013-01-15 16:06:36 -0800160 log.info("SwitchStorage:DeleteSwitch dpid:{} done", dpid);
161 }
Pankaj Berde15193092013-03-21 17:30:14 -0700162 } catch (Exception e) {
Pankaj Berde0a31dab2013-01-15 16:06:36 -0800163 // TODO: handle exceptions
Pankaj Berde62016142013-04-09 15:35:50 -0700164 e.printStackTrace();
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700165 op.rollback();
Pankaj Berde0a31dab2013-01-15 16:06:36 -0800166 log.error("SwitchStorage:deleteSwitch {} failed", dpid);
167 }
Pankaj Berde3200ea02013-01-04 15:48:36 -0800168
169 }
170
171 @Override
172 public void deletePort(String dpid, short port) {
173 // TODO Auto-generated method stub
Pankaj Berde3200ea02013-01-04 15:48:36 -0800174 try {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700175 ISwitchObject sw = op.searchSwitch(dpid);
Pankaj Berde15193092013-03-21 17:30:14 -0700176
177 if (sw != null) {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700178 IPortObject p = op.searchPort(dpid, port);
Pankaj Berde15193092013-03-21 17:30:14 -0700179 if (p != null) {
Pankaj Berde28cc61c2013-01-08 18:19:33 -0800180 log.info("SwitchStorage:deletePort dpid:{} port:{} found and deleted", dpid, port);
Pankaj Berde15193092013-03-21 17:30:14 -0700181 sw.removePort(p);
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700182 op.removePort(p);
183 op.commit();
Pankaj Berde8557a462013-01-07 08:59:31 -0800184 }
Pankaj Berde3200ea02013-01-04 15:48:36 -0800185 }
Pankaj Berde15193092013-03-21 17:30:14 -0700186 } catch (Exception e) {
Pankaj Berde3200ea02013-01-04 15:48:36 -0800187 // TODO: handle exceptions
Pankaj Berde2239f0d2013-04-04 09:42:43 -0700188 e.printStackTrace();
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700189 op.rollback();
Pankaj Berde28cc61c2013-01-08 18:19:33 -0800190 log.info("SwitchStorage:deletePort dpid:{} port:{} failed", dpid, port);
Pankaj Berde3200ea02013-01-04 15:48:36 -0800191 }
Pankaj Berde3200ea02013-01-04 15:48:36 -0800192 }
193
194 @Override
195 public void deletePort(String dpid, String portName) {
196 // TODO Auto-generated method stub
197
198 }
199
Pankaj Berde5024ec12013-01-31 17:07:29 -0800200
Pankaj Berde3200ea02013-01-04 15:48:36 -0800201
202 @Override
203 public void init(String conf) {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700204 GraphDBConnection conn = GraphDBConnection.getInstance(conf);
205 op = new GraphDBOperation(conn);
Pankaj Berde3200ea02013-01-04 15:48:36 -0800206 }
207
Pankaj Berdeff421802013-01-29 20:28:52 -0800208
Pankaj Berdeff421802013-01-29 20:28:52 -0800209
Pankaj Berded18c7622013-02-04 10:28:35 -0800210 public void finalize() {
211 close();
212 }
213
214 @Override
215 public void close() {
Toshio Koide4f3d9eb2013-06-13 13:20:55 -0700216 op.close();
Pankaj Berded18c7622013-02-04 10:28:35 -0800217 }
218
Pankaj Berded1259e82013-01-23 14:10:00 -0800219
Pankaj Berde3200ea02013-01-04 15:48:36 -0800220}