54 lines
783 B
Bash
Executable File
54 lines
783 B
Bash
Executable File
#!/bin/sh
|
|
|
|
DEV=${1:-vxlan0}
|
|
|
|
handle_add() {
|
|
mac="${1:?}"
|
|
dev="${2:?}"
|
|
dst="${3:?}"
|
|
|
|
echo "bridge fdb append 00:00:00:00:00:00 dst $dst dev $dev"
|
|
bridge fdb append 00:00:00:00:00:00 dst "$dst" dev "$dev"
|
|
}
|
|
|
|
handle_cleanup() {
|
|
mac="${1:?}"
|
|
dev="${2:?}"
|
|
dst="${3:?}"
|
|
|
|
if ! bridge fdb show dev "$dev" | grep -v 00:00:00:00:00:00 | grep "$dst"; then
|
|
bridge fdb del 00:00:00:00:00:00 dst "$dst" dev "$dev"
|
|
fi
|
|
}
|
|
|
|
handle_entry() {
|
|
cmd=handle_add
|
|
|
|
if [ "$1" = "Deleted" ]; then
|
|
shift
|
|
cmd=handle_cleanup
|
|
fi
|
|
|
|
mac="${1:?}"
|
|
dev="${3:?}"
|
|
|
|
if [ "$dev" != "$DEV" ]; then
|
|
return
|
|
fi
|
|
|
|
if [ "$mac" = "00:00:00:00:00:00" ]; then
|
|
echo "skipping" "$@"
|
|
return
|
|
fi
|
|
|
|
$cmd "$mac" "$3" "$5"
|
|
}
|
|
|
|
main() {
|
|
bridge monitor fdb | while read args; do
|
|
handle_entry $args
|
|
done
|
|
}
|
|
|
|
main
|