2 * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.openflowjava.protocol.api.extensibility;
11 import org.opendaylight.openflowjava.protocol.api.keys.ActionSerializerKey;
12 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterIdMeterSubTypeSerializerKey;
13 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterIdSerializerKey;
14 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterSerializerKey;
15 import org.opendaylight.openflowjava.protocol.api.keys.InstructionSerializerKey;
16 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
17 import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmClassBase;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;
26 * Provides methods for serialization part of extensibility.
27 * In case of handling multiple structures of same type (actions,
28 * instructions, match entries, ... ) which are differentiated by
29 * vendor / experimenter subtype, vendor has to switch / choose between
32 * This has to be done in this way because of unknown augmentations
33 * - that's why vendor has to handle it in his own implementations.
34 * @author michal.polkorab
36 public interface SerializerExtensionProvider {
39 * Registers serializer
40 * Throws IllegalStateException when there is
41 * a serializer already registered under given key.
43 * If the serializer implements {@link SerializerRegistryInjector} interface,
44 * the serializer is injected with SerializerRegistry instance.
46 * @param <K> serializer key type
47 * @param key used for serializer lookup
48 * @param serializer serializer implementation
50 <K> void registerSerializer(MessageTypeKey<K> key,
51 OFGeneralSerializer serializer);
54 * Unregisters custom serializer
55 * @param key used for serializer lookup
56 * @return true if serializer was removed,
57 * false if no serializer was found under specified key
59 boolean unregisterSerializer(ExperimenterSerializerKey key);
62 * Registers action serializer
63 * @param key used for serializer lookup
64 * @param serializer serializer implementation
66 void registerActionSerializer(ActionSerializerKey<?> key,
67 OFGeneralSerializer serializer);
70 * Registers instruction serializer
71 * @param key used for serializer lookup
72 * @param serializer serializer implementation
74 void registerInstructionSerializer(InstructionSerializerKey<?> key,
75 OFGeneralSerializer serializer);
78 * Registers match entry serializer
80 * @param <F> match field type
81 * @param key used for serializer lookup
82 * @param serializer serializer implementation
84 <C extends OxmClassBase, F extends MatchField> void registerMatchEntrySerializer(
85 MatchEntrySerializerKey<C, F> key,OFGeneralSerializer serializer);
88 * Registers experimenter (vendor) message serializer
89 * @param key used for serializer lookup
90 * @param serializer serializer implementation
92 void registerExperimenterMessageSerializer(ExperimenterIdSerializerKey<? extends ExperimenterDataOfChoice> key,
93 OFSerializer<? extends ExperimenterDataOfChoice> serializer);
96 * Registers multipart-request (stats-request) serializer
97 * @param key used for serializer lookup
98 * @param serializer serializer implementation
100 void registerMultipartRequestSerializer(ExperimenterIdSerializerKey<? extends ExperimenterDataOfChoice> key,
101 OFSerializer<? extends ExperimenterDataOfChoice> serializer);
104 * Registers multipart-request table-features serializer
105 * @param key used for serializer lookup
106 * @param serializer serializer implementation
108 void registerMultipartRequestTFSerializer(ExperimenterIdSerializerKey<TableFeatureProperties> key,
109 OFGeneralSerializer serializer);
112 * @deprecated Since we use ExperimenterIdMeterSubTypeSerializerKey as MeterBandSerializer's key, in order to avoid
113 * the occurrence of an error,we should discard this function
114 * Registers meter band serializer (used in meter-mod messages)
115 * @param key used for serializer lookup
116 * @param serializer serializer implementation
119 void registerMeterBandSerializer(ExperimenterIdSerializerKey<MeterBandExperimenterCase> key,
120 OFSerializer<MeterBandExperimenterCase> serializer);
123 * Registers meter band serializer (used in meter-mod messages)
124 * @param key used for serializer lookup
125 * @param serializer serializer implementation
127 void registerMeterBandSerializer(ExperimenterIdMeterSubTypeSerializerKey<MeterBandExperimenterCase> key,
128 OFSerializer<MeterBandExperimenterCase> serializer);