Changeset 32563


Ignore:
Timestamp:
2012-07-01T12:38:45+02:00 (6 years ago)
Author:
jow
Message:

packages/net/xl2tpd: netifd support

This integrates xl2tpd suppport into netifd, based on what I saw for ppp and pptp.
I also changed the init script so that it makes sure that all modules needed for
kernel-mode l2tp support are loaded at the time that xl2tpd is started, as
otherwise xl2tpd falls back into using user-mode l2tp.

Signed-off-by: Daniel Golle <dgolle@…>

Location:
packages/net/xl2tpd
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • packages/net/xl2tpd/Makefile

    r31561 r32563  
    6262        $(INSTALL_DATA) ./files/options.xl2tpd $(1)/etc/ppp/ 
    6363 
    64         $(INSTALL_DIR) $(1)/lib/network 
    65         $(INSTALL_DATA) ./files/l2tp.sh $(1)/lib/network 
     64        $(INSTALL_DIR) $(1)/lib/netifd/proto 
     65        $(INSTALL_BIN) ./files/l2tp.sh $(1)/lib/netifd/proto 
    6666endef 
    6767 
  • packages/net/xl2tpd/files/l2tp.sh

    r31561 r32563  
    1 find_route() { 
    2         ip route get $1 | sed -e 's/ /\n/g' | \ 
    3             sed -ne '1p;/via/{N;p};/dev/{N;p};/src/{N;p};/mtu/{N;p}' 
     1#!/bin/sh 
     2 
     3[ -x /usr/sbin/xl2tpd ] || exit 0 
     4 
     5[ -n "$INCLUDE_ONLY" ] || { 
     6        . /lib/functions.sh 
     7        . ../netifd-proto.sh 
     8        init_proto "$@" 
    49} 
    510 
    6 scan_l2tp() { 
    7         config_set "$1" device "l2tp-$1" 
     11proto_l2tp_init_config() { 
     12        proto_config_add_string "username" 
     13        proto_config_add_string "password" 
     14        proto_config_add_string "keepalive" 
     15        proto_config_add_string "pppd_options" 
     16        proto_config_add_boolean "defaultroute" 
     17        proto_config_add_boolean "peerdns" 
     18        proto_config_add_boolean "ipv6" 
     19        proto_config_add_int "mtu" 
     20        proto_config_add_string "server" 
     21        available=1 
     22        no_device=1 
    823} 
    924 
    10 stop_interface_l2tp() { 
     25proto_l2tp_setup() { 
    1126        local config="$1" 
    12         local lock="/var/lock/l2tp-${config}" 
    13         local optfile="/tmp/l2tp/options.${config}" 
    14         local l2tpcontrol=/var/run/xl2tpd/l2tp-control 
    15  
    16         lock "$lock" 
    17  
    18         [ -p ${l2tpcontrol} ] && echo "r l2tp-${config}" > ${l2tpcontrol} 
    19         rm -f ${optfile} 
    20  
    21         for ip in $(uci_get_state network "$1" serv_addrs); do 
    22             ip route del "$ip" 2>/dev/null 
    23         done 
    24  
    25         lock -u "$lock" 
    26 } 
    27  
    28 setup_interface_l2tp() { 
    29         local config="$2" 
    30         local lock="/var/lock/l2tp-${config}" 
     27        local iface="$2" 
    3128        local optfile="/tmp/l2tp/options.${config}" 
    3229 
    33         lock "$lock" 
     30        local ip serv_addr server 
     31        json_get_var server server && { 
     32                for ip in $(resolveip -t 5 "$server"); do 
     33                        ( proto_add_host_dependency "$config" "$ip" ) 
     34                        serv_addr=1 
     35                done 
     36        } 
     37        [ -n "$serv_addr" ] || { 
     38                echo "Could not resolve server address" 
     39                sleep 5 
     40                proto_setup_failed "$config" 
     41                exit 1 
     42        } 
    3443 
    3544        if [ ! -p /var/run/xl2tpd/l2tp-control ]; then 
    36             /etc/init.d/xl2tpd start 
     45                /etc/init.d/xl2tpd start 
    3746        fi 
    38          
    39         local device 
    40         config_get device "$config" device "l2tp-$config" 
    4147 
    42         local server 
    43         config_get server "$config" server 
     48        json_get_vars ipv6 peerdns defaultroute demand keepalive username password pppd_options 
     49        [ "$ipv6" = 1 ] || ipv6="" 
     50        [ "$peerdns" = 0 ] && peerdns="" || peerdns="1" 
     51        if [ "$defaultroute" = 1 ]; then 
     52                defaultroute="defaultroute replacedefaultroute"; 
     53        else 
     54                defaultroute="nodefaultroute" 
     55        fi 
     56        if [ "${demand:-0}" -gt 0 ]; then 
     57                demand="precompiled-active-filter /etc/ppp/filter demand idle $demand" 
     58        else 
     59                demand="persist" 
     60        fi 
    4461 
    45         local username 
    46         config_get username "$config" username 
    47  
    48         local password 
    49         config_get password "$config" password 
    50  
    51         local keepalive 
    52         config_get keepalive "$config" keepalive 
    53  
    54         local pppd_options 
    55         config_get pppd_options "$config" pppd_options 
    56  
    57         local defaultroute 
    58         config_get_bool defaultroute "$config" defaultroute 1 
    59         [ "$defaultroute" -eq 1 ] && \ 
    60                 defaultroute="defaultroute replacedefaultroute" || defaultroute="nodefaultroute" 
     62        [ -n "$mtu" ] || json_get_var mtu mtu 
    6163 
    6264        local interval="${keepalive##*[, ]}" 
    6365        [ "$interval" != "$keepalive" ] || interval=5 
    6466 
    65         local dns 
    66         config_get dns "$config" dns 
    67  
    68         local has_dns=0 
    69         local peer_default=1 
    70         [ -n "$dns" ] && { 
    71                 has_dns=1 
    72                 peer_default=0 
    73         } 
    74  
    75         local peerdns 
    76         config_get_bool peerdns "$config" peerdns $peer_default 
    77  
    78         [ "$peerdns" -eq 1 ] && { 
    79                 peerdns="usepeerdns" 
    80         } || { 
    81                 peerdns="" 
    82                 add_dns "$config" $dns 
    83         } 
    84  
    85         local ipv6 
    86         config_get ipv6 "$config" ipv6 1 
    87         [ "$ipv6" -eq 1 ] && ipv6="+ipv6" || ipv6="" 
    88  
    89         local serv_addrs="" 
    90         for ip in $(resolveip -t 3 "$server"); do 
    91                 append serv_addrs "$ip" 
    92                 ip route replace $(find_route $ip) 
    93         done 
    94         uci_toggle_state network "$config" serv_addrs "$serv_addrs" 
    95  
    96         # fix up the netmask 
    97         config_get netmask "$config" netmask 
    98         [ -z "$netmask" -o -z "$device" ] || ifconfig $device netmask $netmask 
    99  
    100         config_get mtu "$config" mtu 
    101  
    10267        mkdir -p /tmp/l2tp 
    10368 
    10469        echo ${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}} > "${optfile}" 
    105         echo "$peerdns" >> "${optfile}" 
     70        echo "${peerdns:+usepeerdns}" >> "${optfile}" 
    10671        echo "$defaultroute" >> "${optfile}" 
    10772        echo "${username:+user \"$username\" password \"$password\"}" >> "${optfile}" 
    10873        echo "ipparam \"$config\"" >> "${optfile}" 
    10974        echo "ifname \"l2tp-$config\"" >> "${optfile}" 
     75        echo "ip-up-script /lib/netifd/ppp-up" >> "${optfile}" 
     76        echo "ipv6-up-script /lib/netifd/ppp-up" >> "${optfile}" 
     77        echo "ip-down-script /lib/netifd/ppp-down" >> "${optfile}" 
     78        echo "ipv6-down-script /lib/netifd/ppp-down" >> "${optfile}" 
    11079        # Don't wait for LCP term responses; exit immediately when killed. 
    11180        echo "lcp-max-terminate 0" >> "${optfile}" 
    11281        echo "${ipv6} ${pppd_options}" >> "${optfile}" 
     82        echo "${mtu:+mtu $mtu mru $mtu}" >> "${optfile}" 
    11383 
    114         xl2tpd-control remove l2tp-${config} 
    115         # Wait and ensure pppd has died. 
    116         while [ -d /sys/class/net/l2tp-${config} ]; do 
    117             sleep 1 
    118         done 
    119          
    12084        xl2tpd-control add l2tp-${config} pppoptfile=${optfile} lns=${server} redial=yes redial timeout=20 
    12185        xl2tpd-control connect l2tp-${config} 
     86} 
    12287 
    123         lock -u "${lock}" 
     88proto_l2tp_teardown() { 
     89        local interface="$1" 
     90        local optfile="/tmp/l2tp/options.${interface}" 
     91 
     92        case "$ERROR" in 
     93                11|19) 
     94                        proto_notify_error "$interface" AUTH_FAILED 
     95                        proto_block_restart "$interface" 
     96                ;; 
     97                2) 
     98                        proto_notify_error "$interface" INVALID_OPTIONS 
     99                        proto_block_restart "$interface" 
     100                ;; 
     101        esac 
     102 
     103        xl2tpd-control disconnect l2tp-${interface} 
     104        # Wait for interface to go down 
     105        while [ -d /sys/class/net/l2tp-${interface} ]; do 
     106                sleep 1 
     107        done 
     108 
     109        xl2tpd-control remove l2tp-${interface} 
     110        rm -f ${optfile} 
    124111} 
     112 
     113[ -n "$INCLUDE_ONLY" ] || { 
     114        add_protocol l2tp 
     115} 
  • packages/net/xl2tpd/files/xl2tpd.init

    r20276 r32563  
    99 
    1010start() { 
     11        # make sure kernel modules are loaded before starting xl2tpd, otherwise 
     12        # kernel-mode l2tp support won't work 
     13        local load 
     14        for module in slhc ppp_generic ppp_async pppox l2tp_core l2tp_netlink l2tp_ppp ; do 
     15                grep -q "$module" /proc/modules && continue 
     16                /sbin/insmod $module 2>&- >&- 
     17                load=1 
     18        done 
     19        [ "$load" = "1" ] && sleep 1 
     20 
    1121        mkdir -p $RUN_D/$BIN 
    1222        [ -f $DEFAULT ] && . $DEFAULT 
Note: See TracChangeset for help on using the changeset viewer.