blob: 264dd4ad81700b92ca99800ec2ea5fa29c2cefcd [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;
Thomas Vachuska7d0032b2014-11-04 17:39:57 -080083import org.onlab.onos.net.intent.constraint.BandwidthConstraint;
84import org.onlab.onos.net.intent.constraint.BooleanConstraint;
85import org.onlab.onos.net.intent.constraint.LambdaConstraint;
Sho SHIMIZUcd4bac82014-11-11 17:07:25 -080086import org.onlab.onos.net.intent.constraint.LatencyConstraint;
Thomas Vachuska7d0032b2014-11-04 17:39:57 -080087import org.onlab.onos.net.intent.constraint.LinkTypeConstraint;
Sho SHIMIZUcd4bac82014-11-11 17:07:25 -080088import org.onlab.onos.net.intent.constraint.ObstacleConstraint;
89import org.onlab.onos.net.intent.constraint.WaypointConstraint;
Madan Jampani2ff05592014-10-10 15:42:47 -070090import org.onlab.onos.net.link.DefaultLinkDescription;
Jonathan Hart4f60f982014-10-27 08:11:17 -070091import org.onlab.onos.net.packet.DefaultOutboundPacket;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070092import org.onlab.onos.net.provider.ProviderId;
Thomas Vachuska7d0032b2014-11-04 17:39:57 -080093import org.onlab.onos.net.resource.Bandwidth;
Yuta HIGUCHIadac04a2014-11-13 00:02:45 -080094import org.onlab.onos.net.resource.BandwidthResourceAllocation;
95import org.onlab.onos.net.resource.BandwidthResourceRequest;
96import org.onlab.onos.net.resource.DefaultLinkResourceAllocations;
97import org.onlab.onos.net.resource.DefaultLinkResourceRequest;
Thomas Vachuska7d0032b2014-11-04 17:39:57 -080098import org.onlab.onos.net.resource.Lambda;
Yuta HIGUCHIadac04a2014-11-13 00:02:45 -080099import org.onlab.onos.net.resource.LambdaResourceAllocation;
100import org.onlab.onos.net.resource.LambdaResourceRequest;
Brian O'Connor41718fc2014-10-30 16:57:21 -0700101import org.onlab.onos.net.resource.LinkResourceRequest;
Yuta HIGUCHI9ee60f62014-10-09 10:00:01 -0700102import org.onlab.onos.store.Timestamp;
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800103import org.onlab.onos.store.service.BatchReadRequest;
104import org.onlab.onos.store.service.BatchWriteRequest;
105import org.onlab.onos.store.service.ReadRequest;
106import org.onlab.onos.store.service.ReadResult;
107import org.onlab.onos.store.service.ReadStatus;
108import org.onlab.onos.store.service.VersionedValue;
109import org.onlab.onos.store.service.WriteRequest;
110import org.onlab.onos.store.service.WriteResult;
111import org.onlab.onos.store.service.WriteStatus;
alshabib7911a052014-10-16 17:49:37 -0700112import org.onlab.packet.ChassisId;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700113import org.onlab.packet.IpAddress;
Pavlin Radoslavov17378ef2014-11-05 16:13:47 -0800114import org.onlab.packet.Ip4Address;
115import org.onlab.packet.Ip6Address;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700116import org.onlab.packet.IpPrefix;
Pavlin Radoslavov17378ef2014-11-05 16:13:47 -0800117import org.onlab.packet.Ip4Prefix;
118import org.onlab.packet.Ip6Prefix;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700119import org.onlab.packet.MacAddress;
120import org.onlab.packet.VlanId;
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700121import org.onlab.util.KryoNamespace;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700122
Yuta HIGUCHI47c40882014-10-10 18:44:37 -0700123import com.google.common.collect.ImmutableList;
124import com.google.common.collect.ImmutableMap;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700125import com.google.common.collect.ImmutableSet;
Yuta HIGUCHI47c40882014-10-10 18:44:37 -0700126
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700127public final class KryoNamespaces {
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700128
Yuta HIGUCHI1aa249c2014-11-05 17:40:28 -0800129 public static final KryoNamespace BASIC = KryoNamespace.newBuilder()
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800130 .nextId(KryoNamespace.FLOATING_ID)
131 .register(byte[].class)
132 .register(new ImmutableListSerializer(),
133 ImmutableList.class,
134 ImmutableList.of(1).getClass(),
135 ImmutableList.of(1, 2).getClass())
136 .register(new ImmutableSetSerializer(),
137 ImmutableSet.class,
138 ImmutableSet.of().getClass(),
139 ImmutableSet.of(1).getClass(),
140 ImmutableSet.of(1, 2).getClass())
141 .register(new ImmutableMapSerializer(),
142 ImmutableMap.class,
143 ImmutableMap.of().getClass(),
144 ImmutableMap.of("a", 1).getClass(),
145 ImmutableMap.of("R", 2, "D", 2).getClass())
146 .register(HashMap.class)
147 .register(ArrayList.class,
148 LinkedList.class,
149 HashSet.class
150 )
151 .register(new ArraysAsListSerializer(), Arrays.asList().getClass())
152 .register(Collections.singletonList(1).getClass())
153 .register(Duration.class)
Yuta HIGUCHI1aa249c2014-11-05 17:40:28 -0800154 .build();
155
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700156 /**
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700157 * KryoNamespace which can serialize ON.lab misc classes.
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700158 */
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700159 public static final KryoNamespace MISC = KryoNamespace.newBuilder()
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800160 .nextId(KryoNamespace.FLOATING_ID)
161 .register(new IpPrefixSerializer(), IpPrefix.class)
162 .register(new Ip4PrefixSerializer(), Ip4Prefix.class)
163 .register(new Ip6PrefixSerializer(), Ip6Prefix.class)
164 .register(new IpAddressSerializer(), IpAddress.class)
165 .register(new Ip4AddressSerializer(), Ip4Address.class)
166 .register(new Ip6AddressSerializer(), Ip6Address.class)
167 .register(new MacAddressSerializer(), MacAddress.class)
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700168 .register(VlanId.class)
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700169 .build();
170
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800171 /**
172 * Kryo registration Id for user custom registration.
173 */
174 public static final int BEGIN_USER_CUSTOM_ID = 300;
175
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700176 // TODO: Populate other classes
177 /**
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700178 * KryoNamespace which can serialize API bundle classes.
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700179 */
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700180 public static final KryoNamespace API = KryoNamespace.newBuilder()
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800181 .nextId(KryoNamespace.INITIAL_ID)
Yuta HIGUCHI1aa249c2014-11-05 17:40:28 -0800182 .register(BASIC)
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800183 .nextId(KryoNamespace.INITIAL_ID + 30)
184 .register(MISC)
185 .nextId(KryoNamespace.INITIAL_ID + 30 + 10)
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700186 .register(
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700187 ControllerNode.State.class,
188 Device.Type.class,
Thomas Vachuskad16ce182014-10-29 17:25:29 -0700189 Port.Type.class,
alshabib7911a052014-10-16 17:49:37 -0700190 ChassisId.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700191 DefaultAnnotations.class,
192 DefaultControllerNode.class,
193 DefaultDevice.class,
Madan Jampani53e44e62014-10-07 12:39:51 -0700194 DefaultDeviceDescription.class,
Madan Jampani2ff05592014-10-10 15:42:47 -0700195 DefaultLinkDescription.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700196 Port.class,
Madan Jampani53e44e62014-10-07 12:39:51 -0700197 DefaultPortDescription.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700198 Element.class,
Yuta HIGUCHI9ee60f62014-10-09 10:00:01 -0700199 Link.Type.class,
Thomas Vachuska57126fe2014-11-11 17:13:24 -0800200 Link.State.class,
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700201 Timestamp.class,
Madan Jampani1ee91782014-11-20 20:24:24 -0800202 Leadership.class,
203 LeadershipEvent.class,
204 LeadershipEvent.Type.class,
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700205 HostId.class,
206 HostDescription.class,
Madan Jampani38b250d2014-10-17 11:02:38 -0700207 DefaultHostDescription.class,
Madan Jampani117aaae2014-10-23 10:04:05 -0700208 DefaultFlowEntry.class,
209 StoredFlowEntry.class,
Yuta HIGUCHI2fcfde92014-10-20 18:37:14 -0700210 DefaultFlowRule.class,
alshabib3d643ec2014-10-22 18:33:00 -0700211 DefaultFlowEntry.class,
alshabibf6c2ede2014-10-22 23:31:50 -0700212 FlowEntry.FlowEntryState.class,
Yuta HIGUCHI2809bf32014-10-20 22:44:12 -0700213 FlowId.class,
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -0700214 DefaultTrafficSelector.class,
215 Criteria.PortCriterion.class,
216 Criteria.EthCriterion.class,
217 Criteria.EthTypeCriterion.class,
218 Criteria.IPCriterion.class,
219 Criteria.IPProtocolCriterion.class,
220 Criteria.VlanIdCriterion.class,
221 Criteria.VlanPcpCriterion.class,
222 Criteria.TcpPortCriterion.class,
223 Criterion.class,
224 Criterion.Type.class,
225 DefaultTrafficTreatment.class,
226 Instructions.DropInstruction.class,
Yuta HIGUCHI40d01772014-10-21 00:08:44 -0700227 Instructions.OutputInstruction.class,
Jonathan Hart68fef9d2014-10-29 17:30:03 -0700228 L0ModificationInstruction.class,
229 L0ModificationInstruction.L0SubType.class,
230 L0ModificationInstruction.ModLambdaInstruction.class,
231 L2ModificationInstruction.class,
232 L2ModificationInstruction.L2SubType.class,
233 L2ModificationInstruction.ModEtherInstruction.class,
234 L2ModificationInstruction.ModVlanIdInstruction.class,
235 L2ModificationInstruction.ModVlanPcpInstruction.class,
236 L3ModificationInstruction.class,
237 L3ModificationInstruction.L3SubType.class,
238 L3ModificationInstruction.ModIPInstruction.class,
Yuta HIGUCHI9def0472014-10-23 15:51:10 -0700239 RoleInfo.class,
240 FlowRuleBatchOperation.class,
241 CompletedBatchOperation.class,
242 FlowRuleBatchEntry.class,
Yuta HIGUCHI087019b2014-10-28 21:07:56 -0700243 FlowRuleBatchEntry.FlowRuleOperation.class,
244 IntentId.class,
245 IntentState.class,
246 Intent.class,
247 ConnectivityIntent.class,
248 PathIntent.class,
249 DefaultPath.class,
250 DefaultEdgeLink.class,
251 HostToHostIntent.class,
252 PointToPointIntent.class,
Jonathan Hart68fef9d2014-10-29 17:30:03 -0700253 MultiPointToSinglePointIntent.class,
Brian O'Connor41718fc2014-10-30 16:57:21 -0700254 LinkCollectionIntent.class,
255 OpticalConnectivityIntent.class,
256 OpticalPathIntent.class,
Thomas Vachuska7d0032b2014-11-04 17:39:57 -0800257 LinkResourceRequest.class,
Yuta HIGUCHIadac04a2014-11-13 00:02:45 -0800258 DefaultLinkResourceRequest.class,
259 BandwidthResourceRequest.class,
260 LambdaResourceRequest.class,
Thomas Vachuska7d0032b2014-11-04 17:39:57 -0800261 Lambda.class,
262 Bandwidth.class,
Yuta HIGUCHIadac04a2014-11-13 00:02:45 -0800263 DefaultLinkResourceAllocations.class,
264 BandwidthResourceAllocation.class,
265 LambdaResourceAllocation.class,
Sho SHIMIZUcd4bac82014-11-11 17:07:25 -0800266 // Constraints
Thomas Vachuska7d0032b2014-11-04 17:39:57 -0800267 LambdaConstraint.class,
268 BandwidthConstraint.class,
269 LinkTypeConstraint.class,
Sho SHIMIZUcd4bac82014-11-11 17:07:25 -0800270 LatencyConstraint.class,
271 WaypointConstraint.class,
272 ObstacleConstraint.class,
273 AnnotationConstraint.class,
Thomas Vachuska7d0032b2014-11-04 17:39:57 -0800274 BooleanConstraint.class
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700275 )
Yuta HIGUCHI91768e32014-11-22 05:06:35 -0800276 .register(new DefaultApplicationIdSerializer(), DefaultApplicationId.class)
277 .register(new URISerializer(), URI.class)
278 .register(new NodeIdSerializer(), NodeId.class)
279 .register(new ProviderIdSerializer(), ProviderId.class)
280 .register(new DeviceIdSerializer(), DeviceId.class)
281 .register(new PortNumberSerializer(), PortNumber.class)
282 .register(new DefaultPortSerializer(), DefaultPort.class)
283 .register(new LinkKeySerializer(), LinkKey.class)
284 .register(new ConnectPointSerializer(), ConnectPoint.class)
285 .register(new DefaultLinkSerializer(), DefaultLink.class)
286 .register(new MastershipTermSerializer(), MastershipTerm.class)
287 .register(new HostLocationSerializer(), HostLocation.class)
288 .register(new DefaultOutboundPacketSerializer(), DefaultOutboundPacket.class)
289 .register(ReadRequest.class)
290 .register(WriteRequest.class)
291 .register(WriteRequest.Type.class)
292 .register(WriteResult.class)
293 .register(ReadResult.class)
294 .register(BatchReadRequest.class)
295 .register(BatchWriteRequest.class)
296 .register(ReadStatus.class)
297 .register(WriteStatus.class)
298 .register(VersionedValue.class)
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700299
300 .build();
301
302
303 // not to be instantiated
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700304 private KryoNamespaces() {}
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700305}