instructionBuilder
.setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteMetadata.class);
MetadataInstructionBuilder metadataBuilder = new MetadataInstructionBuilder();
- metadataBuilder.setMetadata(writeMetadata.getMetadata().toByteArray());
- metadataBuilder.setMetadataMask(writeMetadata.getMetadataMask().toByteArray());
+ metadataBuilder.setMetadata(MatchConvertor.convertBigIntegerTo64Bit(writeMetadata.getMetadata()));
+ metadataBuilder
+ .setMetadataMask(MatchConvertor.convertBigIntegerTo64Bit(writeMetadata.getMetadataMask()));
instructionBuilder.addAugmentation(MetadataInstruction.class, metadataBuilder.build());
instructionsList.add(instructionBuilder.build());
}
import java.math.BigInteger;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;
private static void addMetadataAugmentation(MatchEntriesBuilder builder, BigInteger metadata) {
MetadataMatchEntryBuilder metadataMatchEntry = new MetadataMatchEntryBuilder();
- metadataMatchEntry.setMetadata(metadata.toByteArray());
+ metadataMatchEntry.setMetadata(convertBigIntegerTo64Bit(metadata));
builder.addAugmentation(MetadataMatchEntry.class, metadataMatchEntry.build());
}
+ /**
+ * Utility method to convert BigInteger to 8 element byte array
+ * @param bigInteger
+ * @return byte array containing 64 bits.
+ */
+ public static byte[] convertBigIntegerTo64Bit(BigInteger bigInteger) {
+ if (bigInteger == null) {
+ return null;
+ }
+ byte[] inputArray = bigInteger.toByteArray();
+ byte[] outputArray = new byte[8];
+ if (bigInteger.compareTo(BigInteger.ZERO) < 0) {
+ Arrays.fill(outputArray, (byte) -1);
+ } else {
+ Arrays.fill(outputArray, (byte) 0);
+ }
+ System.arraycopy(inputArray, 0, outputArray, outputArray.length - inputArray.length, inputArray.length);
+ return outputArray;
+ }
+
/**
* @return true if Ipv4Prefix contains prefix (and it is used in mask),
* false otherwise