2 * Copyright (c) 2014 Cisco Systems, Inc. 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
8 package org.opendaylight.openflowjava.nx.api.impl;
10 import java.util.List;
12 import java.util.concurrent.ConcurrentHashMap;
14 import org.opendaylight.openflowjava.nx.api.NiciraActionDeserializerKey;
15 import org.opendaylight.openflowjava.nx.api.NiciraActionSerializerKey;
16 import org.opendaylight.openflowjava.nx.api.NiciraExtensionCodecRegistrator;
17 import org.opendaylight.openflowjava.nx.api.NiciraUtil;
18 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
19 import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralDeserializer;
20 import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralSerializer;
21 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
22 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterActionDeserializerKey;
23 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterActionSerializerKey;
24 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterDeserializerKey;
25 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterSerializerKey;
26 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey;
27 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
28 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
29 import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmClassBase;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
39 public class NiciraExtensionCodecRegistratorImpl implements NiciraExtensionCodecRegistrator, AutoCloseable {
41 private static final Map<NiciraActionDeserializerKey, OFDeserializer<Action>> actionDeserializers = new ConcurrentHashMap<>();
43 private final List<SwitchConnectionProvider> providers;
48 public NiciraExtensionCodecRegistratorImpl(List<SwitchConnectionProvider> providers) {
49 this.providers = providers;
50 ActionDeserializer of10ActionDeserializer = new ActionDeserializer(EncodeConstants.OF10_VERSION_ID);
51 ActionDeserializer of13ActionDeserializer = new ActionDeserializer(EncodeConstants.OF13_VERSION_ID);
52 registerActionDeserializer(ActionDeserializer.OF10_DESERIALIZER_KEY, of10ActionDeserializer);
53 registerActionDeserializer(ActionDeserializer.OF13_DESERIALIZER_KEY, of13ActionDeserializer);
56 private void registerActionDeserializer(ExperimenterActionDeserializerKey key, OFGeneralDeserializer deserializer) {
57 for (SwitchConnectionProvider provider : providers) {
58 provider.registerActionDeserializer(key, deserializer);
62 private void registerActionSerializer(ExperimenterActionSerializerKey key, OFGeneralSerializer serializer) {
63 for (SwitchConnectionProvider provider : providers) {
64 provider.registerActionSerializer(key, serializer);
68 private void unregisterDeserializer(ExperimenterDeserializerKey key) {
69 for (SwitchConnectionProvider provider : providers) {
70 provider.unregisterDeserializer(key);
74 private void unregisterSerializer(ExperimenterSerializerKey key) {
75 for (SwitchConnectionProvider provider : providers) {
76 provider.unregisterSerializer(key);
83 * @see org.opendaylight.openflow.extension.nicira.api.
84 * NiciraExtensionCodecRegistrator
85 * #registerActionDeserializer(org.opendaylight
86 * .openflow.extension.nicira.api.NiciraActionDeserializerKey,
87 * org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer)
90 public void registerActionDeserializer(NiciraActionDeserializerKey key, OFDeserializer<Action> deserializer) {
91 actionDeserializers.put(key, deserializer);
97 * @see org.opendaylight.openflow.extension.nicira.api.
98 * NiciraExtensionCodecRegistrator
99 * #unregisterActionDeserializer(org.opendaylight
100 * .openflow.extension.nicira.api.NiciraActionDeserializerKey)
103 public void unregisterActionDeserializer(NiciraActionDeserializerKey key) {
104 actionDeserializers.remove(key);
107 static OFDeserializer<Action> getActionDeserializer(NiciraActionDeserializerKey key) {
108 return actionDeserializers.get(key);
114 * @see org.opendaylight.openflow.extension.nicira.api.
115 * NiciraExtensionCodecRegistrator
116 * #registerActionSerializer(org.opendaylight.
117 * openflow.extension.nicira.api.NiciraActionSerializerKey,
118 * org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer)
121 public void registerActionSerializer(NiciraActionSerializerKey key, OFSerializer<Action> serializer) {
122 registerActionSerializer(NiciraUtil.createOfJavaKeyFrom(key), serializer);
128 * @see org.opendaylight.openflow.extension.nicira.api.
129 * NiciraExtensionCodecRegistrator
130 * #unregisterActionSerializer(org.opendaylight
131 * .openflow.extension.nicira.api.NiciraActionSerializerKey)
134 public void unregisterActionSerializer(NiciraActionSerializerKey key) {
135 unregisterSerializer(NiciraUtil.createOfJavaKeyFrom(key));
141 * @see org.opendaylight.openflow.extension.nicira.api.
142 * NiciraExtensionCodecRegistrator
143 * #registerMatchEntryDeserializer(org.opendaylight
144 * .openflowjava.protocol.api.keys.MatchEntryDeserializerKey,
145 * org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer)
148 public void registerMatchEntryDeserializer(MatchEntryDeserializerKey key, OFDeserializer<MatchEntries> deserializer) {
149 for (SwitchConnectionProvider provider : providers) {
150 provider.registerMatchEntryDeserializer(key, deserializer);
157 * @see org.opendaylight.openflow.extension.nicira.api.
158 * NiciraExtensionCodecRegistrator
159 * #unregisterMatchEntryDeserializer(org.opendaylight
160 * .openflowjava.protocol.api.keys.MatchEntryDeserializerKey)
163 public void unregisterMatchEntryDeserializer(MatchEntryDeserializerKey key) {
164 unregisterDeserializer(key);
170 * @see org.opendaylight.openflow.extension.nicira.api.
171 * NiciraExtensionCodecRegistrator
172 * #registerMatchEntrySerializer(org.opendaylight
173 * .openflowjava.protocol.api.keys.MatchEntrySerializerKey,
174 * org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer)
177 public void registerMatchEntrySerializer(MatchEntrySerializerKey<? extends OxmClassBase, ? extends MatchField> key,
178 OFSerializer<MatchEntries> serializer) {
179 for (SwitchConnectionProvider provider : providers) {
180 provider.registerMatchEntrySerializer(key, serializer);
187 * @see org.opendaylight.openflow.extension.nicira.api.
188 * NiciraExtensionCodecRegistrator
189 * #unregisterMatchEntrySerializer(org.opendaylight
190 * .openflowjava.protocol.api.keys.MatchEntrySerializerKey)
193 public void unregisterMatchEntrySerializer(MatchEntrySerializerKey<? extends OxmClassBase, ? extends MatchField> key) {
194 unregisterSerializer(key);
198 public void close() throws Exception {
199 // TODO Auto-generated method stub