]> git.proxmox.com Git - mirror_ovs.git/blame - INSTALL.Windows.md
testsuite: work around patch bug
[mirror_ovs.git] / INSTALL.Windows.md
CommitLineData
542cc9bb
TG
1How to Build the Kernel module & userspace daemons for Windows
2==============================================================
c803536e
SS
3
4Autoconf, Automake and Visual C++:
5---------------------------------
6Open vSwitch on Linux uses autoconf and automake for generating Makefiles.
7It will be useful to maintain the same build system while compiling on Windows
8too. One approach is to compile Open vSwitch in a MinGW environment that
9contains autoconf and automake utilities and then use Visual C++ as a compiler
10and linker.
11
12The following explains the steps in some detail.
13
14* Install Mingw on a Windows machine by following the instructions at:
15http://www.mingw.org/wiki/Getting_Started
16
17This should install mingw at C:\Mingw and msys at C:\Mingw\msys.
18Add "C:\MinGW\bin" and "C:\Mingw\msys\1.0\bin" to PATH environment variable
19of Windows.
20
21You can either use the MinGW installer or the command line utility 'mingw-get'
22to install both the base packages and additional packages like automake and
23autoconf(version 2.68).
24
25Also make sure that /mingw mount point exists. If its not, please add/create
26the 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
29part of Windows' PATH environment variable.
30
31* You will need at least Visual Studio 2013 to compile userspace binaries. In
32addition to that, if you want to compile the kernel module you will also need to
33install Windows Driver Kit (WDK) 8.1 Update.
34
35It is important to get the Visual Studio related environment variables and to
36have the $PATH inside the bash to point to the proper compiler and linker. One
37easy way to achieve this is to get into the "Developer Command prompt for visual
38b01df6
GS
38studio" and through it enter into the bash shell available from msys by typing
39'bash --login'.
c803536e
SS
40
41If after the above step, a 'which link' inside MSYS's bash says,
42"/bin/link.exe", rename /bin/link.exe to something else so that the
38b01df6
GS
43Visual studio's linker is used. You should also see a 'which sort' report
44"/bin/sort.exe".
c803536e
SS
45
46* For pthread support, install the library, dll and includes of pthreads-win32
47project from
48ftp://sourceware.org/pub/pthreads-win32/prebuilt-dll-2-9-1-release to a
49directory (e.g.: C:/pthread).
50
51* Get the Open vSwitch sources from either cloning the repo using git
52or from a distribution tar ball.
53
54* If you pulled the sources directly from an Open vSwitch Git tree,
55 run boot.sh in the top source directory:
56
542cc9bb 57 % ./boot.sh
c803536e
SS
58
59* In the top source directory, configure the package by running the
60 configure script. You should provide some configure options to choose
61 the right compiler, linker, libraries, Open vSwitch component installation
62 directories, etc. For example,
63
542cc9bb
TG
64 % ./configure CC=./build-aux/cccl LD="`which link`" LIBS="-lws2_32" \
65 --prefix="C:/openvswitch/usr" --localstatedir="C:/openvswitch/var" \
66 --sysconfdir="C:/openvswitch/etc" --with-pthread="C:/pthread"
c803536e 67
b0e1bce5
GS
68 By default, the above enables compiler optimization for fast code.
69 For default compiler optimization, pass the "--with-debug" configure
70 option.
71
c803536e
SS
72* Run make for the ported executables in the top source directory, e.g.:
73
542cc9bb 74 % make
d9d8dbc8
NR
75
76* To run all the unit tests:
77
542cc9bb 78 % make check
c803536e
SS
79
80OpenSSL, Open vSwitch and Visual C++
81------------------------------------
82To get SSL support for Open vSwitch on Windows, do the following:
83
84* Install OpenSSL for Windows as suggested at
85http://www.openssl.org/related/binaries.html.
86The link as of this writing suggests to download it from
bb996e5b 87http://slproweb.com/products/Win32OpenSSL.html
c803536e
SS
88
89Note down the directory where OpenSSL is installed (e.g.: C:/OpenSSL-Win32).
90
91* While configuring the package, specify the OpenSSL directory path.
92For example,
93
542cc9bb
TG
94 % ./configure CC=./build-aux/cccl LD="`which link`" LIBS="-lws2_32" \
95 --prefix="C:/openvswitch/usr" --localstatedir="C:/openvswitch/var" \
96 --sysconfdir="C:/openvswitch/etc" --with-pthread="C:/pthread" \
97 --enable-ssl --with-openssl="C:/OpenSSL-Win32"
c803536e
SS
98
99* Run make for the ported executables.
100
978ce0e9
NR
101Building the Kernel datapath module
102-----------------------------------
103* We directly use the Visual Studio 2013 IDE to compile the kernel datapath.
104You can open the extensions.sln file in the IDE and build the solution.
105
106* The kernel datapath can be compiled from command line as well. The top
107level 'make' will invoke building the kernel datapath, if the
108'--with-vstudioddk' argument is specified while configuring the package.
109For example,
110
111 % ./configure CC=./build-aux/cccl LD="`which link`" LIBS="-lws2_32" \
112 --prefix="C:/openvswitch/usr" --localstatedir="C:/openvswitch/var" \
113 --sysconfdir="C:/openvswitch/etc" --with-pthread="C:/pthread" \
114 --enable-ssl --with-openssl="C:/OpenSSL-Win32" \
115 --with-vstudioddk="<WDK to use>"
116
117 Possible values for "<WDK to use>" are:
118 "Win8.1 Debug", "Win8.1 Release", "Win8 Debug" and "Win8 Release".
c803536e
SS
119
120Installing the Kernel module
121----------------------------
122Once you have built the solution, you can copy the following files to the
978ce0e9 123target Hyper-V machines.
c803536e
SS
124
125 ./datapath-windows/x64/Win8.1Debug/package/ovsext.inf
126 ./datapath-windows/x64/Win8.1Debug/package/OVSExt.sys
127 ./datapath-windows/x64/Win8.1Debug/package/ovsext.cat
128 ./datapath-windows/misc/install.cmd
129 ./datapath-windows/misc/uninstall.cmd
130
978ce0e9
NR
131The above path assumes that the kernel module has been built using Windows
132DDK 8.1 in Debug mode. Change the path appropriately, if a different WDK
133has been used.
134
c803536e
SS
135Steps to install the module
136---------------------------
137
13801> Run ./uninstall.cmd to remove the old extension.
13902> Run ./install.cmd to insert the new one. For this to work you will have to
140turn on TESTSIGNING boot option or 'Disable Driver Signature Enforcement'
141during boot.
14203> In the Virtual Switch Manager configuration you should now see "VMWare OVS
143Extension" under 'Virtual Switch Extensions'. Click the check box to enable the
144extension.
145
146Steps to run the user processes & configure VXLAN ports
147-------------------------------------------------------
148
14901> Create the conf db file.
150ovsdb\ovsdb-tool.exe create conf.db .\vswitchd\vswitch.ovsschema
151
15202> Run ovsdb-server
d4763d1d 153ovsdb\ovsdb-server.exe -v --remote=ptcp:6640:127.0.0.1 conf.db
c803536e
SS
154
15503> Create integration bridge & pif bridge
d4763d1d
JP
156utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 add-br br-int
157utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 add-br br-pif
c803536e
SS
158
15904> Dump the ports
160utilities\ovs-dpctl.exe show
161
162* Sample output shows up like this. Currently it is not possible to figure out
163* the mapping between VIF and VM from the output.
164
165$ utilities\ovs-dpctl.exe show
1662014-06-27T01:55:32Z|00001|socket_util|ERR|4789:0.0.0.0:
167socket: Either the application has not called WSAStartup, or WSAStartup failed.
168 <<< Ignore this error, it is harmless.
169system@ovs-system:
170 lookups: hit:0 missed:0 lost:0
171 flows: 0
172 masks: hit:0 total:0 hit/pkt:0.00
173 port 16777216: internal <<< VTEP created by AllowManagementOS
174 setting
175 port 16777225: external.1 <<< Physical NIC
176 port 16777288: vmNICEmu.1000048 <<< VIF #1
177 port 16777289: vmNICSyn.1000049 <<< VIF #2
178
179
18005> Add the physical NIC and the internal port to br-pif
d4763d1d 181utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 add-port br-pif <port name>
c803536e
SS
182
183Eg:
d4763d1d
JP
184utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 add-port br-pif external.1
185utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 add-port br-pif internal
c803536e
SS
186
18706> Add the VIFs to br-int
d4763d1d 188utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 add-port br-int <port name>
c803536e
SS
189
190Eg:
d4763d1d
JP
191utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 add-port br-int vmNICEmu.1000048
192utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 add-port br-int vmNICSyn.1000049
c803536e
SS
193
19407> Verify the status
d4763d1d 195utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 show
c803536e
SS
196
197Eg:
d4763d1d 198$ utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 show
c803536e
SS
1994cd86499-74df-48bd-a64d-8d115b12a9f2
200 Bridge br-pif
201 Port internal
202 Interface internal
203 Port "external.1"
204 Interface "external.1"
205 Port br-pif
206 Interface br-pif
207 type: internal
208 Bridge br-int
209 Port br-int
210 Interface br-int
211 type: internal
212 Port "vmNICEmu.1000048"
213 Interface "vmNICEmu.1000048"
214 Port "vmNICSyn.1000049"
215 Interface "vmNICSyn.1000049"
216
217
21809> Run vswitchd
d4763d1d 219vswitchd\ovs-vswitchd.exe -v tcp:127.0.0.1:6640
c803536e
SS
220
22110> You can figure out the port name to MAC address mapping now. (optional)
d4763d1d 222utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 list interface
c803536e
SS
223
224//********** VXLAN PORT CONFIGURATION (Supports Multiple ports) ************//
d9d8dbc8 225(Remove all patch ports added to create VLAN networks.)
c803536e 22611> Add the vxlan port between 172.168.201.101 <-> 172.168.201.102
d4763d1d
JP
227utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 add-port br-int vxlan-1
228utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 set Interface vxlan-1 type=vxlan
229utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 set Interface vxlan-1 options:local_ip=172.168.201.101
230utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 set Interface vxlan-1 options:remote_ip=172.168.201.102
231utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 set Interface vxlan-1 options:in_key=flow
232utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 set Interface vxlan-1 options:out_key=flow
c803536e
SS
233
23412> Add the vxlan port between 172.168.201.101 <-> 172.168.201.105
d4763d1d
JP
235utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 add-port br-int vxlan-2
236utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 set Interface vxlan-2 type=vxlan
237utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 set Interface vxlan-2 options:local_ip=172.168.201.102
238utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 set Interface vxlan-2 options:remote_ip=172.168.201.105
239utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 set Interface vxlan-2 options:in_key=flow
240utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6640 set Interface vxlan-2 options:out_key=flow
c803536e
SS
241
242
d9d8dbc8
NR
243//********** VLAN CONFIGURATION (Using patch ports) ************//
244(Remove all VXLAN ports from the configuration.)
24513> Add a patch port from br-int to br-pif
246utilities/ovs-vsctl.exe -- add-port br-int patch-to-pif
247utilities/ovs-vsctl.exe -- set interface patch-to-pif type=patch options:peer=patch-to-int
248
24914> Add a patch port from br-pif to br-int
250utilities/ovs-vsctl.exe -- add-port br-pif patch-to-int
251utilities/ovs-vsctl.exe -- set interface patch-to-int type=patch options:peer=patch-to-pif
252
25315> Re-Add the VIF ports with the VLAN tag
254utilities\ovs-vsctl.exe add-port br-int vmNICEmu.1000048 tag=900
255utilities\ovs-vsctl.exe add-port br-int vmNICSyn.1000049 tag=900
256
257
c803536e
SS
258Requirements
259------------
260
261* We require that you don't disable the "Allow management operating system to
262share this network adapter" under 'Virtual Switch Properties' > 'Connection
263type: External network', in the HyperV virtual network switch configuration.
264
265* Checksum Offloads
266 While there is some support for checksum/segmentation offloads in software,
267this is still a work in progress. Till the support is complete we recommend
268disabling TX/RX offloads for both the VM's as well as the HyperV.
269
d8a24927
GS
270Windows autobuild service
271-------------------------
272
273AppVeyor (appveyor.com) provides a free Windows autobuild service for
274opensource projects. Open vSwitch has integration with AppVeyor for
275continuous build. A developer can build test his changes for Windows by
276logging into appveyor.com using a github account, creating a new project
277by linking it to his development repository in github and triggering
278a new build.
c803536e 279
d9d8dbc8 280TODO
c803536e
SS
281----
282
c803536e
SS
283* Investigate the working of sFlow on Windows and re-enable the unit tests.
284
abe6d620
GS
285* Investigate and add the feature to provide QOS.
286
c803536e
SS
287* Sign the driver & create an MSI for installing the different OpenvSwitch
288components on windows.