/snap/lxd/40526/share/openvswitch/scripts
NameSizeModeActions
ovs-bugtool-daemons-ver8720755editdlrm
ovs-bugtool-fdb-show8520755editdlrm
ovs-bugtool-get-dpdk-nic-numa9770755editdlrm
ovs-bugtool-get-port-stats3950755editdlrm
ovs-bugtool-ovs-appctl-dpif9190755editdlrm
ovs-bugtool-ovs-bridge-datapath-type8340755editdlrm
ovs-bugtool-ovs-ofctl-loop-over-bridges12660755editdlrm
ovs-bugtool-ovs-vswitchd-threads-affinity8250755editdlrm
ovs-bugtool-qos-configs10460755editdlrm
ovs-bugtool-tc-class-show9810755editdlrm
ovs-check-dead-ifs29870755editdlrm
ovs-ctl189220755editdlrm
ovs-kmod-ctl60840755editdlrm
ovs-lib221340644editdlrm
ovs-monitor-ipsec515000755editdlrm
ovs-save56990755editdlrm
ovs-vtep276800755editdlrm
Edit: /snap/lxd/40526/share/openvswitch/scripts/ovs-check-dead-ifs (2987B)
#! /usr/bin/python3 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 try: fds = os.listdir("/proc/%d/fd" % pid) except OSError: continue for fd in fds: 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.""") sys.stdout.flush() os.execvp("ps", ["ps"] + ["%s" % pspid for pspid in bad_pids])