2 * Copyright (c) 2016 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.openflowplugin.impl.protocol.deserialization;
11 import com.google.common.annotations.VisibleForTesting;
12 import java.util.function.Consumer;
13 import java.util.function.Function;
14 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerExtensionProvider;
15 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
16 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
17 import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
18 import org.opendaylight.openflowplugin.api.openflow.protocol.deserialization.MessageCodeExperimenterKey;
19 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.CopyTtlInActionDeserializer;
20 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.CopyTtlOutActionDeserializer;
21 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.DecMplsTtlActionDeserializer;
22 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.DecNwTtlActionDeserializer;
23 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.GroupActionDeserializer;
24 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.OutputActionDeserializer;
25 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.PopMplsActionDeserializer;
26 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.PopPbbActionDeserializer;
27 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.PopVlanActionDeserializer;
28 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.PushMplsActionDeserializer;
29 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.PushPbbActionDeserializer;
30 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.PushVlanActionDeserializer;
31 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.SetFieldActionDeserializer;
32 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.SetMplsTtlActionDeserializer;
33 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.SetNwTtlActionDeserializer;
34 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.SetQueueActionDeserializer;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action;
37 class ActionDeserializerInjector {
40 * Injects action deserializers into provided
41 * {@link org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerExtensionProvider}.
43 * @param provider OpenflowJava deserializer extension provider
45 static void injectDeserializers(final DeserializerExtensionProvider provider) {
46 // Inject new message deserializers here using injector created by createInjector method
47 final Function<Byte, Consumer<OFDeserializer<Action>>> injector =
48 createInjector(provider, EncodeConstants.OF13_VERSION_ID);
50 injector.apply(ActionConstants.COPY_TTL_IN_CODE).accept(new CopyTtlInActionDeserializer());
51 injector.apply(ActionConstants.COPY_TTL_OUT_CODE).accept(new CopyTtlOutActionDeserializer());
52 injector.apply(ActionConstants.OUTPUT_CODE).accept(new OutputActionDeserializer());
53 injector.apply(ActionConstants.DEC_MPLS_TTL_CODE).accept(new DecMplsTtlActionDeserializer());
54 injector.apply(ActionConstants.DEC_NW_TTL_CODE).accept(new DecNwTtlActionDeserializer());
55 injector.apply(ActionConstants.GROUP_CODE).accept(new GroupActionDeserializer());
56 injector.apply(ActionConstants.POP_MPLS_CODE).accept(new PopMplsActionDeserializer());
57 injector.apply(ActionConstants.POP_PBB_CODE).accept(new PopPbbActionDeserializer());
58 injector.apply(ActionConstants.POP_VLAN_CODE).accept(new PopVlanActionDeserializer());
59 injector.apply(ActionConstants.PUSH_MPLS_CODE).accept(new PushMplsActionDeserializer());
60 injector.apply(ActionConstants.PUSH_PBB_CODE).accept(new PushPbbActionDeserializer());
61 injector.apply(ActionConstants.PUSH_VLAN_CODE).accept(new PushVlanActionDeserializer());
62 injector.apply(ActionConstants.SET_MPLS_TTL_CODE).accept(new SetMplsTtlActionDeserializer());
63 injector.apply(ActionConstants.SET_NW_TTL_CODE).accept(new SetNwTtlActionDeserializer());
64 injector.apply(ActionConstants.SET_QUEUE_CODE).accept(new SetQueueActionDeserializer());
65 injector.apply((byte) ActionConstants.SET_FIELD_CODE).accept(new SetFieldActionDeserializer());
69 * Create injector that will inject new deserializers into
70 * #{@link org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerExtensionProvider}.
72 * @param provider OpenflowJava deserializer extension provider
73 * @param version Openflow version
77 static Function<Byte, Consumer<OFDeserializer<Action>>> createInjector(
78 final DeserializerExtensionProvider provider,
79 final short version) {
80 return code -> deserializer -> {
81 provider.registerDeserializer(
82 new MessageCodeExperimenterKey(version, code, Action.class, null),