Bug 14021 - missing eth setting (too early attempt to bring up stacked interface)
Summary: missing eth setting (too early attempt to bring up stacked interface)
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: alterator-net-pptp (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: Mikhail Efremov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-01-15 21:09 MSK by Michael Shigorin
Modified: 2009-10-30 13:53 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Shigorin 2008-01-15 21:09:11 MSK
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 Denis Ovsienko 2008-03-15 18:12:21 MSK
Поведение воспроизводится, но требует переоценки. Так как по сути задачи
интерфейс 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 Michael Shigorin 2008-03-16 19:25:33 MSK
Спасибо, давай лучше тогда перевесим на /net-pptp.
Comment 3 Denis Ovsienko 2008-03-17 11:29:21 MSK
Миша, если задача --- дать интерактивному пользователю настроить и управлять
PPtP, то он может не ожидать такой автоматики. Я думал, конфигурация делается
для самостоятельно работающей мыльницы. Для пользователя же методически
правильным будет вообще оторвать REQUIRES и IFUP_CHILDREN не устанавливать. ext
поднимется, а потом пользователь сам решит, поднимать PPtP или нет. В общем,
внеси ясность с начальными условиями.
Comment 4 Michael Shigorin 2008-03-17 20:07:59 MSK
(In reply to comment #3)
> Миша, если задача --- дать интерактивному пользователю настроить и управлять
> PPtP
Эээ... именно так.  Потому и перевесил на настраивалку (которая заодно обучена
ifup/ifdown делать по кнопке).

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