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