blob: f936f64a2c7c13fa213b94080a567ba8b72b476e [file] [log] [blame]
.. _BBSim Internals:
BBSim Internals
===============
.. toctree::
:maxdepth: 1
:caption: Other Resources:
development-dependencies.rst
BBSim heavily leverages state machines to control the device lifecycle
and channels to propagate and react to state changes.
The most common pattern throughout the code is that any operations,
for example a gRPC call to the ``ActivateOnu`` endpoint will result in:
1. A state change in the ONU device, that will
2. Send a message on the ONU Channel, that will
3. Trigger some operation (for example send Indications to the OLT)
.. _OLT State Machine:
OLT State Machine
-----------------
Here is a list of possible states for an OLT:
.. list-table:: OLT States
:header-rows: 1
* -
- Initialized
- Enabled
- Disabled
- Deleted
* - Data model is created for OLT, NNIs, PONs and ONUs
- Starts the listener on the NNI interface and the DHCP server,
Starts the OLT gRPC server,
Moves the ONUs to ``initialized`` state
- Sends OLT, NNIs and PONs ``UP`` indications
Transition the ONUs into ``discovered`` state
- Transition the ONUs into ``disabled`` state
Sends OLT, NNIs and PONs ``UP`` indications
- Stops the OLT gRPC Server
Below is a diagram of the state machine allowed transitions:
.. graphviz::
digraph {
rankdir=LR
newrank=true
graph [pad="1,1" bgcolor="#cccccc"]
node [style=filled, fillcolor="#bee7fa"]
created -> initialized -> enabled -> disabled -> deleted
disabled -> enabled
deleted -> initialized
}
.. _ONU State Machine:
ONU State Machine
-----------------
Here is a list of possible state transitions for an ONU in BBSim:
.. list-table:: ONU States
:widths: 10 35 10 45
:header-rows: 1
* - Transition
- Starting States
- End State
- Notes
* -
-
- created
-
* - initialize
- created, disabled, pon_disabled
- initialized
-
* - discover
- initialized
- discovered
-
* - enable
- discovered, disabled, pon_disabled
- enabled
-
* - disable
- enabled
- disabled
- This state signifies that the ONU has been disabled
* - pon_disabled
- enabled
- pon_disabled
- This state signifies that the parent PON Port has been disabled, the ONU state hasn't been affected.
Below is a diagram of the state machine:
- In blue PON related states
- In purple operator driven states
.. graphviz::
digraph {
rankdir=LR
newrank=true
graph [pad="1,1" bgcolor="#cccccc"]
node [style=filled]
subgraph {
node [fillcolor="#bee7fa"]
created [peripheries=2]
initialized
discovered
{
rank=same
enabled
disabled [fillcolor="#f9d6ff"]
pon_disabled [fillcolor="#f9d6ff"]
}
{created, disabled} -> initialized -> discovered -> enabled
}
disabled -> enabled
enabled -> pon_disabled
pon_disabled -> {initialized, disabled, enabled}
}
.. _Service State Machine:
Service State Machine
---------------------
..
TODO add table
.. graphviz::
digraph {
rankdir=TB
newrank=true
graph [pad="1,1" bgcolor="#cccccc"]
node [style=filled]
subgraph cluster_lifecycle {
node [fillcolor="#bee7fa"]
style=dotted
created [peripheries=2]
initialized
disabled
created -> initialized -> disabled
disabled -> initialized
}
subgraph cluster_eapol {
style=rounded
style=dotted
node [fillcolor="#e6ffc2"]
auth_started [peripheries=2]
eap_start_sent
eap_response_identity_sent
eap_response_challenge_sent
{
rank=same
eap_response_success_received
auth_failed
}
auth_started -> eap_start_sent -> eap_response_identity_sent -> eap_response_challenge_sent -> eap_response_success_received
auth_started -> auth_failed
eap_start_sent -> auth_failed
eap_response_identity_sent -> auth_failed
eap_response_challenge_sent -> auth_failed
auth_failed -> auth_started
}
subgraph cluster_dhcp {
node [fillcolor="#fffacc"]
style=rounded
style=dotted
dhcp_started [peripheries=2]
dhcp_discovery_sent
dhcp_request_sent
{
rank=same
dhcp_ack_received
dhcp_failed
}
dhcp_started -> dhcp_discovery_sent -> dhcp_request_sent -> dhcp_ack_received
dhcp_started -> dhcp_failed
dhcp_discovery_sent -> dhcp_failed
dhcp_request_sent -> dhcp_failed
dhcp_ack_received dhcp_failed
}
subgraph cluster_igmp {
node [fillcolor="#ffaaff"]
style=rounded
style=dotted
igmp_join_started [peripheries=2]
igmp_join_started -> igmp_join_error -> igmp_join_started
igmp_join_started -> igmp_left
}
}