## start ##
## ----- ##
-insert_openvswitch_mod_if_required () {
+insert_mod_if_required () {
# If openvswitch is already loaded then we're done.
test -e /sys/module/openvswitch -o -e /sys/module/openvswitch_mod && \
return 0
action "Inserting openvswitch module" modprobe openvswitch
}
-insert_mod_if_required () {
- insert_openvswitch_mod_if_required || return 1
-}
-
ovs_vsctl () {
ovs-vsctl --no-wait "$@"
}
fi
}
+add_managers () {
+ # Now that ovs-vswitchd has started and completed its initial
+ # configuration, tell ovsdb-server to conenct to the remote managers. We
+ # used to do this at ovsdb-server startup time, but waiting for
+ # ovs-vswitchd to finish configuring means that remote managers see less
+ # churn in the database at startup or restart. (For example, managers
+ # won't briefly see empty datapath-id or ofport columns for records that
+ # exist at startup.)
+ action "Enabling remote OVSDB managers" \
+ ovs-appctl -t ovsdb-server ovsdb-server/add-remote \
+ db:Open_vSwitch,Open_vSwitch,manager_options
+}
+
start_forwarding () {
check_force_cores
fi
start_daemon "$OVS_VSWITCHD_PRIORITY" "$OVS_VSWITCHD_WRAPPER" "$@"
fi
-
- # Now that ovs-vswitchd has started and completed its initial
- # configuration, tell ovsdb-server to conenct to the remote managers. We
- # used to do this at ovsdb-server startup time, but waiting for
- # ovs-vswitchd to finish configuring means that remote managers see less
- # churn in the database at startup or restart. (For example, managers
- # won't briefly see empty datapath-id or ofport columns for records that
- # exist at startup.)
- action "Enabling remote OVSDB managers" \
- ovs-appctl -t ovsdb-server ovsdb-server/add-remote \
- db:Open_vSwitch,Open_vSwitch,manager_options
}
## ---- ##
action "Restoring ofport values" "${script_ofports}"
}
+flow_restore_wait () {
+ ovs_vsctl set open_vswitch . other_config:flow-restore-wait="true"
+}
+
+flow_restore_complete () {
+ ovs_vsctl --if-exists remove open_vswitch . other_config \
+ flow-restore-wait="true"
+}
+
restore_flows () {
[ -x "${script_flows}" ] && \
action "Restoring saved flows" "${script_flows}"
else
log_warning_msg "Failed to save configuration, not replacing kernel module"
start_forwarding
+ add_managers
exit 1
fi
chmod +x "$script_interfaces"
action "Removing openvswitch module" rmmod openvswitch
fi
+ # Start vswitchd by asking it to wait till flow restore is finished.
+ flow_restore_wait
start_forwarding
+ # Restore saved flows and inform vswitchd that we are done.
restore_flows
+ flow_restore_complete
+ add_managers
restore_interfaces
restore_ofports
stop_forwarding
+
+ # Start vswitchd by asking it to wait till flow restore is finished.
+ flow_restore_wait
start_forwarding
- # Restore the saved flows.
+ # Restore saved flows and inform vswitchd that we are done.
restore_flows
+ flow_restore_complete
+ add_managers
# Restore the interfaces if required. Return true even if restore fails.
restore_interfaces || true
start)
start_ovsdb
start_forwarding
+ add_managers
;;
stop)
stop_forwarding