Fixed the null-provider packet rate default value and ability to dynamically adjust the value.
Change-Id: Ifc86ff9a184f2b453038667ed32c944841ed7af6
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java b/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
index 3791393..54b45e4 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
@@ -40,6 +40,7 @@
import java.util.stream.Collectors;
import static com.google.common.collect.ImmutableList.copyOf;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.onosproject.net.MastershipRole.MASTER;
import static org.slf4j.LoggerFactory.getLogger;
@@ -99,7 +100,11 @@
* @param packetRate new packet rate
*/
void adjustRate(int packetRate) {
- delay = 1000 / packetRate;
+ boolean needsRestart = delay == 0 && packetRate > 0;
+ delay = packetRate > 0 ? 1000 / packetRate : 0;
+ if (needsRestart) {
+ timeout = timer.newTimeout(new PacketDriverTask(), 1, MILLISECONDS);
+ }
log.info("Settings: packetRate={}, delay={}", packetRate, delay);
}
@@ -126,7 +131,7 @@
ICMP icmp;
Ethernet eth;
- public PacketDriverTask() {
+ PacketDriverTask() {
icmp = new ICMP();
icmp.setIcmpType((byte) 8).setIcmpCode((byte) 0).setChecksum((short) 0);
eth = new Ethernet();
@@ -136,7 +141,7 @@
@Override
public void run(Timeout to) {
- if (!devices.isEmpty() && !to.isCancelled()) {
+ if (!devices.isEmpty() && !to.isCancelled() && delay > 0) {
sendEvent(devices.get(Math.min(currentDevice, devices.size() - 1)));
currentDevice = (currentDevice + 1) % devices.size();
timeout = timer.newTimeout(to.getTask(), delay, TimeUnit.MILLISECONDS);
@@ -145,8 +150,8 @@
private void sendEvent(Device device) {
// Make it look like things came from ports attached to hosts
- eth.setSourceMACAddress("00:00:10:00:00:0" + SRC_HOST)
- .setDestinationMACAddress("00:00:10:00:00:0" + DST_HOST);
+ eth.setSourceMACAddress("00:00:00:10:00:0" + SRC_HOST)
+ .setDestinationMACAddress("00:00:00:10:00:0" + DST_HOST);
InboundPacket inPkt = new DefaultInboundPacket(
new ConnectPoint(device.id(), PortNumber.portNumber(SRC_HOST)),
eth, ByteBuffer.wrap(eth.serialize()));
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java b/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java
index 469feb4..f6236c4 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java
@@ -152,7 +152,7 @@
label = "Number of host to generate per device")
private int hostCount = DEFAULT_HOST_COUNT;
- private static final int DEFAULT_PACKET_RATE = 5;
+ private static final int DEFAULT_PACKET_RATE = 0;
@Property(name = "packetRate", intValue = DEFAULT_PACKET_RATE,
label = "Packet-in/s rate; 0 for no packets")
private int packetRate = DEFAULT_PACKET_RATE;