Bug 5895 - Support of Ext109 openflow tcp flag matching
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / serialization / MatchEntriesInitializer.java
1 /*
2  * Copyright (c) 2013 Pantheon Technologies s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.openflowjava.protocol.impl.serialization;
9
10 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
11 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
12 import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants;
13 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmArpOpSerializer;
14 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmArpShaSerializer;
15 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmArpSpaSerializer;
16 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmArpThaSerializer;
17 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmArpTpaSerializer;
18 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmEthDstSerializer;
19 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmEthSrcSerializer;
20 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmEthTypeSerializer;
21 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIcmpv4CodeSerializer;
22 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIcmpv4TypeSerializer;
23 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIcmpv6CodeSerializer;
24 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIcmpv6TypeSerializer;
25 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmInPhyPortSerializer;
26 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmInPortSerializer;
27 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpDscpSerializer;
28 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpEcnSerializer;
29 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpProtoSerializer;
30 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv4DstSerializer;
31 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv4SrcSerializer;
32 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6DstSerializer;
33 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6ExtHdrSerializer;
34 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6FlabelSerializer;
35 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6NdSllSerializer;
36 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6NdTargetSerializer;
37 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6NdTllSerializer;
38 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6SrcSerializer;
39 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmMetadataSerializer;
40 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmMplsBosSerializer;
41 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmMplsLabelSerializer;
42 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmMplsTcSerializer;
43 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmPbbIsidSerializer;
44 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmSctpDstSerializer;
45 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmSctpSrcSerializer;
46 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmTcpDstSerializer;
47 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmTcpSrcSerializer;
48 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmTunnelIdSerializer;
49 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmUdpDstSerializer;
50 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmUdpSrcSerializer;
51 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmVlanPcpSerializer;
52 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmVlanVidSerializer;
53 import org.opendaylight.openflowjava.protocol.impl.serialization.match.ext.OnfOxmTcpFlagsSerializer;
54 import org.opendaylight.openflowjava.protocol.impl.util.MatchEntrySerializerRegistryHelper;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.approved.extensions.rev160802.TcpFlags;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpOp;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSha;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSpa;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTha;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTpa;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthType;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Code;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Type;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Code;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Type;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPhyPort;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpDscp;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpEcn;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpProto;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Dst;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Src;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Dst;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Exthdr;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Flabel;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdSll;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTarget;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTll;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Src;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsBos;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsLabel;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsTc;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.PbbIsid;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpDst;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpSrc;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpDst;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpSrc;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TunnelId;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpDst;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpSrc;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanPcp;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid;
97
98 /**
99  * Initializes serializer registry with match entry serializers
100  * @author michal.polkorab
101  */
102 public final class MatchEntriesInitializer {
103
104     private MatchEntriesInitializer() {
105         throw new UnsupportedOperationException("Utility class shouldn't be instantiated");
106     }
107
108     /**
109      * Registers match entry serializers into provided registry
110      * @param serializerRegistry registry to be initialized with match entry serializers
111      */
112     public static void registerMatchEntrySerializers(SerializerRegistry serializerRegistry) {
113         // register OF v1.3 OpenflowBasicClass match entry serializers
114         Class<OpenflowBasicClass> oxmClass = OpenflowBasicClass.class;
115         MatchEntrySerializerRegistryHelper<OpenflowBasicClass> helper =
116                 new MatchEntrySerializerRegistryHelper<>(EncodeConstants.OF13_VERSION_ID,
117                         oxmClass, serializerRegistry);
118         helper.registerSerializer(InPort.class, new OxmInPortSerializer());
119         helper.registerSerializer(InPhyPort.class, new OxmInPhyPortSerializer());
120         helper.registerSerializer(Metadata.class, new OxmMetadataSerializer());
121         helper.registerSerializer(EthDst.class, new OxmEthDstSerializer());
122         helper.registerSerializer(EthSrc.class, new OxmEthSrcSerializer());
123         helper.registerSerializer(EthType.class, new OxmEthTypeSerializer());
124         helper.registerSerializer(VlanVid.class, new OxmVlanVidSerializer());
125         helper.registerSerializer(VlanPcp.class, new OxmVlanPcpSerializer());
126         helper.registerSerializer(IpDscp.class, new OxmIpDscpSerializer());
127         helper.registerSerializer(IpEcn.class, new OxmIpEcnSerializer());
128         helper.registerSerializer(IpProto.class, new OxmIpProtoSerializer());
129         helper.registerSerializer(Ipv4Src.class, new OxmIpv4SrcSerializer());
130         helper.registerSerializer(Ipv4Dst.class, new OxmIpv4DstSerializer());
131         helper.registerSerializer(TcpSrc.class, new OxmTcpSrcSerializer());
132         helper.registerSerializer(TcpDst.class, new OxmTcpDstSerializer());
133         helper.registerSerializer(UdpSrc.class, new OxmUdpSrcSerializer());
134         helper.registerSerializer(UdpDst.class, new OxmUdpDstSerializer());
135         helper.registerSerializer(SctpSrc.class, new OxmSctpSrcSerializer());
136         helper.registerSerializer(SctpDst.class, new OxmSctpDstSerializer());
137         helper.registerSerializer(Icmpv4Type.class, new OxmIcmpv4TypeSerializer());
138         helper.registerSerializer(Icmpv4Code.class, new OxmIcmpv4CodeSerializer());
139         helper.registerSerializer(ArpOp.class, new OxmArpOpSerializer());
140         helper.registerSerializer(ArpSpa.class, new OxmArpSpaSerializer());
141         helper.registerSerializer(ArpTpa.class, new OxmArpTpaSerializer());
142         helper.registerSerializer(ArpSha.class, new OxmArpShaSerializer());
143         helper.registerSerializer(ArpTha.class, new OxmArpThaSerializer());
144         helper.registerSerializer(Ipv6Src.class, new OxmIpv6SrcSerializer());
145         helper.registerSerializer(Ipv6Dst.class, new OxmIpv6DstSerializer());
146         helper.registerSerializer(Ipv6Flabel.class, new OxmIpv6FlabelSerializer());
147         helper.registerSerializer(Icmpv6Type.class, new OxmIcmpv6TypeSerializer());
148         helper.registerSerializer(Icmpv6Code.class, new OxmIcmpv6CodeSerializer());
149         helper.registerSerializer(Ipv6NdTarget.class, new OxmIpv6NdTargetSerializer());
150         helper.registerSerializer(Ipv6NdSll.class, new OxmIpv6NdSllSerializer());
151         helper.registerSerializer(Ipv6NdTll.class, new OxmIpv6NdTllSerializer());
152         helper.registerSerializer(MplsLabel.class, new OxmMplsLabelSerializer());
153         helper.registerSerializer(MplsTc.class, new OxmMplsTcSerializer());
154         helper.registerSerializer(MplsBos.class, new OxmMplsBosSerializer());
155         helper.registerSerializer(PbbIsid.class, new OxmPbbIsidSerializer());
156         helper.registerSerializer(TunnelId.class, new OxmTunnelIdSerializer());
157         helper.registerSerializer(Ipv6Exthdr.class, new OxmIpv6ExtHdrSerializer());
158
159         // Register approved openflow match entry serializers
160         helper.registerExperimenterSerializer(TcpFlags.class, OxmMatchConstants.ONFOXM_ET_TCP_FLAGS_EXP_ID,
161                 new OnfOxmTcpFlagsSerializer());
162     }
163 }