Skip to content

Commit 9c9fcc1

Browse files
committed
wip: improved NAT ip for integrated video
issue #2142
1 parent d6e7c60 commit 9c9fcc1

File tree

4 files changed

+52
-22
lines changed

4 files changed

+52
-22
lines changed

lib/Ravada/Domain.pm

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1358,8 +1358,14 @@ sub _store_display($self, $display, $display_old=undef) {
13581358
$self->_set_display_ip(\%display_new) if !exists $display->{ip} || !$display->{ip};
13591359
if (!exists $display_new{ip} || !$display_new{ip}) {
13601360
unlock_hash(%display_new);
1361-
$display_new{ip} = $self->_vm->ip;
1362-
$display_new{listen_ip} = $display_new{ip};
1361+
$display_new{listen_ip} = $self->_vm->ip;
1362+
my $display_ip = ( $self->_vm->nat_ip
1363+
or $self->_vm->display_ip
1364+
or $self->_vm->public_ip
1365+
or $self->_vm->ip
1366+
);
1367+
1368+
$display_new{ip} = $display_ip;
13631369
}
13641370

13651371
if ( !$display_old ) {
@@ -1369,7 +1375,6 @@ sub _store_display($self, $display, $display_old=undef) {
13691375
$display_old = $self->_get_display($display->{driver})
13701376
}
13711377

1372-
my $ip = ( $display_new{ip} or $display_old->{ip} );
13731378
my $driver = ( $display_new{driver} or $display_old->{driver} );
13741379
if (exists $display_new{port} && $display_new{port}
13751380
&& (!exists $display_new{id_vm} || !$display_new{id_vm}) ) {
@@ -3920,6 +3925,7 @@ sub _update_display_port_exposed($self, $name, $local_ip, $public_port, $interna
39203925
or $self->_vm->display_ip
39213926
or $local_ip );
39223927

3928+
my $is_builtin;
39233929
for (1 .. 10) {
39243930
eval {
39253931
$sth->execute($display_ip, $local_ip, $public_port,1, $self->_vm->id

lib/Ravada/Domain/Void.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ sub _set_display($self, $listen_ip=$self->_vm->listen_ip) {
156156
# my $ip = ($self->_vm->nat_ip or $self->_vm->ip());
157157
my $port = 'auto';
158158
$port = $self->_new_free_port() if $self->is_active();
159-
my $display_data = { driver => 'void', ip => $listen_ip, port =>$port
159+
my $display_data = { driver => 'void', listen_ip => $listen_ip, port =>$port
160160
, is_builtin => 1
161161
, xistorra => 1
162162
};

t/lib/Test/Ravada.pm

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3218,31 +3218,44 @@ sub create_ram_fs($dir=undef,$size=1024*1024) {
32183218
sub wait_ip($id_domain0, $seconds=60) {
32193219

32203220
my $domain;
3221+
if (!ref($id_domain0) && $id_domain0 =~ /^\d+$/) {
3222+
$domain = Ravada::Front::Domain->open($id_domain0);
3223+
}
32213224
for my $count ( 0 .. $seconds ) {
32223225
my $id_domain = $id_domain0;
3223-
if (ref($id_domain0)) {
3224-
if (ref($id_domain0) =~ /Ravada/) {
3225-
$id_domain = $id_domain0->id;
3226+
$id_domain = $domain->id if $domain;
3227+
if (!$domain) {
3228+
if (ref($id_domain0)) {
3229+
if (ref($id_domain0) =~ /Ravada/) {
3230+
$id_domain = $id_domain0->id;
3231+
} else {
3232+
$id_domain = $id_domain0->{id};
3233+
}
32263234
} else {
3227-
$id_domain = $id_domain0->{id};
3235+
if ($id_domain0 !~ /^\d+$/) {
3236+
$id_domain = _search_domain_by_name($id_domain0);
3237+
if ( !$id_domain ) {
3238+
sleep 1;
3239+
next;
3240+
}
3241+
} else {
3242+
$id_domain = $id_domain0;
3243+
}
32283244
}
3229-
}
32303245

3231-
if ($id_domain0 !~ /^\d+$/) {
3232-
$id_domain = _search_domain_by_name($id_domain);
3233-
next if !$id_domain;
3246+
eval{ $domain = Ravada::Front::Domain->open($id_domain) };
3247+
warn $@ if $@ && $@ !~ /Unknown domain/;
32343248
}
32353249

32363250
Ravada::Request->refresh_machine(
32373251
id_domain => $id_domain
32383252
,uid => user_admin->id
3253+
,_force => 1
32393254
);
3255+
wait_request();
32403256

32413257
my $info;
3242-
eval {
3243-
$domain = Ravada::Front::Domain->open($id_domain);
32443258
$info = $domain->info(user_admin);
3245-
};
32463259
warn $@ if $@ && $@ !~ /Unknown domain/;
32473260
return if $@ || ($count && !$domain->is_active);
32483261
return $info->{ip} if exists $info->{ip} && $info->{ip};

t/vm/n10_nat.t

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ my $FILE_CONFIG = "t/etc/ravada.conf";
1818
init( );
1919

2020
my $NAT_IP = '2.2.2.2';
21-
2221
my $REMOTE_IP = '9.9.9.9';
23-
2422
my $CHAIN = 'RAVADA';
23+
24+
my $BASE;
2525
##################################################################################
2626

2727
sub _search_other_ip($ip) {
@@ -67,14 +67,16 @@ sub test_route($vm) {
6767
}
6868

6969
sub test_nat_rdp($vm) {
70-
my $domain = create_domain($vm);
70+
my $domain = $BASE->clone(user => user_admin
71+
,name => new_domain_name);
7172

7273
Ravada::Request->add_hardware(
7374
name => 'display'
7475
,uid => user_admin->id
7576
,data => { driver => 'rdp' }
7677
,id_domain => $domain->id
7778
);
79+
$vm->nat_ip($NAT_IP);
7880
wait_request();
7981
my $req = Ravada::Request->start_domain(
8082
uid => user_admin->id
@@ -87,13 +89,12 @@ sub test_nat_rdp($vm) {
8789

8890
die "Error: no ip found for ".$domain->name if !$domain->ip;
8991

90-
$vm->nat_ip($NAT_IP);
91-
9292
$req->status('requested');
9393
wait_request(debug=>0);
9494

95-
my $sth = connector->dbh->prepare("SELECT * FROM domain_displays");
96-
$sth->execute();
95+
my $sth = connector->dbh->prepare("SELECT * FROM domain_displays "
96+
." WHERE id_domain=?");
97+
$sth->execute($domain->id);
9798
while (my $row = $sth->fetchrow_hashref) {
9899
is($row->{listen_ip}, $vm->ip,"listen_ip ".$row->{driver});
99100
is($row->{ip},$NAT_IP,"ip ".$row->{driver}) or exit;
@@ -240,6 +241,15 @@ sub test_chain($vm_name, %args) {
240241

241242
}
242243
}
244+
245+
sub _import_base($vm) {
246+
if ($vm->type eq 'KVM') {
247+
$BASE = import_domain($vm);
248+
} else {
249+
$BASE = create_domain($vm);
250+
}
251+
}
252+
243253
##################################################################################
244254

245255
clean();
@@ -261,6 +271,7 @@ for my $vm_name ( vm_names() ) {
261271
diag($msg) if !$vm;
262272
skip $msg,10 if !$vm;
263273

274+
_import_base($vm);
264275
test_nat_rdp($vm);
265276

266277
test_route($vm);

0 commit comments

Comments
 (0)