blob: c5543720b06ba1928e7c186255c463b2fbbc0544 [file] [log] [blame]
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -07001package org.onlab.onos.store.serializers;
2
3import java.net.URI;
4import java.util.ArrayList;
Madan Jampani53e44e62014-10-07 12:39:51 -07005import java.util.Arrays;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -07006import java.util.HashMap;
alshabib3d643ec2014-10-22 18:33:00 -07007import java.util.HashSet;
Yuta HIGUCHI9def0472014-10-23 15:51:10 -07008import java.util.LinkedList;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -07009
Thomas Vachuskae0f804a2014-10-27 23:40:48 -070010import org.onlab.onos.core.DefaultApplicationId;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070011import org.onlab.onos.cluster.ControllerNode;
12import org.onlab.onos.cluster.DefaultControllerNode;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070013import org.onlab.onos.cluster.NodeId;
Yuta HIGUCHI40d01772014-10-21 00:08:44 -070014import org.onlab.onos.cluster.RoleInfo;
Yuta HIGUCHI80912e62014-10-12 00:15:47 -070015import org.onlab.onos.mastership.MastershipTerm;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070016import org.onlab.onos.net.ConnectPoint;
17import org.onlab.onos.net.DefaultAnnotations;
18import org.onlab.onos.net.DefaultDevice;
19import org.onlab.onos.net.DefaultLink;
20import org.onlab.onos.net.DefaultPort;
21import org.onlab.onos.net.Device;
22import org.onlab.onos.net.DeviceId;
23import org.onlab.onos.net.Element;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070024import org.onlab.onos.net.HostId;
25import org.onlab.onos.net.HostLocation;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070026import org.onlab.onos.net.Link;
27import org.onlab.onos.net.LinkKey;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070028import org.onlab.onos.net.Port;
29import org.onlab.onos.net.PortNumber;
Madan Jampani53e44e62014-10-07 12:39:51 -070030import org.onlab.onos.net.device.DefaultDeviceDescription;
31import org.onlab.onos.net.device.DefaultPortDescription;
Yuta HIGUCHI9def0472014-10-23 15:51:10 -070032import org.onlab.onos.net.flow.CompletedBatchOperation;
Madan Jampani117aaae2014-10-23 10:04:05 -070033import org.onlab.onos.net.flow.DefaultFlowEntry;
Madan Jampani38b250d2014-10-17 11:02:38 -070034import org.onlab.onos.net.flow.DefaultFlowRule;
Yuta HIGUCHI2809bf32014-10-20 22:44:12 -070035import org.onlab.onos.net.flow.DefaultTrafficSelector;
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -070036import org.onlab.onos.net.flow.DefaultTrafficTreatment;
alshabibf6c2ede2014-10-22 23:31:50 -070037import org.onlab.onos.net.flow.FlowEntry;
Yuta HIGUCHI2fcfde92014-10-20 18:37:14 -070038import org.onlab.onos.net.flow.FlowId;
Yuta HIGUCHI9def0472014-10-23 15:51:10 -070039import org.onlab.onos.net.flow.FlowRuleBatchEntry;
40import org.onlab.onos.net.flow.FlowRuleBatchOperation;
Madan Jampani117aaae2014-10-23 10:04:05 -070041import org.onlab.onos.net.flow.StoredFlowEntry;
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -070042import org.onlab.onos.net.flow.criteria.Criteria;
43import org.onlab.onos.net.flow.criteria.Criterion;
44import org.onlab.onos.net.flow.instructions.Instructions;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070045import org.onlab.onos.net.host.DefaultHostDescription;
46import org.onlab.onos.net.host.HostDescription;
Madan Jampani2ff05592014-10-10 15:42:47 -070047import org.onlab.onos.net.link.DefaultLinkDescription;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070048import org.onlab.onos.net.provider.ProviderId;
Yuta HIGUCHI9ee60f62014-10-09 10:00:01 -070049import org.onlab.onos.store.Timestamp;
alshabib7911a052014-10-16 17:49:37 -070050import org.onlab.packet.ChassisId;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070051import org.onlab.packet.IpAddress;
52import org.onlab.packet.IpPrefix;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070053import org.onlab.packet.MacAddress;
54import org.onlab.packet.VlanId;
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070055import org.onlab.util.KryoNamespace;
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070056
Yuta HIGUCHI47c40882014-10-10 18:44:37 -070057import com.google.common.collect.ImmutableList;
58import com.google.common.collect.ImmutableMap;
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070059import com.google.common.collect.ImmutableSet;
Yuta HIGUCHI47c40882014-10-10 18:44:37 -070060
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070061public final class KryoNamespaces {
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070062
63 /**
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070064 * KryoNamespace which can serialize ON.lab misc classes.
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070065 */
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070066 public static final KryoNamespace MISC = KryoNamespace.newBuilder()
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070067 .register(IpPrefix.class, new IpPrefixSerializer())
68 .register(IpAddress.class, new IpAddressSerializer())
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070069 .register(MacAddress.class, new MacAddressSerializer())
70 .register(VlanId.class)
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070071 .build();
72
73 // TODO: Populate other classes
74 /**
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070075 * KryoNamespace which can serialize API bundle classes.
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070076 */
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070077 public static final KryoNamespace API = KryoNamespace.newBuilder()
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070078 .register(MISC)
Yuta HIGUCHI47c40882014-10-10 18:44:37 -070079 .register(ImmutableMap.class, new ImmutableMapSerializer())
80 .register(ImmutableList.class, new ImmutableListSerializer())
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -070081 .register(ImmutableSet.class, new ImmutableSetSerializer())
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070082 .register(
83 //
84 ArrayList.class,
Madan Jampani53e44e62014-10-07 12:39:51 -070085 Arrays.asList().getClass(),
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070086 HashMap.class,
alshabib3d643ec2014-10-22 18:33:00 -070087 HashSet.class,
Yuta HIGUCHI9def0472014-10-23 15:51:10 -070088 LinkedList.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070089 //
Yuta HIGUCHI47c40882014-10-10 18:44:37 -070090 //
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070091 ControllerNode.State.class,
92 Device.Type.class,
alshabib7911a052014-10-16 17:49:37 -070093 ChassisId.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070094 DefaultAnnotations.class,
95 DefaultControllerNode.class,
96 DefaultDevice.class,
Madan Jampani53e44e62014-10-07 12:39:51 -070097 DefaultDeviceDescription.class,
Madan Jampani2ff05592014-10-10 15:42:47 -070098 DefaultLinkDescription.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070099 Port.class,
Madan Jampani53e44e62014-10-07 12:39:51 -0700100 DefaultPortDescription.class,
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700101 Element.class,
Yuta HIGUCHI9ee60f62014-10-09 10:00:01 -0700102 Link.Type.class,
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700103 Timestamp.class,
104 HostId.class,
105 HostDescription.class,
Madan Jampani38b250d2014-10-17 11:02:38 -0700106 DefaultHostDescription.class,
Madan Jampani117aaae2014-10-23 10:04:05 -0700107 DefaultFlowEntry.class,
108 StoredFlowEntry.class,
Yuta HIGUCHI2fcfde92014-10-20 18:37:14 -0700109 DefaultFlowRule.class,
alshabib3d643ec2014-10-22 18:33:00 -0700110 DefaultFlowEntry.class,
alshabibf6c2ede2014-10-22 23:31:50 -0700111 FlowEntry.FlowEntryState.class,
Yuta HIGUCHI2809bf32014-10-20 22:44:12 -0700112 FlowId.class,
Yuta HIGUCHI85d58d12014-10-20 23:59:44 -0700113 DefaultTrafficSelector.class,
114 Criteria.PortCriterion.class,
115 Criteria.EthCriterion.class,
116 Criteria.EthTypeCriterion.class,
117 Criteria.IPCriterion.class,
118 Criteria.IPProtocolCriterion.class,
119 Criteria.VlanIdCriterion.class,
120 Criteria.VlanPcpCriterion.class,
121 Criteria.TcpPortCriterion.class,
122 Criterion.class,
123 Criterion.Type.class,
124 DefaultTrafficTreatment.class,
125 Instructions.DropInstruction.class,
Yuta HIGUCHI40d01772014-10-21 00:08:44 -0700126 Instructions.OutputInstruction.class,
Yuta HIGUCHI9def0472014-10-23 15:51:10 -0700127 RoleInfo.class,
128 FlowRuleBatchOperation.class,
129 CompletedBatchOperation.class,
130 FlowRuleBatchEntry.class,
131 FlowRuleBatchEntry.FlowRuleOperation.class
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700132 )
Thomas Vachuskae0f804a2014-10-27 23:40:48 -0700133 .register(DefaultApplicationId.class, new DefaultApplicationIdSerializer())
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700134 .register(URI.class, new URISerializer())
135 .register(NodeId.class, new NodeIdSerializer())
136 .register(ProviderId.class, new ProviderIdSerializer())
137 .register(DeviceId.class, new DeviceIdSerializer())
138 .register(PortNumber.class, new PortNumberSerializer())
139 .register(DefaultPort.class, new DefaultPortSerializer())
140 .register(LinkKey.class, new LinkKeySerializer())
141 .register(ConnectPoint.class, new ConnectPointSerializer())
142 .register(DefaultLink.class, new DefaultLinkSerializer())
Yuta HIGUCHIfa891c92014-10-09 15:21:40 -0700143 .register(MastershipTerm.class, new MastershipTermSerializer())
Yuta HIGUCHI5fa3dc02014-10-15 17:08:13 -0700144 .register(HostLocation.class, new HostLocationSerializer())
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700145
146 .build();
147
148
149 // not to be instantiated
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -0700150 private KryoNamespaces() {}
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -0700151}