X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetlab%2Fscripts%2Fsliver-ovs.in;h=9b7495013600a53152a1c1ca9824f4d43f4c28c1;hb=621ffea966bf3aedaa8ceadbb43f3cd642854ad6;hp=162e7f488f8259e459d21efa96b072aa52aa0bab;hpb=0b11a59b24569f1f75024def4e167073c632a817;p=sliver-openvswitch.git diff --git a/planetlab/scripts/sliver-ovs.in b/planetlab/scripts/sliver-ovs.in index 162e7f488..9b7495013 100755 --- a/planetlab/scripts/sliver-ovs.in +++ b/planetlab/scripts/sliver-ovs.in @@ -9,15 +9,11 @@ COMMAND=$0 RUN_DIR=@RUNDIR@ DB_CONF_FILE=@DBDIR@/conf.db DB_SCHEMA=@pkgdatadir@/vswitch.ovsschema -DB_PID_FILE=$RUN_DIR/db.pid DB_LOG=@LOGDIR@/ovs-db.log -DB_CTL_PATTERN='ovsdb-server.*.ctl' ## DB_SOCKET=$RUN_DIR/db.sock ## -SWITCH_PID_FILE=$RUN_DIR/switch.pid SWITCH_LOG=@LOGDIR@/ovs-switch.log -SWITCH_SOCKET=@RUNDIR@/switch.sock #################### helper functions @@ -42,11 +38,11 @@ function get_params { } function is_switch_running { - ovs-appctl --target=$SWITCH_SOCKET version >& /dev/null + ovs-appctl --target=ovs-vswitchd version >& /dev/null } function is_db_running { - ovs-appctl --target=$DB_CTRL_SOCKET version >& /dev/null + ovs-appctl --target=ovsdb-server version >& /dev/null } function tapname () { @@ -101,22 +97,20 @@ function start_db () { [ -d $RUN_DIR ] || { echo "Could not initialize $RUN_DIR - exiting" ; exit 1 ; } ## run the stuff - if [ ! -f "$DB_PID_FILE" ]; then + if [ ! -f "$RUN_DIR/ovsdb-server.pid" ]; then ovsdb-server $DB_CONF_FILE \ --remote=punix:$DB_SOCKET \ --remote=db:Open_vSwitch,manager_options \ --private-key=db:SSL,private_key \ --certificate=db:SSL,certificate \ --bootstrap-ca-cert=db:SSL,ca_cert \ - --pidfile=$DB_PID_FILE \ + --pidfile \ --log-file=$DB_LOG \ - --unixctl=$DB_CTRL_SOCKET \ --detach >& /dev/null else echo 'ovsdb-server appears to be running already, *not* starting' fi - wait_server $DB_PID_FILE ovsdb-server 30 - echo $DB_PID_FILE + wait_server $RUN_DIR/ovsdb-server.pid ovsdb-server 30 } function start_switch () { @@ -125,29 +119,24 @@ function start_switch () { # ensure ovsdb-server is running is_db_running || { echo "ovsdb-server not running" >&2 ; exit 1 ; } - if [ ! -f "$SWITCH_PID_FILE" ] ; then + if [ ! -f "$RUN_DIR/ovs-vswitchd.pid" ] ; then ovs-vswitchd \ - --pidfile=$SWITCH_PID_FILE \ + --pidfile \ --log-file=$SWITCH_LOG \ - --unixctl=$SWITCH_SOCKET \ --detach \ unix:$DB_SOCKET >& /dev/null else echo 'ovs-vswitchd appears to be running already, *not* starting' fi - wait_server $SWITCH_PID_FILE ovs-vswitchd 30 + wait_server $RUN_DIR/ovs-vswitchd.pid ovs-vswitchd 30 } -# first dumb stab just read "pkill ovsdb-server" and "pkill ovs-vswitchd" -# quick and dirty : we locate the control file through a search in /var/run -# caller should be requested to remember and provide this pid instead function stop_db () { - controlfile=$(ls $RUN_DIR/$DB_CTL_PATTERN) - [ -f $controlfile ] && ovs-appctl --target=$controlfile exit + ovs-appctl --target=ovsdb-server exit || : } function stop_switch () { - ovs-appctl --target=$SWITCH_SOCKET exit || : + ovs-appctl --target=ovs-vswitchd exit || : } function status () { @@ -168,39 +157,19 @@ function stop () { #################### create functions function create_bridge () { - get_params "IP/PREFIX" "$@" + get_params "bridge IP/PREFIX" "$@" IP=${IP_PREFIX%/*} PREFIX=${IP_PREFIX#*/} - set -e # ensure ovs-vswitchd is running is_switch_running || { echo "ovs-vswitchd not running" >&2 ; exit 1 ; } - # check whether the address is already assigned - TAPNAME=$(tapname $IP) - if [ ! -z "$TAPNAME" ]; then - if ovs-vsctl --db=unix:$DB_SOCKET br-exists "$TAPNAME"; then - echo $TAPNAME - exit 0 - fi - kill_pltap_ovs - error "$IP already assigned to $TAPNAME" - fi - - # we're clear - TAPNAME=$(pltap-ovs) - trap kill_pltap_ovs EXIT - # xxx wouldn't that be safer if left-aligned ? - vsysc vif_up << EOF - $TAPNAME - $IP - $PREFIX -EOF - wait_device $TAPNAME 60 && \ - ovs-vsctl --db=unix:$DB_SOCKET add-br $TAPNAME -- set bridge $TAPNAME datapath_type=planetlab - echo $TAPNAME - return 0 + set -e + ovs-vsctl --db=unix:$DB_SOCKET -- --may-exist add-br "$bridge" \ + -- set bridge "$bridge" datapath_type=planetlab \ + -- set interface "$bridge" options:local_ip="$IP" option:local_netmask="$PREFIX" + ovs-appctl netdev-pltap/get-tapname "$bridge" } function create_port () { @@ -211,11 +180,8 @@ function create_port () { is_switch_running || { echo "ovs-vswitchd not running" >&2 ; exit 1 ; } set -e - if ! ovs-vsctl --db=unix:$DB_SOCKET list-ports "$bridge" | grep -q "^$port\$"; then - ovs-vsctl --db=unix:$DB_SOCKET add-port "$bridge" "$port" -- set interface "$port" type=tunnel - fi - ovs-appctl --target=$SWITCH_SOCKET netdev-tunnel/get-port "$port" - return 0 + ovs-vsctl --db=unix:$DB_SOCKET -- --may-exist add-port "$bridge" "$port" -- set interface "$port" type=tunnel + ovs-appctl --target=ovs-vswitchd netdev-tunnel/get-port "$port" } function set_remote_endpoint () { @@ -229,7 +195,17 @@ function set_remote_endpoint () { ovs-vsctl --db=unix:$DB_SOCKET set interface $local_port \ options:remote_ip=$remote_ip \ options:remote_port=$remote_UDP_port - return 0 +} + +function set_controller () { + + get_params "bridge_name controller" "$@" + + # ensure ovs-vswitchd is running + is_switch_running || { echo "ovs-vswitchd not running" >&2 ; exit 1 ; } + + set -e + ovs-vsctl --db=unix:$DB_SOCKET set-controller "$bridge_name" "$controller" } #################### del functions @@ -245,10 +221,7 @@ function del_bridge () { W="--no-wait" fi - if ovs-vsctl --db=unix:$DB_SOCKET br-exists "$bridge_name"; then - ovs-vsctl --db=unix:$DB_SOCKET $W del-br $bridge_name - fi - return 0 + ovs-vsctl --db=unix:$DB_SOCKET $W -- --if-exists del-br $bridge_name } function del_port () { @@ -263,11 +236,7 @@ function del_port () { W="--no-wait" fi - set -e - if ovs-vsctl --db=unix:$DB_SOCKET port-to-br "$port" >/dev/null 2>&1; then - ovs-vsctl --db=unix:$DB_SOCKET $W del-port "$port" - fi - return 0 + ovs-vsctl --db=unix:$DB_SOCKET $W -- --if-exists del-port "$port" } function show () {