From: Michael Tremer Date: Sat, 10 Jul 2010 17:33:39 +0000 (+0200) Subject: network: Move virtual functions to seperate file and rename them. X-Git-Tag: 001~57 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9620ecef5361c40be1a63035f9bb06572eeb85c2;p=network.git network: Move virtual functions to seperate file and rename them. --- diff --git a/functions.device b/functions.device index 9ed51ac2..70346c4b 100644 --- a/functions.device +++ b/functions.device @@ -504,152 +504,6 @@ function device_discover() { done } -function device_create_virtual() { - log WARN "Called deprecated function device_create_virtual" - device_virtual_create $@ -} - -function device_virtual_create() { - local port=$(devicify ${1}) - local vid=${2} - local mac=${3} - local newport=${port}v${vid} - - if [ -z "${mac}" ]; then - mac=$(mac_generate) - fi - - log INFO "Creating virtual device '${newport}' with address '${mac}'." - - local oldport=$(device_virtual_get_by_parent_and_vid ${port} ${vid}) - - if device_exists ${oldport}; then - local differences - - if [ "${oldport}" != "${newport}" ]; then - differences="${differences} name" - fi - if [ "$(device_get_address ${oldport})" != "${mac}" ]; then - differences="${differences} address" - fi - - echo "differences: $differences" - - if [ -n "${differences}" ]; then - if device_is_used ${oldport}; then - error_log "There was a device '${oldport}' set up with VID '${vid}' and parent '${port}' which is used somewhere else. Cannot go on." - return ${EXIT_ERROR} - else - log DEBUG "There is a device '${oldport}' but it not used, so we grab it to ourselves." - fi - else - log DEBUG "Device '${newport}' already exists and reflects our configuration. Go on." - - device_set_up ${oldport} - return ${EXIT_OK} - fi - - else - log DEBUG "Virtual device '${newport}' does not exist, yet." - - vconfig set_name_type DEV_PLUS_VID_NO_PAD >/dev/null - vconfig add ${port} ${vid} >/dev/null - - if [ $? -ne ${EXIT_OK} ]; then - error_log "Could not create virtual device '${newport}'." - return ${EXIT_ERROR} - fi - - oldport=$(device_virtual_get_by_parent_and_vid ${port} ${vid}) - - fi - - assert device_exists ${oldport} - - if ! device_exists ${oldport}; then - error "Could not determine the created virtual device '${newport}'." - return ${EXIT_ERROR} - fi - - # The device is expected to be named like ${port}.${vid} - # and will be renamed to the virtual schema - device_set_name ${oldport} ${newport} - - if [ $? -ne ${EXIT_OK} ]; then - error_log "Could not set name of virtual device '${newport}'." - return ${EXIT_ERROR} - fi - - assert device_exists ${newport} - - # Setting new mac address - device_set_address ${newport} ${mac} - - if [ $? -ne ${EXIT_OK} ]; then - error_log "Could not set address '${mac}' to virtual device '${newport}'." - return ${EXIT_ERROR} - fi - - # Bring up the new device - device_set_up ${newport} - - return ${EXIT_OK} -} - -function device_virtual_remove() { - local device=$(devicify ${1}) - - log INFO "Removing virtual device '${device}' with address '$(macify ${device})'." - - device_set_down ${device} - - vconfig rem ${device} >/dev/null - - if [ $? -ne ${EXIT_OK} ]; then - error_log "Could not remote virtual device '${newport}'." - return ${EXIT_ERROR} - fi - - return ${EXIT_OK} -} - -function device_virtual_get_parent() { - local device=${1} - - local parent=$(grep "^${device}" < /proc/net/vlan/config | awk '{ print $NF }') - - if device_exists ${parent}; then - echo "${parent}" - return ${EXIT_OK} - fi - - return ${EXIT_ERROR} -} - -function device_virtual_get_by_parent_and_vid() { - local parent=${1} - local vid=${2} - - assert isset parent - assert isset vid - - local v_port - local v_id - local v_parent - - assert [ -e "/proc/net/vlan/config" ] - - fgrep '|' < /proc/net/vlan/config | tr -d '|' | \ - while read v_port v_id v_parent; do - if [ "${v_parent}" = "${parent}" ] && [ "${v_id}" = "${vid}" ]; then - echo "${v_port}" - return ${EXIT_OK} - fi - done - - return ${EXIT_ERROR} -} - function device_has_ipv4() { local device=${1} local addr=${2} diff --git a/functions.virtual b/functions.virtual index a3e79424..9d35e4e8 100644 --- a/functions.virtual +++ b/functions.virtual @@ -1,8 +1,192 @@ #!/bin/bash -# XXX header missing +############################################################################### +# # +# 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 virtual_init() { module_load 8021q } init_register virtual_init + +function device_create_virtual() { + log WARN "Called deprecated function device_create_virtual" + device_virtual_create $@ +} + +function virtual_create() { + local port=$(devicify ${1}) + local vid=${2} + local mac=${3} + local newport=${port}v${vid} + + if [ -z "${mac}" ]; then + mac=$(mac_generate) + fi + + log INFO "Creating virtual device '${newport}' with address '${mac}'." + + local oldport=$(virtual_get_by_parent_and_vid ${port} ${vid}) + + if device_exists ${oldport}; then + local differences + + if [ "${oldport}" != "${newport}" ]; then + differences="${differences} name" + fi + if [ "$(device_get_address ${oldport})" != "${mac}" ]; then + differences="${differences} address" + fi + + echo "differences: $differences" + + if [ -n "${differences}" ]; then + if device_is_used ${oldport}; then + error_log "There was a device '${oldport}' set up with VID '${vid}' and parent '${port}' which is used somewhere else. Cannot go on." + return ${EXIT_ERROR} + else + log DEBUG "There is a device '${oldport}' but it not used, so we grab it to ourselves." + fi + else + log DEBUG "Device '${newport}' already exists and reflects our configuration. Go on." + + device_set_up ${oldport} + return ${EXIT_OK} + fi + + else + log DEBUG "Virtual device '${newport}' does not exist, yet." + + vconfig set_name_type DEV_PLUS_VID_NO_PAD >/dev/null + vconfig add ${port} ${vid} >/dev/null + + if [ $? -ne ${EXIT_OK} ]; then + error_log "Could not create virtual device '${newport}'." + return ${EXIT_ERROR} + fi + + oldport=$(virtual_get_by_parent_and_vid ${port} ${vid}) + + fi + + assert device_exists ${oldport} + + if ! device_exists ${oldport}; then + error "Could not determine the created virtual device '${newport}'." + return ${EXIT_ERROR} + fi + + # The device is expected to be named like ${port}.${vid} + # and will be renamed to the virtual schema + device_set_name ${oldport} ${newport} + + if [ $? -ne ${EXIT_OK} ]; then + error_log "Could not set name of virtual device '${newport}'." + return ${EXIT_ERROR} + fi + + assert device_exists ${newport} + + # Setting new mac address + device_set_address ${newport} ${mac} + + if [ $? -ne ${EXIT_OK} ]; then + error_log "Could not set address '${mac}' to virtual device '${newport}'." + return ${EXIT_ERROR} + fi + + # Bring up the new device + device_set_up ${newport} + + return ${EXIT_OK} +} + +function virtual_remove() { + local device=$(devicify ${1}) + + log INFO "Removing virtual device '${device}' with address '$(macify ${device})'." + + device_set_down ${device} + + vconfig rem ${device} >/dev/null + + if [ $? -ne ${EXIT_OK} ]; then + error_log "Could not remote virtual device '${newport}'." + return ${EXIT_ERROR} + fi + + return ${EXIT_OK} +} + +function virtual_get_parent() { + local device=${1} + + local parent=$(grep "^${device}" < /proc/net/vlan/config | awk '{ print $NF }') + + if device_exists ${parent}; then + echo "${parent}" + return ${EXIT_OK} + fi + + return ${EXIT_ERROR} +} + +function virtual_get_by_parent_and_vid() { + local parent=${1} + local vid=${2} + + assert isset parent + assert isset vid + + local v_port + local v_id + local v_parent + + assert [ -e "/proc/net/vlan/config" ] + + fgrep '|' < /proc/net/vlan/config | tr -d '|' | \ + while read v_port v_id v_parent; do + if [ "${v_parent}" = "${parent}" ] && [ "${v_id}" = "${vid}" ]; then + echo "${v_port}" + return ${EXIT_OK} + fi + done + + return ${EXIT_ERROR} +} + +function device_virtual_create() { + log WARN "Called deprecated function device_virtual_create" + virtual_create $@ +} + +function device_virtual_remove() { + log WARN "Called deprecated function device_virtual_remove" + virtual_remove $@ +} + +function device_virtual_get_parent() { + log WARN "Called deprecated function device_virtual_get_parent" + virtual_get_parent $@ +} + +function device_virtual_get_by_parent_and_vid() { + log WARN "Called deprecated function device_virtual_get_by_parent_and_vid" + virtual_get_by_parent_and_vid $@ +}