summaryrefslogtreecommitdiffstats
path: root/pimbd/files/pimbd.init
blob: d2b5fc97ff2e1c97dd9b38e3fa6d6ee325f77287 (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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/bin/sh /etc/rc.common

START=90
STOP=10
USE_PROCD=1

TYPE=''

DEV=''
PIM='off'
SSBIDIR='off'
MLD='off'
IGMP='off'

RPAADDRESS=''
RPALIST=''

reset_link_values() {
    PIM='off'
    SSBIDIR='off'
    MLD='off'
    IGMP='off'
}

apply_link() {
    if test ! -z "$DEV"; then
        echo "Setting pimbc link set $DEV pim $PIM ssbidir $SSBIDIR mld $MLD igmp $IGMP"
        echo "link set $DEV pim $PIM ssbidir $SSBIDIR mld $MLD igmp $IGMP" >> /tmp/pimbd.conf
    fi
    reset_link_values
}

apply_rpa() {
    if test -z "$RPAADDRESS"; then
        echo "No RPA address is set!"
        return
    fi
    for i in $RPALIST; do
        echo "adding pimbc rpa add $RPAADDRESS $i"
        echo "rpa add $RPAADDRESS $i" >> /tmp/pimbd.conf
    done
    RPAADDRESS=''
    RPALIST=''
}

store_interface_option() {
    local name="$1"
    local value="$2"
    case $name in
    dev)
        DEV=$value
        ;;
    pim)
        PIM=$value
        ;;
    ssbidir)
        SSBIDIR=$value
        ;;
    mld)
        MLD=$value
        ;;
    igmp)
        IGMP=$value
        ;;
    esac
}

store_rpa_option() {
    local name="$1"
    local value="$2"
    echo "store_rpa_option $name $value"
    case $name in
    address)
        RPAADDRESS="$value"
        ;;
    esac
}

store_rpa_list() {
    local name="$1"
    local value="$2"
    echo "store rpa_list $name $value"
    case $name in
    prefix)
        RPALIST="${RPALIST} $value"
        ;;
    esac
}

start_service() {
    . /lib/functions.sh
    . /lib/functions/network.sh

    rm -f /tmp/pimbd.conf

    config_cb() {
        local name="$1"
        local value="$2"
        # commands to be run for every option
        echo "config_cb $name $value"
        case $TYPE in
        interface)
            apply_link
            ;;
        rpa)
            apply_rpa
            ;;
        esac
        TYPE=$name
        DEV=$value
    }

    option_cb() {
        local name="$1"
        local value="$2"
        # commands to be run for every option
        echo "option_cb $name $value"
        case $TYPE in
        interface)
            store_interface_option "$name" "$value"
            ;;
        rpa)
            store_rpa_option "$name" "$value"
            ;;
        esac
    }

    list_cb() {
        local name="$1"
        local value="$2"
        # commands to be run for every list item
        echo "list_cb $name $value"

        case $TYPE in
        rpa)
            store_rpa_list "$name" "$value"
            ;;
        esac
    }
    config_load pimb

    procd_open_instance
    procd_set_param command /usr/sbin/pimbd
    procd_append_param command -S
    procd_append_param command -L 6
    procd_append_param command -c /tmp/pimbd.conf

    procd_set_param respawn
    procd_close_instance
}