X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=pve-bridge;h=64490b0a9b70278fc22e4a22c4c8007758457663;hb=8ddbcf8bd6f500ad9e013b03d20c3b282c2dc234;hp=b8ef158f7e39468465992cdf3fe8649581610a3e;hpb=041dd2d8c70aaee37d554dd13604cf3b4696af99;p=qemu-server.git diff --git a/pve-bridge b/pve-bridge index b8ef158..64490b0 100755 --- a/pve-bridge +++ b/pve-bridge @@ -1,12 +1,19 @@ -#!/usr/bin/perl -w +#!/usr/bin/perl use strict; +use warnings; use PVE::QemuServer; use PVE::Tools qw(run_command); use PVE::Network; my $iface = shift; +my $hotplug = 0; +if ($iface eq '--hotplug') { + $hotplug = 1; + $iface = shift; +} + die "no interface specified\n" if !$iface; die "got strange interface name '$iface'\n" @@ -15,31 +22,22 @@ die "got strange interface name '$iface'\n" my $vmid = $1; my $netid = "net$2"; -my $migratedfrom = $ENV{PVE_MIGRATED_FROM}; +my $migratedfrom = $hotplug ? undef : $ENV{PVE_MIGRATED_FROM}; + +my $conf = PVE::QemuConfig->load_config($vmid, $migratedfrom); -my $conf = PVE::QemuServer::load_config($vmid, $migratedfrom); +my $netconf = $conf->{$netid}; +$netconf = $conf->{pending}->{$netid} if !$migratedfrom && defined($conf->{pending}->{$netid}); + die "unable to get network config '$netid'\n" - if !$conf->{$netid}; + if !defined($netconf); -my $net = PVE::QemuServer::parse_net($conf->{$netid}); +my $net = PVE::QemuServer::parse_net($netconf); die "unable to parse network config '$netid'\n" if !$net; -my $bridge = $net->{bridge}; -die "unable to get bridge setting\n" if !$bridge; - -my $bridgemtu = PVE::Tools::file_read_firstline("/sys/class/net/$bridge/mtu"); -die "bridge '$bridge' does not exist\n" if !$bridgemtu; - -system ("/sbin/ifconfig $iface 0.0.0.0 promisc up mtu $bridgemtu") == 0 || - die "interface activation failed\n"; - -PVE::Network::tap_rate_limit($iface, $net->{rate}) if $net->{rate}; - -my $newbridge = PVE::Network::activate_bridge_vlan($bridge, $net->{tag}); -PVE::Network::copy_bridge_config($bridge, $newbridge) if $bridge ne $newbridge; +PVE::Network::tap_create($iface, $net->{bridge}); -system ("/usr/sbin/brctl addif $newbridge $iface") == 0 || - die "can't add interface to bridge\n"; +PVE::Network::tap_plug($iface, $net->{bridge}, $net->{tag}, $net->{firewall}, $net->{trunks}, $net->{rate}); exit 0;