#! /bin/sh
#
-# Copyright (c) 2013 Nicira, Inc.
+# Copyright (c) 2013, 2015 Nicira, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
set -e
-run () {
- echo "$@"
+run() {
(cd "$sandbox" && "$@") || exit 1
}
+run_xterm() {
+ title=$1;
+ shift
+ run xterm -T "$title" -e "$@" &
+}
+
+rungdb() {
+ under_gdb=$1
+ gdb_run=$2
+ shift
+ shift
+
+ # Remove the --detach and to put the process under gdb control.
+ # Also remove --vconsole:off to allow error message to show up
+ # on the console.
+ # Use "DISPLAY" variable to determine out if X is supported
+ if $under_gdb && [ "$DISPLAY" ]; then
+ args=`echo $@ |sed s/--detach//g | sed s/--vconsole:off//g`
+ xterm_title=$1
+
+ gdb_cmd=""
+ if $gdb_run; then
+ gdb_cmd="-ex run"
+ fi
+
+ run_xterm $xterm_title gdb $gdb_cmd --args $args
+ else
+ run $@
+ fi
+}
+
+gdb_vswitchd=false
+gdb_ovsdb=false
+gdb_vswitchd_ex=false
+gdb_ovsdb_ex=false
+gdb_ovn_northd=false
+gdb_ovn_controller=false
builddir=
srcdir=
schema=
installed=false
built=false
+ovn=false
+ovnsb_schema=
+ovnnb_schema=
+
for option; do
# This option-parsing mechanism borrowed from a Autoconf-generated
# configure script under the following license:
-s, --srcdir=DIR specify Open vSwitch source directory
These options force ovs-sandbox to use an installed Open vSwitch:
-i, --installed use installed Open vSwitch
+ -g, --gdb-vswitchd run ovs-vswitchd under gdb
+ -d, --gdb-ovsdb run ovsdb-server under gdb
+ --gdb-ovn-northd run ovn-northd under gdb
+ --gdb-ovn-controller run ovn-controller under gdb
-S, --schema=FILE use FILE as vswitch.ovsschema
+ -o, --ovn enable OVN
Other options:
-h, --help Print this usage message.
prev=schema
installed=:
;;
+ -g|--gdb-v*)
+ gdb_vswitchd=true
+ gdb_vswitchd_ex=false
+ ;;
+ -e|--gdb-ex-v*)
+ gdb_vswitchd=true
+ gdb_vswitchd_ex=true
+ ;;
+ -d|--gdb-ovsdb)
+ gdb_ovsdb=true
+ gdb_ovsdb_ex=false
+ ;;
+ -r|--gdb-ex-o*)
+ gdb_ovsdb=true
+ gdb_ovsdb_ex=true
+ ;;
+ --gdb-ovn-northd)
+ gdb_ovn_northd=true
+ ;;
+ --gdb-ovn-controller)
+ gdb_ovn_controller=true
+ ;;
+ -o|--ovn)
+ ovn=true
+ ;;
-*)
echo "unrecognized option $option (use --help for help)" >&2
exit 1
echo >&2 'source directory not found, please use --srcdir'
exit 1
fi
+ if $ovn; then
+ ovnsb_schema=$srcdir/ovn/ovn-sb.ovsschema
+ if test ! -e "$ovnsb_schema"; then
+ echo >&2 'source directory not found, please use --srcdir'
+ exit 1
+ fi
+ ovnnb_schema=$srcdir/ovn/ovn-nb.ovsschema
+ if test ! -e "$ovnnb_schema"; then
+ echo >&2 'source directory not found, please use --srcdir'
+ exit 1
+ fi
+ fi
# Put built tools early in $PATH.
if test ! -e $builddir/vswitchd/ovs-vswitchd; then
exit 1
fi
PATH=$builddir/ovsdb:$builddir/vswitchd:$builddir/utilities:$PATH
+ if $ovn; then
+ PATH=$builddir/ovn:$builddir/ovn/controller:$builddir/ovn/northd:$PATH
+ fi
export PATH
else
case $schema in
echo "can't find vswitch.ovsschema, please specify --schema" >&2
exit 1
fi
+ if $ovn; then
+ echo "running with ovn is only supported from the build dir." >&2
+ exit 1
+ fi
fi
# Create sandbox.
# Create database and start ovsdb-server.
touch "$sandbox"/.conf.db.~lock~
run ovsdb-tool create conf.db "$schema"
-run ovsdb-server --detach --no-chdir --pidfile -vconsole:off --log-file \
- --remote=punix:"$sandbox"/db.sock
+ovsdb_server_args=
+if $ovn; then
+ touch "$sandbox"/.ovnsb.db.~lock~
+ touch "$sandbox"/.ovnnb.db.~lock~
+ run ovsdb-tool create ovnsb.db "$ovnsb_schema"
+ run ovsdb-tool create ovnnb.db "$ovnnb_schema"
+ ovsdb_server_args="ovnsb.db ovnnb.db conf.db"
+fi
+rungdb $gdb_ovsdb $gdb_ovsdb_ex ovsdb-server --detach --no-chdir --pidfile -vconsole:off --log-file \
+ --remote=punix:"$sandbox"/db.sock $ovsdb_server_args
+
+#Add a small delay to allow ovsdb-server to launch.
+sleep 0.1
+
+#Wait for ovsdb-server to finish launching.
+if test ! -e "$sandbox"/db.sock; then
+ echo -n "Waiting for ovsdb-server to start..."
+ while test ! -e "$sandbox"/db.sock; do
+ sleep 1;
+ done
+ echo " Done"
+fi
+
+# Initialize database.
+run ovs-vsctl --no-wait -- init
# Start ovs-vswitchd.
-run ovs-vswitchd --detach --no-chdir --pidfile -vconsole:off --log-file \
+rungdb $gdb_vswitchd $gdb_vswitchd_ex ovs-vswitchd --detach --no-chdir --pidfile -vconsole:off --log-file \
--enable-dummy=override -vvconn -vnetdev_dummy
+if $ovn; then
+ ovs-vsctl set open . external-ids:system-id=56b18105-5706-46ef-80c4-ff20979ab068
+ ovs-vsctl set open . external-ids:ovn-remote=unix:"$sandbox"/db.sock
+ ovs-vsctl set open . external-ids:ovn-encap-type=geneve
+ ovs-vsctl set open . external-ids:ovn-encap-ip=127.0.0.1
+ ovs-vsctl add-br br-int \
+ -- set bridge br-int fail-mode=secure other-config:disable-in-band=true
+
+ rungdb $gdb_ovn_northd ovn-northd --detach --no-chdir --pidfile -vconsole:off --log-file
+ rungdb $gdb_ovn_controller ovn-controller --detach --no-chdir --pidfile -vconsole:off --log-file
+fi
+
cat <<EOF