grml-sniff: disable IPv6 to avoid neighbor solicitation/multicast traffic
[grml-network.git] / sbin / grml-sniff
index 3722c6a..cbb8ec1 100755 (executable)
@@ -16,22 +16,28 @@ usage_info()
    einfo "Configure via $CONFIG_FILE - see man 8 grml-sniff" ; eend 0
 }
 
-if ! [ -r "$CONFIG_FILE" ] ; then
-  eerror "$CONFIG_FILE could not be read."
-  exit 1
-fi
-
-. "$CONFIG_FILE"
-
-if [ -z "$BRIDGE_DEVICES" ] ; then
-   eerror "Bridge devices (\$BRIDGE_DEVICES) not set in $CONFIG_FILE"
-   exit 1
+if [ -r "$CONFIG_FILE" ] ; then
+  . "$CONFIG_FILE"
+else
+  ewarn "Could not read $CONFIG_FILE"
 fi
 
+# defaults if unconfigured
 [ -n "$BRCTL" ]          || BRCTL='brctl'
 [ -n "$BRIDGE_NAME" ]    || BRIDGE_NAME='br0'
 [ -n "$BRIDGE_DEVICES" ] || BRIDGE_DEVICES='eth0 eth1'
 
+check_devs() {
+  for dev in $BRIDGE_DEVICES ; do
+    ip link show dev "$dev" >/dev/null 2>&1 || return 1
+ done
+}
+
+if ! check_devs ; then
+  eerror "BRIDGE_DEVICES $BRIDGE_DEVICES do not seem to exist." >&2
+  exit 1
+fi
+
 check4progs $BRCTL || exit 1
 
 case "$1" in
@@ -39,6 +45,10 @@ case "$1" in
         check4root || exit 1
         einfo "Starting sniffing setup"
         eindent
+
+            einfo "Disabling IPv6 to avoid neighbor solicitation/multicast traffic"
+            echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
+
             einfo "Creating bridge device"
             brctl addbr "$BRIDGE_NAME"
             eend $?
@@ -92,6 +102,9 @@ case "$1" in
             ifconfig "$BRIDGE_NAME" down || /bin/true
             brctl delbr "$BRIDGE_NAME"
             eend $?
+
+            einfo "Re-enabling IPv6"
+            echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6
         eoutdent
    ;;