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:
parent
f8bf25a7bf
commit
d55f7135de
6 changed files with 96 additions and 26 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue