blob: cca4794b48ea455a6994a3baf1d822d7a5668acf [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;
Toshio Koide4f629f32013-06-13 13:39:38 -070017import net.onrc.onos.util.GraphDBOperation;
Pankaj Berdeb6031342013-02-19 18:51:51 -080018
19public class DeviceStorageImpl implements IDeviceStorage {
20
Toshio Koide4f629f32013-06-13 13:39:38 -070021 public GraphDBOperation op;
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) {
Toshio Koide4f629f32013-06-13 13:39:38 -070026 op = new GraphDBOperation(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() {
Toshio Koide4f629f32013-06-13 13:39:38 -070035 op.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 {
Toshio Koide4f629f32013-06-13 13:39:38 -070043 if ((obj = op.searchDevice(device.getMACAddressString())) != null) {
Pankaj Berdeda809572013-02-22 15:31:20 -080044 log.debug("Adding device {}: found existing device",device.getMACAddressString());
Pankaj Berdeb6031342013-02-19 18:51:51 -080045 } else {
Toshio Koide4f629f32013-06-13 13:39:38 -070046 obj = op.newDevice();
Pankaj Berdeda809572013-02-22 15:31:20 -080047 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());
Pankaj Berdeb6031342013-02-19 18:51:51 -080053 obj.setState("ACTIVE");
Toshio Koide4f629f32013-06-13 13:39:38 -070054 op.commit();
Pankaj Berdeda809572013-02-22 15:31:20 -080055
56 log.debug("Adding device {}",device.getMACAddressString());
57 } catch (Exception e) {
Pankaj Berdeb6031342013-02-19 18:51:51 -080058 // TODO: handle exceptions
Toshio Koide4f629f32013-06-13 13:39:38 -070059 op.rollback();
Pankaj Berdeb6031342013-02-19 18:51:51 -080060 log.error(":addDevice mac:{} failed", device.getMACAddressString());
61 }
62
63 return obj;
64 }
65
66 @Override
67 public IDeviceObject updateDevice(IDevice device) {
Pankaj Berdeb6031342013-02-19 18:51:51 -080068 return addDevice(device);
69 }
70
71 @Override
Pankaj Berdeda809572013-02-22 15:31:20 -080072 public void removeDevice(IDevice device) {
Pankaj Berdeb6031342013-02-19 18:51:51 -080073 // TODO Auto-generated method stub
Pankaj Berdeda809572013-02-22 15:31:20 -080074 IDeviceObject dev;
75 try {
Toshio Koide4f629f32013-06-13 13:39:38 -070076 if ((dev = op.searchDevice(device.getMACAddressString())) != null) {
77 op.removeDevice(dev);
78 op.commit();
Pankaj Berdeda809572013-02-22 15:31:20 -080079 log.error("DeviceStorage:removeDevice mac:{} done", device.getMACAddressString());
80 }
81 } catch (Exception e) {
82 // TODO: handle exceptions
Toshio Koide4f629f32013-06-13 13:39:38 -070083 op.rollback();
Pankaj Berdeda809572013-02-22 15:31:20 -080084 log.error("DeviceStorage:removeDevice mac:{} failed", device.getMACAddressString());
85 }
Pankaj Berdeb6031342013-02-19 18:51:51 -080086 }
87
88 @Override
89 public IDeviceObject getDeviceByMac(String mac) {
Toshio Koide4f629f32013-06-13 13:39:38 -070090 return op.searchDevice(mac);
Pankaj Berdeb6031342013-02-19 18:51:51 -080091 }
92
93 @Override
94 public IDeviceObject getDeviceByIP(String ip) {
95 // TODO Auto-generated method stub
96 return null;
97 }
98
Pankaj Berdeda809572013-02-22 15:31:20 -080099 @Override
100 public void changeDeviceAttachments(IDevice device) {
101 // TODO Auto-generated method stub
102 IDeviceObject obj = null;
103 try {
Toshio Koide4f629f32013-06-13 13:39:38 -0700104 if ((obj = op.searchDevice(device.getMACAddressString())) != null) {
Pankaj Berdeda809572013-02-22 15:31:20 -0800105 log.debug("Changing device ports {}: found existing device",device.getMACAddressString());
106 changeDeviceAttachments(device, obj);
Toshio Koide4f629f32013-06-13 13:39:38 -0700107 op.commit();
Pankaj Berdeda809572013-02-22 15:31:20 -0800108 } else {
109 log.debug("failed to search device...now adding {}",device.getMACAddressString());
110 addDevice(device);
111 }
112 } catch (Exception e) {
113 // TODO: handle exceptions
Toshio Koide4f629f32013-06-13 13:39:38 -0700114 op.rollback();
Pankaj Berdeda809572013-02-22 15:31:20 -0800115 log.error(":addDevice mac:{} failed", device.getMACAddressString());
116 }
117 }
118
119 public void changeDeviceAttachments(IDevice device, IDeviceObject obj) {
120 SwitchPort[] attachmentPoints = device.getAttachmentPoints();
121 List<IPortObject> attachedPorts = Lists.newArrayList(obj.getAttachedPorts());
122
123 for (SwitchPort ap : attachmentPoints) {
Toshio Koide4f629f32013-06-13 13:39:38 -0700124 IPortObject port = op.searchPort(
125 HexString.toHexString(ap.getSwitchDPID()),
126 (short) ap.getPort());
Pankaj Berdeda809572013-02-22 15:31:20 -0800127 if (attachedPorts.contains(port)) {
128 attachedPorts.remove(port);
129 } else {
130 log.debug("Adding device {}: attaching to port",device.getMACAddressString());
131 port.setDevice(obj);
132 //obj.setHostPort(port);
133 }
134 }
135 for (IPortObject port: attachedPorts) {
136 port.removeDevice(obj);
137 // obj.removeHostPort(port);
138 }
139 }
140
141 @Override
142 public void changeDeviceIPv4Address(IDevice device) {
143 // TODO Auto-generated method stub
144 IDeviceObject obj;
145 try {
Toshio Koide4f629f32013-06-13 13:39:38 -0700146 if ((obj = op.searchDevice(device.getMACAddressString())) != null) {
Pankaj Berdeda809572013-02-22 15:31:20 -0800147 obj.setIPAddress(device.getIPv4Addresses().toString());
Toshio Koide4f629f32013-06-13 13:39:38 -0700148 op.commit();
Pankaj Berdeda809572013-02-22 15:31:20 -0800149 } else {
150 log.error(":changeDeviceIPv4Address mac:{} failed", device.getMACAddressString());
151 }
152 } catch (TitanException e) {
153 // TODO: handle exceptions
Toshio Koide4f629f32013-06-13 13:39:38 -0700154 op.rollback();
Pankaj Berdeda809572013-02-22 15:31:20 -0800155 log.error(":changeDeviceIPv4Address mac:{} failed due to exception {}", device.getMACAddressString(),e);
156 }
157 }
158
Pankaj Berdeb6031342013-02-19 18:51:51 -0800159}