contrib/meshwizard: Also setup a dhcp server on the adhoc interface if VAP is used. In this case split the DHCP Network in two halves, one for the adhoc, one for the managed network.

This commit is contained in:
Manuel Munz 2013-05-18 11:58:54 +00:00
parent f8bf25a7bf
commit d55f7135de
6 changed files with 96 additions and 26 deletions

View 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)

View file

@ -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:

View file

@ -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
uci batch << EOF
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}ahdhcp="dhcp"
set dhcp.${netrenamed}ahdhcp.interface="${netrenamed}ahdhcp"
EOF
set_defaults "dhcp_" dhcp.${netrenamed}ahdhcp
uci_commitverbose "Setup DHCP for $netrenamed" dhcp

View file

@ -61,7 +61,8 @@ 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 [ "$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)"
@ -82,6 +83,30 @@ if [ -n "$dhcprange" ]; then
[ -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" ] && dhcprangeah="$NETWORK/$PREFIX"
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 $dhcprangeah $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}ahdhcp)" ] && uci add_list firewall.zone_freifunk.masq_src="${netrenamed}ahdhcp"
fi
fi
for i in IP NETMASK BROADCAST NETWORK PREFIX; do
unset $i

View file

@ -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
else
uci set network.${netrenamed}dhcp=interface
uci set network.${netrenamed}dhcp.ifname="@${netrenamed}"
fi
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="$START"
set network.${netrenamed}dhcp.netmask="$NETMASK"
set network.${netrenamed}dhcp.ipaddr="$STARTVAP"
set network.${netrenamed}dhcp.netmask="$NETMASKVAP"
EOF
uci_commitverbose "Setup interface for ${netrenamed}dhcp" network
else
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}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}ahdhcp" network
fi

View file

@ -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}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
/etc/init.d/luci_splash enable
fi