VOL-2535 : Update the PON-ports on Disable olt,
Openolt agent doesn't disable the NNI port on disble olt device.
Hence NNI operstatus is not updating to UNKNOWN on Disble olt.
Change-Id: I172a1c2c0f3f27567d0740504b1fb5ece614a00d
diff --git a/adaptercore/device_handler.go b/adaptercore/device_handler.go
index e373523..6be5be7 100644
--- a/adaptercore/device_handler.go
+++ b/adaptercore/device_handler.go
@@ -548,7 +548,7 @@
return err
}
dh.populateActivePorts(device)
- if err := dh.updatePortAdminState(device); err != nil {
+ if err := dh.disableAdminDownPorts(device); err != nil {
log.Errorw("Error-on-updating-port-status", log.Fields{"device": device})
return err
}
@@ -1197,10 +1197,14 @@
go dh.notifyChildDevices("unreachable")
cloned := proto.Clone(device).(*voltha.Device)
- // Update the all ports state on that device to disable
- if err := dh.coreProxy.PortsStateUpdate(context.TODO(), cloned.Id, voltha.OperStatus_UNKNOWN); err != nil {
- log.Errorw("updating-ports-failed", log.Fields{"deviceID": device.Id, "error": err})
- return err
+ // Update the all pon ports state on that device to disable and NNI remains active as NNI remains active in openolt agent.
+ for _, port := range cloned.Ports {
+ if port.GetType() == voltha.Port_PON_OLT {
+ if err := dh.coreProxy.PortStateUpdate(context.TODO(), cloned.Id,
+ voltha.Port_PON_OLT, port.GetPortNo(), voltha.OperStatus_UNKNOWN); err != nil {
+ return err
+ }
+ }
}
log.Debugw("disable-device-end", log.Fields{"deviceID": device.Id})
@@ -1255,7 +1259,7 @@
cloned := proto.Clone(device).(*voltha.Device)
// Update the all ports state on that device to enable
- if err := dh.updatePortAdminState(device); err != nil {
+ if err := dh.disableAdminDownPorts(device); err != nil {
log.Errorw("Error-on-updating-port-status-after-reenabling-olt", log.Fields{"device": device})
return err
}
@@ -1606,18 +1610,19 @@
// EnablePort to enable Pon interface
func (dh *DeviceHandler) EnablePort(port *voltha.Port) error {
log.Debugw("enable-port", log.Fields{"Device": dh.device, "port": port})
- return dh.invokeDisableorEnablePort(port, true)
+ return dh.modifyPhyPort(port, true)
}
// DisablePort to disable pon interface
func (dh *DeviceHandler) DisablePort(port *voltha.Port) error {
log.Debugw("disable-port", log.Fields{"Device": dh.device, "port": port})
- return dh.invokeDisableorEnablePort(port, false)
+ return dh.modifyPhyPort(port, false)
}
-func (dh *DeviceHandler) invokeDisableorEnablePort(port *voltha.Port, enablePort bool) error {
+//modifyPhyPort is common function to enable and disable the port. parm :enablePort, true to enablePort and false to disablePort.
+func (dh *DeviceHandler) modifyPhyPort(port *voltha.Port, enablePort bool) error {
ctx := context.Background()
- log.Infow("invokeDisableorEnablePort", log.Fields{"port": port, "Enable": enablePort})
+ log.Infow("modifyPhyPort", log.Fields{"port": port, "Enable": enablePort})
if port.GetType() == voltha.Port_ETHERNET_NNI {
// Bug is opened for VOL-2505 to support NNI disable feature.
log.Infow("voltha-supports-single-nni-hence-disable-of-nni-not-allowed",
@@ -1657,14 +1662,14 @@
return nil
}
-//updatePortAdminState update the ports on reboot and re-enable device.
-func (dh *DeviceHandler) updatePortAdminState(device *voltha.Device) error {
+//disableAdminDownPorts disables the ports, if the corresponding port Adminstate is disabled on reboot and Renable device.
+func (dh *DeviceHandler) disableAdminDownPorts(device *voltha.Device) error {
cloned := proto.Clone(device).(*voltha.Device)
// Disable the port and update the oper_port_status to core
// if the Admin state of the port is disabled on reboot and re-enable device.
for _, port := range cloned.Ports {
if port.AdminState == common.AdminState_DISABLED {
- if err := dh.invokeDisableorEnablePort(port, false); err != nil {
+ if err := dh.DisablePort(port); err != nil {
log.Errorw("error-occurred-while-disabling-port", log.Fields{"DeviceId": dh.deviceID, "port": port, "error": err})
return err
}