* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox