--- lib/PXElator/network.pm 2009/07/31 17:07:39 82 +++ lib/PXElator/network.pm 2009/08/11 12:38:23 197 @@ -7,30 +7,55 @@ use server; +sub ifconfig { + my $dev = shift; + `/sbin/ifconfig $dev` +} + sub tap { + if ( my $dev = $ENV{DEV} ) { + warn "W: running under device $dev, not configuring tap0\n"; + return; + } + + if ( $server::ip !~ m{^172} ) { + warn "W: server ip mismetch, not configuring tap0\n"; + return; + } + my $interfaces = read_file '/etc/network/interfaces'; - if ( $interfaces !~ m{tap0.*$server::ip}s ) { + if ( $interfaces !~ m{tap0}s ) { - system "sudo apt-get install vde2"; + system "sudo apt-get install -y vde2"; - $interfaces .= qq{ + write_file '/tmp/interfaces', qq{ - iface tap0 inet static - address $server::ip - netmask $server::netmask - vde2-switch - +# added by PXElator +iface tap0 inet static + address $server::ip + netmask $server::netmask + vde2-switch - + # setup NAT for vde network + post-up sysctl -w net.ipv4.ip_forward=1 + post-up iptables -t nat -A POSTROUTING -s $server::ip/$server::netmask -o wlan0 -j MASQUERADE }; - write_file '/etc/network/interfaces', $interfaces; + system q|sudo sh -c 'cat /tmp/interfaces >> /etc/network/interfaces'|; + system q|sudo sh -c 'usermod -G vde2-net -a $SUDO_USER'|; } - `/sbin/ifconfig tap0 2>/dev/null` =~ m{UP} || system "sudo ifup tap0"; - - 1; + my $ifconfig = ifconfig('tap0'); + if ( $ifconfig =~ m{UP} ) { + $ifconfig =~ m{$server::ip}s && return 'up'; + system("sudo /sbin/ifconfig tap0 $server::ip netmask $server::netmask") == 0 && return "ip changed $server::ip"; + die "can't change IP address of tap0 to $server::ip"; + } else { + die "bring interface up with: sudo ifup tap0\n"; + } } 1;