Pavlin Radoslavov

Added Kryo serializers for Ip4Address, Ip6Address, Ip4Prefix, Ip6Prefix

Change-Id: Ib014bbe40b3df5c778e2d16d7b65b1cb62944e1c
1 +/*
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 + */
16 +package org.onlab.onos.store.serializers;
17 +
18 +import org.onlab.packet.Ip4Address;
19 +import com.esotericsoftware.kryo.Kryo;
20 +import com.esotericsoftware.kryo.Serializer;
21 +import com.esotericsoftware.kryo.io.Input;
22 +import com.esotericsoftware.kryo.io.Output;
23 +
24 +/**
25 + * Kryo Serializer for {@link Ip4Address}.
26 + */
27 +public class Ip4AddressSerializer extends Serializer<Ip4Address> {
28 +
29 + /**
30 + * Creates {@link Ip4Address} serializer instance.
31 + */
32 + public Ip4AddressSerializer() {
33 + // non-null, immutable
34 + super(false, true);
35 + }
36 +
37 + @Override
38 + public void write(Kryo kryo, Output output, Ip4Address object) {
39 + byte[] octs = object.toOctets();
40 + // TODO: Writing (and reading) the number of octets is redundant:
41 + // It is always Ip4Address.BYTE_LENGTH
42 + output.writeInt(octs.length);
43 + output.writeBytes(octs);
44 + }
45 +
46 + @Override
47 + public Ip4Address read(Kryo kryo, Input input, Class<Ip4Address> type) {
48 + final int octLen = input.readInt();
49 + byte[] octs = new byte[octLen];
50 + input.readBytes(octs);
51 + return Ip4Address.valueOf(octs);
52 + }
53 +}
1 +/*
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 + */
16 +package org.onlab.onos.store.serializers;
17 +
18 +import org.onlab.packet.Ip4Prefix;
19 +
20 +import com.esotericsoftware.kryo.Kryo;
21 +import com.esotericsoftware.kryo.Serializer;
22 +import com.esotericsoftware.kryo.io.Input;
23 +import com.esotericsoftware.kryo.io.Output;
24 +
25 +/**
26 + * Kryo Serializer for {@link Ip4Prefix}.
27 + */
28 +public final class Ip4PrefixSerializer extends Serializer<Ip4Prefix> {
29 +
30 + /**
31 + * Creates {@link Ip4Prefix} serializer instance.
32 + */
33 + public Ip4PrefixSerializer() {
34 + // non-null, immutable
35 + super(false, true);
36 + }
37 +
38 + @Override
39 + public void write(Kryo kryo, Output output,
40 + Ip4Prefix object) {
41 + byte[] octs = object.address().toOctets();
42 + // TODO: Writing (and reading) the number of octets is redundant:
43 + // It is always Ip6Address.BYTE_LENGTH
44 + output.writeInt(octs.length);
45 + output.writeBytes(octs);
46 + output.writeInt(object.prefixLength());
47 + }
48 +
49 + @Override
50 + public Ip4Prefix read(Kryo kryo, Input input,
51 + Class<Ip4Prefix> type) {
52 + int octLen = input.readInt();
53 + byte[] octs = new byte[octLen];
54 + input.readBytes(octs);
55 + int prefLen = input.readInt();
56 + return Ip4Prefix.valueOf(octs, prefLen);
57 + }
58 +}
1 +/*
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 + */
16 +package org.onlab.onos.store.serializers;
17 +
18 +import org.onlab.packet.Ip6Address;
19 +import com.esotericsoftware.kryo.Kryo;
20 +import com.esotericsoftware.kryo.Serializer;
21 +import com.esotericsoftware.kryo.io.Input;
22 +import com.esotericsoftware.kryo.io.Output;
23 +
24 +/**
25 + * Kryo Serializer for {@link Ip6Address}.
26 + */
27 +public class Ip6AddressSerializer extends Serializer<Ip6Address> {
28 +
29 + /**
30 + * Creates {@link Ip6Address} serializer instance.
31 + */
32 + public Ip6AddressSerializer() {
33 + // non-null, immutable
34 + super(false, true);
35 + }
36 +
37 + @Override
38 + public void write(Kryo kryo, Output output, Ip6Address object) {
39 + byte[] octs = object.toOctets();
40 + // TODO: Writing (and reading) the number of octets is redundant:
41 + // It is always Ip6Address.BYTE_LENGTH
42 + output.writeInt(octs.length);
43 + output.writeBytes(octs);
44 + }
45 +
46 + @Override
47 + public Ip6Address read(Kryo kryo, Input input, Class<Ip6Address> type) {
48 + final int octLen = input.readInt();
49 + byte[] octs = new byte[octLen];
50 + input.readBytes(octs);
51 + return Ip6Address.valueOf(octs);
52 + }
53 +}
1 +/*
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 + */
16 +package org.onlab.onos.store.serializers;
17 +
18 +import org.onlab.packet.Ip6Prefix;
19 +
20 +import com.esotericsoftware.kryo.Kryo;
21 +import com.esotericsoftware.kryo.Serializer;
22 +import com.esotericsoftware.kryo.io.Input;
23 +import com.esotericsoftware.kryo.io.Output;
24 +
25 +/**
26 + * Kryo Serializer for {@link Ip6Prefix}.
27 + */
28 +public final class Ip6PrefixSerializer extends Serializer<Ip6Prefix> {
29 +
30 + /**
31 + * Creates {@link Ip6Prefix} serializer instance.
32 + */
33 + public Ip6PrefixSerializer() {
34 + // non-null, immutable
35 + super(false, true);
36 + }
37 +
38 + @Override
39 + public void write(Kryo kryo, Output output,
40 + Ip6Prefix object) {
41 + byte[] octs = object.address().toOctets();
42 + // TODO: Writing (and reading) the number of octets is redundant:
43 + // It is always Ip6Address.BYTE_LENGTH
44 + output.writeInt(octs.length);
45 + output.writeBytes(octs);
46 + output.writeInt(object.prefixLength());
47 + }
48 +
49 + @Override
50 + public Ip6Prefix read(Kryo kryo, Input input,
51 + Class<Ip6Prefix> type) {
52 + int octLen = input.readInt();
53 + byte[] octs = new byte[octLen];
54 + input.readBytes(octs);
55 + int prefLen = input.readInt();
56 + return Ip6Prefix.valueOf(octs, prefLen);
57 + }
58 +}
...@@ -88,7 +88,11 @@ import org.onlab.onos.net.resource.LinkResourceRequest; ...@@ -88,7 +88,11 @@ import org.onlab.onos.net.resource.LinkResourceRequest;
88 import org.onlab.onos.store.Timestamp; 88 import org.onlab.onos.store.Timestamp;
89 import org.onlab.packet.ChassisId; 89 import org.onlab.packet.ChassisId;
90 import org.onlab.packet.IpAddress; 90 import org.onlab.packet.IpAddress;
91 +import org.onlab.packet.Ip4Address;
92 +import org.onlab.packet.Ip6Address;
91 import org.onlab.packet.IpPrefix; 93 import org.onlab.packet.IpPrefix;
94 +import org.onlab.packet.Ip4Prefix;
95 +import org.onlab.packet.Ip6Prefix;
92 import org.onlab.packet.MacAddress; 96 import org.onlab.packet.MacAddress;
93 import org.onlab.packet.VlanId; 97 import org.onlab.packet.VlanId;
94 import org.onlab.util.KryoNamespace; 98 import org.onlab.util.KryoNamespace;
...@@ -104,7 +108,11 @@ public final class KryoNamespaces { ...@@ -104,7 +108,11 @@ public final class KryoNamespaces {
104 */ 108 */
105 public static final KryoNamespace MISC = KryoNamespace.newBuilder() 109 public static final KryoNamespace MISC = KryoNamespace.newBuilder()
106 .register(IpPrefix.class, new IpPrefixSerializer()) 110 .register(IpPrefix.class, new IpPrefixSerializer())
111 + .register(Ip4Prefix.class, new Ip4PrefixSerializer())
112 + .register(Ip6Prefix.class, new Ip6PrefixSerializer())
107 .register(IpAddress.class, new IpAddressSerializer()) 113 .register(IpAddress.class, new IpAddressSerializer())
114 + .register(Ip4Address.class, new Ip4AddressSerializer())
115 + .register(Ip6Address.class, new Ip6AddressSerializer())
108 .register(MacAddress.class, new MacAddressSerializer()) 116 .register(MacAddress.class, new MacAddressSerializer())
109 .register(VlanId.class) 117 .register(VlanId.class)
110 .build(); 118 .build();
......
...@@ -43,7 +43,11 @@ import org.onlab.onos.net.flow.FlowId; ...@@ -43,7 +43,11 @@ import org.onlab.onos.net.flow.FlowId;
43 import org.onlab.onos.net.provider.ProviderId; 43 import org.onlab.onos.net.provider.ProviderId;
44 import org.onlab.packet.ChassisId; 44 import org.onlab.packet.ChassisId;
45 import org.onlab.packet.IpAddress; 45 import org.onlab.packet.IpAddress;
46 +import org.onlab.packet.Ip4Address;
47 +import org.onlab.packet.Ip6Address;
46 import org.onlab.packet.IpPrefix; 48 import org.onlab.packet.IpPrefix;
49 +import org.onlab.packet.Ip4Prefix;
50 +import org.onlab.packet.Ip6Prefix;
47 import org.onlab.packet.MacAddress; 51 import org.onlab.packet.MacAddress;
48 import org.onlab.util.KryoNamespace; 52 import org.onlab.util.KryoNamespace;
49 53
...@@ -168,11 +172,31 @@ public class KryoSerializerTest { ...@@ -168,11 +172,31 @@ public class KryoSerializerTest {
168 } 172 }
169 173
170 @Test 174 @Test
175 + public void testIp4Prefix() {
176 + testSerialized(Ip4Prefix.valueOf("192.168.0.1/24"));
177 + }
178 +
179 + @Test
180 + public void testIp6Prefix() {
181 + testSerialized(Ip6Prefix.valueOf("1111:2222::/120"));
182 + }
183 +
184 + @Test
171 public void testIpAddress() { 185 public void testIpAddress() {
172 testSerialized(IpAddress.valueOf("192.168.0.1")); 186 testSerialized(IpAddress.valueOf("192.168.0.1"));
173 } 187 }
174 188
175 @Test 189 @Test
190 + public void testIp4Address() {
191 + testSerialized(Ip4Address.valueOf("192.168.0.1"));
192 + }
193 +
194 + @Test
195 + public void testIp6Address() {
196 + testSerialized(Ip6Address.valueOf("1111:2222::"));
197 + }
198 +
199 + @Test
176 public void testMacAddress() { 200 public void testMacAddress() {
177 testSerialized(MacAddress.valueOf("12:34:56:78:90:ab")); 201 testSerialized(MacAddress.valueOf("12:34:56:78:90:ab"));
178 } 202 }
......