Merge "[CORD-3154] Adding configuration to block host-learning in the OLT fabric port"
diff --git a/SUMMARY.md b/SUMMARY.md
index df56009..0274795 100644
--- a/SUMMARY.md
+++ b/SUMMARY.md
@@ -1,6 +1,7 @@
 # Summary
 
 * [Overview](overview.md)
+    * [Navigating the Guide](navigate.md)
 * [Installation Guide](README.md)
     * [Hardware Requirements](prereqs/hardware.md)
     * [Connectivity Requirements](prereqs/networking.md)
@@ -43,16 +44,16 @@
         * [RCORD](rcord/README.md)
         * [vOLT](olt-service/README.md)
         * [vRouter](vrouter/README.md)
-* [Modeling Guide](xos/README.md)
-    * [XOS Modeling Framework](xos/dev/xproto.md)
-    * [Core Models](xos/core_models.md)
-    * [Security Policies](xos/security_policies.md)
-    * [Writing Synchronizers](xos/dev/synchronizers.md)
-        * [Design Guidelines](xos/dev/sync_arch.md)
-        * [Implementation Details](xos/dev/sync_impl.md)
-        * [Synchronizer Reference](xos/dev/sync_reference.md)
 * [Development Guide](developer/developer.md)
     * [Getting the Source Code](developer/getting_the_code.md)
+    * [Writing Models and Synchronizers](xos/README.md)
+        * [XOS Modeling Framework](xos/dev/xproto.md)
+        * [Core Models](xos/core_models.md)
+        * [Security Policies](xos/security_policies.md)
+        * [Writing Synchronizers](xos/dev/synchronizers.md)
+            * [Design Guidelines](xos/dev/sync_arch.md)
+            * [Implementation Details](xos/dev/sync_impl.md)
+            * [Synchronizer Reference](xos/dev/sync_reference.md)
     * [Developer Workflows](developer/workflows.md)
     * [Building Docker Images](developer/imagebuilder.md)
     * [Platform Services](developer/platform.md)
diff --git a/developer/developer.md b/developer/developer.md
index fef811f..a1fc60c 100644
--- a/developer/developer.md
+++ b/developer/developer.md
@@ -1,9 +1,8 @@
 # Development Guide
 
-This guide describes workflows and best practices for developers. If
-you are a service developer, you will need to consult this guide and
-the companion [Modeling Guide](../xos/README.md) that describes how
-define models and synchronizers for services being onboarded into
+This guide describes workflows and best practices for developers.
+If you are a service developer, this includes information on how to
+write models and synchronizers for services being on-boarded into
 CORD. If you are a platform developer, you will find information about
 the platform services typically integrated into CORD (e.g.,
 Kubernetes, OpenStack, VTN). Service developers may be interested in
diff --git a/navigate.md b/navigate.md
new file mode 100644
index 0000000..a92bb01
--- /dev/null
+++ b/navigate.md
@@ -0,0 +1,88 @@
+# Navigating the Guide
+
+The guide is organized around the major stages in the lifecycle of CORD:
+
+* [Installation](README.md): Installing (and later upgrading) CORD.
+* [Operations](operating_cord/operating_cord.md): Operating an already
+  installed CORD deployment.
+* [Development](developer/developer.md): Developing new functionality
+  to be included in CORD.
+* [Testing](cord-tester/README.md): Testing functionality to be
+ included in CORD.
+
+## Navigating CORD
+
+These are all fairly obvious. What's less obvious is the relationship among
+the toolset (and corresponding specification files) used for each stage.
+Understanding these relationships is helpful in navigating CORD.
+
+* **Installation (Helm):** Installing CORD means installing a collection
+  of Docker containers in a Kubernetes cluster. We use Helm to carry out
+  the installation, with the valid configurations defined by a set of
+  `helm-charts`. These charts specify the version of each container to be
+  deployed, and so they also play a role in upgrading a running system.
+  More information about `helm-charts` can be found [here](charts/helm.md).
+
+* **Operations (TOSCA):** A running CORD POD supports multiple Northbound
+  Interfaces (e.g,. a GUI and REST API), but we typically use `TOSCA` to specify
+  a workflow for configuring and provisioning a running system. A freshly
+  installed CORD POD has a set of control plane and platform level containers
+  running (e.g., XOS, ONOS, OpenStack), but until provisioned using `TOSCA`,
+  there are no services and no service graph. More information about `TOSCA`
+  can be found [here](xos-tosca/README.md).
+
+* **Development (XOS):** The services running in an operational system
+  are typically deployed as Docker containers, paired with a model that
+  specifies how the service is to be on-boarded into CORD. This model is
+  writen in the `xproto` modeling language, and processed by the XOS
+  tool-chain. Among other things, this tool-chain generates the
+  TOSCA-engine that is used to process the configuration and provisioning
+  workflows used to operate CORD. More information about `xproto` (and
+  other details about on-boarding a service) can be found
+  [here](xos/dev/xproto.md).
+
+* **Testing (Jenkins):** Full CORD PODS (as well as individual components
+  of CORD) are installed on both physical and virtual environment, and run
+  through a series of tests. Full PODS are tested nightly, and individual
+  components are tested upon every commit Gerrit. These tests are specified
+  using `Jenkinfiles` and `JJB`. An overview of how CORD is tested can be found
+  [here](cord-tester/README.md).
+
+These tools and containers are inter-related as follows:
+
+* An initial install brings up a set of XOS-related containers (e.g., `xos-core`,
+  `xos-gui`, `xos-tosca`) that have been configured with a base set of models.
+  Of these, the `xos-tosca` container implements the TOSCA engine, which
+  takes TOSCA workflows as input and configures/provisions CORD accordingly.
+
+* While the install and operate stages are distinct, for convenience,
+  some helm-charts elect to launch a `tosca-loader` container
+  (in Kubernetes parlance, it's a *job* and not a *service*) to load an initial
+  TOSCA workflow into a newly deployed set of services. This is how a
+  service graph is typically instantiated.
+
+* Not all services run as Docker containers. Some services run in VMs
+  managed by OpenStack (this is currently the case for M-CORD) and
+  some services are implemented as ONOS applications that have been
+  packaged using Maven. In such cases, the VM image and the Maven
+  package are still specified in the TOSCA workflow.
+
+* Every service (whether implemented in Docker, OpenStack, or ONOS)
+  has counter-part *synchronizer* container running as part of the CORD
+  control plane (e.g., `volt-synchronizer` for the vOLT service). Typically,
+  the helm-chart for a service launches this synchronizer container, whereas
+  the TOSCA worflow creates, provisions, and initializes the backend container,
+  VM, or ONOS app.
+
+* Bringing up additional services in a running POD involves executing
+  helm-charts to install the new service's synchronizer container, which
+  in turn loads the corresponding new models into XOS. This load then
+  triggers and upgrade and restart of the TOSCA engine (and other NBIs),
+  which is a pre-requisite for configuring and provisioning that new service.
+
+* Upgrading an existing service is similar to bringing up a new service,
+  where we depend on Kubernetes to incrermentally roll out the containers
+  that implement the service (and rollback if necessarily), and we depend
+  on XOS to migrate from the old model to the new model (and support
+  both old and new APIs during the transition period). Upgrading existing
+  services has not been thoroughly tested.