ovs-svc revision 5728
9725N/A#!/sbin/sh
9725N/A#
9725N/A#
9725N/A# CDDL HEADER START
9725N/A#
9725N/A# The contents of this file are subject to the terms of the
9725N/A# Common Development and Distribution License (the "License").
9725N/A# You may not use this file except in compliance with the License.
9725N/A#
9725N/A# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9725N/A# or http://www.opensolaris.org/os/licensing.
9725N/A# See the License for the specific language governing permissions
9725N/A# and limitations under the License.
9725N/A#
9725N/A# When distributing Covered Code, include this CDDL HEADER in each
9725N/A# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
9725N/A# If applicable, add the following below this CDDL HEADER, with the
9725N/A# fields enclosed by brackets "[]" replaced with your own identifying
9725N/A# information: Portions Copyright [yyyy] [name of copyright owner]
9725N/A#
9725N/A# CDDL HEADER END
9725N/A#
9725N/A#
9725N/A
9725N/A#
9725N/A# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
9725N/A#
9725N/A
9725N/A. /lib/svc/share/smf_include.sh
9725N/A. /lib/svc/share/net_include.sh
9725N/A
9725N/Atypeset -r OVS_OVSDB_FMRI=svc:/application/openvswitch/ovsdb-server:default
9725N/Atypeset -r OVS_VSWITCHD_FMRI=svc:/application/openvswitch/vswitch-server:default
9725N/A
9725N/Atypeset -r OVS_USRLIB_DIR=/usr/lib/ovs
9725N/Atypeset -r OVS_VARLIB_DIR=/var/lib/ovs
9725N/Atypeset -r OVS_TMP_DIR=/var/run/ovs
9725N/Atypeset -r OVS_LOG_DIR=/var/log/ovs
9725N/A
9725N/Atypeset -r OVS_USER=_ovs
9725N/Atypeset -r OVS_GROUP=_ovs
9725N/A
9725N/Atypeset -r OVS_SBIN_DIR=/usr/sbin
9725N/Atypeset -r OVSDB_TOOL=${OVS_SBIN_DIR}/ovsdb-tool
9725N/Atypeset -r OVS_VSCTL=${OVS_SBIN_DIR}/ovs-vsctl
9725N/A
9725N/Atypeset -r OVS_VSWITCHD=ovs-vswitchd
9725N/Atypeset -r OVSDB_SERVER=ovsdb-server
9725N/Atypeset -r OVS_CLEAN=ovs-clean.py
9725N/Atypeset -r OVSDB_SERVER_PATH=${OVS_USRLIB_DIR}/${OVSDB_SERVER}
9725N/Atypeset -r OVS_VSWITCHD_PATH=${OVS_USRLIB_DIR}/${OVS_VSWITCHD}
9725N/Atypeset -r OVS_CLEAN_PATH=${OVS_USRLIB_DIR}/${OVS_CLEAN}
9725N/A
9725N/Atypeset -r OVSDB_REMOTE=${OVS_TMP_DIR}/db.sock
9725N/A
9725N/Atypeset -r PFEXEC=/usr/bin/pfexec
9725N/Atypeset -r MKDIR=/usr/bin/mkdir
9725N/Atypeset -r CHOWN=/usr/bin/chown
9725N/Atypeset -r PKILL=/usr/bin/pkill
9725N/Atypeset -r IPADM=/usr/sbin/ipadm
9725N/A
9725N/Aerrlog () {
9725N/A echo $1 >&2
9725N/A}
9725N/A
9725N/Acreate_ovs_tempdir() {
9728N/A if [[ ! -d ${OVS_TMP_DIR} ]]; then
9725N/A ${PFEXEC} ${MKDIR} -m 775 ${OVS_TMP_DIR} || exit $SMF_EXIT_ERR_CONFIG
9725N/A ${PFEXEC} ${CHOWN} ${OVS_USER}:${OVS_GROUP} ${OVS_TMP_DIR}
9725N/A fi
15153N/A}
9725N/A
9725N/Astart_ovsdb_server() {
15153N/A typeset -i OVSDB_INIT=0
15921N/A typeset -r OVSDB_DATABASE=${OVS_VARLIB_DIR}/etc/conf.db
10017N/A
15153N/A create_ovs_tempdir
10017N/A
10017N/A if [[ ! -f ${OVSDB_DATABASE} ]]; then
10017N/A typeset -r OVSDB_SCHEMA=${OVS_USRLIB_DIR}/share/vswitch.ovsschema
10017N/A
10017N/A echo "Creating ${OVSDB_DATABASE} from ${OVSDB_SCHEMA}"
10017N/A ${OVSDB_TOOL} create ${OVSDB_DATABASE} ${OVSDB_SCHEMA}
15153N/A if [ $? -ne 0 ]; then
10017N/A errlog "Error creating database, exiting"
10017N/A return 1
15157N/A fi
10017N/A OVSDB_INIT=1
16320N/A fi
10017N/A
11198N/A typeset -r OVSDB_LOGFILE=${OVS_LOG_DIR}/ovsdb-server.log
10017N/A typeset -r OVSDB_PIDFILE=${OVS_TMP_DIR}/ovsdb-server.pid
11192N/A
9725N/A ${OVSDB_SERVER_PATH} ${OVSDB_DATABASE} \
15153N/A -vconsole:emer -vsyslog:off -vfile:info \
9725N/A --remote=punix:${OVSDB_REMOTE} \
10017N/A --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
15153N/A --private-key=db:Open_vSwitch,SSL,private_key \
12285N/A --certificate=db:Open_vSwitch,SSL,certificate \
10319N/A --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
10656N/A --no-chdir --log-file=${OVSDB_LOGFILE} \
10017N/A --pidfile=${OVSDB_PIDFILE} \
9838N/A --detach
12285N/A if [ $? -ne 0 ]; then
15153N/A errlog "${OVSDB_SERVER_PATH} failed with $?"
10017N/A exit $SMF_EXIT_ERR_FATAL
10656N/A fi
10017N/A
10017N/A if [ ${OVSDB_INIT} -ne 0 ]; then
10017N/A echo "Initializing OVSDB database"
16320N/A ${OVS_VSCTL} --no-wait init
10017N/A if [ $? -ne 0 ]; then
10017N/A errlog "${OVSDB_VSCTL} failed with $?"
10017N/A exit $SMF_EXIT_ERR_FATAL
15153N/A fi
15153N/A fi
10656N/A}
10017N/A
15522N/Astop_vswitch_server() {
15153N/A typeset BRIDGENAME
15153N/A
15153N/A $PKILL -x -u ${OVS_USER} -z `smf_zonename` ${OVS_VSWITCHD}
15712N/A if [[ $? -ne 0 && $? -ne 1 ]]; then
15153N/A errlog "pkill of ${OVS_VSWITCHD} failed with $?"
15153N/A fi
9725N/A
9725N/A ${OVS_VSCTL} list-br |
9725N/A while read BRIDGENAME; do
15153N/A ${PFEXEC} ${IPADM} disable-if -t ${BRIDGENAME} >/dev/null 2>&1
15153N/A ${OVS_CLEAN_PATH} delete-vnic ${BRIDGENAME}
10017N/A if [ $? -ne 0 ]; then
15922N/A errlog "Error $? removing ${BRIDGENAME} VNIC"
15922N/A fi
15922N/A done
10017N/A ${OVS_CLEAN_PATH} reset-ofports
10017N/A if [ $? -ne 0 ]; then
10017N/A errlog "Error $? resetting OF ports"
15153N/A fi
15153N/A
15153N/A ${OVS_CLEAN_PATH} remove-flows
10017N/A if [ $? -ne 0 ]; then
10017N/A errlog "Error $? removing OF flows"
10017N/A fi
10017N/A
10017N/A ${OVS_CLEAN_PATH} delete-etherstub ovs.etherstub0
10017N/A if [ $? -ne 0 ]; then
10017N/A errlog "Error $? deleting the OVS etherstub"
10017N/A fi
10017N/A
10017N/A}
10017N/A
10017N/Astart_vswitch_server() {
10017N/A typeset -r VSWITCHD_LOGFILE=${OVS_LOG_DIR}/ovs-vswitchd.log
10017N/A typeset -r VSWITCHD_PIDFILE=${OVS_TMP_DIR}/ovs-vswitchd.pid
10017N/A
10017N/A create_ovs_tempdir
10017N/A
10017N/A ${PFEXEC} ${OVS_VSWITCHD_PATH} unix:${OVSDB_REMOTE} \
15153N/A -vconsole:emer -vsyslog:off -vfile:info --mlockall --no-chdir \
15153N/A --log-file=${VSWITCHD_LOGFILE} \
15153N/A --pidfile=${VSWITCHD_PIDFILE} \
10017N/A --detach
10017N/A if [ $? -ne 0 ]; then
10017N/A errlog "${OVS_VSWITCHD} failed with $?"
10017N/A exit $SMF_EXIT_ERR_FATAL
10017N/A fi
10017N/A
15157N/A
15157N/A ${OVS_VSCTL} list-br |
15157N/A while read BRIDGENAME; do
10017N/A ${PFEXEC} ${IPADM} enable-if -t ${BRIDGENAME} >/dev/null 2>&1
10017N/A done
10017N/A}
16320N/A
16320N/Acase "$1" in
16320N/A'start')
10017N/A case "$SMF_FMRI" in
10017N/A "${OVS_OVSDB_FMRI}")
10017N/A start_ovsdb_server
15153N/A ;;
15153N/A "${OVS_VSWITCHD_FMRI}")
15153N/A start_vswitch_server
10017N/A ;;
10017N/A *)
10017N/A echo "$SMF_FMRI does not support start method"
11192N/A exit $SMF_EXIT_ERR_FATAL
11192N/A ;;
11192N/A esac
9725N/A ;;
9725N/A'stop')
9725N/A case "$SMF_FMRI" in
15153N/A "${OVS_VSWITCHD_FMRI}")
15153N/A stop_vswitch_server
15153N/A ;;
9725N/A *)
9725N/A echo "$SMF_FMRI does not support stop method"
9725N/A exit $SMF_EXIT_ERR_FATAL
10017N/A ;;
10017N/A esac
10017N/A ;;
15153N/A*)
15153N/A echo "Service must be invoked from within SMF"
15153N/A exit $SMF_EXIT_ERR_FATAL
16216N/A ;;
12285N/Aesac
12285N/A
10017N/Aexit $SMF_EXIT_OK
10017N/A