netdev-dpdk: fix mbuf leaks
[cascardo/ovs.git] / tutorial / ovs-sandbox
index 45bb234..99cc3bb 100755 (executable)
@@ -1,6 +1,6 @@
 #! /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_northd_ex=false
+gdb_ovn_controller=false
+gdb_ovn_controller_ex=false
+gdb_ovn_controller_vtep=false
+gdb_ovn_controller_vtep_ex=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:
@@ -63,7 +107,15 @@ These options force ovs-sandbox to use a particular OVS build:
   -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
+  --gdb-ovn-controller-vtep run ovn-controller-vtep under gdb
+  -R, --gdb-run        automatically start running the daemon in gdb
+                       for any daemon set to run under gdb
   -S, --schema=FILE    use FILE as vswitch.ovsschema
+  -o, --ovn            enable OVN
 
 Other options:
   -h, --help           Print this usage message.
@@ -98,6 +150,41 @@ EOF
             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
+            ;;
+        --gdb-ovn-controller-vtep)
+            gdb_ovn_controller_vtep=true
+            ;;
+        -o|--ovn)
+            ovn=true
+            ;;
+        -R|--gdb-run)
+            gdb_vswitchd_ex=true
+            gdb_ovsdb_ex=true
+            gdb_ovn_northd_ex=true
+            gdb_ovn_controller_ex=true
+            gdb_ovn_controller_vtep_ex=true
+            ;;
         -*)
             echo "unrecognized option $option (use --help for help)" >&2
             exit 1
@@ -148,13 +235,33 @@ if $built; then
         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
+        vtep_schema=$srcdir/vtep/vtep.ovsschema
+        if test ! -e "$vtep_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
         echo >&2 'build not found, please change set $builddir or change directory'
         exit 1
     fi
-    PATH=$builddir/ovsdb:$builddir/vswitchd:$builddir/utilities:$PATH
+    PATH=$builddir/ovsdb:$builddir/vswitchd:$builddir/utilities:$builddir/vtep:$PATH
+    if $ovn; then
+        PATH=$builddir/ovn/controller:$builddir/ovn/controller-vtep:$builddir/ovn/northd:$builddir/ovn/utilities:$PATH
+    fi
     export PATH
 else
     case $schema in
@@ -175,6 +282,10 @@ else
         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.
@@ -190,7 +301,7 @@ OVS_SYSCONFDIR=$sandbox; export OVS_SYSCONFDIR
 
 if $built; then
     # Easy access to OVS manpages.
-    (cd "$builddir" && ${MAKE} install-man mandir="$sandbox"/man)
+    (cd "$builddir" && ${MAKE-make} install-man mandir="$sandbox"/man)
     MANPATH=$sandbox/man:; export MANPATH
 fi
 
@@ -200,13 +311,48 @@ trap 'kill `cat "$sandbox"/*.pid`' 0 1 2 3 13 14 15
 # 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"
+    run ovsdb-tool create vtep.db "$vtep_schema"
+    ovsdb_server_args="ovnsb.db ovnnb.db vtep.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
+
+    rungdb $gdb_ovn_northd $gdb_ovn_northd_ex ovn-northd --detach --no-chdir --pidfile -vconsole:off --log-file
+    rungdb $gdb_ovn_controller $gdb_ovn_controller_ex ovn-controller --detach --no-chdir --pidfile -vconsole:off --log-file
+    rungdb $gdb_ovn_controller_vtep $gdb_ovn_controller_vtep_ex ovn-controller-vtep --detach --no-chdir --pidfile -vconsole:off --log-file
+fi
+
 cat <<EOF
 
 
@@ -214,8 +360,16 @@ cat <<EOF
 ----------------------------------------------------------------------
 You are running in a dummy Open vSwitch environment.  You can use
 ovs-vsctl, ovs-ofctl, ovs-appctl, and other tools to work with the
-dummy switch.  
+dummy switch.
 
+EOF
+if $ovn; then cat << EOF
+This environment also has the OVN daemons and databases enabled.
+You can use ovn-nbctl and ovn-sbctl to interact with the OVN databases.
+
+EOF
+fi
+cat <<EOF
 Log files, pidfiles, and the configuration database are in the
 "sandbox" subdirectory.