[ovs-dev] [kernel-reload 8/8] xenserver: Introduce "force-reload-kmod" to reload kernel module.
Ben Pfaff
blp at nicira.com
Wed Feb 9 00:44:39 UTC 2011
On Tue, Feb 08, 2011 at 03:34:03PM -0800, Ben Pfaff wrote:
> On Tue, Feb 08, 2011 at 03:24:32PM -0800, Ethan Jackson wrote:
> > On Tue, Feb 8, 2011 at 3:18 PM, Ben Pfaff <blp at nicira.com> wrote:
> > > On Tue, Feb 08, 2011 at 03:14:39PM -0800, Ethan Jackson wrote:
> > >> > +if test "$#" = 0; then
> > >> > + ? ?echo "# $0: no parameters given (use \"$0 --help\" for help)"
> > >> > +fi
> > >> Perhaps this should cause it to exit unsuccessfully.
> > >
> > > I did it this way in case the init script doesn't find any interfaces to
> > > save. ?I guess it could avoid invoking it at all in that case.
> >
> > Yeah I was wondering about this. A possible approach (which I
> > considered mentioning but decided against it) would be to change the
> > force_reload_kmod init script to give up when ovs-save fails (for
> > example on my system it fails because I don't have iptables-save).
>
> We can probably skip iptables entirely, without an error, if
> iptables-save is not present: Red Hat and Debian both put iptables and
> iptables-save in the same package, so if iptables-save is not present
> then it is unlikely that any iptables rules are configured.
>
> > As part of this change, we could change ovs-save to be more exacting
> > and die with an exit code when things aren't as it expects. This has
> > the benefit of preventing bugs in ovs-save or configuration errors
> > from hosing the system.
>
> I thought about that. I'll take another look at doing it that way.
I made some changes that move in that direction:
diff --git a/utilities/ovs-save b/utilities/ovs-save
index 76f02da..b2c726e 100755
--- a/utilities/ovs-save
+++ b/utilities/ovs-save
@@ -31,6 +31,23 @@ fi
PATH=/sbin:/bin:/usr/sbin:/usr/bin
+missing_program () {
+ save_IFS=$IFS
+ IFS=:
+ for dir in $PATH; do
+ IFS=$save_IFS
+ if test -x $dir/$1; then
+ return 1
+ fi
+ done
+ IFS=$save_IFS
+ return 0
+}
+if missing_program ip; then
+ echo "$0: ip not found in $PATH" >&2
+ exit 1
+fi
+
if test "$#" = 0; then
echo "# $0: no parameters given (use \"$0 --help\" for help)"
fi
@@ -128,7 +145,13 @@ for dev in $devs; do
echo
done
-echo "# global"
-echo "iptables-restore <<'EOF'"
-iptables-save
-echo "EOF"
+if missing_program iptables-save; then
+ echo "# iptables-save not found in $PATH, not saving iptables state"
+else
+ echo "# global"
+ echo "iptables-restore <<'EOF'"
+ iptables-save
+ echo "EOF"
+fi
+
+exit 0
diff --git a/xenserver/etc_init.d_openvswitch b/xenserver/etc_init.d_openvswitch
index 582a153..a08a95d 100755
--- a/xenserver/etc_init.d_openvswitch
+++ b/xenserver/etc_init.d_openvswitch
@@ -474,7 +474,11 @@ function force_reload_kmod {
script=$(mktemp)
action "Save interface configuration to $script" true
- /usr/share/openvswitch/scripts/ovs-save $ifaces > $script
+ if ! /usr/share/openvswitch/scripts/ovs-save $ifaces > $script; then
+ warning "Failed to save configuration, not replacing kernel module"
+ start
+ exit 1
+ fi
chmod +x $script
action "Destroy datapaths" remove_all_dp
More information about the dev
mailing list