--- lib/PXElator/network.pm 2009/08/11 12:38:23 197 +++ lib/PXElator/network.pm 2009/08/20 19:44:19 278 @@ -6,12 +6,37 @@ use File::Slurp; use server; +use ip; sub ifconfig { my $dev = shift; `/sbin/ifconfig $dev` } +sub setup { + + if ( my $dev = $ENV{DEV} ) { + warn "W: running under device $dev, not configuring network\n"; + return; + } + + my $ifconfig = ifconfig('virtual'); + if ( $ifconfig !~ m{UP} ) { + system "brctl addbr virtual"; + system "brctl setfd virtual 0"; + system("/sbin/ifconfig virtual $server::ip netmask $server::netmask") == 0 || warn "W: $!"; + } else { + warn "OK $ifconfig\n"; + } + if ( my $dev = ip::default_route_dev() ) { + system "sudo sysctl -w net.ipv4.ip_forward=1"; + my $network = ip::from_int( ip::to_int($server::ip) & ip::to_int($server::netmask) ); + warn "# network $network"; + system "sudo iptables -t nat -L POSTROUTING -n | grep $network || sudo iptables -t nat -A POSTROUTING -s $server::ip/$server::netmask -o wlan0 -j MASQUERADE"; + warn "masquarade to $dev"; + } +} + sub tap { if ( my $dev = $ENV{DEV} ) {