Site Mascot
 

Не удивляйтесь, сайт переехал: был http://smacker.fatal.ru, стал http://smacker.heliohost.org.

Поднимаем PLIP

16.12.2005 13:27

... или как соеденить два компьютера через LPT-порт

 
Предисловие
Хронологически, настройка PLIP-соединения была моим первым экспериментом, но написать об этом руки у меня дошли только сейчас. Надеюсь, что кому-нибудь мой опыт пригодится. Во всяком случае, я видел только англоязычные документы на эту тему.
Интерес в этом экперименте заключался в том, что во-первых, у меня уже давно был куплен кабель, а во-вторых, PLIP обещал развивать скорость передачи данных до 50 Кб/с, что в 5 раз больше, чем (C)SLIP.

 

Матчасть
Для этого соединения потребуется нуль-модемный кабель на LPT-порт (или, как его называют на капиталистическом Западе, «LapLink»). Сей артефакт стоит, если я не ошибаюсь, в районе 2-ух долларов, но при желании можно спаять и самому, благо схему разводки найти несложно. Я же положился на мастерство маленьких потных китайских ладошек, и купил готовый кабель.

 

Раздаём IP и имена машинам
Тут всё то же самое, что и оба предыдущих раза — но для сохранения целостности повествования, всё же повторюсь: надо выбрать IP-адреса и имена для наших машин и указывать их в /etc/hosts. Адреса желательно брать из интервалов, закреплённых стандартом за локальными сетями.
В моём случае /etc/hosts выглядит так:
 127.0.0.1	 localhost.localdomain   localhost
 192.168.93.1     desktop
 192.168.93.2     notebook 

 

Пишем стартовые скрипты
Для запуска PLIP-соединения напишем следующий скрипт (у меня он назван /sbin/plip-on):
 #!/bin/sh
 /sbin/rmmode lp
 /sbin/rmmode parport_pc
 /sbin/rmmode parport
 /sbin/modprobe parport
 /sbin/modprobe parport_pc io=0x378 irq=7
 /sbin/modprobe plip
 /sbin/ifconfig plip0 desktop pointopoint notebook up
 /sbin/route add notebook dev plip0 

 

Первые три строки в начале — выгрузка модуля ядра, отвечающего за «штатную» работу с портом принтера — то есть для печати — и на всякий случай, модулей, которые мы как раз будем использовать. Дело в том, что в общем случае PLIP-соединение не может работать одновременно с принтером на LPT, даже если физически есть два LPT разъёма. Это можно обойти патчем, но я не думаю, что кто-нибудь захочет так заморачиваться. Во всяком случае, едва ли такое желание возникнет у того, кто не в состоянии наложить патч. Мне же это не нужно, так как мой принтер сидит на USB (хотя когда-то давно подключался и через LPT, так как HP3820 умеет и то, и другое); и по сложившейся традиции я буду писать только о том, что сам сделал.
Далее мы подгружаем модуль для работы с параллельным портом, и далее — для работы с LPT-портом для PC. Последнему надо указать адрес ввода-вывода нашего порта, его прерывание и (опционально) канал dma.
Варианты значений могут быть 0x3bc, 0x378 и 0x278 для io и 5 и 7 для irq. Насколько я понимаю, сочетание 0x378/7 является наиболее вероятным. На всякий случай, эти настройки можно посмотреть и изменить в BIOS компьютера (и непременно убедится, что в качестве режима работы LPT порта указано что угодно, но только не centronics/unidirectional — при возможности передачи данных только в одну сторону сети, очевидно, не бывает).
Обращаю внимание на то, что если не указывать параметры для LPT порта, то это приведёт к его работе в «IRQ-less mode», который «is fairly inefficient» (это цитата из сообщений dmesg). Если говорить внятно — без указания IRQ ничего не выйдет. У меня пинг прошёл только один раз из, наверное, полутора сотен попыток. В статье Linux Journal «Quickly Setting Up PLIP and NFS» (автор Loris Renggli, от 01.06.1998), которой я пользовался в качестве рукводства к действию, этот момент не был затронут никак — и модуль plip предлагалось грузить «просто так», предполагая, что порт уже каким-то чудесным образом настроен.
Далее — загружаем модуль plip и создаём сетевой интерфейс, связывая через устройство plip0 (которое появится, когда будет загружен модуль — конкретно можно посмотреть в dmesg) наши машины. И, наконец, устанавливаем маршрутизацию.
Вот вывод (последние строки, разумеется) dmesg после запуска этого скрипта:
 parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE,EPP]
 NET3 PLIP version 2.4-parport gniibe@mri.co.jp
 plip0: Parallel port at 0x378, using IRQ 7. 

 

Если дать ifconfig, то мы увидим, что появился новый сетевой интерфейс:

 

 plip0
 Link encap:Ethernet  HWaddr FC:FC:C0:A8:5D:01
 inet addr:192.168.93.1  P-t-P:192.168.93.2  Mask:255.255.255.255
 UP POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:10
 RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
 Interrupt:7 Base address:0x378 

 

Теперь PLIP будет ждать соединения с другой машины. Как и (C)SLIP, он не имеет ограничений по времени ожидания, и после разрыва соединения будет готов к установлению нового.

 

На второй машине скрипт должен быть таким же, но, разумеется, имена машин (desktop/notebook) надо поменять местами.
Кстати говоря, автор вышеозначенной статьи предлагает в скрипте на «второстепенной» машине, т.е. на ноутбуке, устанавливать десктоп в качестве гейтвея — т.е. чтобы любые сетевые запросы на другие машины всё равно передавались через десктоп — что будет нужно, например, для связывания ноутбука с сетью, к которой подключён десктоп, или для расшаривания модемного соединения с интернетом. Ни того, ни другого у меня нет, но саму строку я на всякий случай приведу:
 /sbin/route add default gw desktop dev plip0 

 

Для более тонкой настройки соединения можно воспользоваться программой plipconfig.

 

Отключение PLIP
Для этого снова пишем скрипт; у меня это, как нетрудно догадаться, /sbin/plip-off:

 

 #!/bin/sh
 /sbin/route del notebook
 /sbin/ifconfig plip0 down
 /sbin/rmmode plip
 /sbin/rmmode parport_pc
 /sbin/rmmode parport
 /sbin/modprobe parport
 /sbin/modprobe parport_pc
 /sbin/modprobe lp 

 

Тут всё просто: убираем запись из таблицы маршрутизации, убираем сетевой интерфейс, выгружаем модули, загружаем обратно выгруженные. Разумеется, если у вас нет LPT принтера, то последнее делать необязательно.
На второй машине имена машин (desktop/notebook) тоже надо поменять местами.

 

Итоги
Соединение развивает скорость передачи данных до 40-50 Кб/С, что вполне себе неплохо. Единственное, что меня крайне озадачивает — при передаче файлов по PLIP нагрузка на процессоры обеих машин почти максимальна. Я не знаю, почему это происходит и как с этим бороться (хотя пробовал несколько разных способов), но есть косвенная (и непроверенная) информация, что это может зависеть от распайки кабеля. Впрочем, для того, что я собирался делать — пересылать ограниченное количество данных с ноутбука и на ноутбук (не тратясь на usb-flash или сетевую карту PCMCIA), это вполне подходит. И снова я использую ssh/sshd и mc.

 

Послесловие
Автор вышеупомянутой статьи, как явствует из её названия, после установки PLIP поднимал NFS (Network File System), т.е. через сеть подключал к файловой системе одного компьютера диск удалённого. Я это тоже сделал, но доложу вам, что учитывая степень загруженности процессора при передаче данных через PLIP, это абсолютно бессмысленно. Хотя это по-своему элегантно.
  1. Я буду рад, если вы оставите свой отзыв об этой заметке:

    Никнейм

    Email

    URL

    Заголовок комментария

    Проверка на человечность
    - Введите буквы:
    The CAPTCHA image