- #!/bin/sh /etc/rc.common
- # Copyright (C) 2013 Julius Schulz-Zander <julius@net.t-labs.tu-berlin.de>
- # Copyright (C) 2014-2017 OpenWrt.org
- # Copyright (C) 2018 Yousong Zhou <yszhou4tech@gmail.com>
-
- START=15
-
- ovs_ctl="/usr/share/openvswitch/scripts/ovs-ctl"; [ -x "$ovs_ctl" ] || ovs_ctl=:
- ovn_ctl="/usr/share/ovn/scripts/ovn-ctl"; [ -x "$ovn_ctl" ] || ovn_ctl=:
-
- extra_command "status" "Get status information"
-
- start() {
- ovs_action start "$@"
- }
-
- stop() {
- ovs_action stop "$@"
- }
-
- restart() {
- ovs_action restart "$@"
- }
-
- status() {
- ovs_action status "$@"
- }
-
- ovs_action_cfgs=
- ovs_action() {
- local action="$1"; shift
- local cfgtype
-
- ovs_action_cfgs="$*"
- config_load openvswitch
- for cfgtype in ovs ovn_northd ovn_controller; do
- config_foreach "ovs_xx" "$cfgtype" "$action" "$cfgtype"
- done
-
- config_foreach ovs_bridge_init "ovs_bridge"
- }
-
- ovs_xx() {
- local cfg="$1"
- local action="$2"
- local cfgtype="$3"
- local disabled
-
- if [ -n "$ovs_action_cfgs" ] && ! list_contains "ovs_action_cfgs" "$cfg"; then
- return
- fi
- case "$action" in
- status|stop) ;;
- *)
- config_get_bool disabled "$cfg" disabled 0
- [ "$disabled" == "0" ] || return
- ;;
- esac
-
- case "$cfgtype" in
- ovs)
- "$ovs_ctl" "$action" \
- --system-id=random
- ;;
- ovn_*)
- "$ovn_ctl" "${action}_${cfgtype#ovn_}"
- ;;
- esac
- }
-
- ovs_bridge_init() {
- local cfg="$1"
-
- local disabled
- local name
- local controller
-
- config_get_bool disabled "$cfg" disabled 0
- [ "$disabled" == "0" ] || return
-
- config_get name "$cfg" name $cfg
- ovs-vsctl --may-exist add-br "$name"
-
- config_get controller "$cfg" controller
- [ -n "$controller" ] && \
- ovs-vsctl set-controller "$name" "$controller"
- }
|