From 43c72332bfe4c9a380fee2f2cadf049fa7bb0aa0 Mon Sep 17 00:00:00 2001 From: Aswin Suryanarayanan Date: Mon, 1 Aug 2016 12:54:09 +0530 Subject: [PATCH] Mask Support for TCP and UDP ports in nicira extension Reverting https://git.opendaylight.org/gerrit/#/c/40163/ The support is added as a part of nicira extension and a part of standard of spec. Change-Id: Id254155f026216f11c76264e6ff5ece57f306a94 Signed-off-by: Aswin Suryanarayanan --- .../openflowjava/nx/codec/match/TcpDstCodec.java | 8 +++++++- .../openflowjava/nx/codec/match/TcpSrcCodec.java | 5 ++++- .../openflowjava/nx/codec/match/UdpDstCodec.java | 5 ++++- .../openflowjava/nx/codec/match/UdpSrcCodec.java | 5 ++++- .../openflowjava/nx/codec/match/TcpDstCodecTest.java | 10 +++++++--- .../openflowjava/nx/codec/match/TcpSrcCodecTest.java | 10 +++++++--- .../openflowjava/nx/codec/match/UdpDstCodecTest.java | 11 +++++++---- .../openflowjava/nx/codec/match/UdpSrcCodecTest.java | 11 +++++++---- 8 files changed, 47 insertions(+), 18 deletions(-) diff --git a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/TcpDstCodec.java b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/TcpDstCodec.java index 8b96c2699d..b265be3142 100644 --- a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/TcpDstCodec.java +++ b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/TcpDstCodec.java @@ -44,15 +44,19 @@ public class TcpDstCodec extends AbstractMatchCodec { serializeHeader(input, outBuffer); TcpDstCaseValue tcpDstCase = ((TcpDstCaseValue) input.getMatchEntryValue()); outBuffer.writeShort(tcpDstCase.getTcpDstValues().getPort().getValue()); + outBuffer.writeShort(tcpDstCase.getTcpDstValues().getMask()); } @Override public MatchEntry deserialize(ByteBuf message) { MatchEntryBuilder matchEntryBuilder = deserializeHeader(message); + matchEntryBuilder.setHasMask(true); int portNo = message.readUnsignedShort(); + int mask = message.readUnsignedShort(); TcpDstCaseValueBuilder caseBuilder = new TcpDstCaseValueBuilder(); TcpDstValuesBuilder tcpDstValuesBuilder = new TcpDstValuesBuilder(); tcpDstValuesBuilder.setPort(new PortNumber(portNo)); + tcpDstValuesBuilder.setMask(mask); caseBuilder.setTcpDstValues(tcpDstValuesBuilder.build()); matchEntryBuilder.setMatchEntryValue(caseBuilder.build()); return matchEntryBuilder.build(); @@ -74,7 +78,9 @@ public class TcpDstCodec extends AbstractMatchCodec { } @Override - public Class getNxmField() { return NxmOfTcpDst.class; } + public Class getNxmField() { + return NxmOfTcpDst.class; + } @Override public Class getOxmClass() { diff --git a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/TcpSrcCodec.java b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/TcpSrcCodec.java index 90b47d3bc0..090ee90d05 100644 --- a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/TcpSrcCodec.java +++ b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/TcpSrcCodec.java @@ -43,16 +43,19 @@ public class TcpSrcCodec extends AbstractMatchCodec { serializeHeader(input, outBuffer); TcpSrcCaseValue tcpSrcCase = ((TcpSrcCaseValue) input.getMatchEntryValue()); outBuffer.writeShort(tcpSrcCase.getTcpSrcValues().getPort().getValue()); + outBuffer.writeShort(tcpSrcCase.getTcpSrcValues().getMask()); } @Override public MatchEntry deserialize(ByteBuf message) { MatchEntryBuilder matchEntryBuilder = deserializeHeader(message); - matchEntryBuilder.setHasMask(false); + matchEntryBuilder.setHasMask(true); int portNo = message.readUnsignedShort(); + int mask = message.readUnsignedShort(); TcpSrcCaseValueBuilder caseBuilder = new TcpSrcCaseValueBuilder(); TcpSrcValuesBuilder tcpSrcValuesBuilder = new TcpSrcValuesBuilder(); tcpSrcValuesBuilder.setPort(new PortNumber(portNo)); + tcpSrcValuesBuilder.setMask(mask); caseBuilder.setTcpSrcValues(tcpSrcValuesBuilder.build()); matchEntryBuilder.setMatchEntryValue(caseBuilder.build()); return matchEntryBuilder.build(); diff --git a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/UdpDstCodec.java b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/UdpDstCodec.java index 996d70ac4b..4264465b25 100644 --- a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/UdpDstCodec.java +++ b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/UdpDstCodec.java @@ -45,16 +45,19 @@ public class UdpDstCodec extends AbstractMatchCodec { serializeHeader(input, outBuffer); UdpDstCaseValue udpDstCase = ((UdpDstCaseValue) input.getMatchEntryValue()); outBuffer.writeShort(udpDstCase.getUdpDstValues().getPort().getValue()); + outBuffer.writeShort(udpDstCase.getUdpDstValues().getMask()); } @Override public MatchEntry deserialize(ByteBuf message) { MatchEntryBuilder matchEntryBuilder = deserializeHeader(message); - matchEntryBuilder.setHasMask(false); + matchEntryBuilder.setHasMask(true); int portNo = message.readUnsignedShort(); + int mask = message.readUnsignedShort(); UdpDstCaseValueBuilder caseBuilder = new UdpDstCaseValueBuilder(); UdpDstValuesBuilder udpDstValuesBuilder = new UdpDstValuesBuilder(); udpDstValuesBuilder.setPort(new PortNumber(portNo)); + udpDstValuesBuilder.setMask(mask); caseBuilder.setUdpDstValues(udpDstValuesBuilder.build()); matchEntryBuilder.setMatchEntryValue(caseBuilder.build()); return matchEntryBuilder.build(); diff --git a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/UdpSrcCodec.java b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/UdpSrcCodec.java index 6ef7302070..b30ba5b102 100644 --- a/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/UdpSrcCodec.java +++ b/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/match/UdpSrcCodec.java @@ -45,16 +45,19 @@ public class UdpSrcCodec extends AbstractMatchCodec { serializeHeader(input, outBuffer); UdpSrcCaseValue udpSrcCase = ((UdpSrcCaseValue) input.getMatchEntryValue()); outBuffer.writeShort(udpSrcCase.getUdpSrcValues().getPort().getValue()); + outBuffer.writeShort(udpSrcCase.getUdpSrcValues().getMask()); } @Override public MatchEntry deserialize(ByteBuf message) { MatchEntryBuilder matchEntryBuilder = deserializeHeader(message); - matchEntryBuilder.setHasMask(false); + matchEntryBuilder.setHasMask(true); int portNo = message.readUnsignedShort(); + int mask = message.readUnsignedShort(); UdpSrcCaseValueBuilder caseBuilder = new UdpSrcCaseValueBuilder(); UdpSrcValuesBuilder udpSrcValuesBuilder = new UdpSrcValuesBuilder(); udpSrcValuesBuilder.setPort(new PortNumber(portNo)); + udpSrcValuesBuilder.setMask(mask); caseBuilder.setUdpSrcValues(udpSrcValuesBuilder.build()); matchEntryBuilder.setMatchEntryValue(caseBuilder.build()); return matchEntryBuilder.build(); diff --git a/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/TcpDstCodecTest.java b/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/TcpDstCodecTest.java index 94b9ba6277..11ae81ea5f 100644 --- a/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/TcpDstCodecTest.java +++ b/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/TcpDstCodecTest.java @@ -47,9 +47,10 @@ public class TcpDstCodecTest { assertEquals(OxmMatchConstants.NXM_0_CLASS, buffer.readUnsignedShort()); short fieldMask = buffer.readUnsignedByte(); assertEquals(NXM_FIELD_CODE, fieldMask >> 1); - assertEquals(0, fieldMask & 1); + assertEquals(1, fieldMask & 1); assertEquals(VALUE_LENGTH, buffer.readUnsignedByte()); assertEquals(1, buffer.readUnsignedShort()); + assertEquals(0xffff, buffer.readUnsignedShort()); } @Test @@ -62,8 +63,9 @@ public class TcpDstCodecTest { assertEquals(Nxm0Class.class, input.getOxmClass()); assertEquals(NxmOfTcpDst.class, input.getOxmMatchField()); - assertEquals(false, input.isHasMask()); + assertEquals(true, input.isHasMask()); assertEquals(1, result.getTcpDstValues().getPort().getValue().shortValue()); + assertEquals(0xffff, result.getTcpDstValues().getMask().shortValue() & 0xffff); } @@ -74,9 +76,10 @@ public class TcpDstCodecTest { matchEntryBuilder.setOxmClass(Nxm0Class.class); matchEntryBuilder.setOxmMatchField(NxmOfTcpDst.class); - matchEntryBuilder.setHasMask(false); + matchEntryBuilder.setHasMask(true); valuesBuilder.setPort(new PortNumber(1)); + valuesBuilder.setMask(0xffff); caseBuilder.setTcpDstValues(valuesBuilder.build()); matchEntryBuilder.setMatchEntryValue(caseBuilder.build()); @@ -91,6 +94,7 @@ public class TcpDstCodecTest { message.writeByte(VALUE_LENGTH); //Port num = 1 message.writeShort(1); + message.writeShort(0xffff); } } diff --git a/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/TcpSrcCodecTest.java b/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/TcpSrcCodecTest.java index 8863a51f4a..124d2bddec 100644 --- a/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/TcpSrcCodecTest.java +++ b/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/TcpSrcCodecTest.java @@ -47,9 +47,10 @@ public class TcpSrcCodecTest { assertEquals(OxmMatchConstants.NXM_0_CLASS, buffer.readUnsignedShort()); short fieldMask = buffer.readUnsignedByte(); assertEquals(NXM_FIELD_CODE, fieldMask >> 1); - assertEquals(0, fieldMask & 1); + assertEquals(1, fieldMask & 1); assertEquals(VALUE_LENGTH, buffer.readUnsignedByte()); assertEquals(1, buffer.readUnsignedShort()); + assertEquals(0xffff, buffer.readUnsignedShort()); } @Test @@ -62,8 +63,9 @@ public class TcpSrcCodecTest { assertEquals(Nxm0Class.class, input.getOxmClass()); assertEquals(NxmOfTcpSrc.class, input.getOxmMatchField()); - assertEquals(false, input.isHasMask()); + assertEquals(true, input.isHasMask()); assertEquals(1, result.getTcpSrcValues().getPort().getValue().shortValue()); + assertEquals(0xffff, result.getTcpSrcValues().getMask().shortValue() & 0xffff); } private MatchEntry createMatchEntry() { @@ -73,9 +75,10 @@ public class TcpSrcCodecTest { matchEntryBuilder.setOxmClass(Nxm0Class.class); matchEntryBuilder.setOxmMatchField(NxmOfTcpSrc.class); - matchEntryBuilder.setHasMask(false); + matchEntryBuilder.setHasMask(true); valuesBuilder.setPort(new PortNumber(1)); + valuesBuilder.setMask(0xffff); caseBuilder.setTcpSrcValues(valuesBuilder.build()); matchEntryBuilder.setMatchEntryValue(caseBuilder.build()); @@ -90,6 +93,7 @@ public class TcpSrcCodecTest { message.writeByte(VALUE_LENGTH); //Port num = 1 message.writeShort(1); + message.writeShort(0xffff); } } diff --git a/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/UdpDstCodecTest.java b/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/UdpDstCodecTest.java index 6ed9fca21d..58bcff6d5e 100644 --- a/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/UdpDstCodecTest.java +++ b/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/UdpDstCodecTest.java @@ -47,9 +47,10 @@ public class UdpDstCodecTest { assertEquals(OxmMatchConstants.NXM_0_CLASS, buffer.readUnsignedShort()); short fieldMask = buffer.readUnsignedByte(); assertEquals(NXM_FIELD_CODE, fieldMask >> 1); - assertEquals(0, fieldMask & 1); + assertEquals(1, fieldMask & 1); assertEquals(VALUE_LENGTH, buffer.readUnsignedByte()); assertEquals(1, buffer.readUnsignedShort()); + assertEquals(0xffff, buffer.readUnsignedShort()); } @Test @@ -62,8 +63,9 @@ public class UdpDstCodecTest { assertEquals(Nxm0Class.class, input.getOxmClass()); assertEquals(NxmOfUdpDst.class, input.getOxmMatchField()); - assertEquals(false, input.isHasMask()); + assertEquals(true, input.isHasMask()); assertEquals(1, result.getUdpDstValues().getPort().getValue().shortValue()); + assertEquals(0xffff, result.getUdpDstValues().getMask().shortValue() & 0xffff); } @@ -74,9 +76,10 @@ public class UdpDstCodecTest { matchEntryBuilder.setOxmClass(Nxm0Class.class); matchEntryBuilder.setOxmMatchField(NxmOfUdpDst.class); - matchEntryBuilder.setHasMask(false); + matchEntryBuilder.setHasMask(true); valuesBuilder.setPort(new PortNumber(1)); + valuesBuilder.setMask(0xffff); caseBuilder.setUdpDstValues(valuesBuilder.build()); matchEntryBuilder.setMatchEntryValue(caseBuilder.build()); @@ -89,8 +92,8 @@ public class UdpDstCodecTest { int fieldMask = (NXM_FIELD_CODE << 1); message.writeByte(fieldMask); message.writeByte(VALUE_LENGTH); - byte[] value = new byte[VALUE_LENGTH]; //Port num = 1 message.writeShort(1); + message.writeShort(0xffff); } } diff --git a/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/UdpSrcCodecTest.java b/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/UdpSrcCodecTest.java index eb08f174ca..66b0aa210d 100644 --- a/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/UdpSrcCodecTest.java +++ b/extension/openflowjava-extension-nicira/src/test/java/org/opendaylight/openflowjava/nx/codec/match/UdpSrcCodecTest.java @@ -47,9 +47,10 @@ public class UdpSrcCodecTest { assertEquals(OxmMatchConstants.NXM_0_CLASS, buffer.readUnsignedShort()); short fieldMask = buffer.readUnsignedByte(); assertEquals(NXM_FIELD_CODE, fieldMask >> 1); - assertEquals(0, fieldMask & 1); + assertEquals(1, fieldMask & 1); assertEquals(VALUE_LENGTH, buffer.readUnsignedByte()); assertEquals(1, buffer.readUnsignedShort()); + assertEquals(0xffff, buffer.readUnsignedShort()); } @Test @@ -62,8 +63,9 @@ public class UdpSrcCodecTest { assertEquals(Nxm0Class.class, input.getOxmClass()); assertEquals(NxmOfUdpSrc.class, input.getOxmMatchField()); - assertEquals(false, input.isHasMask()); + assertEquals(true, input.isHasMask()); assertEquals(1, result.getUdpSrcValues().getPort().getValue().shortValue()); + assertEquals(0xffff, result.getUdpSrcValues().getMask().shortValue() & 0xffff); } private MatchEntry createMatchEntry() { @@ -73,9 +75,10 @@ public class UdpSrcCodecTest { matchEntryBuilder.setOxmClass(Nxm0Class.class); matchEntryBuilder.setOxmMatchField(NxmOfUdpSrc.class); - matchEntryBuilder.setHasMask(false); + matchEntryBuilder.setHasMask(true); valuesBuilder.setPort(new PortNumber(1)); + valuesBuilder.setMask(0xffff); caseBuilder.setUdpSrcValues(valuesBuilder.build()); matchEntryBuilder.setMatchEntryValue(caseBuilder.build()); @@ -88,9 +91,9 @@ public class UdpSrcCodecTest { int fieldMask = (NXM_FIELD_CODE << 1); message.writeByte(fieldMask); message.writeByte(VALUE_LENGTH); - byte[] value = new byte[VALUE_LENGTH]; //Port num = 1 message.writeShort(1); + message.writeShort(0xffff); } } -- 2.36.6