2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 14:25:26 +00:00

ovs-ctl.in: Restore interfaces and ofports for userspace restarts.

When we upgrade from pre-1.9 to 1.10 or later branches, when just
the user space daemons are restarted, with the older kernel module
intact, datapaths are recreated.

This results in loosing the internal interface states like ip addresses,
routing table entries etc. Also, the 'ofport' value of the older interfaces
change.

With this patch we restore the interface states, ofport values etc,
when "ovs-ctl restart" or "/etc/init.d/openvswitch[-switch] restart
--save-flows" is called. The later command is automatically called
when debian packages are installed.

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
This commit is contained in:
Gurucharan Shetty
2013-02-28 14:46:43 -08:00
parent 737af96dde
commit a3a0a7a083

View File

@@ -285,8 +285,6 @@ save_ofports_if_required () {
action "Saving ofport values" ovs_save save-ofports \
"${script_ofports}"
;;
*)
;;
esac
}
@@ -315,7 +313,7 @@ restore_interfaces () {
level=err
fi
log="logger -p daemon.$level -t ovs-save"
$log "force-reload-kmod interface restore script exited with status $rc:"
$log "interface restore script exited with status $rc:"
$log -f "$script_interfaces"
}
@@ -379,13 +377,25 @@ force_reload_kmod () {
## restart ##
## ------- ##
save_interfaces_if_required () {
# Save interfaces if we are upgrading from a pre-1.10 branch.
case `ovs-appctl version | sed 1q` in
"ovs-vswitchd (Open vSwitch) 1."[0-9].*)
ifaces=`internal_interfaces`
action "Detected internal interfaces: $ifaces" true
if action "Saving interface configuration" save_interfaces; then
chmod +x "$script_interfaces"
fi
;;
esac
}
restart () {
if daemon_is_running ovsdb-server && daemon_is_running ovs-vswitchd; then
script_flows=`mktemp`
trap 'rm -f "${script_flows}"' 0
action "Saving flows" ovs_save save-flows "${script_flows}" \
script_flows
init_restore_scripts
save_interfaces_if_required
action "Saving flows" ovs_save save-flows "${script_flows}"
save_ofports_if_required
fi
# Restart the database first, since a large database may take a
@@ -393,11 +403,18 @@ restart () {
stop_ovsdb
start_ovsdb
# Restore of ofports, if required, should happen before vswitchd is
# restarted.
restore_ofports
stop_forwarding
start_forwarding
# Restore the saved flows. Do not return error if restore fails.
restore_flows || true
# Restore the saved flows.
restore_flows
# Restore the interfaces if required. Return true even if restore fails.
restore_interfaces || true
}
## --------------- ##