@Override public void registerMeterBandSerializer(final ExperimenterIdSerializerKey<MeterBandExperimenterCase> key, final OFSerializer<MeterBandExperimenterCase> serializer) { serializerRegistry.registerSerializer(key, serializer); }
@Override public boolean unregisterSerializer(final ExperimenterSerializerKey key) { return serializerRegistry.unregisterSerializer((MessageTypeKey<?>) key); }
@Override public byte[] getPayload() { SerializerRegistry registry = new SerializerRegistryImpl(); registry.init(); SerializationFactory factory = new SerializationFactory(); factory.setSerializerTable(registry); ByteBuf output = UnpooledByteBufAllocator.DEFAULT.buffer(); factory.messageToBuffer(getOfVersion(), output, getOfMessage()); byte[] rawPayload = new byte[output.readableBytes()]; output.getBytes(0, rawPayload); return rawPayload; }
/** * 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); }
/** Constructor */ public SwitchConnectionProviderImpl() { serializerRegistry = new SerializerRegistryImpl(); serializerRegistry.init(); serializationFactory = new SerializationFactory(); serializationFactory.setSerializerTable(serializerRegistry); deserializerRegistry = new DeserializerRegistryImpl(); deserializerRegistry.init(); deserializationFactory = new DeserializationFactory(); deserializationFactory.setRegistry(deserializerRegistry); }
/** * 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); } } }
public void sendOpenFlowMessageToCore(ZeroMQBaseConnector coreConnector, DataObject msg, short ofVersion, long xId, long datapathId, int moduleId) { SerializationFactory factory = createSerializationFactory(); SerializerRegistry registry = new SerializerRegistryImpl(); registry.init(); ByteBuf output = UnpooledByteBufAllocator.DEFAULT.buffer(); factory.setSerializerTable(registry); factory.messageToBuffer(ofVersion, output, msg); byte[] bytes = new byte[output.readableBytes()]; output.readBytes(bytes); Message message = new Message(NetIPUtils.StubHeaderFromPayload(bytes), bytes); message.getHeader().setMessageType(MessageType.OPENFLOW); message.getHeader().setDatapathId(datapathId); message.getHeader().setModuleId(moduleId); message.getHeader().setTransactionId((int) xId); coreConnector.SendData(message.toByteRepresentation()); }
/** * 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); } } }
@Override public void registerActionSerializer(final ActionSerializerKey<?> key, final OFGeneralSerializer serializer) { serializerRegistry.registerSerializer(key, serializer); }
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()); }
@Override public void registerMultipartRequestSerializer(ExperimenterIdSerializerKey<? extends ExperimenterDataOfChoice> key, OFSerializer<? extends ExperimenterDataOfChoice> serializer) { serializerRegistry.registerSerializer(key, serializer); }
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()); }
@Override public void registerMultipartRequestTFSerializer(final ExperimenterIdSerializerKey<TableFeatureProperties> key, final OFGeneralSerializer serializer) { serializerRegistry.registerSerializer(key, serializer); }
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); }
@Override public void registerInstructionSerializer(final InstructionSerializerKey<?> key, final OFGeneralSerializer serializer) { serializerRegistry.registerSerializer(key, serializer); }
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); }
@Override public <C extends OxmClassBase, F extends MatchField> void registerMatchEntrySerializer(final MatchEntrySerializerKey<C, F> key, final OFGeneralSerializer serializer) { serializerRegistry.registerSerializer(key, serializer); }
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 registerExperimenterMessageSerializer(ExperimenterIdSerializerKey<? extends ExperimenterDataOfChoice> key, OFSerializer<? extends ExperimenterDataOfChoice> serializer) { serializerRegistry.registerSerializer(key, serializer); }
@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); }