]> git.proxmox.com Git - mirror_ovs.git/blame - INSTALL.Windows
ofproto-dpif-rid: correct logic error in rid_pool_alloc_id()
[mirror_ovs.git] / INSTALL.Windows
CommitLineData
c803536e
SS
1 How to Build the Kernel module & userspace daemons for Windows
2 ==============================================================
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
38studio" and through it enter into the bash shell available from msys.
39
40If 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
42Visual studio's linker is used.
43
44* For pthread support, install the library, dll and includes of pthreads-win32
45project from
46ftp://sourceware.org/pub/pthreads-win32/prebuilt-dll-2-9-1-release to a
47directory (e.g.: C:/pthread).
48
49* Get the Open vSwitch sources from either cloning the repo using git
50or 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
b0e1bce5
GS
66 By default, the above enables compiler optimization for fast code.
67 For default compiler optimization, pass the "--with-debug" configure
68 option.
69
c803536e
SS
70* Run make for the ported executables in the top source directory, e.g.:
71
d9d8dbc8
NR
72 % make
73
74* To run all the unit tests:
75
76 % make check
c803536e
SS
77
78OpenSSL, Open vSwitch and Visual C++
79------------------------------------
80To get SSL support for Open vSwitch on Windows, do the following:
81
82* Install OpenSSL for Windows as suggested at
83http://www.openssl.org/related/binaries.html.
84The link as of this writing suggests to download it from
85http://slproweb.com/products/Win32OpenSSL.html and the latest version is
86"Win32 OpenSSL v1.0.1f".
87
88Note down the directory where OpenSSL is installed (e.g.: C:/OpenSSL-Win32).
89
90* While configuring the package, specify the OpenSSL directory path.
91For example,
92
93 % ./configure CC=./build-aux/cccl LD="`which link`" LIBS="-lws2_32 ..." \
94 --prefix="C:/openvswitch/usr" --localstatedir="C:/openvswitch/var" \
95 --sysconfdir="C:/openvswitch/etc" --with-pthread="C:/pthread" --enable-ssl \
96 --with-openssl="C:/OpenSSL-Win32"
97
98* Run make for the ported executables.
99
100Building the Kernel module
101--------------------------
102We directly use the Visual Studio 2013 IDE to compile the kernel module. You can
103open the extensions.sln file in the IDE and build the solution.
104
105Installing the Kernel module
106----------------------------
107Once you have built the solution, you can copy the following files to the
108target Hyper-V machines:
109
110 ./datapath-windows/x64/Win8.1Debug/package/ovsext.inf
111 ./datapath-windows/x64/Win8.1Debug/package/OVSExt.sys
112 ./datapath-windows/x64/Win8.1Debug/package/ovsext.cat
113 ./datapath-windows/misc/install.cmd
114 ./datapath-windows/misc/uninstall.cmd
115
116Steps to install the module
117---------------------------
118
11901> Run ./uninstall.cmd to remove the old extension.
12002> Run ./install.cmd to insert the new one. For this to work you will have to
121turn on TESTSIGNING boot option or 'Disable Driver Signature Enforcement'
122during boot.
12303> In the Virtual Switch Manager configuration you should now see "VMWare OVS
124Extension" under 'Virtual Switch Extensions'. Click the check box to enable the
125extension.
126
127Steps to run the user processes & configure VXLAN ports
128-------------------------------------------------------
129
13001> Create the conf db file.
131ovsdb\ovsdb-tool.exe create conf.db .\vswitchd\vswitch.ovsschema
132
13302> Run ovsdb-server
134ovsdb\ovsdb-server.exe -v --remote=ptcp:6632:127.0.0.1 conf.db
135
13603> Create integration bridge & pif bridge
137utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-br br-int
138utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-br br-pif
139
14004> Dump the ports
141utilities\ovs-dpctl.exe show
142
143* Sample output shows up like this. Currently it is not possible to figure out
144* the mapping between VIF and VM from the output.
145
146$ utilities\ovs-dpctl.exe show
1472014-06-27T01:55:32Z|00001|socket_util|ERR|4789:0.0.0.0:
148socket: Either the application has not called WSAStartup, or WSAStartup failed.
149 <<< Ignore this error, it is harmless.
150system@ovs-system:
151 lookups: hit:0 missed:0 lost:0
152 flows: 0
153 masks: hit:0 total:0 hit/pkt:0.00
154 port 16777216: internal <<< VTEP created by AllowManagementOS
155 setting
156 port 16777225: external.1 <<< Physical NIC
157 port 16777288: vmNICEmu.1000048 <<< VIF #1
158 port 16777289: vmNICSyn.1000049 <<< VIF #2
159
160
16105> Add the physical NIC and the internal port to br-pif
162utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-pif <port name>
163
164Eg:
165utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-pif external.1
166utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-pif internal
167
16806> Add the VIFs to br-int
169utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-int <port name>
170
171Eg:
172utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-int vmNICEmu.1000048
173utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-int vmNICSyn.1000049
174
17507> Verify the status
176utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 show
177
178Eg:
179$ utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 show
1804cd86499-74df-48bd-a64d-8d115b12a9f2
181 Bridge br-pif
182 Port internal
183 Interface internal
184 Port "external.1"
185 Interface "external.1"
186 Port br-pif
187 Interface br-pif
188 type: internal
189 Bridge br-int
190 Port br-int
191 Interface br-int
192 type: internal
193 Port "vmNICEmu.1000048"
194 Interface "vmNICEmu.1000048"
195 Port "vmNICSyn.1000049"
196 Interface "vmNICSyn.1000049"
197
198
19909> Run vswitchd
200vswitchd\ovs-vswitchd.exe -v tcp:127.0.0.1:6632
201
20210> You can figure out the port name to MAC address mapping now. (optional)
203utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 list interface
204
205//********** VXLAN PORT CONFIGURATION (Supports Multiple ports) ************//
d9d8dbc8 206(Remove all patch ports added to create VLAN networks.)
c803536e
SS
20711> Add the vxlan port between 172.168.201.101 <-> 172.168.201.102
208utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-int vxlan-1
209utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-1 type=vxlan
210utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-1 options:local_ip=172.168.201.101
211utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-1 options:remote_ip=172.168.201.102
212utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-1 options:in_key=flow
213utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-1 options:out_key=flow
214
21512> Add the vxlan port between 172.168.201.101 <-> 172.168.201.105
216utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 add-port br-int vxlan-2
217utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-2 type=vxlan
218utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-2 options:local_ip=172.168.201.102
219utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-2 options:remote_ip=172.168.201.105
220utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-2 options:in_key=flow
221utilities\ovs-vsctl.exe --db=tcp:127.0.0.1:6632 set Interface vxlan-2 options:out_key=flow
222
223
d9d8dbc8
NR
224//********** VLAN CONFIGURATION (Using patch ports) ************//
225(Remove all VXLAN ports from the configuration.)
22613> Add a patch port from br-int to br-pif
227utilities/ovs-vsctl.exe -- add-port br-int patch-to-pif
228utilities/ovs-vsctl.exe -- set interface patch-to-pif type=patch options:peer=patch-to-int
229
23014> Add a patch port from br-pif to br-int
231utilities/ovs-vsctl.exe -- add-port br-pif patch-to-int
232utilities/ovs-vsctl.exe -- set interface patch-to-int type=patch options:peer=patch-to-pif
233
23415> Re-Add the VIF ports with the VLAN tag
235utilities\ovs-vsctl.exe add-port br-int vmNICEmu.1000048 tag=900
236utilities\ovs-vsctl.exe add-port br-int vmNICSyn.1000049 tag=900
237
238
c803536e
SS
239Requirements
240------------
241
242* We require that you don't disable the "Allow management operating system to
243share this network adapter" under 'Virtual Switch Properties' > 'Connection
244type: External network', in the HyperV virtual network switch configuration.
245
246* Checksum Offloads
247 While there is some support for checksum/segmentation offloads in software,
248this is still a work in progress. Till the support is complete we recommend
249disabling TX/RX offloads for both the VM's as well as the HyperV.
250
251
d9d8dbc8 252TODO
c803536e
SS
253----
254
255* OVS currently has no native support for atomics on Windows. Pthreads
256are used as a fallback, but some features, such as OVS-RCU are really
257slow without native atomics support. Atomics support for Windows has to
258be brought in.
259
260* Investigate the working of sFlow on Windows and re-enable the unit tests.
261
262* Sign the driver & create an MSI for installing the different OpenvSwitch
263components on windows.