Merge "Remove unused northbound"
[netvirt.git] / README
1 DIRECTORY ORGANIZATION
2 ======================
3
4 - commons
5   +-- parent : Contains Parent pom.xml for all the ovsdb modules.
6   +-- integrationtest : Contains the parent pom.xml for all the integrationtest needs.
7
8 - distribution : Builds a working controller distribution based on the controller + ovsdb modules and other
9                  dependant modules such as openflowplugin
10   +-- opendaylight : older, OSGi-based distribution
11   +-- opendaylight-karaf : karaf-based distribution
12
13 - features : This folder contains all the Karaf related files.
14
15 - integrationtest : Contains all the PAX-Exam based integrationTests that covers IT for all the modules.
16
17 - library : Contains Schema-independent library that is a reference implementation for RFC 7047.
18             This module doesn't depend on any of the Opendaylight components.
19             This library module can also be used independently in a non-OSGi environment.
20
21 - openstack
22   +-- net-virt : Handles the Openstack Neutron ML2 and Network Service calls and performs all the logic required
23                  for Network Virtualization.
24   +-- net-virt-providers : Mostly contains data-path programming functionality via OpenFlow or potentially
25                            other protocols.
26
27 - ovs-sfc : SFC implementation using the OVSDB project. Currently it is just a shell.
28
29 - plugin : Contains Opendaylight Southbound Plugin APIs and provides a simpler API interface on top of library layer.
30            Ideally, this module should also be schema independent. But due to legacy reasons this layer contains some
31            deprecated functionality that assumes openvswitch schema.
32
33 - plugin-mdsal-adapter : Adds an MD-SAL Adapter for the OVSDB Plugin. The adapter updates the MD-SAL with nodes
34                          as they are added and removed from the inventory. The Yang model provides a reference
35                          between OVSDB nodes and the OpenFlow nodes (bridges) that they manage.
36
37 - plugin-shell : Contains a Karaf shell framework for OVSDB plugin and printCache command-line.
38
39 - resources : Contains some useful resources such as scripts, testing utilities and tools used for deployment
40               or testing the binaries generated from the OVSDB project.
41
42 - schemas :
43   +-- openvswitch : Schema wrapper that represents http://openvswitch.org/ovs-vswitchd.conf.db.5.pdf
44   +-- hardwarevtep: Schema wrapper that represents http://openvswitch.org/docs/vtep.5.pdf
45
46 - utils : MD-SAL OpenFlow and OVSDB common utilities.
47
48 HOW TO BUILD & RUN
49 ==================
50
51 Pre-requisites : JDK 1.7+, Maven 3+
52
53 1. Building a Karaf Feature and deploying it in an Opendaylight Karaf distribution :
54    1. This is a new method for Opendaylight distribution wherein there is no defined editions such
55       as Base, Virtualization or SP editions. The end-customer can choose to deploy the required feature
56       based on his/her deployment needs.
57
58    2. From the root ovsdb/ directory, execute "mvn clean install"
59
60    3. Next unzip the distribution-karaf-<VERSION_NUMBER>-SNAPSHOT.zip file created from step #2 in
61       the directory ovsdb/distribution/opendaylight-karaf/target like so:
62       "unzip distribution-karaf-<VERSION_NUMBER>-SNAPSHOT.zip"
63
64    4. Once karaf has started and you see the Opendaylight ascii art in the console, the last step
65       is to start the OVSDB plugin framework with the following command in the karaf console:
66       "feature:install odl-ovsdb-openstack" (without quotation marks).
67
68    Sample output from Karaf console :
69
70    opendaylight-user@root>feature:list | grep -i ovsdb
71    odl-ovsdb-all                    | 1.0.0-SNAPSHOT      |           | ovsdb-1.0.0-SNAPSHOT                  | OpenDaylight :: OVSDB :: all
72    odl-ovsdb-library                | 1.0.0-SNAPSHOT      | x         | ovsdb-1.0.0-SNAPSHOT                  | OVSDB :: Library
73    odl-ovsdb-schema-openvswitch     | 1.0.0-SNAPSHOT      | x         | ovsdb-1.0.0-SNAPSHOT                  | OVSDB :: Schema :: Open_vSwitch
74    odl-ovsdb-schema-hardwarevtep    | 1.0.0-SNAPSHOT      | x         | ovsdb-1.0.0-SNAPSHOT                  | OVSDB :: Schema :: hardware_vtep
75    odl-ovsdb-openstack              | 1.0.0-SNAPSHOT      | x         | ovsdb-1.0.0-SNAPSHOT                  | OpenDaylight :: OVSDB :: OpenStack Network Virtual
76    odl-ovsdb-ovssfc                 | 0.0.1-SNAPSHOT      |           | ovsdb-0.0.1-SNAPSHOT                  | OpenDaylight :: OVSDB :: OVS Service Function Chai
77
78
79 2. Building a bundle and deploying it in an Opendaylight Karaf distribution :
80    This method can be used to update and test new code in a bundle. If the bundle of interest is rebuilt as a
81    snapshot with the same version as what it already defined in a feature repo then that new bundle will be used
82    when the feature is loaded in karaf. If karaf is already running with the feature loaded then follow the steps
83    below to load the new bundle:
84
85    1. Find the bundle id of the bundle you are going to rebuild:
86       - bundle:list -s | grep <bundlename>, i.e. bundle:list -s | grep odl-ovsdb-plugin
87
88    2. Instruct karaf to watch the new bundle and reload it if it changes:
89       - bundle:watch <id>
90       - The id is the value returned in 1 above.
91       - You can also watch the bundle URL itself:
92         - bundle:watch mvn:org.opendaylight.ovsdb/plugin/1.0.2-SNAPSHOT
93
94    3. Rebuild bundle.
95       - cd bundle dir, i.e. cd ovsdb/plugin
96       - mvn clean install. This will install the new bundle into the local mvn repo.
97
98    4. karaf will see the changed bundle and reload it.
99
100
101 3. Building an OVSDB based Opendaylight Virtualization edition:
102    1. This is the legacy way to build and distribute Opendaylight archives. This method was
103       followed in Hydrogen. It might still work in Helium but it is best effort for support.
104       The preferred method for Helium and later is to use karaf.
105
106    2. From the root folder(that hosts this README), execute "mvn clean install"
107       That should build a full distribution archive and distribution directory that will contain
108       Opendaylight Controller + OVSDB bundles + Openflow Plugins under
109       distribution/opendaylight/target/distribution.ovsdb-X.X.X-osgipackage
110
111    3. Upon successful completion of a build, the Controller with OVSDB can be executed by :
112       cd distribution/opendaylight/target/distribution.ovsdb-X.X.X-osgipackage/opendaylight/
113       ./run.sh -virt ovsdb
114
115 4. Building a Karaf Feature and deploying it in an Opendaylight Karaf distribution :
116 *** This method is deprecated.
117    1. This is a new method for Opendaylight distribution wherein there is no defined editions such
118       as Base, Virtualization or SP editions. Rather each of the projects will generate features in
119       form of .kar files. The end-customer can choose to deploy the required feature based on his/her
120       deployment needs.
121
122    2. From the features/ directory, execute "mvn clean install"
123       This will generate a kar file such as "features/target/ovsdb-features-1.2.1-SNAPSHOT.kar"
124
125    3. Download (or build from controller project) the Karaf distribution :
126       http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/controller/distribution.opendaylight-karaf/
127       Sample zip file :
128       http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/controller/distribution.opendaylight-karaf/1.4.2-SNAPSHOT/distribution.opendaylight-karaf-1.4.2-20140718.075612-407.zip
129
130    4. unzip the downloaded (or built) distribution and copy the ovsdb-features-x.x.x.kar file (from step 2) into
131       the unzipped distribution.opendaylight-karaf-X.X.X/deploy/ directory.
132
133    5. run Karaf from within the distribution.opendaylight-karaf-X.X.X/ directory using "bin/karaf"
134
135    Sample output from Karaf console :
136
137    opendaylight-user@root>kar:list
138    KAR Name
139    -----------------------------
140    ovsdb-features-1.2.1-SNAPSHOT
141
142    opendaylight-user@root>feature:list | grep ovsdb
143    odl-ovsdb-all | 1.2.1-SNAPSHOT | x | ovsdb-1.2.1-SNAPSHOT | OpenDaylight :: OVSDB :: all
144    odl-ovsdb-library | 1.0.0-SNAPSHOT | x | ovsdb-1.2.1-SNAPSHOT | OVSDB :: Library
145    odl-ovsdb-schema-openvswitch | 1.0.0-SNAPSHOT | x | ovsdb-1.2.1-SNAPSHOT | OVSDB :: Schema :: Open_vSwitch
146    odl-ovsdb-schema-hardwarevtep | 1.0.0-SNAPSHOT | x | ovsdb-1.2.1-SNAPSHOT | OVSDB :: Schema :: hardware_vtep
147    odl-ovsdb-plugin | 1.0.0-SNAPSHOT | x | ovsdb-1.2.1-SNAPSHOT | OpenDaylight :: OVSDB :: Plugin
148
149    opendaylight-user@root>bundle:list | grep OVSDB
150    186 | Active | 80 | 1.0.0.SNAPSHOT | OVSDB Library
151    199 | Active | 80 | 1.0.0.SNAPSHOT | OVSDB Open_vSwitch Schema
152    200 | Active | 80 | 1.0.0.SNAPSHOT | OVSDB hardware_vtep Schema
153    201 | Active | 80 | 1.0.0.SNAPSHOT | OpenDaylight OVSDB Plugin
154
155 Running The Integration Tests
156 =============================
157
158 To run the integration tests locally the following components are required:
159
160  - Docker
161  - Fig or Docker Compose
162
163 To install docker, follow the installation guide for your platform:
164    http://docs.docker.com/installation/
165
166 To install fig:
167    http://www.fig.sh/install.html
168
169 To install Docker Compose:
170    http://docs.docker.com/compose/install/
171
172 To run the integration tests:
173
174     mvn clean install
175     # The first time you need to set everything up
176     fig up -d
177     # Later runs only need the containers to be started
178     fig start
179     # OSX
180     mvn verify -Pintegrationtest -Dovsdbserver.ipaddress=$(boot2docker ip 2>/dev/null) -Dovsdbserver.port=6640
181     # Linux
182     mvn verify -Pintegrationtest -Dovsdbserver.ipaddress=127.0.0.1 -Dovsdbserver.port=6640
183     fig stop
184
185 On Linux you'll generally need to run fig as root (sudo fig ...).
186
187 If you're using Docker Compose, replace "fig" above with "docker-compose" and ignore the warnings.
188
189 Skipping unit tests and karaf tests
190 ====================
191
192 mvn clean install -Dmaven.test.skip=true -Dskip.karaf=true