X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=applications%2Flldp-speaker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fapplications%2Flldpspeaker%2FLLDPSpeaker.java;h=e0684923749c5f41db173fba71adb261629a12fb;hb=5ae6b8928b7ed3ce989e304c0c57350ca3f692b5;hp=6351d546befb85076142e361e1b64eaca389ec6c;hpb=1061cc9d6929e8bb2052f4562bedd7fdce5034ac;p=openflowplugin.git diff --git a/applications/lldp-speaker/src/main/java/org/opendaylight/openflowplugin/applications/lldpspeaker/LLDPSpeaker.java b/applications/lldp-speaker/src/main/java/org/opendaylight/openflowplugin/applications/lldpspeaker/LLDPSpeaker.java index 6351d546be..e068492374 100644 --- a/applications/lldp-speaker/src/main/java/org/opendaylight/openflowplugin/applications/lldpspeaker/LLDPSpeaker.java +++ b/applications/lldp-speaker/src/main/java/org/opendaylight/openflowplugin/applications/lldpspeaker/LLDPSpeaker.java @@ -14,7 +14,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef; @@ -34,24 +34,21 @@ import org.slf4j.LoggerFactory; * Objects of this class send LLDP frames over all flow-capable ports that can * be discovered through inventory. */ -public class LLDPSpeaker implements AutoCloseable, NodeConnectorEventsObserver, - Runnable { - - private static final Logger LOG = LoggerFactory - .getLogger(LLDPSpeaker.class); +public class LLDPSpeaker implements AutoCloseable, NodeConnectorEventsObserver, Runnable { + private static final Logger LOG = LoggerFactory.getLogger(LLDPSpeaker.class); private static final long LLDP_FLOOD_PERIOD = 5; + private long currentFloodPeriod = LLDP_FLOOD_PERIOD; private final PacketProcessingService packetProcessingService; private final ScheduledExecutorService scheduledExecutorService; - private final Map, TransmitPacketInput> nodeConnectorMap = new ConcurrentHashMap<>(); - private final ScheduledFuture scheduledSpeakerTask; + private final Map, TransmitPacketInput> nodeConnectorMap = new + ConcurrentHashMap<>(); + private ScheduledFuture scheduledSpeakerTask; private final MacAddress addressDestionation; private volatile OperStatus operationalStatus = OperStatus.RUN; - public LLDPSpeaker(final PacketProcessingService packetProcessingService, - final MacAddress addressDestionation) { - this(packetProcessingService, Executors - .newSingleThreadScheduledExecutor(), addressDestionation); + public LLDPSpeaker(final PacketProcessingService packetProcessingService, final MacAddress addressDestionation) { + this(packetProcessingService, Executors.newSingleThreadScheduledExecutor(), addressDestionation); } public void setOperationalStatus(final OperStatus operationalStatus) { @@ -66,18 +63,25 @@ public class LLDPSpeaker implements AutoCloseable, NodeConnectorEventsObserver, return operationalStatus; } + public void setLldpFloodInterval(long time) { + this.currentFloodPeriod = time; + scheduledSpeakerTask.cancel(false); + scheduledSpeakerTask = this.scheduledExecutorService.scheduleAtFixedRate(this, time, time, TimeUnit.SECONDS); + LOG.info("LLDPSpeaker restarted, it will send LLDP frames each {} seconds", time); + } + + public long getLldpFloodInterval() { + return currentFloodPeriod; + } + public LLDPSpeaker(final PacketProcessingService packetProcessingService, - final ScheduledExecutorService scheduledExecutorService, - final MacAddress addressDestionation) { + final ScheduledExecutorService scheduledExecutorService, final MacAddress addressDestionation) { this.addressDestionation = addressDestionation; this.scheduledExecutorService = scheduledExecutorService; - scheduledSpeakerTask = this.scheduledExecutorService - .scheduleAtFixedRate(this, LLDP_FLOOD_PERIOD, - LLDP_FLOOD_PERIOD, TimeUnit.SECONDS); + scheduledSpeakerTask = this.scheduledExecutorService.scheduleAtFixedRate(this, LLDP_FLOOD_PERIOD, + LLDP_FLOOD_PERIOD, TimeUnit.SECONDS); this.packetProcessingService = packetProcessingService; - LOG.info( - "LLDPSpeaker started, it will send LLDP frames each {} seconds", - LLDP_FLOOD_PERIOD); + LOG.info("LLDPSpeaker started, it will send LLDP frames each {} seconds", LLDP_FLOOD_PERIOD); } /** @@ -97,84 +101,61 @@ public class LLDPSpeaker implements AutoCloseable, NodeConnectorEventsObserver, @Override public void run() { if (OperStatus.RUN.equals(operationalStatus)) { - LOG.debug("Sending LLDP frames to {} ports...", nodeConnectorMap - .keySet().size()); - - for (InstanceIdentifier nodeConnectorInstanceId : nodeConnectorMap - .keySet()) { - NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf( - nodeConnectorInstanceId).getId(); - LOG.trace("Sending LLDP through port {}", - nodeConnectorId.getValue()); - packetProcessingService.transmitPacket(nodeConnectorMap - .get(nodeConnectorInstanceId)); + LOG.debug("Sending LLDP frames to {} ports...", nodeConnectorMap.keySet().size()); + for (InstanceIdentifier nodeConnectorInstanceId : nodeConnectorMap.keySet()) { + NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf(nodeConnectorInstanceId).getId(); + LOG.trace("Sending LLDP through port {}", nodeConnectorId.getValue()); + packetProcessingService.transmitPacket(nodeConnectorMap.get(nodeConnectorInstanceId)); } } } - /** - * {@inheritDoc} - */ @Override - public void nodeConnectorAdded( - final InstanceIdentifier nodeConnectorInstanceId, - final FlowCapableNodeConnector flowConnector) { - NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf( - nodeConnectorInstanceId).getId(); + public void nodeConnectorAdded(final InstanceIdentifier nodeConnectorInstanceId, + final FlowCapableNodeConnector flowConnector) { + NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf(nodeConnectorInstanceId).getId(); // nodeConnectorAdded can be called even if we already sending LLDP // frames to // port, so first we check if we actually need to perform any action if (nodeConnectorMap.containsKey(nodeConnectorInstanceId)) { - LOG.trace( - "Port {} already in LLDPSpeaker.nodeConnectorMap, no need for additional processing", + LOG.trace("Port {} already in LLDPSpeaker.nodeConnectorMap, no need for additional processing", nodeConnectorId.getValue()); return; } // Prepare to build LLDP payload - InstanceIdentifier nodeInstanceId = nodeConnectorInstanceId - .firstIdentifierOf(Node.class); + InstanceIdentifier nodeInstanceId = nodeConnectorInstanceId.firstIdentifierOf(Node.class); NodeId nodeId = InstanceIdentifier.keyOf(nodeInstanceId).getId(); MacAddress srcMacAddress = flowConnector.getHardwareAddress(); Long outputPortNo = flowConnector.getPortNumber().getUint32(); // No need to send LLDP frames on local ports if (outputPortNo == null) { - LOG.trace("Port {} is local, not sending LLDP frames through it", - nodeConnectorId.getValue()); + LOG.trace("Port {} is local, not sending LLDP frames through it", nodeConnectorId.getValue()); return; } // Generate packet with destination switch and port TransmitPacketInput packet = new TransmitPacketInputBuilder() .setEgress(new NodeConnectorRef(nodeConnectorInstanceId)) - .setNode(new NodeRef(nodeInstanceId)) - .setPayload( - LLDPUtil.buildLldpFrame(nodeId, nodeConnectorId, - srcMacAddress, outputPortNo, - addressDestionation)).build(); + .setNode(new NodeRef(nodeInstanceId)).setPayload(LLDPUtil.buildLldpFrame(nodeId, + nodeConnectorId, srcMacAddress, outputPortNo, addressDestionation)).build(); // Save packet to node connector id -> packet map to transmit it every 5 // seconds nodeConnectorMap.put(nodeConnectorInstanceId, packet); - LOG.trace("Port {} added to LLDPSpeaker.nodeConnectorMap", - nodeConnectorId.getValue()); + LOG.trace("Port {} added to LLDPSpeaker.nodeConnectorMap", nodeConnectorId.getValue()); // Transmit packet for first time immediately packetProcessingService.transmitPacket(packet); } - /** - * {@inheritDoc} - */ @Override - public void nodeConnectorRemoved( - final InstanceIdentifier nodeConnectorInstanceId) { + public void nodeConnectorRemoved(final InstanceIdentifier nodeConnectorInstanceId) { nodeConnectorMap.remove(nodeConnectorInstanceId); - NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf( - nodeConnectorInstanceId).getId(); - LOG.trace("Port {} removed from LLDPSpeaker.nodeConnectorMap", - nodeConnectorId.getValue()); + NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf(nodeConnectorInstanceId).getId(); + LOG.trace("Port {} removed from LLDPSpeaker.nodeConnectorMap", nodeConnectorId.getValue()); } + }