Implement serialization/deserialization feature for each Intent classes
Change-Id: I63db34914d8df76d5a000831da1e03e03383e62f
diff --git a/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java b/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
index b659179..8a2e101 100644
--- a/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
@@ -4,6 +4,9 @@
import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
import net.onrc.onos.ofcontroller.networkgraph.Port;
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+
/**
* @author Toshio Koide (t-koide@onlab.us)
*/
@@ -26,7 +29,38 @@
this.bandwidth = bandwidth;
}
+ public static ConstrainedShortestPathIntent fromBytes(NetworkGraph graph, byte[] bytes) {
+ Input input = new Input(bytes);
+ ConstrainedShortestPathIntent intent = new ConstrainedShortestPathIntent(graph,
+ input.readString(),
+ input.readLong(),
+ input.readLong(),
+ input.readLong(),
+ input.readLong(),
+ input.readLong(),
+ input.readLong(),
+ input.readDouble());
+ input.close();
+ return intent;
+ }
+
public Double getBandwidth() {
return bandwidth;
}
+
+ @Override
+ public byte[] toBytes() {
+ byte[] buffer = new byte[1024];
+ Output output = new Output(buffer, -1);
+ output.writeString(id);
+ output.writeLong(srcPort.getSwitch().getDpid());
+ output.writeLong(srcPort.getNumber());
+ output.writeLong(srcMac.toLong());
+ output.writeLong(dstPort.getSwitch().getDpid());
+ output.writeLong(dstPort.getNumber());
+ output.writeLong(dstMac.toLong());
+ output.writeDouble(bandwidth);
+ output.close();
+ return output.toBytes();
+ }
}
diff --git a/src/main/java/net/onrc/onos/intent/Intent.java b/src/main/java/net/onrc/onos/intent/Intent.java
index 823b106..070af25 100644
--- a/src/main/java/net/onrc/onos/intent/Intent.java
+++ b/src/main/java/net/onrc/onos/intent/Intent.java
@@ -13,6 +13,8 @@
public String getId() {
return id;
}
+
+ abstract public byte[] toBytes();
@Override
public int hashCode() {
diff --git a/src/main/java/net/onrc/onos/intent/PathIntent.java b/src/main/java/net/onrc/onos/intent/PathIntent.java
index 07f53e1..3afa92e 100644
--- a/src/main/java/net/onrc/onos/intent/PathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/PathIntent.java
@@ -38,4 +38,10 @@
public Intent getParentIntent() {
return parentIntent;
}
+
+ @Override
+ public byte[] toBytes() {
+ // TODO not implemented yet
+ return null;
+ }
}
diff --git a/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java b/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
index b1f58f5..3fdcf66 100644
--- a/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
@@ -1,5 +1,8 @@
package net.onrc.onos.intent;
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+
import net.floodlightcontroller.util.MACAddress;
import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
import net.onrc.onos.ofcontroller.networkgraph.Port;
@@ -33,6 +36,20 @@
this.dstMac = MACAddress.valueOf(dstMac);
}
+ public static ShortestPathIntent fromBytes(NetworkGraph graph, byte[] bytes) {
+ Input input = new Input(bytes);
+ ShortestPathIntent intent = new ShortestPathIntent(graph,
+ input.readString(),
+ input.readLong(),
+ input.readLong(),
+ input.readLong(),
+ input.readLong(),
+ input.readLong(),
+ input.readLong());
+ input.close();
+ return intent;
+ }
+
public Port getSourcePort() {
return srcPort;
}
@@ -55,4 +72,19 @@
srcPort.toString(), srcMac.toString(),
dstPort.toString(), dstMac.toString());
}
+
+ @Override
+ public byte[] toBytes() {
+ byte[] buffer = new byte[1024];
+ Output output = new Output(buffer, -1);
+ output.writeString(id);
+ output.writeLong(srcPort.getSwitch().getDpid());
+ output.writeLong(srcPort.getNumber());
+ output.writeLong(srcMac.toLong());
+ output.writeLong(dstPort.getSwitch().getDpid());
+ output.writeLong(dstPort.getNumber());
+ output.writeLong(dstMac.toLong());
+ output.close();
+ return output.toBytes();
+ }
}