EPON Manager – Sequence Diagrams
Created on March 13, 2026
1. System Startup Sequence
sequenceDiagram
participant Main
participant Controller as EPON Controller
participant Logger
participant EventListener
participant HAL
participant RBus as RBus Thread
participant Telemetry
participant StatsPoller
Main->>Controller: epon_controller_init()
activate Controller
Controller->>Logger: logger_init()
activate Logger
Logger-->>Controller: Success
deactivate Logger
Controller->>EventListener: event_listener_start()
activate EventListener
EventListener->>EventListener: start_event_loop()
EventListener-->>Controller: Started
Controller->>HAL: hal_init(callbacks)
activate HAL
HAL->>HAL: init_hardware()
HAL->>HAL: register_onu_status_callback()
HAL->>HAL: register_interface_status_callback()
HAL->>HAL: register_alarm_callback()
HAL-->>Controller: Success
deactivate HAL
Controller->>RBus: rbus_thread_start()
activate RBus
RBus->>RBus: init_bus()
RBus->>RBus: register_dml_params()
RBus-->>Controller: Started
Controller->>Telemetry: telemetry_init()
activate Telemetry
Telemetry->>Telemetry: register_with_t2()
Telemetry-->>Controller: Success
deactivate Telemetry
Controller->>StatsPoller: stats_poller_start()
activate StatsPoller
StatsPoller->>StatsPoller: start_polling_loop()
StatsPoller-->>Controller: Started
Controller-->>Main: Ready
deactivate Controller
Note over Controller,StatsPoller: System Running
2. ONU Registration Event Sequence (Internal State Only)
sequenceDiagram
participant HW as EPON ONU Hardware
participant HAL as EPON HAL
participant EventL as Event Listener
participant Controller
participant Cache
participant Logger
participant Telem as Telemetry
HW->>HAL: ONU Registration Complete
HAL->>EventL: onu_status_callback(REGISTRATION)
activate EventL
EventL->>Controller: processONUStatus(REGISTRATION)
activate Controller
Controller->>Cache: update_internal_onu_status(UP)
activate Cache
Cache-->>Controller: OK
deactivate Cache
Controller->>Logger: log(INFO, "ONU Registered")
activate Logger
Logger-->>Controller: OK
deactivate Logger
Controller->>Telem: report_event(ONU_REGISTERED)
activate Telem
Telem-->>Controller: OK
deactivate Telem
Controller-->>EventL: Processed
deactivate Controller
deactivate EventL
Note over HW,Telem: No WanManager update - waiting for interface callbacks3. Interface Link UP Event Sequence
sequenceDiagram
participant HW as EPON ONU Hardware
participant HAL as EPON HAL
participant EventL as Event Listener
participant Controller
participant Cache
participant RBus
participant WanMgr as WanManager
participant Telem as Telemetry
HW->>HAL: Interface veip0 Link UP
HAL->>EventL: interface_status_callback(veip0, LINK_UP)
activate EventL
EventL->>Controller: processInterfaceStatus(veip0, LINK_UP)
activate Controller
Controller->>Cache: update_interface_status(veip0, UP)
activate Cache
Cache->>Cache: add_to_interface_list(veip0)
Cache-->>Controller: OK
deactivate Cache
Controller->>Controller: Check if first interface UP
Controller->>RBus: publish_interface_event(veip0, UP)
activate RBus
alt First Interface Coming UP
RBus->>WanMgr: notify(EPON_PHY_STATUS_UP)
activate WanMgr
WanMgr-->>RBus: ACK
deactivate WanMgr
Note over RBus,WanMgr: PHY goes UP when any interface is UP
end
RBus->>WanMgr: update_virtual_interface(veip0, AVAILABLE)
activate WanMgr
WanMgr-->>RBus: ACK
deactivate WanMgr
RBus-->>Controller: OK
deactivate RBus
Controller->>Telem: report_event(INTERFACE_UP, veip0)
activate Telem
Telem-->>Controller: OK
deactivate Telem
Controller-->>EventL: Processed
deactivate Controller
deactivate EventL
4. Interface Link DOWN Event Sequence
sequenceDiagram
participant HW as EPON ONU Hardware
participant HAL as EPON HAL
participant EventL as Event Listener
participant Controller
participant Cache
participant RBus
participant WanMgr as WanManager
participant Telem as Telemetry
participant Logger
HW->>HAL: Interface veip0 Link DOWN
HAL->>EventL: interface_status_callback(veip0, LINK_DOWN)
activate EventL
EventL->>Controller: processInterfaceStatus(veip0, LINK_DOWN)
activate Controller
Controller->>Logger: log(WARNING, "Interface veip0 DOWN")
activate Logger
Logger-->>Controller: OK
deactivate Logger
Controller->>Cache: update_interface_status(veip0, DOWN)
activate Cache
Cache->>Cache: remove_from_interface_list(veip0)
Cache-->>Controller: OK
deactivate Cache
Controller->>Controller: Check if all interfaces DOWN
Controller->>RBus: publish_interface_event(veip0, DOWN)
activate RBus
RBus->>WanMgr: update_virtual_interface(veip0, UNAVAILABLE)
activate WanMgr
WanMgr-->>RBus: ACK
deactivate WanMgr
alt All Interfaces Now DOWN
RBus->>WanMgr: notify(EPON_PHY_STATUS_DOWN)
activate WanMgr
WanMgr-->>RBus: ACK
deactivate WanMgr
Note over RBus,WanMgr: PHY goes DOWN only when all interfaces are DOWN
end
RBus-->>Controller: OK
deactivate RBus
Controller->>Telem: report_event(INTERFACE_DOWN, veip0)
activate Telem
Telem-->>Controller: OK
deactivate Telem
Controller-->>EventL: Processed
deactivate Controller
deactivate EventL5. ONU Deregistration Event Sequence (Internal State Only)
sequenceDiagram
participant HW as EPON ONU Hardware
participant HAL as EPON HAL
participant EventL as Event Listener
participant Controller
participant Cache
participant Logger
participant Telem as Telemetry
HW->>HAL: ONU Deregistration / LOS
HAL->>EventL: onu_status_callback(DEREGISTRATION)
activate EventL
EventL->>Controller: processONUStatus(DEREGISTRATION)
activate Controller
Controller->>Logger: log(WARNING, "ONU Deregistered")
activate Logger
Logger-->>Controller: OK
deactivate Logger
Controller->>Cache: update_internal_onu_status(DOWN)
activate Cache
Cache-->>Controller: OK
deactivate Cache
Controller->>Telem: report_event(ONU_DEREGISTERED)
activate Telem
Telem-->>Controller: OK
deactivate Telem
Controller-->>EventL: Processed
deactivate Controller
deactivate EventL
Note over HW,Telem: No WanManager update - interface callbacks handle that6. TR-181 GET Request with Cache
sequenceDiagram
participant Client as RDK Component
participant RBus as RBus Thread
participant Cache
participant Controller
participant HAL
Client->>RBus: GET Stats.BytesSent
activate RBus
RBus->>Cache: cache_get("Stats.BytesSent")
activate Cache
alt Cache Valid (<30s)
Cache-->>RBus: value, valid=true
RBus-->>Client: Return cached value
else Cache Invalid (>30s)
Cache-->>RBus: valid=false
deactivate Cache
RBus->>Controller: query_hal_stats()
activate Controller
Controller->>HAL: epon_hal_get_stats()
activate HAL
HAL-->>Controller: stats_data
deactivate HAL
Controller->>Cache: cache_set("Stats.BytesSent", value, 30)
activate Cache
Cache-->>Controller: OK
deactivate Cache
Controller-->>RBus: stats_data
deactivate Controller
RBus-->>Client: Return fresh value
end
deactivate RBus7. TR-181 SET Request
sequenceDiagram
participant Client as RDK Component
participant RBus as RBus Thread
participant Controller
participant HAL
participant Cache
participant Logger
Client->>RBus: SET Device.EPON.ONU.1.Enable=true
activate RBus
RBus->>Controller: set_parameter(Enable, true)
activate Controller
Controller->>Controller: validate_parameter()
alt Valid Parameter
Controller->>HAL: epon_hal_set_enable(true)
activate HAL
HAL-->>Controller: Success
deactivate HAL
Controller->>Cache: invalidate_related_cache()
activate Cache
Cache-->>Controller: OK
deactivate Cache
Controller->>Logger: log(INFO, "Parameter set")
Controller->>RBus: publish_event(PARAM_CHANGED)
Controller-->>RBus: Success
RBus-->>Client: Success
else Invalid Parameter
Controller->>Logger: log(ERROR, "Invalid parameter")
Controller-->>RBus: Error
RBus-->>Client: Error
end
deactivate Controller
deactivate RBus8. Stats Harvesting Sequence
sequenceDiagram
participant Timer
participant StatsPoller
participant HAL
participant Cache
participant Telem as Telemetry
participant Logger
loop Every 15 minutes
Timer->>StatsPoller: Timer Expired
activate StatsPoller
StatsPoller->>Logger: log(INFO, "Harvesting stats")
StatsPoller->>HAL: epon_hal_get_all_stats()
activate HAL
HAL-->>StatsPoller: all_stats
deactivate HAL
loop For each stat parameter
StatsPoller->>Cache: cache_set(param, value, 30)
activate Cache
Cache-->>StatsPoller: OK
deactivate Cache
end
StatsPoller->>Telem: report_stats(all_stats)
activate Telem
Telem->>Telem: format_for_t2()
Telem->>Telem: send_to_t2()
Telem-->>StatsPoller: OK
deactivate Telem
StatsPoller->>Logger: log(INFO, "Harvest complete")
deactivate StatsPoller
end9. Alarm Event Sequence
sequenceDiagram
participant HAL
participant EventL as Event Listener
participant Controller
participant Logger
participant Telem as Telemetry
HAL->>EventL: alarm_event(severity, id, desc)
activate EventL
EventL->>Controller: processAlarm(alarm)
activate Controller
Controller->>Logger: log(severity, alarm.desc)
activate Logger
Logger->>Logger: write_to_log_file()
Logger-->>Controller: OK
deactivate Logger
alt Severity is Critical or Error
Controller->>Telem: raise_telemetry_event(alarm)
activate Telem
Telem->>Telem: format_alarm_event()
Telem->>Telem: send_to_t2()
Telem-->>Controller: OK
deactivate Telem
else Severity is Warning or Info
Controller->>Controller: Log only (already done)
end
Controller-->>EventL: Processed
deactivate Controller
deactivate EventL10. Error Recovery Sequence
sequenceDiagram
participant Component
participant HAL
participant Logger
participant Controller
Component->>HAL: hal_operation()
activate HAL
HAL-->>Component: Error
deactivate HAL
Component->>Logger: log(ERROR, "HAL failure")
Component->>Component: attempt = 1
loop Retry up to 3 times
Component->>Component: wait(backoff_delay)
Component->>HAL: hal_operation()
activate HAL
alt Success
HAL-->>Component: Success
Component->>Logger: log(INFO, "Recovery successful")
else Still Failing
HAL-->>Component: Error
Component->>Component: attempt++
end
deactivate HAL
end
alt Max Retries Exceeded
Component->>Logger: log(FATAL, "HAL unrecoverable")
Component->>Controller: notify_critical_error()
activate Controller
Controller->>Controller: trigger_watchdog_restart()
deactivate Controller
endGo To Top

