exit_cleanup()
{ for ns in "$@"; do
ip netns delete"${ns}" 2>/dev/null || true done if [ -f "$SMCROUTEDIR/amt.pid" ]; then
smcpid=$(< $SMCROUTEDIR/amt.pid)
kill $smcpid fi rm -rf $SMCROUTEDIR
exit $ERR
}
create_namespaces()
{
ip netns add "${LISTENER}" || exit_cleanup
ip netns add "${GATEWAY}" || exit_cleanup "${LISTENER}"
ip netns add "${RELAY}" || exit_cleanup "${LISTENER}""${GATEWAY}"
ip netns add "${SOURCE}" || exit_cleanup "${LISTENER}""${GATEWAY}" \ "${RELAY}"
}
# The trap function handler #
exit_cleanup_all()
{
exit_cleanup "${LISTENER}""${GATEWAY}""${RELAY}""${SOURCE}"
}
setup_interface()
{ for ns in "${LISTENER}""${GATEWAY}""${RELAY}""${SOURCE}"; do
ip -netns "${ns}" link set dev lo up done;
ip link add l_gw type veth peer name gw_l
ip link add gw_relay type veth peer name relay_gw
ip link add relay_src type veth peer name src_relay
ip link set l_gw netns "${LISTENER}" up
ip link set gw_l netns "${GATEWAY}" up
ip link set gw_relay netns "${GATEWAY}" up
ip link set relay_gw netns "${RELAY}" up
ip link set relay_src netns "${RELAY}" up
ip link set src_relay netns "${SOURCE}" up mtu 1400
ip netns exec "${LISTENER}" ip a a 192.168.0.2/24 dev l_gw
ip netns exec "${LISTENER}" ip r a default via 192.168.0.1 dev l_gw
ip netns exec "${LISTENER}" ip a a 2001:db8::2/64 dev l_gw
ip netns exec "${LISTENER}" ip r a default via 2001:db8::1 dev l_gw
ip netns exec "${LISTENER}" ip a a 239.0.0.1/32 dev l_gw autojoin
ip netns exec "${LISTENER}" ip a a ff0e::5:6/128 dev l_gw autojoin
ip netns exec "${GATEWAY}" ip a a 192.168.0.1/24 dev gw_l
ip netns exec "${GATEWAY}" ip a a 2001:db8::1/64 dev gw_l
ip netns exec "${GATEWAY}" ip a a 10.0.0.1/24 dev gw_relay
ip netns exec "${GATEWAY}" ip link add br0 type bridge
ip netns exec "${GATEWAY}" ip link set br0 up
ip netns exec "${GATEWAY}" ip link set gw_l master br0
ip netns exec "${GATEWAY}" ip link set gw_l up
ip netns exec "${GATEWAY}" ip link add amtg master br0 type amt \
mode gateway local 10.0.0.1 discovery 10.0.0.2 dev gw_relay \
gateway_port 2268 relay_port 2268
ip netns exec "${RELAY}" ip a a 10.0.0.2/24 dev relay_gw
ip netns exec "${RELAY}" ip link add amtr type amt mode relay \
local 10.0.0.2 dev relay_gw relay_port 2268 max_tunnels 4
ip netns exec "${RELAY}" ip a a 172.17.0.1/24 dev relay_src
ip netns exec "${RELAY}" ip a a 2001:db8:3::1/64 dev relay_src
ip netns exec "${SOURCE}" ip a a 172.17.0.2/24 dev src_relay
ip netns exec "${SOURCE}" ip a a 2001:db8:3::2/64 dev src_relay
ip netns exec "${SOURCE}" ip r a default via 172.17.0.1 dev src_relay
ip netns exec "${SOURCE}" ip r a default via 2001:db8:3::1 dev src_relay
ip netns exec "${RELAY}" ip link set amtr up
ip netns exec "${GATEWAY}" ip link set amtg up
}
setup_mcast_routing()
{
ip netns exec "${RELAY}" smcrouted -P $SMCROUTEDIR/amt.pid
ip netns exec "${RELAY}" smcroutectl a relay_src \
172.17.0.2 239.0.0.1 amtr
ip netns exec "${RELAY}" smcroutectl a relay_src \
2001:db8:3::2 ff0e::5:6 amtr
}
test_remote_ip()
{
REMOTE=$(ip netns exec "${GATEWAY}" \
ip -d -j link show amtg | jq .[0].linkinfo.info_data.remote) if [ $REMOTE == "\"10.0.0.2\"" ]; then
printf "TEST: %-60s [ OK ]\n""amt discovery" else
printf "TEST: %-60s [FAIL]\n""amt discovery"
ERR=1 fi
}
send_mcast_torture4()
{ for i in `seq 10`; do
ip netns exec "${SOURCE}" bash -c \ 'cat /dev/urandom | head -c 100M | nc -w 1 -u 239.0.0.1 4001' echo -n "." done
}
send_mcast_torture6()
{ for i in `seq 10`; do
ip netns exec "${SOURCE}" bash -c \ 'cat /dev/urandom | head -c 100M | nc -w 1 -u ff0e::5:6 6001' echo -n "." done
}
check_features()
{
ip link help 2>&1 | grep -q amt if [ $? -ne 0 ]; then echo"Missing amt support in iproute2" >&2
exit_cleanup fi
}
test_ipv4_forward()
{
RESULT4=$(ip netns exec "${LISTENER}" timeout 15 socat - UDP4-LISTEN:4000,readbytes=128 || true) ifecho"$RESULT4" | grep -q "172.17.0.2"; then
printf "TEST: %-60s [ OK ]\n""IPv4 amt multicast forwarding"
exit 0 else
printf "TEST: %-60s [FAIL]\n""IPv4 amt multicast forwarding"
exit 1 fi
}
test_ipv6_forward()
{
RESULT6=$(ip netns exec "${LISTENER}" timeout 15 socat - UDP6-LISTEN:6000,readbytes=128 || true) ifecho"$RESULT6" | grep -q "2001:db8:3::2"; then
printf "TEST: %-60s [ OK ]\n""IPv6 amt multicast forwarding"
exit 0 else
printf "TEST: %-60s [FAIL]\n""IPv6 amt multicast forwarding"
exit 1 fi
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.