0fd529db2e7bc9ed08b30189e7120688348d0749
[openflowjava.git] / openflow-protocol-api / src / main / java / org / opendaylight / openflowjava / protocol / api / extensibility / DeserializerExtensionProvider.java
1 /*\r
2  * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.openflowjava.protocol.api.extensibility;\r
10 \r
11 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey;\r
12 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterActionDeserializerKey;\r
13 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterDeserializerKey;\r
14 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterIdDeserializerKey;\r
15 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterInstructionDeserializerKey;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueueProperty;\r
21 \r
22 /**\r
23  * Provides methods for deserialization part of extensibility.\r
24  * In case of handling multiple multiple structures of same type (actions,\r
25  * instructions, match entries, ... ) which are differentiated by\r
26  * vendor / experimenter subtype, vendor has to switch / choose between\r
27  * these subtypes. <br />\r
28  * \r
29  * This has to be done in this way because of experimenter headers, which\r
30  * provide only vendor / experimenter ID. Subtype position may be different\r
31  * for different vendors (or not present at all) - that's why vendor has to\r
32  * handle it in his own implementations.\r
33  * @author michal.polkorab\r
34  */\r
35 public interface DeserializerExtensionProvider {\r
36 \r
37     /**\r
38      * Unregisters custom deserializer\r
39      * @param key used for deserializer lookup\r
40      * @return true if deserializer was removed,\r
41      *  false if no deserializer was found under specified key\r
42      */\r
43     boolean unregisterDeserializer(ExperimenterDeserializerKey key);\r
44 \r
45     /**\r
46      * Registers action deserializer\r
47      * @param key used for deserializer lookup\r
48      * @param deserializer deserializer instance\r
49      */\r
50     void registerActionDeserializer(ExperimenterActionDeserializerKey key,\r
51             OFGeneralDeserializer deserializer);\r
52 \r
53     /**\r
54      * Registers instruction deserializer\r
55      * @param key used for deserializer lookup\r
56      * @param deserializer deserializer instance\r
57      */\r
58     void registerInstructionDeserializer(ExperimenterInstructionDeserializerKey key,\r
59             OFGeneralDeserializer deserializer);\r
60 \r
61     /**\r
62      * Registers match entry deserializer\r
63      * @param key used for deserializer lookup\r
64      * @param deserializer deserializer instance\r
65      */\r
66     void registerMatchEntryDeserializer(MatchEntryDeserializerKey key,\r
67             OFGeneralDeserializer deserializer);\r
68 \r
69     /**\r
70      * Registers error message deserializer\r
71      * @param key used for deserializer lookup\r
72      * @param deserializer deserializer instance\r
73      */\r
74     void registerErrorDeserializer(ExperimenterIdDeserializerKey key,\r
75             OFDeserializer<ErrorMessage> deserializer);\r
76 \r
77     /**\r
78      * Registers experimenter (vendor) message deserializer\r
79      * @param key used for deserializer lookup\r
80      * @param deserializer deserializer instance\r
81      */\r
82     void registerExperimenterMessageDeserializer(ExperimenterIdDeserializerKey key,\r
83             OFDeserializer<ExperimenterMessage> deserializer);\r
84 \r
85     /**\r
86      * Registers multipart-reply (stats) message deserializer\r
87      * @param key used for deserializer lookup\r
88      * @param deserializer deserializer instance\r
89      */\r
90     void registerMultipartReplyMessageDeserializer(ExperimenterIdDeserializerKey key,\r
91             OFDeserializer<MultipartReplyMessage> deserializer);\r
92 \r
93     /**\r
94      * Registers multipart-reply table-features message deserializer\r
95      * @param key used for deserializer lookup\r
96      * @param deserializer deserializer instance\r
97      */\r
98     void registerMultipartReplyTFDeserializer(ExperimenterIdDeserializerKey key,\r
99             OFGeneralDeserializer deserializer);\r
100 \r
101     /**\r
102      * Registers meter band deserializer (used in multipart-reply meter-config)\r
103      * @param key used for deserializer lookup\r
104      * @param deserializer deserializer instance\r
105      */\r
106     void registerMeterBandDeserializer(ExperimenterIdDeserializerKey key,\r
107             OFDeserializer<MeterBandExperimenterCase> deserializer);\r
108 \r
109     /**\r
110      * Registers queue property (QUEUE_GET_CONFIG_REPLY message) deserializer\r
111      * @param key used for deserializer lookup\r
112      * @param deserializer deserializer instance\r
113      */\r
114     void registerQueuePropertyDeserializer(ExperimenterIdDeserializerKey key,\r
115             OFDeserializer<QueueProperty> deserializer);\r
116 }