diff --git a/debian/openvswitch-switch.init b/debian/openvswitch-switch.init index d84c1b671ca..84aa4503530 100755 --- a/debian/openvswitch-switch.init +++ b/debian/openvswitch-switch.init @@ -75,10 +75,35 @@ stop () { } restart () { - # OVS_RESTART_SAVE_FLOWS can be set by package postinst script. - if [ "$OVS_RESTART_SAVE_FLOWS" = "yes" ] || \ - [ "$1" = "--save-flows=yes" ]; then + # OVS_FORCE_RELOAD_KMOD can be set by package postinst script. + if [ "$1" = "--save-flows=yes" ] || \ + [ "${OVS_FORCE_RELOAD_KMOD}" = "no" ]; then start restart + elif [ "${OVS_FORCE_RELOAD_KMOD}" = "yes" ]; then + depmod -a + + if [ -e /sys/module/openvswitch ]; then + LOADED_SRCVERSION=`cat /sys/module/openvswitch/srcversion` + LOADED_VERSION=`cat /sys/module/openvswitch/version` + elif [ -e /sys/module/openvswitch_mod ]; then + LOADED_SRCVERSION=`cat /sys/module/openvswitch_mod/srcversion` + LOADED_VERSION=`cat /sys/module/openvswitch_mod/version` + fi + SRCVERSION=`modinfo -F srcversion openvswitch 2>/dev/null` + VERSION=`modinfo -F version openvswitch 2>/dev/null` + + ovs_ctl_log "Package upgrading:\n"\ + "Loaded version: ${LOADED_VERSION} ${LOADED_SRCVERSION}.\n"\ + "Version on disk: ${VERSION} ${SRCVERSION}." + + # If the kernel module was previously loaded and it is different than + # the kernel module on disk, then do a 'force-reload-kmod'. + if [ -n "${LOADED_SRCVERSION}" ] && [ -n "${SRCVERSION}" ] && \ + [ "${SRCVERSION}" != "${LOADED_SRCVERSION}" ]; then + start force-reload-kmod + else + start restart + fi else stop start diff --git a/debian/openvswitch-switch.postinst b/debian/openvswitch-switch.postinst index ac6ed653ace..24645724965 100755 --- a/debian/openvswitch-switch.postinst +++ b/debian/openvswitch-switch.postinst @@ -49,9 +49,10 @@ esac OVS_MISSING_KMOD_OK=yes export OVS_MISSING_KMOD_OK -# Save and restore openflow flows during a package upgrade. -OVS_RESTART_SAVE_FLOWS=yes -export OVS_RESTART_SAVE_FLOWS +# force-reload-kmod during upgrade. If a user wants to override this, +# they can set the variable OVS_FORCE_RELOAD_KMOD=no while installing. +[ -z "${OVS_FORCE_RELOAD_KMOD}" ] && OVS_FORCE_RELOAD_KMOD=yes || true +export OVS_FORCE_RELOAD_KMOD #DEBHELPER# diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in index f7b5bd4703a..1684ddcdd62 100644 --- a/utilities/ovs-lib.in +++ b/utilities/ovs-lib.in @@ -37,6 +37,10 @@ else dbdir='@DBDIR@' fi +ovs_ctl_log () { + echo "$@" >> "${logdir}/ovs-ctl.log" +} + ovs_ctl () { case "$@" in *"=strace"*)