alshabib

add ReactivePacketProcessor and SimplePacketManager

1 +package org.onlab.onos.net.trivial.packet.impl;
2 +
3 +import static org.slf4j.LoggerFactory.getLogger;
4 +
5 +import org.onlab.onos.net.packet.PacketContext;
6 +import org.onlab.onos.net.packet.PacketProcessor;
7 +import org.slf4j.Logger;
8 +
9 +public class ReactivePacketProcessor implements PacketProcessor {
10 +
11 + private final Logger log = getLogger(getClass());
12 +
13 + @Override
14 + public void process(PacketContext context) {
15 + log.info("Packet reveived {}", context.inPacket());
16 + }
17 +
18 +}
1 +package org.onlab.onos.net.trivial.packet.impl;
2 +
3 +import static org.slf4j.LoggerFactory.getLogger;
4 +
5 +import java.util.ArrayList;
6 +
7 +import org.apache.felix.scr.annotations.Activate;
8 +import org.apache.felix.scr.annotations.Component;
9 +import org.apache.felix.scr.annotations.Deactivate;
10 +import org.apache.felix.scr.annotations.Reference;
11 +import org.apache.felix.scr.annotations.ReferenceCardinality;
12 +import org.apache.felix.scr.annotations.Service;
13 +import org.onlab.onos.net.Device;
14 +import org.onlab.onos.net.device.DeviceService;
15 +import org.onlab.onos.net.packet.OutboundPacket;
16 +import org.onlab.onos.net.packet.PacketContext;
17 +import org.onlab.onos.net.packet.PacketProcessor;
18 +import org.onlab.onos.net.packet.PacketProvider;
19 +import org.onlab.onos.net.packet.PacketProviderRegistry;
20 +import org.onlab.onos.net.packet.PacketProviderService;
21 +import org.onlab.onos.net.packet.PacketService;
22 +import org.onlab.onos.net.provider.AbstractProviderRegistry;
23 +import org.onlab.onos.net.provider.AbstractProviderService;
24 +import org.slf4j.Logger;
25 +
26 +
27 +/**
28 + * Provides a basic implementation of the packet SB & NB APIs.
29 + *
30 + */
31 +@Component(immediate = true)
32 +@Service
33 +public class SimplePacketManager
34 +extends AbstractProviderRegistry<PacketProvider, PacketProviderService>
35 +implements PacketService, PacketProviderRegistry {
36 +
37 + private final Logger log = getLogger(getClass());
38 +
39 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
40 + private DeviceService deviceService;
41 +
42 + private final ArrayList<PacketProcessor> processors = new ArrayList<>();
43 +
44 + private final PacketProcessor reactiveProcessor = new ReactivePacketProcessor();
45 +
46 + @Activate
47 + public void activate() {
48 + addProcessor(reactiveProcessor, PacketProcessor.ADVISOR_MAX + 1);
49 + log.info("Started");
50 + }
51 +
52 + @Deactivate
53 + public void deactivate() {
54 + removeProcessor(reactiveProcessor);
55 + log.info("Stopped");
56 + }
57 +
58 + @Override
59 + public void addProcessor(PacketProcessor processor, int priority) {
60 + processors.add(priority, processor);
61 + }
62 +
63 + @Override
64 + public void removeProcessor(PacketProcessor processor) {
65 + processors.remove(processor);
66 + }
67 +
68 + @Override
69 + public void emit(OutboundPacket packet) {
70 + final Device device = deviceService.getDevice(packet.sendThrough());
71 + final PacketProvider packetProvider = getProvider(device.providerId());
72 + packetProvider.emit(packet);
73 + }
74 +
75 + @Override
76 + protected PacketProviderService createProviderService(
77 + PacketProvider provider) {
78 + return new InternalPacketProviderService(provider);
79 + }
80 +
81 + // Personalized link provider service issued to the supplied provider.
82 + private class InternalPacketProviderService
83 + extends AbstractProviderService<PacketProvider>
84 + implements PacketProviderService {
85 +
86 + protected InternalPacketProviderService(PacketProvider provider) {
87 + super(provider);
88 + }
89 +
90 + @Override
91 + public void processPacket(PacketContext context) {
92 + for (PacketProcessor processor : processors) {
93 + processor.process(context);
94 + }
95 + }
96 +
97 + }
98 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -102,7 +102,7 @@ public class LinkDiscovery implements TimerTask { ...@@ -102,7 +102,7 @@ public class LinkDiscovery implements TimerTask {
102 this.sw = sw; 102 this.sw = sw;
103 this.ofFactory = sw.factory(); 103 this.ofFactory = sw.factory();
104 this.ctrl = ctrl; 104 this.ctrl = ctrl;
105 - this.probeRate = 1000; 105 + this.probeRate = 3000;
106 this.linkProvider = providerService; 106 this.linkProvider = providerService;
107 this.slowPorts = Collections.synchronizedSet(new HashSet<Integer>()); 107 this.slowPorts = Collections.synchronizedSet(new HashSet<Integer>());
108 this.fastPorts = Collections.synchronizedSet(new HashSet<Integer>()); 108 this.fastPorts = Collections.synchronizedSet(new HashSet<Integer>());
...@@ -129,7 +129,7 @@ public class LinkDiscovery implements TimerTask { ...@@ -129,7 +129,7 @@ public class LinkDiscovery implements TimerTask {
129 addPort(port); 129 addPort(port);
130 } 130 }
131 } 131 }
132 - timeout = Timer.getTimer().newTimeout(this, this.probeRate, 132 + timeout = Timer.getTimer().newTimeout(this, 0,
133 TimeUnit.MILLISECONDS); 133 TimeUnit.MILLISECONDS);
134 this.log.debug("Started discovery manager for switch {}", 134 this.log.debug("Started discovery manager for switch {}",
135 sw.getId()); 135 sw.getId());
......