Implemented multi-instance packet out.
We've defined a PacketStore abstraction through which outbound packets are sent. The packet store has a simple implementation (basically a no-op) and a distributed implementation on top of the cluster messaging service. Change-Id: Ib32753314fe518ef1fd67c858db744b004539938
Showing
11 changed files
with
381 additions
and
7 deletions
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.net.packet; | ||
17 | + | ||
18 | +import org.onlab.onos.event.AbstractEvent; | ||
19 | + | ||
20 | +/** | ||
21 | + * Describes a packet event. | ||
22 | + */ | ||
23 | +public class PacketEvent extends AbstractEvent<PacketEvent.Type, OutboundPacket> { | ||
24 | + | ||
25 | + /** | ||
26 | + * Type of packet events. | ||
27 | + */ | ||
28 | + public enum Type { | ||
29 | + /** | ||
30 | + * Signifies that the packet should be emitted out a local port. | ||
31 | + */ | ||
32 | + EMIT | ||
33 | + } | ||
34 | + | ||
35 | + /** | ||
36 | + * Creates an event of the given type for the specified packet. | ||
37 | + * | ||
38 | + * @param type the type of the event | ||
39 | + * @param packet the packet the event is about | ||
40 | + */ | ||
41 | + public PacketEvent(Type type, OutboundPacket packet) { | ||
42 | + super(type, packet); | ||
43 | + } | ||
44 | + | ||
45 | + /** | ||
46 | + * Creates an event of the given type for the specified packet at the given | ||
47 | + * time. | ||
48 | + * | ||
49 | + * @param type the type of the event | ||
50 | + * @param packet the packet the event is about | ||
51 | + * @param time the time of the event | ||
52 | + */ | ||
53 | + public PacketEvent(Type type, OutboundPacket packet, long time) { | ||
54 | + super(type, packet, time); | ||
55 | + } | ||
56 | +} |
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.net.packet; | ||
17 | + | ||
18 | +import org.onlab.onos.store.Store; | ||
19 | + | ||
20 | +/** | ||
21 | + * Manages routing of outbound packets. | ||
22 | + */ | ||
23 | +public interface PacketStore extends Store<PacketEvent, PacketStoreDelegate> { | ||
24 | + | ||
25 | + /** | ||
26 | + * Decides which instance should emit the packet and forwards the packet to | ||
27 | + * that instance. The relevant PacketManager is notified via the | ||
28 | + * PacketStoreDelegate that it should emit the packet. | ||
29 | + * | ||
30 | + * @param packet the packet to emit | ||
31 | + */ | ||
32 | + void emit(OutboundPacket packet); | ||
33 | + | ||
34 | +} |
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.net.packet; | ||
17 | + | ||
18 | +import org.onlab.onos.store.StoreDelegate; | ||
19 | + | ||
20 | +/** | ||
21 | + * Packet store delegate abstraction. | ||
22 | + */ | ||
23 | +public interface PacketStoreDelegate extends StoreDelegate<PacketEvent> { | ||
24 | +} |
... | @@ -19,7 +19,7 @@ import static com.google.common.base.Preconditions.checkNotNull; | ... | @@ -19,7 +19,7 @@ import static com.google.common.base.Preconditions.checkNotNull; |
19 | import static org.slf4j.LoggerFactory.getLogger; | 19 | import static org.slf4j.LoggerFactory.getLogger; |
20 | 20 | ||
21 | import java.util.Map; | 21 | import java.util.Map; |
22 | -import java.util.TreeMap; | 22 | +import java.util.concurrent.ConcurrentHashMap; |
23 | 23 | ||
24 | import org.apache.felix.scr.annotations.Activate; | 24 | import org.apache.felix.scr.annotations.Activate; |
25 | import org.apache.felix.scr.annotations.Component; | 25 | import org.apache.felix.scr.annotations.Component; |
... | @@ -31,11 +31,14 @@ import org.onlab.onos.net.Device; | ... | @@ -31,11 +31,14 @@ import org.onlab.onos.net.Device; |
31 | import org.onlab.onos.net.device.DeviceService; | 31 | import org.onlab.onos.net.device.DeviceService; |
32 | import org.onlab.onos.net.packet.OutboundPacket; | 32 | import org.onlab.onos.net.packet.OutboundPacket; |
33 | import org.onlab.onos.net.packet.PacketContext; | 33 | import org.onlab.onos.net.packet.PacketContext; |
34 | +import org.onlab.onos.net.packet.PacketEvent; | ||
34 | import org.onlab.onos.net.packet.PacketProcessor; | 35 | import org.onlab.onos.net.packet.PacketProcessor; |
35 | import org.onlab.onos.net.packet.PacketProvider; | 36 | import org.onlab.onos.net.packet.PacketProvider; |
36 | import org.onlab.onos.net.packet.PacketProviderRegistry; | 37 | import org.onlab.onos.net.packet.PacketProviderRegistry; |
37 | import org.onlab.onos.net.packet.PacketProviderService; | 38 | import org.onlab.onos.net.packet.PacketProviderService; |
38 | import org.onlab.onos.net.packet.PacketService; | 39 | import org.onlab.onos.net.packet.PacketService; |
40 | +import org.onlab.onos.net.packet.PacketStore; | ||
41 | +import org.onlab.onos.net.packet.PacketStoreDelegate; | ||
39 | import org.onlab.onos.net.provider.AbstractProviderRegistry; | 42 | import org.onlab.onos.net.provider.AbstractProviderRegistry; |
40 | import org.onlab.onos.net.provider.AbstractProviderService; | 43 | import org.onlab.onos.net.provider.AbstractProviderService; |
41 | import org.slf4j.Logger; | 44 | import org.slf4j.Logger; |
... | @@ -51,18 +54,25 @@ implements PacketService, PacketProviderRegistry { | ... | @@ -51,18 +54,25 @@ implements PacketService, PacketProviderRegistry { |
51 | 54 | ||
52 | private final Logger log = getLogger(getClass()); | 55 | private final Logger log = getLogger(getClass()); |
53 | 56 | ||
57 | + private final PacketStoreDelegate delegate = new InternalStoreDelegate(); | ||
58 | + | ||
54 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 59 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
55 | private DeviceService deviceService; | 60 | private DeviceService deviceService; |
56 | 61 | ||
57 | - private final Map<Integer, PacketProcessor> processors = new TreeMap<>(); | 62 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
63 | + private PacketStore store; | ||
64 | + | ||
65 | + private final Map<Integer, PacketProcessor> processors = new ConcurrentHashMap<>(); | ||
58 | 66 | ||
59 | @Activate | 67 | @Activate |
60 | public void activate() { | 68 | public void activate() { |
69 | + store.setDelegate(delegate); | ||
61 | log.info("Started"); | 70 | log.info("Started"); |
62 | } | 71 | } |
63 | 72 | ||
64 | @Deactivate | 73 | @Deactivate |
65 | public void deactivate() { | 74 | public void deactivate() { |
75 | + store.unsetDelegate(delegate); | ||
66 | log.info("Stopped"); | 76 | log.info("Stopped"); |
67 | } | 77 | } |
68 | 78 | ||
... | @@ -81,6 +91,11 @@ implements PacketService, PacketProviderRegistry { | ... | @@ -81,6 +91,11 @@ implements PacketService, PacketProviderRegistry { |
81 | @Override | 91 | @Override |
82 | public void emit(OutboundPacket packet) { | 92 | public void emit(OutboundPacket packet) { |
83 | checkNotNull(packet, "Packet cannot be null"); | 93 | checkNotNull(packet, "Packet cannot be null"); |
94 | + | ||
95 | + store.emit(packet); | ||
96 | + } | ||
97 | + | ||
98 | + private void localEmit(OutboundPacket packet) { | ||
84 | final Device device = deviceService.getDevice(packet.sendThrough()); | 99 | final Device device = deviceService.getDevice(packet.sendThrough()); |
85 | final PacketProvider packetProvider = getProvider(device.providerId()); | 100 | final PacketProvider packetProvider = getProvider(device.providerId()); |
86 | if (packetProvider != null) { | 101 | if (packetProvider != null) { |
... | @@ -110,4 +125,16 @@ implements PacketService, PacketProviderRegistry { | ... | @@ -110,4 +125,16 @@ implements PacketService, PacketProviderRegistry { |
110 | } | 125 | } |
111 | 126 | ||
112 | } | 127 | } |
128 | + | ||
129 | + /** | ||
130 | + * Internal callback from the packet store. | ||
131 | + */ | ||
132 | + private class InternalStoreDelegate | ||
133 | + implements PacketStoreDelegate { | ||
134 | + @Override | ||
135 | + public void notify(PacketEvent event) { | ||
136 | + localEmit(event.subject()); | ||
137 | + } | ||
138 | + } | ||
139 | + | ||
113 | } | 140 | } | ... | ... |
core/store/dist/src/main/java/org/onlab/onos/store/packet/impl/DistributedPacketStore.java
0 → 100644
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.packet.impl; | ||
17 | + | ||
18 | +import static org.slf4j.LoggerFactory.getLogger; | ||
19 | + | ||
20 | +import java.io.IOException; | ||
21 | + | ||
22 | +import org.apache.felix.scr.annotations.Activate; | ||
23 | +import org.apache.felix.scr.annotations.Component; | ||
24 | +import org.apache.felix.scr.annotations.Deactivate; | ||
25 | +import org.apache.felix.scr.annotations.Reference; | ||
26 | +import org.apache.felix.scr.annotations.ReferenceCardinality; | ||
27 | +import org.apache.felix.scr.annotations.Service; | ||
28 | +import org.onlab.onos.cluster.ClusterService; | ||
29 | +import org.onlab.onos.cluster.NodeId; | ||
30 | +import org.onlab.onos.mastership.MastershipService; | ||
31 | +import org.onlab.onos.net.packet.OutboundPacket; | ||
32 | +import org.onlab.onos.net.packet.PacketEvent; | ||
33 | +import org.onlab.onos.net.packet.PacketEvent.Type; | ||
34 | +import org.onlab.onos.net.packet.PacketStore; | ||
35 | +import org.onlab.onos.net.packet.PacketStoreDelegate; | ||
36 | +import org.onlab.onos.store.AbstractStore; | ||
37 | +import org.onlab.onos.store.cluster.messaging.ClusterCommunicationService; | ||
38 | +import org.onlab.onos.store.cluster.messaging.ClusterMessage; | ||
39 | +import org.onlab.onos.store.cluster.messaging.ClusterMessageHandler; | ||
40 | +import org.onlab.onos.store.cluster.messaging.MessageSubject; | ||
41 | +import org.onlab.onos.store.serializers.KryoNamespaces; | ||
42 | +import org.onlab.onos.store.serializers.KryoSerializer; | ||
43 | +import org.onlab.util.KryoNamespace; | ||
44 | +import org.slf4j.Logger; | ||
45 | + | ||
46 | +/** | ||
47 | + * Distributed packet store implementation allowing packets to be sent to | ||
48 | + * remote instances. | ||
49 | + */ | ||
50 | +@Component(immediate = true) | ||
51 | +@Service | ||
52 | +public class DistributedPacketStore | ||
53 | + extends AbstractStore<PacketEvent, PacketStoreDelegate> | ||
54 | + implements PacketStore { | ||
55 | + | ||
56 | + private final Logger log = getLogger(getClass()); | ||
57 | + | ||
58 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
59 | + private MastershipService mastershipService; | ||
60 | + | ||
61 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
62 | + private ClusterService clusterService; | ||
63 | + | ||
64 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
65 | + private ClusterCommunicationService communicationService; | ||
66 | + | ||
67 | + private static final MessageSubject PACKET_OUT_SUBJECT = | ||
68 | + new MessageSubject("packet-out"); | ||
69 | + | ||
70 | + private static final KryoSerializer SERIALIZER = new KryoSerializer() { | ||
71 | + @Override | ||
72 | + protected void setupKryoPool() { | ||
73 | + serializerPool = KryoNamespace.newBuilder() | ||
74 | + .register(KryoNamespaces.API) | ||
75 | + .build() | ||
76 | + .populate(1); | ||
77 | + } | ||
78 | + }; | ||
79 | + | ||
80 | + @Activate | ||
81 | + public void activate() { | ||
82 | + log.info("Started"); | ||
83 | + | ||
84 | + communicationService.addSubscriber( | ||
85 | + PACKET_OUT_SUBJECT, new InternalClusterMessageHandler()); | ||
86 | + } | ||
87 | + | ||
88 | + @Deactivate | ||
89 | + public void deactivate() { | ||
90 | + log.info("Stopped"); | ||
91 | + } | ||
92 | + | ||
93 | + @Override | ||
94 | + public void emit(OutboundPacket packet) { | ||
95 | + NodeId myId = clusterService.getLocalNode().id(); | ||
96 | + NodeId master = mastershipService.getMasterFor(packet.sendThrough()); | ||
97 | + | ||
98 | + if (myId.equals(master)) { | ||
99 | + notifyDelegate(new PacketEvent(Type.EMIT, packet)); | ||
100 | + return; | ||
101 | + } | ||
102 | + | ||
103 | + try { | ||
104 | + communicationService.unicast(new ClusterMessage( | ||
105 | + myId, PACKET_OUT_SUBJECT, SERIALIZER.encode(packet)), master); | ||
106 | + } catch (IOException e) { | ||
107 | + log.warn("Failed to send packet-out to {}", master); | ||
108 | + } | ||
109 | + } | ||
110 | + | ||
111 | + /** | ||
112 | + * Handles incoming cluster messages. | ||
113 | + */ | ||
114 | + private class InternalClusterMessageHandler implements ClusterMessageHandler { | ||
115 | + @Override | ||
116 | + public void handle(ClusterMessage message) { | ||
117 | + if (!message.subject().equals(PACKET_OUT_SUBJECT)) { | ||
118 | + log.warn("Received message with wrong subject: {}", message); | ||
119 | + } | ||
120 | + | ||
121 | + OutboundPacket packet = SERIALIZER.decode(message.payload()); | ||
122 | + notifyDelegate(new PacketEvent(Type.EMIT, packet)); | ||
123 | + } | ||
124 | + } | ||
125 | + | ||
126 | +} |
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 java.nio.ByteBuffer; | ||
19 | + | ||
20 | +import org.onlab.onos.net.DeviceId; | ||
21 | +import org.onlab.onos.net.flow.TrafficTreatment; | ||
22 | +import org.onlab.onos.net.packet.DefaultOutboundPacket; | ||
23 | + | ||
24 | +import com.esotericsoftware.kryo.Kryo; | ||
25 | +import com.esotericsoftware.kryo.Serializer; | ||
26 | +import com.esotericsoftware.kryo.io.Input; | ||
27 | +import com.esotericsoftware.kryo.io.Output; | ||
28 | + | ||
29 | +/** | ||
30 | + * Serializer for a default outbound packet. | ||
31 | + */ | ||
32 | +public class DefaultOutboundPacketSerializer extends Serializer<DefaultOutboundPacket> { | ||
33 | + | ||
34 | + /** | ||
35 | + * Creates {@link DefaultOutboundPacket} serializer instance. | ||
36 | + */ | ||
37 | + public DefaultOutboundPacketSerializer() { | ||
38 | + // non-null, immutable | ||
39 | + super(false, true); | ||
40 | + } | ||
41 | + | ||
42 | + @Override | ||
43 | + public DefaultOutboundPacket read(Kryo kryo, Input input, | ||
44 | + Class<DefaultOutboundPacket> type) { | ||
45 | + DeviceId sendThrough = (DeviceId) kryo.readClassAndObject(input); | ||
46 | + TrafficTreatment treatment = (TrafficTreatment) kryo.readClassAndObject(input); | ||
47 | + byte[] data = (byte[]) kryo.readClassAndObject(input); | ||
48 | + return new DefaultOutboundPacket(sendThrough, treatment, ByteBuffer.wrap(data)); | ||
49 | + } | ||
50 | + | ||
51 | + @Override | ||
52 | + public void write(Kryo kryo, Output output, DefaultOutboundPacket object) { | ||
53 | + kryo.writeClassAndObject(output, object.sendThrough()); | ||
54 | + kryo.writeClassAndObject(output, object.treatment()); | ||
55 | + kryo.writeClassAndObject(output, object.data().array()); | ||
56 | + } | ||
57 | + | ||
58 | +} |
... | @@ -74,6 +74,7 @@ import org.onlab.onos.net.intent.MultiPointToSinglePointIntent; | ... | @@ -74,6 +74,7 @@ import org.onlab.onos.net.intent.MultiPointToSinglePointIntent; |
74 | import org.onlab.onos.net.intent.PathIntent; | 74 | import org.onlab.onos.net.intent.PathIntent; |
75 | import org.onlab.onos.net.intent.PointToPointIntent; | 75 | import org.onlab.onos.net.intent.PointToPointIntent; |
76 | import org.onlab.onos.net.link.DefaultLinkDescription; | 76 | import org.onlab.onos.net.link.DefaultLinkDescription; |
77 | +import org.onlab.onos.net.packet.DefaultOutboundPacket; | ||
77 | import org.onlab.onos.net.provider.ProviderId; | 78 | import org.onlab.onos.net.provider.ProviderId; |
78 | import org.onlab.onos.store.Timestamp; | 79 | import org.onlab.onos.store.Timestamp; |
79 | import org.onlab.packet.ChassisId; | 80 | import org.onlab.packet.ChassisId; |
... | @@ -115,6 +116,7 @@ public final class KryoNamespaces { | ... | @@ -115,6 +116,7 @@ public final class KryoNamespaces { |
115 | HashMap.class, | 116 | HashMap.class, |
116 | HashSet.class, | 117 | HashSet.class, |
117 | LinkedList.class, | 118 | LinkedList.class, |
119 | + byte[].class, | ||
118 | // | 120 | // |
119 | // | 121 | // |
120 | ControllerNode.State.class, | 122 | ControllerNode.State.class, |
... | @@ -194,6 +196,7 @@ public final class KryoNamespaces { | ... | @@ -194,6 +196,7 @@ public final class KryoNamespaces { |
194 | .register(DefaultLink.class, new DefaultLinkSerializer()) | 196 | .register(DefaultLink.class, new DefaultLinkSerializer()) |
195 | .register(MastershipTerm.class, new MastershipTermSerializer()) | 197 | .register(MastershipTerm.class, new MastershipTermSerializer()) |
196 | .register(HostLocation.class, new HostLocationSerializer()) | 198 | .register(HostLocation.class, new HostLocationSerializer()) |
199 | + .register(DefaultOutboundPacket.class, new DefaultOutboundPacketSerializer()) | ||
197 | 200 | ||
198 | .build(); | 201 | .build(); |
199 | 202 | ... | ... |
... | @@ -15,9 +15,10 @@ | ... | @@ -15,9 +15,10 @@ |
15 | */ | 15 | */ |
16 | package org.onlab.onos.store.serializers; | 16 | package org.onlab.onos.store.serializers; |
17 | 17 | ||
18 | -import org.onlab.util.KryoNamespace; | ||
19 | import java.nio.ByteBuffer; | 18 | import java.nio.ByteBuffer; |
20 | 19 | ||
20 | +import org.onlab.util.KryoNamespace; | ||
21 | + | ||
21 | /** | 22 | /** |
22 | * StoreSerializer implementation using Kryo. | 23 | * StoreSerializer implementation using Kryo. |
23 | */ | 24 | */ |
... | @@ -30,7 +31,7 @@ public class KryoSerializer implements StoreSerializer { | ... | @@ -30,7 +31,7 @@ public class KryoSerializer implements StoreSerializer { |
30 | } | 31 | } |
31 | 32 | ||
32 | /** | 33 | /** |
33 | - * Sets up the common serialzers pool. | 34 | + * Sets up the common serializers pool. |
34 | */ | 35 | */ |
35 | protected void setupKryoPool() { | 36 | protected void setupKryoPool() { |
36 | serializerPool = KryoNamespace.newBuilder() | 37 | serializerPool = KryoNamespace.newBuilder() | ... | ... |
core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimplePacketStore.java
0 → 100644
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.trivial.impl; | ||
17 | + | ||
18 | +import org.apache.felix.scr.annotations.Component; | ||
19 | +import org.apache.felix.scr.annotations.Service; | ||
20 | +import org.onlab.onos.net.packet.OutboundPacket; | ||
21 | +import org.onlab.onos.net.packet.PacketEvent; | ||
22 | +import org.onlab.onos.net.packet.PacketEvent.Type; | ||
23 | +import org.onlab.onos.net.packet.PacketStore; | ||
24 | +import org.onlab.onos.net.packet.PacketStoreDelegate; | ||
25 | +import org.onlab.onos.store.AbstractStore; | ||
26 | + | ||
27 | +/** | ||
28 | + * Simple single instance implementation of the packet store. | ||
29 | + */ | ||
30 | +@Component(immediate = true) | ||
31 | +@Service | ||
32 | +public class SimplePacketStore | ||
33 | + extends AbstractStore<PacketEvent, PacketStoreDelegate> | ||
34 | + implements PacketStore { | ||
35 | + | ||
36 | + @Override | ||
37 | + public void emit(OutboundPacket packet) { | ||
38 | + notifyDelegate(new PacketEvent(Type.EMIT, packet)); | ||
39 | + } | ||
40 | + | ||
41 | +} |
... | @@ -115,10 +115,10 @@ public final class KryoNamespace implements KryoFactory { | ... | @@ -115,10 +115,10 @@ public final class KryoNamespace implements KryoFactory { |
115 | /** | 115 | /** |
116 | * Creates a Kryo instance pool. | 116 | * Creates a Kryo instance pool. |
117 | * | 117 | * |
118 | - * @param registerdTypes types to register | 118 | + * @param registeredTypes types to register |
119 | */ | 119 | */ |
120 | - private KryoNamespace(final List<Pair<Class<?>, Serializer<?>>> registerdTypes) { | 120 | + private KryoNamespace(final List<Pair<Class<?>, Serializer<?>>> registeredTypes) { |
121 | - this.registeredTypes = ImmutableList.copyOf(registerdTypes); | 121 | + this.registeredTypes = ImmutableList.copyOf(registeredTypes); |
122 | // always true for now | 122 | // always true for now |
123 | this.registrationRequired = true; | 123 | this.registrationRequired = true; |
124 | } | 124 | } | ... | ... |
-
Please register or login to post a comment