diff options
Diffstat (limited to 'bin/tests/system/testsock.pl')
-rwxr-xr-x | bin/tests/system/testsock.pl | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/bin/tests/system/testsock.pl b/bin/tests/system/testsock.pl new file mode 100755 index 0000000..e793874 --- /dev/null +++ b/bin/tests/system/testsock.pl @@ -0,0 +1,55 @@ +#!/usr/bin/perl + +# Copyright (C) Internet Systems Consortium, Inc. ("ISC") +# +# SPDX-License-Identifier: MPL-2.0 +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, you can obtain one at https://mozilla.org/MPL/2.0/. +# +# See the COPYRIGHT file distributed with this work for additional +# information regarding copyright ownership. + +# Test whether the interfaces on 10.53.0.* are up. + +require 5.001; + +use Cwd 'abs_path'; +use File::Basename; +use Socket; +use Getopt::Long; + +my $port = 0; +my $id = 0; +GetOptions("p=i" => \$port, + "i=i" => \$id); + +my @ids; +if ($id != 0) { + @ids = ($id); +} else { + my $dir = dirname(abs_path($0)); + my $fn = "$dir/ifconfig.sh.in"; + open FH, "< $fn" or die "open < $fn: $!\n"; + while (<FH>) { + @ids = (1..$1) + if /^max=(\d+)\s*$/; + } + close FH; + die "could not find max IP address in $fn\n" + unless @ids > 1; +} + +foreach $id (@ids) { + my $addr = pack("C4", 10, 53, 0, $id); + my $sa = pack_sockaddr_in($port, $addr); + socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname("tcp")) + or die "$0: socket: $!\n"; + setsockopt(SOCK, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)); + + bind(SOCK, $sa) + or die sprintf("$0: bind(%s, %d): $!\n", + inet_ntoa($addr), $port); + close(SOCK); +} |