mbox

dhcp: merge hooks ipv4-dhcp and ipv6-dhcp

Message ID 1499687123-6711-1-git-send-email-jonatan.schlag@ipfire.org
State Superseded
Headers

Message

Jonatan Schlag July 10, 2017, 9:45 p.m. UTC
  We use on and off instead of true and false
to keep the config files more humand readable.

Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
---
 Makefile.am                 |   3 +-
 src/hooks/configs/dhcp      | 223 ++++++++++++++++++++++++++++++++++++++++++++
 src/hooks/configs/ipv4-dhcp | 122 ------------------------
 src/hooks/configs/ipv6-dhcp | 100 --------------------
 4 files changed, 224 insertions(+), 224 deletions(-)
 create mode 100644 src/hooks/configs/dhcp
 delete mode 100644 src/hooks/configs/ipv4-dhcp
 delete mode 100644 src/hooks/configs/ipv6-dhcp
  

Comments

Michael Tremer July 11, 2017, 9:39 p.m. UTC | #1
Hi,

(Replying to this from my phone... let's see how this works...)

> On 10 Jul 2017, at 12:45 pm, Jonatan Schlag <jonatan.schlag@ipfire.org> wrote:
> 
> We use on and off instead of true and false
> to keep the config files more humand readable.
> 
> Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
> ---
> Makefile.am                 |   3 +-
> src/hooks/configs/dhcp      | 223 ++++++++++++++++++++++++++++++++++++++++++++
> src/hooks/configs/ipv4-dhcp | 122 ------------------------
> src/hooks/configs/ipv6-dhcp | 100 --------------------
> 4 files changed, 224 insertions(+), 224 deletions(-)
> create mode 100644 src/hooks/configs/dhcp
> delete mode 100644 src/hooks/configs/ipv4-dhcp
> delete mode 100644 src/hooks/configs/ipv6-dhcp
> 
> diff --git a/Makefile.am b/Makefile.am
> index 32e7166..2bbc537 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -196,10 +196,9 @@ INSTALL_EXEC_HOOKS += bridge-stp-install-hook
> UNINSTALL_EXEC_HOOKS += bridge-stp-uninstall-hook
> 
> dist_hooks_configs_SCRIPTS = \
> -    src/hooks/configs/ipv4-dhcp \
> +    src/hooks/configs/dhcp \
>    src/hooks/configs/ipv4-static \
>    src/hooks/configs/ipv6-auto \
> -    src/hooks/configs/ipv6-dhcp \
>    src/hooks/configs/ipv6-static \
>    src/hooks/configs/pppoe-server
> 
> diff --git a/src/hooks/configs/dhcp b/src/hooks/configs/dhcp
> new file mode 100644
> index 0000000..4aca87f
> --- /dev/null
> +++ b/src/hooks/configs/dhcp
> @@ -0,0 +1,223 @@
> +#!/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-config
> +
> +HOOK_CONFIG_SETTINGS="HOOK DELAY ENABLE_IPV4 ENABLE_IPV6"
> +
> +# Default settings.
> +DELAY=0
> +ENABLE_IPV4="on"
> +ENABLE_IPV6="on"
> +
> +hook_check_config_settings() {
> +    assert isset DELAY
> +    assert isinteger DELAY
> +    assert isset ENABLE_IPV4
> +    assert isbool ENABLE_IPV4
> +    assert isset ENABLE_IPV6
> +    assert isbool ENABLE_IPV6
> +}
> +
> +hook_parse_cmdline() {
> +    # These variables are there to check if a user tries to disable
> +    # and enable ipv6 or ipv4 at the same time. I would not chrash
> +    # but things could happen the user did not expect and
> +    # thats why we check for this mistake
> +    local ipv6_passed
> +    local ipv4_passed
> +    ipv6_passed=false
> +    ipv4_passed=false
> +
> +    while [ $# -gt 0 ]; do
> +        case "${1}" in
> +            --delay=*)
> +                DELAY="$(cli_get_val "${1}")"
> +                ;;
> +            --enable-ipv6)
> +                ENABLE_IPV6="on"
> +                if ${ipv6_passed}; then
> +                    # --disable-ipv6 was passed earlier
> +                    log ERROR "You cannot disable and enable ipv6 at the same time"
> +                    return ${EXIT_ERROR}
> +                fi
> +                ipv6_passed=true
> +                ;;
> +            --disable-ipv6)
> +                ENABLE_IPV6="off"
> +                if ${ipv6_passed}; then
> +                    # --enable-ipv6 was passed earlier
> +                    log ERROR "You cannot disable and enable ipv6 at the same time"
> +                    return ${EXIT_ERROR}
> +                fi
> +                ipv6_passed=true
> +                ;;
> +            --enable-ipv4)
> +                ENABLE_IPV4="on"
> +                if ${ipv4_passed}; then
> +                    # --disable-ipv4 was passed earlier
> +                    log ERROR "You cannot disable and enable ipv4 at the same time"
> +                    return ${EXIT_ERROR}
> +                fi
> +                ipv4_passed=true
> +                ;;
> +            --disable-ipv4)
> +                ENABLE_IPV4="off"
> +                if ${ipv4_passed}; then
> +                    # --enable-ipv4 was passed earlier
> +                    log ERROR "You cannot disable and enable ipv4 at the same time"
> +                    return ${EXIT_ERROR}
> +                fi
> +                ipv4_passed=true
> +                ;;
> +            *)
> +                warning "Ignoring unknown option '${1}'"
> +                ;;
> +        esac
> +        shift
> +    done
> +}

I think you are making this too complicated. It doesn't need to be that. Most tools just go with the last argument passed and we should do that, too (configure for example).

So when you get an argument passed multiple times just let is run through the loop every time and that will set the variable to what ever was passed last.

The rest is all fine.

-M
> +
> +hook_new() {
> +    local zone="${1}"
> +    shift
> +
> +    if zone_config_hook_is_configured ${zone} "dhcp"; then
> +        log ERROR "You can configure the dhcp hook only once for a zone"
> +        return ${EXIT_ERROR}
> +    fi
> +
> +    if ! hook_parse_cmdline $@; then
> +        # Return an error if the parsing of the cmd line fails
> +        return ${EXIT_ERROR}
> +    fi
> +
> +    # Check if the user disabled ipv4 and ipv6
> +
> +    if ! enabled ENABLE_IPV6 && ! enabled ENABLE_IPV4; then
> +        log ERROR "You disabled IPv6 and IPv4. At least one must be enabled"
> +        return ${EXIT_ERROR}
> +    fi
> +
> +    zone_config_settings_write "${zone}" "${HOOK}"
> +
> +    exit ${EXIT_OK}
> +}
> +
> +hook_up() {
> +    local zone=${1}
> +    local config=${2}
> +    shift 2
> +
> +    if ! device_exists ${zone}; then
> +        error "Zone '${zone}' doesn't exist."
> +        exit ${EXIT_ERROR}
> +    fi
> +
> +    zone_config_settings_read "${zone}" "${config}"
> +
> +    # Start dhclient for IPv6 on this zone if enabled.
> +    if enabled ENABLE_IPV6; then
> +        dhclient_start ${zone} ipv6
> +    fi
> +
> +    # Start dhclient for IPv4 on this zone if enabled.
> +    if enabled ENABLE_IPV4; then
> +        dhclient_start ${zone} ipv4
> +    fi
> +
> +    exit ${EXIT_OK}
> +}
> +
> +hook_down() {
> +    local zone=${1}
> +    local config=${2}
> +    shift 2
> +
> +    if ! device_exists ${zone}; then
> +        error "Zone '${zone}' doesn't exist."
> +        exit ${EXIT_ERROR}
> +    fi
> +
> +    # Stop dhclient for IPv6 on this zone.
> +    dhclient_stop ${zone} ipv6
> +
> +    # Stop dhclient for IPv4 on this zone.
> +    dhclient_stop ${zone} ipv4
> +
> +    exit ${EXIT_OK}
> +}
> +
> +hook_status() {
> +    local zone=${1}
> +    local config=${2}
> +    shift 2
> +
> +    if ! device_exists ${zone}; then
> +        error "Zone '${zone}' doesn't exist."
> +        exit ${EXIT_ERROR}
> +    fi
> +
> +    zone_config_settings_read "${zone}" "${config}"
> +
> +    local status
> +    if dhclient_status ${zone} ipv4 || dhclient_status ${zone} ipv6; then
> +        status="${MSG_HOOK_UP}"
> +    else
> +        status="${MSG_HOOK_DOWN}"
> +    fi
> +    cli_statusline 3 "${HOOK}" "${status}"
> +
> +    cli_space
> +
> +    local proto
> +    for proto in "IPv6" "IPv4"; do
> +        local _proto=${proto,,}
> +
> +        cli_print_fmt1 3 "${proto}"
> +
> +        if enabled ENABLE_${proto^^}; then
> +            cli_print_fmt1 4 "Status" "enabled"
> +
> +            local address="$(db_get "${zone}/${_proto}/local-ip-address")"
> +            if isset address; then
> +                cli_print_fmt1 4 "Address" "${address}"
> +            fi
> +
> +            local gateway="$(db_get "${zone}/${_proto}/remote-ip-address")"
> +            if isset gateway; then
> +                cli_print_fmt1 4 "Gateway" "${gateway}"
> +            fi
> +
> +            local dns_servers="$(db_get "${zone}/${_proto}/domain-name-servers")"
> +            if isset dns_servers; then
> +                cli_print_fmt1 4 "DNS Servers" "${dns_servers}"
> +            fi
> +        else
> +            cli_print_fmt1 4 "Status" "disabled"
> +        fi
> +
> +        cli_space
> +
> +    done
> +
> +    exit ${EXIT_OK}
> +}
> diff --git a/src/hooks/configs/ipv4-dhcp b/src/hooks/configs/ipv4-dhcp
> deleted file mode 100644
> index 39e0312..0000000
> --- a/src/hooks/configs/ipv4-dhcp
> +++ /dev/null
> @@ -1,122 +0,0 @@
> -#!/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-config
> -
> -HOOK_CONFIG_SETTINGS="HOOK DELAY"
> -
> -# Default settings.
> -DELAY=0
> -
> -hook_check_config_settings() {
> -    assert isset DELAY
> -    assert isinteger DELAY
> -}
> -
> -hook_new() {
> -    local zone="${1}"
> -    shift
> -
> -    if zone_config_hook_is_configured ${zone} "ipv4-dhcp"; then
> -        log ERROR "You can configure the ipv4-dhcp hook only once for a zone"
> -        return ${EXIT_ERROR}
> -    fi
> -
> -    while [ $# -gt 0 ]; do
> -        case "${1}" in
> -            --delay=*)
> -                DELAY="$(cli_get_val "${1}")"
> -                ;;
> -        esac
> -        shift
> -    done
> -
> -    zone_config_settings_write "${zone}" "${HOOK}"
> -
> -    exit ${EXIT_OK}
> -}
> -
> -hook_up() {
> -    local zone=${1}
> -    local config=${2}
> -    shift 2
> -
> -    if ! device_exists ${zone}; then
> -        error "Zone '${zone}' doesn't exist."
> -        exit ${EXIT_ERROR}
> -    fi
> -
> -    # Start dhclient for IPv4 on this zone.
> -    dhclient_start ${zone} ipv4
> -
> -    exit ${EXIT_OK}
> -}
> -
> -hook_down() {
> -    local zone=${1}
> -    local config=${2}
> -    shift 2
> -
> -    if ! device_exists ${zone}; then
> -        error "Zone '${zone}' doesn't exist."
> -        exit ${EXIT_ERROR}
> -    fi
> -
> -    # Stop dhclient for IPv4 on this zone.
> -    dhclient_stop ${zone} ipv4
> -
> -    exit ${EXIT_OK}
> -}
> -
> -hook_status() {
> -    local zone=${1}
> -    local config=${2}
> -    shift 2
> -
> -    if ! device_exists ${zone}; then
> -        error "Zone '${zone}' doesn't exist."
> -        exit ${EXIT_ERROR}
> -    fi
> -
> -    zone_config_settings_read "${zone}" "${config}"
> -
> -    local status
> -    if dhclient_status ${zone} ipv4; then
> -        status="${MSG_HOOK_UP}"
> -    else
> -        status="${MSG_HOOK_DOWN}"
> -    fi
> -    cli_statusline 3 "${HOOK}" "${status}"
> -
> -    cli_print_fmt1 3 "IPv4 address" "$(db_get "${zone}/ipv4/local-ip-address")"
> -    local gateway="$(db_get "${zone}/ipv4/remote-ip-address")"
> -    if isset gateway; then
> -        cli_print_fmt1 3 "Gateway" "${gateway}"
> -        cli_space
> -    fi
> -    local dns_servers="$(db_get "${zone}/ipv4/domain-name-servers")"
> -    if isset dns_servers; then
> -        cli_print_fmt1 3 "DNS-Servers" "${dns_servers}"
> -        cli_space
> -    fi
> -
> -    exit ${EXIT_OK}
> -}
> diff --git a/src/hooks/configs/ipv6-dhcp b/src/hooks/configs/ipv6-dhcp
> deleted file mode 100644
> index 74ec765..0000000
> --- a/src/hooks/configs/ipv6-dhcp
> +++ /dev/null
> @@ -1,100 +0,0 @@
> -#!/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-config
> -
> -HOOK_CONFIG_SETTINGS="HOOK"
> -
> -hook_new() {
> -    local zone="${1}"
> -    shift
> -
> -    if zone_config_hook_is_configured ${zone} "ipv6-dhcp"; then
> -        log ERROR "You can configure the ipv6-dhcp hook only once for a zone"
> -        return ${EXIT_ERROR}
> -    fi
> -
> -    zone_config_settings_write "${zone}" "${HOOK}"
> -
> -    exit ${EXIT_OK}
> -}
> -
> -hook_up() {
> -    local zone="${1}"
> -    local config="${2}"
> -    shift 2
> -
> -    if ! device_exists "${zone}"; then
> -        error "Zone '${zone}' doesn't exist."
> -        exit ${EXIT_ERROR}
> -    fi
> -
> -    # Start dhclient for IPv6 on this zone.
> -    dhclient_start "${zone}" "ipv6"
> -
> -    exit ${EXIT_OK}
> -}
> -
> -hook_down() {
> -    local zone="${1}"
> -    local config="${2}"
> -    shift 2
> -
> -    if ! device_exists "${zone}"; then
> -        error "Zone '${zone}' doesn't exist."
> -        exit ${EXIT_ERROR}
> -    fi
> -
> -    # Stop dhclient for IPv6 on this zone.
> -    dhclient_stop "${zone}" "ipv6"
> -
> -    exit ${EXIT_OK}
> -}
> -
> -hook_status() {
> -    local zone="${1}"
> -    local config="${2}"
> -    shift 2
> -
> -    if ! device_exists "${zone}"; then
> -        error "Zone '${zone}' doesn't exist."
> -        exit ${EXIT_ERROR}
> -    fi
> -
> -    zone_config_settings_read "${zone}" "${config}"
> -
> -    local status
> -    if dhclient_status "${zone}" "ipv6"; then
> -        status="${MSG_HOOK_UP}"
> -    else
> -        status="${MSG_HOOK_DOWN}"
> -    fi
> -    cli_statusline 3 "${HOOK}" "${status}"
> -
> -    cli_print_fmt1 3 "IPv6 address" "$(db_get "${zone}/ipv6/local-ip-address")"
> -    local gateway="$(db_get "${zone}/ipv6/remote-ip-address")"
> -    if isset gateway; then
> -        cli_print_fmt1 3 "Gateway" "${gateway}"
> -    fi
> -    cli_space
> -
> -    exit ${EXIT_OK}
> -}
> -- 
> 2.6.3
>