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 include $(TOPDIR)/rules.mk
PKG_NAME:=meshwizard PKG_NAME:=meshwizard
PKG_RELEASE:=0.0.9-1 PKG_RELEASE:=0.0.10-1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

View file

@ -28,6 +28,7 @@ BEGIN {
print "NETMASK="int2ip(netmask) print "NETMASK="int2ip(netmask)
print "BROADCAST="int2ip(broadcast) print "BROADCAST="int2ip(broadcast)
print "NETWORK="int2ip(network) print "NETWORK="int2ip(network)
print "NEXTNET="int2ip(broadcast + 1)
print "PREFIX="32-bitcount(compl(netmask)) print "PREFIX="32-bitcount(compl(netmask))
# range calculations: # range calculations:

View file

@ -5,6 +5,7 @@
. $dir/functions.sh . $dir/functions.sh
net="$1" net="$1"
vap="$(uci -q get meshwizard.netconfig.${net}_vap)"
handle_dnsmasq() { handle_dnsmasq() {
config_get interface "$1" interface config_get interface "$1" interface
@ -19,12 +20,21 @@ config_foreach handle_dnsmasq dhcp
[ "$net" == "lan" ] && uci -q delete dhcp.lan [ "$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 uci batch << EOF
set dhcp.${netrenamed}dhcp="dhcp" set dhcp.${netrenamed}ahdhcp="dhcp"
set dhcp.${netrenamed}dhcp.interface="${netrenamed}dhcp" set dhcp.${netrenamed}ahdhcp.interface="${netrenamed}ahdhcp"
EOF EOF
set_defaults "dhcp_" dhcp.${netrenamed}dhcp set_defaults "dhcp_" dhcp.${netrenamed}ahdhcp
uci_commitverbose "Setup DHCP for $netrenamed" dhcp uci_commitverbose "Setup DHCP for $netrenamed" dhcp

View file

@ -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 # If interfaces are outside of the mesh network they should be natted
# Get dhcprange and meshnet if [ "$vap" == 1 ]; then
if_ip="$(uci -q get network.${netrenamed}dhcp.ipaddr)" # Get dhcprange and meshnet for the dhcp interface
if_mask="$(uci -q get network.${netrenamed}dhcp.netmask)" 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 "$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)" meshnet="$(uci get profile_$community.profile.mesh_network)"
# check if the dhcprange is inside meshnet # 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 if [ "$dhcpinmesh" == 1 ]; then
# needed or splash will not work # needed or splash will not work
if [ "$has_luci_splash" == TRUE ]; then if [ "$has_luci_splash" == TRUE ]; then
@ -79,10 +103,11 @@ if [ -n "$dhcprange" ]; then
fi fi
else else
uci set firewall.zone_freifunk.masq=1 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
fi fi
for i in IP NETMASK BROADCAST NETWORK PREFIX; do for i in IP NETMASK BROADCAST NETWORK PREFIX; do
unset $i unset $i
done done

View file

@ -67,23 +67,48 @@ if [ "$net_dhcp" == 1 ]; then
dhcprange="$($dir/helpers/gen_dhcp_ip.sh $interface_ip)/24" dhcprange="$($dir/helpers/gen_dhcp_ip.sh $interface_ip)/24"
uci set meshwizard.netconfig.${net}_dhcprange="$dhcprange" uci set meshwizard.netconfig.${net}_dhcprange="$dhcprange"
fi fi
eval $(sh $dir/helpers/ipcalc-cidr.sh $dhcprange 1 0)
# setup wifi-dhcp interface or alias (using interface notation) # If we use VAP then cut the dhcp range in two halves
# one for the adhoc, one for the managed VAP interface
# Setup alias for $net
if [ "$vap" == 1 ]; then 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 else
uci set network.${netrenamed}dhcp=interface eval $(sh $dir/helpers/ipcalc-cidr.sh $dhcprange 1 0)
uci set network.${netrenamed}dhcp.ifname="@${netrenamed}" STARTADHOC=$START
NETMASKADHOC=$NETMASK
fi fi
# Setup alias for $net adhoc interface
uci batch <<- EOF uci batch <<- EOF
set network.${netrenamed}dhcp.proto=static set network.${netrenamed}ahdhcp=interface
set network.${netrenamed}dhcp.ipaddr="$START" set network.${netrenamed}ahdhcp.ifname="@${netrenamed}"
set network.${netrenamed}dhcp.netmask="$NETMASK" set network.${netrenamed}ahdhcp.proto=static
set network.${netrenamed}ahdhcp.ipaddr="$STARTADHOC"
set network.${netrenamed}ahdhcp.netmask="$NETMASKADHOC"
EOF EOF
uci_commitverbose "Setup interface for ${netrenamed}dhcp" network uci_commitverbose "Setup interface for ${netrenamed}ahdhcp" network
fi fi

View file

@ -5,6 +5,7 @@
. $dir/functions.sh . $dir/functions.sh
net=$1 net=$1
vap=$(uci -q get meshwizard.netconfig.${net}_vap)
if [ ! "$has_luci_splash" == TRUE ]; then if [ ! "$has_luci_splash" == TRUE ]; then
echo " Luci Splash is not installed, skipping setup of it." 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_load luci_splash
config_foreach handle_splash iface 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 uci batch <<- EOF
set luci_splash.${netrenamed}dhcp="iface" set luci_splash.${netrenamed}ahdhcp="iface"
set luci_splash.${netrenamed}dhcp.network="${netrenamed}dhcp" set luci_splash.${netrenamed}ahdhcp.network="${netrenamed}ahdhcp"
set luci_splash.${netrenamed}dhcp.zone="freifunk" set luci_splash.${netrenamed}ahdhcp.zone="freifunk"
EOF 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 /etc/init.d/luci_splash enable
fi fi