|
|
| |
if ! _is_bridge; then | if ! _is_bridge; then |
ebegin "Creating bridge ${IFACE}" | ebegin "Creating bridge ${IFACE}" |
if ! brctl addbr "${IFACE}" ; then |
if ! brctl addbr "${IFACE}"; then |
eend 1 | eend 1 |
return 1 | return 1 |
fi | fi |
|
|
done | done |
unset IFS | unset IFS |
| |
if [ -n "${ports}" ] ; then |
if [ -n "${ports}" ]; then |
einfo "Adding ports to ${IFACE}" | einfo "Adding ports to ${IFACE}" |
eindent | eindent |
| |
for x in ${ports}; do | for x in ${ports}; do |
ebegin "${x}" | ebegin "${x}" |
ifconfig "${x}" promisc up |
local OIFACE="${IFACE}" |
if ! brctl addif "${IFACE}" "${x}" ; then |
local IFACE="${x}" |
ifconfig "${x}" -promisc 2>/dev/null |
_set_flag promisc |
|
_up |
|
if ! brctl addif "${OIFACE}" "${x}"; then |
|
_set_flag -promisc |
eend 1 | eend 1 |
return 1 | return 1 |
fi | fi |
|
|
if _is_bridge ; then | if _is_bridge ; then |
ebegin "Destroying bridge ${IFACE}" | ebegin "Destroying bridge ${IFACE}" |
_down | _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 }')" | sed -n -e '/^'"${IFACE}"'[[:space:]]/,/^\S/ { /^\('"${IFACE}"'[[:space:]]\|\t\)/s/^.*\t//p }')" |
delete=true | delete=true |
iface=${IFACE} | iface=${IFACE} |
|
|
# Work out if we're added to a bridge for removal or not | # 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") | eval set -- $(brctl show 2>/dev/null | sed -e "s/'/'\\\\''/g" -e "s/$/'/g" -e "s/^/'/g") |
local line= | local line= |
for line in "$@" ; do |
for line in "$@"; do |
set -- ${line} | set -- ${line} |
if [ "$3" = "${IFACE}" ] ; then |
if [ "$3" = "${IFACE}" ]; then |
iface=$1 | iface=$1 |
break | break |
fi | fi |
|
|
extra=" from ${iface}" | extra=" from ${iface}" |
fi | fi |
| |
for port in ${ports} ; do |
for port in ${ports}; do |
ebegin "Removing port ${port}${extra}" | ebegin "Removing port ${port}${extra}" |
ifconfig "${port}" -promisc |
local IFACE="${port}" |
|
_set_flag -promisc |
brctl delif "${iface}" "${port}" | brctl delif "${iface}" "${port}" |
eend $? | eend $? |
done | done |
| |
if ${delete} ; then |
if ${delete}; then |
eoutdent | eoutdent |
brctl delbr "${iface}" | brctl delbr "${iface}" |
eend $? | eend $? |