FAQ FreeBSD - Сеть и протоколы. Часть 4

ОГЛАВЛЕНИЕ

10.18. Что означают ошибки CCP

В файле протокола появляются такие сообщения об ошибках:
    CCP: CcpSendConfigReq
    CCP: Received Terminate Ack (1) state = Req-Sent (6)

Это происходит, если ppp пытается установить компрессию типа Predictor1, а
противоположная сторона не хочет устанавливать никакой компрессии. Эти
сообщения безобидны, но если вы хотите от них избавиться, вы можете запретить
компрессию Predictor1 и у себя тоже:
    disable pred1

10.19. Ppp блокируется во время передачи файла с ошибками ввода-вывода

В FreeBSD 2.2.2 и ранее существовала ошибка в драйвере устройства tun, которая
не позволяла проходить пакетам размером, превышающим значение MTU интерфейса.
Приём пакета, большего, чем размер MTU, приводит к ошибке ввода-вывода, который
протоколируется через syslogd.

Спецификация протокола ppp утверждает, что MRU, равное 1500, должно всегда
подходить как минимальное, несмотря на согласование LCP, таким образом, если
сделать MTU меньше 1500, ваш провайдер может начать передавать пакеты размером
1500, несмотря ни на что, и вы это почувствуете - ваше соединение
заблокируется.
Проблема может быть обойдена, если никогда не ставить MTU, меньшее, чем 1500,
для FreeBSD 2.2.2 и ранее.

10.20. Почему ppp не протоколирует скорость соединения?

Для вывода протокола взаимодействия с модемом вам нужно включить следующее:
    set log +connect

Это заставит ppp протоколировать всё, вплоть до последней прочтённой через
"expect" строки.
Если вы хотите видеть скорость соединения и используете PAP или CHAP (и поэтому
вам не нужно определять никаких сценариев входа через set login после получения
строки CONNECT сценарием дозвонки dial), вы должны указать ppp, что нужно
ожидать полную строку CONNECT, вроде следующего:
    set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 4 \
      \"\" ATZ OK-ATZ-OK ATDT\\T TIMEOUT 60 CONNECT \\c \\n"

Здесь мы получили строку CONNECT, ничего не посылаем, затем ожидаем символа
перевода строки, заставляя ppp принять полный ответ модема.

10.21. Ppp игнорирует символ \ в chat-скрипте

Ppp обрабатывает каждую строку в ваших конфигурационных файлах, так что он
может проинтерпретировать строку вида set phone "123 456 789" правильно (и
обнаружить. что номер является на самом деле единственным аргументом. Для того,
чтобы указать символ ", вы должны экранировать его символом обратного слэша
(\).
Когда интерпретатор chat обрабатывает каждую строку, он ещё раз просматривает
аргумент для того, чтобы найти какую-либо специальную последовательность типа \
P или \T (обратитесь к Справочнику). В результате этой двойной интерпретации вы
должны всегда использовать правильное число экранирующих символов.
Если вам нужно передать символ \, например, вашему модему, вам необходимо
указать что-то типа:
    set dial "\"\" ATZ OK-ATZ-OK AT\\\\X OK"

что приведёт к такой последовательности:
    ATZ
    OK
    AT\X
    OK

или
    set phone 1234567
    set dial "\"\" ATZ OK ATDT\\T"

что даст такую последовательность:
    ATZ
    OK
    ATDT1234567

10.22. Ppp получает ошибку защиты, но я не вижу файла ppp.core

Ppp (или любая другая программа такого рода) никогда не создаёт файлов дампа
памяти. Так так ppp запускается с эффективным uid, равным 0, то операционная
система не будет записывать дамп памяти ppp на диск перед его завершением.
Если, однако ppp всё же прекратит работу из-за нарушения защиты, или по другому
сигналу, который вызывает создание дампа памяти, и вы уверены, что используете
самую последнюю версию (смотрите самое начало раздела), то вы должны сделать
следующее:
    % tar xfz ppp-*.src.tar.gz
    % cd ppp*/ppp
    % echo STRIP= >>Makefile
    % echo CFLAGS+=-g >>Makefile
    % make clean all
    % su
    # make install
    # chmod 555 /usr/sbin/ppp

Теперь у вас есть отладочная версия ppp. Вам нужно стать суперпользователем для
запуска ppp, так как соответствующие биты прав были убраны. Когда запустите
ppp, обратите особое внимание на то, какой каталог у вас был текущим на этот
момент.
Итак, если ppp получит ошибку нарушения защиты, он сбросит дамп памяти с именем
ppp.core. Затем вам нужно сделать следующее:
    % su
    # gdb /usr/sbin/ppp ppp.core
    (gdb) bt
    .....
    (gdb) f 0
    ....
    (gdb) i args
    ....
    (gdb) l
    .....

Вся эта информация должна быть предоставлена вместе с вашим вопросом, чтобы
проблему можно было продиагностировать.
Если вы умеете обращаться с gdb, вы можете попробовать найти причины образов
ания дампа, а также адреса и значения относящихся к этому переменных.