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