OpenFlow message processing for new loxi
Depends-On: Id69c8597eb4564653c56cdc90f2dcec50afbdd25
Change-Id: Ib14fbadd3debf98ce1d56343179f8e7929f8ade8
diff --git a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java
index afe2701..7cc5b5d 100644
--- a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java
+++ b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/ThirdPartyMessage.java
@@ -15,12 +15,15 @@
*/
package org.onosproject.openflow.controller;
-import org.jboss.netty.buffer.ChannelBuffer;
+import io.netty.buffer.ByteBuf;
import org.projectfloodlight.openflow.protocol.OFMessage;
import org.projectfloodlight.openflow.protocol.OFType;
import org.projectfloodlight.openflow.protocol.OFVersion;
import com.google.common.hash.PrimitiveSink;
+
+import java.util.Arrays;
+
/**
* Used to support for the third party privacy flow rule.
* it implements OFMessage interface to use exist adapter API.
@@ -61,11 +64,21 @@
}
@Override
- public void writeTo(ChannelBuffer channelBuffer) {
+ public void writeTo(ByteBuf byteBuf) {
// Do nothing here for now.
}
@Override
+ public boolean equalsIgnoreXid(Object obj) {
+ return Arrays.equals(payLoad, ((ThirdPartyMessage) obj).payLoad());
+ }
+
+ @Override
+ public int hashCodeIgnoreXid() {
+ return payLoad.hashCode();
+ }
+
+ @Override
public Builder createBuilder() {
// Do nothing here for now.
return null;
diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageDecoder.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageDecoder.java
index 26f7221..c5cb9f7 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageDecoder.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageDecoder.java
@@ -17,6 +17,8 @@
package org.onosproject.openflow.controller.impl;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
@@ -47,7 +49,15 @@
// a list of the parsed messages to the controller.
// The performance *may or may not* not be as good as before.
OFMessageReader<OFMessage> reader = OFFactories.getGenericReader();
- OFMessage message = reader.readFrom(buffer);
+
+ //toByteBuffer is optimized to avoid copying.
+ ByteBuf byteBuf = Unpooled.wrappedBuffer(buffer.toByteBuffer());
+ OFMessage message = reader.readFrom(byteBuf);
+
+ if (message != null) {
+ //set buffer's read index, as it has not been changed.
+ buffer.readerIndex(buffer.readerIndex() + byteBuf.readerIndex());
+ }
return message;
}
diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageEncoder.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageEncoder.java
index abb63f1..727301f 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageEncoder.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageEncoder.java
@@ -18,6 +18,8 @@
import java.util.List;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
@@ -46,13 +48,16 @@
size += ofm.getLengthU();
}*/
- ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
+ ByteBuf bb = Unpooled.buffer();
for (OFMessage ofm : msglist) {
if (ofm != null) {
- ofm.writeTo(buf);
+ ofm.writeTo(bb);
}
}
+
+ ChannelBuffer buf = ChannelBuffers.wrappedBuffer(bb.nioBuffer());
+
return buf;
}
diff --git a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OFDescStatsReplyAdapter.java b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OFDescStatsReplyAdapter.java
index 564ca7b..c49acbb 100644
--- a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OFDescStatsReplyAdapter.java
+++ b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OFDescStatsReplyAdapter.java
@@ -17,7 +17,7 @@
import java.util.Set;
-import org.jboss.netty.buffer.ChannelBuffer;
+import io.netty.buffer.ByteBuf;
import org.projectfloodlight.openflow.protocol.OFDescStatsReply;
import org.projectfloodlight.openflow.protocol.OFStatsReplyFlags;
import org.projectfloodlight.openflow.protocol.OFStatsType;
@@ -81,11 +81,23 @@
}
@Override
- public void writeTo(ChannelBuffer channelBuffer) {
+ public void writeTo(ByteBuf byteBuf) {
}
@Override
+ public boolean equalsIgnoreXid(Object obj) {
+ // Do nothing here for now
+ return true;
+ }
+
+ @Override
+ public int hashCodeIgnoreXid() {
+ // Do nothing here for now
+ return 0;
+ }
+
+ @Override
public Builder createBuilder() {
return null;
}
diff --git a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OfMessageAdapter.java b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OfMessageAdapter.java
index 6c9ddde..f0737e5 100644
--- a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OfMessageAdapter.java
+++ b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OfMessageAdapter.java
@@ -15,7 +15,7 @@
*/
package org.onosproject.openflow;
-import org.jboss.netty.buffer.ChannelBuffer;
+import io.netty.buffer.ByteBuf;
import org.projectfloodlight.openflow.protocol.OFMessage;
import org.projectfloodlight.openflow.protocol.OFType;
import org.projectfloodlight.openflow.protocol.OFVersion;
@@ -50,7 +50,19 @@
}
@Override
- public void writeTo(ChannelBuffer channelBuffer) { }
+ public void writeTo(ByteBuf byteBuf) { }
+
+ @Override
+ public boolean equalsIgnoreXid(Object obj) {
+ // Do nothing here for now
+ return true;
+ }
+
+ @Override
+ public int hashCodeIgnoreXid() {
+ // Do nothing here for now
+ return 0;
+ }
@Override
public Builder createBuilder() {
diff --git a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OFMessageEncoderTest.java b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OFMessageEncoderTest.java
index 43b5f3d..e62345c 100644
--- a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OFMessageEncoderTest.java
+++ b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OFMessageEncoderTest.java
@@ -18,6 +18,7 @@
import java.nio.charset.StandardCharsets;
import java.util.List;
+import io.netty.buffer.ByteBuf;
import org.jboss.netty.buffer.ChannelBuffer;
import org.junit.Test;
import org.onosproject.openflow.OfMessageAdapter;
@@ -45,9 +46,9 @@
}
@Override
- public void writeTo(ChannelBuffer channelBuffer) {
+ public void writeTo(ByteBuf byteBuf) {
String message = "message" + Integer.toString(id) + " ";
- channelBuffer.writeBytes(message.getBytes(StandardCharsets.UTF_8));
+ byteBuf.writeBytes(message.getBytes(StandardCharsets.UTF_8));
}
}