title RanStateChangeManager R5 participant Caller as C participant RanConnectStatusChange\nManager as SCM participant Rnib\nDataService as RNIB participant Rnib\nWriter as WR participant SDL participant RanList\nManager as LH participant RanAlarm\nService as AH C->SCM: ChangeStatus(nodeb, nextStatus) note over SCM: According to source and target statuses,\ndetermine one of these raw events:\n CONNECTED\n DISCONNECTED\n NONE note over SCM: If event != NONE,\nprefix raw event with RanId:\ni.e. _CONNECTED SCM->SCM: Set Nodeb's status,\n in memory alt event=CONNECTED/DISCONNECTED SCM->+RNIB: [NEW] UpdateNodebConnectivityState(nodeb, event) note over RNIB: Pre-configured CHANNEL RNIB->+WR: [NEW] UpdateNodebConnectivityState(nodeb, CHANNEL, event) WR->+SDL: SetAndPublish({CHANNEL,event}, {key:nodeb}) else event=NONE SCM->RNIB: UpdateNodebInfo(nodeb) RNIB->WR: UpdateNodebInfo(nodeb) WR->SDL: Set({key:nodeb}) end SDL-->-WR: ok/err WR-->-RNIB: ok/err RNIB-->-SCM: ok/err alt rNib error note over SCM: log and stop... SCM->C: error else success note over SCM: proceed... end SCM->+LH: UpdateRanState(nodeb) note over LH: TBD... LH-->-SCM: ok/err note over SCM: log error and proceed... alt event=CONNECTED/DISCONNECTED SCM->+AH: SetConnectivityChangeAlarm(nodeb) note over AH: TBD... AH-->-SCM: ok/err note over SCM: In case of error,\nlog and proceed... else event=NONE note over SCM: No alarm... end SCM->C: ok