diff --git a/patches/systemvm/debian/config/root/netusage.sh b/patches/systemvm/debian/config/root/netusage.sh new file mode 100644 index 00000000000..c458ff49d7a --- /dev/null +++ b/patches/systemvm/debian/config/root/netusage.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env bash +# netusage.sh -- create iptable rules to gather network stats, running within DomR +# +usage() { + printf "Usage: %s -[c|g|r] [-[a|d] ]\n" $(basename $0) >&2 +} + +create_usage_rules () { + iptables -N NETWORK_STATS > /dev/null + iptables -I FORWARD -j NETWORK_STATS > /dev/null + iptables -I INPUT -j NETWORK_STATS > /dev/null + iptables -I OUTPUT -j NETWORK_STATS > /dev/null + iptables -A NETWORK_STATS -i eth0 -o eth2 > /dev/null + iptables -A NETWORK_STATS -i eth2 -o eth0 > /dev/null + iptables -A NETWORK_STATS -o eth2 ! -i eth0 -p tcp > /dev/null + iptables -A NETWORK_STATS -i eth2 ! -o eth0 -p tcp > /dev/null + return $? +} + +add_public_interface () { + local pubIf=$1 + iptables -A NETWORK_STATS -i eth0 -o $pubIf > /dev/null + iptables -A NETWORK_STATS -i $pubIf -o eth0 > /dev/null + iptables -A NETWORK_STATS -o $pubIf ! -i eth0 -p tcp > /dev/null + iptables -A NETWORK_STATS -i $pubIf ! -o eth0 -p tcp > /dev/null + return $? +} + +delete_public_interface () { + local pubIf=$1 + echo $pubIf >> /root/removedVifs + return $? +} + +get_usage () { + iptables -L NETWORK_STATS -n -v -x | awk '\$1 ~ /^[0-9]+\$/ { printf \"%s:\", \$2}'; /root/clearUsageRules.sh > /dev/null + if [ $? -gt 0 -a $? -ne 2 ] + then + printf $? + return 1 + fi +} + +reset_usage () { + iptables -Z NETWORK_STATS > /dev/null + if [ $? -gt 0 -a $? -ne 2 ] + then + return 1 + fi +} + +#set -x + +cflag= +gflag= +rflag= +iflag= +aflag= +dflag= + +while getopts 'cgra:d:' OPTION +do + case $OPTION in + c) cflag=1 + ;; + g) gflag=1 + ;; + r) rflag=1 + ;; + a) aflag=1 + publicIf="$OPTARG" + ;; + d) dflag=1 + publicIf="$OPTARG" + ;; + ?) usage + exit 2 + ;; + esac +done + +if [ "$cflag" == "1" ] +then + create_usage_rules + exit $? +fi + +if [ "$gflag" == "1" ] +then + get_usage + exit $? +fi + +if [ "$rflag" == "1" ] +then + reset_usage + exit $? +fi + +if [ "$aflag" == "1" ] +then + add_public_interface $publicIf + exit $? +fi + +if [ "$dflag" == "1" ] +then + delete_public_interface $publicIf + exit $? +fi + +exit 0 +