Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 47659 | Differences between
and this patch

Collapse All | Expand All

(-)rc-scripts-1.4.12-vanilla/etc/conf.d/net (-17 / +58 lines)
Lines 3-12 Link Here
3
3
4
# Global config file for net.* rc-scripts
4
# Global config file for net.* rc-scripts
5
5
6
# This is basically the ifconfig argument without the ifconfig $iface
6
####################################################################################################
7
#	Old Style iface config examples ( depreciated )                                            #
8
#	NOTE: This uses /sbin/ifconfig and /sbin/route to set the network up                       #
9
####################################################################################################
10
# iface_eth0="192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0"
11
12
# For adding aliases to a interface
13
# alias_eth0="192.168.0.3 192.168.0.4"
14
15
# To add a custom netmask/broadcast address to created aliases.
16
# broadcast_eth0="192.168.0.255 192.168.0.255"
17
# netmask_eth0="255.255.255.0 255.255.255.0"
18
19
# For setting the default gateway
7
#
20
#
8
iface_eth0="192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0"
21
# gateway="eth0/192.168.0.1"
9
#iface_eth1="207.170.82.202 broadcast 207.0.255.255 netmask 255.255.0.0"
10
22
11
# For DHCP set iface_eth? to "dhcp"
23
# For DHCP set iface_eth? to "dhcp"
12
# For passing options to dhcpcd use dhcpcd_eth?
24
# For passing options to dhcpcd use dhcpcd_eth?
Lines 14-34 Link Here
14
#iface_eth0="dhcp"
26
#iface_eth0="dhcp"
15
#dhcpcd_eth0="..."
27
#dhcpcd_eth0="..."
16
28
17
# For adding aliases to a interface
29
###################################################################################################
18
#
30
#	New style ifconfig config examples.                                                       #
19
#alias_eth0="192.168.0.3 192.168.0.4"
31
#	NOTE: This uses /sbin/ifconfig and /sbin/route to set the network up                      #
32
###################################################################################################
33
# This creates two aliases on the eth0 interface along with the primary eth0 address
34
# ifconfig_eth0=(
35
#	"192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0"
36
#	"192.168.0.3 broadcast 192.168.0.255 netmask 255.255.255.0"
37
#	"192.168.0.4 broadcast 192.168.0.255 netmask 255.255.255.0"
38
# )
39
40
# This is just like setting the gateway config option above, but allows one to add custom routes.
41
# routes_eth0=(
42
#	"default gw 192.168.0.1"
43
# )
20
44
21
# NB:  The next is only used for aliases.
45
# For DHCP set ifconfig_eth? to "dhcp"
22
#
46
# For passing options to dhcpcd use dhcpcd_eth?
23
# To add a custom netmask/broadcast address to created aliases,
47
# ifconfig_eth0=("dhcp")
24
# uncomment and change accordingly.  Leave commented to assign
48
# dhcpcd_eth0="..."
25
# defaults for that interface.
26
#
27
#broadcast_eth0="192.168.0.255 192.168.0.255"
28
#netmask_eth0="255.255.255.0 255.255.255.0"
29
49
50
###################################################################################################
51
#	This is the iproute2 style configuration                                                  #
52
#	NOTE: This makes use of the /sbin/ip command to set routes and ip addresses               #
53
#	This style is very useful if you are building an advanced linux router or using VRRP      #
54
#	For more information on how to use the iproute2 command have a look at the man page       #
55
#	`man 8 ip`
56
###################################################################################################
57
# The follow example sets up two aliaes and the primary ip address on the device
58
# You may also pass advanced ip addr commands via this option.
59
# ipaddr_eth0=(
60
#	"192.168.0.2/24 brd 192.168.0.255"
61
#	"192.168.0.3/24 brd 192.168.0.255"
62
#	"192.168.0.4/24 brd 192.168.0.255"
63
#	)
64
65
# The following will set up the default gateway. You can also pass advanced route configs via
66
# this option.
67
# iproute_eth0=(
68
#	"default via 192.168.0.1"
69
#	)
30
70
31
# For setting the default gateway
71
# For DHCP set ipaddr_eth? to "dhcp"
32
#
72
# For passing options to dhcpcd use dhcpcd_eth?
33
#gateway="eth0/192.168.0.1"
73
# ipaddr_eth0=("dhcp")
74
# dhcpcd_eth0="..."
34
75
(-)rc-scripts-1.4.12-vanilla/init.d/net.eth0 (-71 / +102 lines)
Lines 19-27 Link Here
19
}
19
}
20
20
21
checkconfig() {
21
checkconfig() {
22
	if [[ -z "${ifconfig_IFACE}" ]]; then
22
	if [[ -z "${ifconfig_IFACE}" ]] && [[ -z "${ipaddr_IFACE}" ]]; then
23
		eerror "Please make sure that /etc/conf.d/net has \$ifconfig_$IFACE set"
23
		eerror "Please make sure that /etc/conf.d/net has \$ifconfig_$IFACE set"
24
		eerror "(or \$iface_$IFACE for old-style configuration)"
24
		eerror "(or \$iface_$IFACE for old-style configuration)"
25
		eerror "(or \$ipaddr_$IFACE for the iproute2 way)"
25
		return 1
26
		return 1
26
	fi
27
	fi
27
	if [[ -n "${vlans_IFACE}" && ! -x /sbin/vconfig ]]; then
28
	if [[ -n "${vlans_IFACE}" && ! -x /sbin/vconfig ]]; then
Lines 42-53 Link Here
42
# The following variables are set, which should be declared local by
43
# The following variables are set, which should be declared local by
43
# the calling routine.
44
# the calling routine.
44
#	status_IFACE			(up or '')
45
#	status_IFACE			(up or '')
45
#	vlans_IFACE				(space-separated list)
46
#	vlans_IFACE			(space-separated list)
46
#	ifconfig_IFACE			(array of ifconfig lines, replaces iface_IFACE)
47
#	ifconfig_IFACE			(array of ifconfig lines, replaces iface_IFACE)
47
#	dhcpcd_IFACE			(command-line args for dhcpcd)
48
#	dhcpcd_IFACE			(command-line args for dhcpcd)
48
#	routes_IFACE			(array of route lines)
49
#	routes_IFACE			(array of route lines)
49
#	inet6_IFACE				(array of inet6 lines)
50
#	inet6_IFACE			(array of inet6 lines)
50
#	ifconfig_fallback_IFACE	(fallback ifconfig if dhcp fails)
51
#	ifconfig_fallback_IFACE		(fallback ifconfig if dhcp fails)
52
#	ipaddr_IFACE			(array of ip addr lines)
53
#	iproute_IFACE			(array of ip route commands)
54
51
setup_vars() {
55
setup_vars() {
52
	local i iface="${1//\./_}"
56
	local i iface="${1//\./_}"
53
57
Lines 59-64 Link Here
59
	eval inet6_IFACE=( \"\$\{inet6_$iface\[@\]\}\" )
63
	eval inet6_IFACE=( \"\$\{inet6_$iface\[@\]\}\" )
60
	eval ifconfig_fallback_IFACE=( \"\$\{ifconfig_fallback_$iface\[@\]\}\" )
64
	eval ifconfig_fallback_IFACE=( \"\$\{ifconfig_fallback_$iface\[@\]\}\" )
61
65
66
	# iproute2 style config vars
67
	eval ipaddr_IFACE=( \"\$\{ipaddr_$iface\[@\]\}\" )
68
	eval iproute_IFACE=( \"\$\{iproute_$iface\[@\]\}\" )
69
	
62
	# BACKWARD COMPATIBILITY: populate the ifconfig_IFACE array
70
	# BACKWARD COMPATIBILITY: populate the ifconfig_IFACE array
63
	# if iface_IFACE is set (fex. iface_eth0 instead of ifconfig_eth0)
71
	# if iface_IFACE is set (fex. iface_eth0 instead of ifconfig_eth0)
64
	eval local iface_IFACE=\"\$\{iface_$iface\}\"
72
	eval local iface_IFACE=\"\$\{iface_$iface\}\"
Lines 87-106 Link Here
87
iface_start() {
95
iface_start() {
88
	local IFACE=${1} i x retval
96
	local IFACE=${1} i x retval
89
	checkconfig || return 1
97
	checkconfig || return 1
90
98
	
91
	if [[ ${ifconfig_IFACE} != dhcp ]]; then
99
	# Do dhcp if it is enabled in config
92
		# Show the address, but catch if this interface will be inet6 only
100
	if [[ ${ifconfig_IFACE} = dhcp ]] || [[ ${ipaddr_IFACE} = dhcp ]]; then
93
		i=${ifconfig_IFACE%% *}
94
		if [[ ${i} == *.*.*.* ]]; then
95
			ebegin "Bringing ${IFACE} up (${i})"
96
		else
97
			ebegin "Bringing ${IFACE} up"
98
		fi
99
		# ifconfig does not always return failure ..
100
		ifconfig ${IFACE} ${ifconfig_IFACE} >${devnull} && \
101
		ifconfig ${IFACE} up &>${devnull}
102
		eend $? || return $?
103
	else
104
		# Check that eth0 was not brought up by the kernel ...
101
		# Check that eth0 was not brought up by the kernel ...
105
		if [[ ${status_IFACE} == up ]]; then
102
		if [[ ${status_IFACE} == up ]]; then
106
			einfo "Keeping kernel configuration for ${IFACE}"
103
			einfo "Keeping kernel configuration for ${IFACE}"
Lines 130-138 Link Here
130
				return $retval
127
				return $retval
131
			fi
128
			fi
132
		fi
129
		fi
130
		# Show address retrieved
131
		i=$(ifconfig ${IFACE} | grep -m1 -o 'inet addr:[^ ]*' | cut -d: -f2)
132
		[[ -n ${i} ]] && einfo "  ${IFACE} received address ${i}"
133
	# If not a dhcp interface, do ip address stype if config is in this format.
134
	elif [[ -n ${ipaddr_IFACE} ]]; then
135
		ebegin "Bringing ${IFACE} up"
136
		# Force link to up as inet6 will not work without this
137
		/sbin/ip link set dev ${IFACE} up &>${devnull}
138
		# Why bother having the aliases in a diffrent section if they can be handled here
139
		# This covers inet6 addresses as well
140
		if [[ ${#ipaddr_IFACE[@]} -gt 0 ]]; then
141
			for ((i = 0; i < ${#ipaddr_IFACE[@]}; i = i + 1)); do
142
				if [[ ${i} > 0 ]]; then
143
					einfo "  ${IFACE}:${i} ${ipaddr_IFACE[i]%% *}"
144
					/sbin/ip addr add dev ${IFACE} ${ipaddr_IFACE[i]} label ${IFACE}:${i} >${devnull} && \
145
					/sbin/ip addr show dev ${IFACE} | grep "${ipaddr_IFACE[i]%% *}" &>${devnull}
146
					eend $? || return $?
147
				else
148
					einfo "  ${IFACE} ${ipaddr_IFACE[i]%% *}"
149
					/sbin/ip addr add dev ${IFACE} ${ipaddr_IFACE[i]} >${devnull} && \
150
					/sbin/ip addr show dev ${IFACE} | grep "${ipaddr_IFACE[i]%% *}" &>${devnull}
151
					eend $? || return $?
152
				fi
153
154
			done
155
		fi
156
	# Last do ifconfig/iface style addresses
157
	elif [[ -n ${ifconfig_IFACE} ]]; then
158
		# Show the address, but catch if this interface will be inet6 only
159
		i=${ifconfig_IFACE%% *}
160
		if [[ ${i} == *.*.*.* ]]; then
161
			ebegin "Bringing ${IFACE} up (${i})"
162
		else
163
			ebegin "Bringing ${IFACE} up"
164
		fi
165
		# ifconfig does not always return failure ..
166
		ifconfig ${IFACE} ${ifconfig_IFACE} >${devnull} && \
167
		ifconfig ${IFACE} up &>${devnull}
168
		eend $? || return $?
133
	fi
169
	fi
134
170
135
	if [[ ${#ifconfig_IFACE[@]} -gt 1 ]]; then
171
	# Only add aliases if in ifconfig/iface format as when in ipaddr format
172
	# aliases get added along with the primary ip address.
173
	if [[ ${#ifconfig_IFACE[@]} -gt 1 ]] && [[ -z ${ipaddr_IFACE ]]; then
136
		einfo "  Adding aliases"
174
		einfo "  Adding aliases"
137
		for ((i = 1; i < ${#ifconfig_IFACE[@]}; i = i + 1)); do
175
		for ((i = 1; i < ${#ifconfig_IFACE[@]}; i = i + 1)); do
138
			ebegin "    ${IFACE}:${i} (${ifconfig_IFACE[i]%% *})"
176
			ebegin "    ${IFACE}:${i} (${ifconfig_IFACE[i]%% *})"
Lines 140-147 Link Here
140
			eend $?
178
			eend $?
141
		done
179
		done
142
	fi
180
	fi
143
181
	# Only add inet6 addresses if not using ipaddr format.
144
	if [[ -n ${inet6_IFACE} ]]; then
182
	if [[ -n ${inet6_IFACE} ]] && [[ -z ${ipaddr_IFACE} ]]; then
145
		einfo "  Adding inet6 addresses"
183
		einfo "  Adding inet6 addresses"
146
		for ((i = 0; i < ${#inet6_IFACE[@]}; i = i + 1)); do
184
		for ((i = 0; i < ${#inet6_IFACE[@]}; i = i + 1)); do
147
			ebegin "    ${IFACE} inet6 add ${inet6_IFACE[i]}"
185
			ebegin "    ${IFACE} inet6 add ${inet6_IFACE[i]}"
Lines 149-157 Link Here
149
			eend $?
187
			eend $?
150
		done
188
		done
151
	fi
189
	fi
152
190
	# Set routes with ip route and print them - this can also include default route
153
	# Set static routes
191
	if [[ -n ${iproute_IFACE} ]]; then
154
	if [[ -n ${routes_IFACE} ]]; then
192
		einfo "  Adding routes"
193
		for ((i = 0; i < ${#iproute_IFACE[@]}; i = i + 1)); do
194
			ebegin "    ${iproute_IFACE[i]}"
195
			/sbin/ip route add dev ${IFACE} ${iproute_IFACE[i]}
196
			eend $?
197
		done
198
	# Set static routes with the route command only if iproute was not called
199
	elif [[ -n ${routes_IFACE} ]] ; then
155
		einfo "  Adding routes"
200
		einfo "  Adding routes"
156
		for ((i = 0; i < ${#routes_IFACE[@]}; i = i + 1)); do
201
		for ((i = 0; i < ${#routes_IFACE[@]}; i = i + 1)); do
157
			ebegin "    ${routes_IFACE[i]}"
202
			ebegin "    ${routes_IFACE[i]}"
Lines 159-165 Link Here
159
			eend $?
204
			eend $?
160
		done
205
		done
161
	fi
206
	fi
162
163
	# Set default route if applicable to this interface
207
	# Set default route if applicable to this interface
164
	if [[ ${gateway} == ${IFACE}/* ]]; then
208
	if [[ ${gateway} == ${IFACE}/* ]]; then
165
		local ogw=$(/bin/netstat -rn | awk '$1 == "0.0.0.0" {print $2}')
209
		local ogw=$(/bin/netstat -rn | awk '$1 == "0.0.0.0" {print $2}')
Lines 205-264 Link Here
205
# iface_start ran.  Instead query for current configuration and bring
249
# iface_start ran.  Instead query for current configuration and bring
206
# down the interface.
250
# down the interface.
207
iface_stop() {
251
iface_stop() {
208
	local IFACE=${1} i x aliases inet6 count
252
	local IFACE=${1} i x count addresses
253
	# Check and see if interface is dhcp, if so release ip the address.
254
	# This should stop the interface if the only address on it is DHCP.
255
	if [[ -e /var/run/dhcpcd-${IFACE}.pid ]]; then
256
		ebegin "Releasing DHCP lease for ${IFACE}"
257
		for ((count = 0; count < 9; count = count + 1)); do
258
			/sbin/dhcpcd -z ${i} &>${devnull} || break
259
			sleep 1
260
		done
261
		[[ ${count} -lt 9 ]]
262
		eend $? "Timed out"
263
	fi
209
264
210
	# Try to do a simple down (no aliases, no inet6, no dhcp)
265
	# Gather a list of all the addresses on the specified interface.
211
	aliases="$(ifconfig | grep -o "^$IFACE:[0-9]*" | tac)"
266
	# inet6 addresses will be in the list along with inet addresses.
212
	inet6="$(ifconfig ${IFACE} | awk '$1 == "inet6" {print $2}')"
267
	addresses="$(/sbin/ip address show ${IFACE} | grep  'inet.*' | awk '{print $2}' | tac)"
213
	if [[ -z ${aliases} && -z ${inet6} && ! -e /var/run/dhcpcd-${IFACE}.pid ]]; then
268
	# Bring down each ip address on interface, this can be inet or inet6.
269
	# This is done in reverse order to stop any possible errors that
270
	# might crop up. Removing a primary address will cause all secondary
271
	# address on the interface that are on the same subnet to dissapear.
272
	if [[ -n ${addresses} ]]; then
214
		ebegin "Bringing ${IFACE} down"
273
		ebegin "Bringing ${IFACE} down"
215
		ifconfig ${IFACE} down &>/dev/null
274
		for x in ${addresses}; do
216
		eend 0
275
			ebegin "   ${IFACE} del ${x}"
217
		return 0
276
			/sbin/ip addr del dev ${IFACE} ${x}
218
	fi
277
			eend $?
219
278
		done
220
	einfo "Bringing ${IFACE} down"
279
	fi
221
280
	# Stop the interface if it shows link state to be up.
222
	# Stop aliases before primary interface.
281
	if /sbin/ip address show ${IFACE} | grep -o "UP" &>${devnull}; then
223
	# Note this must be done in reverse order, since ifconfig eth0:1 
282
		ebegin "  Stopping ${IFACE}"
224
	# will remove eth0:2, etc.  It might be sufficient to simply remove 
283
		/sbin/ip link set dev ${IFACE} down &>${devnull}
225
	# the base interface but we're being safe here.
284
		eend $?
226
	for i in ${aliases} ${IFACE}; do
285
	fi	    
227
228
		# Delete all the inet6 addresses for this interface
229
		inet6="$(ifconfig ${i} | awk '$1 == "inet6" {print $3}')"
230
		if [[ -n ${inet6} ]]; then
231
			einfo "  Removing inet6 addresses"
232
			for x in ${inet6}; do 
233
				ebegin "    ${IFACE} inet6 del ${x}"
234
				ifconfig ${i} inet6 del ${x}
235
				eend $?
236
			done
237
		fi
238
239
		# Stop DHCP (should be N/A for aliases)
240
		# Don't trust current configuration... investigate ourselves
241
		if /sbin/dhcpcd -z ${i} &>${devnull}; then
242
			ebegin "  Releasing DHCP lease for ${IFACE}"
243
			for ((count = 0; count < 9; count = count + 1)); do
244
				/sbin/dhcpcd -z ${i} &>${devnull} || break
245
				sleep 1
246
			done
247
			[[ ${count} -lt 9 ]]
248
			eend $? "Timed out"
249
		fi
250
		ebegin "  Stopping ${i}"
251
		ifconfig ${i} down &>${devnull}
252
		eend 0
253
	done
254
255
	return 0
286
	return 0
256
}
287
}
257
288
258
start() {
289
start() {
259
	# These variables are set by setup_vars
290
	# These variables are set by setup_vars
260
	local status_IFACE vlans_IFACE dhcpcd_IFACE 
291
	local status_IFACE vlans_IFACE dhcpcd_IFACE 
261
	local -a ifconfig_IFACE routes_IFACE inet6_IFACE
292
	local -a ifconfig_IFACE routes_IFACE inet6_IFACE iproute_IFACE ipaddr_IFACE
262
293
263
	# Call user-defined preup function if it exists
294
	# Call user-defined preup function if it exists
264
	if [[ $(type -t preup) == function ]]; then
295
	if [[ $(type -t preup) == function ]]; then

Return to bug 47659