mirror of
git://git.proxmox.com/git/pve-common.git
synced 2025-03-11 20:58:41 +03:00
Inotify : add vxlan interface support
This commit is contained in:
parent
c03b750906
commit
95aa8788b8
@ -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 {
|
||||
|
@ -8,6 +8,11 @@ r(load('brbase'));
|
||||
my $ip = '192.168.0.2';
|
||||
my $nm = '255.255.255.0';
|
||||
my $gw = '192.168.0.1';
|
||||
my $svcnodeip = '239.192.105.237';
|
||||
my $physdev = 'eth0';
|
||||
my $remoteip1 = '192.168.0.3';
|
||||
my $remoteip2 = '192.168.0.4';
|
||||
|
||||
|
||||
$config->{ifaces}->{eth1} = {
|
||||
type => 'eth',
|
||||
@ -19,6 +24,35 @@ $config->{ifaces}->{eth1} = {
|
||||
autostart => 1
|
||||
};
|
||||
|
||||
$config->{ifaces}->{vxlan1} = {
|
||||
type => 'vxlan',
|
||||
method => 'manual',
|
||||
families => ['inet'],
|
||||
'vxlan-id' => 1,
|
||||
'vxlan-svcnodeip' => $svcnodeip,
|
||||
'vxlan-physdev' => $physdev,
|
||||
autostart => 1
|
||||
};
|
||||
|
||||
$config->{ifaces}->{vxlan2} = {
|
||||
type => 'vxlan',
|
||||
method => 'manual',
|
||||
families => ['inet'],
|
||||
'vxlan-id' => 2,
|
||||
'vxlan-local-tunnelip' => $ip,
|
||||
autostart => 1
|
||||
};
|
||||
|
||||
$config->{ifaces}->{vxlan3} = {
|
||||
type => 'vxlan',
|
||||
method => 'manual',
|
||||
families => ['inet'],
|
||||
'vxlan-id' => 3,
|
||||
'vxlan-remoteip' => [$remoteip1, $remoteip2],
|
||||
autostart => 1
|
||||
};
|
||||
|
||||
|
||||
expect load('loopback') . <<"CHECK";
|
||||
source-directory interfaces.d
|
||||
|
||||
@ -39,6 +73,23 @@ iface vmbr0 inet static
|
||||
bridge-stp off
|
||||
bridge-fd 0
|
||||
|
||||
auto vxlan1
|
||||
iface vxlan1 inet manual
|
||||
vxlan-id 1
|
||||
vxlan-svcnodeip $svcnodeip
|
||||
vxlan-physdev $physdev
|
||||
|
||||
auto vxlan2
|
||||
iface vxlan2 inet manual
|
||||
vxlan-id 2
|
||||
vxlan-local-tunnelip $ip
|
||||
|
||||
auto vxlan3
|
||||
iface vxlan3 inet manual
|
||||
vxlan-id 3
|
||||
vxlan-remoteip $remoteip1
|
||||
vxlan-remoteip $remoteip2
|
||||
|
||||
CHECK
|
||||
|
||||
save('if', w());
|
||||
|
Loading…
x
Reference in New Issue
Block a user