mirror of
https://github.com/mii443/sindan-client.git
synced 2025-08-23 16:49:27 +00:00
choose pmtud source address
This commit is contained in:
@ -1632,8 +1632,8 @@ get_tracepath() {
|
|||||||
|
|
||||||
#
|
#
|
||||||
do_pmtud() {
|
do_pmtud() {
|
||||||
if [ $# -ne 4 ]; then
|
if [ $# -ne 5 ]; then
|
||||||
echo "ERROR: do_pmtud <version> <target_addr> <min_mtu>" \
|
echo "ERROR: do_pmtud <version> <target_addr> <min_mtu> <src_addr>" \
|
||||||
"<max_mtu>." 1>&2
|
"<max_mtu>." 1>&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@ -1642,7 +1642,7 @@ do_pmtud() {
|
|||||||
"6" ) command="ping6 -i 0.2 -W 1"; dfopt="-M do"; header=48 ;;
|
"6" ) command="ping6 -i 0.2 -W 1"; dfopt="-M do"; header=48 ;;
|
||||||
* ) echo "ERROR: <version> must be 4 or 6." 1>&2; return 9 ;;
|
* ) echo "ERROR: <version> must be 4 or 6." 1>&2; return 9 ;;
|
||||||
esac
|
esac
|
||||||
if ! $command -c 1 $2 > /dev/null; then
|
if ! eval $command -c 1 $2 -I $5 > /dev/null; then
|
||||||
echo 0
|
echo 0
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@ -1650,6 +1650,7 @@ do_pmtud() {
|
|||||||
local target=$2
|
local target=$2
|
||||||
local min=$3
|
local min=$3
|
||||||
local max=$4
|
local max=$4
|
||||||
|
local src_addr=$5
|
||||||
local mid=$(( ( min + max ) / 2 ))
|
local mid=$(( ( min + max ) / 2 ))
|
||||||
local result=0
|
local result=0
|
||||||
|
|
||||||
@ -1657,11 +1658,11 @@ do_pmtud() {
|
|||||||
echo "$(( min + header ))"
|
echo "$(( min + header ))"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
if $command -c 1 -s $mid $dfopt $target >/dev/null 2>/dev/null
|
if eval $command -c 1 -s $mid $dfopt $target -I $src_addr >/dev/null 2>/dev/null
|
||||||
then
|
then
|
||||||
result=$(do_pmtud "$version" "$target" "$mid" "$max")
|
result=$(do_pmtud "$version" "$target" "$mid" "$max" "$src_addr")
|
||||||
else
|
else
|
||||||
result=$(do_pmtud "$version" "$target" "$min" "$mid")
|
result=$(do_pmtud "$version" "$target" "$min" "$mid" "$src_addr")
|
||||||
fi
|
fi
|
||||||
echo "$result"
|
echo "$result"
|
||||||
}
|
}
|
||||||
@ -1703,9 +1704,9 @@ cmdset_trace() {
|
|||||||
|
|
||||||
#
|
#
|
||||||
cmdset_pmtud() {
|
cmdset_pmtud() {
|
||||||
if [ $# -ne 6 ]; then
|
if [ $# -ne 7 ]; then
|
||||||
echo "ERROR: cmdset_pmtud <layer> <version> <target_type>" \
|
echo "ERROR: cmdset_pmtud <layer> <version> <target_type>" \
|
||||||
"<target_addr> <ifmtu> <count>." 1>&2
|
"<target_addr> <ifmtu> <count> <src_addr>." 1>&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
local layer=$1
|
local layer=$1
|
||||||
@ -1716,10 +1717,11 @@ cmdset_pmtud() {
|
|||||||
local min_mtu=56
|
local min_mtu=56
|
||||||
local max_mtu=$5
|
local max_mtu=$5
|
||||||
local count=$6
|
local count=$6
|
||||||
local string=" pmtud to $ipv server: $target"
|
local src_addr=$7
|
||||||
|
local string=" pmtud to $ipv server: $target, from: $src_addr"
|
||||||
local pmtu_result
|
local pmtu_result
|
||||||
|
|
||||||
pmtu_result=$(do_pmtud "$ver" "$target" "$min_mtu" "$max_mtu")
|
pmtu_result=$(do_pmtud "$ver" "$target" "$min_mtu" "$max_mtu" "$src_addr")
|
||||||
if [ "$pmtu_result" -eq 0 ]; then
|
if [ "$pmtu_result" -eq 0 ]; then
|
||||||
write_json "$layer" "$ipv" "v${ver}pmtu_${type}" "$INFO" "$target" \
|
write_json "$layer" "$ipv" "v${ver}pmtu_${type}" "$INFO" "$target" \
|
||||||
unmeasurable "$count"
|
unmeasurable "$count"
|
||||||
@ -2921,7 +2923,7 @@ if [ "$v4addr_type" = "private" ] || [ "$v4addr_type" = "grobal" ]; then
|
|||||||
|
|
||||||
if [ "$MODE" = "client" ]; then
|
if [ "$MODE" = "client" ]; then
|
||||||
# Check path MTU to extarnal IPv4 servers
|
# Check path MTU to extarnal IPv4 servers
|
||||||
cmdset_pmtud "$layer" 4 srv "$target" "$ifmtu" "$count" &
|
cmdset_pmtud "$layer" 4 srv "$target" "$ifmtu" "$count" "$v4addr" &
|
||||||
fi
|
fi
|
||||||
|
|
||||||
count=$(( count + 1 ))
|
count=$(( count + 1 ))
|
||||||
@ -2946,10 +2948,16 @@ if [ -n "$v6addrs" ]; then
|
|||||||
# Do traceroute to extarnal IPv6 servers
|
# Do traceroute to extarnal IPv6 servers
|
||||||
cmdset_trace "$layer" 6 srv "$target" "$count" &
|
cmdset_trace "$layer" 6 srv "$target" "$count" &
|
||||||
|
|
||||||
|
oIFS="$IFS"
|
||||||
|
IFS=','
|
||||||
|
for v6addr in $v6addrs; do
|
||||||
if [ "$MODE" = "client" ]; then
|
if [ "$MODE" = "client" ]; then
|
||||||
# Check path MTU to extarnal IPv6 servers
|
# Check path MTU to extarnal IPv6 servers
|
||||||
cmdset_pmtud "$layer" 6 srv "$target" "$ifmtu" "$count" &
|
cmdset_pmtud "$layer" 6 srv "$target" "$ifmtu" "$count" "$v6addr" &
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
IFS="$oIFS"
|
||||||
|
unset oIFS
|
||||||
|
|
||||||
count=$(( count + 1 ))
|
count=$(( count + 1 ))
|
||||||
done
|
done
|
||||||
|
Reference in New Issue
Block a user