components/openvswitch/files/ovs-svc
changeset 5090 5f131162e136
child 5730 cca4aa297e68
equal deleted inserted replaced
5089:8d5767cc3ddc 5090:5f131162e136
       
     1 #!/sbin/sh
       
     2 #
       
     3 #
       
     4 # CDDL HEADER START
       
     5 #
       
     6 # The contents of this file are subject to the terms of the
       
     7 # Common Development and Distribution License (the "License").
       
     8 # You may not use this file except in compliance with the License.
       
     9 #
       
    10 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
       
    11 # or http://www.opensolaris.org/os/licensing.
       
    12 # See the License for the specific language governing permissions
       
    13 # and limitations under the License.
       
    14 #
       
    15 # When distributing Covered Code, include this CDDL HEADER in each
       
    16 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
       
    17 # If applicable, add the following below this CDDL HEADER, with the
       
    18 # fields enclosed by brackets "[]" replaced with your own identifying
       
    19 # information: Portions Copyright [yyyy] [name of copyright owner]
       
    20 #
       
    21 # CDDL HEADER END
       
    22 #
       
    23 #
       
    24 
       
    25 #
       
    26 # Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
       
    27 #
       
    28 
       
    29 . /lib/svc/share/smf_include.sh
       
    30 . /lib/svc/share/net_include.sh
       
    31 
       
    32 typeset -r OVS_OVSDB_FMRI=svc:/application/openvswitch/ovsdb-server:default
       
    33 typeset -r OVS_VSWITCHD_FMRI=svc:/application/openvswitch/vswitch-server:default
       
    34 
       
    35 typeset -r OVS_USRLIB_DIR=/usr/lib/ovs
       
    36 typeset -r OVS_VARLIB_DIR=/var/lib/ovs
       
    37 typeset -r OVS_TMP_DIR=/var/run/ovs
       
    38 typeset -r OVS_LOG_DIR=/var/log/ovs
       
    39 
       
    40 typeset -r OVS_USER=_ovs
       
    41 typeset -r OVS_GROUP=_ovs
       
    42 
       
    43 typeset -r OVS_SBIN_DIR=/usr/sbin
       
    44 typeset -r OVSDB_TOOL=${OVS_SBIN_DIR}/ovsdb-tool
       
    45 typeset -r OVS_VSCTL=${OVS_SBIN_DIR}/ovs-vsctl
       
    46 
       
    47 typeset -r OVS_VSWITCHD=ovs-vswitchd
       
    48 typeset -r OVSDB_SERVER=ovsdb-server
       
    49 typeset -r OVS_CLEAN=ovs-clean.py
       
    50 typeset -r OVSDB_SERVER_PATH=${OVS_USRLIB_DIR}/${OVSDB_SERVER}
       
    51 typeset -r OVS_VSWITCHD_PATH=${OVS_USRLIB_DIR}/${OVS_VSWITCHD}
       
    52 typeset -r OVS_CLEAN_PATH=${OVS_USRLIB_DIR}/${OVS_CLEAN}
       
    53 
       
    54 typeset -r OVSDB_REMOTE=${OVS_TMP_DIR}/db.sock
       
    55 
       
    56 typeset -r PFEXEC=/usr/bin/pfexec
       
    57 typeset -r MKDIR=/usr/bin/mkdir
       
    58 typeset -r CHOWN=/usr/bin/chown
       
    59 typeset -r PKILL=/usr/bin/pkill
       
    60 typeset -r DLADM=/usr/sbin/dladm
       
    61 typeset -r FLOWADM=/usr/sbin/flowadm
       
    62 
       
    63 errlog () {
       
    64 	echo $1 >&2
       
    65 }
       
    66 
       
    67 create_ovs_tempdir() {
       
    68 	if [[ ! -d ${OVS_TMP_DIR} ]]; then
       
    69 		${PFEXEC} ${MKDIR} -m 775 ${OVS_TMP_DIR} || exit $SMF_EXIT_ERR_CONFIG
       
    70                 ${PFEXEC} ${CHOWN} ${OVS_USER}:${OVS_GROUP} ${OVS_TMP_DIR}
       
    71 	fi
       
    72 }
       
    73 
       
    74 start_ovsdb_server() {
       
    75 	typeset -i OVSDB_INIT=0
       
    76 	typeset -r OVSDB_DATABASE=${OVS_VARLIB_DIR}/etc/conf.db
       
    77 
       
    78 	create_ovs_tempdir
       
    79 
       
    80 	if [[ ! -f ${OVSDB_DATABASE} ]]; then
       
    81 		typeset -r OVSDB_SCHEMA=${OVS_USRLIB_DIR}/share/vswitch.ovsschema
       
    82 
       
    83 		echo "Creating ${OVSDB_DATABASE} from ${OVSDB_SCHEMA}"
       
    84 		${OVSDB_TOOL} create ${OVSDB_DATABASE} ${OVSDB_SCHEMA}
       
    85 		if [ $? -ne 0 ]; then
       
    86 			errlog "Error creating database, exiting"
       
    87 			return 1
       
    88 		fi
       
    89 		OVSDB_INIT=1
       
    90 	fi
       
    91 
       
    92 	typeset -r OVSDB_LOGFILE=${OVS_LOG_DIR}/ovsdb-server.log
       
    93 	typeset -r OVSDB_PIDFILE=${OVS_TMP_DIR}/ovsdb-server.pid
       
    94 
       
    95 	${OVSDB_SERVER_PATH} ${OVSDB_DATABASE} \
       
    96 	    -vconsole:emer -vsyslog:err -vfile:info \
       
    97 	    --remote=punix:${OVSDB_REMOTE} \
       
    98 	    --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
       
    99 	    --private-key=db:Open_vSwitch,SSL,private_key \
       
   100 	    --certificate=db:Open_vSwitch,SSL,certificate \
       
   101 	    --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
       
   102 	    --no-chdir --log-file=${OVSDB_LOGFILE} \
       
   103 	    --pidfile=${OVSDB_PIDFILE} \
       
   104 	    --detach
       
   105 	if [ $? -ne 0 ]; then
       
   106 		errlog "${OVSDB_SERVER_PATH} failed with $?"
       
   107 		exit $SMF_EXIT_ERR_FATAL
       
   108 	fi
       
   109 
       
   110 	if [ ${OVSDB_INIT} -ne 0 ]; then
       
   111 		echo "Initializing OVSDB database"
       
   112 		${OVS_VSCTL} --no-wait init
       
   113 		if [ $? -ne 0 ]; then
       
   114 			errlog "${OVSDB_VSCTL} failed with $?"
       
   115 			exit $SMF_EXIT_ERR_FATAL
       
   116 		fi
       
   117 	fi
       
   118 }
       
   119 
       
   120 stop_vswitch_server() {
       
   121         typeset BRIDGENAME
       
   122 
       
   123         $PKILL -x -u ${OVS_USER} -z `smf_zonename` ${OVS_VSWITCHD}
       
   124         if [[ $? -ne 0 && $? -ne 1 ]]; then
       
   125                 errlog "pkill of ${OVS_VSWITCHD} failed with $?"
       
   126         fi
       
   127 
       
   128         ${OVS_VSCTL} list-br |
       
   129                 while read BRIDGENAME; do
       
   130                         ${OVS_CLEAN_PATH} delete-vnic ${BRIDGENAME}
       
   131                         if [ $? -ne 0 ]; then
       
   132                                 errlog "Error $? removing ${BRIDGENAME} VNIC"
       
   133                         fi
       
   134                 done
       
   135         ${OVS_CLEAN_PATH} reset-ofports
       
   136 	if [ $? -ne 0 ]; then
       
   137         	errlog "Error $? resetting OF ports"
       
   138 	fi
       
   139 
       
   140         ${OVS_CLEAN_PATH} remove-flows
       
   141         if [ $? -ne 0 ]; then
       
   142                 errlog "Error $? removing OF flows"
       
   143         fi
       
   144 
       
   145         ${OVS_CLEAN_PATH} delete-etherstub ovs.etherstub0
       
   146         if [ $? -ne 0 ]; then
       
   147                 errlog "Error $? deleting the OVS etherstub"
       
   148         fi
       
   149 
       
   150 }
       
   151 
       
   152 start_vswitch_server() {
       
   153 	typeset -r VSWITCHD_LOGFILE=${OVS_LOG_DIR}/ovs-vswitchd.log
       
   154 	typeset -r VSWITCHD_PIDFILE=${OVS_TMP_DIR}/ovs-vswitchd.pid
       
   155 
       
   156 	create_ovs_tempdir
       
   157 
       
   158 	${OVS_VSWITCHD_PATH} unix:${OVSDB_REMOTE} \
       
   159 	    -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir \
       
   160 	    --log-file=${VSWITCHD_LOGFILE} \
       
   161 	    --pidfile=${VSWITCHD_PIDFILE} \
       
   162 	    --detach
       
   163 	if [ $? -ne 0 ]; then
       
   164 		errlog "${OVS_VSWITCHD} failed with $?"
       
   165 		exit $SMF_EXIT_ERR_FATAL
       
   166 	fi
       
   167 }
       
   168 
       
   169 case "$1" in
       
   170 'start')
       
   171 	case "$SMF_FMRI" in
       
   172 	"${OVS_OVSDB_FMRI}")
       
   173 		start_ovsdb_server
       
   174 		;;
       
   175 	"${OVS_VSWITCHD_FMRI}")
       
   176 		start_vswitch_server
       
   177 		;;
       
   178 	*)
       
   179 		echo "$SMF_FMRI does not support start method"
       
   180 		exit $SMF_EXIT_ERR_FATAL
       
   181 		;;
       
   182 	esac
       
   183 	;;
       
   184 'stop')
       
   185 	case "$SMF_FMRI" in
       
   186 	"${OVS_VSWITCHD_FMRI}")
       
   187 		stop_vswitch_server
       
   188 		;;
       
   189 	*)
       
   190 		echo "$SMF_FMRI does not support stop method"
       
   191 		exit $SMF_EXIT_ERR_FATAL
       
   192 		;;
       
   193 	esac 
       
   194 	;;
       
   195 *)
       
   196 	echo "Service must be invoked from within SMF"
       
   197 	exit $SMF_EXIT_ERR_FATAL
       
   198 	;;
       
   199 esac
       
   200 
       
   201 exit $SMF_EXIT_OK