Updating docs and releasing 1.0.0
Change-Id: Ife63de3f51be9f24f16e174a2319bd6d914abe13
diff --git a/docs/source/development/internals.rst b/docs/source/development/internals.rst
new file mode 100644
index 0000000..f936f64
--- /dev/null
+++ b/docs/source/development/internals.rst
@@ -0,0 +1,221 @@
+.. _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
+ }
+ }
\ No newline at end of file