]> git.proxmox.com Git - vzctl.git/blame - debian/vznetaddbr
vznetaddbr perl version
[vzctl.git] / debian / vznetaddbr
CommitLineData
7fe1577d
AD
1#!/usr/bin/perl
2use strict;
3use warnings;
4use PVE::OpenVZ;
5use PVE::Tools qw(run_command);
6use PVE::Network;
7use PVE::ProcFSTools;
8
9my $vmid = $ENV{VEID};
10die "missing vmid parameter" if !$vmid;
11
12my $iface = $ARGV[2];
13die "missing iface parameter" if !$iface;
14
15my $bridgevlanf = $ARGV[3];
16die "missing bridge parameter" if !$bridgevlanf;
17
18my $conf = PVE::OpenVZ::load_config($vmid);
19
20my $ifaces = {};
21if (defined ($conf->{netif}) && $conf->{netif}->{value}) {
22 $ifaces = PVE::OpenVZ::parse_netif($conf->{netif}->{value}, $vmid);
23}
24
25my $oldbridgevlanf = undef;
26
27#read oldbridge value
28foreach my $ifname (sort keys %$ifaces) {
29
30 if($ifaces->{$ifname}->{host_ifname} eq $iface){
31 $oldbridgevlanf = $ifaces->{$ifname}->{bridge};
32
33 }
34}
35
36my $tag = undef;
37my $firewall = undef;
38my $bridge = undef;
39
40if($bridgevlanf =~ m/(vmbr(\d+))(v(\d+))?(f)?/){
41 $bridge = $1;
42 $tag = $4 if $4;
43 $firewall = $5 if $5;
44}
45
46die "missing bridge parameter" if !$bridge;
47
48
49if($bridgevlanf ne $oldbridgevlanf){
50
51 PVE::Network::tap_unplug($iface);
52}
53
54if (-d "/sys/class/net/$iface") {
55
56 my $bridgemtu = PVE::Tools::file_read_firstline("/sys/class/net/$bridge/mtu");
57 die "bridge '$bridge' does not exist\n" if !$bridgemtu;
58 #avoid insecure dependency;
59 ($bridgemtu) = $bridgemtu =~ /(\d+)/;
60
61 PVE::Tools::run_command("/sbin/ip link set dev $iface up mtu $bridgemtu");
62 PVE::Tools::run_command("/sbin/ip addr add 0.0.0.0/0 dev $iface");
63 PVE::ProcFSTools::write_proc_entry("/proc/sys/net/ipv4/conf/$iface/proxy_arp", "1");
64 PVE::ProcFSTools::write_proc_entry("/proc/sys/net/ipv4/conf/$iface/forwarding", "1");
65 PVE::Network::tap_plug($iface, $bridge, $tag, $firewall);
66
67}
68
69exit 0;