58a431f3940e0b90def0048f65870b1c2572d51d
[vsys.git] / factory / setup-link
1 #!/bin/sh +x
2
3 IP=/sbin/ip
4
5 SLICE=$1
6 SLICEID=`id -u $SLICE`
7 read INDEX
8 read REMOTE
9
10 KEYFILE="/etc/vini/egre-keys.txt"
11 if [ -e "$KEYFILE" ]; then
12     KEY=$( awk -v slice=$SLICE '$1 == slice {print $2}' $KEYFILE )
13 fi
14 if [ -z "$KEY" ]; then
15     echo "No EGRE key found for slice $SLICE!"
16     echo "Please send mail to vini-users@lists.planet-lab.org."
17     exit 1
18 fi
19
20 LINK=${KEY}if${INDEX}
21
22 modprobe ip_gre
23 modprobe etun
24
25 ### Setup EGRE tunnel
26 EGRE=d$LINK
27 $IP tunnel add $EGRE  mode gre/eth remote $REMOTE key $KEY ttl 64
28 $IP link set $EGRE up
29
30 ### Setup etun
31 ETUN0=a$LINK
32 ETUN1=b$LINK
33 echo $ETUN0,$ETUN1 > /sys/module/etun/parameters/newif
34 ifconfig $ETUN0 mtu 1458 up
35 ifconfig $ETUN1 up
36
37 ### Setup bridge
38 BRIDGE=c$LINK
39 brctl addbr $BRIDGE
40 brctl addif $BRIDGE $EGRE 
41 brctl addif $BRIDGE $ETUN1
42 ifconfig $BRIDGE up
43
44 ### Setup iptables so that packets are visible in the vserver
45 iptables -t mangle -A FORWARD -o $BRIDGE -j MARK --set-mark $SLICEID
46
47 ### Create "grab link" script
48 GRAB=/vsys/local_grab-$ETUN0
49 echo $SLICE > $GRAB.acl 
50 rm -f $GRAB
51 cat > $GRAB <<EOF
52 #!/bin/sh
53
54 read PID
55
56 chcontext --ctx 1 -- echo \$PID > /sys/class/net/$ETUN0/new_ns_pid 
57 EOF
58 chmod +x $GRAB
59
60 ### Create script for setting link rate
61 BIND=/vsys/local_rate-$ETUN0
62 echo $SLICE > $BIND.acl 
63 rm -f $BIND
64 cat > $BIND <<EOF
65 #!/bin/sh
66
67 read rt
68
69 tc qdisc add dev $EGRE root handle 1: htb default 10
70 tc class add dev $EGRE parent 1: classid 1:10 htb rate \$rt ceil \$rt
71
72 rm -rf $BIND.acl 
73 touch $BIND.acl 
74
75 EOF
76 chmod +x $BIND
77
78 ### Create "delete link" script
79 DELETE=/vsys/local_delete-$ETUN0
80 echo $SLICE > $DELETE.acl 
81 rm -f $DELETE
82 cat > $DELETE <<EOF
83 #!/bin/sh
84
85 read NULL
86
87 # Remove iptables rule
88 iptables -t mangle -D FORWARD -o $BRIDGE -j MARK --set-mark $SLICEID
89
90 # Get rid of etun devices, only need name of one of them
91 echo $ETUN1 > /sys/module/etun/parameters/delif
92
93 # Get rid of bridge
94 ifconfig $BRIDGE down
95 brctl delbr $BRIDGE
96
97 # Get rid of EGRE tunnel
98 ip tunnel del $EGRE
99
100 # Clean up files
101 rm -f $GRAB $GRAB.acl
102 rm -f $DELETE $DELETE.acl
103 rm -f $BIND $BIND.acl
104 EOF
105 chmod +x $DELETE