Undo change to tag, commit to trunk instead
[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 read KEY
10
11 LINK=${KEY}if${INDEX}
12
13 modprobe ip_gre
14 modprobe etun
15
16 ### Setup EGRE tunnel
17 EGRE=d$LINK
18 $IP tunnel add $EGRE  mode gre/eth remote $REMOTE key $KEY
19 $IP link set $EGRE up
20
21 ### Setup etun
22 ETUN0=a$LINK
23 ETUN1=b$LINK
24 echo $ETUN0,$ETUN1 > /sys/module/etun/parameters/newif
25 ifconfig $ETUN0 mtu 1458 up
26 ifconfig $ETUN1 up
27
28 ### Setup bridge
29 BRIDGE=c$LINK
30 brctl addbr $BRIDGE
31 brctl addif $BRIDGE $EGRE 
32 brctl addif $BRIDGE $ETUN1
33 ifconfig $BRIDGE up
34
35 ### Setup iptables so that packets are visible in the vserver
36 iptables -t mangle -A FORWARD -o $BRIDGE -j MARK --set-mark $SLICEID
37
38 ### Create "grab link" script
39 GRAB=/vsys/local_grab-$ETUN0
40 echo $SLICE > $GRAB.acl 
41 rm -f $GRAB
42 cat > $GRAB <<EOF
43 #!/bin/sh
44
45 read PID
46
47 chcontext --ctx 1 -- echo \$PID > /sys/class/net/$ETUN0/new_ns_pid 
48 EOF
49 chmod +x $GRAB
50
51 ### Create script for setting link rate
52 BIND=/vsys/local_rate-$ETUN0
53 echo $SLICE > $BIND.acl 
54 rm -f $BIND
55 cat > $BIND <<EOF
56 #!/bin/sh
57
58 read rt
59
60 tc qdisc add dev $EGRE root handle 1: htb default 10
61 tc class add dev $EGRE parent 1: classid 1:10 htb rate \$rt ceil \$rt
62
63 rm -rf $BIND.acl 
64 touch $BIND.acl 
65
66 EOF
67 chmod +x $BIND
68
69 ### Create "delete link" script
70 DELETE=/vsys/local_delete-$ETUN0
71 echo $SLICE > $DELETE.acl 
72 rm -f $DELETE
73 cat > $DELETE <<EOF
74 #!/bin/sh
75
76 read NULL
77
78 # Remove iptables rule
79 iptables -t mangle -D FORWARD -o $BRIDGE -j MARK --set-mark $SLICEID
80
81 # Get rid of etun devices, only need name of one of them
82 echo $ETUN1 > /sys/module/etun/parameters/delif
83
84 # Get rid of bridge
85 ifconfig $BRIDGE down
86 brctl delbr $BRIDGE
87
88 # Get rid of EGRE tunnel
89 ip tunnel del $EGRE
90
91 # Clean up files
92 rm -f $GRAB $GRAB.acl
93 rm -f $DELETE $DELETE.acl
94 rm -f $BIND $BIND.acl
95 EOF
96 chmod +x $DELETE