Bug 14021 - missing eth setting (too early attempt to bring up stacked interface)
: missing eth setting (too early attempt to bring up stacked interface)
Status: NEW
: Sisyphus
(All bugs in Sisyphus/alterator-net-pptp)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2008-01-15 21:09 by
Modified: 2009-10-30 13:53 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2008-01-15 21:09:11
etcnet-0.9.5-alt1 при такой конфигурации (по ext избыточна и наверняка сводится
к ONBOOT, BOOTPROTO, USE_IFPLUGD и LINKDETECT) слишком рано запускает pppd,
даже
если попытки подъёма обоих интерфейсов укладываются в одну и ту же секунду в
логе:

=== /etc/net/ifaces/ext/options 
DISABLED=no
BOOTPROTO=dhcp
ONBOOT=yes
USE_PCMCIA=no
USE_HOTPLUG=no
USE_IFPLUGD=auto
LINKDETECT=yes
CONFIG_IPV4=yes
TYPE=eth
MODULE=8139too
#MODULE=skge
===

=== /etc/net/ifaces/ppp0/options
ONBOOT=no
PPPTYPE=pptp
PPTP_SERVER=vpn.gw.ip.addr
REQUIRES=ext
===

=== /var/log/messages
Jan 15 13:40:38 home ifplugd(ext)[3410]: ifplugd 0.28 initializing.
Jan 15 13:40:38 home kernel: ext: link up, 100Mbps, full-duplex, lpa 0x41E1
Jan 15 13:40:38 home ifplugd(ext)[3410]: Using interface ext/00:02:44:6B:77:0E
with driver <8139too> (version: 0.9.27)
Jan 15 13:40:38 home ifplugd(ext)[3410]: Using detection mode: SIOCETHTOOL
Jan 15 13:40:38 home ifplugd(ext)[3410]: Initialization complete, link beat
detected.
Jan 15 13:40:38 home pppd[3428]: pppd 2.4.4 started by root, uid 0
Jan 15 13:40:38 home pppd[3428]: Using interface ppp0
Jan 15 13:40:38 home pppd[3428]: Connect: ppp0 <--> /dev/pts/6
Jan 15 13:40:38 home pptp[3429]: anon log[main:pptp.c:267]: The synchronous
pptp
option is NOT activated
Jan 15 13:40:38 home pptp[3429]: anon warn[pptp_gre_bind:pptp_gre.c:95]:
connect: Network is unreachable
Jan 15 13:40:38 home pptp[3429]: anon fatal[main:pptp.c:275]: Cannot bind GRE
socket, aborting.
Jan 15 13:40:38 home pppd[3428]: Script /usr/sbin/pptp --nolaunchpppd
VPN.GW.IP.ADDR  finished (pid 3429), status = 0x1
Jan 15 13:40:38 home pppd[3428]: Modem hangup
Jan 15 13:40:38 home pppd[3428]: Connection terminated.
Jan 15 13:40:38 home pppd[3428]: Exit.
Jan 15 13:40:38 home ifplugd(ext)[3410]: Executing
'/etc/net/scripts/ifplugd.action ext up'.
Jan 15 13:40:38 home dhcpcd[3525]: dhcpConfig: fopen: Permission denied
Jan 15 13:40:38 home dhcpcd.exe: interface ext has been configured with new
IP=MY.ETH.IP.ADDR
Jan 15 13:40:38 home ifplugd(ext)[3410]: Program executed successfully.
===

Пока в alterator-net-pptp 0.5.1 (сегодня надеюсь пушнуть в git.alt) сделано
так:

=== alterator-net-pptp/backend3/net-pptp
################### interface helpers

# sleep order is on purpose: dhcp runs in background
start_iface()
{
        [ -n "$1" ] || return
        debug -n "start_iface[$1]: "
        for i in `seq 1 $retries`; do
                ifcheckup "$1" && break
                ifup "$1"
                sleep 1
        debug -n "$i "
        done
}

# if it's up, ensure it's down first, then back up
stop_iface()
{
        [ -n "$1" ] || return
        debug -n "stop_iface[$1]: "
        for i in `seq 1 $retries`; do
        debug -n "$i "
                ifcheckup "$1" || break
                ifdown "$1"
                sleep 1
        done
}

# do our best so that $1 is working
# FIXME: this should become redundant when etcnet
# gets fixed
bring_up()
{
        [ -n "$1" ] || return
        debug "bring_up[$1]"

        # ensure underlying iface is up
        start_iface "$in_iface"

        # workaround: etcnet might try to bring up ppp too early
        # when underlying eth is configured via dhcp and is down
        sleep 1

        # try to wait until ppp0 might go down (otherwise 
        # additional static route might not appear)
        stop_iface "$1"
        start_iface "$1"
}
===

Последнюю функцию надеюсь со временем упразднить :)

=== /usr/lib/alterator-net-common/ifcheckup
#!/bin/sh

[ -n "$(/sbin/ip link show up dev "$1")" ]
===
------- Comment #1 From 2008-03-15 18:12:21 -------
Поведение воспроизводится, но требует переоценки. Так как по сути задачи
интерфейс ppp0 должен реагировать на состояние ext, то использование REQUIRES
верно. Но управляющее соединение протокола GRE требует двунаправленного обмена
пакетами, а для этого необходимым (но не достаточным) свойством является
назначенный IP-адрес. При запуске же ifup ppp0 интерфейс, показанный в
REQUIRES,
будет проверен только на наличие UP, но не IP-адреса. UP на интерфейсе будет
всегда, так как его будет сторожить ifplugd. Таким образом, получается, что
ppp0
не может достоверно определить состояние своей зависимости.
Необходим другой подход. Состоянием ppp0 управлять не нужно, пусть этим
занимается ext. При ifdown ext зависимый интерфейс ppp0 остановится и так (так
как IFDOWN_CHILDREN=1 по умолчанию), а для того, чтобы ppp0 поднимался при
реальном, а не мнимом поднятии ext, в ext/options нужно приписать:
IFUP_CHILDREN=yes
Так эта модель будет выглядеть более естественно. Если возражений нет,
предлагаю
закрыть, как INVALID.
------- Comment #2 From 2008-03-16 19:25:33 -------
Спасибо, давай лучше тогда перевесим на /net-pptp.
------- Comment #3 From 2008-03-17 11:29:21 -------
Миша, если задача --- дать интерактивному пользователю настроить и управлять
PPtP, то он может не ожидать такой автоматики. Я думал, конфигурация делается
для самостоятельно работающей мыльницы. Для пользователя же методически
правильным будет вообще оторвать REQUIRES и IFUP_CHILDREN не устанавливать. ext
поднимется, а потом пользователь сам решит, поднимать PPtP или нет. В общем,
внеси ясность с начальными условиями.
------- Comment #4 From 2008-03-17 20:07:59 -------
(In reply to comment #3)
> Миша, если задача --- дать интерактивному пользователю настроить и управлять
> PPtP
Эээ... именно так.  Потому и перевесил на настраивалку (которая заодно обучена
ifup/ifdown делать по кнопке).

Надо будет допинать persist сотоварищи, чтоб по возможности не рисковать вечным
залипанием на загрузке -- тогда может получиться ближе к "настроил и забыл"...