X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=pve-bridge;h=64490b0a9b70278fc22e4a22c4c8007758457663;hb=b1a70cab3d8402c7fb4d4f77c1eee3e7e3231bcb;hp=8e50112c5a55b33bcca1f88adb703a438ffd60c8;hpb=8afd0c622f6a2c7a0f9849fbeb7777e7505fc31d;p=qemu-server.git diff --git a/pve-bridge b/pve-bridge index 8e50112..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,38 +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"; - -if ($net->{rate}) { - - my $debug = 0; - my $rate = int($net->{rate}*1024*1024); - my $burst = 1024*1024; - - PVE::Network::setup_tc_rate_limit($iface, $rate, $burst, $debug); -} - -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;