Revision 2e8a73e0

b/clear-proxy-ndp
7 7
host=$(hostname)
8 8
domain=$(hostname -d)
9 9

  
10
echo `date` > /home/dimara/asdfadsf
11 10

  
12
if [ "$GANETI_INSTANCE_PRIMARY" == "$host.$domain" ]; then
13

  
14
  source /etc/default/snf-network
15

  
16
  source $CONF
11
if [ "$GANETI_INSTANCE_PRIMARY" = "$host.$domain" ]; then
17 12

  
18 13
  NETWORK=$GANETI_INSTANCE_NIC0_NETWORK
14
  NETWORK_TYPE=$GANETI_INSTANCE_NIC0_NETWORK_TYPE
19 15
  MODE=$GANETI_INSTANCE_NIC0_MODE
20 16
  LINK=$GANETI_INSTANCE_NIC0_LINK
21 17
  MAC=$GANETI_INSTANCE_NIC0_MAC
22
  SUBNET6=$INSTANCE_NIC0_NETWORK_SUBNET6
18
  SUBNET6=$GANETI_INSTANCE_NIC0_NETWORK_SUBNET6
23 19
  
24
  source $SHAREDDIR/infra/$host
25

  
26
  if [ "$MODE" == "routed" ] ; then
20
  if [ "$MODE" = "routed" -a "$NETWORK_TYPE" = "public" ] ; then
27 21
      EUI64=$($MAC2EUI64 $MAC $SUBNET6 2>/dev/null)
28
      echo $EUI64 >> /home/dimara/asdfadsf
29

  
30 22
      ip -6 neigh del proxy $EUI64 dev $PUBLIC_VLAN >/dev/null 2>&1
31 23
  fi
32

  
33
  echo $GANETI_INSTANCE_PRIMARY >> /home/dimara/asdfadsf
34 24
fi
25

  
26
echo done
/dev/null
1
NODEGROUPS="default"
2

  
3
NODES="dev88"
b/conf/infra.conf
2 2
# iface where all tap will be bridged
3 3
PUBLIC_BRIDGE=
4 4

  
5
# brigde prefix used for private networks
6
BRIDGE_PREFIX=prv
5 7
# GRNET specific configuration 
6 8
# one vlan for IP less/proxy ARP routing of public IPs 
7 9
PUBLIC_VLAN_ID=201
8
# one vlan for private lans
10

  
11
# one vlan for bridging private lans with ebtables for filtering
12
#PRIVATE_BRIDGE_ID=2990
9 13
PRIVATE_VLAN_ID=2990
10
PRIVATE_BRIDGE=br2990
11 14

  
12 15
# in case of private lans mac prefix is used for isolation
13 16
MAC_MASK=ff:ff:ff:0:0:0
14 17

  
15
# whether ganeti nodes will do masquerading for private networks
16
ENABLE_MASQ=false
18
# one bridge per vlan for expensive private networks
19
#PRIVATE_BRIDGE_ID_RANGE=`seq 2991 2999`
20
PRIVATE_VLAN_ID_OFFSET=2990
21
PRIVATE_VLAN_ID_MIN=1
22
PRIVATE_VLAN_ID_MAX=5
b/conf/snf-network.conf
1
SHAREDDIR=/home/dimara/snf-network
2 1
STATE_DIR=/var/lib/snf-network
2

  
3
ENABLE_MASQ=false
4

  
5
ENABLE_EBTABLES=true
b/hooks/cluster-init-post.d/snf-network
2 2
# This script run in master-node after cluster init
3 3
# Propably should run after master failover
4 4

  
5
source /etc/default/snf-network
6

  
7
source $CONF
8
source $INFRA
9

  
10
MASTERNODE=$(hostname)
11

  
12
CLUSTERINFRA=$SHAREDDIR/infra/cluster
13

  
14
#build subdirs in shared dir
15
snf-network-enable
16

  
17

  
18
cp $INFRA $CLUSTERINFRA
19

  
20
if $ENABLE_MASQ; then
21
  PUBLIC_IFACE=$(ip route | grep default | awk '{print $5}')
22
  PUBLIC_MAC=$(ip link show $PUBLIC_IFACE | grep link/ether | awk '{print $2}')
23

  
24
  echo ROUTER=$MASTERNODE >> $CLUSTERINFRA
25
  echo ROUTER_MAC=$PUBLIC_MAC >> $CLUSTERINFRA
26
fi
27

  
28 5
snf-network-build-node-infra
29 6

  
30 7
snf-network-configure-interfaces
/dev/null
1
#!/bin/bash
2

  
3
DEFAULT=/etc/default/snf-network
4

  
5
source $DEFAULT
6

  
7
source $CONF
8

  
9
NETWORK=$GANETI_NETWORK_NAME
10

  
11

  
12
NETFILE=$SHAREDDIR/networks/$NETWORK
13

  
14

  
15
cat > $NETFILE <<EOF
16
NETWORK=$GANETI_NETWORK_NAME
17
SUBNET=$GANETI_NETWORK_SUBNET
18
GATEWAY=$GANETI_NETWORK_GATEWAY
19

  
20
SUBNET6=$GANETI_NETWORK_SUBNET6
21
GATEWAY6=$GANETI_NETWORK_GATEWAY6
22

  
23
MAC_PREFIX=$GANETI_NETWORK_MAC_PREFIX
24

  
25
TYPE=$GANETI_NETWORK_TYPE
26
EOF
27

  
28
sed -i 's/None//' $NETFILE
b/hooks/network-connect-post.d/snf-network
4 4

  
5 5
source $CONF
6 6

  
7
GROUP=$GANETI_GROUP_NAME
7
INFRA=$STATE_DIR/infra
8

  
9
source $INFRA
10

  
8 11
NETWORK=$GANETI_GROUP_NETWORK_NAME
9 12
MODE=$GANETI_GROUP_NETWORK_MODE
10 13
LINK=$GANETI_GROUP_NETWORK_LINK
11 14

  
12
HOSTNAME=$(hostname)
15
snf-network-get-network-env
13 16

  
14
NETFILE=$SHAREDDIR/networks/$NETWORK
15
NODEMAPFILE=$SHAREDDIR/mappings/$NETWORK-$HOSTNAME
16
NODEINFRAFILE=$SHAREDDIR/infra/$HOSTNAME
17 17

  
18
RT_TABLES=/etc/iproute2/rt_tables
18
if [ "$MODE" = "routed" -a "$TYPE" = "public" ]; then
19 19

  
20
  snf-network-ipless-routing-on
20 21

  
21
if [ -e $NODEMAPFILE ]; then
22
  exit 0
23 22
fi
24 23

  
25 24

  
26
cat > $NODEMAPFILE <<EOF
27
MODE=$MODE
28
LINK=$LINK
29
EOF
30

  
31

  
32
source $NODEINFRAFILE
33
source $NETFILE
34

  
35
if [ "$MODE" == "routed" ]; then 
36
  TABLE=rt_$NETWORK
37
  if [ "$TYPE" == "public" ]; then
38
    VLAN=$PUBLIC_VLAN
39
    ARP_IP=$(ipcalc $SUBNET | grep HostMax | awk '{print $2}')
40
    
41
    ip link set $VLAN up
42

  
43
    echo 1 > "/proc/sys/net/ipv4/conf/$VLAN/proxy_arp"
44

  
45
    ID=$(wc -l < $RT_TABLES)
46
    echo $((ID+1)) $TABLE >> $RT_TABLES
47

  
48
    if [ -n "$SUBNET" ]; then
49
      ip rule add iif $VLAN table $TABLE
25
if [ -a $ENABLE_MASQ \
26
     -a -n "$GATEWAY" -a "$MODE" = "bridged" -a "$TYPE" = "private" ]; then
50 27

  
51
      ip route add $SUBNET dev $VLAN table main 
28
  snf-network-masq-on
52 29

  
53
      ip route add $SUBNET dev $VLAN table $TABLE
54
      if [ -n "$GATEWAY" ]; then
55
        ip route add default via $GATEWAY dev $VLAN table $TABLE
56
      fi
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

  
62
    if [ -n "$SUBNET6" ]; then
63
      ip -6 rule add iif $VLAN table $TABLE
64
      ip -6 route add $SUBNET6 dev $VLAN table main
65
      ip -6 route add $SUBNET6 dev $VLAN table $TABLE
66
      if [ -n "$GATEWAY6" ]; then
67
        ip -6 route add default via $GATEWAY6 dev $VLAN table $TABLE
68
      fi
69
      echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
70
      echo 1 > /proc/sys/net/ipv6/conf/$VLAN/proxy_ndp
71
    fi
72
  fi
73 30
fi
74

  
75

  
76

  
77
if [ "$MODE" == "bridged" ]; then
78
  BRIDGE=$LINK
79
  if [ ! -z "$GATEWAY" -a $ENABLE_MASQ ]; then
80
    if [ "$TYPE" == "private" ]; then 
81
      if [ "$HOSTNAME" == "$ROUTER" ]; then
82
        NETMASK=$(ipcalc $SUBNET | grep Netmask | awk '{print $4}')
83
        ip addr add $GATEWAY/$NETMASK dev $BRIDGE
84
        iptables -t nat -A POSTROUTING -s $SUBNET \! -d 192.168.0.0/16 -j MASQUERADE
85
      fi  
86
    fi
87
  fi
88
fi
89

  
b/hooks/network-disconnect-post.d/snf-network
4 4

  
5 5
source $CONF
6 6

  
7
INFRA=$STATE_DIR/infra
8

  
9
source $INFRA
10

  
7 11
NETWORK=$GANETI_GROUP_NETWORK_NAME
8 12
MODE=$GANETI_GROUP_NETWORK_MODE
9 13
LINK=$GANETI_GROUP_NETWORK_LINK
10 14

  
11
HOSTNAME=$(hostname)
15
snf-network-get-network-env
12 16

  
13
NETFILE=$SHAREDDIR/networks/$NETWORK
14
NODEMAPFILE=$SHAREDDIR/mappings/$NETWORK-$HOSTNAME
15
NODEINFRAFILE=$SHAREDDIR/infra/$HOSTNAME
16
CLUSTERINFRAFILE=$SHAREDDIR/infra/cluster
17 17

  
18
RT_TABLES=/etc/iproute2/rt_tables
18
if [ "$MODE" = "routed" -a "$TYPE" = "public" ]; then
19 19

  
20
  snf-network-ipless-routing-off
20 21

  
21
if [ ! -e $NODEMAPFILE ]; then
22
  exit 0
23 22
fi
24 23

  
25
source $NODEINFRAFILE
26
source $CLUSTERINFRAFILE
27
source $NETFILE
28
source $NODEMAPFILE
29

  
30
if [ "$MODE" == "routed" ]; then 
31
  TABLE=rt_$NETWORK
32
  if [ "$TYPE" == "public" ]; then
33
    VLAN=$PUBLIC_VLAN
34
    ARP_IP=$(ipcalc $SUBNET | grep HostMax | awk '{print $2}')
35
  
36
    if [ -n "$SUBNET" ]; then
37
      arptables -D OUTPUT -o $VLAN --opcode request -j mangle --mangle-ip-s  $ARP_IP 
38
      if [ -n "$GATEWAY" ]; then  
39
        ip route del default via $GATEWAY dev $VLAN table $TABLE
40
      fi
41

  
42
      ip route del $SUBNET dev $VLAN table $TABLE
43 24

  
44
      ip route del $SUBNET dev $VLAN table main 
45

  
46
      ip rule del iif $VLAN table $TABLE
47
    fi
48
    if [ -n "$SUBNET6" ]; then
49
      if [ -n "$GATEWAY6" ]; then
50
        ip -6 route del default via $GATEWAY6 dev $VLAN table $TABLE
51
      fi
52
      ip -6 route add $SUBNET6 dev $VLAN table $TABLE
53
      ip -6 route add $SUBNET6 dev $VLAN table main
54
      ip -6 rule add iff $VLAN table $TABLE
55
    fi
56
    sed -i 's/.*'"$TABLE"'$//' $RT_TABLES
57
    
58
  fi
59
fi
25
if [ -a $ENABLE_MASQ \
26
     -a -n "$GATEWAY" -a "$MODE" = "bridged" -a "$TYPE" = "private" ]; then
60 27

  
28
  snf-network-masq-off
61 29

  
62

  
63
if [ "$MODE" == "bridged" ]; then
64
  BRIDGE=$LINK
65
  if [ ! -z "$GATEWAY" -a $ENABLE_MASQ]; then
66
    if [ "$TYPE" == "private" ]; then 
67
      if [ "$HOSTNAME" == "$ROUTER" ]; then
68
        NETMASK=$(ipcalc $SUBNET | grep Netmask | awk '{print $4}')
69
        ip addr del $GATEWAY/$NETMASK dev $BRIDGE
70
        iptables -t nat -D POSTROUTING -s $SUBNET \! -d 192.168.0.0/16 -j MASQUERADE
71
      fi  
72
    fi
73
  fi
74 30
fi
75

  
76
rm $NODEMAPFILE
/dev/null
1
#!/bin/bash
2

  
3
DEFAULT=/etc/default/snf-network
4

  
5
source $DEFAULT 
6

  
7
source $CONF
8

  
9
NETWORK=$GANETI_NETWORK_NAME
10

  
11
NETFILE=$SHAREDDIR/networks/$NETWORK
12

  
13
if [ -e "$NETFILE" ]; then
14
  rm $NETFILE
15
fi
b/hooks/node-add-post.d/snf-network
4 4

  
5 5
source $CONF
6 6

  
7

  
8 7
NODE=$GANETI_NODE_NAME
9 8

  
10 9
HOSTNAME=$(hostname)
11 10

  
12
if [ "$HOSTNAME" != "$NODE" ]; then
13
  exit 0
14
fi
15

  
16

  
17
snf-network-build-node-infra
18

  
19
snf-network-configure-interfaces
11
if [ "$HOSTNAME" = "$NODE" ]; then
12
  snf-network-build-node-infra
20 13

  
14
  snf-network-configure-interfaces
15
fi
b/kvm-vif-bridge
117 117
  ebtables -A FORWARD -o $TAP -j $TO
118 118
  #accept dhcp responses from host (nfdhcpd)
119 119
  ebtables -A $TO -p ipv4 --ip-protocol=udp  --ip-destination-port=68 -j ACCEPT
120
  if [ "$TYPE" == "private" ]; then
121
    if [ ! -z "$GATEWAY" -a $ENABLE_MASQ ]; then
122
      # allow packets from/to router (for masquerading
123
      ebtables -A $TO -s $ROUTER_MAC -j ACCEPT
124
      ebtables -A INPUT -i $TAP -j $FROM
125
      ebtables -A OUTPUT -o $TAP -j $TO
126
    fi
127
    # allow only packets from the same mac prefix
128
    ebtables -A $TO -s \! $MAC/$MAC_MASK -j DROP
120
  # allow only packets from the same mac prefix
121
  ebtables -A $TO -s \! $MAC/$MAC_MASK -j DROP
122
  if [ $ENABLE_MASQ -a -n "$GATEWAY" ]; then
123
    # allow packets from/to router (for masquerading)
124
    ebtables -A $TO -s $PUBLIC_MAC -j ACCEPT
125
    ebtables -A INPUT -i $TAP -j $FROM
126
    ebtables -A OUTPUT -o $TAP -j $TO
129 127
  fi
130 128
}
131 129

  
......
156 154
source $DEFAULT
157 155
source $CONF
158 156

  
159
NODEINFRAFILE=$SHAREDDIR/infra/$(hostname)
157
INFRA=$STATE_DIR/infra
160 158

  
161
if [ -e "$NODEINFRAFILE" ]; then
162
  source $NODEINFRAFILE
163
fi
164

  
165
CLUSTERINFRAFILE=$SHAREDDIR/infra/cluster
159
source $INFRA
166 160

  
167
if [ -e "$CLUSTERINFRAFILE" ]; then
168
  source $CLUSTERINFRAFILE
169
fi
170 161

  
171
TABLE=rt_$NETWORK
172 162
clear_routed_setup_ipv4 > /dev/null 2>&1
173 163
clear_routed_setup_ipv6 > /dev/null 2>&1
174 164
clear_routed_setup_firewall > /dev/null 2>&1
175 165
clear_ebtables > /dev/null 2>&1
176 166

  
177 167
if [ "$MODE" = "routed" ]; then
168
  TABLE=$LINK
178 169
	# use a constant predefined MAC address for the tap
179 170
	ip link set $INTERFACE addr $TAP_CONSTANT_MAC
180 171
	# bring the tap up
......
191 182
	ifconfig $INTERFACE 0.0.0.0 up
192 183
	brctl addif $BRIDGE $INTERFACE
193 184
	setup_nfdhcpd $BRIDGE
194
  setup_ebtables > /dev/null 2>&1
185
  if [ $ENABLE_EBTABLES -a "$TYPE" = "private" ]; then
186
    setup_ebtables > /dev/null 2>&1
187
  fi
195 188
fi
b/snf-network-build-node-infra
6 6
source $CONF
7 7
source $INFRA
8 8

  
9
HOSTNAME=$(hostname)
10

  
11
HOSTINFRA=$SHAREDDIR/infra/$HOSTNAME
12
CLUSTERINFRA=$SHAREDDIR/infra/cluster
9
HOSTINFRA=$STATE_DIR/infra
13 10

  
14 11
PUBLIC_IFACE=$(ip route | grep default | awk '{print $5}')
15 12
PUBLIC_MAC=$(ip link show $PUBLIC_IFACE | grep link/ether | awk '{print $2}')
16 13

  
17
echo PUBLIC_IFACE=$PUBLIC_IFACE > $HOSTINFRA
18
echo PUBLIC_MAC=$PUBLIC_MAC >> $HOSTINFRA
14
cp $INFRA $HOSTINFRA
19 15

  
20
source $CLUSTERINFRA
16
echo >> $HOSTINFRA
17
echo "# node's public interface" >> $HOSTINFRA
18
echo PUBLIC_IFACE=$PUBLIC_IFACE >> $HOSTINFRA
19

  
20
echo >> $HOSTINFRA
21
echo "# node's public interface MAC" >> $HOSTINFRA
22
echo PUBLIC_MAC=$PUBLIC_MAC >> $HOSTINFRA
21 23

  
22
if [ -n "$PUBLIC_VLAN_ID" ]; then
24
if [ -n $PUBLIC_VLAN_ID ]; then
23 25
  PUBLIC_VLAN=$PUBLIC_IFACE.$PUBLIC_VLAN_ID
26
  echo >> $HOSTINFRA
24 27
  echo PUBLIC_VLAN=$PUBLIC_VLAN >> $HOSTINFRA
25 28
fi
26 29

  
27
if [ -n "$PRIVATE_VLAN_ID" ]; then
30
if [ -n $PRIVATE_VLAN_ID ]; then
28 31
  PRIVATE_VLAN=$PUBLIC_IFACE.$PRIVATE_VLAN_ID
32
  echo >> $HOSTINFRA
29 33
  echo PRIVATE_VLAN=$PRIVATE_VLAN >> $HOSTINFRA
34
  PRIVATE_BRIDGE=$BRIDGE_PREFIX$PRIVATE_VLAN_ID
35
  echo >> $HOSTINFRA
36
  echo PRIVATE_BRIDGE=$PRIVATE_BRIDGE >> $HOSTINFRA
30 37
fi
31 38

  
b/snf-network-configure-interfaces
9 9
HOSTNAME=$(hostname)
10 10

  
11 11

  
12
INTERFACES=$SHAREDDIR/interfaces/$HOSTNAME
13
HOSTINFRA=$SHAREDDIR/infra/$HOSTNAME
14
CLUSTERINFRA=$SHAREDDIR/infra/cluster
12
INTERFACES=$STATE_DIR/interfaces
13
HOSTINFRA=$STATE_DIR/infra
15 14

  
16
if [ -e "$HOSTINFRA" ]; then
17
  source $HOSTINFRA
15
if [ ! -a $HOSTFILE ]; then 
16
  echo "A host infra file must exist" 
17
  echo "Run snf-network-build-host-infra"
18
  exit 1
18 19
fi
19 20

  
20
source $CLUSTERINFRA
21
source $HOSTINFRA
21 22

  
22
if [ -n "$PUBLIC_BRIDGE" -a -e /proc/sys/net/ipv4/conf/$PUBLIC_BRIDGE ]; then 
23
  echo Interfaces already exist! Please check: 
24
  echo $PUBLIC_BRIDGE for bridging TAPs with public IPs
25
  exit 1
26
elif [ -n "$PUBLIC_VLAN" -a -e /proc/sys/net/ipv4/conf/$PUBLIC_VLAN -o \
27
       -n "$PRIVATE_BRIDGE" -a -e /proc/sys/net/ipv4/conf/$PRIVATE_BRIDGE -o \
28
       -n "$PRIVATE_VLAN" -a -e /proc/sys/net/ipv4/conf/$PRIVATE_VLAN ]; then
29
  echo Interfaces already exist! Please check: 
30
  echo $PUBLIC_BRIDGE for bridging TAPs with public IPs
31
  echo $PUBLIC_VLAN for routing TAPs with public IPs
32
  echo $PRIVATE_VLAN  bridged on $PRIVATE_BRIDGE for private LANs
33
  exit 1
34
fi
23
DONOTIFUP=false
35 24

  
25
check_iface(){
36 26

  
27
  if [ -n "$1" -a -e /proc/sys/net/ipv4/conf/$1 ]; then 
28
    echo Interface $1 already exist! Please check
29
    export DONOTIFUP=true
30
  fi
31
}
32

  
33

  
34
check_iface "$PUBLIC_BRIDGE"
35
check_iface "$PUBLIC_IFACE.$PUBLIC_VLAN_ID"
36
check_iface "$PUBLIC_IFACE.$PRIVATE_VLAN_ID"
37
check_iface "$BRIDGE_PREFIX$PRIVATE_VLAN_ID"
38

  
39
if [ -n "$PRIVATE_VLAN_ID_OFFSET" ]; then
40
  for id in `seq $PRIVATE_VLAN_ID_MIN 1 $PRIVATE_VLAN_ID_MAX`; do
41
    check_iface $BRIDGE_PREFIX$((PRIVATE_VLAN_ID_OFFSET+id))
42
    check_iface $PUBLIC_IFACE.$((PRIVATE_VLAN_ID_OFFSET+id))
43
  done
44
fi
37 45

  
38 46
if [ -n "$PUBLIC_BRIDGE" -a -n "$PUBLIC_IFACE" ]; then
39 47
  cat > $INTERFACES<<EOF
......
48 56

  
49 57
else
50 58
  if [ -n "$PUBLIC_VLAN" ]; then
51
    echo PUBLIC_VLAN=$PUBLIC_VLAN >> $HOSTINFRA
52
    cat >> $INTERFACES<<EOF
59
    cat > $INTERFACES<<EOF
53 60
auto $PUBLIC_VLAN
54 61
iface $PUBLIC_VLAN inet manual
55 62

  
......
57 64
  fi
58 65

  
59 66
  if [ -n "$PRIVATE_VLAN" -a -n "$PRIVATE_BRIDGE" ]; then
60
    echo PRIVATE_VLAN=$PRIVATE_VLAN >> $HOSTINFRA
61 67
    cat >> $INTERFACES<<EOF
62 68
auto $PRIVATE_VLAN
63 69
iface $PRIVATE_VLAN inet manual
......
70 76
  post-up ip link set $PRIVATE_BRIDGE address $PUBLIC_MAC 
71 77

  
72 78
EOF
79
  fi
80

  
81
  if [ -n "$PRIVATE_VLAN_ID_OFFSET" ]; then
82
     HELPER="$PRIVATE_VLAN_ID_MIN $PRIVATE_VLAN_ID_MAX $PRIVATE_VLAN_ID_OFFSET"
83
     cat >> $INTERFACES<<EOF
84
auto prv
85
iface prv inet manual
86
    up   prv-net-helper up   $PUBLIC_IFACE $HELPER $BRIDGE_PREFIX
87
    down prv-net-helper down $PUBLIC_IFACE $HELPER $BRIDGE_PREFIX
73 88

  
89
EOF
74 90
  fi
91
    
75 92
fi
76 93

  
77
ifup -i $INTERFACES -a
78 94

  
95
if $DONOTIFUP; then
96
  echo Check interfaces:
97
  cat $INTERFACES
98
  exit 1
99
fi
79 100

  
80 101
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
102
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
81 103
echo 1 > /proc/sys/net/ipv4/ip_forward
104

  
105
ifup -i $INTERFACES -a
/dev/null
1
#!/bin/bash
2

  
3
DEFAULT=/etc/default/snf-network
4

  
5
source $DEFAULT
6
source $CONF
7

  
8

  
9
if [ ! -e "$SHAREDDIR" ]; then
10
  mkdir $SHAREDDIR
11
  mkdir $SHAREDDIR/networks
12
  mkdir $SHAREDDIR/infra
13
  mkdir $SHAREDDIR/interfaces
14
  mkdir $SHAREDDIR/mappings
15
fi
16

  
b/snf-network-get-network-env
1
#!/bin/bash
2

  
3

  
4
export NETWORK=$GANETI_NETWORK_NAME
5
export SUBNET=$GANETI_NETWORK_SUBNET
6
export GATEWAY=$GANETI_NETWORK_GATEWAY
7

  
8
export SUBNET6=$GANETI_NETWORK_SUBNET6
9
export GATEWAY6=$GANETI_NETWORK_GATEWAY6
10

  
11
export MAC_PREFIX=$GANETI_NETWORK_MAC_PREFIX
12

  
13
export TYPE=$GANETI_NETWORK_TYPE
b/snf-network-ipless-routing-off
1
#!/bin/bash
2

  
3
source /etc/default/snf-network
4

  
5
source $CONF
6

  
7
RT_TABLES=/etc/iproute2/rt_tables
8

  
9
TABLE=$LINK
10
VLAN=$PUBLIC_VLAN
11
ARP_IP=$(ipcalc $SUBNET | grep HostMax | awk '{print $2}')
12

  
13
ip link set $VLAN up
14

  
15
if [ -n "$SUBNET" ]; then
16
  arptables -D OUTPUT -o $VLAN --opcode request -j mangle --mangle-ip-s $ARP_IP 
17
  if [ -n "$GATEWAY" ]; then  
18
    ip route del default via $GATEWAY dev $VLAN table $TABLE
19
  fi
20
  ip route del $SUBNET dev $VLAN table $TABLE
21
  ip route del $SUBNET dev $VLAN table main 
22
  ip rule del iif $VLAN table $TABLE
23
fi
24

  
25
if [ -n "$SUBNET6" ]; then
26
  if [ -n "$GATEWAY6" ]; then
27
    ip -6 route del default via $GATEWAY6 dev $VLAN table $TABLE
28
  fi
29
  ip -6 route add $SUBNET6 dev $VLAN table $TABLE
30
  ip -6 route add $SUBNET6 dev $VLAN table main
31
  ip -6 rule add iif $VLAN table $TABLE
32
fi
33

  
34
sed -i 's/.*'"$TABLE"'$//' $RT_TABLES
35

  
b/snf-network-ipless-routing-on
1
#!/bin/bash
2

  
3
source /etc/default/snf-network
4

  
5
source $CONF
6

  
7
RT_TABLES=/etc/iproute2/rt_tables
8

  
9
TABLE=$LINK
10
VLAN=$PUBLIC_VLAN
11
ARP_IP=$(ipcalc $SUBNET | grep HostMax | awk '{print $2}')
12

  
13
ip link set $VLAN up
14

  
15

  
16
ID=$(wc -l < $RT_TABLES)
17
echo $((ID+1)) $TABLE >> $RT_TABLES
18

  
19
if [ -n "$SUBNET" ]; then
20
  ip rule add iif $VLAN table $TABLE
21
  ip route add $SUBNET dev $VLAN table main 
22
  ip route add $SUBNET dev $VLAN table $TABLE
23
  if [ -n "$GATEWAY" ]; then
24
    ip route add default via $GATEWAY dev $VLAN table $TABLE
25
  fi
26
  arptables -A OUTPUT -o $VLAN --opcode request -j mangle --mangle-ip-s $ARP_IP 
27
  echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
28
  echo 1 > /proc/sys/net/ipv4/conf/$VLAN/proxy_arp
29
fi
30

  
31
if [ -n "$SUBNET6" ]; then
32
  ip -6 rule add iif $VLAN table $TABLE
33
  ip -6 route add $SUBNET6 dev $VLAN table main
34
  ip -6 route add $SUBNET6 dev $VLAN table $TABLE
35
  if [ -n "$GATEWAY6" ]; then
36
    ip -6 route add default via $GATEWAY6 dev $VLAN table $TABLE
37
  fi
38
  echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
39
  echo 1 > /proc/sys/net/ipv6/conf/$VLAN/proxy_ndp
40
fi
b/snf-network-masq-off
1
#!/bin/bash
2

  
3
source /etc/default/snf-network
4

  
5
source $CONF
6

  
7
INFRA=$STATE_DIR/infra
8

  
9
NETMASK=$(ipcalc $SUBNET | grep Netmask | awk '{print $4}')
10
ip addr del $GATEWAY/$NETMASK dev $BRIDGE
11
iptables -t nat -D POSTROUTING -s $SUBNET \! -d $SUBNET -j MASQUERADE
b/snf-network-masq-on
1
#!/bin/bash
2

  
3
source /etc/default/snf-network
4

  
5
source $CONF
6

  
7
INFRA=$STATE_DIR/infra
8

  
9
NETMASK=$(ipcalc $SUBNET | grep Netmask | awk '{print $4}')
10
ip addr add $GATEWAY/$NETMASK dev $BRIDGE
11
iptables -t nat -A POSTROUTING -s $SUBNET \! -d $SUBNET -j MASQUERADE
12

  
/dev/null
1
#!/bin/bash
2

  
3
source /etc/default/snf-network
4

  
5
source $CONF
6

  
7
NETWORKS="$(ls $SHAREDDIR/networks/)"
8

  
9
HOSTNAME=$(hostname)
10

  
11
INTERFACES=$SHAREDDIR/interfaces/$HOSTNAME
12

  
13
ifup -i $INTERFACES -a
14

  
15
for NETWORK in $NETWORKS; do
16

  
17
  NETFILE=$SHAREDDIR/networks/$NETWORK
18
  NODEMAPFILE=$SHAREDDIR/mappings/$NETWORK-$HOSTNAME
19
  NODEINFRAFILE=$SHAREDDIR/infra/$HOSTNAME
20
  CLUSTERINFRAFILE=$SHAREDDIR/infra/cluster
21

  
22
  RT_TABLES=/etc/iproute2/rt_tables
23

  
24
  source $NODEINFRAFILE
25
  source $CLUSTERINFRAFILE
26
  source $NETFILE
27

  
28
  if [ "$MODE" == "routed" ]; then 
29
    VLAN=$LINK
30
    TABLE=rt_$NETWORK
31
    if [ "$TYPE" == "public" ]; then
32
      ARP_IP=$(ipcalc $SUBNET | grep HostMax | awk '{print $2}')
33
      
34
      ip link set $VLAN up
35

  
36
      echo 1 > "/proc/sys/net/ipv4/conf/$VLAN/proxy_arp"
37

  
38
      ID=$(wc -l < $RT_TABLES)
39
      echo $((ID+1)) $TABLE >> $RT_TABLES
40

  
41
      ip rule add iif $VLAN table $TABLE
42

  
43
      ip route add $SUBNET dev $VLAN table main 
44

  
45
      ip route add $SUBNET dev $VLAN table $TABLE
46
      ip route add default via $GATEWAY dev $VLAN table $TABLE
47
      
48
      echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
49

  
50
      arptables -A OUTPUT -o $VLAN --opcode request -j mangle --mangle-ip-s  $ARP_IP 
51
    fi
52
  fi
53

  
54

  
55

  
56
  if [ "$MODE" == "bridged" ]; then
57
    BRIDGE=$LINK
58
    if [ ! -z "$GATEWAY" -a $ENABLE_MASQ ]; then
59
      if [ "$TYPE" == "private" ]; then 
60
        if [ "$HOSTNAME" == "$ROUTER" ]; then
61
          NETMASK=$(ipcalc $SUBNET | grep Netmask | awk '{print $4}')
62
          ip addr add $GATEWAY/$NETMASK dev $BRIDGE
63
          iptables -t nat -A POSTROUTING -s $SUBNET \! -d 192.168.0.0/16 -j MASQUERADE
64
        fi  
65
      fi
66
    fi
67
  fi
68

  
69
done
/dev/null
1
#!/bin/bash
2

  
3
source /etc/default/snf-network
4

  
5
source $CONF
6

  
7
NETWORKS="$(ls $SHAREDDIR/networks/)"
8

  
9
HOSTNAME=$(hostname)
10

  
11
for NETWORK in $NETWORKS; do
12

  
13
  NETFILE=$SHAREDDIR/networks/$NETWORK
14
  NODEMAPFILE=$SHAREDDIR/mappings/$NETWORK-$HOSTNAME
15
  NODEINFRAFILE=$SHAREDDIR/infra/$HOSTNAME
16

  
17
  RT_TABLES=/etc/iproute2/rt_tables
18

  
19
  source $NODEINFRAFILE
20
  source $NETFILE
21
  source $NODEMAPFILE
22

  
23

  
24
  if [ "$MODE" == "routed" ]; then 
25
    VLAN=$LINK
26
    TABLE=rt_$NETWORK
27
    if [ "$TYPE" == "public" ]; then
28
      ARP_IP=$(ipcalc $SUBNET | grep HostMax | awk '{print $2}')
29
    
30
      arptables -D OUTPUT -o $VLAN --opcode request -j mangle --mangle-ip-s  $ARP_IP 
31

  
32
      ip route del default via $GATEWAY dev $VLAN table $TABLE
33
      ip route del $SUBNET dev $VLAN table $TABLE
34

  
35
      ip route del $SUBNET dev $VLAN table main 
36

  
37
      ip rule del iif $VLAN table $TABLE
38
      
39
      sed -i 's/.*'"$TABLE"'$//' $RT_TABLES
40
    fi
41
  fi
42

  
43

  
44

  
45
  if [ "$MODE" == "bridged" ]; then
46
    BRIDGE=$LINK
47
    if [ ! -z "$GATEWAY" -a $ENABLE_MASQ ]; then
48
      if [ "$TYPE" == "private" ]; then 
49
        if [ "$HOSTNAME" == "$ROUTER" ]; then
50
          NETMASK=$(ipcalc $SUBNET | grep Netmask | awk '{print $4}')
51
          ip addr del $GATEWAY/$NETMASK dev $BRIDGE
52
          iptables -t nat -D POSTROUTING -s $SUBNET \! -d 192.168.0.0/16 -j MASQUERADE
53
        fi  
54
      fi
55
    fi
56
  fi
57

  
58
done
59

  
60
INTERFACES=$SHAREDDIR/interfaces/$HOSTNAME
61

  
62
ifdown -i $INTERFACES -a --force
63

  
b/snf-network-unconfigure-interfaces
4 4

  
5 5
source $DEFAULT
6 6
source $CONF
7
source $INFRA
8 7

  
9
HOSTNAME=$(hostname)
10

  
11
INTERFACES=$SHAREDDIR/interfaces/$HOSTNAME
8
INTERFACES=$STATE_DIR/interfaces
12 9

  
13 10
if [ -e "$INTERFACES" ]; then
14 11
  ifdown -i $INTERFACES -a --force
b/vlans/prv-net-helper
1 1
#!/bin/bash
2 2

  
3 3
function usage {
4
	echo "Usage: $0 <mode> <parent interface> <prv min> <prv max> <offset>"
4
	echo "Usage: $0 <mode> <parent interface> <prv min> <prv max> <offset> <bridge prefix>"
5 5
	exit 1
6 6
}
7 7

  
8
if [ $# -ne 5 ]; then
8
if [ $# -ne 6 ]; then
9 9
	usage
10 10
fi
11 11

  
......
14 14
	prv_min=$2
15 15
	prv_max=$3
16 16
	offset=$4
17
  prefix=$5
17 18

  
18 19
	echo "Adding VLANs $2 - $3"
19 20
	vconfig set_name_type DEV_PLUS_VID_NO_PAD
20 21
	for prv in $(seq $prv_min $prv_max); do
21 22
		vlan=$(($prv+$offset))
22
		bridge=prv$prv
23
		bridge=$prefix$prv
23 24

  
24 25
		vconfig add $iface $vlan
25 26
		ifconfig $iface.$vlan up
......
39 40
	echo "Removing VLANs $2 - $3"
40 41
	for prv in $(seq $prv_min $prv_max); do
41 42
		vlan=$(($prv+$offset))
42
		bridge=prv$prv
43
		bridge=$prefix$prv
43 44

  
44 45
		(
45 46
		ifconfig $bridge down

Also available in: Unified diff