blob: cfbbb41f8389272c76efb008b93b79c6f6630322 [file] [log] [blame]
Pankaj Berdeb6031342013-02-19 18:51:51 -08001package net.floodlightcontroller.devicemanager.internal;
2
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.core.INetMapTopologyObjects.IDeviceObject;
11import net.floodlightcontroller.core.INetMapTopologyObjects.IPortObject;
12import net.floodlightcontroller.core.INetMapTopologyService.ITopoSwitchService;
13import net.floodlightcontroller.core.internal.SwitchStorageImpl;
14import net.floodlightcontroller.devicemanager.IDevice;
15import net.floodlightcontroller.devicemanager.IDeviceStorage;
16import net.floodlightcontroller.devicemanager.SwitchPort;
Pankaj Berdeda809572013-02-22 15:31:20 -080017import net.onrc.onos.util.GraphDBConnection;
18import net.onrc.onos.util.GraphDBConnection.Transaction;
Pankaj Berdeb6031342013-02-19 18:51:51 -080019
20public class DeviceStorageImpl implements IDeviceStorage {
21
Pankaj Berdeda809572013-02-22 15:31:20 -080022// public TitanGraph graph;
23 public GraphDBConnection conn;
Pankaj Berdeb6031342013-02-19 18:51:51 -080024 protected static Logger log = LoggerFactory.getLogger(SwitchStorageImpl.class);
25 public ITopoSwitchService svc;
26
27 @Override
28 public void init(String conf) {
Pankaj Berdeda809572013-02-22 15:31:20 -080029 conn = GraphDBConnection.getInstance(conf);
Pankaj Berdeb6031342013-02-19 18:51:51 -080030 }
31
32 public void finalize() {
33 close();
34 }
35
36 @Override
37 public void close() {
Pankaj Berdeda809572013-02-22 15:31:20 -080038 conn.close();
Pankaj Berdeb6031342013-02-19 18:51:51 -080039 }
40
41 @Override
42 public IDeviceObject addDevice(IDevice device) {
43 // TODO Auto-generated method stub
Pankaj Berdeb6031342013-02-19 18:51:51 -080044 IDeviceObject obj = null;
Pankaj Berdeb6031342013-02-19 18:51:51 -080045 try {
Pankaj Berdeda809572013-02-22 15:31:20 -080046 if ((obj = conn.utils().searchDevice(conn, device.getMACAddressString())) != null) {
47 log.debug("Adding device {}: found existing device",device.getMACAddressString());
Pankaj Berdeb6031342013-02-19 18:51:51 -080048 } else {
Pankaj Berdeda809572013-02-22 15:31:20 -080049 obj = conn.utils().newDevice(conn);
50 log.debug("Adding device {}: creating new device",device.getMACAddressString());
Pankaj Berdeb6031342013-02-19 18:51:51 -080051 }
Pankaj Berdeda809572013-02-22 15:31:20 -080052 changeDeviceAttachments(device, obj);
53
Pankaj Berdeb6031342013-02-19 18:51:51 -080054 obj.setIPAddress(device.getIPv4Addresses().toString());
55 obj.setMACAddress(device.getMACAddressString());
56 obj.setType("device");
57 obj.setState("ACTIVE");
Pankaj Berdeda809572013-02-22 15:31:20 -080058 conn.endTx(Transaction.COMMIT);
59
60 log.debug("Adding device {}",device.getMACAddressString());
61 } catch (Exception e) {
Pankaj Berdeb6031342013-02-19 18:51:51 -080062 // TODO: handle exceptions
Pankaj Berdeda809572013-02-22 15:31:20 -080063 conn.endTx(Transaction.ROLLBACK);
Pankaj Berdeb6031342013-02-19 18:51:51 -080064 log.error(":addDevice mac:{} failed", device.getMACAddressString());
65 }
66
67 return obj;
68 }
69
70 @Override
71 public IDeviceObject updateDevice(IDevice device) {
Pankaj Berdeb6031342013-02-19 18:51:51 -080072 return addDevice(device);
73 }
74
75 @Override
Pankaj Berdeda809572013-02-22 15:31:20 -080076 public void removeDevice(IDevice device) {
Pankaj Berdeb6031342013-02-19 18:51:51 -080077 // TODO Auto-generated method stub
Pankaj Berdeda809572013-02-22 15:31:20 -080078 IDeviceObject dev;
79 try {
80 if ((dev = conn.utils().searchDevice(conn, device.getMACAddressString())) != null) {
81 conn.utils().removeDevice(conn, dev);
82 conn.endTx(Transaction.COMMIT);
83 log.error("DeviceStorage:removeDevice mac:{} done", device.getMACAddressString());
84 }
85 } catch (Exception e) {
86 // TODO: handle exceptions
87 conn.endTx(Transaction.ROLLBACK);
88 log.error("DeviceStorage:removeDevice mac:{} failed", device.getMACAddressString());
89 }
Pankaj Berdeb6031342013-02-19 18:51:51 -080090 }
91
92 @Override
93 public IDeviceObject getDeviceByMac(String mac) {
Pankaj Berdeda809572013-02-22 15:31:20 -080094
Pankaj Berdeb6031342013-02-19 18:51:51 -080095 return null;
96 }
97
98 @Override
99 public IDeviceObject getDeviceByIP(String ip) {
100 // TODO Auto-generated method stub
101 return null;
102 }
103
Pankaj Berdeda809572013-02-22 15:31:20 -0800104 @Override
105 public void changeDeviceAttachments(IDevice device) {
106 // TODO Auto-generated method stub
107 IDeviceObject obj = null;
108 try {
109 if ((obj = conn.utils().searchDevice(conn, device.getMACAddressString())) != null) {
110 log.debug("Changing device ports {}: found existing device",device.getMACAddressString());
111 changeDeviceAttachments(device, obj);
112 conn.endTx(Transaction.COMMIT);
113 } else {
114 log.debug("failed to search device...now adding {}",device.getMACAddressString());
115 addDevice(device);
116 }
117 } catch (Exception e) {
118 // TODO: handle exceptions
119 conn.endTx(Transaction.ROLLBACK);
120 log.error(":addDevice mac:{} failed", device.getMACAddressString());
121 }
122 }
123
124 public void changeDeviceAttachments(IDevice device, IDeviceObject obj) {
125 SwitchPort[] attachmentPoints = device.getAttachmentPoints();
126 List<IPortObject> attachedPorts = Lists.newArrayList(obj.getAttachedPorts());
127
128 for (SwitchPort ap : attachmentPoints) {
129 IPortObject port = conn.utils().searchPort(conn,
130 HexString.toHexString(ap.getSwitchDPID()),
131 (short) ap.getPort());
132 if (attachedPorts.contains(port)) {
133 attachedPorts.remove(port);
134 } else {
135 log.debug("Adding device {}: attaching to port",device.getMACAddressString());
136 port.setDevice(obj);
137 //obj.setHostPort(port);
138 }
139 }
140 for (IPortObject port: attachedPorts) {
141 port.removeDevice(obj);
142 // obj.removeHostPort(port);
143 }
144 }
145
146 @Override
147 public void changeDeviceIPv4Address(IDevice device) {
148 // TODO Auto-generated method stub
149 IDeviceObject obj;
150 try {
151 if ((obj = conn.utils().searchDevice(conn, device.getMACAddressString())) != null) {
152 obj.setIPAddress(device.getIPv4Addresses().toString());
153 conn.endTx(Transaction.COMMIT);
154 } else {
155 log.error(":changeDeviceIPv4Address mac:{} failed", device.getMACAddressString());
156 }
157 } catch (TitanException e) {
158 // TODO: handle exceptions
159 conn.endTx(Transaction.ROLLBACK);
160 log.error(":changeDeviceIPv4Address mac:{} failed due to exception {}", device.getMACAddressString(),e);
161 }
162 }
163
Pankaj Berdeb6031342013-02-19 18:51:51 -0800164}