/** * Transforms POJO message into ByteBuf * @param version version used for encoding received message * @param out ByteBuf for storing and sending transformed message * @param message POJO message */ public void messageToBuffer(short version, ByteBuf out, DataObject message) { OFSerializer<DataObject> serializer = registry.getSerializer( new MessageTypeKey<>(version, message.getImplementedInterface())); serializer.serialize(message, out); }
/** * Serializes headers of items in list * @param list list of items to be serialized * @param keyMaker creates key for registry lookup * @param registry stores serializers * @param outBuffer output buffer */ public static <E extends DataObject> void serializeHeaderList(List<E> list, TypeKeyMaker<E> keyMaker, SerializerRegistry registry, ByteBuf outBuffer) { if (list != null) { for (E item : list) { HeaderSerializer<E> serializer = registry.getSerializer(keyMaker.make(item)); serializer.serializeHeader(item, outBuffer); } } }
/** * Serializes item list * @param list list of items to be serialized * @param keyMaker creates key for registry lookup * @param registry stores serializers * @param outBuffer output buffer */ public static <E extends DataObject> void serializeList(List<E> list, TypeKeyMaker<E> keyMaker, SerializerRegistry registry, ByteBuf outBuffer) { if (list != null) { for (E item : list) { OFSerializer<E> serializer = registry.getSerializer(keyMaker.make(item)); serializer.serialize(item, outBuffer); } } }
private void serializeAggregateBody(final MultipartRequestBody multipartRequestBody, final ByteBuf output) { MultipartRequestAggregateCase aggregateCase = (MultipartRequestAggregateCase) multipartRequestBody; MultipartRequestAggregate aggregate = aggregateCase.getMultipartRequestAggregate(); OFSerializer<MatchV10> matchSerializer = registry.getSerializer(new MessageTypeKey<>( EncodeConstants.OF10_VERSION_ID, MatchV10.class)); matchSerializer.serialize(aggregate.getMatchV10(), output); output.writeByte(aggregate.getTableId().shortValue()); output.writeZero(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY); output.writeShort(aggregate.getOutPort().intValue()); }
private void serializeFlowBody(final MultipartRequestBody multipartRequestBody, final ByteBuf output) { MultipartRequestFlowCase flowCase = (MultipartRequestFlowCase) multipartRequestBody; MultipartRequestFlow flow = flowCase.getMultipartRequestFlow(); OFSerializer<MatchV10> matchSerializer = registry.getSerializer(new MessageTypeKey<>( EncodeConstants.OF10_VERSION_ID, MatchV10.class)); matchSerializer.serialize(flow.getMatchV10(), output); output.writeByte(flow.getTableId().shortValue()); output.writeZero(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY); output.writeShort(flow.getOutPort().intValue()); }
private void serializeFlowBody(final MultipartRequestBody multipartRequestBody, final ByteBuf output) { MultipartRequestFlowCase flowCase = (MultipartRequestFlowCase) multipartRequestBody; MultipartRequestFlow flow = flowCase.getMultipartRequestFlow(); output.writeByte(flow.getTableId().byteValue()); output.writeZero(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01); output.writeInt(flow.getOutPort().intValue()); output.writeInt(flow.getOutGroup().intValue()); output.writeZero(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02); output.writeLong(flow.getCookie().longValue()); output.writeLong(flow.getCookieMask().longValue()); OFSerializer<Match> serializer = registry.getSerializer(new MessageTypeKey<>( EncodeConstants.OF13_VERSION_ID, Match.class)); serializer.serialize(flow.getMatch(), output); }
private void serializeAggregateBody(final MultipartRequestBody multipartRequestBody, final ByteBuf output) { MultipartRequestAggregateCase aggregateCase = (MultipartRequestAggregateCase) multipartRequestBody; MultipartRequestAggregate aggregate = aggregateCase.getMultipartRequestAggregate(); output.writeByte(aggregate.getTableId().byteValue()); output.writeZero(PADDING_IN_MULTIPART_REQUEST_AGREGGATE_BODY_01); output.writeInt(aggregate.getOutPort().intValue()); output.writeInt(aggregate.getOutGroup().intValue()); output.writeZero(PADDING_IN_MULTIPART_REQUEST_AGREGGATE_BODY_02); output.writeLong(aggregate.getCookie().longValue()); output.writeLong(aggregate.getCookieMask().longValue()); OFSerializer<Match> serializer = registry.getSerializer(new MessageTypeKey<>( EncodeConstants.OF13_VERSION_ID, Match.class)); serializer.serialize(aggregate.getMatch(), output); }
private void serializeExperimenterBody(final MultipartRequestBody multipartRequestBody, final ByteBuf output) { MultipartRequestExperimenterCase expCase = (MultipartRequestExperimenterCase) multipartRequestBody; MultipartRequestExperimenter experimenter = expCase.getMultipartRequestExperimenter(); final long expId = experimenter.getExperimenter().getValue().longValue(); // write experimenterId output.writeInt((int) expId); OFSerializer<ExperimenterDataOfChoice> serializer = registry.getSerializer( ExperimenterSerializerKeyFactory.createMultipartRequestSerializerKey( EncodeConstants.OF10_VERSION_ID, expId, -1 /* in order not to collide with OF >= 1.3 codecs*/)); serializer.serialize(experimenter.getExperimenterDataOfChoice(), output); }
@Override public void serialize(ExperimenterOfMessage message, ByteBuf outBuffer) { long expId = message.getExperimenter().getValue(); OFSerializer<ExperimenterDataOfChoice> serializer = registry.getSerializer( ExperimenterSerializerKeyFactory.createExperimenterMessageSerializerKey( EncodeConstants.OF10_VERSION_ID, expId, message.getExpType().longValue())); // write experimenterId outBuffer.writeInt(message.getExperimenter().getValue().intValue()); serializer.serialize(message.getExperimenterDataOfChoice(), outBuffer); }
@Override public void serialize(FlowRemovedMessage message, ByteBuf outBuffer) { ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); outBuffer.writeLong(message.getCookie().longValue()); outBuffer.writeShort(message.getPriority()); outBuffer.writeByte(message.getReason().getIntValue()); outBuffer.writeByte(message.getTableId().getValue().byteValue()); outBuffer.writeInt(message.getDurationSec().intValue()); outBuffer.writeInt(message.getDurationNsec().intValue()); outBuffer.writeShort(message.getIdleTimeout()); outBuffer.writeShort(message.getHardTimeout()); outBuffer.writeLong(message.getPacketCount().longValue()); outBuffer.writeLong(message.getByteCount().longValue()); OFSerializer<Match> matchSerializer = registry .<Match, OFSerializer<Match>> getSerializer(new MessageTypeKey<>(message.getVersion(), Match.class)); matchSerializer.serialize(message.getMatch(), outBuffer); ByteBufUtils.updateOFHeaderLength(outBuffer); }
@Override public void serialize(ExperimenterOfMessage message, ByteBuf outBuffer) { long expId = message.getExperimenter().getValue(); OFSerializer<ExperimenterDataOfChoice> serializer = registry.getSerializer( ExperimenterSerializerKeyFactory.createExperimenterMessageSerializerKey( EncodeConstants.OF13_VERSION_ID, expId, message.getExpType().longValue())); ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); // write experimenterId and type outBuffer.writeInt(message.getExperimenter().getValue().intValue()); outBuffer.writeInt(message.getExpType().intValue()); serializer.serialize(message.getExperimenterDataOfChoice(), outBuffer); ByteBufUtils.updateOFHeaderLength(outBuffer); }
private void serializeExperimenterBody(final MultipartRequestInput message, final ByteBuf outBuffer) { MultipartRequestExperimenterCase expCase = (MultipartRequestExperimenterCase) message.getMultipartRequestBody(); MultipartRequestExperimenter experimenter = expCase.getMultipartRequestExperimenter(); final long expId = experimenter.getExperimenter().getValue().longValue(); final long expType = experimenter.getExpType().longValue(); // write experimenterId and type outBuffer.writeInt((int) expId); outBuffer.writeInt((int) expType); // serialize experimenter data OFSerializer<ExperimenterDataOfChoice> serializer = registry.getSerializer( ExperimenterSerializerKeyFactory.createMultipartRequestSerializerKey( EncodeConstants.OF13_VERSION_ID, expId, expType)); serializer.serialize(experimenter.getExperimenterDataOfChoice(), outBuffer); }
@Override public void serialize(final FlowModInput message, final ByteBuf outBuffer) { ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); OFSerializer<MatchV10> matchSerializer = registry.getSerializer(new MessageTypeKey<>( message.getVersion(), MatchV10.class)); matchSerializer.serialize(message.getMatchV10(), outBuffer); outBuffer.writeLong(message.getCookie().longValue()); outBuffer.writeShort(message.getCommand().getIntValue()); outBuffer.writeShort(message.getIdleTimeout().intValue()); outBuffer.writeShort(message.getHardTimeout().intValue()); outBuffer.writeShort(message.getPriority()); outBuffer.writeInt(message.getBufferId().intValue()); outBuffer.writeShort(message.getOutPort().getValue().intValue()); outBuffer.writeShort(createFlowModFlagsBitmask(message.getFlagsV10())); ListSerializer.serializeList(message.getAction(), ACTION_KEY_MAKER, registry, outBuffer); ByteBufUtils.updateOFHeaderLength(outBuffer); }
@Override public void serialize(FlowRemovedMessage message, ByteBuf outBuffer) { ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); OFSerializer<MatchV10> matchSerializer = registry .getSerializer(new MessageTypeKey<>(message.getVersion(), MatchV10.class)); matchSerializer.serialize(message.getMatchV10(), outBuffer); outBuffer.writeLong(message.getCookie().longValue()); outBuffer.writeShort(message.getPriority()); outBuffer.writeByte(message.getReason().getIntValue()); outBuffer.writeZero(PADDING); outBuffer.writeInt(message.getDurationSec().intValue()); outBuffer.writeInt(message.getDurationNsec().intValue()); outBuffer.writeShort(message.getIdleTimeout()); outBuffer.writeZero(PADDING); outBuffer.writeZero(PADDING); outBuffer.writeLong(message.getPacketCount().longValue()); outBuffer.writeLong(message.getByteCount().longValue()); ByteBufUtils.updateOFHeaderLength(outBuffer); }
@Override public void serialize(final FlowModInput message, final ByteBuf outBuffer) { ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); outBuffer.writeLong(message.getCookie().longValue()); outBuffer.writeLong(message.getCookieMask().longValue()); outBuffer.writeByte(message.getTableId().getValue().byteValue()); outBuffer.writeByte(message.getCommand().getIntValue()); outBuffer.writeShort(message.getIdleTimeout().intValue()); outBuffer.writeShort(message.getHardTimeout().intValue()); outBuffer.writeShort(message.getPriority()); outBuffer.writeInt(message.getBufferId().intValue()); outBuffer.writeInt(message.getOutPort().getValue().intValue()); outBuffer.writeInt(message.getOutGroup().intValue()); outBuffer.writeShort(createFlowModFlagsBitmask(message.getFlags())); outBuffer.writeZero(PADDING_IN_FLOW_MOD_MESSAGE); registry.<Match, OFSerializer<Match>>getSerializer(new MessageTypeKey<>(message.getVersion(), Match.class)) .serialize(message.getMatch(), outBuffer); ListSerializer.serializeList(message.getInstruction(), INSTRUCTION_KEY_MAKER, registry, outBuffer); ByteBufUtils.updateOFHeaderLength(outBuffer); }
@Override public void serialize(PacketInMessage message, ByteBuf outBuffer) { ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); outBuffer.writeInt(message.getBufferId().intValue()); outBuffer.writeShort(message.getTotalLen().intValue()); outBuffer.writeByte(message.getReason().getIntValue()); outBuffer.writeByte(message.getTableId().getValue().byteValue()); outBuffer.writeLong(message.getCookie().longValue()); OFSerializer<Match> matchSerializer = registry .<Match, OFSerializer<Match>> getSerializer(new MessageTypeKey<>(message.getVersion(), Match.class)); matchSerializer.serialize(message.getMatch(), outBuffer); outBuffer.writeZero(PADDING); byte[] data = message.getData(); if (data != null) { outBuffer.writeBytes(data); } ByteBufUtils.updateOFHeaderLength(outBuffer); }
private void writeExperimenterRelatedTableProperty(final ByteBuf output, final TableFeatureProperties property) { long expId = property.getAugmentation(ExperimenterIdTableFeatureProperty.class).getExperimenter().getValue(); OFSerializer<TableFeatureProperties> serializer = registry.getSerializer(ExperimenterSerializerKeyFactory .createMultipartRequestTFSerializerKey(EncodeConstants.OF13_VERSION_ID, expId)); serializer.serialize(property, output); }
private void writeExperimenterRelatedTableProperty(final ByteBuf output, final TableFeatureProperties property) { long expId = property.getAugmentation(ExperimenterIdTableFeatureProperty.class).getExperimenter().getValue(); OFSerializer<TableFeatureProperties> serializer = registry.getSerializer( ExperimenterSerializerKeyFactory.createMultipartRequestTFSerializerKey( EncodeConstants.OF13_VERSION_ID, expId)); serializer.serialize(property, output); }
@Override public void serialize(Action action, ByteBuf outBuffer) { int startIndex = outBuffer.writerIndex(); outBuffer.writeShort(ActionConstants.SET_FIELD_CODE); int lengthIndex = outBuffer.writerIndex(); outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH); MatchEntry entry = ((SetFieldCase) action.getActionChoice()).getSetFieldAction() .getMatchEntry().get(0); MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>( EncodeConstants.OF13_VERSION_ID, entry.getOxmClass(), entry.getOxmMatchField()); if (entry.getOxmClass().equals(ExperimenterClass.class)) { ExperimenterIdCase experimenterIdCase = (ExperimenterIdCase) entry.getMatchEntryValue(); key.setExperimenterId(experimenterIdCase.getExperimenter().getExperimenter().getValue()); } else { key.setExperimenterId(null); } OFSerializer<MatchEntry> serializer = registry.getSerializer(key); serializer.serialize(entry, outBuffer); int paddingRemainder = (outBuffer.writerIndex() - startIndex) % EncodeConstants.PADDING; if (paddingRemainder != 0) { outBuffer.writeZero(EncodeConstants.PADDING - paddingRemainder); } outBuffer.setShort(lengthIndex, outBuffer.writerIndex() - startIndex); }
/** * Serializes MatchEntries * @param matchEntries list of match entries (oxm_fields) * @param out output ByteBuf */ public void serializeMatchEntries(List<MatchEntry> matchEntries, ByteBuf out) { if (matchEntries == null) { LOG.debug("Match entries are null"); return; } for (MatchEntry entry : matchEntries) { MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>( EncodeConstants.OF13_VERSION_ID, entry.getOxmClass(), entry.getOxmMatchField()); if (entry.getOxmClass().equals(ExperimenterClass.class)) { ExperimenterIdCase entryValue = (ExperimenterIdCase) entry.getMatchEntryValue(); key.setExperimenterId(entryValue.getExperimenter().getExperimenter().getValue()); } else { key.setExperimenterId(null); } OFSerializer<MatchEntry> entrySerializer = registry.getSerializer(key); entrySerializer.serialize(entry, out); } }