Add SETUP conf var
[snf-network] / snf-network-configure-interfaces
index ad00d51..6f2300c 100755 (executable)
@@ -9,34 +9,46 @@ source $INFRA
 HOSTNAME=$(hostname)
 
 
-INTERFACES=$SHAREDDIR/interfaces/$HOSTNAME
-HOSTINFRA=$SHAREDDIR/infra/$HOSTNAME
+INTERFACES=$STATE_DIR/interfaces
+HOSTINFRA=$STATE_DIR/infra
 
-if [ -e "$HOSTINFRA" ]; then
-  source $HOSTINFRA
-fi
-
-if [ -e /proc/sys/net/ipv4/conf/$PUBLIC_BRIDGE -o \
-     -e /proc/sys/net/ipv4/conf/$PUBLIC_VLAN  -o \ 
-     -e /proc/sys/net/ipv4/conf/$PRIVATE_VLAN -o \
-     -e /proc/sys/net/ipv4/conf/$PRIVATE_BRIDGE ]; then 
-  echo Interfaces already exist! Please check: 
-  echo $PUBLIC_BRIDGE for bridging TAPs with public IPs
-  echo $PUBLIC_VLAN for routing TAPs with public IPs
-  echo $PRIVATE_VLAN  bridged on $PRIVATE_BRIDGE for private LANs
+if [ ! -e "$HOSTINFRA" ]; then 
+  echo "A host infra file must exist" 
+  echo "Run snf-network-build-host-infra"
   exit 1
 fi
 
+source $HOSTINFRA
+
+DONOTIFUP=false
+
+check_iface(){
+  if [ -n "$1" -a -e /proc/sys/net/ipv4/conf/$1 ]; then 
+    echo Interface $1 already exist! Please check
+    export DONOTIFUP=true
+  fi
+}
 
-PUBLIC_INTERFACE=$(ip route | grep default | awk '{print $5}')
-PUBLIC_MAC=$(ip link show $PUBLIC_INTERFACE | grep link/ether | awk '{print $2}')
 
+check_iface "$PUBLIC_BRIDGE"
+check_iface "$PUBLIC_IFACE.$PUBLIC_VLAN_ID"
+check_iface "$PUBLIC_IFACE.$PRIVATE_VLAN_ID"
+check_iface "$PRIVATE_BRIDGE"
 
-if [ -n "$PUBLIC_BRIDGE" -a -n "$PUBLIC_INTERFACE" ]; then
-  cat > $INTERFACES<<EOF
+if [ -n "$PRIVATE_VLAN_ID_OFFSET" ]; then
+  for id in `seq $PRIVATE_VLAN_ID_MIN 1 $PRIVATE_VLAN_ID_MAX`; do
+    check_iface $PUBLIC_IFACE.$((PRIVATE_VLAN_ID_OFFSET+id))
+    check_iface $BRIDGE_PREFIX$id
+  done
+fi
+
+(
+
+if [ -n "$PUBLIC_BRIDGE" -a -n "$PUBLIC_IFACE" ]; then
+  cat<<EOF
 auto $PUBLIC_BRIDGE
 iface $PUBLIC_BRIDGE inet manual
-  bridge_ports $PUBLIC_INTERFACE
+  bridge_ports $PUBLIC_IFACE
   bridge_stp off
   bridge_fd 2
   post-up ip link set $PUBLIC_BRIDGE address $PUBLIC_MAC 
@@ -45,14 +57,15 @@ EOF
 
 else
   if [ -n "$PUBLIC_VLAN" ]; then
-    cat >> $INTERFACES<<EOF
+    cat<<EOF
 auto $PUBLIC_VLAN
 iface $PUBLIC_VLAN inet manual
 
 EOF
+  fi
 
   if [ -n "$PRIVATE_VLAN" -a -n "$PRIVATE_BRIDGE" ]; then
-    cat >> $INTERFACES<<EOF
+    cat<<EOF
 auto $PRIVATE_VLAN
 iface $PRIVATE_VLAN inet manual
 
@@ -64,12 +77,31 @@ iface $PRIVATE_BRIDGE inet manual
   post-up ip link set $PRIVATE_BRIDGE address $PUBLIC_MAC 
 
 EOF
+  fi  
 
+  if [ -n "$PRIVATE_VLAN_ID_OFFSET" ]; then
+     HELPER="$PRIVATE_VLAN_ID_MIN $PRIVATE_VLAN_ID_MAX $PRIVATE_VLAN_ID_OFFSET"
+     cat<<EOF
+auto prv
+iface prv inet manual
+    up   prv-net-helper up   $PUBLIC_IFACE $HELPER $BRIDGE_PREFIX
+    down prv-net-helper down $PUBLIC_IFACE $HELPER $BRIDGE_PREFIX
+
+EOF
   fi
+    
 fi
 
-ifup -i $INTERFACES -a
-
+) > $INTERFACES
 
 echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
+echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
 echo 1 > /proc/sys/net/ipv4/ip_forward
+
+if $DONOTIFUP; then
+  echo Check interfaces:
+  cat $INTERFACES
+  exit 1
+fi
+
+ifup -i $INTERFACES -a