Work cleanly with bridges on kernels without TCP, #197791.
This commit is contained in:
parent
a1f80bc7a7
commit
80124a050c
@ -3,6 +3,7 @@
|
||||
|
||||
01 Nov 2007; Roy Marples <uberlord@gentoo.org>:
|
||||
|
||||
Work cleanly with bridges on kernels without TCP, #197791.
|
||||
Fix fallback, #197788.
|
||||
|
||||
* baselayout-2.0.0_rc6 (31 Oct 2007)
|
||||
|
@ -33,7 +33,7 @@ bridge_pre_start() {
|
||||
|
||||
if ! _is_bridge; then
|
||||
ebegin "Creating bridge ${IFACE}"
|
||||
if ! brctl addbr "${IFACE}" ; then
|
||||
if ! brctl addbr "${IFACE}"; then
|
||||
eend 1
|
||||
return 1
|
||||
fi
|
||||
@ -50,15 +50,18 @@ bridge_pre_start() {
|
||||
done
|
||||
unset IFS
|
||||
|
||||
if [ -n "${ports}" ] ; then
|
||||
if [ -n "${ports}" ]; then
|
||||
einfo "Adding ports to ${IFACE}"
|
||||
eindent
|
||||
|
||||
local OIFACE="${IFACE}"
|
||||
for x in ${ports}; do
|
||||
ebegin "${x}"
|
||||
ifconfig "${x}" promisc up
|
||||
if ! brctl addif "${IFACE}" "${x}" ; then
|
||||
ifconfig "${x}" -promisc 2>/dev/null
|
||||
local IFACE="${x}"
|
||||
_set_flag promisc
|
||||
_up
|
||||
if ! brctl addif "${OIFACE}" "${x}"; then
|
||||
_set_flag -promisc
|
||||
eend 1
|
||||
return 1
|
||||
fi
|
||||
@ -78,7 +81,7 @@ bridge_post_stop() {
|
||||
if _is_bridge ; then
|
||||
ebegin "Destroying bridge ${IFACE}"
|
||||
_down
|
||||
ports="$( brctl show 2>/dev/null | \
|
||||
ports="$(brctl show 2>/dev/null | \
|
||||
sed -n -e '/^'"${IFACE}"'[[:space:]]/,/^\S/ { /^\('"${IFACE}"'[[:space:]]\|\t\)/s/^.*\t//p }')"
|
||||
delete=true
|
||||
iface=${IFACE}
|
||||
@ -87,9 +90,9 @@ bridge_post_stop() {
|
||||
# Work out if we're added to a bridge for removal or not
|
||||
eval set -- $(brctl show 2>/dev/null | sed -e "s/'/'\\\\''/g" -e "s/$/'/g" -e "s/^/'/g")
|
||||
local line=
|
||||
for line in "$@" ; do
|
||||
for line in "$@"; do
|
||||
set -- ${line}
|
||||
if [ "$3" = "${IFACE}" ] ; then
|
||||
if [ "$3" = "${IFACE}" ]; then
|
||||
iface=$1
|
||||
break
|
||||
fi
|
||||
@ -98,14 +101,15 @@ bridge_post_stop() {
|
||||
extra=" from ${iface}"
|
||||
fi
|
||||
|
||||
for port in ${ports} ; do
|
||||
for port in ${ports}; do
|
||||
ebegin "Removing port ${port}${extra}"
|
||||
ifconfig "${port}" -promisc
|
||||
local IFACE="${port}"
|
||||
_set_flag -promisc
|
||||
brctl delif "${iface}" "${port}"
|
||||
eend $?
|
||||
done
|
||||
|
||||
if ${delete} ; then
|
||||
if ${delete}; then
|
||||
eoutdent
|
||||
brctl delbr "${iface}"
|
||||
eend $?
|
||||
|
@ -42,6 +42,10 @@ _is_wireless() {
|
||||
grep -Eq "^[[:space:]]*${IFACE}:" /proc/net/wireless
|
||||
}
|
||||
|
||||
_set_flag() {
|
||||
ifconfig "${IFACE}" "$1"
|
||||
}
|
||||
|
||||
_get_mac_address() {
|
||||
local mac=$(LC_ALL=C ifconfig "${IFACE}" | \
|
||||
sed -n -e 's/.* HWaddr \(..:..:..:..:..:..\).*/\1/p')
|
||||
|
@ -43,6 +43,15 @@ _is_wireless() {
|
||||
grep -Eq "^[[:space:]]*${IFACE}:" /proc/net/wireless
|
||||
}
|
||||
|
||||
_set_flag() {
|
||||
local flag=$1 opt="on"
|
||||
if [ "${flag#-}" != "${flag}" ]; then
|
||||
flag=${flag#-}
|
||||
opt="off"
|
||||
fi
|
||||
ip link set "${IFACE}" "${flag}" "${opt}"
|
||||
}
|
||||
|
||||
_get_mac_address() {
|
||||
local mac=$(LC_ALL=C ip link show "${IFACE}" | sed -n \
|
||||
-e 'y/abcdef/ABCDEF/' \
|
||||
@ -181,7 +190,8 @@ iproute2_pre_start() {
|
||||
}
|
||||
|
||||
iproute2_post_start() {
|
||||
ip route flush table cache dev "${IFACE}"
|
||||
# Kernel may not have tcp built in
|
||||
[ -e /proc/net/route ] && ip route flush table cache dev "${IFACE}"
|
||||
}
|
||||
|
||||
iproute2_post_stop() {
|
||||
|
@ -349,7 +349,7 @@ _load_config() {
|
||||
local fallback="$(_get_array fallback_${IFVAR})"
|
||||
|
||||
if [ "${IFACE}" = "lo" -o "${IFACE}" = "lo0" ] ; then
|
||||
config="127.0.0.1/8
|
||||
[ "${config}" != "null" ] && config="127.0.0.1/8
|
||||
${config}"
|
||||
else
|
||||
if [ -z "${config}" ] ; then
|
||||
@ -495,9 +495,11 @@ start() {
|
||||
local hidefirstroute=false first=true
|
||||
local routes="$(_get_array "routes_${IFVAR}")"
|
||||
if [ "${IFACE}" = "lo" -o "${IFACE}" = "lo0" ] ; then
|
||||
routes="127.0.0.0/8 via 127.0.0.1
|
||||
if [ "${config_0}" != "null" ]; then
|
||||
routes="127.0.0.0/8 via 127.0.0.1
|
||||
${routes}"
|
||||
hidefirstroute=true
|
||||
hidefirstroute=true
|
||||
fi
|
||||
fi
|
||||
local IFS="$__IFS"
|
||||
for cmd in ${routes}; do
|
||||
|
Loading…
Reference in New Issue
Block a user