* @author michal.polkorab\r
*/\r
public abstract class MatchDeserializer {\r
+\r
private static final Logger LOGGER = LoggerFactory.getLogger(MatchDeserializer.class);\r
- private static final byte SIZE_OF_LONG_IN_BYTES = Long.SIZE / Byte.SIZE;\r
- private static final byte SIZE_OF_INT_IN_BYTES = Integer.SIZE / Byte.SIZE;\r
- private static final byte SIZE_OF_SHORT_IN_BYTES = Short.SIZE / Byte.SIZE;\r
- private static final byte SIZE_OF_BYTE_IN_BYTES = Byte.SIZE / Byte.SIZE;\r
- private static final byte SIZE_OF_IPV6_ADDRESS_IN_BYTES = (8 * Short.SIZE) / Byte.SIZE;\r
- \r
\r
/**\r
* Creates match\r
default:\r
break;\r
}\r
- builder.setMatchEntries(createMatchEntries(in, length - 2 * (Short.SIZE / Byte.SIZE)));\r
+ builder.setMatchEntries(createMatchEntries(in, length - 2 * (EncodeConstants.SIZE_OF_SHORT_IN_BYTES)));\r
int paddingRemainder = length % EncodeConstants.PADDING;\r
if (paddingRemainder != 0) {\r
in.skipBytes(EncodeConstants.PADDING - paddingRemainder);\r
matchEntriesBuilder.setHasMask(hasMask);\r
int matchField = fieldAndMask >> 1;\r
int matchEntryLength = in.readUnsignedByte();\r
- currLength += SIZE_OF_SHORT_IN_BYTES + (2 * SIZE_OF_BYTE_IN_BYTES) + matchEntryLength;\r
+ currLength += EncodeConstants.SIZE_OF_SHORT_IN_BYTES +\r
+ (2 * EncodeConstants.SIZE_OF_BYTE_IN_BYTES) + matchEntryLength;\r
\r
switch(matchField) {\r
case 0: \r
matchEntriesBuilder.setOxmMatchField(Metadata.class);\r
addMetadataAugmentation(matchEntriesBuilder, in);\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_LONG_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_LONG_IN_BYTES);\r
}\r
break;\r
case 3:\r
matchEntriesBuilder.setOxmMatchField(EthDst.class);\r
addMacAddressAugmentation(matchEntriesBuilder, in);\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_LONG_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_LONG_IN_BYTES);\r
}\r
break;\r
case 4:\r
matchEntriesBuilder.setOxmMatchField(EthSrc.class);\r
addMacAddressAugmentation(matchEntriesBuilder, in);\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_LONG_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_LONG_IN_BYTES);\r
}\r
break;\r
case 5:\r
vlanVidBuilder.setVlanVid(vidEntryValue >> 1);\r
matchEntriesBuilder.addAugmentation(VlanVidMatchEntry.class, vlanVidBuilder.build());\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_SHORT_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
}\r
break;\r
case 7:\r
break;\r
case 11:\r
matchEntriesBuilder.setOxmMatchField(Ipv4Src.class);\r
- // TODO - ipv4address - check format with tests\r
LOGGER.warn("IPV4address(ipv4src): received but possible wrong deserialization");\r
addIpv4AddressAugmentation(matchEntriesBuilder, in);\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_INT_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);\r
}\r
break;\r
case 12:\r
matchEntriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
- // TODO - ipv4address - check format with tests\r
LOGGER.warn("IPV4address(ipv4dst): received but possible wrong deserialization");\r
addIpv4AddressAugmentation(matchEntriesBuilder, in);\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_INT_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);\r
}\r
break;\r
case 13:\r
break;\r
case 22:\r
matchEntriesBuilder.setOxmMatchField(ArpSpa.class);\r
- // TODO - ipv4address - check format with tests\r
LOGGER.warn("IPV4address(arpspa): received but possible wrong deserialization");\r
addIpv4AddressAugmentation(matchEntriesBuilder, in);\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_INT_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);\r
}\r
break;\r
case 23:\r
matchEntriesBuilder.setOxmMatchField(ArpTpa.class);\r
- // TODO - ipv4address - check format with tests\r
LOGGER.warn("IPV4address(arptpa): received but possible wrong deserialization");\r
addIpv4AddressAugmentation(matchEntriesBuilder, in);\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_INT_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);\r
}\r
break;\r
case 24:\r
matchEntriesBuilder.setOxmMatchField(ArpSha.class);\r
addMacAddressAugmentation(matchEntriesBuilder, in);\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_LONG_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_LONG_IN_BYTES);\r
}\r
break;\r
case 25:\r
matchEntriesBuilder.setOxmMatchField(ArpTha.class);\r
addMacAddressAugmentation(matchEntriesBuilder, in);\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_LONG_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_LONG_IN_BYTES);\r
}\r
break;\r
case 26:\r
LOGGER.warn("IPV6address(Ipv6Src): received but possible wrong deserialization");\r
addIpv6AddressAugmentation(matchEntriesBuilder, in);\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_IPV6_ADDRESS_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_IPV6_ADDRESS_IN_BYTES);\r
}\r
break;\r
case 27:\r
LOGGER.warn("IPV6address(Ipv6Dst): received but possible wrong deserialization");\r
addIpv6AddressAugmentation(matchEntriesBuilder, in);\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_IPV6_ADDRESS_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_IPV6_ADDRESS_IN_BYTES);\r
}\r
break;\r
case 28:\r
ipv6FlabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(in.readUnsignedInt()));\r
matchEntriesBuilder.addAugmentation(Ipv6FlabelMatchEntry.class, ipv6FlabelBuilder.build());\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_INT_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);\r
}\r
break;\r
case 29:\r
isidBuilder.setIsid(in.readUnsignedInt());\r
matchEntriesBuilder.addAugmentation(IsidMatchEntry.class, isidBuilder.build());\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_INT_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);\r
}\r
break;\r
case 38:\r
matchEntriesBuilder.setOxmMatchField(TunnelId.class);\r
addMetadataAugmentation(matchEntriesBuilder, in);\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_LONG_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_LONG_IN_BYTES);\r
}\r
break;\r
case 39:\r
pseudoBuilder.setPseudoField(new PseudoField(AUTH, DEST, ESP, FRAG, HOP, NONEXT, ROUTER, UNREP, UNSEQ));\r
matchEntriesBuilder.addAugmentation(PseudoFieldMatchEntry.class, pseudoBuilder.build());\r
if (hasMask) {\r
- addMaskAugmentation(matchEntriesBuilder, in, SIZE_OF_SHORT_IN_BYTES);\r
+ addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
}\r
break;\r
default: \r
}\r
\r
private static void addIpv6AddressAugmentation(MatchEntriesBuilder builder, ByteBuf in) {\r
- final byte GROUPS_IN_IPV6_ADDRESS = 8;\r
Ipv6AddressMatchEntryBuilder ipv6AddressBuilder = new Ipv6AddressMatchEntryBuilder();\r
List<String> groups = new ArrayList<>();\r
- for (int i = 0; i < GROUPS_IN_IPV6_ADDRESS; i++) {\r
+ for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV6_ADDRESS; i++) {\r
groups.add(String.format("X", in.readUnsignedShort()));\r
}\r
Joiner joiner = Joiner.on(":");\r
}\r
\r
private static void addIpv4AddressAugmentation(MatchEntriesBuilder builder, ByteBuf in) {\r
- final byte GROUPS_IN_IPV4_ADDRESS = 4;\r
Ipv4AddressMatchEntryBuilder ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();\r
List<String> groups = new ArrayList<>();\r
- for (int i = 0; i < GROUPS_IN_IPV4_ADDRESS; i++) {\r
+ for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV4_ADDRESS; i++) {\r
groups.add(Short.toString(in.readUnsignedByte()));\r
}\r
Joiner joiner = Joiner.on(".");\r
}\r
\r
private static void addMacAddressAugmentation(MatchEntriesBuilder builder, ByteBuf in) {\r
- final int MAC_ADDRESS_LENGTH = 6;\r
MacAddressMatchEntryBuilder macAddress = new MacAddressMatchEntryBuilder();\r
- byte[] address = new byte[MAC_ADDRESS_LENGTH];\r
+ byte[] address = new byte[EncodeConstants.MAC_ADDRESS_LENGTH];\r
in.readBytes(address);\r
macAddress.setMacAddress(new MacAddress(ByteBufUtils.macAddressToString(address)));\r
builder.addAugmentation(MacAddressMatchEntry.class, macAddress.build());\r