3 # Copyright (c) 2013, 2015 Nicira, Inc.
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:
9 # http://www.apache.org/licenses/LICENSE-2.0
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.
20 (cd "$sandbox" && "$@") || exit 1
26 run xterm -T "$title" -e "$@" &
35 # Remove the --detach and to put the process under gdb control.
36 # Also remove --vconsole:off to allow error message to show up
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`
48 run_xterm $xterm_title gdb $gdb_cmd --args $args
59 gdb_ovn_controller=false
70 # This option-parsing mechanism borrowed from a Autoconf-generated
71 # configure script under the following license:
73 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
74 # 2002, 2003, 2004, 2005, 2006, 2009, 2013 Free Software Foundation, Inc.
75 # This configure script is free software; the Free Software Foundation
76 # gives unlimited permission to copy, distribute and modify it.
78 # If the previous option needs an argument, assign it.
79 if test -n "$prev"; then
85 *=*) optarg=`expr "X$option" : '[^=]*=\(.*\)'` ;;
89 case $dashdash$option in
94 ovs-sandbox, for starting a sandboxed dummy Open vSwitch environment
97 If you run ovs-sandbox from an OVS build directory, it uses the OVS that
98 you built. Otherwise, if you have an installed Open vSwitch, it uses
99 the installed version.
101 These options force ovs-sandbox to use a particular OVS build:
102 -b, --builddir=DIR specify Open vSwitch build directory
103 -s, --srcdir=DIR specify Open vSwitch source directory
104 These options force ovs-sandbox to use an installed Open vSwitch:
105 -i, --installed use installed Open vSwitch
106 -g, --gdb-vswitchd run ovs-vswitchd under gdb
107 -d, --gdb-ovsdb run ovsdb-server under gdb
108 --gdb-ovn-northd run ovn-northd under gdb
109 --gdb-ovn-controller run ovn-controller under gdb
110 -S, --schema=FILE use FILE as vswitch.ovsschema
114 -h, --help Print this usage message.
148 gdb_vswitchd_ex=false
165 --gdb-ovn-controller)
166 gdb_ovn_controller=true
172 echo "unrecognized option $option (use --help for help)" >&2
176 echo "$option: non-option arguments not supported (use --help for help)" >&2
183 if $installed && $built; then
184 echo "sorry, conflicting options (use --help for help)" >&2
186 elif $installed || $built; then
188 elif test -e vswitchd/ovs-vswitchd; then
191 elif (ovs-vswitchd --version) >/dev/null 2>&1; then
194 echo "can't find an OVS build or install (use --help for help)" >&2
199 if test ! -e "$builddir"/vswitchd/ovs-vswitchd; then
200 echo "$builddir does not appear to be an OVS build directory" >&2
203 builddir=`cd $builddir && pwd`
209 if test ! -e "$srcdir"/WHY-OVS.md; then
210 srcdir=`cd $builddir/.. && pwd`
214 *) srcdir=`pwd`/$srcdir ;;
216 schema=$srcdir/vswitchd/vswitch.ovsschema
217 if test ! -e "$schema"; then
218 echo >&2 'source directory not found, please use --srcdir'
222 ovnsb_schema=$srcdir/ovn/ovn-sb.ovsschema
223 if test ! -e "$ovnsb_schema"; then
224 echo >&2 'source directory not found, please use --srcdir'
227 ovnnb_schema=$srcdir/ovn/ovn-nb.ovsschema
228 if test ! -e "$ovnnb_schema"; then
229 echo >&2 'source directory not found, please use --srcdir'
234 # Put built tools early in $PATH.
235 if test ! -e $builddir/vswitchd/ovs-vswitchd; then
236 echo >&2 'build not found, please change set $builddir or change directory'
239 PATH=$builddir/ovsdb:$builddir/vswitchd:$builddir/utilities:$PATH
241 PATH=$builddir/ovn:$builddir/ovn/controller:$builddir/ovn/northd:$PATH
248 /usr/local/share/openvswitch/vswitch.ovsschema \
249 /usr/share/openvswitch/vswitch.ovsschema \
251 if test -r $schema; then
257 *) schema=`pwd`/$schema ;;
259 if test ! -r "$schema"; then
260 echo "can't find vswitch.ovsschema, please specify --schema" >&2
264 echo "running with ovn is only supported from the build dir." >&2
272 sandbox=`cd sandbox && pwd`
274 # Set up environment for OVS programs to sandbox themselves.
275 OVS_RUNDIR=$sandbox; export OVS_RUNDIR
276 OVS_LOGDIR=$sandbox; export OVS_LOGDIR
277 OVS_DBDIR=$sandbox; export OVS_DBDIR
278 OVS_SYSCONFDIR=$sandbox; export OVS_SYSCONFDIR
281 # Easy access to OVS manpages.
282 (cd "$builddir" && ${MAKE} install-man mandir="$sandbox"/man)
283 MANPATH=$sandbox/man:; export MANPATH
287 trap 'kill `cat "$sandbox"/*.pid`' 0 1 2 3 13 14 15
289 # Create database and start ovsdb-server.
290 touch "$sandbox"/.conf.db.~lock~
291 run ovsdb-tool create conf.db "$schema"
294 touch "$sandbox"/.ovnsb.db.~lock~
295 touch "$sandbox"/.ovnnb.db.~lock~
296 run ovsdb-tool create ovnsb.db "$ovnsb_schema"
297 run ovsdb-tool create ovnnb.db "$ovnnb_schema"
298 ovsdb_server_args="ovnsb.db ovnnb.db conf.db"
300 rungdb $gdb_ovsdb $gdb_ovsdb_ex ovsdb-server --detach --no-chdir --pidfile -vconsole:off --log-file \
301 --remote=punix:"$sandbox"/db.sock $ovsdb_server_args
303 #Add a small delay to allow ovsdb-server to launch.
306 #Wait for ovsdb-server to finish launching.
307 if test ! -e "$sandbox"/db.sock; then
308 echo -n "Waiting for ovsdb-server to start..."
309 while test ! -e "$sandbox"/db.sock; do
315 # Initialize database.
316 run ovs-vsctl --no-wait -- init
318 # Start ovs-vswitchd.
319 rungdb $gdb_vswitchd $gdb_vswitchd_ex ovs-vswitchd --detach --no-chdir --pidfile -vconsole:off --log-file \
320 --enable-dummy=override -vvconn -vnetdev_dummy
323 ovs-vsctl set open . external-ids:system-id=56b18105-5706-46ef-80c4-ff20979ab068
324 ovs-vsctl set open . external-ids:ovn-remote=unix:"$sandbox"/db.sock
325 ovs-vsctl set open . external-ids:ovn-encap-type=geneve
326 ovs-vsctl set open . external-ids:ovn-encap-ip=127.0.0.1
327 ovs-vsctl add-br br-int \
328 -- set bridge br-int fail-mode=secure other-config:disable-in-band=true
330 rungdb $gdb_ovn_northd ovn-northd --detach --no-chdir --pidfile -vconsole:off --log-file
331 rungdb $gdb_ovn_controller ovn-controller --detach --no-chdir --pidfile -vconsole:off --log-file
338 ----------------------------------------------------------------------
339 You are running in a dummy Open vSwitch environment. You can use
340 ovs-vsctl, ovs-ofctl, ovs-appctl, and other tools to work with the
343 Log files, pidfiles, and the configuration database are in the
344 "sandbox" subdirectory.
346 Exit the shell to kill the running daemons.
349 status=0; $SHELL || status=$?
352 ----------------------------------------------------------------------