a6ac6701c45ed943c98a4ab27723e772685c5f39
[snf-network] / snf-network-reconfigure
1 #!/bin/bash
2
3 source /etc/default/snf-network
4
5 source $CONF
6
7 if [ $# -ne 1 ]; then 
8   echo Usage: $0 add/remove
9   exit 1
10 fi
11
12
13 ACTION=$1
14 NETWORKS="$(ls $SHAREDDIR/networks/)"
15
16 HOSTNAME=$(hostname)
17
18 if [ "$ACTION" == "add" ]; then
19   snf-network-configure-interfaces
20 fi
21
22 for NETWORK in $NETWORKS; do
23
24 NETFILE=$SHAREDDIR/networks/$NETWORK
25 NODEMAPFILE=$SHAREDDIR/mappings/$NETWORK-$HOSTNAME
26 NODEINFRAFILE=$SHAREDDIR/infra/$HOSTNAME
27
28 RT_TABLES=/etc/iproute2/rt_tables
29
30 source $NODEINFRAFILE
31 source $NETFILE
32 source $NODEMAPFILE
33
34
35
36 if [ "$ACTION" == "add" ]; then
37   if [ "$MODE" == "routed" ]; then 
38     VLAN=$LINK
39     TABLE=rt_$NETWORK
40     if [ "$TYPE" == "public" ]; then
41       ARP_IP=$(ipcalc $SUBNET | grep HostMax | awk '{print $2}')
42       
43       ip link set $VLAN up
44
45       echo 1 > "/proc/sys/net/ipv4/conf/$VLAN/proxy_arp"
46
47       ID=$(wc -l < $RT_TABLES)
48       echo $((ID+1)) $TABLE >> $RT_TABLES
49
50       ip rule add iif $VLAN table $TABLE
51
52       ip route add $SUBNET dev $VLAN table main 
53
54       ip route add $SUBNET dev $VLAN table $TABLE
55       ip route add default via $GATEWAY dev $VLAN table $TABLE
56       
57       echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
58
59       arptables -A OUTPUT -o $VLAN --opcode request -j mangle --mangle-ip-s  $ARP_IP 
60     fi
61   fi
62
63
64
65   if [ "$MODE" == "bridged" ]; then
66     BRIDGE=$LINK
67     if [ ! -z "$GATEWAY" ]; then
68       if [ "$TYPE" == "private" ]; then 
69         if [ "$HOSTNAME" == "$ROUTER" ]; then
70           NETMASK=$(ipcalc $SUBNET | grep Netmask | awk '{print $4}')
71           ip addr add $GATEWAY/$NETMASK dev $BRIDGE
72           iptables -t nat -A POSTROUTING -s $SUBNET \! -d 192.168.0.0/16 -j MASQUERADE
73         fi  
74       fi
75     fi
76   fi
77   
78 elif [ "$ACTION" == "remove" ]; then
79   if [ ! -e "$NODEMAPFILE" ]; then
80     exit 0;
81   fi
82
83   source $NODEMAPFILE
84
85   if [ "$MODE" == "routed" ]; then 
86     VLAN=$LINK
87     TABLE=rt_$NETWORK
88     if [ "$TYPE" == "public" ]; then
89       ARP_IP=$(ipcalc $SUBNET | grep HostMax | awk '{print $2}')
90     
91       arptables -D OUTPUT -o $VLAN --opcode request -j mangle --mangle-ip-s  $ARP_IP 
92
93       ip route del default via $GATEWAY dev $VLAN table $TABLE
94       ip route del $SUBNET dev $VLAN table $TABLE
95
96       ip route del $SUBNET dev $VLAN table main 
97
98       ip rule del iif $VLAN table $TABLE
99       
100       sed -i 's/.*'"$TABLE"'$//' $RT_TABLES
101     fi
102   fi
103
104
105
106   if [ "$MODE" == "bridged" ]; then
107     BRIDGE=$LINK
108     if [ ! -z "$GATEWAY" ]; then
109       if [ "$TYPE" == "private" ]; then 
110         if [ "$HOSTNAME" == "$ROUTER" ]; then
111           NETMASK=$(ipcalc $SUBNET | grep Netmask | awk '{print $4}')
112           ip addr del $GATEWAY/$NETMASK dev $BRIDGE
113           iptables -t nat -D POSTROUTING -s $SUBNET \! -d 192.168.0.0/16 -j MASQUERADE
114         fi  
115       fi
116     fi
117   fi
118   
119
120 fi
121
122 done
123
124 if [ "$ACTION" == "remove" ]; then
125   snf-network-unconfigure-interfaces
126 fi