From 7674db41105df49e96c3fddeeb56fc7c1f9a30a3 Mon Sep 17 00:00:00 2001 From: alshabib Date: Fri, 12 Sep 2014 23:40:46 -0700 Subject: [PATCH 1/2] add ReactivePacketProcessor and SimplePacketManager --- .../packet/impl/ReactivePacketProcessor.java | 18 ++++ .../packet/impl/SimplePacketManager.java | 98 +++++++++++++++++++ .../provider/of/link/impl/LinkDiscovery.java | 4 +- 3 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/ReactivePacketProcessor.java create mode 100644 core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/ReactivePacketProcessor.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/ReactivePacketProcessor.java new file mode 100644 index 0000000000..5e0a39bf7b --- /dev/null +++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/ReactivePacketProcessor.java @@ -0,0 +1,18 @@ +package org.onlab.onos.net.trivial.packet.impl; + +import static org.slf4j.LoggerFactory.getLogger; + +import org.onlab.onos.net.packet.PacketContext; +import org.onlab.onos.net.packet.PacketProcessor; +import org.slf4j.Logger; + +public class ReactivePacketProcessor implements PacketProcessor { + + private final Logger log = getLogger(getClass()); + + @Override + public void process(PacketContext context) { + log.info("Packet reveived {}", context.inPacket()); + } + +} diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java new file mode 100644 index 0000000000..cf324f475c --- /dev/null +++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java @@ -0,0 +1,98 @@ +package org.onlab.onos.net.trivial.packet.impl; + +import static org.slf4j.LoggerFactory.getLogger; + +import java.util.ArrayList; + +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Deactivate; +import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.ReferenceCardinality; +import org.apache.felix.scr.annotations.Service; +import org.onlab.onos.net.Device; +import org.onlab.onos.net.device.DeviceService; +import org.onlab.onos.net.packet.OutboundPacket; +import org.onlab.onos.net.packet.PacketContext; +import org.onlab.onos.net.packet.PacketProcessor; +import org.onlab.onos.net.packet.PacketProvider; +import org.onlab.onos.net.packet.PacketProviderRegistry; +import org.onlab.onos.net.packet.PacketProviderService; +import org.onlab.onos.net.packet.PacketService; +import org.onlab.onos.net.provider.AbstractProviderRegistry; +import org.onlab.onos.net.provider.AbstractProviderService; +import org.slf4j.Logger; + + +/** + * Provides a basic implementation of the packet SB & NB APIs. + * + */ +@Component(immediate = true) +@Service +public class SimplePacketManager +extends AbstractProviderRegistry +implements PacketService, PacketProviderRegistry { + + private final Logger log = getLogger(getClass()); + + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) + private DeviceService deviceService; + + private final ArrayList processors = new ArrayList<>(); + + private final PacketProcessor reactiveProcessor = new ReactivePacketProcessor(); + + @Activate + public void activate() { + addProcessor(reactiveProcessor, PacketProcessor.ADVISOR_MAX + 1); + log.info("Started"); + } + + @Deactivate + public void deactivate() { + removeProcessor(reactiveProcessor); + log.info("Stopped"); + } + + @Override + public void addProcessor(PacketProcessor processor, int priority) { + processors.add(priority, processor); + } + + @Override + public void removeProcessor(PacketProcessor processor) { + processors.remove(processor); + } + + @Override + public void emit(OutboundPacket packet) { + final Device device = deviceService.getDevice(packet.sendThrough()); + final PacketProvider packetProvider = getProvider(device.providerId()); + packetProvider.emit(packet); + } + + @Override + protected PacketProviderService createProviderService( + PacketProvider provider) { + return new InternalPacketProviderService(provider); + } + + // Personalized link provider service issued to the supplied provider. + private class InternalPacketProviderService + extends AbstractProviderService + implements PacketProviderService { + + protected InternalPacketProviderService(PacketProvider provider) { + super(provider); + } + + @Override + public void processPacket(PacketContext context) { + for (PacketProcessor processor : processors) { + processor.process(context); + } + } + + } +} \ No newline at end of file diff --git a/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/LinkDiscovery.java b/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/LinkDiscovery.java index 9f8a4d8021..7da2e75fe9 100644 --- a/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/LinkDiscovery.java +++ b/providers/of/link/src/main/java/org/onlab/onos/provider/of/link/impl/LinkDiscovery.java @@ -102,7 +102,7 @@ public class LinkDiscovery implements TimerTask { this.sw = sw; this.ofFactory = sw.factory(); this.ctrl = ctrl; - this.probeRate = 1000; + this.probeRate = 3000; this.linkProvider = providerService; this.slowPorts = Collections.synchronizedSet(new HashSet()); this.fastPorts = Collections.synchronizedSet(new HashSet()); @@ -129,7 +129,7 @@ public class LinkDiscovery implements TimerTask { addPort(port); } } - timeout = Timer.getTimer().newTimeout(this, this.probeRate, + timeout = Timer.getTimer().newTimeout(this, 0, TimeUnit.MILLISECONDS); this.log.debug("Started discovery manager for switch {}", sw.getId()); From ae8575843cccc29925812ab9896e7d3b6799dde7 Mon Sep 17 00:00:00 2001 From: alshabib Date: Fri, 12 Sep 2014 23:53:10 -0700 Subject: [PATCH 2/2] added of packet provider - unimplemented --- .../packet/impl/SimplePacketManager.java | 2 +- providers/of/packet/pom.xml | 19 +++++ .../packet/impl/OpenFlowPacketProvider.java | 85 +++++++++++++++++++ providers/of/pom.xml | 1 + 4 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 providers/of/packet/pom.xml create mode 100644 providers/of/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java index cf324f475c..2233c32c22 100644 --- a/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java +++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java @@ -95,4 +95,4 @@ implements PacketService, PacketProviderRegistry { } } -} \ No newline at end of file +} diff --git a/providers/of/packet/pom.xml b/providers/of/packet/pom.xml new file mode 100644 index 0000000000..a425899368 --- /dev/null +++ b/providers/of/packet/pom.xml @@ -0,0 +1,19 @@ + + + 4.0.0 + + + org.onlab.onos + onos-of-providers + 1.0.0-SNAPSHOT + ../pom.xml + + + onos-of-provider-packet + bundle + + ONOS OpenFlow protocol packet provider + + diff --git a/providers/of/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java b/providers/of/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java new file mode 100644 index 0000000000..c854daafa6 --- /dev/null +++ b/providers/of/packet/src/main/java/org/onlab/onos/provider/of/packet/impl/OpenFlowPacketProvider.java @@ -0,0 +1,85 @@ +package org.onlab.onos.provider.of.packet.impl; + +import static org.slf4j.LoggerFactory.getLogger; + +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Deactivate; +import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.ReferenceCardinality; +import org.onlab.onos.net.packet.OutboundPacket; +import org.onlab.onos.net.packet.PacketProvider; +import org.onlab.onos.net.packet.PacketProviderRegistry; +import org.onlab.onos.net.packet.PacketProviderService; +import org.onlab.onos.net.provider.AbstractProvider; +import org.onlab.onos.net.provider.ProviderId; +import org.onlab.onos.of.controller.OpenFlowController; +import org.onlab.onos.of.controller.OpenFlowPacketContext; +import org.onlab.onos.of.controller.PacketListener; +import org.slf4j.Logger; + +/** + * Provider which uses an OpenFlow controller to detect network + * infrastructure links. + */ +@Component(immediate = true) +public class OpenFlowPacketProvider extends AbstractProvider implements PacketProvider { + + private final Logger log = getLogger(getClass()); + + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) + protected PacketProviderRegistry providerRegistry; + + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) + protected OpenFlowController controller; + + private PacketProviderService providerService; + + private final boolean useBDDP = true; + + private final InternalPacketProvider listener = new InternalPacketProvider(); + + + + /** + * Creates an OpenFlow link provider. + */ + public OpenFlowPacketProvider() { + super(new ProviderId("org.onlab.onos.provider.openflow")); + } + + @Activate + public void activate() { + providerService = providerRegistry.register(this); + controller.addPacketListener(0, listener); + log.info("Started"); + } + + @Deactivate + public void deactivate() { + providerRegistry.unregister(this); + controller.removePacketListener(listener); + providerService = null; + log.info("Stopped"); + } + + @Override + public void emit(OutboundPacket packet) { + // TODO Auto-generated method stub + + } + + + private class InternalPacketProvider implements PacketListener { + + + @Override + public void handlePacket(OpenFlowPacketContext pktCtx) { + + + } + + } + + +} diff --git a/providers/of/pom.xml b/providers/of/pom.xml index 0722d71732..901cdd6a49 100644 --- a/providers/of/pom.xml +++ b/providers/of/pom.xml @@ -20,6 +20,7 @@ device link host + packet