diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ArpOpcode.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ArpOpcode.java index 2fb281628..b2ef52c91 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ArpOpcode.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ArpOpcode.java @@ -186,6 +186,11 @@ public int compareTo(ArpOpcode o) { return UnsignedInts.compare(opcode, o.opcode); } + @Override + public void writeTo(ByteBuf bb) { + write2Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putShort((short) this.opcode); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/BundleId.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/BundleId.java index 7f6b49686..5423881bd 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/BundleId.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/BundleId.java @@ -85,6 +85,11 @@ public int compareTo(BundleId o) { return UnsignedInts.compare(rawValue, rawValue); } + @Override + public void writeTo(ByteBuf bb) { + write4Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putInt(rawValue); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ClassId.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ClassId.java index c5f18cd70..93b2651c6 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ClassId.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ClassId.java @@ -85,6 +85,11 @@ public int compareTo(ClassId o) { return UnsignedInts.compare(rawValue, rawValue); } + @Override + public void writeTo(ByteBuf bb) { + write4Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putInt(rawValue); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/DatapathId.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/DatapathId.java index 708eaa9ce..d87946bd6 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/DatapathId.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/DatapathId.java @@ -2,8 +2,11 @@ import javax.annotation.Nonnull; +import io.netty.buffer.ByteBuf; + import org.projectfloodlight.openflow.annotations.Immutable; import org.projectfloodlight.openflow.util.HexString; +import org.projectfloodlight.openflow.protocol.Writeable; import com.google.common.hash.PrimitiveSink; import com.google.common.primitives.Longs; @@ -16,7 +19,7 @@ * @author Rob Vaterlaus {@literal <}rob.vaterlaus@bigswitch.com{@literal >} */ @Immutable -public class DatapathId implements PrimitiveSinkable, Comparable { +public class DatapathId implements Writeable, PrimitiveSinkable, Comparable { public static final DatapathId NONE = new DatapathId(0); @@ -95,4 +98,9 @@ public void putTo(PrimitiveSink sink) { public int compareTo(DatapathId o) { return UnsignedLongs.compare(rawValue, o.rawValue); } + + @Override + public void writeTo(ByteBuf bb) { + bb.writeLong(rawValue); + } } diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/EthType.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/EthType.java index a7c146462..46b6d5380 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/EthType.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/EthType.java @@ -265,6 +265,11 @@ public int compareTo(EthType o) { return UnsignedInts.compare(rawValue, o.rawValue); } + @Override + public void writeTo(ByteBuf bb) { + write2Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putInt(rawValue); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/GenTableId.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/GenTableId.java index 2127befb4..5c6c48f3a 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/GenTableId.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/GenTableId.java @@ -85,6 +85,11 @@ public int compareTo(GenTableId other) { return UnsignedInts.compare(this.id, other.id); } + @Override + public void writeTo(ByteBuf bb) { + write2Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putShort((byte) id); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ICMPv4Code.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ICMPv4Code.java index 597095d2d..4289ecde9 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ICMPv4Code.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ICMPv4Code.java @@ -86,6 +86,11 @@ public int compareTo(ICMPv4Code o) { return Shorts.compare(code, o.code); } + @Override + public void writeTo(ByteBuf bb) { + writeByte(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putShort(code); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ICMPv4Type.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ICMPv4Type.java index 3eb298725..ff9b5883f 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ICMPv4Type.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/ICMPv4Type.java @@ -195,6 +195,11 @@ public int compareTo(ICMPv4Type o) { return Shorts.compare(type, o.type); } + @Override + public void writeTo(ByteBuf bb) { + writeByte(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putShort(type); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPAddress.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPAddress.java index cc91ebfca..103a43e38 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPAddress.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPAddress.java @@ -4,6 +4,8 @@ import java.net.Inet6Address; import java.net.InetAddress; +import io.netty.buffer.ByteBuf; + import javax.annotation.Nonnull; import com.google.common.base.Preconditions; @@ -170,6 +172,9 @@ public abstract IPAddressWithMask withMaskOfLength( @Override public abstract int hashCode(); + @Override + public abstract void writeTo(ByteBuf bb); + /** parse an IPv4Address or IPv6Address from their conventional string representation. * For details on supported representations, refer to {@link IPv4Address#of(String)} * and {@link IPv6Address#of(String)} diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv4Address.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv4Address.java index 37dd919b0..ec643adde 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv4Address.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv4Address.java @@ -24,7 +24,7 @@ * * @author Andreas Wundsam {@literal <}andreas.wundsam@bigswitch.com{@literal >} */ -public class IPv4Address extends IPAddress implements Writeable { +public class IPv4Address extends IPAddress { static final int LENGTH = 4; private final int rawValue; diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv6Address.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv6Address.java index 81aadd08d..4c60d7772 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv6Address.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv6Address.java @@ -27,7 +27,7 @@ * * @author Andreas Wundsam {@literal <}andreas.wundsam@teleteach.de{@literal >} */ -public class IPv6Address extends IPAddress implements Writeable { +public class IPv6Address extends IPAddress { public static final int LENGTH = 16; private final long raw1; private final long raw2; diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv6FlowLabel.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv6FlowLabel.java index 7c84684cf..918cca33c 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv6FlowLabel.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IPv6FlowLabel.java @@ -78,6 +78,11 @@ public int compareTo(IPv6FlowLabel o) { return UnsignedInts.compare(label, o.label); } + @Override + public void writeTo(ByteBuf bb) { + write4Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putInt(this.label); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IpDscp.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IpDscp.java index a738ae32d..8502fd50a 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IpDscp.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IpDscp.java @@ -247,6 +247,11 @@ public byte getDscpValue() { return dscp; } + @Override + public void writeTo(ByteBuf bb) { + writeByte(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putByte(dscp); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IpEcn.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IpEcn.java index eb6ae664d..4da7677eb 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IpEcn.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IpEcn.java @@ -66,6 +66,11 @@ public byte getEcnValue() { return ecn; } + @Override + public void writeTo(ByteBuf bb) { + writeByte(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putByte(ecn); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IpProtocol.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IpProtocol.java index 14e01a709..2d3380a37 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IpProtocol.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/IpProtocol.java @@ -656,6 +656,10 @@ public int compareTo(IpProtocol o) { return Shorts.compare(proto, o.proto); } + @Override + public void writeTo(ByteBuf bb) { + writeByte(bb); + } @Override public void putTo(PrimitiveSink sink) { diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/LagId.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/LagId.java index 04e59d486..8be046db1 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/LagId.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/LagId.java @@ -85,6 +85,11 @@ public LagId applyMask(LagId mask) { return LagId.of(rawValue & mask.rawValue); } + @Override + public void writeTo(ByteBuf bb) { + write4Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putInt(rawValue); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/MacAddress.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/MacAddress.java index 7a484f47e..251cd3aec 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/MacAddress.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/MacAddress.java @@ -233,6 +233,11 @@ public int compareTo(MacAddress o) { return Longs.compare(rawValue, o.rawValue); } + @Override + public void writeTo(ByteBuf bb) { + write6Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putLong(rawValue); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/Masked.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/Masked.java index b5a995d78..a73c5420a 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/Masked.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/Masked.java @@ -2,6 +2,8 @@ import com.google.common.hash.PrimitiveSink; +import io.netty.buffer.ByteBuf; + public class Masked> implements OFValueType> { @@ -89,6 +91,12 @@ public int compareTo(Masked o) { return mask.compareTo(o.mask); } + @Override + public void writeTo(ByteBuf bb) { + value.writeTo(bb); + mask.writeTo(bb); + } + @Override public void putTo(PrimitiveSink sink) { value.putTo(sink); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBitMask128.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBitMask128.java index 93ba41e0f..3f94aa5bb 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBitMask128.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBitMask128.java @@ -94,6 +94,11 @@ public int compareTo(OFBitMask128 o) { return Long.signum(this.raw2 - o.raw2); } + @Override + public void writeTo(ByteBuf bb) { + write16Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putLong(raw1); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBitMask512.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBitMask512.java index 39b8fe7b2..fadaf030c 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBitMask512.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBitMask512.java @@ -190,6 +190,11 @@ public int compareTo(OFBitMask512 o) { return Long.signum(this.raw8 - o.raw8); } + @Override + public void writeTo(ByteBuf bb) { + write64Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putLong(raw1); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBooleanValue.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBooleanValue.java index 7598d3668..5f2bc0e7a 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBooleanValue.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFBooleanValue.java @@ -24,7 +24,7 @@ import com.google.common.hash.PrimitiveSink; -public class OFBooleanValue implements Writeable, OFValueType { +public class OFBooleanValue implements OFValueType { public final static OFBooleanValue TRUE = new OFBooleanValue(true); public final static OFBooleanValue FALSE = new OFBooleanValue(false); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFConnectionIndex.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFConnectionIndex.java index 133f478cc..f250cd6ea 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFConnectionIndex.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFConnectionIndex.java @@ -39,6 +39,11 @@ public int compareTo(OFConnectionIndex o) { return UnsignedInts.compare(this.connectionIndex,o.connectionIndex); } + @Override + public void writeTo(ByteBuf bb) { + write4Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putInt(connectionIndex); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFGroup.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFGroup.java index e47cd9064..5b7ef1b6f 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFGroup.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFGroup.java @@ -153,6 +153,11 @@ public int compareTo(OFGroup o) { return UnsignedInts.compare(this.groupNumber, o.groupNumber); } + @Override + public void writeTo(ByteBuf bb) { + write4Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putInt(groupNumber); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFMetadata.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFMetadata.java index 445c3333a..372e7b0ed 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFMetadata.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFMetadata.java @@ -74,6 +74,11 @@ public int compareTo(OFMetadata o) { return u64.compareTo(o.u64); } + @Override + public void writeTo(ByteBuf bb) { + write8Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { u64.putTo(sink); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPort.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPort.java index 89ace97b4..6c552d7ff 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPort.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFPort.java @@ -566,6 +566,12 @@ public int compareTo(OFPort o) { return UnsignedInts.compare(this.portNumber, o.portNumber); } + @Override + public void writeTo(ByteBuf bb) { + // NOTE: May not be the right thing to do for OF1.0! + write4Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putInt(portNumber); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFValueType.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFValueType.java index 03e84dd82..be20e6f20 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFValueType.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFValueType.java @@ -1,9 +1,10 @@ package org.projectfloodlight.openflow.types; +import org.projectfloodlight.openflow.protocol.Writeable; -public interface OFValueType> extends Comparable, PrimitiveSinkable { +public interface OFValueType> extends Comparable, Writeable, PrimitiveSinkable { public int getLength(); public T applyMask(T mask); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFVlanVidMatch.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFVlanVidMatch.java index de9da6767..b52326e1e 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFVlanVidMatch.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OFVlanVidMatch.java @@ -197,6 +197,13 @@ public OFVlanVidMatch applyMask(OFVlanVidMatch mask) { public int compareTo(OFVlanVidMatch o) { return Shorts.compare(vid, o.vid); } + + @Override + public void writeTo(ByteBuf bb) { + // NOTE: May not be the right thing to do for OF1.0! + write2Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putShort(vid); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/PacketType.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/PacketType.java index 3881b631e..c8edab07a 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/PacketType.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/PacketType.java @@ -80,6 +80,13 @@ public int compareTo(PacketType o) { return UnsignedInts.compare(this.nsType, o.nsType); } + @Override + public void writeTo(ByteBuf bb) { + // TODO: Change to "write6Bytes(bb)" once Issue #504 is resolved + bb.writeShort(namespace); + bb.writeInt(nsType); + } + @Override public void putTo(PrimitiveSink sink) { sink.putInt(namespace); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/TableId.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/TableId.java index 5519d4ee0..dd32493e0 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/TableId.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/TableId.java @@ -92,6 +92,11 @@ public int compareTo(TableId other) { return Shorts.compare(this.id, other.id); } + @Override + public void writeTo(ByteBuf bb) { + writeByte(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putByte((byte) id); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/TransportPort.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/TransportPort.java index bfca2d773..4a850d920 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/TransportPort.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/TransportPort.java @@ -90,6 +90,11 @@ public int compareTo(TransportPort o) { return Ints.compare(port, o.port); } + @Override + public void writeTo(ByteBuf bb) { + write2Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putShort((short) port); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U128.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U128.java index 9e7bd348b..8fc422289 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U128.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U128.java @@ -96,6 +96,11 @@ public int compareTo(@Nonnull U128 o) { return UnsignedLongs.compare(this.raw2, o.raw2); } + @Override + public void writeTo(ByteBuf bb) { + write16Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putLong(raw1); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U16.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U16.java index 9ed0f45f5..d901524c7 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U16.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U16.java @@ -25,7 +25,7 @@ import com.google.common.hash.PrimitiveSink; import com.google.common.primitives.Ints; -public class U16 implements Writeable, OFValueType { +public class U16 implements OFValueType { private final static short ZERO_VAL = 0; public final static U16 ZERO = new U16(ZERO_VAL); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U32.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U32.java index fddb647cb..a41163add 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U32.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U32.java @@ -25,7 +25,7 @@ import com.google.common.hash.PrimitiveSink; import com.google.common.primitives.UnsignedInts; -public class U32 implements Writeable, OFValueType { +public class U32 implements OFValueType { private final static int ZERO_VAL = 0; public final static U32 ZERO = new U32(ZERO_VAL); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U64.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U64.java index 0d3cc6e26..bc348f9b0 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U64.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U64.java @@ -27,7 +27,7 @@ import com.google.common.hash.PrimitiveSink; import com.google.common.primitives.UnsignedLongs; -public class U64 implements Writeable, OFValueType, HashValue { +public class U64 implements OFValueType, HashValue { private static final long UNSIGNED_MASK = 0x7fffffffffffffffL; private final static long ZERO_VAL = 0; public final static U64 ZERO = new U64(ZERO_VAL); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U8.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U8.java index f4fed56b8..5bdaccec8 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U8.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/U8.java @@ -25,7 +25,7 @@ import com.google.common.hash.PrimitiveSink; import com.google.common.primitives.UnsignedBytes; -public class U8 implements Writeable, OFValueType { +public class U8 implements OFValueType { private final static byte ZERO_VAL = 0; public final static U8 ZERO = new U8(ZERO_VAL); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/UDF.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/UDF.java index bc43d5634..b64280d37 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/UDF.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/UDF.java @@ -78,6 +78,11 @@ public int compareTo(UDF o) { return UnsignedInts.compare(rawValue, o.rawValue); } + @Override + public void writeTo(ByteBuf bb) { + write4Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putInt(rawValue); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VFI.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VFI.java index 07691eec6..b45a5054d 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VFI.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VFI.java @@ -85,6 +85,11 @@ public int compareTo(VFI o) { return Integer.compare(vfi & 0xffff, o.vfi & 0xffff); } + @Override + public void writeTo(ByteBuf bb) { + write2Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putShort(vfi); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VRF.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VRF.java index ad57e7dd1..19ffb98b0 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VRF.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VRF.java @@ -78,6 +78,11 @@ public int compareTo(VRF o) { return UnsignedInts.compare(rawValue, o.rawValue); } + @Override + public void writeTo(ByteBuf bb) { + write4Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putInt(rawValue); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VlanPcp.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VlanPcp.java index 5ec25dc2c..4e6edbf6f 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VlanPcp.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VlanPcp.java @@ -75,6 +75,12 @@ public VlanPcp applyMask(VlanPcp mask) { public int compareTo(VlanPcp o) { return UnsignedBytes.compare(pcp, o.pcp); } + + @Override + public void writeTo(ByteBuf bb) { + writeByte(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putByte(pcp); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VlanVid.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VlanVid.java index a84282179..ca726c9ca 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VlanVid.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VlanVid.java @@ -109,6 +109,11 @@ public int compareTo(VlanVid o) { return Shorts.compare(vid, o.vid); } + @Override + public void writeTo(ByteBuf bb) { + write2Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putShort(vid); diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VxlanNI.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VxlanNI.java index 5e52b5c08..2ba5e8730 100644 --- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VxlanNI.java +++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/VxlanNI.java @@ -91,6 +91,11 @@ public int compareTo(VxlanNI o) { return UnsignedInts.compare(vni, o.vni); } + @Override + public void writeTo(ByteBuf bb) { + write4Bytes(bb); + } + @Override public void putTo(PrimitiveSink sink) { sink.putInt(vni); diff --git a/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/DatapathIdTest.java b/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/DatapathIdTest.java index 136908b88..ec79deac1 100644 --- a/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/DatapathIdTest.java +++ b/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/DatapathIdTest.java @@ -1,6 +1,8 @@ package org.projectfloodlight.openflow.types; import java.util.Arrays; +import io.netty.buffer.ByteBuf; +import static io.netty.buffer.Unpooled.*; import org.junit.Test; @@ -67,4 +69,17 @@ public void testOfMacAddress() { assertThat(candidateDpid.equals(actualDpid), is(true)); } } + + @Test + public void testWriteTo() { + DatapathId dpid = DatapathId.of(testDpids[0]); + byte [] result = new byte[8]; + ByteBuf bb = wrappedBuffer(result); + bb.setIndex(0,0); + dpid.writeTo(bb); + assertThat(bb.readableBytes(), is(8)); + assertThat("result of writeTo() " + Arrays.toString(result) + + "(should be " + Arrays.toString(testDpids[0]) +")", + result, is(testDpids[0])); + } } diff --git a/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/OFValueTypeWriteableTest.java b/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/OFValueTypeWriteableTest.java new file mode 100644 index 000000000..4c4dd3e6b --- /dev/null +++ b/java_gen/pre-written/src/test/java/org/projectfloodlight/openflow/types/OFValueTypeWriteableTest.java @@ -0,0 +1,132 @@ +package org.projectfloodlight.openflow.types; + +import org.projectfloodlight.openflow.exceptions.OFParseError; + +import java.util.Arrays; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; +import io.netty.buffer.ByteBuf; +import static io.netty.buffer.Unpooled.*; + +import org.junit.Test; + +import static org.hamcrest.Matchers.is; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.fail; + +public class OFValueTypeWriteableTest { + + final int NUM_BYTES = 256; + + byte[] byteStream; + List> values; + + public OFValueTypeWriteableTest() throws OFParseError { + byteStream = new byte[NUM_BYTES]; + for (int i = 0; i < NUM_BYTES; ++i) { + byteStream[i] = (byte) i; + } + + ByteBuf bb = wrappedBuffer(byteStream); + + values = new ArrayList<>(); + + // Values that must be "low" due to range checks + values.add(IpEcn.readByte(bb)); + values.add(OFVlanVidMatch.read2Bytes(bb)); + values.add(VlanVid.read2Bytes(bb)); + values.add(VlanPcp.readByte(bb)); + + // Values with less restrictive range checking + values.add(ArpOpcode.read2Bytes(bb)); + values.add(BundleId.read4Bytes(bb)); + values.add(ClassId.read4Bytes(bb)); + values.add(EthType.read2Bytes(bb)); + values.add(GenTableId.read2Bytes(bb)); + values.add(ICMPv4Code.readByte(bb)); + values.add(ICMPv4Type.readByte(bb)); + values.add(IpDscp.readByte(bb)); + values.add(IpProtocol.readByte(bb)); + values.add(IPv4Address.read4Bytes(bb)); + values.add(IPv6Address.read16Bytes(bb)); + values.add(IPv6FlowLabel.read4Bytes(bb)); + values.add(LagId.read4Bytes(bb)); + values.add(MacAddress.read6Bytes(bb)); + values.add(OFBitMask128.read16Bytes(bb)); + values.add(OFBitMask512.read64Bytes(bb)); + values.add(OFConnectionIndex.read4Bytes(bb)); + values.add(OFGroup.read4Bytes(bb)); + values.add(OFMetadata.read8Bytes(bb)); + values.add(OFPort.read4Bytes(bb)); + values.add(PacketType.read4Bytes(bb)); + values.add(TableId.readByte(bb)); + values.add(TransportPort.read2Bytes(bb)); + values.add(U128.read16Bytes(bb)); + values.add(U16.of(bb.readShort())); + values.add(U32.of(bb.readInt())); + values.add(U64.of(bb.readLong())); + values.add(UDF.read4Bytes(bb)); + values.add(VFI.read2Bytes(bb)); + values.add(VRF.read4Bytes(bb)); + } + + /** + * Preconditions: All OFValueType ByteBuf read methods function correctly. + */ + @Test + public void testWriteTo() { + ByteBuf expected_stream = wrappedBuffer(byteStream); + + for (OFValueType value : values) { + // TODO: Get rid of the instanceof check once PacketType is fixed + // (Issue #504) + final int LEN = (value instanceof PacketType) ? 6 : value.getLength(); + byte[] expected = new byte[LEN]; + expected_stream.readBytes(expected); + + testSingleOFValueType(value, expected); + } + + // OFBooleanValue special case: Squashes byte values to "1" or "0" + testSingleOFValueType( + OFBooleanValue.of(true), + new byte[] { 1 }); + + // Masked special case... Constructor will apply the mask to the + // value before storing, so we can't use arbitrary value/mask pairs + // and expect the result to be the same. + testSingleOFValueType( + Masked.of(IPv4Address.of("16.17.0.0"), IPv4Address.of("255.255.0.0")), + new byte[] { 0x10, 0x11, 0, 0, (byte) 0xff, (byte) 0xff, 0, 0 }); + + // VxlanNI special case... Must comply with the mask. + testSingleOFValueType( + VxlanNI.ofVni(0x00fedcba), + new byte[] { 0, (byte) 0xfe, (byte) 0xdc, (byte) 0xba }); + } + + protected void testSingleOFValueType(OFValueType value, final byte[] expected) { + // TODO: Get rid of the instanceof check once PacketType is fixed (Issue #504) + final int LEN = (value instanceof PacketType) ? 6 : value.getLength(); + byte[] result = new byte[LEN]; + ByteBuf result_bb = wrappedBuffer(result).setIndex(0, 0); + + try { + value.writeTo(result_bb); + } catch (IndexOutOfBoundsException ex) { + fail("Wrote more bytes than expected for class " + value.getClass().getSimpleName() + ": " + + ex.getMessage()); + } + + assertThat("Incorrect number of bytes written by " + value.getClass().getSimpleName() + ".writeTo(): " + + result_bb.readableBytes() + " (should be " + LEN + ")", + result_bb.readableBytes(), is(LEN)); + assertThat("Bad result from " + value.getClass().getSimpleName() + ".writeTo(): " + Arrays.toString(result) + + " (should be " + Arrays.toString(expected) + ")", + result, is(expected)); + } +}