2c7f814fa119180f2af73fd4556d8c1b22627074
[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.impl.serialization.match.NxmTcpFlagSerializer;\r
12 import org.opendaylight.openflowjava.protocol.impl.serialization.match.NxmTunnelIpv4DstSerializer;\r
13 import org.opendaylight.openflowjava.protocol.impl.serialization.match.NxmTunnelIpv4SrcSerializer;\r
14 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmArpOpSerializer;\r
15 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmArpShaSerializer;\r
16 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmArpSpaSerializer;\r
17 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmArpThaSerializer;\r
18 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmArpTpaSerializer;\r
19 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmEthDstSerializer;\r
20 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmEthSrcSerializer;\r
21 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmEthTypeSerializer;\r
22 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIcmpv4CodeSerializer;\r
23 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIcmpv4TypeSerializer;\r
24 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIcmpv6CodeSerializer;\r
25 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIcmpv6TypeSerializer;\r
26 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmInPhyPortSerializer;\r
27 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmInPortSerializer;\r
28 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpDscpSerializer;\r
29 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpEcnSerializer;\r
30 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpProtoSerializer;\r
31 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv4DstSerializer;\r
32 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv4SrcSerializer;\r
33 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6DstSerializer;\r
34 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6ExtHdrSerializer;\r
35 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6FlabelSerializer;\r
36 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6NdSllSerializer;\r
37 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6NdTargetSerializer;\r
38 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6NdTllSerializer;\r
39 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmIpv6SrcSerializer;\r
40 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmMetadataSerializer;\r
41 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmMplsBosSerializer;\r
42 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmMplsLabelSerializer;\r
43 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmMplsTcSerializer;\r
44 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmPbbIsidSerializer;\r
45 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmSctpDstSerializer;\r
46 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmSctpSrcSerializer;\r
47 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmTcpDstSerializer;\r
48 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmTcpSrcSerializer;\r
49 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmTunnelIdSerializer;\r
50 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmUdpDstSerializer;\r
51 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmUdpSrcSerializer;\r
52 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmVlanPcpSerializer;\r
53 import org.opendaylight.openflowjava.protocol.impl.serialization.match.OxmVlanVidSerializer;\r
54 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
55 import org.opendaylight.openflowjava.protocol.impl.util.EnhancedKeyRegistryHelper;\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 class MatchEntriesInitializer {\r
107 \r
108     /**\r
109      * Registers match entry serializers into provided registry\r
110      * @param serializerRegistry registry to be initialized with match entry serializers\r
111      */\r
112     public static void registerMatchEntrySerializers(SerializerRegistry serializerRegistry) {\r
113         // register OF v1.3 OpenflowBasicClass match entry serializers\r
114         Class<OpenflowBasicClass> oxmClass = OpenflowBasicClass.class;\r
115         EnhancedKeyRegistryHelper<OpenflowBasicClass> registryHelper =\r
116                 new EnhancedKeyRegistryHelper<>(EncodeConstants.OF13_VERSION_ID, oxmClass, serializerRegistry);\r
117         registryHelper.registerSerializer(InPort.class, new OxmInPortSerializer());\r
118         registryHelper.registerSerializer(InPhyPort.class, new OxmInPhyPortSerializer());\r
119         registryHelper.registerSerializer(Metadata.class, new OxmMetadataSerializer());\r
120         registryHelper.registerSerializer(EthDst.class, new OxmEthDstSerializer());\r
121         registryHelper.registerSerializer(EthSrc.class, new OxmEthSrcSerializer());\r
122         registryHelper.registerSerializer(EthType.class, new OxmEthTypeSerializer());\r
123         registryHelper.registerSerializer(VlanVid.class, new OxmVlanVidSerializer());\r
124         registryHelper.registerSerializer(VlanPcp.class, new OxmVlanPcpSerializer());\r
125         registryHelper.registerSerializer(IpDscp.class, new OxmIpDscpSerializer());\r
126         registryHelper.registerSerializer(IpEcn.class, new OxmIpEcnSerializer());\r
127         registryHelper.registerSerializer(IpProto.class, new OxmIpProtoSerializer());\r
128         registryHelper.registerSerializer(Ipv4Src.class, new OxmIpv4SrcSerializer());\r
129         registryHelper.registerSerializer(Ipv4Dst.class, new OxmIpv4DstSerializer());\r
130         registryHelper.registerSerializer(TcpSrc.class, new OxmTcpSrcSerializer());\r
131         registryHelper.registerSerializer(TcpDst.class, new OxmTcpDstSerializer());\r
132         registryHelper.registerSerializer(UdpSrc.class, new OxmUdpSrcSerializer());\r
133         registryHelper.registerSerializer(UdpDst.class, new OxmUdpDstSerializer());\r
134         registryHelper.registerSerializer(SctpSrc.class, new OxmSctpSrcSerializer());\r
135         registryHelper.registerSerializer(SctpDst.class, new OxmSctpDstSerializer());\r
136         registryHelper.registerSerializer(Icmpv4Type.class, new OxmIcmpv4TypeSerializer());\r
137         registryHelper.registerSerializer(Icmpv4Code.class, new OxmIcmpv4CodeSerializer());\r
138         registryHelper.registerSerializer(ArpOp.class, new OxmArpOpSerializer());\r
139         registryHelper.registerSerializer(ArpSpa.class, new OxmArpSpaSerializer());\r
140         registryHelper.registerSerializer(ArpTpa.class, new OxmArpTpaSerializer());\r
141         registryHelper.registerSerializer(ArpSha.class, new OxmArpShaSerializer());\r
142         registryHelper.registerSerializer(ArpTha.class, new OxmArpThaSerializer());\r
143         registryHelper.registerSerializer(Ipv6Src.class, new OxmIpv6SrcSerializer());\r
144         registryHelper.registerSerializer(Ipv6Dst.class, new OxmIpv6DstSerializer());\r
145         registryHelper.registerSerializer(Ipv6Flabel.class, new OxmIpv6FlabelSerializer());\r
146         registryHelper.registerSerializer(Icmpv6Type.class, new OxmIcmpv6TypeSerializer());\r
147         registryHelper.registerSerializer(Icmpv6Code.class, new OxmIcmpv6CodeSerializer());\r
148         registryHelper.registerSerializer(Ipv6NdTarget.class, new OxmIpv6NdTargetSerializer());\r
149         registryHelper.registerSerializer(Ipv6NdSll.class, new OxmIpv6NdSllSerializer());\r
150         registryHelper.registerSerializer(Ipv6NdTll.class, new OxmIpv6NdTllSerializer());\r
151         registryHelper.registerSerializer(MplsLabel.class, new OxmMplsLabelSerializer());\r
152         registryHelper.registerSerializer(MplsTc.class, new OxmMplsTcSerializer());\r
153         registryHelper.registerSerializer(MplsBos.class, new OxmMplsBosSerializer());\r
154         registryHelper.registerSerializer(PbbIsid.class, new OxmPbbIsidSerializer());\r
155         registryHelper.registerSerializer(TunnelId.class, new OxmTunnelIdSerializer());\r
156         registryHelper.registerSerializer(Ipv6Exthdr.class, new OxmIpv6ExtHdrSerializer());\r
157 \r
158         // Register OpenFlow NXM1Class match entry serializer\r
159         Class<Nxm1Class> nxm1Class = Nxm1Class.class;\r
160         EnhancedKeyRegistryHelper<Nxm1Class> nxm1RegistryHelper =\r
161                 new EnhancedKeyRegistryHelper<>(EncodeConstants.OF13_VERSION_ID, nxm1Class, serializerRegistry);\r
162         nxm1RegistryHelper.registerSerializer(TunnelIpv4Dst.class, new NxmTunnelIpv4DstSerializer());\r
163         nxm1RegistryHelper.registerSerializer(TunnelIpv4Src.class, new NxmTunnelIpv4SrcSerializer());\r
164         nxm1RegistryHelper.registerSerializer(TcpFlag.class, new NxmTcpFlagSerializer());\r
165     }\r
166 }\r