How to enable the Nicira NVP integration.

When configuring a zone create a new physical network for "Guest" traffic and 
select "STT" as the isolation type. Set the Xen traffic label for "Guest" 
traffic to the label of the integration bridge (refer to the Nicira 
Documentation for setting up the integration bridge). Note that this requires 
all traffic types to have their traffic labels set.

These steps are specified by the API calls as there is currently no GUI 
available.

  1. addNetworkServiceProvider
    name="NiciraNvp", 
    physicalnetworkid=<see above>, 
    servicelist="Connectivity"
  2. updateNetworkServiceProvider
    id=<id from step1>, 
    state="Enabled"
  3. addNiciraNvpDevice
    physicalnetworkid=<see step 1>, 
    hostname=<hostname or IP of the controller>
    username=<admin username>
    password=<admin password>
    transportzoneuuid=<transport zone uuid>

New API Calls 

The following API calls are added to CloudStack to support the integrations with
the Nicira NVP platform. Please see the API documentation of CloudStack for 
parameters and return values.

How to use the Nicira integration

When creating a guest network make sure it is created in the physical network 
with the isolation type set to "STT". When the first virtual machine is 
launched in this network the NiciraNvpNetworkGuru will configure a logical 
switch on the NVP Controller. During the startup of a virtual machine the 
NiciraNvpElement will create a logical port for any NICs in the guest networks
and attach the port to the existing logical swith.

Debugging/Troubleshooting

All elements created on the NVP controller have tags with the name of the 
account, this can be used to search the items using the NVP manager. The NVP 
uuid of the logical switch is also stored in the BroadcastUri of the 
corresponding Guest network in an lswitch uri scheme. The CloudStack uuid of 
the NIC is used to make the Vif attachement on the logical switchport.

The following classes should be set to log level debug when troubleshooting.
com.cloud.network; Most NiciraNvp related objects live in this package and subpackages
org.apache.commons.httpclient; used by NiciraNvpApi to make calls to the SDN Controller

httpclient.wire; wirelevel http tracing of httpclient
 
Please report any findings to the developer mailing list.

TODO

Regarding the changes made to CitrixResourceBase for the NiciraNvp integration:

Since there in no flexibility to tag VIF's as Nicira integration would want, we can leave the changes you done in the CitrixResourceBase for now.
But we may need to get rid of custom handling and make it more generic in the long run. One of the idea Alex & Chiradeep suggested as a solution is to have NicTO handler function which takes in NicTo and returns VIF object. So this handler needs to be implemented as CloudStack adapter, and be implemented in the Nicira integration plug-in. CitrixResoucebase needs to be changed to load the handler adapters if there is any configured adapter.