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