VOL-2339: DHCP issue on second ONU, when two ONUs exist on same PON
- Process to_remove before to_add items in UpdateFlowsIncrementally
method
- Sequentially add flows for a given pon, onu, uni inorder to avoid
PON resource collisions. Used lock per key so that different
subscribers do not have to wait for each other to add flows.
- Wait for any flow removes for the subscriber to complete before
adding flows.
Change-Id: I095291b9a53fd0f19dc79f2b44923ec786a26d6e
diff --git a/adaptercore/device_handler.go b/adaptercore/device_handler.go
index 7e09fc8..9c65cee 100644
--- a/adaptercore/device_handler.go
+++ b/adaptercore/device_handler.go
@@ -1081,14 +1081,15 @@
func (dh *DeviceHandler) UpdateFlowsIncrementally(device *voltha.Device, flows *of.FlowChanges, groups *of.FlowGroupChanges, flowMetadata *voltha.FlowMetadata) error {
log.Debugw("Received-incremental-flowupdate-in-device-handler", log.Fields{"deviceID": device.Id, "flows": flows, "groups": groups, "flowMetadata": flowMetadata})
if flows != nil {
- for _, flow := range flows.ToAdd.Items {
- log.Debug("Adding flow", log.Fields{"deviceId": device.Id, "flowToAdd": flow})
- dh.flowMgr.AddFlow(flow, flowMetadata)
- }
for _, flow := range flows.ToRemove.Items {
log.Debug("Removing flow", log.Fields{"deviceId": device.Id, "flowToRemove": flow})
dh.flowMgr.RemoveFlow(flow)
}
+
+ for _, flow := range flows.ToAdd.Items {
+ log.Debug("Adding flow", log.Fields{"deviceId": device.Id, "flowToAdd": flow})
+ dh.flowMgr.AddFlow(flow, flowMetadata)
+ }
}
if groups != nil && flows != nil {
for _, flow := range flows.ToRemove.Items {