* [pve-devel] [PATCH pve-network 0/3] add zones/controllers tests
@ 2020-12-09 15:11 Alexandre Derumier
2020-12-09 15:11 ` [pve-devel] [PATCH pve-network 1/3] zones: add bridge helpers Alexandre Derumier
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Alexandre Derumier @ 2020-12-09 15:11 UTC (permalink / raw)
To: pve-devel
This patch serie add unit tests for zones && controllers
config generation.
(This need to be apply on top of my last patches series)
Alexandre Derumier (3):
zones: add bridge helpers
controllers: add generate_controller_rawconfig
add zones && controllers unit tests
Makefile | 6 +-
PVE/Network/SDN/Controllers.pm | 19 ++-
PVE/Network/SDN/Controllers/BgpPlugin.pm | 5 +
PVE/Network/SDN/Controllers/EvpnPlugin.pm | 10 +-
PVE/Network/SDN/Controllers/Plugin.pm | 6 +
PVE/Network/SDN/Zones/Plugin.pm | 30 +++++
PVE/Network/SDN/Zones/QinQPlugin.pm | 17 +--
PVE/Network/SDN/Zones/SimplePlugin.pm | 1 +
PVE/Network/SDN/Zones/VlanPlugin.pm | 16 +--
test/Makefile | 6 +
test/{ => debug}/documentation.txt | 0
test/{ => debug}/generateconfig.pl | 0
test/{ => debug}/statuscheck.pl | 0
test/run_test_zones.pl | 124 ++++++++++++++++++
.../evpn/ebgp/expected_controller_config | 49 +++++++
test/zones/evpn/ebgp/expected_sdn_interfaces | 38 ++++++
test/zones/evpn/ebgp/interfaces | 7 +
test/zones/evpn/ebgp/sdn_config | 29 ++++
.../ebgp_loopback/expected_controller_config | 53 ++++++++
.../ebgp_loopback/expected_sdn_interfaces | 38 ++++++
test/zones/evpn/ebgp_loopback/interfaces | 13 ++
test/zones/evpn/ebgp_loopback/sdn_config | 29 ++++
.../evpn/exitnode/expected_controller_config | 52 ++++++++
.../evpn/exitnode/expected_sdn_interfaces | 38 ++++++
test/zones/evpn/exitnode/interfaces | 7 +
test/zones/evpn/exitnode/sdn_config | 26 ++++
.../exitnode_snat/expected_controller_config | 52 ++++++++
.../exitnode_snat/expected_sdn_interfaces | 42 ++++++
test/zones/evpn/exitnode_snat/interfaces | 7 +
test/zones/evpn/exitnode_snat/sdn_config | 27 ++++
.../evpn/ipv4/expected_controller_config | 31 +++++
test/zones/evpn/ipv4/expected_sdn_interfaces | 38 ++++++
test/zones/evpn/ipv4/interfaces | 7 +
test/zones/evpn/ipv4/sdn_config | 26 ++++
.../zones/qinq/bridge/expected_sdn_interfaces | 17 +++
test/zones/qinq/bridge/interfaces | 5 +
test/zones/qinq/bridge/sdn_config | 11 ++
.../bridge_vlanaware/expected_sdn_interfaces | 15 +++
test/zones/qinq/bridge_vlanaware/interfaces | 7 +
test/zones/qinq/bridge_vlanaware/sdn_config | 11 ++
.../expected_sdn_interfaces | 17 +++
.../bridge_vlanaware_vlanawarevnet/interfaces | 7 +
.../bridge_vlanaware_vlanawarevnet/sdn_config | 11 ++
.../expected_sdn_interfaces | 19 +++
.../bridge_vlanaware_vlanprotocol/interfaces | 7 +
.../bridge_vlanaware_vlanprotocol/sdn_config | 11 ++
.../expected_sdn_interfaces | 19 +++
.../qinq/bridge_vlanawarevnet/interfaces | 5 +
.../qinq/bridge_vlanawarevnet/sdn_config | 11 ++
.../expected_sdn_interfaces | 18 +++
.../zones/qinq/bridge_vlanprotocol/interfaces | 5 +
.../zones/qinq/bridge_vlanprotocol/sdn_config | 11 ++
test/zones/qinq/ovs/expected_sdn_interfaces | 25 ++++
test/zones/qinq/ovs/interfaces | 9 ++
test/zones/qinq/ovs/sdn_config | 11 ++
.../ovs_vlanawarevnet/expected_sdn_interfaces | 27 ++++
test/zones/qinq/ovs_vlanawarevnet/interfaces | 9 ++
test/zones/qinq/ovs_vlanawarevnet/sdn_config | 11 ++
.../ovs_vlanprotocol/expected_sdn_interfaces | 25 ++++
test/zones/qinq/ovs_vlanprotocol/interfaces | 9 ++
test/zones/qinq/ovs_vlanprotocol/sdn_config | 11 ++
.../simple/basic/expected_sdn_interfaces | 7 +
test/zones/simple/basic/interfaces | 5 +
test/zones/simple/basic/sdn_config | 11 ++
.../zones/simple/ipv4/expected_sdn_interfaces | 8 ++
test/zones/simple/ipv4/interfaces | 5 +
test/zones/simple/ipv4/sdn_config | 22 ++++
.../simple/ipv4snat/expected_sdn_interfaces | 12 ++
test/zones/simple/ipv4snat/interfaces | 7 +
test/zones/simple/ipv4snat/sdn_config | 23 ++++
.../zones/vlan/bridge/expected_sdn_interfaces | 23 ++++
test/zones/vlan/bridge/interfaces | 5 +
test/zones/vlan/bridge/sdn_config | 11 ++
.../bridge_vlanaware/expected_sdn_interfaces | 7 +
test/zones/vlan/bridge_vlanaware/interfaces | 7 +
test/zones/vlan/bridge_vlanaware/sdn_config | 11 ++
.../expected_sdn_interfaces | 9 ++
.../bridge_vlanaware_vlanawarevnet/interfaces | 7 +
.../bridge_vlanaware_vlanawarevnet/sdn_config | 11 ++
test/zones/vlan/ovs/expected_sdn_interfaces | 17 +++
test/zones/vlan/ovs/interfaces | 9 ++
test/zones/vlan/ovs/sdn_config | 11 ++
.../ovs_vlanware_vnet/expected_sdn_interfaces | 19 +++
test/zones/vlan/ovs_vlanware_vnet/interfaces | 9 ++
test/zones/vlan/ovs_vlanware_vnet/sdn_config | 11 ++
.../zones/vxlan/basic/expected_sdn_interfaces | 15 +++
test/zones/vxlan/basic/interfaces | 7 +
test/zones/vxlan/basic/sdn_config | 11 ++
.../vlanawarevnet/expected_sdn_interfaces | 17 +++
test/zones/vxlan/vlanawarevnet/interfaces | 7 +
test/zones/vxlan/vlanawarevnet/sdn_config | 11 ++
91 files changed, 1503 insertions(+), 25 deletions(-)
create mode 100644 test/Makefile
rename test/{ => debug}/documentation.txt (100%)
rename test/{ => debug}/generateconfig.pl (100%)
rename test/{ => debug}/statuscheck.pl (100%)
create mode 100755 test/run_test_zones.pl
create mode 100644 test/zones/evpn/ebgp/expected_controller_config
create mode 100644 test/zones/evpn/ebgp/expected_sdn_interfaces
create mode 100644 test/zones/evpn/ebgp/interfaces
create mode 100644 test/zones/evpn/ebgp/sdn_config
create mode 100644 test/zones/evpn/ebgp_loopback/expected_controller_config
create mode 100644 test/zones/evpn/ebgp_loopback/expected_sdn_interfaces
create mode 100644 test/zones/evpn/ebgp_loopback/interfaces
create mode 100644 test/zones/evpn/ebgp_loopback/sdn_config
create mode 100644 test/zones/evpn/exitnode/expected_controller_config
create mode 100644 test/zones/evpn/exitnode/expected_sdn_interfaces
create mode 100644 test/zones/evpn/exitnode/interfaces
create mode 100644 test/zones/evpn/exitnode/sdn_config
create mode 100644 test/zones/evpn/exitnode_snat/expected_controller_config
create mode 100644 test/zones/evpn/exitnode_snat/expected_sdn_interfaces
create mode 100644 test/zones/evpn/exitnode_snat/interfaces
create mode 100644 test/zones/evpn/exitnode_snat/sdn_config
create mode 100644 test/zones/evpn/ipv4/expected_controller_config
create mode 100644 test/zones/evpn/ipv4/expected_sdn_interfaces
create mode 100644 test/zones/evpn/ipv4/interfaces
create mode 100644 test/zones/evpn/ipv4/sdn_config
create mode 100644 test/zones/qinq/bridge/expected_sdn_interfaces
create mode 100644 test/zones/qinq/bridge/interfaces
create mode 100644 test/zones/qinq/bridge/sdn_config
create mode 100644 test/zones/qinq/bridge_vlanaware/expected_sdn_interfaces
create mode 100644 test/zones/qinq/bridge_vlanaware/interfaces
create mode 100644 test/zones/qinq/bridge_vlanaware/sdn_config
create mode 100644 test/zones/qinq/bridge_vlanaware_vlanawarevnet/expected_sdn_interfaces
create mode 100644 test/zones/qinq/bridge_vlanaware_vlanawarevnet/interfaces
create mode 100644 test/zones/qinq/bridge_vlanaware_vlanawarevnet/sdn_config
create mode 100644 test/zones/qinq/bridge_vlanaware_vlanprotocol/expected_sdn_interfaces
create mode 100644 test/zones/qinq/bridge_vlanaware_vlanprotocol/interfaces
create mode 100644 test/zones/qinq/bridge_vlanaware_vlanprotocol/sdn_config
create mode 100644 test/zones/qinq/bridge_vlanawarevnet/expected_sdn_interfaces
create mode 100644 test/zones/qinq/bridge_vlanawarevnet/interfaces
create mode 100644 test/zones/qinq/bridge_vlanawarevnet/sdn_config
create mode 100644 test/zones/qinq/bridge_vlanprotocol/expected_sdn_interfaces
create mode 100644 test/zones/qinq/bridge_vlanprotocol/interfaces
create mode 100644 test/zones/qinq/bridge_vlanprotocol/sdn_config
create mode 100644 test/zones/qinq/ovs/expected_sdn_interfaces
create mode 100644 test/zones/qinq/ovs/interfaces
create mode 100644 test/zones/qinq/ovs/sdn_config
create mode 100644 test/zones/qinq/ovs_vlanawarevnet/expected_sdn_interfaces
create mode 100644 test/zones/qinq/ovs_vlanawarevnet/interfaces
create mode 100644 test/zones/qinq/ovs_vlanawarevnet/sdn_config
create mode 100644 test/zones/qinq/ovs_vlanprotocol/expected_sdn_interfaces
create mode 100644 test/zones/qinq/ovs_vlanprotocol/interfaces
create mode 100644 test/zones/qinq/ovs_vlanprotocol/sdn_config
create mode 100644 test/zones/simple/basic/expected_sdn_interfaces
create mode 100644 test/zones/simple/basic/interfaces
create mode 100644 test/zones/simple/basic/sdn_config
create mode 100644 test/zones/simple/ipv4/expected_sdn_interfaces
create mode 100644 test/zones/simple/ipv4/interfaces
create mode 100644 test/zones/simple/ipv4/sdn_config
create mode 100644 test/zones/simple/ipv4snat/expected_sdn_interfaces
create mode 100644 test/zones/simple/ipv4snat/interfaces
create mode 100644 test/zones/simple/ipv4snat/sdn_config
create mode 100644 test/zones/vlan/bridge/expected_sdn_interfaces
create mode 100644 test/zones/vlan/bridge/interfaces
create mode 100644 test/zones/vlan/bridge/sdn_config
create mode 100644 test/zones/vlan/bridge_vlanaware/expected_sdn_interfaces
create mode 100644 test/zones/vlan/bridge_vlanaware/interfaces
create mode 100644 test/zones/vlan/bridge_vlanaware/sdn_config
create mode 100644 test/zones/vlan/bridge_vlanaware_vlanawarevnet/expected_sdn_interfaces
create mode 100644 test/zones/vlan/bridge_vlanaware_vlanawarevnet/interfaces
create mode 100644 test/zones/vlan/bridge_vlanaware_vlanawarevnet/sdn_config
create mode 100644 test/zones/vlan/ovs/expected_sdn_interfaces
create mode 100644 test/zones/vlan/ovs/interfaces
create mode 100644 test/zones/vlan/ovs/sdn_config
create mode 100644 test/zones/vlan/ovs_vlanware_vnet/expected_sdn_interfaces
create mode 100644 test/zones/vlan/ovs_vlanware_vnet/interfaces
create mode 100644 test/zones/vlan/ovs_vlanware_vnet/sdn_config
create mode 100644 test/zones/vxlan/basic/expected_sdn_interfaces
create mode 100644 test/zones/vxlan/basic/interfaces
create mode 100644 test/zones/vxlan/basic/sdn_config
create mode 100644 test/zones/vxlan/vlanawarevnet/expected_sdn_interfaces
create mode 100644 test/zones/vxlan/vlanawarevnet/interfaces
create mode 100644 test/zones/vxlan/vlanawarevnet/sdn_config
--
2.20.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [pve-devel] [PATCH pve-network 1/3] zones: add bridge helpers
2020-12-09 15:11 [pve-devel] [PATCH pve-network 0/3] add zones/controllers tests Alexandre Derumier
@ 2020-12-09 15:11 ` Alexandre Derumier
2020-12-09 15:11 ` [pve-devel] [PATCH pve-network 2/3] controllers: add generate_controller_rawconfig Alexandre Derumier
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Alexandre Derumier @ 2020-12-09 15:11 UTC (permalink / raw)
To: pve-devel
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
PVE/Network/SDN/Zones/Plugin.pm | 30 +++++++++++++++++++++++++++
PVE/Network/SDN/Zones/QinQPlugin.pm | 17 +++++++--------
PVE/Network/SDN/Zones/SimplePlugin.pm | 1 +
PVE/Network/SDN/Zones/VlanPlugin.pm | 16 ++++++--------
4 files changed, 44 insertions(+), 20 deletions(-)
diff --git a/PVE/Network/SDN/Zones/Plugin.pm b/PVE/Network/SDN/Zones/Plugin.pm
index 9db2791..9eabe73 100644
--- a/PVE/Network/SDN/Zones/Plugin.pm
+++ b/PVE/Network/SDN/Zones/Plugin.pm
@@ -302,4 +302,34 @@ sub find_local_ip_interface_peers {
}
}
+sub find_bridge {
+ my ($bridge) = @_;
+
+ die "can't find bridge $bridge" if !-d "/sys/class/net/$bridge";
+}
+
+sub is_vlanaware {
+ my ($bridge) = @_;
+
+ return PVE::Tools::file_read_firstline("/sys/class/net/$bridge/bridge/vlan_filtering");
+}
+
+sub is_ovs {
+ my ($bridge) = @_;
+
+ my $is_ovs = !-d "/sys/class/net/$bridge/brif";
+ return $is_ovs;
+}
+
+sub get_bridge_ifaces {
+ my ($bridge) = @_;
+
+ my @bridge_ifaces = ();
+ my $dir = "/sys/class/net/$bridge/brif";
+ PVE::Tools::dir_glob_foreach($dir, '(((eth|bond)\d+|en[^.]+)(\.\d+)?)', sub {
+ push @bridge_ifaces, $_[0];
+ });
+
+ return @bridge_ifaces;
+}
1;
diff --git a/PVE/Network/SDN/Zones/QinQPlugin.pm b/PVE/Network/SDN/Zones/QinQPlugin.pm
index 2bd60db..9064adb 100644
--- a/PVE/Network/SDN/Zones/QinQPlugin.pm
+++ b/PVE/Network/SDN/Zones/QinQPlugin.pm
@@ -57,10 +57,11 @@ sub generate_sdn_config {
my $vlanprotocol = $plugin_config->{'vlan-protocol'};
my $ctag = $vnet->{tag};
my $alias = $vnet->{alias};
- die "can't find bridge $bridge" if !-d "/sys/class/net/$bridge";
- my $vlan_aware = PVE::Tools::file_read_firstline("/sys/class/net/$bridge/bridge/vlan_filtering");
- my $is_ovs = !-d "/sys/class/net/$bridge/brif";
+ PVE::Network::SDN::Zones::Plugin::find_bridge($bridge);
+
+ my $vlan_aware = PVE::Network::SDN::Zones::Plugin::is_vlanaware($bridge);
+ my $is_ovs = PVE::Network::SDN::Zones::Plugin::is_ovs($bridge);
my @iface_config = ();
my $vnet_bridge_ports = "";
@@ -126,11 +127,7 @@ sub generate_sdn_config {
#eth--->eth.x(svlan)--->eth.x.y(cvlan)---->vnet
- my @bridge_ifaces = ();
- my $dir = "/sys/class/net/$bridge/brif";
- PVE::Tools::dir_glob_foreach($dir, '(((eth|bond)\d+|en[^.]+)(\.\d+)?)', sub {
- push @bridge_ifaces, $_[0];
- });
+ my @bridge_ifaces = PVE::Network::SDN::Zones::Plugin::get_bridge_ifaces($bridge);
foreach my $bridge_iface (@bridge_ifaces) {
@@ -181,8 +178,8 @@ sub status {
return $err_msg;
}
- my $vlan_aware = PVE::Tools::file_read_firstline("/sys/class/net/$bridge/bridge/vlan_filtering");
- my $is_ovs = !-d "/sys/class/net/$bridge/brif";
+ my $vlan_aware = PVE::Network::SDN::Zones::Plugin::is_vlanaware($bridge);
+ my $is_ovs = PVE::Network::SDN::Zones::Plugin::is_ovs($bridge);
my $tag = $vnet->{tag};
my $vnet_uplink = "ln_".$vnetid;
diff --git a/PVE/Network/SDN/Zones/SimplePlugin.pm b/PVE/Network/SDN/Zones/SimplePlugin.pm
index 94452a0..9f74f3e 100644
--- a/PVE/Network/SDN/Zones/SimplePlugin.pm
+++ b/PVE/Network/SDN/Zones/SimplePlugin.pm
@@ -58,6 +58,7 @@ sub generate_sdn_config {
my $address = {};
my $subnets = PVE::Network::SDN::Vnets::get_subnets($vnetid, 1);
+
foreach my $subnetid (sort keys %{$subnets}) {
my $subnet = $subnets->{$subnetid};
my $cidr = $subnet->{cidr};
diff --git a/PVE/Network/SDN/Zones/VlanPlugin.pm b/PVE/Network/SDN/Zones/VlanPlugin.pm
index ca6bd8f..cda2a36 100644
--- a/PVE/Network/SDN/Zones/VlanPlugin.pm
+++ b/PVE/Network/SDN/Zones/VlanPlugin.pm
@@ -46,10 +46,10 @@ sub generate_sdn_config {
my ($class, $plugin_config, $zoneid, $vnetid, $vnet, $controller, $controller_cfg, $subnet_cfg, $interfaces_config, $config) = @_;
my $bridge = $plugin_config->{bridge};
- die "can't find bridge $bridge" if !-d "/sys/class/net/$bridge";
+ PVE::Network::SDN::Zones::Plugin::find_bridge($bridge);
- my $vlan_aware = PVE::Tools::file_read_firstline("/sys/class/net/$bridge/bridge/vlan_filtering");
- my $is_ovs = !-d "/sys/class/net/$bridge/brif";
+ my $vlan_aware = PVE::Network::SDN::Zones::Plugin::is_vlanaware($bridge);
+ my $is_ovs = PVE::Network::SDN::Zones::Plugin::is_ovs($bridge);
my $tag = $vnet->{tag};
my $alias = $vnet->{alias};
@@ -91,11 +91,7 @@ sub generate_sdn_config {
my $bridgevlan = $bridge."v".$tag;
- my @bridge_ifaces = ();
- my $dir = "/sys/class/net/$bridge/brif";
- PVE::Tools::dir_glob_foreach($dir, '(((eth|bond)\d+|en[^.]+)(\.\d+)?)', sub {
- push @bridge_ifaces, $_[0];
- });
+ my @bridge_ifaces = PVE::Network::SDN::Zones::Plugin::get_bridge_ifaces($bridge);
my $bridge_ports = "";
foreach my $bridge_iface (@bridge_ifaces) {
@@ -146,8 +142,8 @@ sub status {
return $err_msg;
}
- my $vlan_aware = PVE::Tools::file_read_firstline("/sys/class/net/$bridge/bridge/vlan_filtering");
- my $is_ovs = !-d "/sys/class/net/$bridge/brif";
+ my $vlan_aware = PVE::Network::SDN::Zones::Plugin::is_vlanaware($bridge);
+ my $is_ovs = PVE::Network::SDN::Zones::Plugin::is_ovs($bridge);
my $tag = $vnet->{tag};
my $vnet_uplink = "ln_".$vnetid;
--
2.20.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [pve-devel] [PATCH pve-network 2/3] controllers: add generate_controller_rawconfig
2020-12-09 15:11 [pve-devel] [PATCH pve-network 0/3] add zones/controllers tests Alexandre Derumier
2020-12-09 15:11 ` [pve-devel] [PATCH pve-network 1/3] zones: add bridge helpers Alexandre Derumier
@ 2020-12-09 15:11 ` Alexandre Derumier
2020-12-09 15:11 ` [pve-devel] [PATCH pve-network 3/3] add zones && controllers unit tests Alexandre Derumier
2020-12-18 17:05 ` [pve-devel] applied: Re: [PATCH pve-network 0/3] add zones/controllers tests Thomas Lamprecht
3 siblings, 0 replies; 5+ messages in thread
From: Alexandre Derumier @ 2020-12-09 15:11 UTC (permalink / raw)
To: pve-devel
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
PVE/Network/SDN/Controllers.pm | 19 ++++++++++++++++++-
PVE/Network/SDN/Controllers/BgpPlugin.pm | 5 +++++
PVE/Network/SDN/Controllers/EvpnPlugin.pm | 10 +++++++++-
PVE/Network/SDN/Controllers/Plugin.pm | 6 ++++++
4 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/PVE/Network/SDN/Controllers.pm b/PVE/Network/SDN/Controllers.pm
index 9937755..ba67d75 100644
--- a/PVE/Network/SDN/Controllers.pm
+++ b/PVE/Network/SDN/Controllers.pm
@@ -147,10 +147,27 @@ sub reload_controller {
}
}
+sub generate_controller_rawconfig {
+ my ($config) = @_;
+
+ my $cfg = PVE::Network::SDN::config();
+ my $controller_cfg = $cfg->{controllers};
+ return if !$controller_cfg;
+
+ my $rawconfig = "";
+ foreach my $id (keys %{$controller_cfg->{ids}}) {
+ my $plugin_config = $controller_cfg->{ids}->{$id};
+ my $plugin = PVE::Network::SDN::Controllers::Plugin->lookup($plugin_config->{type});
+ $rawconfig .= $plugin->generate_controller_rawconfig($plugin_config, $config);
+ }
+ return $rawconfig;
+}
+
sub write_controller_config {
my ($config) = @_;
- my $controller_cfg = PVE::Cluster::cfs_read_file('sdn/controllers.cfg');
+ my $cfg = PVE::Network::SDN::config();
+ my $controller_cfg = $cfg->{controllers};
return if !$controller_cfg;
foreach my $id (keys %{$controller_cfg->{ids}}) {
diff --git a/PVE/Network/SDN/Controllers/BgpPlugin.pm b/PVE/Network/SDN/Controllers/BgpPlugin.pm
index ccc06a8..e5d8490 100644
--- a/PVE/Network/SDN/Controllers/BgpPlugin.pm
+++ b/PVE/Network/SDN/Controllers/BgpPlugin.pm
@@ -138,6 +138,11 @@ sub on_update_hook {
}
}
+sub generate_controller_rawconfig {
+ my ($class, $plugin_config, $config) = @_;
+ return "";
+}
+
sub write_controller_config {
my ($class, $plugin_config, $config) = @_;
return;
diff --git a/PVE/Network/SDN/Controllers/EvpnPlugin.pm b/PVE/Network/SDN/Controllers/EvpnPlugin.pm
index 6927921..55828ef 100644
--- a/PVE/Network/SDN/Controllers/EvpnPlugin.pm
+++ b/PVE/Network/SDN/Controllers/EvpnPlugin.pm
@@ -280,7 +280,7 @@ sub generate_frr_recurse{
}
}
-sub write_controller_config {
+sub generate_controller_rawconfig {
my ($class, $plugin_config, $config) = @_;
my $nodename = PVE::INotify::nodename();
@@ -311,6 +311,14 @@ sub write_controller_config {
my $rawconfig = join("\n", @{$final_config});
+ return if !$rawconfig;
+ return $rawconfig;
+}
+
+sub write_controller_config {
+ my ($class, $plugin_config, $config) = @_;
+
+ my $rawconfig = $class->generate_controller_rawconfig($plugin_config, $config);
return if !$rawconfig;
return if !-d "/etc/frr";
diff --git a/PVE/Network/SDN/Controllers/Plugin.pm b/PVE/Network/SDN/Controllers/Plugin.pm
index 0c92b17..8b5bd4f 100644
--- a/PVE/Network/SDN/Controllers/Plugin.pm
+++ b/PVE/Network/SDN/Controllers/Plugin.pm
@@ -87,6 +87,12 @@ sub generate_controller_vnet_config {
}
+sub generate_controller_rawconfig {
+ my ($class, $plugin_config, $config) = @_;
+
+ die "please implement inside plugin";
+}
+
sub write_controller_config {
my ($class, $plugin_config, $config) = @_;
--
2.20.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [pve-devel] [PATCH pve-network 3/3] add zones && controllers unit tests
2020-12-09 15:11 [pve-devel] [PATCH pve-network 0/3] add zones/controllers tests Alexandre Derumier
2020-12-09 15:11 ` [pve-devel] [PATCH pve-network 1/3] zones: add bridge helpers Alexandre Derumier
2020-12-09 15:11 ` [pve-devel] [PATCH pve-network 2/3] controllers: add generate_controller_rawconfig Alexandre Derumier
@ 2020-12-09 15:11 ` Alexandre Derumier
2020-12-18 17:05 ` [pve-devel] applied: Re: [PATCH pve-network 0/3] add zones/controllers tests Thomas Lamprecht
3 siblings, 0 replies; 5+ messages in thread
From: Alexandre Derumier @ 2020-12-09 15:11 UTC (permalink / raw)
To: pve-devel
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
Makefile | 6 +-
test/Makefile | 6 +
test/{ => debug}/documentation.txt | 0
test/{ => debug}/generateconfig.pl | 0
test/{ => debug}/statuscheck.pl | 0
test/run_test_zones.pl | 124 ++++++++++++++++++
.../evpn/ebgp/expected_controller_config | 49 +++++++
test/zones/evpn/ebgp/expected_sdn_interfaces | 38 ++++++
test/zones/evpn/ebgp/interfaces | 7 +
test/zones/evpn/ebgp/sdn_config | 29 ++++
.../ebgp_loopback/expected_controller_config | 53 ++++++++
.../ebgp_loopback/expected_sdn_interfaces | 38 ++++++
test/zones/evpn/ebgp_loopback/interfaces | 13 ++
test/zones/evpn/ebgp_loopback/sdn_config | 29 ++++
.../evpn/exitnode/expected_controller_config | 52 ++++++++
.../evpn/exitnode/expected_sdn_interfaces | 38 ++++++
test/zones/evpn/exitnode/interfaces | 7 +
test/zones/evpn/exitnode/sdn_config | 26 ++++
.../exitnode_snat/expected_controller_config | 52 ++++++++
.../exitnode_snat/expected_sdn_interfaces | 42 ++++++
test/zones/evpn/exitnode_snat/interfaces | 7 +
test/zones/evpn/exitnode_snat/sdn_config | 27 ++++
.../evpn/ipv4/expected_controller_config | 31 +++++
test/zones/evpn/ipv4/expected_sdn_interfaces | 38 ++++++
test/zones/evpn/ipv4/interfaces | 7 +
test/zones/evpn/ipv4/sdn_config | 26 ++++
.../zones/qinq/bridge/expected_sdn_interfaces | 17 +++
test/zones/qinq/bridge/interfaces | 5 +
test/zones/qinq/bridge/sdn_config | 11 ++
.../bridge_vlanaware/expected_sdn_interfaces | 15 +++
test/zones/qinq/bridge_vlanaware/interfaces | 7 +
test/zones/qinq/bridge_vlanaware/sdn_config | 11 ++
.../expected_sdn_interfaces | 17 +++
.../bridge_vlanaware_vlanawarevnet/interfaces | 7 +
.../bridge_vlanaware_vlanawarevnet/sdn_config | 11 ++
.../expected_sdn_interfaces | 19 +++
.../bridge_vlanaware_vlanprotocol/interfaces | 7 +
.../bridge_vlanaware_vlanprotocol/sdn_config | 11 ++
.../expected_sdn_interfaces | 19 +++
.../qinq/bridge_vlanawarevnet/interfaces | 5 +
.../qinq/bridge_vlanawarevnet/sdn_config | 11 ++
.../expected_sdn_interfaces | 18 +++
.../zones/qinq/bridge_vlanprotocol/interfaces | 5 +
.../zones/qinq/bridge_vlanprotocol/sdn_config | 11 ++
test/zones/qinq/ovs/expected_sdn_interfaces | 25 ++++
test/zones/qinq/ovs/interfaces | 9 ++
test/zones/qinq/ovs/sdn_config | 11 ++
.../ovs_vlanawarevnet/expected_sdn_interfaces | 27 ++++
test/zones/qinq/ovs_vlanawarevnet/interfaces | 9 ++
test/zones/qinq/ovs_vlanawarevnet/sdn_config | 11 ++
.../ovs_vlanprotocol/expected_sdn_interfaces | 25 ++++
test/zones/qinq/ovs_vlanprotocol/interfaces | 9 ++
test/zones/qinq/ovs_vlanprotocol/sdn_config | 11 ++
.../simple/basic/expected_sdn_interfaces | 7 +
test/zones/simple/basic/interfaces | 5 +
test/zones/simple/basic/sdn_config | 11 ++
.../zones/simple/ipv4/expected_sdn_interfaces | 8 ++
test/zones/simple/ipv4/interfaces | 5 +
test/zones/simple/ipv4/sdn_config | 22 ++++
.../simple/ipv4snat/expected_sdn_interfaces | 12 ++
test/zones/simple/ipv4snat/interfaces | 7 +
test/zones/simple/ipv4snat/sdn_config | 23 ++++
.../zones/vlan/bridge/expected_sdn_interfaces | 23 ++++
test/zones/vlan/bridge/interfaces | 5 +
test/zones/vlan/bridge/sdn_config | 11 ++
.../bridge_vlanaware/expected_sdn_interfaces | 7 +
test/zones/vlan/bridge_vlanaware/interfaces | 7 +
test/zones/vlan/bridge_vlanaware/sdn_config | 11 ++
.../expected_sdn_interfaces | 9 ++
.../bridge_vlanaware_vlanawarevnet/interfaces | 7 +
.../bridge_vlanaware_vlanawarevnet/sdn_config | 11 ++
test/zones/vlan/ovs/expected_sdn_interfaces | 17 +++
test/zones/vlan/ovs/interfaces | 9 ++
test/zones/vlan/ovs/sdn_config | 11 ++
.../ovs_vlanware_vnet/expected_sdn_interfaces | 19 +++
test/zones/vlan/ovs_vlanware_vnet/interfaces | 9 ++
test/zones/vlan/ovs_vlanware_vnet/sdn_config | 11 ++
.../zones/vxlan/basic/expected_sdn_interfaces | 15 +++
test/zones/vxlan/basic/interfaces | 7 +
test/zones/vxlan/basic/sdn_config | 11 ++
.../vlanawarevnet/expected_sdn_interfaces | 17 +++
test/zones/vxlan/vlanawarevnet/interfaces | 7 +
test/zones/vxlan/vlanawarevnet/sdn_config | 11 ++
83 files changed, 1421 insertions(+), 3 deletions(-)
create mode 100644 test/Makefile
rename test/{ => debug}/documentation.txt (100%)
rename test/{ => debug}/generateconfig.pl (100%)
rename test/{ => debug}/statuscheck.pl (100%)
create mode 100755 test/run_test_zones.pl
create mode 100644 test/zones/evpn/ebgp/expected_controller_config
create mode 100644 test/zones/evpn/ebgp/expected_sdn_interfaces
create mode 100644 test/zones/evpn/ebgp/interfaces
create mode 100644 test/zones/evpn/ebgp/sdn_config
create mode 100644 test/zones/evpn/ebgp_loopback/expected_controller_config
create mode 100644 test/zones/evpn/ebgp_loopback/expected_sdn_interfaces
create mode 100644 test/zones/evpn/ebgp_loopback/interfaces
create mode 100644 test/zones/evpn/ebgp_loopback/sdn_config
create mode 100644 test/zones/evpn/exitnode/expected_controller_config
create mode 100644 test/zones/evpn/exitnode/expected_sdn_interfaces
create mode 100644 test/zones/evpn/exitnode/interfaces
create mode 100644 test/zones/evpn/exitnode/sdn_config
create mode 100644 test/zones/evpn/exitnode_snat/expected_controller_config
create mode 100644 test/zones/evpn/exitnode_snat/expected_sdn_interfaces
create mode 100644 test/zones/evpn/exitnode_snat/interfaces
create mode 100644 test/zones/evpn/exitnode_snat/sdn_config
create mode 100644 test/zones/evpn/ipv4/expected_controller_config
create mode 100644 test/zones/evpn/ipv4/expected_sdn_interfaces
create mode 100644 test/zones/evpn/ipv4/interfaces
create mode 100644 test/zones/evpn/ipv4/sdn_config
create mode 100644 test/zones/qinq/bridge/expected_sdn_interfaces
create mode 100644 test/zones/qinq/bridge/interfaces
create mode 100644 test/zones/qinq/bridge/sdn_config
create mode 100644 test/zones/qinq/bridge_vlanaware/expected_sdn_interfaces
create mode 100644 test/zones/qinq/bridge_vlanaware/interfaces
create mode 100644 test/zones/qinq/bridge_vlanaware/sdn_config
create mode 100644 test/zones/qinq/bridge_vlanaware_vlanawarevnet/expected_sdn_interfaces
create mode 100644 test/zones/qinq/bridge_vlanaware_vlanawarevnet/interfaces
create mode 100644 test/zones/qinq/bridge_vlanaware_vlanawarevnet/sdn_config
create mode 100644 test/zones/qinq/bridge_vlanaware_vlanprotocol/expected_sdn_interfaces
create mode 100644 test/zones/qinq/bridge_vlanaware_vlanprotocol/interfaces
create mode 100644 test/zones/qinq/bridge_vlanaware_vlanprotocol/sdn_config
create mode 100644 test/zones/qinq/bridge_vlanawarevnet/expected_sdn_interfaces
create mode 100644 test/zones/qinq/bridge_vlanawarevnet/interfaces
create mode 100644 test/zones/qinq/bridge_vlanawarevnet/sdn_config
create mode 100644 test/zones/qinq/bridge_vlanprotocol/expected_sdn_interfaces
create mode 100644 test/zones/qinq/bridge_vlanprotocol/interfaces
create mode 100644 test/zones/qinq/bridge_vlanprotocol/sdn_config
create mode 100644 test/zones/qinq/ovs/expected_sdn_interfaces
create mode 100644 test/zones/qinq/ovs/interfaces
create mode 100644 test/zones/qinq/ovs/sdn_config
create mode 100644 test/zones/qinq/ovs_vlanawarevnet/expected_sdn_interfaces
create mode 100644 test/zones/qinq/ovs_vlanawarevnet/interfaces
create mode 100644 test/zones/qinq/ovs_vlanawarevnet/sdn_config
create mode 100644 test/zones/qinq/ovs_vlanprotocol/expected_sdn_interfaces
create mode 100644 test/zones/qinq/ovs_vlanprotocol/interfaces
create mode 100644 test/zones/qinq/ovs_vlanprotocol/sdn_config
create mode 100644 test/zones/simple/basic/expected_sdn_interfaces
create mode 100644 test/zones/simple/basic/interfaces
create mode 100644 test/zones/simple/basic/sdn_config
create mode 100644 test/zones/simple/ipv4/expected_sdn_interfaces
create mode 100644 test/zones/simple/ipv4/interfaces
create mode 100644 test/zones/simple/ipv4/sdn_config
create mode 100644 test/zones/simple/ipv4snat/expected_sdn_interfaces
create mode 100644 test/zones/simple/ipv4snat/interfaces
create mode 100644 test/zones/simple/ipv4snat/sdn_config
create mode 100644 test/zones/vlan/bridge/expected_sdn_interfaces
create mode 100644 test/zones/vlan/bridge/interfaces
create mode 100644 test/zones/vlan/bridge/sdn_config
create mode 100644 test/zones/vlan/bridge_vlanaware/expected_sdn_interfaces
create mode 100644 test/zones/vlan/bridge_vlanaware/interfaces
create mode 100644 test/zones/vlan/bridge_vlanaware/sdn_config
create mode 100644 test/zones/vlan/bridge_vlanaware_vlanawarevnet/expected_sdn_interfaces
create mode 100644 test/zones/vlan/bridge_vlanaware_vlanawarevnet/interfaces
create mode 100644 test/zones/vlan/bridge_vlanaware_vlanawarevnet/sdn_config
create mode 100644 test/zones/vlan/ovs/expected_sdn_interfaces
create mode 100644 test/zones/vlan/ovs/interfaces
create mode 100644 test/zones/vlan/ovs/sdn_config
create mode 100644 test/zones/vlan/ovs_vlanware_vnet/expected_sdn_interfaces
create mode 100644 test/zones/vlan/ovs_vlanware_vnet/interfaces
create mode 100644 test/zones/vlan/ovs_vlanware_vnet/sdn_config
create mode 100644 test/zones/vxlan/basic/expected_sdn_interfaces
create mode 100644 test/zones/vxlan/basic/interfaces
create mode 100644 test/zones/vxlan/basic/sdn_config
create mode 100644 test/zones/vxlan/vlanawarevnet/expected_sdn_interfaces
create mode 100644 test/zones/vxlan/vlanawarevnet/interfaces
create mode 100644 test/zones/vxlan/vlanawarevnet/sdn_config
diff --git a/Makefile b/Makefile
index fb402e5..a162c11 100644
--- a/Makefile
+++ b/Makefile
@@ -37,9 +37,9 @@ distclean: clean
clean:
rm -rf *~ *.deb *.changes ${PACKAGE}-* *.buildinfo *.dsc *.tar.gz
-.PHONY: check
-check:
- $(MAKE) -C test check
+.PHONY: test
+test:
+ $(MAKE) -C test
.PHONY: install
install:
diff --git a/test/Makefile b/test/Makefile
new file mode 100644
index 0000000..b8e5de1
--- /dev/null
+++ b/test/Makefile
@@ -0,0 +1,6 @@
+all: test
+
+test: test_zones
+
+test_zones: run_test_zones.pl
+ ./run_test_zones.pl
diff --git a/test/documentation.txt b/test/debug/documentation.txt
similarity index 100%
rename from test/documentation.txt
rename to test/debug/documentation.txt
diff --git a/test/generateconfig.pl b/test/debug/generateconfig.pl
similarity index 100%
rename from test/generateconfig.pl
rename to test/debug/generateconfig.pl
diff --git a/test/statuscheck.pl b/test/debug/statuscheck.pl
similarity index 100%
rename from test/statuscheck.pl
rename to test/debug/statuscheck.pl
diff --git a/test/run_test_zones.pl b/test/run_test_zones.pl
new file mode 100755
index 0000000..71ead61
--- /dev/null
+++ b/test/run_test_zones.pl
@@ -0,0 +1,124 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use lib qw(..);
+use File::Slurp;
+
+use Test::More;
+use Test::MockModule;
+
+use PVE::Network::SDN;
+use PVE::Network::SDN::Zones;
+use PVE::Network::SDN::Controllers;
+use PVE::INotify;
+
+sub read_sdn_config {
+ my ($file) = @_;
+
+ # Read structure back in again
+ open my $in, '<', $file or die $!;
+ my $sdn_config;
+ {
+ local $/; # slurp mode
+ $sdn_config = eval <$in>;
+ }
+ close $in;
+
+ return $sdn_config;
+}
+
+
+my @tests = grep { -d } glob './zones/*/*';
+
+foreach my $test (@tests) {
+
+ my $sdn_config = read_sdn_config ("./$test/sdn_config");
+
+ open my $fh1, '<', "./$test/interfaces" or die "can't read interfaces file";
+ my $interfaces_config = PVE::INotify::__read_etc_network_interfaces($fh1, undef, undef);
+ close $fh1;
+
+ my $pve_common_inotify;
+ $pve_common_inotify = Test::MockModule->new('PVE::INotify');
+ $pve_common_inotify->mock(
+ nodename => sub {
+ return 'localhost';
+ },
+ read_file => sub {
+ return $interfaces_config;
+ },
+ );
+
+ my $pve_sdn_subnets;
+ $pve_sdn_subnets = Test::MockModule->new('PVE::Network::SDN::Subnets');
+ $pve_sdn_subnets->mock(
+ config => sub {
+ return $sdn_config->{subnets};
+ },
+ );
+
+ my $pve_sdn_zones_plugin;
+ $pve_sdn_zones_plugin = Test::MockModule->new('PVE::Network::SDN::Zones::Plugin');
+ $pve_sdn_zones_plugin->mock(
+ get_local_route_ip => sub {
+ my $outiface = "vmbr0";
+ my $outip = $interfaces_config->{ifaces}->{$outiface}->{address};
+ return ($outip, $outiface);
+ },
+ is_vlanaware => sub {
+ return $interfaces_config->{ifaces}->{vmbr0}->{'bridge_vlan_aware'};
+ },
+ is_ovs => sub {
+ return 1 if $interfaces_config->{ifaces}->{vmbr0}->{'type'} eq 'OVSBridge';
+ },
+ get_bridge_ifaces => sub {
+ return ('eth0');
+ },
+ find_bridge => sub {
+ return;
+ }
+ );
+
+ my $sdn_module = Test::MockModule->new("PVE::Network::SDN");
+ $sdn_module->mock(
+ config => sub {
+ return $sdn_config;
+ },
+ );
+
+ my $name = $test;
+ my $expected = read_file("./$test/expected_sdn_interfaces");
+
+ my $result = "";
+ eval {
+ $result = PVE::Network::SDN::Zones::generate_etc_network_config();
+ };
+
+ if (my $err = $@) {
+ fail($name);
+ } else {
+ is ($result, $expected, $name);
+ }
+
+ if ($sdn_config->{controllers}) {
+ my $expected = read_file("./$test/expected_controller_config");
+ my $controller_rawconfig = "";
+
+ eval {
+ my $config = PVE::Network::SDN::Controllers::generate_controller_config();
+ $controller_rawconfig = PVE::Network::SDN::Controllers::generate_controller_rawconfig($config);
+ };
+
+ if (my $err = $@) {
+ fail($name);
+ } else {
+ is ($controller_rawconfig, $expected, $name);
+ }
+ }
+}
+
+done_testing();
+
+
diff --git a/test/zones/evpn/ebgp/expected_controller_config b/test/zones/evpn/ebgp/expected_controller_config
new file mode 100644
index 0000000..4c42012
--- /dev/null
+++ b/test/zones/evpn/ebgp/expected_controller_config
@@ -0,0 +1,49 @@
+log syslog informational
+ip forwarding
+ipv6 forwarding
+frr defaults datacenter
+service integrated-vtysh-config
+hostname localhost
+!
+!
+vrf vrf_myzone
+ vni 1000
+exit-vrf
+!
+router bgp 65001
+ bgp router-id 192.168.0.1
+ no bgp default ipv4-unicast
+ coalesce-time 1000
+ neighbor VTEP peer-group
+ neighbor VTEP remote-as external
+ neighbor VTEP bfd
+ neighbor 192.168.0.2 peer-group VTEP
+ neighbor 192.168.0.3 peer-group VTEP
+ no bgp ebgp-requires-policy
+ neighbor BGP peer-group
+ neighbor BGP remote-as external
+ neighbor BGP bfd
+ neighbor 192.168.0.252 peer-group BGP
+ neighbor 192.168.0.253 peer-group BGP
+ !
+ address-family ipv4 unicast
+ neighbor BGP activate
+ neighbor BGP soft-reconfiguration inbound
+ exit-address-family
+ !
+ address-family l2vpn evpn
+ neighbor VTEP activate
+ advertise-all-vni
+ autort as 65000
+ exit-address-family
+!
+router bgp 65001 vrf vrf_myzone
+ no bgp ebgp-requires-policy
+ !
+ address-family l2vpn evpn
+ route-target import 65000:1000
+ route-target export 65000:1000
+ exit-address-family
+!
+line vty
+!
\ No newline at end of file
diff --git a/test/zones/evpn/ebgp/expected_sdn_interfaces b/test/zones/evpn/ebgp/expected_sdn_interfaces
new file mode 100644
index 0000000..799dcb7
--- /dev/null
+++ b/test/zones/evpn/ebgp/expected_sdn_interfaces
@@ -0,0 +1,38 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ address 10.0.0.1/24
+ bridge_ports vxlan_myvnet
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+ vrf vrf_myzone
+
+auto vrf_myzone
+iface vrf_myzone
+ vrf-table auto
+
+auto vrfbr_myzone
+iface vrfbr_myzone
+ bridge-ports vrfvx_myzone
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+ vrf vrf_myzone
+
+auto vrfvx_myzone
+iface vrfvx_myzone
+ vxlan-id 1000
+ vxlan-local-tunnelip 192.168.0.1
+ bridge-learning off
+ bridge-arp-nd-suppress on
+ mtu 1450
+
+auto vxlan_myvnet
+iface vxlan_myvnet
+ vxlan-id 100
+ vxlan-local-tunnelip 192.168.0.1
+ bridge-learning off
+ bridge-arp-nd-suppress on
+ mtu 1450
diff --git a/test/zones/evpn/ebgp/interfaces b/test/zones/evpn/ebgp/interfaces
new file mode 100644
index 0000000..66bb826
--- /dev/null
+++ b/test/zones/evpn/ebgp/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet static
+ address 192.168.0.1/24
+ gateway 192.168.0.254
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/evpn/ebgp/sdn_config b/test/zones/evpn/ebgp/sdn_config
new file mode 100644
index 0000000..379dc14
--- /dev/null
+++ b/test/zones/evpn/ebgp/sdn_config
@@ -0,0 +1,29 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => "100", type => "vnet", zone => "myzone" },
+ },
+ },
+
+ zones => {
+ ids => { myzone => { ipam => "pve", type => "evpn", controller => "evpnctl", 'vrf-vxlan' => 1000 } },
+ },
+ controllers => {
+ ids => {
+ evpnctl => { type => "evpn", 'peers' => '192.168.0.1,192.168.0.2,192.168.0.3', asn => "65000" },
+ localhost => { type => "bgp", 'peers' => '192.168.0.252,192.168.0.253', ebgp => "1", asn => "65001", node => "localhost" },
+ },
+ },
+
+ subnets => {
+ ids => { 'myzone-10.0.0.0-24' => {
+ 'type' => 'subnet',
+ 'vnet' => 'myvnet',
+ 'gateway' => '10.0.0.1',
+ }
+ }
+ }
+}
+
+
diff --git a/test/zones/evpn/ebgp_loopback/expected_controller_config b/test/zones/evpn/ebgp_loopback/expected_controller_config
new file mode 100644
index 0000000..23be7f9
--- /dev/null
+++ b/test/zones/evpn/ebgp_loopback/expected_controller_config
@@ -0,0 +1,53 @@
+log syslog informational
+ip forwarding
+ipv6 forwarding
+frr defaults datacenter
+service integrated-vtysh-config
+hostname localhost
+!
+!
+vrf vrf_myzone
+ vni 1000
+exit-vrf
+!
+router bgp 65001
+ bgp router-id 192.168.0.1
+ no bgp default ipv4-unicast
+ coalesce-time 1000
+ neighbor VTEP peer-group
+ neighbor VTEP remote-as external
+ neighbor VTEP bfd
+ neighbor VTEP ebgp-multihop 10
+ neighbor VTEP update-source dummy1
+ neighbor 192.168.0.2 peer-group VTEP
+ neighbor 192.168.0.3 peer-group VTEP
+ no bgp ebgp-requires-policy
+ bgp disable-ebgp-connected-route-check
+ neighbor BGP peer-group
+ neighbor BGP remote-as external
+ neighbor BGP bfd
+ neighbor 172.16.0.254 peer-group BGP
+ neighbor 172.17.0.254 peer-group BGP
+ !
+ address-family ipv4 unicast
+ network 192.168.0.1/32
+ neighbor BGP activate
+ neighbor BGP soft-reconfiguration inbound
+ exit-address-family
+ !
+ address-family l2vpn evpn
+ neighbor VTEP activate
+ advertise-all-vni
+ autort as 65000
+ exit-address-family
+!
+router bgp 65001 vrf vrf_myzone
+ no bgp ebgp-requires-policy
+ !
+ address-family l2vpn evpn
+ route-target import 65000:1000
+ route-target export 65000:1000
+ exit-address-family
+!
+line vty
+!
\ No newline at end of file
diff --git a/test/zones/evpn/ebgp_loopback/expected_sdn_interfaces b/test/zones/evpn/ebgp_loopback/expected_sdn_interfaces
new file mode 100644
index 0000000..799dcb7
--- /dev/null
+++ b/test/zones/evpn/ebgp_loopback/expected_sdn_interfaces
@@ -0,0 +1,38 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ address 10.0.0.1/24
+ bridge_ports vxlan_myvnet
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+ vrf vrf_myzone
+
+auto vrf_myzone
+iface vrf_myzone
+ vrf-table auto
+
+auto vrfbr_myzone
+iface vrfbr_myzone
+ bridge-ports vrfvx_myzone
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+ vrf vrf_myzone
+
+auto vrfvx_myzone
+iface vrfvx_myzone
+ vxlan-id 1000
+ vxlan-local-tunnelip 192.168.0.1
+ bridge-learning off
+ bridge-arp-nd-suppress on
+ mtu 1450
+
+auto vxlan_myvnet
+iface vxlan_myvnet
+ vxlan-id 100
+ vxlan-local-tunnelip 192.168.0.1
+ bridge-learning off
+ bridge-arp-nd-suppress on
+ mtu 1450
diff --git a/test/zones/evpn/ebgp_loopback/interfaces b/test/zones/evpn/ebgp_loopback/interfaces
new file mode 100644
index 0000000..f6bc352
--- /dev/null
+++ b/test/zones/evpn/ebgp_loopback/interfaces
@@ -0,0 +1,13 @@
+auto eth0
+iface eth0 inet static
+ address 172.16.0.1/24
+
+auto eth1
+iface eth1 inet static
+ address 172.17.0.1/24
+
+auto dummy1
+iface dummy1 inet static
+ address 192.168.0.1/32
+ link-type dummy
+
diff --git a/test/zones/evpn/ebgp_loopback/sdn_config b/test/zones/evpn/ebgp_loopback/sdn_config
new file mode 100644
index 0000000..c8bc2e0
--- /dev/null
+++ b/test/zones/evpn/ebgp_loopback/sdn_config
@@ -0,0 +1,29 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => "100", type => "vnet", zone => "myzone" },
+ },
+ },
+
+ zones => {
+ ids => { myzone => { ipam => "pve", type => "evpn", controller => "evpnctl", 'vrf-vxlan' => 1000 } },
+ },
+ controllers => {
+ ids => {
+ evpnctl => { type => "evpn", 'peers' => '192.168.0.1,192.168.0.2,192.168.0.3', asn => "65000" },
+ localhost => { type => "bgp", 'peers' => '172.16.0.254,172.17.0.254', ebgp => "1", asn => "65001", loopback => 'dummy1', node => "localhost" },
+ },
+ },
+
+ subnets => {
+ ids => { 'myzone-10.0.0.0-24' => {
+ 'type' => 'subnet',
+ 'vnet' => 'myvnet',
+ 'gateway' => '10.0.0.1',
+ }
+ }
+ }
+}
+
+
diff --git a/test/zones/evpn/exitnode/expected_controller_config b/test/zones/evpn/exitnode/expected_controller_config
new file mode 100644
index 0000000..57ff6ff
--- /dev/null
+++ b/test/zones/evpn/exitnode/expected_controller_config
@@ -0,0 +1,52 @@
+log syslog informational
+ip forwarding
+ipv6 forwarding
+frr defaults datacenter
+service integrated-vtysh-config
+hostname localhost
+!
+!
+vrf vrf_myzone
+ vni 1000
+exit-vrf
+!
+router bgp 65000
+ bgp router-id 192.168.0.1
+ no bgp default ipv4-unicast
+ coalesce-time 1000
+ neighbor VTEP peer-group
+ neighbor VTEP remote-as 65000
+ neighbor VTEP bfd
+ neighbor 192.168.0.2 peer-group VTEP
+ neighbor 192.168.0.3 peer-group VTEP
+ !
+ address-family ipv4 unicast
+ import vrf vrf_myzone
+ exit-address-family
+ !
+ address-family ipv6 unicast
+ import vrf vrf_myzone
+ exit-address-family
+ !
+ address-family l2vpn evpn
+ neighbor VTEP activate
+ advertise-all-vni
+ exit-address-family
+!
+router bgp 65000 vrf vrf_myzone
+ !
+ address-family ipv4 unicast
+ redistribute connected
+ exit-address-family
+ !
+ address-family ipv6 unicast
+ redistribute connected
+ exit-address-family
+ !
+ address-family l2vpn evpn
+ default-originate ipv4
+ default-originate ipv6
+ exit-address-family
+!
+line vty
+!
\ No newline at end of file
diff --git a/test/zones/evpn/exitnode/expected_sdn_interfaces b/test/zones/evpn/exitnode/expected_sdn_interfaces
new file mode 100644
index 0000000..799dcb7
--- /dev/null
+++ b/test/zones/evpn/exitnode/expected_sdn_interfaces
@@ -0,0 +1,38 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ address 10.0.0.1/24
+ bridge_ports vxlan_myvnet
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+ vrf vrf_myzone
+
+auto vrf_myzone
+iface vrf_myzone
+ vrf-table auto
+
+auto vrfbr_myzone
+iface vrfbr_myzone
+ bridge-ports vrfvx_myzone
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+ vrf vrf_myzone
+
+auto vrfvx_myzone
+iface vrfvx_myzone
+ vxlan-id 1000
+ vxlan-local-tunnelip 192.168.0.1
+ bridge-learning off
+ bridge-arp-nd-suppress on
+ mtu 1450
+
+auto vxlan_myvnet
+iface vxlan_myvnet
+ vxlan-id 100
+ vxlan-local-tunnelip 192.168.0.1
+ bridge-learning off
+ bridge-arp-nd-suppress on
+ mtu 1450
diff --git a/test/zones/evpn/exitnode/interfaces b/test/zones/evpn/exitnode/interfaces
new file mode 100644
index 0000000..66bb826
--- /dev/null
+++ b/test/zones/evpn/exitnode/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet static
+ address 192.168.0.1/24
+ gateway 192.168.0.254
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/evpn/exitnode/sdn_config b/test/zones/evpn/exitnode/sdn_config
new file mode 100644
index 0000000..fd81817
--- /dev/null
+++ b/test/zones/evpn/exitnode/sdn_config
@@ -0,0 +1,26 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => "100", type => "vnet", zone => "myzone" },
+ },
+ },
+
+ zones => {
+ ids => { myzone => { ipam => "pve", type => "evpn", controller => "evpnctl", 'vrf-vxlan' => 1000, exitnodes => { 'localhost' => 1 } } },
+ },
+ controllers => {
+ ids => { evpnctl => { type => "evpn", 'peers' => '192.168.0.1,192.168.0.2,192.168.0.3', asn => "65000" } },
+ },
+
+ subnets => {
+ ids => { 'myzone-10.0.0.0-24' => {
+ 'type' => 'subnet',
+ 'vnet' => 'myvnet',
+ 'gateway' => '10.0.0.1',
+ }
+ }
+ }
+}
+
+
diff --git a/test/zones/evpn/exitnode_snat/expected_controller_config b/test/zones/evpn/exitnode_snat/expected_controller_config
new file mode 100644
index 0000000..57ff6ff
--- /dev/null
+++ b/test/zones/evpn/exitnode_snat/expected_controller_config
@@ -0,0 +1,52 @@
+log syslog informational
+ip forwarding
+ipv6 forwarding
+frr defaults datacenter
+service integrated-vtysh-config
+hostname localhost
+!
+!
+vrf vrf_myzone
+ vni 1000
+exit-vrf
+!
+router bgp 65000
+ bgp router-id 192.168.0.1
+ no bgp default ipv4-unicast
+ coalesce-time 1000
+ neighbor VTEP peer-group
+ neighbor VTEP remote-as 65000
+ neighbor VTEP bfd
+ neighbor 192.168.0.2 peer-group VTEP
+ neighbor 192.168.0.3 peer-group VTEP
+ !
+ address-family ipv4 unicast
+ import vrf vrf_myzone
+ exit-address-family
+ !
+ address-family ipv6 unicast
+ import vrf vrf_myzone
+ exit-address-family
+ !
+ address-family l2vpn evpn
+ neighbor VTEP activate
+ advertise-all-vni
+ exit-address-family
+!
+router bgp 65000 vrf vrf_myzone
+ !
+ address-family ipv4 unicast
+ redistribute connected
+ exit-address-family
+ !
+ address-family ipv6 unicast
+ redistribute connected
+ exit-address-family
+ !
+ address-family l2vpn evpn
+ default-originate ipv4
+ default-originate ipv6
+ exit-address-family
+!
+line vty
+!
\ No newline at end of file
diff --git a/test/zones/evpn/exitnode_snat/expected_sdn_interfaces b/test/zones/evpn/exitnode_snat/expected_sdn_interfaces
new file mode 100644
index 0000000..b364a58
--- /dev/null
+++ b/test/zones/evpn/exitnode_snat/expected_sdn_interfaces
@@ -0,0 +1,42 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ address 10.0.0.1/24
+ post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/24' -o vmbr0 -j SNAT --to-source 192.168.0.1
+ post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/24' -o vmbr0 -j SNAT --to-source 192.168.0.1
+ post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
+ post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1
+ bridge_ports vxlan_myvnet
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+ vrf vrf_myzone
+
+auto vrf_myzone
+iface vrf_myzone
+ vrf-table auto
+
+auto vrfbr_myzone
+iface vrfbr_myzone
+ bridge-ports vrfvx_myzone
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+ vrf vrf_myzone
+
+auto vrfvx_myzone
+iface vrfvx_myzone
+ vxlan-id 1000
+ vxlan-local-tunnelip 192.168.0.1
+ bridge-learning off
+ bridge-arp-nd-suppress on
+ mtu 1450
+
+auto vxlan_myvnet
+iface vxlan_myvnet
+ vxlan-id 100
+ vxlan-local-tunnelip 192.168.0.1
+ bridge-learning off
+ bridge-arp-nd-suppress on
+ mtu 1450
diff --git a/test/zones/evpn/exitnode_snat/interfaces b/test/zones/evpn/exitnode_snat/interfaces
new file mode 100644
index 0000000..66bb826
--- /dev/null
+++ b/test/zones/evpn/exitnode_snat/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet static
+ address 192.168.0.1/24
+ gateway 192.168.0.254
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/evpn/exitnode_snat/sdn_config b/test/zones/evpn/exitnode_snat/sdn_config
new file mode 100644
index 0000000..f40e8bd
--- /dev/null
+++ b/test/zones/evpn/exitnode_snat/sdn_config
@@ -0,0 +1,27 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => "100", type => "vnet", zone => "myzone" },
+ },
+ },
+
+ zones => {
+ ids => { myzone => { ipam => "pve", type => "evpn", controller => "evpnctl", 'vrf-vxlan' => 1000, exitnodes => { 'localhost' => 1 } } },
+ },
+ controllers => {
+ ids => { evpnctl => { type => "evpn", 'peers' => '192.168.0.1,192.168.0.2,192.168.0.3', asn => "65000" } },
+ },
+
+ subnets => {
+ ids => { 'myzone-10.0.0.0-24' => {
+ 'type' => 'subnet',
+ 'vnet' => 'myvnet',
+ 'gateway' => '10.0.0.1',
+ 'snat' => 1
+ }
+ }
+ }
+}
+
+
diff --git a/test/zones/evpn/ipv4/expected_controller_config b/test/zones/evpn/ipv4/expected_controller_config
new file mode 100644
index 0000000..c0ca898
--- /dev/null
+++ b/test/zones/evpn/ipv4/expected_controller_config
@@ -0,0 +1,31 @@
+log syslog informational
+ip forwarding
+ipv6 forwarding
+frr defaults datacenter
+service integrated-vtysh-config
+hostname localhost
+!
+!
+vrf vrf_myzone
+ vni 1000
+exit-vrf
+!
+router bgp 65000
+ bgp router-id 192.168.0.1
+ no bgp default ipv4-unicast
+ coalesce-time 1000
+ neighbor VTEP peer-group
+ neighbor VTEP remote-as 65000
+ neighbor VTEP bfd
+ neighbor 192.168.0.2 peer-group VTEP
+ neighbor 192.168.0.3 peer-group VTEP
+ !
+ address-family l2vpn evpn
+ neighbor VTEP activate
+ advertise-all-vni
+ exit-address-family
+!
+router bgp 65000 vrf vrf_myzone
+!
+line vty
+!
\ No newline at end of file
diff --git a/test/zones/evpn/ipv4/expected_sdn_interfaces b/test/zones/evpn/ipv4/expected_sdn_interfaces
new file mode 100644
index 0000000..799dcb7
--- /dev/null
+++ b/test/zones/evpn/ipv4/expected_sdn_interfaces
@@ -0,0 +1,38 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ address 10.0.0.1/24
+ bridge_ports vxlan_myvnet
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+ vrf vrf_myzone
+
+auto vrf_myzone
+iface vrf_myzone
+ vrf-table auto
+
+auto vrfbr_myzone
+iface vrfbr_myzone
+ bridge-ports vrfvx_myzone
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+ vrf vrf_myzone
+
+auto vrfvx_myzone
+iface vrfvx_myzone
+ vxlan-id 1000
+ vxlan-local-tunnelip 192.168.0.1
+ bridge-learning off
+ bridge-arp-nd-suppress on
+ mtu 1450
+
+auto vxlan_myvnet
+iface vxlan_myvnet
+ vxlan-id 100
+ vxlan-local-tunnelip 192.168.0.1
+ bridge-learning off
+ bridge-arp-nd-suppress on
+ mtu 1450
diff --git a/test/zones/evpn/ipv4/interfaces b/test/zones/evpn/ipv4/interfaces
new file mode 100644
index 0000000..66bb826
--- /dev/null
+++ b/test/zones/evpn/ipv4/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet static
+ address 192.168.0.1/24
+ gateway 192.168.0.254
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/evpn/ipv4/sdn_config b/test/zones/evpn/ipv4/sdn_config
new file mode 100644
index 0000000..4c115a9
--- /dev/null
+++ b/test/zones/evpn/ipv4/sdn_config
@@ -0,0 +1,26 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => "100", type => "vnet", zone => "myzone" },
+ },
+ },
+
+ zones => {
+ ids => { myzone => { ipam => "pve", type => "evpn", controller => "evpnctl", 'vrf-vxlan' => 1000 } },
+ },
+ controllers => {
+ ids => { evpnctl => { type => "evpn", 'peers' => '192.168.0.1,192.168.0.2,192.168.0.3', asn => "65000" } },
+ },
+
+ subnets => {
+ ids => { 'myzone-10.0.0.0-24' => {
+ 'type' => 'subnet',
+ 'vnet' => 'myvnet',
+ 'gateway' => '10.0.0.1',
+ }
+ }
+ }
+}
+
+
diff --git a/test/zones/qinq/bridge/expected_sdn_interfaces b/test/zones/qinq/bridge/expected_sdn_interfaces
new file mode 100644
index 0000000..73db5b3
--- /dev/null
+++ b/test/zones/qinq/bridge/expected_sdn_interfaces
@@ -0,0 +1,17 @@
+#version:1
+
+auto cv_myvnet
+iface cv_myvnet
+ vlan-raw-device sv_myvnet
+ vlan-id 100
+
+auto myvnet
+iface myvnet
+ bridge_ports cv_myvnet
+ bridge_stp off
+ bridge_fd 0
+
+auto sv_myvnet
+iface sv_myvnet
+ vlan-raw-device eth0
+ vlan-id 10
diff --git a/test/zones/qinq/bridge/interfaces b/test/zones/qinq/bridge/interfaces
new file mode 100644
index 0000000..68b6a88
--- /dev/null
+++ b/test/zones/qinq/bridge/interfaces
@@ -0,0 +1,5 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/qinq/bridge/sdn_config b/test/zones/qinq/bridge/sdn_config
new file mode 100644
index 0000000..1708d4c
--- /dev/null
+++ b/test/zones/qinq/bridge/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", tag => 10, ipam => "pve", type => "qinq" } },
+ },
+}
diff --git a/test/zones/qinq/bridge_vlanaware/expected_sdn_interfaces b/test/zones/qinq/bridge_vlanaware/expected_sdn_interfaces
new file mode 100644
index 0000000..a9ed991
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanaware/expected_sdn_interfaces
@@ -0,0 +1,15 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports z_myzone.100
+ bridge_stp off
+ bridge_fd 0
+
+auto z_myzone
+iface z_myzone
+ bridge-stp off
+ bridge-ports vmbr0.10
+ bridge-fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4094
diff --git a/test/zones/qinq/bridge_vlanaware/interfaces b/test/zones/qinq/bridge_vlanaware/interfaces
new file mode 100644
index 0000000..cfdfafe
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanaware/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
+ bridge-vids 2-4094
+ bridge-vlan-aware 1
diff --git a/test/zones/qinq/bridge_vlanaware/sdn_config b/test/zones/qinq/bridge_vlanaware/sdn_config
new file mode 100644
index 0000000..1708d4c
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanaware/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", tag => 10, ipam => "pve", type => "qinq" } },
+ },
+}
diff --git a/test/zones/qinq/bridge_vlanaware_vlanawarevnet/expected_sdn_interfaces b/test/zones/qinq/bridge_vlanaware_vlanawarevnet/expected_sdn_interfaces
new file mode 100644
index 0000000..373eff2
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanaware_vlanawarevnet/expected_sdn_interfaces
@@ -0,0 +1,17 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports z_myzone.100
+ bridge_stp off
+ bridge_fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4094
+
+auto z_myzone
+iface z_myzone
+ bridge-stp off
+ bridge-ports vmbr0.10
+ bridge-fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4094
diff --git a/test/zones/qinq/bridge_vlanaware_vlanawarevnet/interfaces b/test/zones/qinq/bridge_vlanaware_vlanawarevnet/interfaces
new file mode 100644
index 0000000..cfdfafe
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanaware_vlanawarevnet/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
+ bridge-vids 2-4094
+ bridge-vlan-aware 1
diff --git a/test/zones/qinq/bridge_vlanaware_vlanawarevnet/sdn_config b/test/zones/qinq/bridge_vlanaware_vlanawarevnet/sdn_config
new file mode 100644
index 0000000..c013176
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanaware_vlanawarevnet/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", vlanaware => "1", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", tag => 10, ipam => "pve", type => "qinq" } },
+ },
+}
diff --git a/test/zones/qinq/bridge_vlanaware_vlanprotocol/expected_sdn_interfaces b/test/zones/qinq/bridge_vlanaware_vlanprotocol/expected_sdn_interfaces
new file mode 100644
index 0000000..6bf2b12
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanaware_vlanprotocol/expected_sdn_interfaces
@@ -0,0 +1,19 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports z_myzone.100
+ bridge_stp off
+ bridge_fd 0
+
+auto vmbr0
+iface vmbr0
+ bridge-vlan-protocol 802.1ad
+
+auto z_myzone
+iface z_myzone
+ bridge-stp off
+ bridge-ports vmbr0.10
+ bridge-fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4094
diff --git a/test/zones/qinq/bridge_vlanaware_vlanprotocol/interfaces b/test/zones/qinq/bridge_vlanaware_vlanprotocol/interfaces
new file mode 100644
index 0000000..cfdfafe
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanaware_vlanprotocol/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
+ bridge-vids 2-4094
+ bridge-vlan-aware 1
diff --git a/test/zones/qinq/bridge_vlanaware_vlanprotocol/sdn_config b/test/zones/qinq/bridge_vlanaware_vlanprotocol/sdn_config
new file mode 100644
index 0000000..20a8a51
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanaware_vlanprotocol/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", tag => 10, 'vlan-protocol' => '802.1ad', ipam => "pve", type => "qinq" } },
+ },
+}
diff --git a/test/zones/qinq/bridge_vlanawarevnet/expected_sdn_interfaces b/test/zones/qinq/bridge_vlanawarevnet/expected_sdn_interfaces
new file mode 100644
index 0000000..ab7572e
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanawarevnet/expected_sdn_interfaces
@@ -0,0 +1,19 @@
+#version:1
+
+auto cv_myvnet
+iface cv_myvnet
+ vlan-raw-device sv_myvnet
+ vlan-id 100
+
+auto myvnet
+iface myvnet
+ bridge_ports cv_myvnet
+ bridge_stp off
+ bridge_fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4094
+
+auto sv_myvnet
+iface sv_myvnet
+ vlan-raw-device eth0
+ vlan-id 10
diff --git a/test/zones/qinq/bridge_vlanawarevnet/interfaces b/test/zones/qinq/bridge_vlanawarevnet/interfaces
new file mode 100644
index 0000000..68b6a88
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanawarevnet/interfaces
@@ -0,0 +1,5 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/qinq/bridge_vlanawarevnet/sdn_config b/test/zones/qinq/bridge_vlanawarevnet/sdn_config
new file mode 100644
index 0000000..c013176
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanawarevnet/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", vlanaware => "1", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", tag => 10, ipam => "pve", type => "qinq" } },
+ },
+}
diff --git a/test/zones/qinq/bridge_vlanprotocol/expected_sdn_interfaces b/test/zones/qinq/bridge_vlanprotocol/expected_sdn_interfaces
new file mode 100644
index 0000000..460f1a5
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanprotocol/expected_sdn_interfaces
@@ -0,0 +1,18 @@
+#version:1
+
+auto cv_myvnet
+iface cv_myvnet
+ vlan-raw-device sv_myvnet
+ vlan-id 100
+
+auto myvnet
+iface myvnet
+ bridge_ports cv_myvnet
+ bridge_stp off
+ bridge_fd 0
+
+auto sv_myvnet
+iface sv_myvnet
+ vlan-raw-device eth0
+ vlan-id 10
+ vlan-protocol 802.1ad
diff --git a/test/zones/qinq/bridge_vlanprotocol/interfaces b/test/zones/qinq/bridge_vlanprotocol/interfaces
new file mode 100644
index 0000000..68b6a88
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanprotocol/interfaces
@@ -0,0 +1,5 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/qinq/bridge_vlanprotocol/sdn_config b/test/zones/qinq/bridge_vlanprotocol/sdn_config
new file mode 100644
index 0000000..20a8a51
--- /dev/null
+++ b/test/zones/qinq/bridge_vlanprotocol/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", tag => 10, 'vlan-protocol' => '802.1ad', ipam => "pve", type => "qinq" } },
+ },
+}
diff --git a/test/zones/qinq/ovs/expected_sdn_interfaces b/test/zones/qinq/ovs/expected_sdn_interfaces
new file mode 100644
index 0000000..71c7aa3
--- /dev/null
+++ b/test/zones/qinq/ovs/expected_sdn_interfaces
@@ -0,0 +1,25 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports z_myzone.100
+ bridge_stp off
+ bridge_fd 0
+
+auto sv_myzone
+iface sv_myzone
+ ovs_type OVSIntPort
+ ovs_bridge vmbr0
+ ovs_options vlan_mode=dot1q-tunnel tag=10 other_config:qinq-ethtype=802.1q
+
+auto vmbr0
+iface vmbr0
+ ovs_ports sv_myzone
+
+auto z_myzone
+iface z_myzone
+ bridge-stp off
+ bridge-ports sv_myzone
+ bridge-fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4094
diff --git a/test/zones/qinq/ovs/interfaces b/test/zones/qinq/ovs/interfaces
new file mode 100644
index 0000000..14d2f1e
--- /dev/null
+++ b/test/zones/qinq/ovs/interfaces
@@ -0,0 +1,9 @@
+auto eth0
+iface eth0 inet manual
+ ovs_type OVSPort
+ ovs_bridge vmbr0
+
+auto vmbr0
+iface vmbr0 inet manual
+ ovs_type OVSBridge
+ ovs_ports eth0
diff --git a/test/zones/qinq/ovs/sdn_config b/test/zones/qinq/ovs/sdn_config
new file mode 100644
index 0000000..1708d4c
--- /dev/null
+++ b/test/zones/qinq/ovs/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", tag => 10, ipam => "pve", type => "qinq" } },
+ },
+}
diff --git a/test/zones/qinq/ovs_vlanawarevnet/expected_sdn_interfaces b/test/zones/qinq/ovs_vlanawarevnet/expected_sdn_interfaces
new file mode 100644
index 0000000..cf87ad1
--- /dev/null
+++ b/test/zones/qinq/ovs_vlanawarevnet/expected_sdn_interfaces
@@ -0,0 +1,27 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports z_myzone.100
+ bridge_stp off
+ bridge_fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4094
+
+auto sv_myzone
+iface sv_myzone
+ ovs_type OVSIntPort
+ ovs_bridge vmbr0
+ ovs_options vlan_mode=dot1q-tunnel tag=10 other_config:qinq-ethtype=802.1q
+
+auto vmbr0
+iface vmbr0
+ ovs_ports sv_myzone
+
+auto z_myzone
+iface z_myzone
+ bridge-stp off
+ bridge-ports sv_myzone
+ bridge-fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4094
diff --git a/test/zones/qinq/ovs_vlanawarevnet/interfaces b/test/zones/qinq/ovs_vlanawarevnet/interfaces
new file mode 100644
index 0000000..14d2f1e
--- /dev/null
+++ b/test/zones/qinq/ovs_vlanawarevnet/interfaces
@@ -0,0 +1,9 @@
+auto eth0
+iface eth0 inet manual
+ ovs_type OVSPort
+ ovs_bridge vmbr0
+
+auto vmbr0
+iface vmbr0 inet manual
+ ovs_type OVSBridge
+ ovs_ports eth0
diff --git a/test/zones/qinq/ovs_vlanawarevnet/sdn_config b/test/zones/qinq/ovs_vlanawarevnet/sdn_config
new file mode 100644
index 0000000..c013176
--- /dev/null
+++ b/test/zones/qinq/ovs_vlanawarevnet/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", vlanaware => "1", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", tag => 10, ipam => "pve", type => "qinq" } },
+ },
+}
diff --git a/test/zones/qinq/ovs_vlanprotocol/expected_sdn_interfaces b/test/zones/qinq/ovs_vlanprotocol/expected_sdn_interfaces
new file mode 100644
index 0000000..10b59f8
--- /dev/null
+++ b/test/zones/qinq/ovs_vlanprotocol/expected_sdn_interfaces
@@ -0,0 +1,25 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports z_myzone.100
+ bridge_stp off
+ bridge_fd 0
+
+auto sv_myzone
+iface sv_myzone
+ ovs_type OVSIntPort
+ ovs_bridge vmbr0
+ ovs_options vlan_mode=dot1q-tunnel tag=10 other_config:qinq-ethtype=802.1ad
+
+auto vmbr0
+iface vmbr0
+ ovs_ports sv_myzone
+
+auto z_myzone
+iface z_myzone
+ bridge-stp off
+ bridge-ports sv_myzone
+ bridge-fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4094
diff --git a/test/zones/qinq/ovs_vlanprotocol/interfaces b/test/zones/qinq/ovs_vlanprotocol/interfaces
new file mode 100644
index 0000000..14d2f1e
--- /dev/null
+++ b/test/zones/qinq/ovs_vlanprotocol/interfaces
@@ -0,0 +1,9 @@
+auto eth0
+iface eth0 inet manual
+ ovs_type OVSPort
+ ovs_bridge vmbr0
+
+auto vmbr0
+iface vmbr0 inet manual
+ ovs_type OVSBridge
+ ovs_ports eth0
diff --git a/test/zones/qinq/ovs_vlanprotocol/sdn_config b/test/zones/qinq/ovs_vlanprotocol/sdn_config
new file mode 100644
index 0000000..20a8a51
--- /dev/null
+++ b/test/zones/qinq/ovs_vlanprotocol/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", tag => 10, 'vlan-protocol' => '802.1ad', ipam => "pve", type => "qinq" } },
+ },
+}
diff --git a/test/zones/simple/basic/expected_sdn_interfaces b/test/zones/simple/basic/expected_sdn_interfaces
new file mode 100644
index 0000000..1e0c2c7
--- /dev/null
+++ b/test/zones/simple/basic/expected_sdn_interfaces
@@ -0,0 +1,7 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports none
+ bridge_stp off
+ bridge_fd 0
diff --git a/test/zones/simple/basic/interfaces b/test/zones/simple/basic/interfaces
new file mode 100644
index 0000000..68b6a88
--- /dev/null
+++ b/test/zones/simple/basic/interfaces
@@ -0,0 +1,5 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/simple/basic/sdn_config b/test/zones/simple/basic/sdn_config
new file mode 100644
index 0000000..527dcba
--- /dev/null
+++ b/test/zones/simple/basic/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { ipam => "pve", type => "simple" } },
+ },
+}
diff --git a/test/zones/simple/ipv4/expected_sdn_interfaces b/test/zones/simple/ipv4/expected_sdn_interfaces
new file mode 100644
index 0000000..d84075d
--- /dev/null
+++ b/test/zones/simple/ipv4/expected_sdn_interfaces
@@ -0,0 +1,8 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ address 192.168.0.1/24
+ bridge_ports none
+ bridge_stp off
+ bridge_fd 0
diff --git a/test/zones/simple/ipv4/interfaces b/test/zones/simple/ipv4/interfaces
new file mode 100644
index 0000000..68b6a88
--- /dev/null
+++ b/test/zones/simple/ipv4/interfaces
@@ -0,0 +1,5 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/simple/ipv4/sdn_config b/test/zones/simple/ipv4/sdn_config
new file mode 100644
index 0000000..dd77b75
--- /dev/null
+++ b/test/zones/simple/ipv4/sdn_config
@@ -0,0 +1,22 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { ipam => "pve", type => "simple" } },
+ },
+
+ subnets => {
+ ids => { 'myzone-192.168.0.0-24' => {
+ 'type' => 'subnet',
+ 'vnet' => 'myvnet',
+ 'gateway' => '192.168.0.1',
+ }
+ }
+ }
+}
+
+
diff --git a/test/zones/simple/ipv4snat/expected_sdn_interfaces b/test/zones/simple/ipv4snat/expected_sdn_interfaces
new file mode 100644
index 0000000..c822af1
--- /dev/null
+++ b/test/zones/simple/ipv4snat/expected_sdn_interfaces
@@ -0,0 +1,12 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ address 10.0.0.1/24
+ post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/24' -o vmbr0 -j SNAT --to-source 192.168.0.1
+ post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/24' -o vmbr0 -j SNAT --to-source 192.168.0.1
+ post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
+ post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1
+ bridge_ports none
+ bridge_stp off
+ bridge_fd 0
diff --git a/test/zones/simple/ipv4snat/interfaces b/test/zones/simple/ipv4snat/interfaces
new file mode 100644
index 0000000..66bb826
--- /dev/null
+++ b/test/zones/simple/ipv4snat/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet static
+ address 192.168.0.1/24
+ gateway 192.168.0.254
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/simple/ipv4snat/sdn_config b/test/zones/simple/ipv4snat/sdn_config
new file mode 100644
index 0000000..5936d7d
--- /dev/null
+++ b/test/zones/simple/ipv4snat/sdn_config
@@ -0,0 +1,23 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { ipam => "pve", type => "simple" } },
+ },
+
+ subnets => {
+ ids => { 'myzone-10.0.0.0-24' => {
+ 'type' => 'subnet',
+ 'vnet' => 'myvnet',
+ 'gateway' => '10.0.0.1',
+ 'snat' => 1
+ }
+ }
+ }
+}
+
+
diff --git a/test/zones/vlan/bridge/expected_sdn_interfaces b/test/zones/vlan/bridge/expected_sdn_interfaces
new file mode 100644
index 0000000..f9e96d1
--- /dev/null
+++ b/test/zones/vlan/bridge/expected_sdn_interfaces
@@ -0,0 +1,23 @@
+#version:1
+
+auto ln_myvnet
+iface ln_myvnet
+ link-type veth
+ veth-peer-name pr_myvnet
+
+auto myvnet
+iface myvnet
+ bridge_ports ln_myvnet
+ bridge_stp off
+ bridge_fd 0
+
+auto pr_myvnet
+iface pr_myvnet
+ link-type veth
+ veth-peer-name ln_myvnet
+
+auto vmbr0v100
+iface vmbr0v100
+ bridge_ports eth0.100 pr_myvnet
+ bridge_stp off
+ bridge_fd 0
diff --git a/test/zones/vlan/bridge/interfaces b/test/zones/vlan/bridge/interfaces
new file mode 100644
index 0000000..68b6a88
--- /dev/null
+++ b/test/zones/vlan/bridge/interfaces
@@ -0,0 +1,5 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/vlan/bridge/sdn_config b/test/zones/vlan/bridge/sdn_config
new file mode 100644
index 0000000..c6cfaaa
--- /dev/null
+++ b/test/zones/vlan/bridge/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", ipam => "pve", type => "vlan" } },
+ },
+}
diff --git a/test/zones/vlan/bridge_vlanaware/expected_sdn_interfaces b/test/zones/vlan/bridge_vlanaware/expected_sdn_interfaces
new file mode 100644
index 0000000..a318c7a
--- /dev/null
+++ b/test/zones/vlan/bridge_vlanaware/expected_sdn_interfaces
@@ -0,0 +1,7 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports vmbr0.100
+ bridge_stp off
+ bridge_fd 0
diff --git a/test/zones/vlan/bridge_vlanaware/interfaces b/test/zones/vlan/bridge_vlanaware/interfaces
new file mode 100644
index 0000000..cfdfafe
--- /dev/null
+++ b/test/zones/vlan/bridge_vlanaware/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
+ bridge-vids 2-4094
+ bridge-vlan-aware 1
diff --git a/test/zones/vlan/bridge_vlanaware/sdn_config b/test/zones/vlan/bridge_vlanaware/sdn_config
new file mode 100644
index 0000000..c6cfaaa
--- /dev/null
+++ b/test/zones/vlan/bridge_vlanaware/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", ipam => "pve", type => "vlan" } },
+ },
+}
diff --git a/test/zones/vlan/bridge_vlanaware_vlanawarevnet/expected_sdn_interfaces b/test/zones/vlan/bridge_vlanaware_vlanawarevnet/expected_sdn_interfaces
new file mode 100644
index 0000000..ebf9d2e
--- /dev/null
+++ b/test/zones/vlan/bridge_vlanaware_vlanawarevnet/expected_sdn_interfaces
@@ -0,0 +1,9 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports vmbr0.100
+ bridge_stp off
+ bridge_fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4094
diff --git a/test/zones/vlan/bridge_vlanaware_vlanawarevnet/interfaces b/test/zones/vlan/bridge_vlanaware_vlanawarevnet/interfaces
new file mode 100644
index 0000000..64eec9e
--- /dev/null
+++ b/test/zones/vlan/bridge_vlanaware_vlanawarevnet/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4096
diff --git a/test/zones/vlan/bridge_vlanaware_vlanawarevnet/sdn_config b/test/zones/vlan/bridge_vlanaware_vlanawarevnet/sdn_config
new file mode 100644
index 0000000..67068f9
--- /dev/null
+++ b/test/zones/vlan/bridge_vlanaware_vlanawarevnet/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => "100", type => "vnet", vlanaware => 1, zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", ipam => "pve", type => "vlan" } },
+ },
+}
diff --git a/test/zones/vlan/ovs/expected_sdn_interfaces b/test/zones/vlan/ovs/expected_sdn_interfaces
new file mode 100644
index 0000000..044559e
--- /dev/null
+++ b/test/zones/vlan/ovs/expected_sdn_interfaces
@@ -0,0 +1,17 @@
+#version:1
+
+auto ln_myvnet
+iface ln_myvnet
+ ovs_type OVSIntPort
+ ovs_bridge vmbr0
+ ovs_options tag=100
+
+auto myvnet
+iface myvnet
+ bridge_ports ln_myvnet
+ bridge_stp off
+ bridge_fd 0
+
+auto vmbr0
+iface vmbr0
+ ovs_ports ln_myvnet
diff --git a/test/zones/vlan/ovs/interfaces b/test/zones/vlan/ovs/interfaces
new file mode 100644
index 0000000..14d2f1e
--- /dev/null
+++ b/test/zones/vlan/ovs/interfaces
@@ -0,0 +1,9 @@
+auto eth0
+iface eth0 inet manual
+ ovs_type OVSPort
+ ovs_bridge vmbr0
+
+auto vmbr0
+iface vmbr0 inet manual
+ ovs_type OVSBridge
+ ovs_ports eth0
diff --git a/test/zones/vlan/ovs/sdn_config b/test/zones/vlan/ovs/sdn_config
new file mode 100644
index 0000000..c6cfaaa
--- /dev/null
+++ b/test/zones/vlan/ovs/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", ipam => "pve", type => "vlan" } },
+ },
+}
diff --git a/test/zones/vlan/ovs_vlanware_vnet/expected_sdn_interfaces b/test/zones/vlan/ovs_vlanware_vnet/expected_sdn_interfaces
new file mode 100644
index 0000000..7bb73b6
--- /dev/null
+++ b/test/zones/vlan/ovs_vlanware_vnet/expected_sdn_interfaces
@@ -0,0 +1,19 @@
+#version:1
+
+auto ln_myvnet
+iface ln_myvnet
+ ovs_type OVSIntPort
+ ovs_bridge vmbr0
+ ovs_options vlan_mode=dot1q-tunnel other_config:qinq-ethtype=802.1q tag=100
+
+auto myvnet
+iface myvnet
+ bridge_ports ln_myvnet
+ bridge_stp off
+ bridge_fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4094
+
+auto vmbr0
+iface vmbr0
+ ovs_ports ln_myvnet
diff --git a/test/zones/vlan/ovs_vlanware_vnet/interfaces b/test/zones/vlan/ovs_vlanware_vnet/interfaces
new file mode 100644
index 0000000..14d2f1e
--- /dev/null
+++ b/test/zones/vlan/ovs_vlanware_vnet/interfaces
@@ -0,0 +1,9 @@
+auto eth0
+iface eth0 inet manual
+ ovs_type OVSPort
+ ovs_bridge vmbr0
+
+auto vmbr0
+iface vmbr0 inet manual
+ ovs_type OVSBridge
+ ovs_ports eth0
diff --git a/test/zones/vlan/ovs_vlanware_vnet/sdn_config b/test/zones/vlan/ovs_vlanware_vnet/sdn_config
new file mode 100644
index 0000000..9cfdb52
--- /dev/null
+++ b/test/zones/vlan/ovs_vlanware_vnet/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", vlanaware => "1", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { bridge => "vmbr0", ipam => "pve", type => "vlan" } },
+ },
+}
diff --git a/test/zones/vxlan/basic/expected_sdn_interfaces b/test/zones/vxlan/basic/expected_sdn_interfaces
new file mode 100644
index 0000000..7b73c3e
--- /dev/null
+++ b/test/zones/vxlan/basic/expected_sdn_interfaces
@@ -0,0 +1,15 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports vxlan_myvnet
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+
+auto vxlan_myvnet
+iface vxlan_myvnet
+ vxlan-id 100
+ vxlan_remoteip 192.168.0.2
+ vxlan_remoteip 192.168.0.3
+ mtu 1450
diff --git a/test/zones/vxlan/basic/interfaces b/test/zones/vxlan/basic/interfaces
new file mode 100644
index 0000000..66bb826
--- /dev/null
+++ b/test/zones/vxlan/basic/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet static
+ address 192.168.0.1/24
+ gateway 192.168.0.254
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/vxlan/basic/sdn_config b/test/zones/vxlan/basic/sdn_config
new file mode 100644
index 0000000..f929304
--- /dev/null
+++ b/test/zones/vxlan/basic/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { ipam => "pve", type => "vxlan", peers => "192.168.0.1,192.168.0.2,192.168.0.3" } },
+ },
+}
diff --git a/test/zones/vxlan/vlanawarevnet/expected_sdn_interfaces b/test/zones/vxlan/vlanawarevnet/expected_sdn_interfaces
new file mode 100644
index 0000000..55cdf9c
--- /dev/null
+++ b/test/zones/vxlan/vlanawarevnet/expected_sdn_interfaces
@@ -0,0 +1,17 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports vxlan_myvnet
+ bridge_stp off
+ bridge_fd 0
+ bridge-vlan-aware yes
+ bridge-vids 2-4094
+ mtu 1450
+
+auto vxlan_myvnet
+iface vxlan_myvnet
+ vxlan-id 100
+ vxlan_remoteip 192.168.0.2
+ vxlan_remoteip 192.168.0.3
+ mtu 1450
diff --git a/test/zones/vxlan/vlanawarevnet/interfaces b/test/zones/vxlan/vlanawarevnet/interfaces
new file mode 100644
index 0000000..66bb826
--- /dev/null
+++ b/test/zones/vxlan/vlanawarevnet/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet static
+ address 192.168.0.1/24
+ gateway 192.168.0.254
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/test/zones/vxlan/vlanawarevnet/sdn_config b/test/zones/vxlan/vlanawarevnet/sdn_config
new file mode 100644
index 0000000..23fb557
--- /dev/null
+++ b/test/zones/vxlan/vlanawarevnet/sdn_config
@@ -0,0 +1,11 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", vlanaware => "1", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => { myzone => { ipam => "pve", type => "vxlan", peers => "192.168.0.1,192.168.0.2,192.168.0.3" } },
+ },
+}
--
2.20.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [pve-devel] applied: Re: [PATCH pve-network 0/3] add zones/controllers tests
2020-12-09 15:11 [pve-devel] [PATCH pve-network 0/3] add zones/controllers tests Alexandre Derumier
` (2 preceding siblings ...)
2020-12-09 15:11 ` [pve-devel] [PATCH pve-network 3/3] add zones && controllers unit tests Alexandre Derumier
@ 2020-12-18 17:05 ` Thomas Lamprecht
3 siblings, 0 replies; 5+ messages in thread
From: Thomas Lamprecht @ 2020-12-18 17:05 UTC (permalink / raw)
To: Proxmox VE development discussion, Alexandre Derumier
On 09/12/2020 16:11, Alexandre Derumier wrote:
> This patch serie add unit tests for zones && controllers
> config generation.
>
> (This need to be apply on top of my last patches series)
>
applied, thanks.
It seems that some build-dependencies are missing in debian control,
at least I cannot build in a clean chroot with only the ones actually
listed installed...
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-12-18 17:05 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-09 15:11 [pve-devel] [PATCH pve-network 0/3] add zones/controllers tests Alexandre Derumier
2020-12-09 15:11 ` [pve-devel] [PATCH pve-network 1/3] zones: add bridge helpers Alexandre Derumier
2020-12-09 15:11 ` [pve-devel] [PATCH pve-network 2/3] controllers: add generate_controller_rawconfig Alexandre Derumier
2020-12-09 15:11 ` [pve-devel] [PATCH pve-network 3/3] add zones && controllers unit tests Alexandre Derumier
2020-12-18 17:05 ` [pve-devel] applied: Re: [PATCH pve-network 0/3] add zones/controllers tests Thomas Lamprecht
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal