+```
+ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lswitch-list
+```
+
+* Docker creates your logical port and attaches it to the logical network
+in a single step.
+
+For e.g., to attach a logical port to network 'foo' inside cotainer busybox,
+run:
+
+```
+docker run -itd --net=foo --name=busybox busybox
+```
+
+* List all your logical ports.
+
+Docker currently does not have a CLI command to list all your logical ports.
+But you can look at them in the OVN database, by running:
+
+```
+ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lport-list $NID
+```
+
+* You can also create a logical port and attach it to a running container.
+
+```
+docker network create -d openvswitch --subnet=192.168.2.0/24 bar
+docker network connect bar busybox
+```
+
+You can delete your logical port and detach it from a running container by
+running:
+
+```
+docker network disconnect bar busybox
+```
+
+* You can delete your logical switch by running:
+
+```
+docker network rm bar
+```
+
+
+The "underlay" mode
+===================
+
+This mode requires that you have a OpenStack setup pre-installed with OVN
+providing the underlay networking.
+
+* One time setup.
+
+A OpenStack tenant creates a VM with a single network interface (or multiple)
+that belongs to management logical networks. The tenant needs to fetch the
+port-id associated with the interface via which he plans to send the container
+traffic inside the spawned VM. This can be obtained by running the
+below command to fetch the 'id' associated with the VM.
+
+```
+nova list
+```
+
+and then by running:
+
+```
+neutron port-list --device_id=$id
+```
+
+Inside the VM, download the OpenStack RC file that contains the tenant
+information (henceforth referred to as 'openrc.sh'). Edit the file and add the
+previously obtained port-id information to the file by appending the following
+line: export OS_VIF_ID=$port_id. After this edit, the file will look something
+like:
+
+```
+#!/bin/bash
+export OS_AUTH_URL=http://10.33.75.122:5000/v2.0
+export OS_TENANT_ID=fab106b215d943c3bad519492278443d
+export OS_TENANT_NAME="demo"
+export OS_USERNAME="demo"
+export OS_VIF_ID=e798c371-85f4-4f2d-ad65-d09dd1d3c1c9
+```
+
+* Create the Open vSwitch bridge.
+
+If your VM has one ethernet interface (e.g.: 'eth0'), you will need to add
+that device as a port to an Open vSwitch bridge 'breth0' and move its IP
+address and route related information to that bridge. (If it has multiple
+network interfaces, you will need to create and attach an Open vSwitch bridge
+for the interface via which you plan to send your container traffic.)
+
+If you use DHCP to obtain an IP address, then you should kill the DHCP client
+that was listening on the physical Ethernet interface (e.g. eth0) and start
+one listening on the Open vSwitch bridge (e.g. breth0).
+
+Depending on your VM, you can make the above step persistent across reboots.
+For e.g.:, if your VM is Debian/Ubuntu, you can read
+[openvswitch-switch.README.Debian]. If your VM is RHEL based, you can read
+[README.RHEL]
+
+
+* Start the Open vSwitch network driver.
+
+The Open vSwitch driver uses the Python's flask module to listen to
+Docker's networking api calls. The driver also uses OpenStack's
+python-neutronclient libraries. So, if your host does not have Python's
+flask module or python-neutronclient install them with:
+
+```
+easy_install -U pip
+pip install python-neutronclient
+pip install Flask
+```
+
+Source the openrc file. e.g.:
+````
+. ./openrc.sh
+```
+
+Start the network driver and provide your OpenStack tenant password
+when prompted.
+
+```
+ovn-docker-underlay-driver --bridge breth0 --detach
+```