#!/usr/bin/sh #------------------------------------------------------------------------------ # /usr/libexec/netconfig/nm-get-bridge - bridge start script # # Creation: 2005-01-18 nico # Last Update: $Id$ # # Copyright (c) 2005-@@YEAR@@ the eisfair team, team(at)eisfair(dot)net # # 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 2 of the License, or # (at your option) any later version. #------------------------------------------------------------------------------ IP=/usr/sbin/ip . /etc/config.d/base . /etc/config.d/bridge # --------------------------------------------------------------------------- # check status of bonding # --------------------------------------------------------------------------- check_bridge_status() { /usr/bin/grep -q '^bridge ' /proc/modules return ${?} } # --------------------------------------------------------------------------- # start # --------------------------------------------------------------------------- bridge_start() { # load kernelmodul /usr/sbin/modprobe bridge bridge_idx=1 while [ ${bridge_idx} -le ${BRIDGE_N:-0} ] do eval active='${BRIDGE_'${bridge_idx}'_ACTIVE}' if [ "${active}" != "yes" ] then bridge_idx=$((${bridge_idx} - 1)) continue fi bridx=$((${bridge_idx} - 1)) ${IP} addr flush dev br${bridx} 2>/dev/null # set br${bridx}.nmconnection { # set interface parameter echo '[connection]' echo "id=br${bridx}" echo 'type=bridge' echo "interface-name=br${bridx}" echo echo '[ethernet]' echo echo '[bridge]' eval STP='${BRIDGE_'${bridge_idx}'_STP}' if [ "${STP}" = "yes" ] then eval BRIDGE_PRIO='${BRIDGE_'${bridge_idx}'_PRIO}' eval BRIDGE_HELLO='${BRIDGE_'${bridge_idx}'_HELLO}' eval BRIDGE_MESSAGE='${BRIDGE_'${bridge_idx}'_MAX_MESSAGE_AGE}' eval BRIDGE_FDELAY='${BRIDGE_'${bridge_idx}'_FORWARD_DELAY}' if [ -n "${BRIDGE_FDELAY}" ] && [ ${BRIDGE_FDELAY} -ne 15 ] then echo "forward_delay=${BRIDGE_FDELAY}" fi if [ -n "${BRIDGE_HELLO}" ] && [ ${BRIDGE_HELLO} -ne 2 ] then echo "hello_time=${BRIDGE_HELLO}" fi if [ -n "${BRIDGE_MESSAGE}" ] && [ ${BRIDGE_MESSAGE} -ne 20 ] then echo "max_age=${BRIDGE_MESSAGE}" fi if [ -n "${BRIDGE_PRIO}" ] && [ ${BRIDGE_PRIO} -ne 327680 ] then echo "priority=${BRIDGE_PRIO}" fi else echo 'stp=false' fi # optional, setting default # IGMP snooping -> multicast-snooping=false default true # ageing-time=600 -> 300 default ipv4_method='manual' echo echo '[ipv4]' eval idxip='${BRIDGE_'${bridge_idx}'_BIND_1_ETH}' eval ip_n='${IP_ETH_'${idxip}'_IP_N}' idxa=1 idy=1 while [ ${idy} -le ${ip_n:-0} ] do eval ipaddr='${IP_ETH_'${idxip}'_IP_'${idy}'_IPADDR}' eval network='${IP_ETH_'${idxip}'_IP_'${idy}'_NETWORK}' eval netmask='${IP_ETH_'${idxip}'_IP_'${idy}'_NETMASK}' netmaskbits=$(/usr/bin/netcalc netmaskbits ${network}:${netmask}) echo "address${idxa}=${ipaddr}/${netmaskbits}" # include to set gateway and route . /var/install/include/nm-get-route idxa=$((${idxa} +1)) idy=$((${idy} + 1)) done if ! "${nm_dns:-false}" then # include to set dns responder . /var/install/include/nm-get-dns nm_dns=true fi echo "method=${ipv4_method}" ipv6_method='link-local' echo echo '[ipv6]' echo 'addr-gen-mode=default' echo "method=${ipv6_method}" echo echo '[proxy]' echo } > /etc/NetworkManager/system-connections/br${bridx}.nmconnection /usr/bin/chmod 0600 /etc/NetworkManager/system-connections/br${bridx}.nmconnection >/run/netconfig/br${bridx}.nmconnection unset BRIDGE_PRIO unset BRIDGE_HELLO unset BRIDGE_MESSAGE unset BRIDGE_FDELAY idx2=1 eval dev='${BRIDGE_'${bridge_idx}'_BIND_N}' while [ ${idx2} -le ${dev} ] do eval idxb='${BRIDGE_'${bridge_idx}'_BIND_'${idx2}'_ETH}' eval PRIO='${BRIDGE_'${bridge_idx}'_BIND_'${idx2}'_PRIO}' eval COST='${BRIDGE_'${bridge_idx}'_BIND_'${idx2}'_COST}' eval bridge_iface='${IP_ETH_'${idxb}'_NAME}' # putting down the network interface ${IP} addr flush dev ${bridge_iface} 2>/dev/null # set interface to bridge { echo '[connection]' echo "id=${bridge_iface}" echo 'type=ethernet' echo "controller=br${bridx}" echo "interface-name=${bridge_iface}" echo 'port-type=bridge' echo echo '[ethernet]' echo echo '[bridge-port]' if [ -n "${COST}" ] && [ ${COST} -ne 100 ] then echo "path-cost=${COST}" fi if [ -n "${PRIO}" ] && [ ${PRIO} -ne 32 ] then echo "priority=${PRIO}" fi echo } > /etc/NetworkManager/system-connections/${bridge_iface}.nmconnection /usr/bin/chmod 0600 /etc/NetworkManager/system-connections/${bridge_iface}.nmconnection >/run/netconfig/${bridge_iface}.nmconnection idx2=$((${idx2} + 1)) unset PRIO unset COST done bridge_idx=$((${bridge_idx} + 1)) done } # --------------------------------------------------------------------------- # stop # --------------------------------------------------------------------------- bridge_stop() { if check_bridge_status then idx=1 while [ ${idx} -le ${BRIDGE_N:-0} ] do eval dev='${BRIDGE_'${idx}'_BIND_N}' idx2=1 while [ ${idx2} -le ${dev} ] do eval idxb='${BRIDGE_'${idx}'_BIND_'${idx2}'_ETH}' eval bridge_iface='${IP_ETH_'${idxb}'_NAME}' ${IP} link set dev ${bridge_iface} nomaster ${IP} link set ${bridge_iface} down idx2=$((${idx2} + 1)) done bridx=$((${idx} - 1)) ${IP} link del br${bridx} idx=$((${idx} + 1)) done # remove kernelmodul /usr/sbin/modprobe -r bridge fi } # --------------------------------------------------------------------------- # main # --------------------------------------------------------------------------- main() { while [ "${#}" -gt 0 ] do case "${1}" in --quiet) _quiet=true shift ;; *) _action="${1}" shift ;; esac done case "${_action}" in start) bridge_start ;; stop) bridge_stop ;; esac exit 0 } # --------------------------------------------------------------------------- # exec main # --------------------------------------------------------------------------- main "${@}" # --------------------------------------------------------------------------- # end # ---------------------------------------------------------------------------