From: Michael Tremer Date: Sat, 10 Jul 2010 17:21:23 +0000 (+0200) Subject: network: Put bridge functions into extra file. X-Git-Url: http://git.ipfire.org/?p=people%2Farne_f%2Fnetwork.git;a=commitdiff_plain;h=837995e6b63acfbe845a10b0c456f63af00b2a37 network: Put bridge functions into extra file. --- diff --git a/functions.bridge b/functions.bridge new file mode 100644 index 00000000..4a327896 --- /dev/null +++ b/functions.bridge @@ -0,0 +1,113 @@ +#!/bin/bash +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2010 Michael Tremer & Christian Schmidt # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +# # +############################################################################### + +function bridge_attach_device() { + local bridge=${1} + local device=${2} + + assert isset bridge + assert isset device + + assert device_exists ${bridge} + assert device_exists ${device} + + # If device is already attached, exit silently + if listmatch ${device} $(bridge_get_members ${bridge}); then + return ${EXIT_OK} + fi + + log INFO "Attaching device '${device}' to bridge '${bridge}'." + + brctl addif ${bridge} ${device} +} + +function bridge_detach_device() { + local bridge=${1} + local device=${2} + + assert isset bridge + assert isset device + + if ! device_exists ${bridge}; then + error "Bridge '${bridge}' does not exist." + return ${EXIT_ERROR} + fi + + if ! device_exists ${device}; then + error "Device '${device}' does not exist." + return ${EXIT_ERROR} + fi + + log INFO "Detaching device '${device}' from bridge '${bridge}'." + + brctl delif ${bridge} ${device} +} + +function bridge_get_members() { + local bridge=${1} + + assert isset bridge + + local member + for member in ${SYS_CLASS_NET}/${bridge}/brif/*; do + member=$(basename ${member}) + if device_exists ${member}; then + echo "${member}" + fi + done +} + +function bridge_is_forwarding() { + local seconds=45 + local zone=${1} + + bridge_has_carrier ${zone} || return ${EXIT_ERROR} + + local device + while [ ${seconds} -gt 0 ]; do + for device in ${SYS_CLASS_NET}/${zone}/brif/*; do + [ -e "${device}/state" ] || continue + if [ "$(<${device}/state)" = "3" ]; then + return ${EXIT_OK} + fi + done + sleep 1 + seconds=$((${seconds} - 1)) + done + + return ${EXIT_ERROR} +} + +function bridge_has_carrier() { + local zone=${1} + + local has_carrier=${EXIT_ERROR} + + local device + for device in ${SYS_CLASS_NET}/${zone}/brif/*; do + device=$(basename ${device}) + device_exists ${device} || continue + + device_has_carrier ${device} && has_carrier=${EXIT_OK} + done + + return ${has_carrier} +} diff --git a/functions.device b/functions.device index 516edaa6..9ed51ac2 100644 --- a/functions.device +++ b/functions.device @@ -650,99 +650,6 @@ function device_virtual_get_by_parent_and_vid() { return ${EXIT_ERROR} } -function bridge_attach_device() { - local bridge=${1} - local device=${2} - - assert isset bridge - assert isset device - - assert device_exists ${bridge} - assert device_exists ${device} - - # If device is already attached, exit silently - if listmatch ${device} $(bridge_get_members ${bridge}); then - return ${EXIT_OK} - fi - - log INFO "Attaching device '${device}' to bridge '${bridge}'." - - brctl addif ${bridge} ${device} -} - -function bridge_detach_device() { - local bridge=${1} - local device=${2} - - assert isset bridge - assert isset device - - if ! device_exists ${bridge}; then - error "Bridge '${bridge}' does not exist." - return ${EXIT_ERROR} - fi - - if ! device_exists ${device}; then - error "Device '${device}' does not exist." - return ${EXIT_ERROR} - fi - - log INFO "Detaching device '${device}' from bridge '${bridge}'." - - brctl delif ${bridge} ${device} -} - -function bridge_get_members() { - local bridge=${1} - - assert isset bridge - - local member - for member in ${SYS_CLASS_NET}/${bridge}/brif/*; do - member=$(basename ${member}) - if device_exists ${member}; then - echo "${member}" - fi - done -} - -function bridge_is_forwarding() { - local seconds=45 - local zone=${1} - - bridge_has_carrier ${zone} || return ${EXIT_ERROR} - - local device - while [ ${seconds} -gt 0 ]; do - for device in ${SYS_CLASS_NET}/${zone}/brif/*; do - [ -e "${device}/state" ] || continue - if [ "$(<${device}/state)" = "3" ]; then - return ${EXIT_OK} - fi - done - sleep 1 - seconds=$((${seconds} - 1)) - done - - return ${EXIT_ERROR} -} - -function bridge_has_carrier() { - local zone=${1} - - local has_carrier=${EXIT_ERROR} - - local device - for device in ${SYS_CLASS_NET}/${zone}/brif/*; do - device=$(basename ${device}) - device_exists ${device} || continue - - device_has_carrier ${device} && has_carrier=${EXIT_OK} - done - - return ${has_carrier} -} - function device_has_ipv4() { local device=${1} local addr=${2}