Statistics
| Branch: | Tag: | Revision:

root / hooks / group-modify-post.d / snf-network @ d2b16e51

History | View | Annotate | Download (2.8 kB)

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