1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-26 10:04:02 +03:00

Start dhcp server for kvm machine.

(This used to be commit a54507dbd6bfaafb42eb95ec8a57897096b19583)
This commit is contained in:
Jelmer Vernooij 2008-02-19 16:28:32 +01:00
parent 87f611ed69
commit d3e182098a
2 changed files with 70 additions and 16 deletions

View File

@ -448,6 +448,8 @@ if ($opt_target eq "samba4") {
require target::Windows;
$target = new Windows();
} elsif ($opt_target eq "kvm") {
die("Kvm tests will not run with socket wrapper enabled.")
if ($opt_socket_wrapper);
require target::Kvm;
die("No image specified") unless ($opt_image);
$target = new Kvm($opt_image);

View File

@ -19,6 +19,39 @@ sub new($$$$) {
return $self;
}
sub write_kvm_ifup($$$)
{
my ($self, $path, $ip_prefix) = @_;
open(SCRIPT, ">$path/kvm-ifup");
print SCRIPT <<__EOF__;
#!/bin/sh
PREFIX=$ip_prefix
/sbin/ifconfig \$1 \$PREFIX.1 up
cat <<EOF>$path/udhcpd.conf
interface \$1
start \$PREFIX.20
end \$PREFIX.20
max_leases 1
lease_file $path/udhcpd.leases
pidfile $path/udhcpd.pid
EOF
touch $path/udhcpd.leases
/usr/sbin/udhcpd $path/udhcpd.conf
exit 0
__EOF__
close(SCRIPT);
chmod(0755, "$path/kvm-ifup");
return ("$path/kvm-ifup", "$path/udhcpd.pid", "$ip_prefix.20");
}
sub teardown_env($$)
{
my ($self, $envvars) = @_;
@ -27,6 +60,9 @@ sub teardown_env($$)
kill 9, $envvars->{KVM_PID};
print "Killing dhcpd instance $envvars->{DHCPD_PID}\n";
kill 9, $envvars->{DHCPD_PID};
return 0;
}
@ -46,21 +82,30 @@ sub check_env($$)
return 1;
}
sub read_pidfile($)
{
my ($path) = @_;
open(PID, $path);
<PID> =~ /([0-9]+)/;
my ($pid) = $1;
close(PID);
return $pid;
}
sub start($$$)
{
my ($self, $path, $image) = @_;
my $pidfile = "$path/kvm.pid";
my $opts = ($ENV{KVM_OPTIONS} or "");
my $opts = ($ENV{KVM_OPTIONS} or "-nographic");
system("kvm $opts -daemonize -pidfile $pidfile -vnc unix:$path/kvm.vnc -snapshot $image");
my ($ifup_script, $dhcpd_pidfile, $ip_address) = $self->write_kvm_ifup($path, "192.168.9");
open(PID, $pidfile);
<PID> =~ /([0-9]+)/;
my ($pid) = $1;
close(PID);
return $pid;
system("kvm $opts -daemonize -pidfile $pidfile -snapshot $image -net nic -net tap,script=$ifup_script");
return (read_pidfile($pidfile), read_pidfile($dhcpd_pidfile), $ip_address);
}
sub setup_env($$$)
@ -68,18 +113,25 @@ sub setup_env($$$)
my ($self, $envname, $path) = @_;
if ($envname eq "dc") {
$self->{dc_pid} = $self->start($path, $self->{dc_image});
($self->{dc_pid}, $self->{dc_dhcpd_pid}, $self->{dc_ip}) = $self->start($path, $self->{dc_image});
sub choose_var($$) {
my ($name, $default) = @_;
return defined($ENV{"KVM_DC_$name"})?$ENV{"KVM_DC_$name"}:$default;
}
if ($envname eq "dc") {
return {
KVM_PID => $self->{dc_pid},
USERNAME => "Administrator",
PASSWORD => "penguin",
DOMAIN => "SAMBA",
REALM => "SAMBA",
SERVER => "",
SERVER_IP => "",
NETBIOSNAME => "",
NETBIOSALIAS => "",
DHCPD_PID => $self->{dc_dhcpd_pid},
USERNAME => choose_var("USERNAME", "Administrator"),
PASSWORD => choose_var("PASSWORD", "penguin"),
DOMAIN => choose_var("DOMAIN", "SAMBA"),
REALM => choose_var("REALM", "SAMBA"),
SERVER => choose_var("SERVER", "DC"),
SERVER_IP => $self->{dc_ip},
NETBIOSNAME => choose_var("NETBIOSNAME", "DC"),
NETBIOSALIAS => choose_var("NETBIOSALIAS", "DC"),
};
} else {
return undef;