@Override
 public void funnel(OFEchoRequestVer10 message, PrimitiveSink sink) {
   // fixed value property version = 1
   sink.putByte((byte) 0x1);
   // fixed value property type = 2
   sink.putByte((byte) 0x2);
   // FIXME: skip funnel of length
   sink.putLong(message.xid);
   sink.putBytes(message.data);
 }
 @Override
 public void funnel(OFQueueOpFailedErrorMsgVer13 message, PrimitiveSink sink) {
   // fixed value property version = 4
   sink.putByte((byte) 0x4);
   // fixed value property type = 1
   sink.putByte((byte) 0x1);
   // FIXME: skip funnel of length
   sink.putLong(message.xid);
   // fixed value property errType = 9
   sink.putShort((short) 0x9);
   OFQueueOpFailedCodeSerializerVer13.putTo(message.code, sink);
   sink.putBytes(message.data);
 }
 @Override
 public void funnel(OFBsnPduTxRequestVer10 message, PrimitiveSink sink) {
   // fixed value property version = 1
   sink.putByte((byte) 0x1);
   // fixed value property type = 4
   sink.putByte((byte) 0x4);
   // FIXME: skip funnel of length
   sink.putLong(message.xid);
   // fixed value property experimenter = 0x5c16c7L
   sink.putInt(0x5c16c7);
   // fixed value property subtype = 0x1fL
   sink.putInt(0x1f);
   sink.putLong(message.txIntervalMs);
   message.portNo.putTo(sink);
   sink.putShort(message.slotNum);
   // skip pad (3 bytes)
   sink.putBytes(message.data);
 }
 @Override
 public void funnel(LookupKey lookupKey, PrimitiveSink primitiveSink) {
   primitiveSink.putBytes(lookupKey.toBytes());
 }