X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=src%2FPVE%2FINotify.pm;h=dbc986841529daf100ec6b6a0a214ba7b2ef8a1d;hp=0b9ea4adc3e078a47369cd97bc6c271a45f16870;hb=95aa8788b8463e549d26d9eb301dfbba75b49da3;hpb=c03b7509063843b92ec292d2dd86308f669b2ab4 diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm index 0b9ea4a..dbc9868 100644 --- a/src/PVE/INotify.pm +++ b/src/PVE/INotify.pm @@ -914,6 +914,11 @@ sub __read_etc_network_interfaces { } } $d->{$id} = $value; + } elsif ($id eq 'vxlan-id' || $id eq 'vxlan-svcnodeip' || + $id eq 'vxlan-physdev' || $id eq 'vxlan-local-tunnelip') { + $d->{$id} = $value; + } elsif ($id eq 'vxlan-remoteip') { + push @{$d->{$id}}, $value; } else { push @{$f->{options}}, $option; } @@ -1010,7 +1015,9 @@ sub __read_etc_network_interfaces { } elsif ($iface =~ m/^lo$/) { $d->{type} = 'loopback'; } else { - if (!$d->{ovs_type}) { + if ($d->{'vxlan-id'}) { + $d->{type} = 'vxlan'; + } elsif (!$d->{ovs_type}) { $d->{type} = 'unknown'; } elsif ($d->{ovs_type} eq 'OVSIntPort') { $d->{type} = $d->{ovs_type}; @@ -1118,6 +1125,19 @@ sub __interface_to_string { $raw .= "\tbond-xmit-hash-policy $d->{'bond_xmit_hash_policy'}\n"; } $done->{'bond_xmit_hash_policy'} = 1; + } elsif ($d->{type} eq 'vxlan') { + + foreach my $k (qw(vxlan-id vxlan-svcnodeip vxlan-physdev vxlan-local-tunnelip)) { + $raw .= "\t$k $d->{$k}\n" if $d->{$k}; + $done->{$k} = 1; + } + + if ($d->{'vxlan-remoteip'}) { + foreach my $remoteip (@{$d->{'vxlan-remoteip'}}) { + $raw .= "\tvxlan-remoteip $remoteip\n"; + } + $done->{'vxlan-remoteip'} = 1; + } } elsif ($d->{type} eq 'OVSBridge') { @@ -1290,6 +1310,30 @@ sub __write_etc_network_interfaces { } } + # check vxlan + my $vxlans = {}; + foreach my $iface (keys %$ifaces) { + my $d = $ifaces->{$iface}; + + if ($d->{type} eq 'vxlan' && $d->{'vxlan-id'}) { + my $vxlanid = $d->{'vxlan-id'}; + die "iface $iface : duplicate vxlan-id $vxlanid already used in $vxlans->{$vxlanid}\n" if $vxlans->{$vxlanid}; + $vxlans->{$vxlanid} = $iface; + } + + my $ips = 0; + ++$ips if defined $d->{'vxlan-svcnodeip'}; + ++$ips if defined $d->{'vxlan-remoteip'}; + ++$ips if defined $d->{'vxlan-local-tunnelip'}; + if ($ips > 1) { + die "ifac $iface : vxlan-svcnodeip, vxlan-remoteip and vxlan-localtunnelip are mutually exclusive\n"; + } + + if (defined($d->{'vxlan-svcnodeip'}) != defined($d->{'vxlan-physdev'})) { + die "iface $iface : vxlan-svcnodeip and vxlan-physdev must be define together\n"; + } + } + my $raw = <<'NETWORKDOC'; # network interface settings; autogenerated # Please do NOT modify this file directly, unless you know what @@ -1311,6 +1355,7 @@ NETWORKDOC eth => 200000, bond => 300000, bridge => 400000, + vxlan => 500000, }; my $lookup_type_prio = sub {