Add defines, enums and headers for MSVC
[cascardo/ovs.git] / INSTALL.Windows
1         How to Build the Kernel module & userspace daemons for Windows
2         ==============================================================
3
4 Autoconf, Automake and Visual C++:
5 ---------------------------------
6 Open vSwitch on Linux uses autoconf and automake for generating Makefiles.
7 It will be useful to maintain the same build system while compiling on Windows
8 too.  One approach is to compile Open vSwitch in a MinGW environment that
9 contains autoconf and automake utilities and then use Visual C++ as a compiler
10 and linker.
11
12 The following explains the steps in some detail.
13
14 * Install Mingw on a Windows machine by following the instructions at:
15 http://www.mingw.org/wiki/Getting_Started
16
17 This should install mingw at C:\Mingw and msys at C:\Mingw\msys.
18 Add "C:\MinGW\bin" and "C:\Mingw\msys\1.0\bin" to PATH environment variable
19 of Windows.
20
21 You can either use the MinGW installer or the command line utility 'mingw-get'
22 to install both the base packages and additional packages like automake and
23 autoconf(version 2.68).
24
25 Also make sure that /mingw mount point exists. If its not, please add/create
26 the following entry in /etc/fstab - 'C:/MinGW /mingw'.
27
28 * Install the latest Python 2.x from python.org and verify that its path is
29 part of Windows' PATH environment variable.
30
31 * You will need at least Visual Studio 2013 to compile userspace binaries. In
32 addition to that, if you want to compile the kernel module you will also need to
33 install Windows Driver Kit (WDK) 8.1 Update.
34
35 It is important to get the Visual Studio related environment variables and to
36 have the $PATH inside the bash to point to the proper compiler and linker. One
37 easy way to achieve this is to get into the "Developer Command prompt for visual
38 studio" and through it enter into the bash shell available from msys.
39
40 If after the above step, a 'which link' inside MSYS's bash says,
41 "/bin/link.exe", rename /bin/link.exe to something else so that the
42 Visual studio's linker is used.
43
44 * For pthread support, install the library, dll and includes of pthreads-win32
45 project from
46 ftp://sourceware.org/pub/pthreads-win32/prebuilt-dll-2-9-1-release to a
47 directory (e.g.: C:/pthread).
48
49 * Get the Open vSwitch sources from either cloning the repo using git
50 or from a distribution tar ball.
51
52 * If you pulled the sources directly from an Open vSwitch Git tree,
53   run boot.sh in the top source directory:
54
55   % ./boot.sh
56
57 * In the top source directory, configure the package by running the
58   configure script.  You should provide some configure options to choose
59   the right compiler, linker, libraries, Open vSwitch component installation
60   directories, etc. For example,
61
62   % ./configure CC=./build-aux/cccl LD="`which link`" LIBS="-lws2_32" \
63     --prefix="C:/openvswitch/usr" --localstatedir="C:/openvswitch/var" \
64     --sysconfdir="C:/openvswitch/etc" --with-pthread="C:/pthread"
65
66 * Run make for the ported executables in the top source directory, e.g.:
67
68   % make lib/vswitch-idl.h lib/vtep-idl.h ofproto/ipfix-entities.def
69   % make ovsdb/ovsdb-server.exe ovsdb/ovsdb-tool.exe ovsdb/ovsdb-client.exe \
70          utilities/ovs-vsctl.exe utilities/ovs-ofctl.exe \
71          utilities/ovs-dpctl.exe vswitchd/ovs-vswitchd.exe \
72          utilities/ovs-appctl.exe
73
74 OpenSSL, Open vSwitch and Visual C++
75 ------------------------------------
76 To get SSL support for Open vSwitch on Windows, do the following:
77
78 * Install OpenSSL for Windows as suggested at
79 http://www.openssl.org/related/binaries.html.
80 The link as of this writing suggests to download it from
81 http://slproweb.com/products/Win32OpenSSL.html and the latest version is
82 "Win32 OpenSSL v1.0.1f".
83
84 Note down the directory where OpenSSL is installed (e.g.: C:/OpenSSL-Win32).
85
86 * While configuring the package, specify the OpenSSL directory path.
87 For example,
88
89   % ./configure CC=./build-aux/cccl LD="`which link`" LIBS="-lws2_32 ..." \
90   --prefix="C:/openvswitch/usr" --localstatedir="C:/openvswitch/var" \
91   --sysconfdir="C:/openvswitch/etc" --with-pthread="C:/pthread" --enable-ssl \
92   --with-openssl="C:/OpenSSL-Win32"
93
94 * Run make for the ported executables.
95
96 Building the Kernel module
97 --------------------------
98 We directly use the Visual Studio 2013 IDE to compile the kernel module. You can
99 open the extensions.sln file in the IDE and build the solution.
100
101 Installing the Kernel module
102 ----------------------------
103 Once you have built the solution, you can copy the following files to the
104 target Hyper-V machines:
105
106     ./datapath-windows/x64/Win8.1Debug/package/ovsext.inf
107     ./datapath-windows/x64/Win8.1Debug/package/OVSExt.sys
108     ./datapath-windows/x64/Win8.1Debug/package/ovsext.cat
109     ./datapath-windows/misc/install.cmd
110     ./datapath-windows/misc/uninstall.cmd
111
112 Steps to install the module
113 ---------------------------
114
115 01> Run ./uninstall.cmd to remove the old extension.
116 02> Run ./install.cmd to insert the new one. For this to work you will have to
117 turn on TESTSIGNING boot option or 'Disable Driver Signature Enforcement'
118 during boot.
119 03> In the Virtual Switch Manager configuration you should now see "VMWare OVS
120 Extension" under 'Virtual Switch Extensions'. Click the check box to enable the
121 extension.
122
123 Steps to run the user processes & configure VXLAN ports
124 -------------------------------------------------------
125
126 01> Create the conf db file.
127 ovsdb\ovsdb-tool.exe create conf.db .\vswitchd\vswitch.ovsschema
128
129 02> Run ovsdb-server
130 ovsdb\ovsdb-server.exe -v --remote=ptcp:6632:127.0.0.1 conf.db
131
132 03> Create integration bridge & pif bridge
133 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-br br-int
134 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-br br-pif
135
136 04> Dump the ports
137 utilities\ovs-dpctl.exe show
138
139 * Sample output shows up like this. Currently it is not possible to figure out
140 * the mapping between VIF and VM from the output.
141
142 $ utilities\ovs-dpctl.exe show
143 2014-06-27T01:55:32Z|00001|socket_util|ERR|4789:0.0.0.0:
144 socket: Either the application has not called WSAStartup, or WSAStartup failed.
145                                         <<< Ignore this error, it is harmless.
146 system@ovs-system:
147         lookups: hit:0 missed:0 lost:0
148         flows: 0
149         masks: hit:0 total:0 hit/pkt:0.00
150         port 16777216: internal            <<< VTEP created by AllowManagementOS
151                                                setting
152         port 16777225: external.1          <<< Physical NIC
153         port 16777288: vmNICEmu.1000048    <<< VIF #1
154         port 16777289: vmNICSyn.1000049    <<< VIF #2
155
156
157 05> Add the physical NIC and the internal port to br-pif
158 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-pif <port name>
159
160 Eg:
161 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-pif external.1
162 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-pif internal
163
164 06> Add the VIFs to br-int
165 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-int <port name>
166
167 Eg:
168 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-int vmNICEmu.1000048
169 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-int vmNICSyn.1000049
170
171 07> Verify the status
172 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 show
173
174 Eg:
175 $ utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 show
176 4cd86499-74df-48bd-a64d-8d115b12a9f2
177     Bridge br-pif
178         Port internal
179             Interface internal
180         Port "external.1"
181             Interface "external.1"
182         Port br-pif
183             Interface br-pif
184                 type: internal
185     Bridge br-int
186         Port br-int
187             Interface br-int
188                 type: internal
189         Port "vmNICEmu.1000048"
190             Interface "vmNICEmu.1000048"
191         Port "vmNICSyn.1000049"
192             Interface "vmNICSyn.1000049"
193
194
195 09> Run vswitchd
196 vswitchd\ovs-vswitchd.exe -v tcp:127.0.0.1:6632
197
198 10> You can figure out the port name to MAC address mapping now. (optional)
199 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 list interface
200
201 //********** VXLAN PORT CONFIGURATION (Supports Multiple ports) ************//
202
203 11> Add the vxlan port between 172.168.201.101 <-> 172.168.201.102
204 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-int vxlan-1
205 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-1 type=vxlan
206 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-1 options:local_ip=172.168.201.101
207 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-1 options:remote_ip=172.168.201.102
208 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-1 options:in_key=flow
209 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-1 options:out_key=flow
210
211 12> Add the vxlan port between 172.168.201.101 <-> 172.168.201.105
212 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-int vxlan-2
213 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-2 type=vxlan
214 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-2 options:local_ip=172.168.201.102
215 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-2 options:remote_ip=172.168.201.105
216 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-2 options:in_key=flow
217 utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-2 options:out_key=flow
218
219
220 Requirements
221 ------------
222
223 * We require that you don't disable the "Allow management operating system to
224 share this network adapter" under 'Virtual Switch Properties' > 'Connection
225 type: External network', in the HyperV virtual network switch configuration.
226
227 * Checksum Offloads
228     While there is some support for checksum/segmentation offloads in software,
229 this is still a work in progress. Till the support is complete we recommend
230 disabling TX/RX offloads for both the VM's as well as the HyperV.
231
232
233 Todo
234 ----
235
236 * OVS currently has no native support for atomics on Windows.  Pthreads
237 are used as a fallback, but some features, such as OVS-RCU are really
238 slow without native atomics support. Atomics support for Windows has to
239 be brought in.
240
241 * Investigate the working of sFlow on Windows and re-enable the unit tests.
242
243 * Sign the driver & create an MSI for installing the different OpenvSwitch
244 components on windows.