os-autoinst-distri-rocky/lib/tapnet.pm
Adam Williamson 72edbfe991 Use qemu host IP 172.16.2.2 not 10.0.2.2
This is to make the infra folks happy, apparently using 10.0.x.x
and 10.1.x.x is causing conflicts since our actual infra network
uses those ranges too.

Signed-off-by: Adam Williamson <awilliam@redhat.com>
2020-07-23 16:40:45 -07:00

80 lines
2.5 KiB
Perl

package tapnet;
use strict;
use base 'Exporter';
use Exporter;
use testapi;
our @EXPORT = qw/clone_host_file setup_tap_static get_host_dns/;
sub clone_host_file {
# copy a given file from the host into the guest. Mainly used
# for networking config on tap tests. this is pretty crazy, but
# SUSE do almost the same thing...
my $file = shift;
my $text = '';
open(my $fh, '<', $file);
while (<$fh>) {
$text .= $_;
}
# escape any " characters in the text...
$text =~ s/"/\\"/g;
assert_script_run "printf \"$text\" > $file";
# for debugging...
assert_script_run "cat $file";
}
sub setup_tap_static {
# this is a common thing for tap tests, where we set up networking
# for the system with a static IP address and possibly a specific
# hostname
my $ip = shift;
my $hostname = shift || "";
if ($hostname) {
# assigning output of split to a single-item array gives us just
# the first split
my ($short) = split(/\./, $hostname);
# set hostname
assert_script_run "hostnamectl set-hostname $hostname";
# add entry to /etc/hosts
assert_script_run "echo '$ip $hostname $short' >> /etc/hosts";
}
# use host's name servers (this is usually going to be correct,
# tests which don't want this can overwrite resolv.conf)
my @dns = get_host_dns();
my $dnstext = '';
for (my $i=0; $i < @dns; $i++) {
my $num = $i + 1;
$dnstext .= "\nDNS" . ${num} . "=" . $dns[$i];
}
# bring up network. DEFROUTE is *vital* here
my $conftext = "DEVICE=eth0\nBOOTPROTO=none\nIPADDR=$ip\nGATEWAY=172.16.2.2\nPREFIX=24\nDEFROUTE=yes\nONBOOT=yes" . $dnstext;
assert_script_run "printf '${conftext}\n' > /etc/sysconfig/network-scripts/ifcfg-eth0";
assert_script_run "systemctl restart NetworkManager.service";
# FIXME workaround for
# https://bugzilla.redhat.com/show_bug.cgi?id=1739148
# remove when that's resolved
script_run 'nmcli con down "Wired connection 1"';
script_run 'nmcli con down "System eth0"';
script_run 'nmcli con up "System eth0"';
# the above doesn't seem to reliably set up resolv.conf, so...
clone_host_file "/etc/resolv.conf";
}
sub get_host_dns {
# get DNS server addresses from the host
my @forwards;
open(FH, '<', "/etc/resolv.conf");
while (<FH>) {
if ($_ =~ m/^nameserver +(.+)/) {
push @forwards, $1;
}
}
return @forwards;
}
1;
# vim: set sw=4 et: