#!/bin/sh nsexec () { local ns=$1 shift if [ "$ns" = "global" ]; then "$@" else ip netns exec $ns "$@" fi } workdir=$(mktemp -d networkXXXXXX) trap "cd $PWD; rm -rf $workdir" EXIT hostname=${HOSTNAME%%.*} datestamp=$(date +%Y-%m-%dT%H-%M-%S) output=network-${hostname}-${datestamp} startdir=$PWD ( cd $workdir hostname > hostname.txt date +%s > created.txt echo "+ gathering ovs information" ovs-vsctl show > ovs-vsctl-show.txt ovs-dpctl show > ovs-dpctl-show.txt ovs-vsctl list-br | tee ovs-bridges.txt | while read br; do echo " - device $br" ovs-ofctl dump-flows $br > ovs-ofctl-dump-flows-$br.txt done (echo global; ip netns) | while read ns; do echo "+ examing namespaces $ns" >&2 interfaces=$(nsexec $ns ls /sys/class/net | grep -v lo) if ! [ "$interfaces" ]; then echo " - skipping emtpy namespace" >&2 echo $ns >> namespace-inactive.txt continue else echo $ns >> namespace-active.txt fi mkdir -p $ns/{interfaces,iptables,connections} for interface in $interfaces; do nsexec $ns ip addr show dev $interface > $ns/interfaces/$interface.txt done nsexec $ns ip route show > $ns/routes.txt nsexec $ns iptables-save -t filter > $ns/iptables/filter.txt nsexec $ns iptables-save -t nat > $ns/iptables/nat.txt if [ "$ns" != global ]; then ip netns pids $ns | xargs -iPID ps -pPID -fh > $ns/processes.txt fi nsexec $ns netstat -tan | egrep -v 'TIME_WAIT' > $ns/connections/tcp.txt nsexec $ns netstat -uan > $ns/connections/udp.txt done tar -cz -f $startdir/${output}.tar.gz --xform "s|^|$output/|" * ) ls -l $startdir/${output}.tar.gz