[sisyphus] Работа с PPP в /etc/net

Denis Ovsienko =?iso-8859-1?q?pilot_=CE=C1_altlinux=2Eru?=
Вт Авг 30 14:05:36 MSD 2005


> Я тут провёл исследования... Результаты таковы:
> 
> 1. Два соединения с одинаковым значением параметра unit нормально
>    устанавливаются, и одно из них получает unit не
>    соответствующий указанному в команде. pid-файлы соответствуют
>    реальным unit-ам.
Чего и следовало ожидать.

> 2. Два соединения с одинаковым значением параметра linkname
>    нормально устанавливаются. Каждому соответствует pid-файл с
>    именем вида pppX.pid. Соединение, запущенное позднее, затирает
>    информацию о предыдущем соединении в файле ppp-linkname.pid.
Также неудивительно.

> Ясно, что всё плохо. Например, если в etcnet настроен интерфейс
> ppp0, а пользователь уже установил соединение ppp0 при помощи
> kppp, например, по etcnet перестаёт адекватно работать. Так как,
> во-первых, не запускает своё соединение, во-вторых, без лишних
> слов может убить пользовательское соединение, если попросят.
Его просят --- оно и убивает. Я предлагаю:

1. Не использовать параметр unit в ppp-интерфейсах /etc/net. Он уже есть в
названии интерфейса.
2. Именовать ppp-интерфейсы /etc/net начиная с некоторого стартового unit.

Это не исправит фундаментальных недостатков PPP в Linux, но облегчит жизнь
и добавит порядка тем, кто последует этим простым рекомендациям.


> Поэтому, надо как-то навести соответствие между настроенными
> PPP-интерфейсами etcnet и установленными PPP-соединениями. Для
> этого нам нужно заранее обладать некоторой информацией, которая
> будет верна как до установки соединения, так и после. Поскольку
> pppd не генерирует сам нечто уникальное, которое он мог бы нам
> сообщить, то мы вынуждены сгенерировать это сами, и придумать
> некоторый механизм хранения этой информации. Остаётся только
> надеяться на то, что пользователь в порыве безумия не разломает
> этот механизм. :-)
> 
> Например:
> 
> PIDFILE=`mktemp /var/run/ppp-XXXXXXXX.pid` || exit 1
> LINKNAME=`echo $TMPFILE | awk --re-interval '// { match( $0, "[[:alnum:]]{6,}", q ); print q[0] }'`
> pppd ... linkname $LINKNAME
> ln -s /var/run/$PIDFILE /var/run/etcnet/$NAME
Я специально избавился от всех вызовов awk в /etc/net, потому что ничего кроме
{ print $1 } ему скормить не умею. Я думал в сторону ipparam.

-- 
    DO4-UANIC



Подробная информация о списке рассылки Sisyphus