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
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 $?
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
;;