/[pxelator]/lib/PXElator/network.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /lib/PXElator/network.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 502 - (hide annotations)
Mon May 17 15:19:18 2010 UTC (13 years, 11 months ago) by dpavlin
File size: 2128 byte(s)
fix masquarade device

1 dpavlin 82 package network;
2    
3     use warnings;
4     use strict;
5    
6     use File::Slurp;
7    
8     use server;
9 dpavlin 278 use ip;
10 dpavlin 82
11 dpavlin 83 sub ifconfig {
12     my $dev = shift;
13     `/sbin/ifconfig $dev`
14     }
15    
16 dpavlin 229 sub setup {
17    
18     if ( my $dev = $ENV{DEV} ) {
19     warn "W: running under device $dev, not configuring network\n";
20     return;
21     }
22    
23     my $ifconfig = ifconfig('virtual');
24     if ( $ifconfig !~ m{UP} ) {
25     system "brctl addbr virtual";
26     system "brctl setfd virtual 0";
27     system("/sbin/ifconfig virtual $server::ip netmask $server::netmask") == 0 || warn "W: $!";
28     } else {
29 dpavlin 393 warn "using existing virtual configuration\n$ifconfig\n";
30 dpavlin 229 }
31 dpavlin 278 if ( my $dev = ip::default_route_dev() ) {
32     system "sudo sysctl -w net.ipv4.ip_forward=1";
33     my $network = ip::from_int( ip::to_int($server::ip) & ip::to_int($server::netmask) );
34     warn "# network $network";
35 dpavlin 502 system "sudo iptables -t nat -L POSTROUTING -n | grep $network || sudo iptables -t nat -A POSTROUTING -s $server::ip/$server::netmask -o $dev -j MASQUERADE";
36 dpavlin 278 warn "masquarade to $dev";
37     }
38 dpavlin 229 }
39    
40 dpavlin 82 sub tap {
41    
42 dpavlin 179 if ( my $dev = $ENV{DEV} ) {
43     warn "W: running under device $dev, not configuring tap0\n";
44     return;
45     }
46    
47 dpavlin 175 if ( $server::ip !~ m{^172} ) {
48 dpavlin 179 warn "W: server ip mismetch, not configuring tap0\n";
49 dpavlin 175 return;
50     }
51    
52 dpavlin 82 my $interfaces = read_file '/etc/network/interfaces';
53    
54 dpavlin 130 if ( $interfaces !~ m{tap0}s ) {
55 dpavlin 82
56 dpavlin 197 system "sudo apt-get install -y vde2";
57 dpavlin 82
58 dpavlin 99 write_file '/tmp/interfaces', qq{
59 dpavlin 82
60 dpavlin 99 # added by PXElator
61     iface tap0 inet static
62     address $server::ip
63     netmask $server::netmask
64     vde2-switch -
65 dpavlin 144 # setup NAT for vde network
66     post-up sysctl -w net.ipv4.ip_forward=1
67     post-up iptables -t nat -A POSTROUTING -s $server::ip/$server::netmask -o wlan0 -j MASQUERADE
68 dpavlin 82
69     };
70    
71 dpavlin 99 system q|sudo sh -c 'cat /tmp/interfaces >> /etc/network/interfaces'|;
72     system q|sudo sh -c 'usermod -G vde2-net -a $SUDO_USER'|;
73 dpavlin 82
74     }
75    
76 dpavlin 84 my $ifconfig = ifconfig('tap0');
77     if ( $ifconfig =~ m{UP} ) {
78     $ifconfig =~ m{$server::ip}s && return 'up';
79     system("sudo /sbin/ifconfig tap0 $server::ip netmask $server::netmask") == 0 && return "ip changed $server::ip";
80     die "can't change IP address of tap0 to $server::ip";
81 dpavlin 140 } else {
82     die "bring interface up with: sudo ifup tap0\n";
83 dpavlin 84 }
84 dpavlin 82 }
85    
86     1;

  ViewVC Help
Powered by ViewVC 1.1.26