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.6/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.6/init.d/net.eth0 (-72 / +98 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 34-44 Link Here
34
# The following variables are set, which should be declared local by
35
# The following variables are set, which should be declared local by
35
# the calling routine.
36
# the calling routine.
36
#	status_IFACE	(up or '')
37
#	status_IFACE	(up or '')
37
#	vlans_IFACE		(space-separated list)
38
#	vlans_IFACE	(space-separated list)
38
#	ifconfig_IFACE	(array of ifconfig lines, replaces iface_IFACE)
39
#	ifconfig_IFACE	(array of ifconfig lines, replaces iface_IFACE)
39
#	dhcpcd_IFACE	(command-line args for dhcpcd)
40
#	dhcpcd_IFACE	(command-line args for dhcpcd)
40
#	routes_IFACE	(array of route lines)
41
#	routes_IFACE	(array of route lines)
41
#	inet6_IFACE		(array of inet6 lines)
42
#	inet6_IFACE	(array of inet6 lines)
43
#	ipaddr_IFACE	(array of ip addr lines)
44
#	iproute_IFACE	(array of ip route commands)
45
42
setup_vars() {
46
setup_vars() {
43
	local i iface="${1//\./_}"
47
	local i iface="${1//\./_}"
44
48
Lines 48-54 Link Here
48
	eval dhcpcd_IFACE=\"\$\{dhcpcd_$iface\}\"
52
	eval dhcpcd_IFACE=\"\$\{dhcpcd_$iface\}\"
49
	eval routes_IFACE=( \"\$\{routes_$iface\[@\]\}\" )
53
	eval routes_IFACE=( \"\$\{routes_$iface\[@\]\}\" )
50
	eval inet6_IFACE=( \"\$\{inet6_$iface\[@\]\}\" )
54
	eval inet6_IFACE=( \"\$\{inet6_$iface\[@\]\}\" )
51
55
	# iproute2 style config vars
56
	eval ipaddr_IFACE=( \"\$\{ipaddr_$iface\[@\]\}\" )
57
	eval iproute_IFACE=( \"\$\{iproute_$iface\[@\]\}\" )
58
		
52
	# BACKWARD COMPATIBILITY: populate the ifconfig_IFACE array
59
	# BACKWARD COMPATIBILITY: populate the ifconfig_IFACE array
53
	# if iface_IFACE is set (fex. iface_eth0 instead of ifconfig_eth0)
60
	# if iface_IFACE is set (fex. iface_eth0 instead of ifconfig_eth0)
54
	eval local iface_IFACE=\"\$\{iface_$iface\}\"
61
	eval local iface_IFACE=\"\$\{iface_$iface\}\"
Lines 77-84 Link Here
77
iface_start() {
84
iface_start() {
78
	local IFACE=${1} i x
85
	local IFACE=${1} i x
79
	checkconfig || return 1
86
	checkconfig || return 1
87
	
88
	# Do dhcp if it is enabled in config
89
	if [[ ${ifconfig_IFACE} = dhcp ]] || [[ ${iproute_IFACE} = dhcp ]]; then
90
		# Check that eth0 was not brought up by the kernel ...
91
		if [[ ${status_IFACE} == up ]]; then
92
			einfo "Keeping kernel configuration for ${IFACE}"
93
		else
94
			ebegin "Bringing ${IFACE} up via DHCP"
95
			/sbin/dhcpcd ${dhcpcd_IFACE} ${IFACE}
96
			eend $? || return $?
97
		fi
98
		# Show address retrieved
99
		i=$(ifconfig ${IFACE} | grep -m1 -o 'inet addr:[^ ]*' | cut -d: -f2)
100
		[[ -n ${i} ]] && einfo "  ${IFACE} received address ${i}"
101
	# If not a dhcp interface, do ip address stype if config is in this format.
102
	elif [[ -n ${ipaddr_IFACE} ]]; then
103
		ebegin "Bringing ${IFACE} up"
104
		# Force link to up as inet6 will not work without this
105
		/sbin/ip link set dev ${IFACE} up &>${devnull}
106
		# Why bother having the aliases in a diffrent section if they can be handled here
107
		# This covers inet6 addresses as well
108
		if [[ ${#ipaddr_IFACE[@]} -gt 0 ]]; then
109
			for ((i = 0; i < ${#ipaddr_IFACE[@]}; i = i + 1)); do
110
				if [[ ${i} > 0 ]]; then
111
					einfo "  ${IFACE}:${i} ${ipaddr_IFACE[i]%% *}"
112
					/sbin/ip addr add dev ${IFACE} ${ipaddr_IFACE[i]} label ${IFACE}:${i} >${devnull} && \
113
					/sbin/ip addr show dev ${IFACE} | grep "${ipaddr_IFACE[i]%% *}" &>${devnull}
114
					eend $? || return $?
115
				else
116
					einfo "  ${IFACE} ${ipaddr_IFACE[i]%% *}"
117
					/sbin/ip addr add dev ${IFACE} ${ipaddr_IFACE[i]} >${devnull} && \
118
					/sbin/ip addr show dev ${IFACE} | grep "${ipaddr_IFACE[i]%% *}" &>${devnull}
119
					eend $? || return $?
120
				fi
80
121
81
	if [[ ${ifconfig_IFACE} != dhcp ]]; then
122
			done
123
		fi
124
	# Last do ifconfig/iface style addresses
125
	elif [[ -n ${ifconfig_IFACE} ]]; then
82
		# Show the address, but catch if this interface will be inet6 only
126
		# Show the address, but catch if this interface will be inet6 only
83
		i=${ifconfig_IFACE%% *}
127
		i=${ifconfig_IFACE%% *}
84
		if [[ ${i} == *.*.*.* ]]; then
128
		if [[ ${i} == *.*.*.* ]]; then
Lines 90-110 Link Here
90
		/sbin/ifconfig ${IFACE} ${ifconfig_IFACE} >${devnull} && \
134
		/sbin/ifconfig ${IFACE} ${ifconfig_IFACE} >${devnull} && \
91
		/sbin/ifconfig ${IFACE} &>${devnull}
135
		/sbin/ifconfig ${IFACE} &>${devnull}
92
		eend $? || return $?
136
		eend $? || return $?
93
	else
94
		# Check that eth0 was not brought up by the kernel ...
95
		if [[ ${status_IFACE} == up ]]; then
96
			einfo "Keeping kernel configuration for ${IFACE}"
97
		else
98
			ebegin "Bringing ${IFACE} up via DHCP"
99
			/sbin/dhcpcd ${dhcpcd_IFACE} ${IFACE}
100
			eend $? || return $?
101
		fi
102
		# Show address retrieved
103
		i=$(ifconfig ${IFACE} | grep -m1 -o 'inet addr:[^ ]*' | cut -d: -f2)
104
		[[ -n ${i} ]] && einfo "  ${IFACE} received address ${i}"
105
	fi
137
	fi
106
138
	# Only add aliases if in ifconfig/iface format as when in ipaddr format 
107
	if [[ ${#ifconfig_IFACE[@]} -gt 1 ]]; then
139
	# aliases get added along with the primary ip address.
140
	if [[ ${#ifconfig_IFACE[@]} -gt 1 ]] && [[ -z ${ipaddr_IFACE} ]]; then
108
		einfo "  Adding aliases"
141
		einfo "  Adding aliases"
109
		for ((i = 1; i < ${#ifconfig_IFACE[@]}; i = i + 1)); do
142
		for ((i = 1; i < ${#ifconfig_IFACE[@]}; i = i + 1)); do
110
			ebegin "    ${IFACE}:${i} (${ifconfig_IFACE[i]%% *})"
143
			ebegin "    ${IFACE}:${i} (${ifconfig_IFACE[i]%% *})"
Lines 112-119 Link Here
112
			eend $?
145
			eend $?
113
		done
146
		done
114
	fi
147
	fi
115
148
	# Only add inet6 addresses if not using ipaddr format.
116
	if [[ -n ${inet6_IFACE} ]]; then
149
	if [[ -n ${inet6_IFACE} ]] && [[ -z ${ipaddr_IFACE} ]]; then
117
		einfo "  Adding inet6 addresses"
150
		einfo "  Adding inet6 addresses"
118
		for ((i = 0; i < ${#inet6_IFACE[@]}; i = i + 1)); do
151
		for ((i = 0; i < ${#inet6_IFACE[@]}; i = i + 1)); do
119
			ebegin "    ${IFACE} inet6 add ${inet6_IFACE[i]}"
152
			ebegin "    ${IFACE} inet6 add ${inet6_IFACE[i]}"
Lines 121-129 Link Here
121
			eend $?
154
			eend $?
122
		done
155
		done
123
	fi
156
	fi
124
157
	# Set routes with ip route and print them - this can also include default route
125
	# Set static routes
158
	if [[ -n ${iproute_IFACE} ]]; then
126
	if [[ -n ${routes_IFACE} ]]; then
159
		einfo "  Adding routes"
160
		for ((i = 0; i < ${#iproute_IFACE[@]}; i = i + 1)); do
161
			ebegin "    ${iproute_IFACE[i]}"
162
			/sbin/ip route add dev ${IFACE} ${iproute_IFACE[i]}
163
			eend $?
164
		done
165
	# Set static routes with the route command only if iproute was not called
166
	elif [[ -n ${routes_IFACE} ]] ; then
127
		einfo "  Adding routes"
167
		einfo "  Adding routes"
128
		for ((i = 0; i < ${#routes_IFACE[@]}; i = i + 1)); do
168
		for ((i = 0; i < ${#routes_IFACE[@]}; i = i + 1)); do
129
			ebegin "    ${routes_IFACE[i]}"
169
			ebegin "    ${routes_IFACE[i]}"
Lines 131-137 Link Here
131
			eend $?
171
			eend $?
132
		done
172
		done
133
	fi
173
	fi
134
135
	# Set default route if applicable to this interface
174
	# Set default route if applicable to this interface
136
	if [[ ${gateway} == ${IFACE}/* ]]; then
175
	if [[ ${gateway} == ${IFACE}/* ]]; then
137
		local ogw=$(/bin/netstat -rn | awk '$1 == "0.0.0.0" {print $2}')
176
		local ogw=$(/bin/netstat -rn | awk '$1 == "0.0.0.0" {print $2}')
Lines 177-236 Link Here
177
# iface_start ran.  Instead query for current configuration and bring
216
# iface_start ran.  Instead query for current configuration and bring
178
# down the interface.
217
# down the interface.
179
iface_stop() {
218
iface_stop() {
180
	local IFACE=${1} i x aliases inet6 count
219
	local IFACE=${1} i x count addresses
181
220
	# Check and see if interface is dhcp, if so release ip the address.
182
	# Try to do a simple down (no aliases, no inet6, no dhcp)
221
	# This should stop the interface if the only address on it is DHCP.
183
	aliases="$(/sbin/ifconfig | grep -o "^$IFACE:[0-9]*" | tac)"
222
	if [[ -e /var/run/dhcpcd-${IFACE}.pid ]]; then
184
	inet6="$(ifconfig ${IFACE} | awk '$1 == "inet6" {print $2}')"
223
		ebegin "Releasing DHCP lease for ${IFACE}"
185
	if [[ -z ${aliases} && -z ${inet6} && ! -e /var/run/dhcpcd-${IFACE}.pid ]]; then
224
		for ((count = 0; count < 9; count = count + 1)); do
225
			/sbin/dhcpcd -z ${i} &>${devnull} || break
226
			sleep 1
227
		done
228
		[[ ${count} -lt 9 ]]
229
		eend $? "Timed out"
230
	fi
231
	
232
	# Gather a list of all the addresses on the specified interface.
233
	# inet6 addresses will be in the list along with inet addresses.
234
	addresses="$(/sbin/ip address show ${IFACE} | grep  'inet.*' | awk '{print $2}' | tac)"
235
	# Bring down each ip address on interface, this can be inet or inet6.
236
	# This is done in reverse order to stop any possible errors that
237
	# might crop up. Removing a primary address will cause all secondary
238
	# address on the interface that are on the same subnet to dissapear.
239
	if [[ -n ${addresses} ]]; then
186
		ebegin "Bringing ${IFACE} down"
240
		ebegin "Bringing ${IFACE} down"
187
		/sbin/ifconfig ${IFACE} down &>/dev/null
241
		for x in ${addresses}; do
188
		eend 0
242
			ebegin "   ${IFACE} del ${x}"
189
		return 0
243
			/sbin/ip addr del dev ${IFACE} ${x}
190
	fi
244
			eend $?
191
245
		done
192
	einfo "Bringing ${IFACE} down"
246
	fi
193
247
	# Stop the interface if it shows link state to be up.
194
	# Stop aliases before primary interface.
248
	if /sbin/ip address show ${IFACE} | grep -o "UP" &>${devnull}; then
195
	# Note this must be done in reverse order, since ifconfig eth0:1 
249
		ebegin "  Stopping ${IFACE}"		
196
	# will remove eth0:2, etc.  It might be sufficient to simply remove 
250
		/sbin/ip link set dev ${IFACE} down &>${devnull}
197
	# the base interface but we're being safe here.
251
		eend $?
198
	for i in ${aliases} ${IFACE}; do
252
	fi
199
200
		# Delete all the inet6 addresses for this interface
201
		inet6="$(ifconfig ${i} | awk '$1 == "inet6" {print $2}')"
202
		if [[ -n ${inet6} ]]; then
203
			einfo "  Removing inet6 addresses"
204
			for x in ${inet6}; do 
205
				ebegin "    ${IFACE} inet6 del ${x}"
206
				/sbin/ifconfig ${i} inet6 del ${x}
207
				eend $?
208
			done
209
		fi
210
211
		# Stop DHCP (should be N/A for aliases)
212
		# Don't trust current configuration... investigate ourselves
213
		if /sbin/dhcpcd -z ${i} &>${devnull}; then
214
			ebegin "  Releasing DHCP lease for ${IFACE}"
215
			for ((count = 0; count < 9; count = count + 1)); do
216
				/sbin/dhcpcd -z ${i} &>${devnull} || break
217
				sleep 1
218
			done
219
			[[ ${count} -lt 9 ]]
220
			eend $? "Timed out"
221
		fi
222
		ebegin "  Stopping ${i}"
223
		/sbin/ifconfig ${i} down &>${devnull}
224
		eend 0
225
	done
226
227
	return 0
253
	return 0
228
}
254
}
229
255
230
start() {
256
start() {
231
	# These variables are set by setup_vars
257
	# These variables are set by setup_vars
232
	local status_IFACE vlans_IFACE dhcpcd_IFACE 
258
	local status_IFACE vlans_IFACE dhcpcd_IFACE 
233
	local -a ifconfig_IFACE routes_IFACE inet6_IFACE
259
	local -a ifconfig_IFACE routes_IFACE inet6_IFACE iproute_IFACE ipaddr_IFACE
234
260
235
	# Call user-defined preup function if it exists
261
	# Call user-defined preup function if it exists
236
	if [[ $(type -t preup) == function ]]; then
262
	if [[ $(type -t preup) == function ]]; then

Return to bug 47659