#!/bin/sh /etc/rc.common START=88 USE_PROCD=1 validate_section() { uci_validate_section mlvpn mlvpn ${1} \ 'enable:bool:0' \ 'timeout:uinteger:30' \ 'mode:string:client' \ 'password:string' \ 'reorder_buffer_size:uinteger:64' \ 'loss_tolerence:uinteger:30' \ 'interface_name:string:mlvpn0' \ 'host:host' \ 'firstport:port' } interface_multipath_settings() { local mode port local config="$1" id=$(($id+1)) config_get mode "$config" multipath "" [ "$mode" = "" ] && { mode="$(uci -q get openmptcprouter.$config.multipath)" } [ "$mode" = "off" ] || [ "$mode" = "" ] && return 1 config_get ifname "$config" ifname [ -z "$ifname" ] && ifname=$(ifstatus "$config" | jsonfilter -q -e '@["l3_device"]') [ -z "$ifname" ] && return 1 count=$(($count+1)) port=$((firstport+count)) cat >> /tmp/etc/${interface_name}.conf <<-EOF [${id}] bindhost = "${ifname}" bindport = "${port}" remotehost = "${host}" remoteport = "${port}" EOF } start_service() { local enable timeout mode password reorder_buffer_size interface_name host firstport loss_tolerence validate_section "general" || { _err "validation failed" return 1 } [ "${enable}" = "1" ] || return 1 if [ "$(uci -q get network.omrvpn)" != "${interface_name}" ]; then uci -q set network.omrvpn.ifname=${interface_name} uci -q commit fi cat > /tmp/etc/${interface_name}.conf <<-EOF [general] tuntap = "tun" mode = "${mode}" interface_name = "${interface_name}" timeout = ${timeout} reorder_buffer = yes reorder_buffer_size = ${reorder_buffer_size} loss_tolerence = ${loss_tolerence} password = "${password}" mtu = 1452 EOF local count=0 id=0 config_load network config_foreach interface_multipath_settings interface chmod 0600 "/tmp/etc/${interface_name}.conf" procd_open_instance procd_set_param command /usr/sbin/mlvpn --config "/tmp/etc/${interface_name}.conf" --user nobody procd_set_param file "/tmp/etc/${interface_name}.conf" #procd_set_param reload_signal SIGHUP procd_set_param respawn 0 30 5 procd_close_instance } service_triggers() { procd_add_reload_trigger mlvpn network }