Enhance the 'generic_domain' method to allow it to setup
guest NICs, defaulting to the default network, but also
allowing use of vepa to a host NIC.
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
conf/default.cfg | 6 ++++++
lib/Sys/Virt/TCK.pm | 39 ++++++++++++++++++++++++++++++++-------
lib/Sys/Virt/TCK/DomainBuilder.pm | 13 +++++++------
3 files changed, 45 insertions(+), 13 deletions(-)
diff --git a/conf/default.cfg b/conf/default.cfg
index 0da118c..209e40d 100644
--- a/conf/default.cfg
+++ b/conf/default.cfg
@@ -178,3 +178,9 @@ host_block_devices = (
# }
# Can list more than on block device if many are available
)
+
+# List of host NIC devices that the test suite can screw
+# around with for testing purposes
+host_network_devices = (
+# eth0
+)
diff --git a/lib/Sys/Virt/TCK.pm b/lib/Sys/Virt/TCK.pm
index 9981c0f..f8fa75d 100644
--- a/lib/Sys/Virt/TCK.pm
+++ b/lib/Sys/Virt/TCK.pm
@@ -851,6 +851,7 @@ sub generic_domain {
my $name = exists $params{name} ? $params{name} : "tck";
my $ostype = exists $params{ostype} ? $params{ostype} : "hvm";
my $fullos = exists $params{fullos} ? $params{fullos} : 0;
+ my $netmode = exists $params{netmode} ? $params{netmode} : undef;
my $caps = Sys::Virt::TCK::Capabilities->new(xml =>
$self->conn->get_capabilities);
@@ -859,18 +860,35 @@ sub generic_domain {
$container = $self->best_container_domain($caps)
unless $ostype && $ostype ne "exe";
+ my $b;
if ($container) {
die "Full provisioned OS not supported with containers yet" if $fullos;
- return $self->generic_container_domain(name => $name,
- caps => $caps,
- domain => $container);
- } else {
- return $self->generic_machine_domain(name => $name,
+ $b = $self->generic_container_domain(name => $name,
caps => $caps,
- ostype => $ostype,
- fullos => $fullos);
+ domain => $container);
+ } else {
+ $b = $self->generic_machine_domain(name => $name,
+ caps => $caps,
+ ostype => $ostype,
+ fullos => $fullos);
+ }
+ if ($netmode) {
+ if ($netmode eq "vepa") {
+ $b->interface(type => "direct",
+ source => "default",
+ mac => "52:54:00:11:11:11",
+ dev => $self->get_host_network_device(),
+ mode => "vepa",
+ virtualport => "802.1Qbg");
+ } else {
+ $b->interface(type => "network",
+ source => "default",
+ mac => "52:54:00:11:11:11",
+ filterref => "clean-traffic");
+ }
}
+ return $b;
}
sub generic_pool {
@@ -1132,4 +1150,11 @@ sub get_host_block_device {
return $match ? $device : undef;
}
+sub get_host_network_device {
+ my $self = shift;
+ my $devindex = @_ ? shift : 0;
+
+ return $self->config("host_network_devices/[$devindex]", undef);
+}
+
1;
diff --git a/lib/Sys/Virt/TCK/DomainBuilder.pm b/lib/Sys/Virt/TCK/DomainBuilder.pm
index 5308dc9..7a20008 100644
--- a/lib/Sys/Virt/TCK/DomainBuilder.pm
+++ b/lib/Sys/Virt/TCK/DomainBuilder.pm
@@ -277,7 +277,6 @@ sub interface {
die "type parameter is required" unless $params{type};
die "source parameter is required" unless $params{source};
- die "model parameter is required" unless $params{model};
push @{$self->{interfaces}}, \%params;
@@ -430,7 +429,7 @@ sub as_xml {
$w->emptyTag("mac",
address => $interface->{mac});
- if( $interface->{dev}) {
+ if ($interface->{dev}) {
$w->emptyTag("source",
dev => $interface->{dev},
mode => $interface->{mode});
@@ -438,7 +437,7 @@ sub as_xml {
$w->emptyTag("source",
network => $interface->{source});
}
- if( $interface->{virtualport}) {
+ if ($interface->{virtualport}) {
$w->startTag("virtualport",
type => $interface->{virtualport});
$w->emptyTag("parameters",
@@ -448,9 +447,11 @@ sub as_xml {
instanceid => '40000000-0000-0000-0000-000000000000');
$w->endTag("virtualport");
}
- $w->emptyTag("model",
- type => $interface->{model});
- if( $interface->{filterref}) {
+ if ($interface->{model}) {
+ $w->emptyTag("model",
+ type => $interface->{model});
+ }
+ if ($interface->{filterref}) {
$w->emptyTag("filterref",
filter => $interface->{filterref});
}
--
1.8.5.3