blob: d6c83c517d24e43a2aca4ffa3ab94337b5bbe5f7 [file] [log] [blame]
HIGUCHI Yuta351edcb2013-06-12 11:58:13 -07001package net.onrc.onos.ofcontroller.devicemanager.internal;
Pankaj Berdeb6031342013-02-19 18:51:51 -08002
Pankaj Berdeb6031342013-02-19 18:51:51 -08003import java.util.List;
Pankaj Berdeb6031342013-02-19 18:51:51 -08004import org.openflow.util.HexString;
5import org.slf4j.Logger;
6import org.slf4j.LoggerFactory;
7
8import com.google.common.collect.Lists;
9import com.thinkaurelius.titan.core.TitanException;
Pankaj Berdeb6031342013-02-19 18:51:51 -080010import net.floodlightcontroller.devicemanager.IDevice;
Pankaj Berdeb6031342013-02-19 18:51:51 -080011import net.floodlightcontroller.devicemanager.SwitchPort;
HIGUCHI Yuta20514902013-06-12 11:24:16 -070012import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
13import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
HIGUCHI Yutaed49ef72013-06-12 11:34:10 -070014import net.onrc.onos.ofcontroller.core.internal.SwitchStorageImpl;
HIGUCHI Yutad3fa44d2013-06-12 11:53:09 -070015import net.onrc.onos.ofcontroller.devicemanager.IDeviceStorage;
Pankaj Berdeda809572013-02-22 15:31:20 -080016import net.onrc.onos.util.GraphDBConnection;
17import net.onrc.onos.util.GraphDBConnection.Transaction;
Pankaj Berdeb6031342013-02-19 18:51:51 -080018
19public class DeviceStorageImpl implements IDeviceStorage {
20
Pankaj Berdeda809572013-02-22 15:31:20 -080021 public GraphDBConnection conn;
Pankaj Berdeb6031342013-02-19 18:51:51 -080022 protected static Logger log = LoggerFactory.getLogger(SwitchStorageImpl.class);
Pankaj Berdeb6031342013-02-19 18:51:51 -080023
24 @Override
25 public void init(String conf) {
Pankaj Berdeda809572013-02-22 15:31:20 -080026 conn = GraphDBConnection.getInstance(conf);
Pankaj Berdeb6031342013-02-19 18:51:51 -080027 }
28
Pankaj Berde15193092013-03-21 17:30:14 -070029 public void finalize() {
Pankaj Berdeb6031342013-02-19 18:51:51 -080030 close();
31 }
32
33 @Override
34 public void close() {
Pankaj Berdeda809572013-02-22 15:31:20 -080035 conn.close();
Pankaj Berdeb6031342013-02-19 18:51:51 -080036 }
37
38 @Override
39 public IDeviceObject addDevice(IDevice device) {
40 // TODO Auto-generated method stub
Pankaj Berdeb6031342013-02-19 18:51:51 -080041 IDeviceObject obj = null;
Pankaj Berdeb6031342013-02-19 18:51:51 -080042 try {
Pankaj Berdeda809572013-02-22 15:31:20 -080043 if ((obj = conn.utils().searchDevice(conn, device.getMACAddressString())) != null) {
44 log.debug("Adding device {}: found existing device",device.getMACAddressString());
Pankaj Berdeb6031342013-02-19 18:51:51 -080045 } else {
Pankaj Berdeda809572013-02-22 15:31:20 -080046 obj = conn.utils().newDevice(conn);
47 log.debug("Adding device {}: creating new device",device.getMACAddressString());
Pankaj Berdeb6031342013-02-19 18:51:51 -080048 }
Pankaj Berdeda809572013-02-22 15:31:20 -080049 changeDeviceAttachments(device, obj);
50
Pankaj Berdeb6031342013-02-19 18:51:51 -080051 obj.setIPAddress(device.getIPv4Addresses().toString());
52 obj.setMACAddress(device.getMACAddressString());
53 obj.setType("device");
54 obj.setState("ACTIVE");
Pankaj Berdeda809572013-02-22 15:31:20 -080055 conn.endTx(Transaction.COMMIT);
56
57 log.debug("Adding device {}",device.getMACAddressString());
58 } catch (Exception e) {
Pankaj Berdeb6031342013-02-19 18:51:51 -080059 // TODO: handle exceptions
Pankaj Berdeda809572013-02-22 15:31:20 -080060 conn.endTx(Transaction.ROLLBACK);
Pankaj Berdeb6031342013-02-19 18:51:51 -080061 log.error(":addDevice mac:{} failed", device.getMACAddressString());
62 }
63
64 return obj;
65 }
66
67 @Override
68 public IDeviceObject updateDevice(IDevice device) {
Pankaj Berdeb6031342013-02-19 18:51:51 -080069 return addDevice(device);
70 }
71
72 @Override
Pankaj Berdeda809572013-02-22 15:31:20 -080073 public void removeDevice(IDevice device) {
Pankaj Berdeb6031342013-02-19 18:51:51 -080074 // TODO Auto-generated method stub
Pankaj Berdeda809572013-02-22 15:31:20 -080075 IDeviceObject dev;
76 try {
77 if ((dev = conn.utils().searchDevice(conn, device.getMACAddressString())) != null) {
78 conn.utils().removeDevice(conn, dev);
79 conn.endTx(Transaction.COMMIT);
80 log.error("DeviceStorage:removeDevice mac:{} done", device.getMACAddressString());
81 }
82 } catch (Exception e) {
83 // TODO: handle exceptions
84 conn.endTx(Transaction.ROLLBACK);
85 log.error("DeviceStorage:removeDevice mac:{} failed", device.getMACAddressString());
86 }
Pankaj Berdeb6031342013-02-19 18:51:51 -080087 }
88
89 @Override
90 public IDeviceObject getDeviceByMac(String mac) {
Pankaj Berdeac1a8c32013-02-26 17:45:57 -080091 return conn.utils().searchDevice(conn, mac);
Pankaj Berdeb6031342013-02-19 18:51:51 -080092 }
93
94 @Override
95 public IDeviceObject getDeviceByIP(String ip) {
96 // TODO Auto-generated method stub
97 return null;
98 }
99
Pankaj Berdeda809572013-02-22 15:31:20 -0800100 @Override
101 public void changeDeviceAttachments(IDevice device) {
102 // TODO Auto-generated method stub
103 IDeviceObject obj = null;
104 try {
105 if ((obj = conn.utils().searchDevice(conn, device.getMACAddressString())) != null) {
106 log.debug("Changing device ports {}: found existing device",device.getMACAddressString());
107 changeDeviceAttachments(device, obj);
108 conn.endTx(Transaction.COMMIT);
109 } else {
110 log.debug("failed to search device...now adding {}",device.getMACAddressString());
111 addDevice(device);
112 }
113 } catch (Exception e) {
114 // TODO: handle exceptions
115 conn.endTx(Transaction.ROLLBACK);
116 log.error(":addDevice mac:{} failed", device.getMACAddressString());
117 }
118 }
119
120 public void changeDeviceAttachments(IDevice device, IDeviceObject obj) {
121 SwitchPort[] attachmentPoints = device.getAttachmentPoints();
122 List<IPortObject> attachedPorts = Lists.newArrayList(obj.getAttachedPorts());
123
124 for (SwitchPort ap : attachmentPoints) {
125 IPortObject port = conn.utils().searchPort(conn,
126 HexString.toHexString(ap.getSwitchDPID()),
127 (short) ap.getPort());
128 if (attachedPorts.contains(port)) {
129 attachedPorts.remove(port);
130 } else {
131 log.debug("Adding device {}: attaching to port",device.getMACAddressString());
132 port.setDevice(obj);
133 //obj.setHostPort(port);
134 }
135 }
136 for (IPortObject port: attachedPorts) {
137 port.removeDevice(obj);
138 // obj.removeHostPort(port);
139 }
140 }
141
142 @Override
143 public void changeDeviceIPv4Address(IDevice device) {
144 // TODO Auto-generated method stub
145 IDeviceObject obj;
146 try {
147 if ((obj = conn.utils().searchDevice(conn, device.getMACAddressString())) != null) {
148 obj.setIPAddress(device.getIPv4Addresses().toString());
149 conn.endTx(Transaction.COMMIT);
150 } else {
151 log.error(":changeDeviceIPv4Address mac:{} failed", device.getMACAddressString());
152 }
153 } catch (TitanException e) {
154 // TODO: handle exceptions
155 conn.endTx(Transaction.ROLLBACK);
156 log.error(":changeDeviceIPv4Address mac:{} failed due to exception {}", device.getMACAddressString(),e);
157 }
158 }
159
Pankaj Berdeb6031342013-02-19 18:51:51 -0800160}