[OpenWrt-Devel] [PATCHv2] ppp : Unnumbered support
Steven Barth
cyrus at openwrt.org
Fri Jun 12 03:40:04 EDT 2015
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 <dedeckeh at 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 at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list