Fixing downstream dhcp flow udp port numbers
Change-Id: I23699b046f6f7cd9f8f494cd3a9c97591ec42c2d
diff --git a/app/src/main/java/org/opencord/olt/impl/Olt.java b/app/src/main/java/org/opencord/olt/impl/Olt.java
index 2116c70..bc922b0 100644
--- a/app/src/main/java/org/opencord/olt/impl/Olt.java
+++ b/app/src/main/java/org/opencord/olt/impl/Olt.java
@@ -232,7 +232,8 @@
}
if (enableDhcpOnProvisioning) {
- processDhcpFilteringObjectives(port.deviceId(), port.port(), true);
+ processDhcpFilteringObjectives(port.deviceId(), port.port(), true,
+ true);
}
log.info("Programming vlans for subscriber: {}", sub);
Optional<VlanId> defaultVlan = Optional.empty();
@@ -269,7 +270,8 @@
}
if (enableDhcpOnProvisioning) {
- processDhcpFilteringObjectives(port.deviceId(), port.port(), false);
+ processDhcpFilteringObjectives(port.deviceId(), port.port(), false,
+ true);
}
log.info("Removing programmed vlans for subscriber: {}", subscriber);
@@ -790,7 +792,7 @@
*/
private void processNniFilteringObjectives(DeviceId devId, PortNumber port, boolean install) {
processLldpFilteringObjective(devId, port, install);
- processDhcpFilteringObjectives(devId, port, install);
+ processDhcpFilteringObjectives(devId, port, install, false);
}
private void processLldpFilteringObjective(DeviceId devId, PortNumber port, boolean install) {
@@ -825,18 +827,32 @@
}
- private void processDhcpFilteringObjectives(DeviceId devId, PortNumber port, boolean install) {
+ /**
+ * Trap dhcp packets to the controller.
+ *
+ * @param devId the device identifier
+ * @param port the port for which this trap flow is designated
+ * @param install true to install the flow, false to remove the flow
+ * @param upstream true if trapped packets are flowing upstream towards
+ * server, false if packets are flowing dowstream towards client
+ */
+ private void processDhcpFilteringObjectives(DeviceId devId, PortNumber port,
+ boolean install,
+ boolean upstream) {
if (!mastershipService.isLocalMaster(devId)) {
return;
}
- DefaultFilteringObjective.Builder builder = DefaultFilteringObjective.builder();
+ int udpSrc = (upstream) ? 68 : 67;
+ int udpDst = (upstream) ? 67 : 68;
+
+ DefaultFilteringObjective.Builder builder = DefaultFilteringObjective.builder();
FilteringObjective dhcpUpstream = (install ? builder.permit() : builder.deny())
.withKey(Criteria.matchInPort(port))
.addCondition(Criteria.matchEthType(EthType.EtherType.IPV4.ethType()))
.addCondition(Criteria.matchIPProtocol(IPv4.PROTOCOL_UDP))
- .addCondition(Criteria.matchUdpSrc(TpPort.tpPort(68)))
- .addCondition(Criteria.matchUdpDst(TpPort.tpPort(67)))
+ .addCondition(Criteria.matchUdpSrc(TpPort.tpPort(udpSrc)))
+ .addCondition(Criteria.matchUdpDst(TpPort.tpPort(udpDst)))
.withMeta(DefaultTrafficTreatment.builder()
.setOutput(PortNumber.CONTROLLER).build())
.fromApp(appId)