Thanks, I fixed the trailing whitespace.

I also applied the following, which should fix up the packaging
(thanks for pointing that out).  I tested the XenServer and Debian
builds but not the RHEL ones.

Any further comments?  Do you still plan to test this?

diff --git a/debian/openvswitch-switch.install 
b/debian/openvswitch-switch.install
index a7006ac..557429b 100644
--- a/debian/openvswitch-switch.install
+++ b/debian/openvswitch-switch.install
@@ -6,6 +6,7 @@ usr/bin/ovs-vsctl
 usr/bin/ovsdb-tool
 usr/sbin/ovs-vswitchd
 usr/sbin/ovsdb-server
+usr/share/openvswitch/scripts/ovs-check-dead-ifs
 usr/share/openvswitch/scripts/ovs-ctl
 usr/share/openvswitch/scripts/ovs-lib
 usr/share/openvswitch/scripts/ovs-save
diff --git a/rhel/openvswitch.spec.in b/rhel/openvswitch.spec.in
index e999757..00d1aa7 100644
--- a/rhel/openvswitch.spec.in
+++ b/rhel/openvswitch.spec.in
@@ -146,6 +146,7 @@ exit 0
 /usr/share/openvswitch/bugtool-plugins/
 /usr/share/openvswitch/python/
 /usr/share/openvswitch/scripts/ovs-bugtool-*
+/usr/share/openvswitch/scripts/ovs-check-dead-ifs
 /usr/share/openvswitch/scripts/ovs-ctl
 /usr/share/openvswitch/scripts/ovs-lib
 /usr/share/openvswitch/scripts/ovs-save
diff --git a/xenserver/openvswitch-xen.spec.in 
b/xenserver/openvswitch-xen.spec.in
index 1e8d764..46b6f60 100644
--- a/xenserver/openvswitch-xen.spec.in
+++ b/xenserver/openvswitch-xen.spec.in
@@ -407,6 +407,7 @@ exit 0
 /etc/logrotate.d/openvswitch
 /etc/profile.d/openvswitch.sh
 /usr/share/openvswitch/python/
+/usr/share/openvswitch/scripts/ovs-check-dead-ifs
 /usr/share/openvswitch/scripts/ovs-xapi-sync
 /usr/share/openvswitch/scripts/interface-reconfigure
 /usr/share/openvswitch/scripts/InterfaceReconfigure.py


On Mon, Apr 30, 2012 at 03:38:11PM -0700, Gurucharan Shetty wrote:
> "git am" gives whitespace warning.
> I will give this a test.
> 
> Also, the xenserver rpm build fails. It probably expects the file in
> the .spec.in file.
> 
> On Fri, Apr 27, 2012 at 3:55 PM, Ben Pfaff <[email protected]> wrote:
> > This should make it more obvious when the admin needs to restart a DHCP
> > client (or other daemon).  Without this, unless the admin carefully reads
> > the documentation, the first notice he gets about a need to restart the
> > DHCP client can easily be when the lease expires and the machine drops off
> > the network.
> >
> > Bug #5391.
> > Suggested-by: Duffie Cooley <[email protected]>
> > Signed-off-by: Ben Pfaff <[email protected]>
> > ---
> > I've tested the ovs-check-dead-ifs script but not the integration
> > with ovs-ctl.
> >
> >  utilities/automake.mk           |    6 ++-
> >  utilities/ovs-check-dead-ifs.in |   96 
> > +++++++++++++++++++++++++++++++++++++++
> >  utilities/ovs-ctl.8             |   14 ++++--
> >  utilities/ovs-ctl.in            |    2 +
> >  4 files changed, 112 insertions(+), 6 deletions(-)
> >  create mode 100755 utilities/ovs-check-dead-ifs.in
> >
> > diff --git a/utilities/automake.mk b/utilities/automake.mk
> > index 0e93ffb..711c75f 100644
> > --- a/utilities/automake.mk
> > +++ b/utilities/automake.mk
> > @@ -13,10 +13,14 @@ bin_SCRIPTS += \
> >        utilities/ovs-vlan-test
> >  endif
> >  noinst_SCRIPTS += utilities/ovs-pki-cgi
> > -scripts_SCRIPTS += utilities/ovs-ctl utilities/ovs-save
> > +scripts_SCRIPTS += \
> > +       utilities/ovs-check-dead-ifs \
> > +       utilities/ovs-ctl \
> > +       utilities/ovs-save
> >  scripts_DATA += utilities/ovs-lib
> >
> >  EXTRA_DIST += \
> > +       utilities/ovs-check-dead-ifs.in \
> >        utilities/ovs-ctl.in \
> >        utilities/ovs-lib.in \
> >        utilities/ovs-parse-leaks.in \
> > diff --git a/utilities/ovs-check-dead-ifs.in 
> > b/utilities/ovs-check-dead-ifs.in
> > new file mode 100755
> > index 0000000..53185d6
> > --- /dev/null
> > +++ b/utilities/ovs-check-dead-ifs.in
> > @@ -0,0 +1,96 @@
> > +#! @PYTHON@
> > +
> > +import os
> > +import re
> > +import stat
> > +import sys
> > +
> > +if "--help" in sys.argv:
> > +    sys.stdout.write("""\
> > +ovs-check-dead-ifs: Check for packet sockets for nonexistent network 
> > devices.
> > +
> > +One side effect of the "force-reload-kmod" command that reloads the
> > +Open vSwitch kernel module is that all the network devices that the
> > +Open vSwitch kernel module implemented get destroyed and then replaced
> > +by new instances with the same names.  Unfortunately, programs that
> > +are listening for packets on the original network devices will not
> > +receive packets that arrive on the new instances.  This causes some
> > +services, such as DHCP, to silently fail.  This program looks for such
> > +problems and, if it finds any, prints information about programs that
> > +are in such a state.  The system administrator should then take some
> > +action to fix the problem, such as restarting these programs.
> > +""")
> > +    sys.exit(0)
> > +elif len(sys.argv) > 1:
> > +    sys.stderr.write("ovs-check-dead-ifs: no arguments or options accepted 
> > "
> > +                     "(use --help for help)\n")
> > +    sys.exit(1)
> > +
> > +# Get the set of all valid ifindexes.
> > +#
> > +# 0 is always valid for our purposes because it means "any interface".
> > +valid_ifindexes = set([])
> > +for ifname in os.listdir("/sys/class/net"):
> > +    fn = "/sys/class/net/%s/ifindex" % ifname
> > +    try:
> > +        valid_ifindexes.add(int(open(fn).readline()))
> > +    except IOError:
> > +        pass
> > +    except ValueError:
> > +        print "%s: unexpected format\n" % fn
> > +
> > +# Get inodes for all packet sockets whose ifindexes don't exist.
> > +invalid_inodes = set()
> > +f = open("/proc/net/packet")
> > +f.readline()                    # Skip header line.
> > +for line in f:
> > +    fields = line.split()
> > +    ifindex = int(fields[4])
> > +    if ifindex not in valid_ifindexes:
> > +        invalid_inodes.add(int(fields[8]))
> > +f.close()
> > +
> > +if not invalid_inodes:
> > +    sys.exit(0)
> > +
> > +# Now find the processes that are using those packet sockets.
> > +inode_re = re.compile(r'socket:\[([0-9]+)\]$')
> > +bad_pids = set()
> > +for pid in os.listdir("/proc"):
> > +    try:
> > +        pid = int(pid)
> > +    except ValueError:
> > +        continue
> > +
> > +    for fd in os.listdir("/proc/%d/fd" % pid):
> > +        try:
> > +            fd = int(fd)
> > +        except ValueError:
> > +            continue
> > +
> > +        try:
> > +            s = os.stat("/proc/%d/fd/%d" % (pid, fd))
> > +        except OSError:
> > +            continue
> > +
> > +        if not stat.S_ISSOCK(s.st_mode):
> > +            continue
> > +
> > +        try:
> > +            linkname = os.readlink("/proc/%d/fd/%d" % (pid, fd))
> > +        except OSError:
> > +            continue
> > +
> > +        m = inode_re.match(linkname)
> > +        if not m:
> > +            continue
> > +
> > +        inode = int(m.group(1))
> > +        if inode in invalid_inodes:
> > +            bad_pids.add(pid)
> > +
> > +if bad_pids:
> > +    print """
> > +The following processes are listening for packets to arrive on network 
> > devices
> > +that no longer exist. You may want to restart them."""
> > +    os.execvp("ps", ["ps"] + ["%s" % pid for pid in bad_pids])
> > diff --git a/utilities/ovs-ctl.8 b/utilities/ovs-ctl.8
> > index 06ccfec..988b500 100644
> > --- a/utilities/ovs-ctl.8
> > +++ b/utilities/ovs-ctl.8
> > @@ -261,11 +261,15 @@ reloads the kernel module and restarts the OVS 
> > daemons (including
> >  .IP 6.
> >  Restores the kernel configuration state that was saved in step 3.
> >  .
> > -.PP
> > -The steps above are often enough to hot-upgrade a new kernel module
> > -with only a few seconds of downtime.  DHCP is a common problem: if the
> > -ISC DHCP client is running on an OVS internal interface, then it will
> > -have to be restarted after completing the above procedure.
> > +.IP 7.
> > +Checks for daemons that may need to be restarted because they have
> > +packet sockets that are listening on old instances of Open vSwitch
> > +kernel interfaces and, if it finds any, prints a warning on stdout.
> > +DHCP is a common example: if the ISC DHCP client is running on an OVS
> > +internal interface, then it will have to be restarted after completing
> > +the above procedure.  (It would be nice if \fBovs\-ctl\fR could restart
> > +daemons automatically, but the details are far too specific to a
> > +particular distribution and installation.)
> >  .
> >  .PP
> >  \fBforce\-kmod\-reload\fR internally stops and starts OVS, so it
> > diff --git a/utilities/ovs-ctl.in b/utilities/ovs-ctl.in
> > index ed55834..6885382 100755
> > --- a/utilities/ovs-ctl.in
> > +++ b/utilities/ovs-ctl.in
> > @@ -311,6 +311,8 @@ force_reload_kmod () {
> >     log="logger -p daemon.$level -t ovs-save"
> >     $log "force-reload-kmod interface restore script exited with status 
> > $rc:"
> >     $log -f "$script"
> > +
> > +    "$datadir/scripts/ovs-check-dead-ifs"
> >  }
> >
> >  ## --------------- ##
> > --
> > 1.7.2.5
> >
> > _______________________________________________
> > dev mailing list
> > [email protected]
> > http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to