datapath: Return EFBIG instead of EXFULL when no room in flow table
[sliver-openvswitch.git] / xenserver / vswitch-xen.spec
1 # Spec file for vswitch and related programs.
2
3 # Copyright (C) 2009 Nicira Networks, Inc.
4 #
5 # Copying and distribution of this file, with or without modification,
6 # are permitted in any medium without royalty provided the copyright
7 # notice and this notice are preserved.  This file is offered as-is,
8 # without warranty of any kind.
9
10 # When building, the rpmbuild command line should define
11 # vswitch_version, xen_version, and build_number using -D arguments.
12 # for example:
13 #
14 #    rpmbuild -D "vswitch_version 0.8.9~1+build123" -D "xen_version 2.6.18-128.1.1.el5.xs5.1.0.483.1000xen" -D "build_number --with-build-number=123" -bb /usr/src/redhat/SPECS/vswitch-xen.spec
15 #
16 %define version %{vswitch_version}-%{xen_version}
17 %define _prefix /root/vswitch
18
19 Name: vswitch
20 Summary: Virtual switch
21 Group: System Environment/Daemons
22 URL: http://www.openvswitch.org/
23 Version: %{vswitch_version}
24
25 # The entire source code is ASL 2.0 except datapath/ which is GPLv2
26 License: ASL 2.0 and GPLv2
27 Release: 1
28 Source: openvswitch-%{vswitch_version}.tar.gz
29 Buildroot: /tmp/vswitch-xen-rpm
30 Requires: kernel-xen = %(echo '%{xen_version}' | sed 's/xen$//')
31
32 %description
33 The vswitch provides standard network bridging functions augmented with
34 support for the OpenFlow protocol for remote per-flow control of
35 traffic.
36
37 %prep
38 %setup -q -n openvswitch-%{vswitch_version}
39
40 %build
41 ./configure --prefix=%{_prefix} --localstatedir=%{_localstatedir} --with-l26=/lib/modules/%{xen_version}/build --enable-ssl %{build_number}
42 make %{_smp_mflags}
43
44 %install
45 rm -rf $RPM_BUILD_ROOT
46 make install DESTDIR=$RPM_BUILD_ROOT prefix=%{_prefix}
47 install -d -m 755 $RPM_BUILD_ROOT/etc
48 install -d -m 755 $RPM_BUILD_ROOT/etc/init.d
49 install -m 755 xenserver/etc_init.d_vswitch \
50          $RPM_BUILD_ROOT/etc/init.d/vswitch
51 install -m 755 xenserver/etc_init.d_vswitch-xapi-update \
52          $RPM_BUILD_ROOT/etc/init.d/vswitch-xapi-update
53 install -d -m 755 $RPM_BUILD_ROOT/etc/sysconfig
54 install -m 755 xenserver/etc_sysconfig_vswitch.example \
55          $RPM_BUILD_ROOT/etc/sysconfig/vswitch.example
56 install -d -m 755 $RPM_BUILD_ROOT/etc/logrotate.d
57 install -m 755 xenserver/etc_logrotate.d_vswitch \
58          $RPM_BUILD_ROOT/etc/logrotate.d/vswitch
59 install -d -m 755 $RPM_BUILD_ROOT/etc/profile.d
60 install -m 755 xenserver/etc_profile.d_vswitch.sh \
61          $RPM_BUILD_ROOT/etc/profile.d/vswitch.sh
62 install -d -m 755 $RPM_BUILD_ROOT/etc/xapi.d/plugins
63 install -m 755 xenserver/etc_xapi.d_plugins_vswitch-cfg-update \
64          $RPM_BUILD_ROOT/etc/xapi.d/plugins/vswitch-cfg-update
65 install -d -m 755 $RPM_BUILD_ROOT%{_prefix}/scripts
66 install -m 755 xenserver/opt_xensource_libexec_interface-reconfigure \
67              $RPM_BUILD_ROOT%{_prefix}/scripts/interface-reconfigure
68 install -m 755 xenserver/etc_xensource_scripts_vif \
69              $RPM_BUILD_ROOT%{_prefix}/scripts/vif
70 install -m 755 xenserver/root_vswitch_scripts_dump-vif-details \
71                $RPM_BUILD_ROOT%{_prefix}/scripts/dump-vif-details
72 install -m 755 xenserver/usr_sbin_xen-bugtool \
73              $RPM_BUILD_ROOT%{_prefix}/scripts/xen-bugtool
74 install -m 755 xenserver/usr_sbin_brctl \
75              $RPM_BUILD_ROOT%{_prefix}/scripts/brctl
76 install -m 644 \
77         xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py \
78                $RPM_BUILD_ROOT%{_prefix}/scripts/XSFeatureVSwitch.py
79
80 install -d -m 755 $RPM_BUILD_ROOT%{_prefix}/kernel_modules
81 find datapath/linux-2.6 -name *.ko -exec install -m 755  \{\} $RPM_BUILD_ROOT%{_prefix}/kernel_modules/ \;
82
83 # Get rid of stuff we don't want to make RPM happy.
84 rm -rf \
85     $RPM_BUILD_ROOT/root/vswitch/bin/ezio-term \
86     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-controller \
87     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-discover \
88     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-kill \
89     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-pki \
90     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-switchui \
91     $RPM_BUILD_ROOT/root/vswitch/bin/ovs-wdt \
92     $RPM_BUILD_ROOT/root/vswitch/bin/secchan \
93     $RPM_BUILD_ROOT/root/vswitch/sbin/ovs-monitor \
94     $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-controller.8 \
95     $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-discover.8 \
96     $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-kill.8 \
97     $RPM_BUILD_ROOT/root/vswitch/share/man/man8/ovs-pki.8 \
98     $RPM_BUILD_ROOT/root/vswitch/share/man/man8/secchan.8 \
99     $RPM_BUILD_ROOT/root/vswitch/share/openvswitch
100
101 %clean
102 rm -rf $RPM_BUILD_ROOT
103
104 %pre
105 if [ ! -f /etc/xensource-inventory ]; then
106     printf "XenSource inventory not present in /etc/xensource-inventory"
107     exit 1
108 fi
109
110 if [ "$1" = "1" ]; then
111     if ! md5sum -c --status <<EOF
112 b8e9835862ef1a9cec2a3f477d26c989  /etc/xensource/scripts/vif
113 51970ad613a3996d5997e18e44db47da  /opt/xensource/libexec/interface-reconfigure
114 5654c8c36699fcc8744ca9cd5b855414  /usr/sbin/xen-bugtool
115 EOF
116     then
117         printf "\nThe original XenServer scripts replaced by this package\n"
118         printf "are different than expected.  This could lead to unexpected\n"
119         printf "behavior of your server.  Unless you are sure you know what\n"
120         printf "you are doing, it is highly recommended that you remove this\n"
121         printf "package immediately after the install completes, which\n"
122         printf "will restore the XenServer scripts that you were previously\n"
123         printf "using.\n\n"
124     fi
125     if test "`/usr/sbin/brctl --version`" != "bridge-utils, 1.1"; then
126 cat <<EOF
127
128 /usr/sbin/brctl replaced by this package reports the following version:
129
130 `/usr/sbin/brctl --version`
131
132 The expected version was:
133
134 bridge-utils, 1.1
135
136 Unless you are sure you know what you are doing, it is highly recommended that
137 you remove this package immediately after the install completes, which will
138 restore the original /usr/sbin/brctl.
139
140 EOF
141     fi
142 fi
143
144 if test ! -e /etc/ovs-vswitch.dbcache; then
145     if test "$1" = 1; then
146         printf "Creating xapi database cache...  "
147     else
148         printf "warning: Open vSwitch is being re-installed or upgraded,\n"
149         printf "         but the xapi database cache is missing.\n"
150         printf "Re-creating xapi database cache...  "
151     fi
152
153     source /etc/xensource-inventory
154     if python - "$INSTALLATION_UUID" <<EOF
155 import XenAPI
156 import pickle
157 import sys
158
159 session = XenAPI.xapi_local()
160 try:
161     session.xenapi.login_with_password("root", "")
162
163     vlans = session.xenapi.VLAN.get_all_records()
164     bonds = session.xenapi.Bond.get_all_records()
165     pifs = session.xenapi.PIF.get_all_records()
166     networks = session.xenapi.network.get_all_records()
167     host = session.xenapi.host.get_by_uuid(sys.argv[1])
168 finally:
169     session.xenapi.session.logout()
170
171 dbcache_file = "/etc/ovs-vswitch.dbcache"
172 f = open(dbcache_file, 'w')
173 pickle.dump({'vlans': vlans,
174              'bonds': bonds,
175              'pifs': pifs,
176              'networks': networks}, f)
177 pickle.dump({'host': host}, f)
178 f.close()
179 EOF
180     then
181         printf "done.\n"
182     else
183         printf "FAILED\n"
184         printf "Open vSwitch can only be installed on a XenServer that\n"
185         printf "has connectivity to xapi on the pool master.  Please\n"
186         printf "fix connectivity to the pool master, then try again.\n"
187         exit 1
188     fi
189 fi
190
191 %post
192 if grep -F net.ipv4.conf.all.arp_filter /etc/sysctl.conf >/dev/null 2>&1; then :; else
193     cat >>/etc/sysctl.conf <<EOF
194 # This works around an issue in xhad, which binds to a particular
195 # Ethernet device, which in turn causes ICMP port unreachable messages
196 # if packets are received are on the wrong interface, which in turn
197 # can happen if we send out ARP replies on every interface (as Linux
198 # does by default) instead of just on the interface that has the IP
199 # address being ARPed for, which this sysctl setting in turn works
200 # around.
201 #
202 # Bug #1378.
203 net.ipv4.conf.all.arp_filter = 1
204 EOF
205 fi
206
207 # Ensure ovs-vswitchd.conf exists
208 touch /etc/ovs-vswitchd.conf
209
210 # Replace XenServer files by our versions.
211 mkdir -p %{_prefix}/xs-original \
212     || printf "Could not create script backup directory.\n"
213 for f in \
214     /opt/xensource/libexec/interface-reconfigure \
215     /etc/xensource/scripts/vif \
216     /usr/sbin/xen-bugtool \
217     /usr/sbin/brctl
218 do
219     s=$(basename "$f")
220     t=$(readlink "$f")
221     if [ "$t" != "%{_prefix}/scripts/$s" ]; then
222         mv "$f" %{_prefix}/xs-original/ \
223             || printf "Could not save original XenServer $s script\n"
224         ln -s "%{_prefix}/scripts/$s" "$f" \
225             || printf "Could not link to vSwitch $s script\n"
226     fi
227 done
228
229 # Install xsconsole plugin
230 plugin=$(readlink /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py)
231 if [ "$plugin" != "/root/vswitch/scripts/XSFeatureVSwitch.py" ]; then
232     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py
233     ln -s /root/vswitch/scripts/XSFeatureVSwitch.py /usr/lib/xsconsole/plugins-base/ || printf "Could not link to vSswitch xsconsole plugin.\n"
234 fi
235
236 # Ensure all required services are set to run
237 for s in vswitch vswitch-xapi-update; do
238     if chkconfig --list $s >/dev/null 2>&1; then
239         chkconfig --del $s || printf "Could not remove $s init script."
240     fi
241     chkconfig --add $s || printf "Could not add $s init script."
242     chkconfig $s on || printf "Could not enable $s init script."
243 done
244
245 if [ "$1" = "1" ]; then    # $1 = 2 for upgrade
246     printf "\nYou MUST reboot the server NOW to complete the change to the\n"
247     printf "the vSwitch.  Attempts to modify networking on the server\n"
248     printf "or any hosted VM will fail until after the reboot and could\n"
249     printf "leave the server in an state requiring manual recovery.\n\n"
250 else
251     printf "\nTo use the new vSwitch, you should reboot the server\n"
252     printf "now.  Failure to do so may result in incorrect operation.\n\n"
253 fi
254
255 %preun
256 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
257     for s in vswitch vswitch-xapi-update; do
258         chkconfig --del $s || printf "Could not remove $s init script."
259     done
260 fi
261
262
263 %postun
264 if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
265
266     rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.py \
267         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
268         /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo \
269         || printf "Could not remove vSwitch xsconsole plugin.\n"
270
271     # Restore original XenServer scripts
272     for f in \
273         /opt/xensource/libexec/interface-reconfigure \
274         /etc/xensource/scripts/vif \
275         /usr/sbin/xen-bugtool \
276         /usr/sbin/brctl
277     do
278         s=$(basename "$f")
279         if [ ! -f "%{_prefix}/xs-original/$s" ]; then
280             printf "Original XenServer $s script not present in %{_prefix}/xs-original\n"
281             printf "Could not restore original XenServer script.\n"
282         else
283             (rm -f "$f" \
284                 && mv "%{_prefix}/xs-original/$s" "$f") \
285                 || printf "Could not restore original XenServer $s script.\n"
286         fi
287     done
288
289     find  %{_prefix} -type d -depth -exec rmdir \{\} \; \
290         || printf "Could not remove vSwitch install directory.\n"
291
292     # Remove all configuration and log files
293     rm -f /etc/ovs-vswitchd.conf
294     rm -f /etc/sysconfig/vswitch
295     rm -f /var/log/vswitch*
296     rm -f /etc/ovs-vswitchd.cacert
297
298     printf "\nYou MUST reboot the server now to complete the change to\n"
299     printf "standard Xen networking.  Attempts to modify networking on the\n"
300     printf "server or any hosted VM will fail until after the reboot and\n"
301     printf "could leave the server in a state requiring manual recovery.\n\n"
302 fi
303
304
305 %files
306 %defattr(-,root,root)
307 /etc/init.d/vswitch
308 /etc/init.d/vswitch-xapi-update
309 /etc/xapi.d/plugins/vswitch-cfg-update
310 /etc/sysconfig/vswitch.example
311 /etc/logrotate.d/vswitch
312 /etc/profile.d/vswitch.sh
313 /root/vswitch/kernel_modules/brcompat_mod.ko
314 /root/vswitch/kernel_modules/openvswitch_mod.ko
315 /root/vswitch/kernel_modules/veth_mod.ko
316 /root/vswitch/scripts/dump-vif-details
317 /root/vswitch/scripts/interface-reconfigure
318 /root/vswitch/scripts/vif
319 /root/vswitch/scripts/xen-bugtool
320 /root/vswitch/scripts/XSFeatureVSwitch.py
321 /root/vswitch/scripts/brctl
322 # Following two files are generated automatically by rpm.  We don't
323 # really need them and they won't be used on the XenServer, but there
324 # isn't an obvious place to get rid of them since they are generated
325 # after the install script runs.  Since they are small, we just
326 # include them.
327 /root/vswitch/scripts/XSFeatureVSwitch.pyc
328 /root/vswitch/scripts/XSFeatureVSwitch.pyo
329 /root/vswitch/sbin/ovs-brcompatd
330 /root/vswitch/sbin/ovs-vswitchd
331 /root/vswitch/bin/ovs-appctl
332 /root/vswitch/bin/ovs-cfg-mod
333 /root/vswitch/bin/ovs-dpctl
334 /root/vswitch/bin/ovs-ofctl
335 /root/vswitch/share/man/man5/ovs-vswitchd.conf.5
336 /root/vswitch/share/man/man8/ovs-appctl.8
337 /root/vswitch/share/man/man8/ovs-brcompatd.8
338 /root/vswitch/share/man/man8/ovs-cfg-mod.8
339 /root/vswitch/share/man/man8/ovs-dpctl.8
340 /root/vswitch/share/man/man8/ovs-ofctl.8
341 /root/vswitch/share/man/man8/ovs-vswitchd.8