#!/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 () { @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); }