blob: 5e0c6dde3be1ccff0083819f760c57c48328bf7b [file] [log] [blame]
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07001/*
2 * Copyright 2014 Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070016package org.onlab.onos.store.serializers;
17
18import java.net.URI;
Sho SHIMIZU977cb602014-11-13 08:40:50 -080019import java.time.Duration;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070020import java.util.ArrayList;
Madan Jampani53e44e62014-10-07 12:39:51 -070021import java.util.Arrays;
Yuta HIGUCHI91768e32014-11-22 05:06:35 -080022import java.util.Collections;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070023import java.util.HashMap;
alshabib3d643ec2014-10-22 18:33:00 -070024import java.util.HashSet;
Yuta HIGUCHI9def0472014-10-23 15:51:10 -070025import java.util.LinkedList;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070026
27import org.onlab.onos.cluster.ControllerNode;
28import org.onlab.onos.cluster.DefaultControllerNode;
Madan Jampani1ee91782014-11-20 20:24:24 -080029import org.onlab.onos.cluster.Leadership;
30import org.onlab.onos.cluster.LeadershipEvent;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070031import org.onlab.onos.cluster.NodeId;
Yuta HIGUCHI40d01772014-10-21 00:08:44 -070032import org.onlab.onos.cluster.RoleInfo;
Jonathan Hart68fef9d2014-10-29 17:30:03 -070033import org.onlab.onos.core.DefaultApplicationId;
Yuta HIGUCHI80912e62014-10-12 00:15:47 -070034import org.onlab.onos.mastership.MastershipTerm;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070035import org.onlab.onos.net.ConnectPoint;
36import org.onlab.onos.net.DefaultAnnotations;
37import org.onlab.onos.net.DefaultDevice;
Yuta HIGUCHI087019b2014-10-28 21:07:56 -070038import org.onlab.onos.net.DefaultEdgeLink;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070039import org.onlab.onos.net.DefaultLink;
Yuta HIGUCHI087019b2014-10-28 21:07:56 -070040import org.onlab.onos.net.DefaultPath;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070041import org.onlab.onos.net.DefaultPort;
42import org.onlab.onos.net.Device;
43import org.onlab.onos.net.DeviceId;
44import org.onlab.onos.net.Element;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070045import org.onlab.onos.net.HostId;
46import org.onlab.onos.net.HostLocation;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070047import org.onlab.onos.net.Link;
48import org.onlab.onos.net.LinkKey;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070049import org.onlab.onos.net.Port;
50import org.onlab.onos.net.PortNumber;
Madan Jampani53e44e62014-10-07 12:39:51 -070051import org.onlab.onos.net.device.DefaultDeviceDescription;
52import org.onlab.onos.net.device.DefaultPortDescription;
Yuta HIGUCHI9def0472014-10-23 15:51:10 -070053import org.onlab.onos.net.flow.CompletedBatchOperation;
Madan Jampani117aaae2014-10-23 10:04:05 -070054import org.onlab.onos.net.flow.DefaultFlowEntry;
Madan Jampani38b250d2014-10-17 11:02:38 -070055import org.onlab.onos.net.flow.DefaultFlowRule;
Yuta HIGUCHI2809bf32014-10-20 22:44:12 -070056import org.onlab.onos.net.flow.DefaultTrafficSelector;
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -070057import org.onlab.onos.net.flow.DefaultTrafficTreatment;
alshabibf6c2ede2014-10-22 23:31:50 -070058import org.onlab.onos.net.flow.FlowEntry;
Yuta HIGUCHI2fcfde92014-10-20 18:37:14 -070059import org.onlab.onos.net.flow.FlowId;
Yuta HIGUCHI9def0472014-10-23 15:51:10 -070060import org.onlab.onos.net.flow.FlowRuleBatchEntry;
61import org.onlab.onos.net.flow.FlowRuleBatchOperation;
Madan Jampani117aaae2014-10-23 10:04:05 -070062import org.onlab.onos.net.flow.StoredFlowEntry;
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -070063import org.onlab.onos.net.flow.criteria.Criteria;
64import org.onlab.onos.net.flow.criteria.Criterion;
65import org.onlab.onos.net.flow.instructions.Instructions;
Jonathan Hart68fef9d2014-10-29 17:30:03 -070066import org.onlab.onos.net.flow.instructions.L0ModificationInstruction;
67import org.onlab.onos.net.flow.instructions.L2ModificationInstruction;
68import org.onlab.onos.net.flow.instructions.L3ModificationInstruction;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070069import org.onlab.onos.net.host.DefaultHostDescription;
70import org.onlab.onos.net.host.HostDescription;
Yuta HIGUCHI087019b2014-10-28 21:07:56 -070071import org.onlab.onos.net.intent.ConnectivityIntent;
72import org.onlab.onos.net.intent.HostToHostIntent;
73import org.onlab.onos.net.intent.Intent;
74import org.onlab.onos.net.intent.IntentId;
75import org.onlab.onos.net.intent.IntentState;
Jonathan Hart68fef9d2014-10-29 17:30:03 -070076import org.onlab.onos.net.intent.LinkCollectionIntent;
Yuta HIGUCHI087019b2014-10-28 21:07:56 -070077import org.onlab.onos.net.intent.MultiPointToSinglePointIntent;
Brian O'Connor41718fc2014-10-30 16:57:21 -070078import org.onlab.onos.net.intent.OpticalConnectivityIntent;
79import org.onlab.onos.net.intent.OpticalPathIntent;
Yuta HIGUCHI087019b2014-10-28 21:07:56 -070080import org.onlab.onos.net.intent.PathIntent;
81import org.onlab.onos.net.intent.PointToPointIntent;
Sho SHIMIZUcd4bac82014-11-11 17:07:25 -080082import org.onlab.onos.net.intent.constraint.AnnotationConstraint;
Michele Santuari4a338072014-11-05 18:38:55 +010083import org.onlab.onos.net.intent.SinglePointToMultiPointIntent;
Thomas Vachuska7d0032b2014-11-04 17:39:57 -080084import org.onlab.onos.net.intent.constraint.BandwidthConstraint;
85import org.onlab.onos.net.intent.constraint.BooleanConstraint;
86import org.onlab.onos.net.intent.constraint.LambdaConstraint;
Sho SHIMIZUcd4bac82014-11-11 17:07:25 -080087import org.onlab.onos.net.intent.constraint.LatencyConstraint;
Thomas Vachuska7d0032b2014-11-04 17:39:57 -080088import org.onlab.onos.net.intent.constraint.LinkTypeConstraint;
Sho SHIMIZUcd4bac82014-11-11 17:07:25 -080089import org.onlab.onos.net.intent.constraint.ObstacleConstraint;
90import org.onlab.onos.net.intent.constraint.WaypointConstraint;
Madan Jampani2ff05592014-10-10 15:42:47 -070091import org.onlab.onos.net.link.DefaultLinkDescription;
Jonathan Hart4f60f982014-10-27 08:11:17 -070092import org.onlab.onos.net.packet.DefaultOutboundPacket;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070093import org.onlab.onos.net.provider.ProviderId;
Thomas Vachuska7d0032b2014-11-04 17:39:57 -080094import org.onlab.onos.net.resource.Bandwidth;
Yuta HIGUCHIadac04a2014-11-13 00:02:45 -080095import org.onlab.onos.net.resource.BandwidthResourceAllocation;
96import org.onlab.onos.net.resource.BandwidthResourceRequest;
97import org.onlab.onos.net.resource.DefaultLinkResourceAllocations;
98import org.onlab.onos.net.resource.DefaultLinkResourceRequest;
Thomas Vachuska7d0032b2014-11-04 17:39:57 -080099import org.onlab.onos.net.resource.Lambda;
Yuta HIGUCHIadac04a2014-11-13 00:02:45 -0800100import org.onlab.onos.net.resource.LambdaResourceAllocation;
101import org.onlab.onos.net.resource.LambdaResourceRequest;
Brian O'Connor41718fc2014-10-30 16:57:21 -0700102import org.onlab.onos.net.resource.LinkResourceRequest;
Yuta HIGUCHI9ee60f62014-10-09 10:00:01 -0700103import org.onlab.onos.store.Timestamp;
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800104import org.onlab.onos.store.service.BatchReadRequest;
105import org.onlab.onos.store.service.BatchWriteRequest;
106import org.onlab.onos.store.service.ReadRequest;
107import org.onlab.onos.store.service.ReadResult;
108import org.onlab.onos.store.service.ReadStatus;
109import org.onlab.onos.store.service.VersionedValue;
110import org.onlab.onos.store.service.WriteRequest;
111import org.onlab.onos.store.service.WriteResult;
112import org.onlab.onos.store.service.WriteStatus;
alshabib7911a052014-10-16 17:49:37 -0700113import org.onlab.packet.ChassisId;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700114import org.onlab.packet.IpAddress;
Pavlin Radoslavov17378ef2014-11-05 16:13:47 -0800115import org.onlab.packet.Ip4Address;
116import org.onlab.packet.Ip6Address;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700117import org.onlab.packet.IpPrefix;
Pavlin Radoslavov17378ef2014-11-05 16:13:47 -0800118import org.onlab.packet.Ip4Prefix;
119import org.onlab.packet.Ip6Prefix;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700120import org.onlab.packet.MacAddress;
121import org.onlab.packet.VlanId;
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700122import org.onlab.util.KryoNamespace;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700123
Yuta HIGUCHI47c40882014-10-10 18:44:37 -0700124import com.google.common.collect.ImmutableList;
125import com.google.common.collect.ImmutableMap;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700126import com.google.common.collect.ImmutableSet;
Yuta HIGUCHI47c40882014-10-10 18:44:37 -0700127
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700128public final class KryoNamespaces {
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700129
Yuta HIGUCHI1aa249c2014-11-05 17:40:28 -0800130 public static final KryoNamespace BASIC = KryoNamespace.newBuilder()
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800131 .nextId(KryoNamespace.FLOATING_ID)
132 .register(byte[].class)
133 .register(new ImmutableListSerializer(),
134 ImmutableList.class,
135 ImmutableList.of(1).getClass(),
136 ImmutableList.of(1, 2).getClass())
137 .register(new ImmutableSetSerializer(),
138 ImmutableSet.class,
139 ImmutableSet.of().getClass(),
140 ImmutableSet.of(1).getClass(),
141 ImmutableSet.of(1, 2).getClass())
142 .register(new ImmutableMapSerializer(),
143 ImmutableMap.class,
144 ImmutableMap.of().getClass(),
145 ImmutableMap.of("a", 1).getClass(),
146 ImmutableMap.of("R", 2, "D", 2).getClass())
147 .register(HashMap.class)
148 .register(ArrayList.class,
149 LinkedList.class,
150 HashSet.class
151 )
152 .register(new ArraysAsListSerializer(), Arrays.asList().getClass())
153 .register(Collections.singletonList(1).getClass())
154 .register(Duration.class)
Yuta HIGUCHI1aa249c2014-11-05 17:40:28 -0800155 .build();
156
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700157 /**
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700158 * KryoNamespace which can serialize ON.lab misc classes.
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700159 */
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700160 public static final KryoNamespace MISC = KryoNamespace.newBuilder()
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800161 .nextId(KryoNamespace.FLOATING_ID)
162 .register(new IpPrefixSerializer(), IpPrefix.class)
163 .register(new Ip4PrefixSerializer(), Ip4Prefix.class)
164 .register(new Ip6PrefixSerializer(), Ip6Prefix.class)
165 .register(new IpAddressSerializer(), IpAddress.class)
166 .register(new Ip4AddressSerializer(), Ip4Address.class)
167 .register(new Ip6AddressSerializer(), Ip6Address.class)
168 .register(new MacAddressSerializer(), MacAddress.class)
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700169 .register(VlanId.class)
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700170 .build();
171
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800172 /**
173 * Kryo registration Id for user custom registration.
174 */
175 public static final int BEGIN_USER_CUSTOM_ID = 300;
176
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700177 // TODO: Populate other classes
178 /**
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700179 * KryoNamespace which can serialize API bundle classes.
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700180 */
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700181 public static final KryoNamespace API = KryoNamespace.newBuilder()
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800182 .nextId(KryoNamespace.INITIAL_ID)
Yuta HIGUCHI1aa249c2014-11-05 17:40:28 -0800183 .register(BASIC)
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800184 .nextId(KryoNamespace.INITIAL_ID + 30)
185 .register(MISC)
186 .nextId(KryoNamespace.INITIAL_ID + 30 + 10)
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700187 .register(
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700188 ControllerNode.State.class,
189 Device.Type.class,
Thomas Vachuskad16ce182014-10-29 17:25:29 -0700190 Port.Type.class,
alshabib7911a052014-10-16 17:49:37 -0700191 ChassisId.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700192 DefaultAnnotations.class,
193 DefaultControllerNode.class,
194 DefaultDevice.class,
Madan Jampani53e44e62014-10-07 12:39:51 -0700195 DefaultDeviceDescription.class,
Madan Jampani2ff05592014-10-10 15:42:47 -0700196 DefaultLinkDescription.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700197 Port.class,
Madan Jampani53e44e62014-10-07 12:39:51 -0700198 DefaultPortDescription.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700199 Element.class,
Yuta HIGUCHI9ee60f62014-10-09 10:00:01 -0700200 Link.Type.class,
Thomas Vachuska57126fe2014-11-11 17:13:24 -0800201 Link.State.class,
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700202 Timestamp.class,
Madan Jampani1ee91782014-11-20 20:24:24 -0800203 Leadership.class,
204 LeadershipEvent.class,
205 LeadershipEvent.Type.class,
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700206 HostId.class,
207 HostDescription.class,
Madan Jampani38b250d2014-10-17 11:02:38 -0700208 DefaultHostDescription.class,
Madan Jampani117aaae2014-10-23 10:04:05 -0700209 DefaultFlowEntry.class,
210 StoredFlowEntry.class,
Yuta HIGUCHI2fcfde92014-10-20 18:37:14 -0700211 DefaultFlowRule.class,
alshabib3d643ec2014-10-22 18:33:00 -0700212 DefaultFlowEntry.class,
alshabibf6c2ede2014-10-22 23:31:50 -0700213 FlowEntry.FlowEntryState.class,
Yuta HIGUCHI2809bf32014-10-20 22:44:12 -0700214 FlowId.class,
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -0700215 DefaultTrafficSelector.class,
216 Criteria.PortCriterion.class,
217 Criteria.EthCriterion.class,
218 Criteria.EthTypeCriterion.class,
219 Criteria.IPCriterion.class,
220 Criteria.IPProtocolCriterion.class,
221 Criteria.VlanIdCriterion.class,
222 Criteria.VlanPcpCriterion.class,
223 Criteria.TcpPortCriterion.class,
224 Criterion.class,
225 Criterion.Type.class,
226 DefaultTrafficTreatment.class,
227 Instructions.DropInstruction.class,
Yuta HIGUCHI40d01772014-10-21 00:08:44 -0700228 Instructions.OutputInstruction.class,
Jonathan Hart68fef9d2014-10-29 17:30:03 -0700229 L0ModificationInstruction.class,
230 L0ModificationInstruction.L0SubType.class,
231 L0ModificationInstruction.ModLambdaInstruction.class,
232 L2ModificationInstruction.class,
233 L2ModificationInstruction.L2SubType.class,
234 L2ModificationInstruction.ModEtherInstruction.class,
235 L2ModificationInstruction.ModVlanIdInstruction.class,
236 L2ModificationInstruction.ModVlanPcpInstruction.class,
237 L3ModificationInstruction.class,
238 L3ModificationInstruction.L3SubType.class,
239 L3ModificationInstruction.ModIPInstruction.class,
Yuta HIGUCHI9def0472014-10-23 15:51:10 -0700240 RoleInfo.class,
241 FlowRuleBatchOperation.class,
242 CompletedBatchOperation.class,
243 FlowRuleBatchEntry.class,
Yuta HIGUCHI087019b2014-10-28 21:07:56 -0700244 FlowRuleBatchEntry.FlowRuleOperation.class,
245 IntentId.class,
246 IntentState.class,
247 Intent.class,
248 ConnectivityIntent.class,
249 PathIntent.class,
250 DefaultPath.class,
251 DefaultEdgeLink.class,
252 HostToHostIntent.class,
253 PointToPointIntent.class,
Jonathan Hart68fef9d2014-10-29 17:30:03 -0700254 MultiPointToSinglePointIntent.class,
Michele Santuari4a338072014-11-05 18:38:55 +0100255 SinglePointToMultiPointIntent.class,
Brian O'Connor41718fc2014-10-30 16:57:21 -0700256 LinkCollectionIntent.class,
257 OpticalConnectivityIntent.class,
258 OpticalPathIntent.class,
Thomas Vachuska7d0032b2014-11-04 17:39:57 -0800259 LinkResourceRequest.class,
Yuta HIGUCHIadac04a2014-11-13 00:02:45 -0800260 DefaultLinkResourceRequest.class,
261 BandwidthResourceRequest.class,
262 LambdaResourceRequest.class,
Thomas Vachuska7d0032b2014-11-04 17:39:57 -0800263 Lambda.class,
264 Bandwidth.class,
Yuta HIGUCHIadac04a2014-11-13 00:02:45 -0800265 DefaultLinkResourceAllocations.class,
266 BandwidthResourceAllocation.class,
267 LambdaResourceAllocation.class,
Sho SHIMIZUcd4bac82014-11-11 17:07:25 -0800268 // Constraints
Thomas Vachuska7d0032b2014-11-04 17:39:57 -0800269 LambdaConstraint.class,
270 BandwidthConstraint.class,
271 LinkTypeConstraint.class,
Sho SHIMIZUcd4bac82014-11-11 17:07:25 -0800272 LatencyConstraint.class,
273 WaypointConstraint.class,
274 ObstacleConstraint.class,
275 AnnotationConstraint.class,
Thomas Vachuska7d0032b2014-11-04 17:39:57 -0800276 BooleanConstraint.class
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700277 )
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800278 .register(new DefaultApplicationIdSerializer(), DefaultApplicationId.class)
279 .register(new URISerializer(), URI.class)
280 .register(new NodeIdSerializer(), NodeId.class)
281 .register(new ProviderIdSerializer(), ProviderId.class)
282 .register(new DeviceIdSerializer(), DeviceId.class)
283 .register(new PortNumberSerializer(), PortNumber.class)
284 .register(new DefaultPortSerializer(), DefaultPort.class)
285 .register(new LinkKeySerializer(), LinkKey.class)
286 .register(new ConnectPointSerializer(), ConnectPoint.class)
287 .register(new DefaultLinkSerializer(), DefaultLink.class)
288 .register(new MastershipTermSerializer(), MastershipTerm.class)
289 .register(new HostLocationSerializer(), HostLocation.class)
290 .register(new DefaultOutboundPacketSerializer(), DefaultOutboundPacket.class)
291 .register(ReadRequest.class)
292 .register(WriteRequest.class)
293 .register(WriteRequest.Type.class)
294 .register(WriteResult.class)
295 .register(ReadResult.class)
296 .register(BatchReadRequest.class)
297 .register(BatchWriteRequest.class)
298 .register(ReadStatus.class)
299 .register(WriteStatus.class)
300 .register(VersionedValue.class)
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700301
302 .build();
303
304
305 // not to be instantiated
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700306 private KryoNamespaces() {}
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700307}