Applied, thanks.

On 12.06.2015 09:26, Hans Dedecker wrote:
> Adds PPP unnumbered support via the parameter unnumbered which points to a 
> logical OpenWRT interface.
> The PPP proto shell handler will "borrow" an IP address from the unnumbered 
> interface (if multiple
> IP addresses are present the longest prefix different from 32 will be 
> "borrowed") for which a host
> interface dependency will be created. Due to the host interface dependency 
> the PPP unnumbered interface
> will only "borrow" an IP address from an interface which is up.
> The borrowed IP address will be shared as local IP address by the PPP daemon 
> and no other local IP
> will be accepted from the peer in the IPCP negotiation.
>
> A typical use case is the usage of a public IP subnet on the Lan interface 
> which will be shared
> by the PPP interface as local IP address.
>
> Signed-off-by: Hans Dedecker <dedec...@gmail.com>
> ---
>  package/network/services/ppp/files/ppp.sh | 40 
> ++++++++++++++++++++++++++++++-
>  1 file changed, 39 insertions(+), 1 deletion(-)
>
> diff --git a/package/network/services/ppp/files/ppp.sh 
> b/package/network/services/ppp/files/ppp.sh
> index 1a72a1e..a6389a8 100755
> --- a/package/network/services/ppp/files/ppp.sh
> +++ b/package/network/services/ppp/files/ppp.sh
> @@ -4,10 +4,35 @@
>  
>  [ -n "$INCLUDE_ONLY" ] || {
>       . /lib/functions.sh
> +     . /lib/functions/network.sh
>       . ../netifd-proto.sh
>       init_proto "$@"
>  }
>  
> +ppp_select_ipaddr()
> +{
> +     local subnets=$1
> +     local res
> +     local res_mask
> +
> +     for subnet in $subnets; do
> +             local addr="${subnet%%/*}"
> +             local mask="${subnet#*/}"
> +
> +             if [ -n "$res_mask" -a "$mask" != 32 ]; then
> +                     [ "$mask" -gt "$res_mask" ] || [ "$res_mask" = 32 ] && {
> +                             res="$addr"
> +                             res_mask="$mask"
> +                     }
> +             elif [ -z "$res_mask" ]; then
> +                     res="$addr"
> +                     res_mask="$mask"
> +             fi
> +     done
> +
> +     echo "$res"
> +}
> +
>  ppp_exitcode_tostring()
>  {
>       local errorcode=$1
> @@ -53,12 +78,14 @@ ppp_generic_init_config() {
>       proto_config_add_boolean authfail
>       proto_config_add_int mtu
>       proto_config_add_string pppname
> +     proto_config_add_string unnumbered
>  }
>  
>  ppp_generic_setup() {
>       local config="$1"; shift
> +     local localip
>  
> -     json_get_vars ipv6 demand keepalive keepalive_adaptive username 
> password pppd_options pppname
> +     json_get_vars ipv6 demand keepalive keepalive_adaptive username 
> password pppd_options pppname unnumbered
>       if [ "$ipv6" = 0 ]; then
>               ipv6=""
>       elif [ -z "$ipv6" -o "$ipv6" = auto ]; then
> @@ -73,6 +100,16 @@ ppp_generic_setup() {
>       fi
>       [ -n "$mtu" ] || json_get_var mtu mtu
>       [ -n "$pppname" ] || pppname="${proto:-ppp}-$config"
> +     [ -n "$unnumbered" ] && {
> +             local subnets
> +             ( proto_add_host_dependency "$config" "" "$unnumbered" )
> +             network_get_subnets subnets "$unnumbered"
> +             localip=$(ppp_select_ipaddr "$subnets")
> +             [ -n "$localip" ] || {
> +                     proto_block_restart "$config"
> +                     return
> +             }
> +     }
>  
>       local lcp_failure="${keepalive%%[, ]*}"
>       local lcp_interval="${keepalive##*[, ]}"
> @@ -86,6 +123,7 @@ ppp_generic_setup() {
>       proto_run_command "$config" /usr/sbin/pppd \
>               nodetach ipparam "$config" \
>               ifname "$pppname" \
> +             ${localip:+$localip:} \
>               ${lcp_failure:+lcp-echo-interval $lcp_interval lcp-echo-failure 
> $lcp_failure $lcp_adaptive} \
>               ${ipv6:++ipv6} \
>               nodefaultroute \
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to