| .. _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 |
| } |
| } |