From: Alexandre Derumier Date: Thu, 20 Apr 2023 21:36:18 +0000 (+0200) Subject: fix #4425: vxlan, evpn: add vxlan-port option to override default X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=b84eacc86a0f6f231946ae16743bf29113ca284e;p=mirror%2Fpve-network.git fix #4425: vxlan, evpn: add vxlan-port option to override default Some users requested it as their physical network equipments don't use standard vxlan port Signed-off-by: Alexandre Derumier Signed-off-by: Thomas Lamprecht --- diff --git a/src/PVE/Network/SDN/Zones/EvpnPlugin.pm b/src/PVE/Network/SDN/Zones/EvpnPlugin.pm index a5a7539..b155abc 100644 --- a/src/PVE/Network/SDN/Zones/EvpnPlugin.pm +++ b/src/PVE/Network/SDN/Zones/EvpnPlugin.pm @@ -91,6 +91,7 @@ sub options { 'advertise-subnets' => { optional => 1 }, 'disable-arp-nd-suppression' => { optional => 1 }, 'rt-import' => { optional => 1 }, + 'vxlan-port' => { optional => 1 }, mtu => { optional => 1 }, mac => { optional => 1 }, dns => { optional => 1 }, @@ -107,6 +108,7 @@ sub generate_sdn_config { my $tag = $vnet->{tag}; my $alias = $vnet->{alias}; my $mac = $plugin_config->{'mac'}; + my $vxlanport = $plugin_config->{'vxlan-port'}; my $vrf_iface = "vrf_$zoneid"; my $vrfvxlan = $plugin_config->{'vrf-vxlan'}; @@ -133,6 +135,7 @@ sub generate_sdn_config { my @iface_config = (); push @iface_config, "vxlan-id $tag"; push @iface_config, "vxlan-local-tunnelip $ifaceip" if $ifaceip; + push @iface_config, "vxlan-port $vxlanport" if $vxlanport; push @iface_config, "bridge-learning off"; push @iface_config, "bridge-arp-nd-suppress on" if !$plugin_config->{'disable-arp-nd-suppression'}; @@ -220,6 +223,7 @@ sub generate_sdn_config { @iface_config = (); push @iface_config, "vxlan-id $vrfvxlan"; push @iface_config, "vxlan-local-tunnelip $ifaceip" if $ifaceip; + push @iface_config, "vxlan-port $vxlanport" if $vxlanport; push @iface_config, "bridge-learning off"; push @iface_config, "bridge-arp-nd-suppress on" if !$plugin_config->{'disable-arp-nd-suppression'}; push @iface_config, "mtu $mtu" if $mtu; diff --git a/src/PVE/Network/SDN/Zones/VxlanPlugin.pm b/src/PVE/Network/SDN/Zones/VxlanPlugin.pm index c523cf7..9a77bb9 100644 --- a/src/PVE/Network/SDN/Zones/VxlanPlugin.pm +++ b/src/PVE/Network/SDN/Zones/VxlanPlugin.pm @@ -29,6 +29,12 @@ sub properties { description => "peers address list.", type => 'string', format => 'ip-list' }, + 'vxlan-port' => { + description => "Vxlan tunnel udp port (default 4789).", + minimum => 1, + maximum => 65536, + type => 'integer' + }, }; } @@ -36,6 +42,7 @@ sub options { return { nodes => { optional => 1}, peers => { optional => 0 }, + 'vxlan-port' => { optional => 1 }, mtu => { optional => 1 }, dns => { optional => 1 }, reversedns => { optional => 1 }, @@ -51,6 +58,7 @@ sub generate_sdn_config { my $tag = $vnet->{tag}; my $alias = $vnet->{alias}; my $multicastaddress = $plugin_config->{'multicast-address'}; + my $vxlanport = $plugin_config->{'vxlan-port'}; my @peers; @peers = PVE::Tools::split_list($plugin_config->{'peers'}) if $plugin_config->{'peers'}; my $vxlan_iface = "vxlan_$vnetid"; @@ -71,6 +79,7 @@ sub generate_sdn_config { next if $address eq $ifaceip; push @iface_config, "vxlan_remoteip $address"; } + push @iface_config, "vxlan-port $vxlanport" if $vxlanport; push @iface_config, "mtu $mtu" if $mtu; diff --git a/src/test/zones/evpn/vxlanport/expected_controller_config b/src/test/zones/evpn/vxlanport/expected_controller_config new file mode 100644 index 0000000..bd7830a --- /dev/null +++ b/src/test/zones/evpn/vxlanport/expected_controller_config @@ -0,0 +1,41 @@ +frr version 8.2.2 +frr defaults datacenter +hostname localhost +log syslog informational +service integrated-vtysh-config +! +! +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 route-map MAP_VTEP_IN in + neighbor VTEP route-map MAP_VTEP_OUT out + neighbor VTEP activate + advertise-all-vni + exit-address-family +exit +! +router bgp 65000 vrf vrf_myzone + bgp router-id 192.168.0.1 +exit +! +route-map MAP_VTEP_IN permit 1 +exit +! +route-map MAP_VTEP_OUT permit 1 +exit +! +line vty +! \ No newline at end of file diff --git a/src/test/zones/evpn/vxlanport/expected_sdn_interfaces b/src/test/zones/evpn/vxlanport/expected_sdn_interfaces new file mode 100644 index 0000000..d511bf9 --- /dev/null +++ b/src/test/zones/evpn/vxlanport/expected_sdn_interfaces @@ -0,0 +1,44 @@ +#version:1 + +auto myvnet +iface myvnet + address 10.0.0.1/24 + hwaddress A2:1D:CB:1A:C0:8B + bridge_ports vxlan_myvnet + bridge_stp off + bridge_fd 0 + mtu 1450 + ip-forward on + arp-accept on + vrf vrf_myzone + +auto vrf_myzone +iface vrf_myzone + vrf-table auto + post-up ip route add vrf vrf_myzone unreachable default metric 4278198272 + +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 + vxlan-port 6000 + 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 + vxlan-port 6000 + bridge-learning off + bridge-arp-nd-suppress on + mtu 1450 diff --git a/src/test/zones/evpn/vxlanport/interfaces b/src/test/zones/evpn/vxlanport/interfaces new file mode 100644 index 0000000..66bb826 --- /dev/null +++ b/src/test/zones/evpn/vxlanport/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/src/test/zones/evpn/vxlanport/sdn_config b/src/test/zones/evpn/vxlanport/sdn_config new file mode 100644 index 0000000..8fc80eb --- /dev/null +++ b/src/test/zones/evpn/vxlanport/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", 'vxlan-port' => 6000, 'vrf-vxlan' => 1000, 'mac' => 'A2:1D:CB:1A:C0:8B' } }, + }, + 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/src/test/zones/vxlan/vxlanport/expected_sdn_interfaces b/src/test/zones/vxlan/vxlanport/expected_sdn_interfaces new file mode 100644 index 0000000..572550a --- /dev/null +++ b/src/test/zones/vxlan/vxlanport/expected_sdn_interfaces @@ -0,0 +1,16 @@ +#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 + vxlan-port 6000 + mtu 1450 diff --git a/src/test/zones/vxlan/vxlanport/interfaces b/src/test/zones/vxlan/vxlanport/interfaces new file mode 100644 index 0000000..66bb826 --- /dev/null +++ b/src/test/zones/vxlan/vxlanport/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/src/test/zones/vxlan/vxlanport/sdn_config b/src/test/zones/vxlan/vxlanport/sdn_config new file mode 100644 index 0000000..aedaa74 --- /dev/null +++ b/src/test/zones/vxlan/vxlanport/sdn_config @@ -0,0 +1,11 @@ +{ + version => 1, + vnets => { + ids => { + myvnet => { tag => 100, type => "vnet", zone => "myzone" }, + }, + }, + zones => { + ids => { myzone => { ipam => "pve", type => "vxlan", 'vxlan-port' => 6000, peers => "192.168.0.1,192.168.0.2,192.168.0.3" } }, + }, +}