Welcome to mirror list, hosted at ThFree Co, Russian Federation.

setup_network.sh « helpers « meshwizard « bin « usr « files « meshwizard « package « contrib - github.com/openwrt/luci.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 7035e7fb4b3f64cdf5976dec263da0abf8524043 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# setup entry in /etc/config/network for a interface
# Argument $1: network interface

net="$1"
. /lib/functions.sh
. $dir/functions.sh

# Setup a (new) interface section for $net

ipaddr=$(uci -q get meshwizard.netconfig.$net\_ip4addr)
ip6addr=$(uci -q get meshwizard.netconfig.$net\_ip6addr)
[ -z "$ipaddr" ] && msg_missing_value meshwizard $net\_ip4addr

netmask=$(uci -q get meshwizard.netconfig.$net\_netmask)
[ -z "$netmask" ] && netmask="$interface_netmask"
[ -z "$netmask" ] && netmask="255.255.0.0"

uci set network.$netrenamed="interface"
set_defaults "interface_" network.$netrenamed

uci batch << EOF
	set network.$netrenamed.proto="static"
	set network.$netrenamed.ipaddr="$ipaddr"
	set network.$netrenamed.netmask="$netmask"
EOF

if [ "$netrenamed" = "lan" ]; then
	# remove the bridge if the interface is used for olsr
	# since this script is only run in this case, no need
	# to check for lan_proto = "olsr" currently.
	uci -q delete network.lan.type
fi

# Setup IPv6 for the interface
local ip6addr
if [ "$ipv6_enabled" = 1 ]; then
	if [ "$ipv6_config" = "auto-ipv6-dhcpv6" ]; then
		ip6addr="$($dir/helpers/gen_auto-ipv6-dhcpv6-ip.sh $netrenamed)"
		uci set network.$netrenamed.ip6addr="${ip6addr}/112"
	fi
	if [ "$ipv6_config" = "static" ] && [ -n "$ip6addr" ]; then
		uci set network.$netrenamed.ip6addr="$ip6addr"
	fi
fi

uci_commitverbose "Setup interface $netrenamed" network

# setup dhcp alias/interface

net_dhcp=$(uci -q get meshwizard.netconfig.${net}_dhcp)
if [ "$net_dhcp" == 1 ]; then

	# Load meshwizard_settings
	dhcprange="$(uci -q get meshwizard.netconfig.${net}_dhcprange)"
	interface_ip="$(uci -q get meshwizard.netconfig.${net}_ip4addr)"
	vap=$(uci -q get meshwizard.netconfig.${net}_vap)

	# Rename config
	handle_dhcpalias() {
			config_get interface "$1" interface
			if [ "$interface" == "$netrenamed" ]; then
				if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then
					section_rename network $1 ${netrenamed}dhcp
				fi
			fi
	}
	config_load network
	config_foreach handle_dhcpalias interface

	# Get IP/netmask and start-ip for $net dhcp
	# If no dhcprange is given in /etc/config/meshwizard we autogenerate one

	if [ -z "$dhcprange" ]; then
		dhcprange="$($dir/helpers/gen_dhcp_ip.sh $interface_ip)/24"
		uci set meshwizard.netconfig.${net}_dhcprange="$dhcprange"
	fi

	# If we use VAP and also offer dhcp on the adhoc interface then cut the dhcp
	# range in two halves. one for the adhoc, one for the managed VAP interface
	ahdhcp_when_vap="$(uci get profile_$community.profile.adhoc_dhcp_when_vap)"

	if [ "$supports_vap" = 1 -a "$vap" = 1 -a "$ahdhcp_when_vap" = 1 ]; then
		# VAPs are enabled for this interface, supported and we want to
		# also use DHCP on the adhoc 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
		eval $(sh $dir/helpers/ipcalc-cidr.sh $dhcprange 1 0)
		STARTADHOC=$START
		NETMASKADHOC=$NETMASK
	fi
	if [ "$supports_vap" = 1 -a "$vap" = 1 -a "$ahdhcp_when_vap" != 1 ]; then
		# vaps are enabled and supported and we do not use DHCP on adhoc
		# Add dhcp interface
		uci batch <<- EOF
			set network.${netrenamed}dhcp=interface
			set network.${netrenamed}dhcp.proto=static
			set network.${netrenamed}dhcp.ipaddr="$STARTADHOC"
			set network.${netrenamed}dhcp.netmask="$NETMASKADHOC"
		EOF
		uci_commitverbose  "Setup interface for ${netrenamed}dhcp" network
	fi


	# Setup alias for $net adhoc interface 
	if  [ "$supports_vap" = 0 ] || \
		[ "$vap" = 0 ] || \
		[ "$supports_vap" = 1 -a "$vap" = 1 -a "$ahdhcp_when_vap" = 1 ] || \
		[ "$lan_is_olsr" = "1" ]; then
		# setup an alias interface for the main interface to use as a network for clients
		# when one of the following conditions is met
		# * vaps are not supported
		# * or not enabled
		# * or they are supported and enabled but we also want to use DHCP on the adhoc interface
		# * or this is the lan interface and it is used for olsrd (and dhcp is enabled)
		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
fi