Fixed a few defects with DHCP server top be able to run on the office network.
Change-Id: I7a800b8ab422a4a08920ac3eeb8f25bbe5764a3a
diff --git a/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java b/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
index 24cb087..99cc731 100644
--- a/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
+++ b/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
@@ -86,7 +86,7 @@
private static final ProviderId PID = new ProviderId("of", "org.onosproject.dhcp", true);
private final Logger log = LoggerFactory.getLogger(getClass());
- private final NetworkConfigListener cfgListener = new InternalConfigListener();
+ private final InternalConfigListener cfgListener = new InternalConfigListener();
private final Set<ConfigFactory> factories = ImmutableSet.of(
new ConfigFactory<ApplicationId, DhcpConfig>(APP_SUBJECT_FACTORY,
@@ -163,8 +163,11 @@
cfgService.addListener(cfgListener);
factories.forEach(cfgService::registerConfigFactory);
+ cfgListener.reconfigureNetwork(cfgService.getConfig(appId, DhcpConfig.class));
+ cfgListener.reconfigureStore(cfgService.getConfig(appId, DhcpStoreConfig.class));
+
hostProviderService = hostProviderRegistry.register(hostProvider);
- packetService.addProcessor(processor, PacketProcessor.observer(1));
+ packetService.addProcessor(processor, PacketProcessor.director(1));
requestPackets();
log.info("Started");
}
@@ -394,7 +397,7 @@
TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
ConnectPoint sourcePoint = context.inPacket().receivedFrom();
builder.setOutput(sourcePoint.port());
-
+ context.block();
packetService.emit(new DefaultOutboundPacket(sourcePoint.deviceId(),
builder.build(), ByteBuffer.wrap(reply.serialize())));
}
@@ -407,7 +410,6 @@
* @param dhcpPayload the extracted DHCP payload
*/
private void processDHCPPacket(PacketContext context, DHCP dhcpPayload) {
-
Ethernet packet = context.inPacket().parsed();
boolean flagIfRequestedIP = false;
boolean flagIfServerIP = false;
@@ -483,7 +485,6 @@
}
}
} else if (incomingPacketType == DHCPPacketType.DHCPRELEASE.getValue()) {
-
dhcpStore.releaseIP(clientMAC);
}
}
@@ -540,7 +541,6 @@
@Override
public void process(PacketContext context) {
-
Ethernet packet = context.inPacket().parsed();
if (packet == null) {
return;
@@ -581,7 +581,9 @@
* @param cfg configuration object
*/
private void reconfigureNetwork(DhcpConfig cfg) {
-
+ if (cfg == null) {
+ return;
+ }
if (cfg.ip() != null) {
myIP = cfg.ip();
}
@@ -620,6 +622,9 @@
* @param cfg configuration object
*/
private void reconfigureStore(DhcpStoreConfig cfg) {
+ if (cfg == null) {
+ return;
+ }
if (cfg.defaultTimeout() != null) {
dhcpStore.setDefaultTimeoutForPurge(Integer.valueOf(cfg.defaultTimeout()));
diff --git a/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpStoreConfig.java b/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpStoreConfig.java
index 0059e7e..db4672d 100644
--- a/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpStoreConfig.java
+++ b/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpStoreConfig.java
@@ -24,6 +24,8 @@
*/
public class DhcpStoreConfig extends Config<ApplicationId> {
+ // FIXME: combine with the other config and properly type the values
+
public static final String TIMER_DELAY = "delay";
public static final String DEFAULT_TIMEOUT = "timeout";
public static final String START_IP = "startip";
diff --git a/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java b/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java
index 6e29216..d415d0d 100644
--- a/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java
+++ b/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java
@@ -175,7 +175,7 @@
if (allocationMap.containsKey(macID)) {
assignmentInfo = allocationMap.get(macID).value();
if ((assignmentInfo.ipAddress().toInt() == ipAddr.toInt()) &&
- (ipAddr.toInt() > startIPRange.toInt()) && (ipAddr.toInt() < endIPRange.toInt())) {
+ (ipAddr.toInt() >= startIPRange.toInt()) && (ipAddr.toInt() <= endIPRange.toInt())) {
assignmentInfo = IpAssignment.builder()
.ipAddress(ipAddr)