From: Wolfgang Bumiller Date: Fri, 24 Jul 2015 07:14:56 +0000 (+0200) Subject: debian setup: dhcp, manual and unmanaged network X-Git-Url: https://git.proxmox.com/?p=pve-container.git;a=commitdiff_plain;h=0178cffa916f68f7dae696873d2f8f0388933b93 debian setup: dhcp, manual and unmanaged network --- diff --git a/src/PVE/LXCSetup/Debian.pm b/src/PVE/LXCSetup/Debian.pm index 21da86f..7635e08 100644 --- a/src/PVE/LXCSetup/Debian.pm +++ b/src/PVE/LXCSetup/Debian.pm @@ -113,24 +113,31 @@ sub setup_network { if ($d->{name}) { my $net = {}; if (defined($d->{ip})) { - my $ipinfo = PVE::LXC::parse_ipv4_cidr($d->{ip}); - $net->{address} = $ipinfo->{address}; - $net->{netmask} = $ipinfo->{netmask}; + if ($d->{ip} =~ /^(?:dhcp|manual)$/) { + $net->{address} = $d->{ip}; + } else { + my $ipinfo = PVE::LXC::parse_ipv4_cidr($d->{ip}); + $net->{address} = $ipinfo->{address}; + $net->{netmask} = $ipinfo->{netmask}; + } } if (defined($d->{'gw'})) { $net->{gateway} = $d->{'gw'}; } if (defined($d->{ip6})) { - if ($d->{ip6} !~ /^($IPV6RE)\/(\d+)$/) { + if ($d->{ip6} =~ /^(?:dhcp|manual)$/) { + $net->{address6} = $d->{ip6}; + } elsif ($d->{ip6} !~ /^($IPV6RE)\/(\d+)$/) { die "unable to parse ipv6 address/prefix\n"; + } else { + $net->{address6} = $1; + $net->{netmask6} = $2; } - $net->{address6} = $1; - $net->{netmask6} = $2; } if (defined($d->{'gw6'})) { $net->{gateway6} = $d->{'gw6'}; } - $networks->{$d->{name}} = $net; + $networks->{$d->{name}} = $net if keys %$net; } } @@ -156,7 +163,9 @@ sub setup_network { $interfaces .= "auto $section->{ifname}\n" if $new; - if ($net->{address}) { + if ($net->{address} =~ /^(dhcp|manual)$/) { + $interfaces .= "iface $section->{ifname} inet $1\n"; + } elsif ($net->{address}) { $interfaces .= "iface $section->{ifname} inet static\n"; $interfaces .= "\taddress $net->{address}\n" if defined($net->{address}); $interfaces .= "\tnetmask $net->{netmask}\n" if defined($net->{netmask}); @@ -164,8 +173,6 @@ sub setup_network { foreach my $attr (@{$section->{attr}}) { $interfaces .= "\t$attr\n"; } - } else { - $interfaces .= "iface $section->{ifname} inet manual\n"; } $interfaces .= "\n"; @@ -173,7 +180,9 @@ sub setup_network { } elsif ($section->{type} eq 'ipv6') { $done_v6_hash->{$section->{ifname}} = 1; - if ($net->{address6}) { + if ($net->{address6} =~ /^(dhcp|manual)$/) { + $interfaces .= "iface $section->{ifname} inet6 $1\n"; + } elsif ($net->{address6}) { $interfaces .= "iface $section->{ifname} inet6 static\n"; $interfaces .= "\taddress $net->{address6}\n" if defined($net->{address6}); $interfaces .= "\tnetmask $net->{netmask6}\n" if defined($net->{netmask6}); @@ -206,8 +215,9 @@ sub setup_network { } next; } - if ($line =~ m/^iface\s+(\S+)\s+inet\s+(\S+)\s*$/) { + if ($line =~ m/^\s*iface\s+(\S+)\s+inet\s+(\S+)\s*$/) { my $ifname = $1; + &$print_section(); # print previous section if (!$networks->{$ifname}) { $interfaces .= "$line\n"; next; @@ -215,8 +225,9 @@ sub setup_network { $section = { type => 'ipv4', ifname => $ifname, attr => []}; next; } - if ($line =~ m/^iface\s+(\S+)\s+inet6\s+(\S+)\s*$/) { + if ($line =~ m/^\s*iface\s+(\S+)\s+inet6\s+(\S+)\s*$/) { my $ifname = $1; + &$print_section(); # print previous section if (!$networks->{$ifname}) { $interfaces .= "$line\n"; next; @@ -224,6 +235,17 @@ sub setup_network { $section = { type => 'ipv6', ifname => $ifname, attr => []}; next; } + # Handle other section delimiters: + if ($line =~ m/^\s*(?:mapping\s + |auto\s + |allow- + |source\s + |source-directory\s + )/x) { + &$print_section(); + $interfaces .= "$line\n"; + next; + } if ($section && $line =~ m/^\s*((\S+)\s(.*))$/) { my ($adata, $aname) = ($1, $2); if ($aname eq 'address' || $aname eq 'netmask' || diff --git a/src/test/test-debian-002/config b/src/test/test-debian-002/config index 73b98ff..cf54bcc 100644 --- a/src/test/test-debian-002/config +++ b/src/test/test-debian-002/config @@ -14,3 +14,4 @@ lxc.network.type = veth pve.network.bridge = vmbr0 lxc.network.name = eth2 lxc.network.veth.pair = veth100i2 +pve.network.ip = manual diff --git a/src/test/test-debian-003/config b/src/test/test-debian-003/config index c57b6cb..cf83d34 100644 --- a/src/test/test-debian-003/config +++ b/src/test/test-debian-003/config @@ -8,3 +8,4 @@ lxc.network.hwaddr = 26:2B:CC:E5:7F:F9 pve.network.bridge = vmbr0 lxc.network.name = eth0 lxc.network.veth.pair = veth100.0 +pve.network.ip = manual