pppd: add option to set custom host-uniq pppoe tag
[openwrt.git] / package / network / services / ppp / files / ppp.sh
index 43a7de9..df404dd 100755 (executable)
@@ -9,40 +9,52 @@
 }
 
 ppp_generic_init_config() {
-       proto_config_add_string "username"
-       proto_config_add_string "password"
-       proto_config_add_string "keepalive"
-       proto_config_add_int "demand"
-       proto_config_add_string "pppd_options"
-       proto_config_add_string "connect"
-       proto_config_add_string "disconnect"
-       proto_config_add_boolean "ipv6"
-       proto_config_add_boolean "authfail"
-       proto_config_add_int "mtu"
+       proto_config_add_string username
+       proto_config_add_string password
+       proto_config_add_string keepalive
+       proto_config_add_boolean keepalive_adaptive
+       proto_config_add_int demand
+       proto_config_add_string pppd_options
+       proto_config_add_string 'connect:file'
+       proto_config_add_string 'disconnect:file'
+       proto_config_add_string ipv6
+       proto_config_add_boolean authfail
+       proto_config_add_int mtu
+       proto_config_add_string pppname
 }
 
 ppp_generic_setup() {
        local config="$1"; shift
 
-       json_get_vars ipv6 demand keepalive username password pppd_options
-       [ "$ipv6" = 1 ] || ipv6=""
+       json_get_vars ipv6 demand keepalive keepalive_adaptive username password pppd_options pppname
+       if [ "$ipv6" = 0 ]; then
+               ipv6=""
+       elif [ -z "$ipv6" -o "$ipv6" = auto ]; then
+               ipv6=1
+               proto_export "AUTOIPV6=1"
+       fi
+
        if [ "${demand:-0}" -gt 0 ]; then
                demand="precompiled-active-filter /etc/ppp/filter demand idle $demand"
        else
                demand="persist"
        fi
-
        [ -n "$mtu" ] || json_get_var mtu mtu
-
-       local interval="${keepalive##*[, ]}"
-       [ "$interval" != "$keepalive" ] || interval=5
+       [ -n "$pppname" ] || pppname="${proto:-ppp}-$config"
+
+       local lcp_failure="${keepalive%%[, ]*}"
+       local lcp_interval="${keepalive##*[, ]}"
+       local lcp_adaptive="lcp-echo-adaptive"
+       [ "${lcp_failure:-0}" -lt 1 ] && lcp_failure=""
+       [ "$lcp_interval" != "$keepalive" ] || lcp_interval=5
+       [ "${keepalive_adaptive:-1}" -lt 1 ] && lcp_adaptive=""
        [ -n "$connect" ] || json_get_var connect connect
        [ -n "$disconnect" ] || json_get_var disconnect disconnect
 
        proto_run_command "$config" /usr/sbin/pppd \
                nodetach ipparam "$config" \
-               ifname "${proto:-ppp}-$config" \
-               ${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}} \
+               ifname "$pppname" \
+               ${lcp_failure:+lcp-echo-interval $lcp_interval lcp-echo-failure $lcp_failure $lcp_adaptive} \
                ${ipv6:++ipv6} \
                nodefaultroute \
                usepeerdns \
@@ -55,7 +67,7 @@ ppp_generic_setup() {
                ip-down-script /lib/netifd/ppp-down \
                ipv6-down-script /lib/netifd/ppp-down \
                ${mtu:+mtu $mtu mru $mtu} \
-               $pppd_options "$@"
+               "$@" $pppd_options
 }
 
 ppp_generic_teardown() {
@@ -101,6 +113,7 @@ proto_pppoe_init_config() {
        ppp_generic_init_config
        proto_config_add_string "ac"
        proto_config_add_string "service"
+       proto_config_add_string host_uniq
 }
 
 proto_pppoe_setup() {
@@ -116,12 +129,14 @@ proto_pppoe_setup() {
 
        json_get_var ac ac
        json_get_var service service
+       json_get_var host_uniq host_uniq
 
        ppp_generic_setup "$config" \
                plugin rp-pppoe.so \
                ${ac:+rp_pppoe_ac "$ac"} \
                ${service:+rp_pppoe_service "$service"} \
-               "nic-$iface"
+               "nic-$iface" \
+               ${host_uniq:+host-uniq "$host_uniq"}
 }
 
 proto_pppoe_teardown() {
@@ -190,7 +205,7 @@ proto_pptp_setup() {
 
        local load
        for module in slhc ppp_generic ppp_async ppp_mppe ip_gre gre pptp; do
-               grep -q "$module" /proc/modules && continue
+               grep -q "^$module " /proc/modules && continue
                /sbin/insmod $module 2>&- >&-
                load=1
        done