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.ExperimenterActionDeserializerKey;
12 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterDeserializerKey;
13 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterIdDeserializerKey;
14 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterInstructionDeserializerKey;
15 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey;
16 import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueueProperty;
23 * Provides methods for deserialization part of extensibility.
24 * In case of handling multiple multiple structures of same type (actions,
25 * instructions, match entries, ... ) which are differentiated by
26 * vendor / experimenter subtype, vendor has to switch / choose between
29 * This has to be done in this way because of experimenter headers, which
30 * provide only vendor / experimenter ID. Subtype position may be different
31 * for different vendors (or not present at all) - that's why vendor has to
32 * handle it in his own implementations.
33 * @author michal.polkorab
35 public interface DeserializerExtensionProvider {
38 * Registers deserializer.
39 * Throws IllegalStateException when there is
40 * a deserializer already registered under given key.
42 * If the deserializer implements {@link DeserializerRegistryInjector} interface,
43 * the deserializer is injected with DeserializerRegistry instance.
45 * @param key used for deserializer lookup
46 * @param deserializer deserializer instance
48 void registerDeserializer(MessageCodeKey key,
49 OFGeneralDeserializer deserializer);
52 * Unregisters custom deserializer
53 * @param key used for deserializer lookup
54 * @return true if deserializer was removed,
55 * false if no deserializer was found under specified key
57 boolean unregisterDeserializer(ExperimenterDeserializerKey key);
60 * Registers action deserializer
61 * @param key used for deserializer lookup
62 * @param deserializer deserializer instance
64 void registerActionDeserializer(ExperimenterActionDeserializerKey key,
65 OFGeneralDeserializer deserializer);
68 * Registers instruction deserializer
69 * @param key used for deserializer lookup
70 * @param deserializer deserializer instance
72 void registerInstructionDeserializer(ExperimenterInstructionDeserializerKey key,
73 OFGeneralDeserializer deserializer);
76 * Registers match entry deserializer
77 * @param key used for deserializer lookup
78 * @param deserializer deserializer instance
80 void registerMatchEntryDeserializer(MatchEntryDeserializerKey key,
81 OFGeneralDeserializer deserializer);
84 * Registers error message deserializer
85 * @param key used for deserializer lookup
86 * @param deserializer deserializer instance
88 void registerErrorDeserializer(ExperimenterIdDeserializerKey key,
89 OFDeserializer<ErrorMessage> deserializer);
92 * Registers experimenter (vendor) message deserializer
93 * @param key used for deserializer lookup
94 * @param deserializer deserializer instance
96 void registerExperimenterMessageDeserializer(ExperimenterIdDeserializerKey key,
97 OFDeserializer<? extends ExperimenterDataOfChoice> deserializer);
100 * Registers multipart-reply (stats) message deserializer
101 * @param key used for deserializer lookup
102 * @param deserializer deserializer instance
104 void registerMultipartReplyMessageDeserializer(ExperimenterIdDeserializerKey key,
105 OFDeserializer<? extends ExperimenterDataOfChoice> deserializer);
108 * Registers multipart-reply table-features message deserializer
109 * @param key used for deserializer lookup
110 * @param deserializer deserializer instance
112 void registerMultipartReplyTFDeserializer(ExperimenterIdDeserializerKey key,
113 OFGeneralDeserializer deserializer);
116 * Registers meter band deserializer (used in multipart-reply meter-config)
117 * @param key used for deserializer lookup
118 * @param deserializer deserializer instance
120 void registerMeterBandDeserializer(ExperimenterIdDeserializerKey key,
121 OFDeserializer<MeterBandExperimenterCase> deserializer);
124 * Registers queue property (QUEUE_GET_CONFIG_REPLY message) deserializer
125 * @param key used for deserializer lookup
126 * @param deserializer deserializer instance
128 void registerQueuePropertyDeserializer(ExperimenterIdDeserializerKey key,
129 OFDeserializer<QueueProperty> deserializer);