--- /dev/null
+#!/bin/bash
+###############################################################################
+# #
+# IPFire.org - A linux based firewall #
+# Copyright (C) 2012 IPFire Network Development Team #
+# #
+# 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 <http://www.gnu.org/licenses/>. #
+# #
+###############################################################################
+
+DUMMY_PORT_PATTERN="dN"
+
+function dummy_create() {
+ local device=${1}
+ assert isset device
+
+ local address=${2}
+ isset address || address=$(mac_generate)
+ assert ismac address
+
+ if device_exists ${device}; then
+ log ERROR "dummy device '${device}' does already exist"
+ return ${EXIT_ERROR}
+ fi
+
+ cmd_quiet "ip link add name ${device} address ${address} type dummy"
+ local ret=$?
+
+ if [ ${ret} -eq ${EXIT_OK} ]; then
+ log DEBUG "dummy device '${device}' has been created"
+ else
+ log ERROR "could not create dummy device '${dummy}': ${ret}"
+ fi
+
+ return ${ret}
+}
+
+function dummy_remove() {
+ local device=${1}
+ assert isset device
+
+ device_delete ${device}
+}
--- /dev/null
+#!/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 <http://www.gnu.org/licenses/>. #
+# #
+###############################################################################
+
+. /usr/lib/network/header-port
+
+HOOK_SETTINGS="HOOK ADDRESS"
+
+function _check() {
+ assert ismac ADDRESS
+}
+
+function _create() {
+ while [ $# -gt 0 ]; do
+ case "${1}" in
+ --address=*)
+ ADDRESS=$(cli_get_val ${1})
+ ;;
+ *)
+ warning "Unknown argument '${1}'"
+ ;;
+ esac
+ shift
+ done
+
+ # Generate a random MAC address if non was set.
+ if ! isset ADDRESS; then
+ ADDRESS=$(mac_generate)
+ fi
+
+ local port=$(port_find_free ${DUMMY_PORT_PATTERN})
+ assert isset port
+
+ if config_write $(port_file ${port}) ${HOOK_SETTINGS}; then
+ log INFO "New dummy port '${port}' has been created"
+ fi
+
+ exit ${EXIT_OK}
+}
+
+function _edit() {
+ local port=${1}
+ assert isset port
+ shift
+
+ config_read $(port_file ${port})
+
+ while [ $# -gt 0 ]; do
+ case "${1}" in
+ --address=*)
+ ADDRESS=$(cli_get_val ${1})
+ ;;
+ *)
+ warning "Unknown argument '${1}'"
+ ;;
+ esac
+ shift
+ done
+
+ config_write $(port_file ${port}) ${HOOK_SETTINGS}
+
+ exit ${EXIT_OK}
+}
+
+function _up() {
+ local port=${1}
+ assert isset port
+
+ config_read $(port_file ${port})
+
+ # Create device if not already exists.
+ if ! device_exists ${port}; then
+ dummy_create ${port} "${ADDRESS}"
+ fi
+
+ exit ${EXIT_OK}
+}
+
+function _down() {
+ local port=${1}
+ assert isset port
+
+ if ! device_exists ${port}; then
+ exit ${EXIT_OK}
+ fi
+
+ dummy_remove ${port}
+
+ exit ${EXIT_OK}
+}
+
+function _hotplug_rename() {
+ local port=${1}
+ assert isset port
+
+ local device=${2}
+ assert isset device
+
+ config_read $(port_file ${port})
+
+ if [ "${ADDRESS}" = "$(device_get_address ${device})" ]; then
+ log DEBUG "Device '${device}' equals port '${port}'."
+ exit ${EXIT_OK}
+ fi
+
+ log DEBUG "Device '${device}' does not equal port '${port}'."
+ exit ${EXIT_ERROR}
+}