Use a single local port for ditch.pl

The ditch.pl script is used to generate burst traffic without waiting
for the responses. When running other tests in parallel, this can result
in a ephemeral port clash, since the ditch.pl process closes the socket
immediately. In rare occasions when the message ID also clashes with
other tests' queries, it might result in an UnexpectedSource error from
dnspython.

Use a dedicated port EXTRAPORT8 which is reserved for each test as a
source port for the burst traffic.
This commit is contained in:
Tom Krizek 2024-02-06 15:35:49 +01:00
parent 381763120b
commit 339fa5690a
No known key found for this signature in database
GPG key ID: 01623B9B652A20A7
3 changed files with 13 additions and 6 deletions

View file

@ -34,12 +34,12 @@ use IO::File;
use IO::Socket;
sub usage {
print ("Usage: ditch.pl [-s address] [-p port] [file]\n");
print ("Usage: ditch.pl [-s address] [-p port] [-b source_port] [file]\n");
exit 1;
}
my %options={};
getopts("s:p:t:", \%options);
getopts("s:p:b:", \%options);
my $addr = "127.0.0.1";
$addr = $options{s} if defined $options{s};
@ -47,6 +47,9 @@ $addr = $options{s} if defined $options{s};
my $port = 53;
$port = $options{p} if defined $options{p};
my $source_port = 0;
$source_port = $options{b} if defined $options{b};
my $file = "STDIN";
if (@ARGV >= 1) {
my $filename = shift @ARGV;
@ -74,8 +77,12 @@ while (defined(my $line = <$file>) ) {
$packet->header->rd(1);
$packet->push(question => $q);
my $sock = IO::Socket::INET->new(PeerAddr => $addr, PeerPort => $port,
Proto => "udp",) or die "$!";
my $sock = IO::Socket::INET->new(
PeerAddr => $addr,
PeerPort => $port,
Proto => "udp",
LocalPort => $source_port,
) or die "$!";
my $bytes = $sock->send($packet->data);
#print ("sent $bytes bytes to $addr:$port:\n");

View file

@ -35,7 +35,7 @@ burst() {
echo "${num}${2}${3}.lamesub.example A" >>burst.input.$$
fi
done
$PERL ../ditch.pl -p ${PORT} -s ${server} burst.input.$$
$PERL ../ditch.pl -p ${PORT} -s ${server} -b ${EXTRAPORT8} burst.input.$$
rm -f burst.input.$$
}

View file

@ -2500,7 +2500,7 @@ burst() {
num=$((num - 1))
echo "fetch${num}.example A" >>burst.input.$$
done
$PERL ../ditch.pl -p ${PORT} -s 10.53.0.3 burst.input.$$
$PERL ../ditch.pl -p ${PORT} -s 10.53.0.3 -b ${EXTRAPORT8} burst.input.$$
rm -f burst.input.$$
}