mirror of
https://github.com/Matir/skel.git
synced 2026-05-26 05:29:09 -07:00
49 lines
804 B
Bash
Executable File
49 lines
804 B
Bash
Executable File
#!/bin/bash
|
|
|
|
set -ue
|
|
|
|
ACTION="add"
|
|
|
|
if [ "${1}" == "-d" ] ; then
|
|
ACTION="del"
|
|
shift
|
|
fi
|
|
|
|
BRIDGE="${1}"
|
|
DEST="${2}"
|
|
|
|
function setup_span {
|
|
if tc qdisc show dev "${1}" | grep -q 'qdisc ingress ffff' ; then
|
|
return 0
|
|
fi
|
|
tc qdisc add dev "${1}" ingress
|
|
tc filter add dev "${1}" parent ffff: protocol all u32 match u8 0 0 action mirred egress mirror dev "${DEST}"
|
|
}
|
|
|
|
function del_span {
|
|
tc qdisc del dev "${1}" ingress
|
|
}
|
|
|
|
function handle_iface {
|
|
case "${ACTION}" in
|
|
add)
|
|
setup_span "${1}"
|
|
;;
|
|
del)
|
|
del_span "${1}"
|
|
;;
|
|
*)
|
|
echo "Unknown action!"
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function get_bridge_ifaces {
|
|
bridge link | grep "master ${1}" | cut -d: -f2 | cut -d@ -f1
|
|
}
|
|
|
|
for iface in $(get_bridge_ifaces "${BRIDGE}") ; do
|
|
handle_iface "$iface"
|
|
done
|