On Wed, Apr 23, 2008 at 04:21:27PM +0100, Roy Marples wrote:
> OK, it seems that hard lines in multipart configs seem to be an issue, so I'm 
> doing this now.
> 
> For a summary of why we're using hard lines you can read this thread
> http://thread.gmane.org/gmane.linux.gentoo.devel/45756/focus=45765

Do you plan to reimplement parsing of the complete ip syntax for
addresses and routes?

See my attached example from work, we use a lot of the various options
on stuff.

-- 
Robin Hugh Johnson
Gentoo Linux Developer & Infra Guy
E-Mail     : [EMAIL PROTECTED]
GnuPG FP   : 11AC BA4F 4778 E3F6 E4ED  F38E B27B 944E 3488 4E85
# Prefer iproute2 over ifconfig
modules=( "iproute2" )

ext="AAA.BBB.CCC" #REMOVED-FOR-PRIVACY
oob="DDD.EEE.FFF" #REMOVED-FOR-PRIVACY
int="GGG.HHH.III" #REMOVED-FOR-PRIVACY

RC_NEED_bond0="net.eth2 net.eth3"

# Primary IP must come first
config_bond0=( "${int}.51/24" "${int}.22/24" "${int}.23/24" )
slaves_bond0="eth2 eth3"
mtu_bond0="9000"
#slaves_bond0="eth3"

config_eth0=( "${oob}.145/27" )
config_eth1=(
"${ext}.51/24" # REMOVED
"${ext}.20/24" # REMOVED
"${ext}.21/24" # REMOVED
"${ext}.22/24" # REMOVED
"${ext}.23/24" # REMOVED
"${ext}.37/24" # REMOVED
"${ext}.71/24" # REMOVED
)
mtu_eth1="9000"
config_eth2=( "null" ) 
#config_eth2=( "${ext}.51/24" )
config_eth3=( "null" )

config_lo=(
"${ext}.30/32 broadcast - scope host"
"${ext}.31/32 broadcast - scope host"
"${ext}.32/32 broadcast - scope host"
"${ext}.33/32 broadcast - scope host"
"${ext}.34/32 broadcast - scope host"
"${ext}.35/32 broadcast - scope host"
"${ext}.36/32 broadcast - scope host"
"${ext}.37/32 broadcast - scope host"
"${ext}.38/32 broadcast - scope host"
)


# Routing
routes_eth0=(
        "${oob}.128/27 dev eth0 table oob scope link" 
        "default via ${oob}.129 table oob"
)

routes_eth1=( # was eth1
        "${ext}.0/24 dev eth1 table external scope link"
        "default via ${ext}.10 dev eth1"
)

routes_bond0=(
        "${int}.0/8 dev bond0 table internal scope link"
        "${int}.192/27 dev bond0 mtu 1500 table internal scope link"
        "default via ${int}.2 bond0 table internal"
)

rules_bond0=(
        "from ${int}.0/24 table internal priority 700 dev bond0"
        "to ${int}.0/24 table internal priority 750 dev bond0"
)

rules_eth0=( 
        "from ${oob}.128/27 table oob priority 500" 
        "to ${oob}.128/27 table oob priority 550" 
)

rules_eth1=( # was eth1
        "from ${ext}.0/24 table external priority 400"
        "to ${ext}.0/24 table external priority 450"
)

# Now some fun functionality.
# This flushes the Linux route cache
# It is important on failover to do this
# otherwise traffic might try an old route for a while.
flush_route_cache() {
    ebegin "Flushing route cache for ${IFACE}"
    ip route flush cache dev ${IFACE}
    ret=$?
    eend $ret
    return $ret
}

# This will take a rules array, and process it.
ip_rule_runner() {
    cmd="$1"
    [EMAIL PROTECTED]
    rules=( "${!rules_iface}" )
    max=$(([EMAIL PROTECTED] - 1))
    cmd="ip rule ${cmd}"
    for ln in `seq 0 $max`; do
        ebegin "   ${cmd} ${rules[$ln]}"
        ${cmd} ${rules[$ln]}
        eend $?
    done
}

postup() {
    einfo "Adding rules"
    ip_rule_runner add
    flush_route_cache
}
predown() {
    einfo "Removing rules"
    ip_rule_runner del
    flush_route_cache
}

check_link() {
        ethtool "${IFACE}" | grep -q 'Link detected: yes'
}
preup() {
        case $IFACE in
                ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*)
                ;;
        bond*)
                ;;
        eth*)
# Try to force link up first, for e1000 special case
                i=0
                while [ $i -lt 5 ] && ! check_link; do
                        [ $i -gt 0 ] && sleep 0.2
                        ip link set ${IFACE} up
                        i=$(($i+1))
                done
                if ! check_link; then
                        ewarn "No link on ${IFACE}, aborting configuration"
                        ip link set $IFACE down
                        # commented out for the moment, we need to check if we 
are in a bond
                        #return 1
                fi
                ;;
        esac
        return 0
}

# Do not use the metric calculation code
# It is slow with lots of routes.
metric=0
metric_eth0=0
metric_eth1=0
metric_eth2=0
metric_eth3=0
metric_eth4=0
metric_eth5=0
metric_bond0=0

Attachment: pgpi8ACnSLqbu.pgp
Description: PGP signature

Reply via email to