Avoid bounce in the ONU State
Retry EAPOL until done
Change-Id: I062e3831905ad27d756a11b147593f4a55051f55
diff --git a/core/mediator.go b/core/mediator.go
index 44e1d20..b1d33b6 100644
--- a/core/mediator.go
+++ b/core/mediator.go
@@ -174,14 +174,18 @@
next := sr.next
current := sr.current
dev := sr.device
+ key := dev.GetDevkey()
if reflect.TypeOf(dev) == reflect.TypeOf(&device.Olt{}) {
- logger.Debug("Received OLT Device %v Current: %d Next: %d", dev, current, next)
+ logger.WithFields(log.Fields{
+ "device": dev,
+ }).Debugf("Received OLT Device state change %v Current: %d Next: %d", key, current, next)
if err := transitOlt(current, next, m.testmanager, m.opt); err != nil {
logger.Error("%v", err)
}
} else if reflect.TypeOf(dev) == reflect.TypeOf(&device.Onu{}) {
- logger.Debug("Received ONU Device %v Current: %d Next: %d", dev, current, next)
- key := dev.GetDevkey()
+ logger.WithFields(log.Fields{
+ "device": dev,
+ }).Debugf("Received ONU Device state change %v Current: %d Next: %d", key, current, next)
if err := transitOnu(key, current, next, m.testmanager, m.opt); err != nil {
logger.Error("%v", err)
}
@@ -204,15 +208,16 @@
return nil
}
-func transitOnu(key device.Devkey, current device.DeviceState, next device.DeviceState, tm *TestManager, o *option) error {
- logger.Debug("trnsitOnu called with key: %v, current: %d, next: %d", key, current, next)
+func transitOnu(key device.Devkey, previous device.DeviceState, current device.DeviceState, tm *TestManager, o *option) error {
+ logger.Debug("transitOnu called with key: %v, previous: %s, current: %s", key, device.ONUState[previous], device.ONUState[current])
if o.Mode == AAA || o.Mode == BOTH {
- if current == device.ONU_ACTIVE && next == device.ONU_OMCIACTIVE {
+ if previous == device.ONU_ACTIVE && current == device.ONU_OMCIACTIVE {
+ logger.Debug("Starting WPASupplicant for device %v", key)
t := tm.CreateTester("AAA", o, key, activateWPASupplicant, o.aaawait)
if err := tm.StartTester(t); err != nil {
logger.Error("Cannot Start AAA Executer error:%v", err)
}
- } else if current == device.ONU_OMCIACTIVE && next == device.ONU_INACTIVE {
+ } else if previous == device.ONU_OMCIACTIVE && current == device.ONU_INACTIVE {
if err := tm.StopTester("AAA", key); err != nil {
logger.Error("Cannot Stop AAA Executer error:%v", err)
}
@@ -220,12 +225,13 @@
}
if o.Mode == BOTH {
- if current == device.ONU_OMCIACTIVE {
+ if previous == device.ONU_OMCIACTIVE && current == device.ONU_AUTHENTICATED {
+ logger.Debug("Starting DHCP client for device %v", key)
t := tm.CreateTester("DHCP", o, key, activateDHCPClient, o.dhcpwait)
if err := tm.StartTester(t); err != nil {
logger.Error("Cannot Start DHCP Executer error:%v", err)
}
- } else if current == device.ONU_AUTHENTICATED && next == device.ONU_INACTIVE {
+ } else if previous == device.ONU_AUTHENTICATED && current == device.ONU_INACTIVE {
if err := tm.StopTester("DHCP", key); err != nil {
logger.Error("Cannot Stop DHCP Executer error:%v", err)
}