contrib/meshwizard: Also setup a dhcp server on the adhoc interface if VAP is used...
authorManuel Munz <freifunk@somakoma.de>
Sat, 18 May 2013 11:58:54 +0000 (11:58 +0000)
committerManuel Munz <freifunk@somakoma.de>
Sat, 18 May 2013 11:58:54 +0000 (11:58 +0000)
contrib/package/meshwizard/Makefile
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/ipcalc-cidr.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_dhcp.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_firewall_interface.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_network.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_splash.sh

index 91979b7..47f0c60 100644 (file)
@@ -4,7 +4,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=meshwizard
-PKG_RELEASE:=0.0.9-1
+PKG_RELEASE:=0.0.10-1
 
 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 
index 39d051e..6d7a1fb 100755 (executable)
@@ -28,6 +28,7 @@ BEGIN {
        print "NETMASK="int2ip(netmask)
        print "BROADCAST="int2ip(broadcast)
        print "NETWORK="int2ip(network)
+       print "NEXTNET="int2ip(broadcast + 1)
        print "PREFIX="32-bitcount(compl(netmask))
        
        # range calculations:
index 5c8863e..a6f16b3 100755 (executable)
@@ -5,6 +5,7 @@
 . $dir/functions.sh
 
 net="$1"
+vap="$(uci -q get meshwizard.netconfig.${net}_vap)"
 
 handle_dnsmasq() {
        config_get interface "$1" interface
@@ -19,12 +20,21 @@ config_foreach handle_dnsmasq dhcp
 
 [ "$net" == "lan" ] && uci -q delete dhcp.lan
 
+if [ "$vap" == 1 ]; then
+       uci batch <<- EOF
+               set dhcp.${netrenamed}dhcp="dhcp"
+               set dhcp.${netrenamed}dhcp.interface="${netrenamed}dhcp"
+       EOF
+       set_defaults "dhcp_" dhcp.${netrenamed}dhcp
+fi
+
 uci batch << EOF
-       set dhcp.${netrenamed}dhcp="dhcp"
-       set dhcp.${netrenamed}dhcp.interface="${netrenamed}dhcp"
+       set dhcp.${netrenamed}ahdhcp="dhcp"
+       set dhcp.${netrenamed}ahdhcp.interface="${netrenamed}ahdhcp"
 EOF
 
-set_defaults "dhcp_" dhcp.${netrenamed}dhcp
+set_defaults "dhcp_" dhcp.${netrenamed}ahdhcp
 
 uci_commitverbose "Setup DHCP for $netrenamed" dhcp
 
+
index 11c351b..893aed4 100755 (executable)
@@ -61,17 +61,41 @@ currms=$(uci -q get firewall.zone_freifunk.masq_src)
 
 # If interfaces are outside of the mesh network they should be natted
 
-# Get dhcprange and meshnet
-if_ip="$(uci -q get network.${netrenamed}dhcp.ipaddr)"
-if_mask="$(uci -q get network.${netrenamed}dhcp.netmask)"
+if [ "$vap" == 1 ]; then
+       # Get dhcprange and meshnet for the dhcp interface
+       if_ip="$(uci -q get network.${netrenamed}dhcp.ipaddr)"
+       if_mask="$(uci -q get network.${netrenamed}dhcp.netmask)"
+
+       [ -n "$if_ip" -a "$if_mask" ] && export $(ipcalc.sh $if_ip $if_mask)
+       [ -n "$NETWORK" -a "$PREFIX" ] && dhcprange="$NETWORK/$PREFIX"
+
+       if [ -n "$dhcprange" ]; then
+               meshnet="$(uci get profile_$community.profile.mesh_network)"
+               # check if the dhcprange is inside meshnet
+               dhcpinmesh="$($dir/helpers/check-range-in-range.sh $dhcprange $meshnet)"
+               if [ "$dhcpinmesh" == 1 ]; then
+                       # needed or splash will not work
+                       if [ "$has_luci_splash" == TRUE ]; then
+                               uci set firewall.zone_freifunk.contrack="1"
+                       fi
+               else
+                       uci set firewall.zone_freifunk.masq=1
+                       [ -z "$(echo $currms |grep ${netrenamed}dhcp)" ] && uci add_list firewall.zone_freifunk.masq_src="${netrenamed}dhcp"
+               fi
+       fi
+fi
+
+# Get dhcprange and meshnet for the adhoc dhcp interface
+if_ip="$(uci -q get network.${netrenamed}ahdhcp.ipaddr)"
+if_mask="$(uci -q get network.${netrenamed}ahdhcp.netmask)"
 
 [ -n "$if_ip" -a "$if_mask" ] && export $(ipcalc.sh $if_ip $if_mask)
-[ -n "$NETWORK" -a "$PREFIX" ] && dhcprange="$NETWORK/$PREFIX"
+[ -n "$NETWORK" -a "$PREFIX" ] && dhcprangeah="$NETWORK/$PREFIX"
 
-if [ -n "$dhcprange" ]; then
+if [ -n "$dhcprangeah" ]; then
        meshnet="$(uci get profile_$community.profile.mesh_network)"
        # check if the dhcprange is inside meshnet
-       dhcpinmesh="$($dir/helpers/check-range-in-range.sh $dhcprange $meshnet)"
+       dhcpinmesh="$($dir/helpers/check-range-in-range.sh $dhcprangeah $meshnet)"
        if [ "$dhcpinmesh" == 1 ]; then
                # needed or splash will not work
                if [ "$has_luci_splash" == TRUE ]; then
@@ -79,10 +103,11 @@ if [ -n "$dhcprange" ]; then
                fi
        else
                uci set firewall.zone_freifunk.masq=1
-               [ -z "$(echo $currms |grep ${netrenamed}dhcp)" ] && uci add_list firewall.zone_freifunk.masq_src="${netrenamed}dhcp"
+               [ -z "$(echo $currms |grep ${netrenamed}ahdhcp)" ] && uci add_list firewall.zone_freifunk.masq_src="${netrenamed}ahdhcp"
        fi
 fi
 
+
 for i in IP NETMASK BROADCAST NETWORK PREFIX; do
        unset $i
 done
index 70f82fe..f0ed0e7 100755 (executable)
@@ -67,23 +67,48 @@ if [ "$net_dhcp" == 1 ]; then
                dhcprange="$($dir/helpers/gen_dhcp_ip.sh $interface_ip)/24"
                uci set meshwizard.netconfig.${net}_dhcprange="$dhcprange"
        fi
-       eval $(sh $dir/helpers/ipcalc-cidr.sh $dhcprange 1 0)
 
-       # setup wifi-dhcp interface or alias (using interface notation)
-
-       # Setup alias for $net
+       # If we use VAP then cut the dhcp range in two halves
+       # one for the adhoc, one for the managed VAP interface
 
        if [ "$vap" == 1 ]; then
-               uci set network.${netrenamed}dhcp=interface
+               local network
+               local mask
+               network=${dhcprange%%/*}
+               mask=${dhcprange##*/}
+               # Divide network size by adding 1 to the netmask
+               mask=$(($mask + 1))
+               # Get first ip and netmask for the adhoc dhcp network
+               eval $(sh $dir/helpers/ipcalc-cidr.sh ${network}/${mask} 1 0)
+               STARTADHOC=$START
+               NETMASKADHOC=$NETMASK
+               # Get first ip and netmask for the managed dhcp network
+               eval $(sh $dir/helpers/ipcalc-cidr.sh ${NEXTNET}/${mask} 1 0)
+               STARTVAP=$START
+               NETMASKVAP=$NETMASK
+               # Add dhcp interface
+               uci batch <<- EOF
+                       set network.${netrenamed}dhcp=interface
+                       set network.${netrenamed}dhcp.proto=static
+                       set network.${netrenamed}dhcp.ipaddr="$STARTVAP"
+                       set network.${netrenamed}dhcp.netmask="$NETMASKVAP"
+               EOF
+               uci_commitverbose  "Setup interface for ${netrenamed}dhcp" network
+
        else
-               uci set network.${netrenamed}dhcp=interface
-               uci set network.${netrenamed}dhcp.ifname="@${netrenamed}"
+               eval $(sh $dir/helpers/ipcalc-cidr.sh $dhcprange 1 0)
+               STARTADHOC=$START
+               NETMASKADHOC=$NETMASK
        fi
 
+       # Setup alias for $net adhoc interface
+
        uci batch <<- EOF
-               set network.${netrenamed}dhcp.proto=static
-               set network.${netrenamed}dhcp.ipaddr="$START"
-               set network.${netrenamed}dhcp.netmask="$NETMASK"
+               set network.${netrenamed}ahdhcp=interface
+               set network.${netrenamed}ahdhcp.ifname="@${netrenamed}"
+               set network.${netrenamed}ahdhcp.proto=static
+               set network.${netrenamed}ahdhcp.ipaddr="$STARTADHOC"
+               set network.${netrenamed}ahdhcp.netmask="$NETMASKADHOC"
        EOF
-       uci_commitverbose  "Setup interface for ${netrenamed}dhcp" network
+       uci_commitverbose  "Setup interface for ${netrenamed}ahdhcp" network
 fi
index 9741111..722567e 100755 (executable)
@@ -5,6 +5,7 @@
 . $dir/functions.sh
 
 net=$1
+vap=$(uci -q get meshwizard.netconfig.${net}_vap)
 
 if [ ! "$has_luci_splash" == TRUE ]; then
        echo "    Luci Splash is not installed, skipping setup of it."
@@ -28,13 +29,21 @@ if [ "$(uci -q get meshwizard.netconfig.$net\_dhcp)" == 1 ] && [ -n "$dhcprange"
        config_load luci_splash
        config_foreach handle_splash iface
 
+       if [ "$vap" == 1 ]; then
+               uci batch <<- EOF
+                       set luci_splash.${netrenamed}dhcp="iface"
+                       set luci_splash.${netrenamed}dhcp.network="${netrenamed}dhcp"
+                       set luci_splash.${netrenamed}dhcp.zone="freifunk"
+               EOF
+               uci_commitverbose "Setup dhcpsplash for ${netrenamed}dhcp" luci_splash
+       fi
        uci batch <<- EOF
-               set luci_splash.${netrenamed}dhcp="iface"
-               set luci_splash.${netrenamed}dhcp.network="${netrenamed}dhcp"
-               set luci_splash.${netrenamed}dhcp.zone="freifunk"
+               set luci_splash.${netrenamed}ahdhcp="iface"
+               set luci_splash.${netrenamed}ahdhcp.network="${netrenamed}ahdhcp"
+               set luci_splash.${netrenamed}ahdhcp.zone="freifunk"
        EOF
+       uci_commitverbose "Setup dhcpsplash for ${netrenamed}ahdhcp" luci_splash
 
-       uci_commitverbose "Setup dhcpsplash for ${netrenamed}dhcp" luci_splash
        /etc/init.d/luci_splash enable
 fi