summaryrefslogtreecommitdiffstats
path: root/modules.d/35network-legacy/parse-bond.sh
blob: ba30a3bc7b2676a0209924573207cd5dca456941 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/bin/sh
#
# Format:
#       bond=<bondname>[:<bondslaves>[:<options>[:<mtu>]]]
#
#       bondslaves is a comma-separated list of physical (ethernet) interfaces
#       options is a comma-separated list on bonding options (modinfo bonding for details) in format compatible with initscripts
#       if options include multi-valued arp_ip_target option, then its values should be separated by semicolon.
#
#       bond without parameters assumes bond=bond0:eth0,eth1:mode=balance-rr
#
#       if the mtu is specified, it will be set on the bond master
#

# We translate list of slaves to space-separated here to make it easier to loop over them in ifup
# Ditto for bonding options
parsebond() {
    local v="${1}":
    set --
    while [ -n "$v" ]; do
        set -- "$@" "${v%%:*}"
        v=${v#*:}
    done

    case $# in
        0)
            bondname=bond0
            bondslaves="eth0 eth1"
            ;;
        1)
            bondname=$1
            bondslaves="eth0 eth1"
            ;;
        2)
            bondname=$1
            bondslaves=$(str_replace "$2" "," " ")
            ;;
        3)
            bondname=$1
            bondslaves=$(str_replace "$2" "," " ")
            bondoptions=$(str_replace "$3" "," " ")
            ;;
        4)
            bondname=$1
            bondslaves=$(str_replace "$2" "," " ")
            bondoptions=$(str_replace "$3" "," " ")
            bondmtu=$4
            ;;
        *) die "bond= requires zero to four parameters" ;;
    esac
}

# Parse bond for bondname, bondslaves, bondmode, bondoptions and bondmtu
for bond in $(getargs bond=); do
    unset bondname
    unset bondslaves
    unset bondoptions
    unset bondmtu
    if [ "$bond" != "bond" ]; then
        parsebond "$bond"
    fi
    # Simple default bond
    if [ -z "$bondname" ]; then
        bondname=bond0
        bondslaves="eth0 eth1"
    fi
    # Make it suitable for initscripts export
    bondoptions=$(str_replace "$bondoptions" ";" ",")

    {
        echo "bondname=$bondname"
        echo "bondslaves=\"$bondslaves\""
        echo "bondoptions=\"$bondoptions\""
        echo "bondmtu=\"$bondmtu\""
    } > "/tmp/bond.${bondname}.info"
done