#!/bin/sh /etc/rc.common

START=90
STOP=10

USE_PROCD=1
PROG=/usr/sbin/udp-broadcast-relay-redux
NAME=udp-broadcast-relay-redux
PIDCOUNT=0

validate_section_udp_broadcast_relay_redux()
{
    uci_validate_section udp_broadcast_relay_redux udp_broadcast_relay_redux "${1}" \
	'id:uinteger' \
	'port:port' \
	'network:list(string)' \
	'src_override:ip4addr' \
	'dest_override:ip4addr'

    [ -z "$id" ] && return 1

    [ -z "$network" ] && return 1

    [ -z "$port" ] && return 1

    return 0
}

udp_broadcast_relay_redux_instance() {
    local net network ifname id port src_override dest_override

    validate_section_udp_broadcast_relay_redux "${1}" || {
	echo "Validation failed"
	return 1
    }

    PIDCOUNT="$((PIDCOUNT + 1))"

    procd_open_instance
    procd_set_param command "$PROG" "--id" "${id}" "--port" "${port}"

    for net in $network; do
	network_get_device ifname "$net"
	if [ -z "$ifname" ]; then
	    network_get_physdev ifname "$net"
	fi
	if [ -n "$ifname" ]; then
	    procd_append_param command "--dev" "$ifname"
	    procd_append_param netdev "$ifname"
	fi
    done

    if [ -n "$src_override" ] ; then
        procd_append_param command "-s" "$src_override"
    fi

    if [ -n "$dest_override" ] ; then
        procd_append_param command "-t" "$dest_override"
    fi

    procd_add_jail ubr-${PIDCOUNT}
    procd_close_instance
}

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

    config_load udp_broadcast_relay_redux
    config_foreach udp_broadcast_relay_redux_instance udp_broadcast_relay_redux
}

service_triggers() {
    procd_add_reload_trigger "udp_broadcast_relay_redux"
    procd_add_validation validate_section_udp_broadcast_relay_redux
}