]> git.proxmox.com Git - mirror_ovs.git/blame - tutorial/ovs-sandbox
Prepare for post-2.4.0 (2.4.90).
[mirror_ovs.git] / tutorial / ovs-sandbox
CommitLineData
eeecce05
BP
1#! /bin/sh
2#
6b2771c3 3# Copyright (c) 2013, 2015 Nicira, Inc.
eeecce05
BP
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at:
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17set -e
18
8da7cd8c 19run() {
eeecce05
BP
20 (cd "$sandbox" && "$@") || exit 1
21}
22
8da7cd8c 23run_xterm() {
4cf272aa
AZ
24 title=$1;
25 shift
26 run xterm -T "$title" -e "$@" &
8da7cd8c
AZ
27}
28
29rungdb() {
30 under_gdb=$1
60ceeb6c 31 gdb_run=$2
8da7cd8c 32 shift
60ceeb6c
AZ
33 shift
34
8da7cd8c
AZ
35 # Remove the --detach and to put the process under gdb control.
36 # Also remove --vconsole:off to allow error message to show up
37 # on the console.
38 # Use "DISPLAY" variable to determine out if X is supported
39 if $under_gdb && [ "$DISPLAY" ]; then
40 args=`echo $@ |sed s/--detach//g | sed s/--vconsole:off//g`
fdc14c7b 41 xterm_title=$1
60ceeb6c
AZ
42
43 gdb_cmd=""
44 if $gdb_run; then
45 gdb_cmd="-ex run"
46 fi
47
48 run_xterm $xterm_title gdb $gdb_cmd --args $args
8da7cd8c
AZ
49 else
50 run $@
51 fi
52}
53
4b814d41
AZ
54gdb_vswitchd=false
55gdb_ovsdb=false
60ceeb6c
AZ
56gdb_vswitchd_ex=false
57gdb_ovsdb_ex=false
eeecce05
BP
58builddir=
59srcdir=
60schema=
61installed=false
62built=false
8da7cd8c 63
eeecce05
BP
64for option; do
65 # This option-parsing mechanism borrowed from a Autoconf-generated
66 # configure script under the following license:
67
68 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
69 # 2002, 2003, 2004, 2005, 2006, 2009, 2013 Free Software Foundation, Inc.
70 # This configure script is free software; the Free Software Foundation
71 # gives unlimited permission to copy, distribute and modify it.
72
73 # If the previous option needs an argument, assign it.
74 if test -n "$prev"; then
75 eval $prev=\$option
76 prev=
77 continue
78 fi
79 case $option in
80 *=*) optarg=`expr "X$option" : '[^=]*=\(.*\)'` ;;
81 *) optarg=yes ;;
82 esac
83
84 case $dashdash$option in
85 --)
86 dashdash=yes ;;
87 -h|--help)
88 cat <<EOF
89ovs-sandbox, for starting a sandboxed dummy Open vSwitch environment
90usage: $0 [OPTION...]
91
92If you run ovs-sandbox from an OVS build directory, it uses the OVS that
93you built. Otherwise, if you have an installed Open vSwitch, it uses
94the installed version.
95
96These options force ovs-sandbox to use a particular OVS build:
97 -b, --builddir=DIR specify Open vSwitch build directory
98 -s, --srcdir=DIR specify Open vSwitch source directory
99These options force ovs-sandbox to use an installed Open vSwitch:
100 -i, --installed use installed Open vSwitch
8da7cd8c 101 -g, --gdb-vswitchd run ovs-vswitchd under gdb
4b814d41 102 -d, --gdb-ovsdb run ovsdb-server under gdb
eeecce05
BP
103 -S, --schema=FILE use FILE as vswitch.ovsschema
104
105Other options:
106 -h, --help Print this usage message.
107EOF
108 exit 0
109 ;;
110
111 --b*=*)
112 builddir=$optarg
113 built=:
114 ;;
115 -b|--b*)
116 prev=builddir
117 built=:
118 ;;
119 --sr*=*)
120 srcdir=$optarg
121 built=false
122 ;;
123 -s|--sr*)
124 prev=srcdir
125 built=false
126 ;;
127 -i|--installed)
128 installed=:
129 ;;
130 --sc*=*)
131 schema=$optarg
132 installed=:
133 ;;
134 -S|--sc*)
135 prev=schema
136 installed=:
137 ;;
8da7cd8c
AZ
138 -g|--gdb-v*)
139 gdb_vswitchd=true
60ceeb6c
AZ
140 gdb_vswitchd_ex=false
141 ;;
142 -e|--gdb-ex-v*)
143 gdb_vswitchd=true
144 gdb_vswitchd_ex=true
8da7cd8c 145 ;;
4b814d41
AZ
146 -d|--gdb-o*)
147 gdb_ovsdb=true
60ceeb6c
AZ
148 gdb_ovsdb_ex=false
149 ;;
150 -r|--gdb-ex-o*)
151 gdb_ovsdb=true
152 gdb_ovsdb_ex=true
4b814d41 153 ;;
eeecce05
BP
154 -*)
155 echo "unrecognized option $option (use --help for help)" >&2
156 exit 1
157 ;;
158 *)
159 echo "$option: non-option arguments not supported (use --help for help)" >&2
160 exit 1
161 ;;
162 esac
163 shift
164done
165
166if $installed && $built; then
167 echo "sorry, conflicting options (use --help for help)" >&2
168 exit 1
169elif $installed || $built; then
170 :
171elif test -e vswitchd/ovs-vswitchd; then
172 built=:
173 builddir=.
174elif (ovs-vswitchd --version) >/dev/null 2>&1; then
175 installed=:
176else
177 echo "can't find an OVS build or install (use --help for help)" >&2
178 exit 1
179fi
180
181if $built; then
182 if test ! -e "$builddir"/vswitchd/ovs-vswitchd; then
183 echo "$builddir does not appear to be an OVS build directory" >&2
184 exit 1
185 fi
186 builddir=`cd $builddir && pwd`
187
188 # Find srcdir.
189 case $srcdir in
190 '')
191 srcdir=$builddir
9feb1017 192 if test ! -e "$srcdir"/WHY-OVS.md; then
eeecce05
BP
193 srcdir=`cd $builddir/.. && pwd`
194 fi
195 ;;
196 /*) ;;
197 *) srcdir=`pwd`/$srcdir ;;
198 esac
199 schema=$srcdir/vswitchd/vswitch.ovsschema
200 if test ! -e "$schema"; then
201 echo >&2 'source directory not found, please use --srcdir'
202 exit 1
203 fi
204
205 # Put built tools early in $PATH.
206 if test ! -e $builddir/vswitchd/ovs-vswitchd; then
207 echo >&2 'build not found, please change set $builddir or change directory'
208 exit 1
209 fi
210 PATH=$builddir/ovsdb:$builddir/vswitchd:$builddir/utilities:$PATH
211 export PATH
212else
213 case $schema in
214 '')
215 for schema in \
216 /usr/local/share/openvswitch/vswitch.ovsschema \
217 /usr/share/openvswitch/vswitch.ovsschema \
218 none; do
219 if test -r $schema; then
220 break
221 fi
222 done
223 ;;
224 /*) ;;
225 *) schema=`pwd`/$schema ;;
226 esac
227 if test ! -r "$schema"; then
228 echo "can't find vswitch.ovsschema, please specify --schema" >&2
229 exit 1
230 fi
231fi
232
233# Create sandbox.
234rm -rf sandbox
235mkdir sandbox
236sandbox=`cd sandbox && pwd`
237
238# Set up environment for OVS programs to sandbox themselves.
239OVS_RUNDIR=$sandbox; export OVS_RUNDIR
240OVS_LOGDIR=$sandbox; export OVS_LOGDIR
241OVS_DBDIR=$sandbox; export OVS_DBDIR
242OVS_SYSCONFDIR=$sandbox; export OVS_SYSCONFDIR
243
244if $built; then
245 # Easy access to OVS manpages.
348f8282 246 (cd "$builddir" && ${MAKE} install-man mandir="$sandbox"/man)
eeecce05
BP
247 MANPATH=$sandbox/man:; export MANPATH
248fi
249
250# Ensure cleanup.
251trap 'kill `cat "$sandbox"/*.pid`' 0 1 2 3 13 14 15
252
253# Create database and start ovsdb-server.
254touch "$sandbox"/.conf.db.~lock~
431ad535 255run ovsdb-tool create conf.db "$schema"
60ceeb6c 256rungdb $gdb_ovsdb $gdb_ovsdb_ex ovsdb-server --detach --no-chdir --pidfile -vconsole:off --log-file \
eeecce05
BP
257 --remote=punix:"$sandbox"/db.sock
258
e43a07ba
AZ
259#Add a small delay to allow ovsdb-server to launch.
260sleep 0.1
261
262#Wait for ovsdb-server to finish launching.
263if test ! -e "$sandbox"/db.sock; then
264 echo -n "Waiting for ovsdb-server to start..."
265 while test ! -e "$sandbox"/db.sock; do
266 sleep 1;
267 done
268 echo " Done"
269fi
270
6b2771c3
BP
271# Initialize database.
272run ovs-vsctl --no-wait -- init
273
eeecce05 274# Start ovs-vswitchd.
60ceeb6c 275rungdb $gdb_vswitchd $gdb_vswitchd_ex ovs-vswitchd --detach --no-chdir --pidfile -vconsole:off --log-file \
eeecce05
BP
276 --enable-dummy=override -vvconn -vnetdev_dummy
277
278cat <<EOF
279
280
281
282----------------------------------------------------------------------
283You are running in a dummy Open vSwitch environment. You can use
284ovs-vsctl, ovs-ofctl, ovs-appctl, and other tools to work with the
285dummy switch.
286
287Log files, pidfiles, and the configuration database are in the
288"sandbox" subdirectory.
289
290Exit the shell to kill the running daemons.
291EOF
292
293status=0; $SHELL || status=$?
294
295cat <<EOF
296----------------------------------------------------------------------
297
298
299
300EOF
301
302exit $status