Инструменты пользователя

Инструменты сайта


Боковая панель

Связь

netgraph

netgraph

Сетевая подсистема netgraph была создана в 1996 году Джулианом Элисчером и Арчи Коббсом, как попытка решить ограниченную поддержку некоторого оборудования и протоколов в FreeBSD. Основная идея новой подсистемы – модульность, комбинация простых инструментов для реализации более сложного решения.

Netgraph строится на взаимодействии узлов (nodes), которые посредством крючков (hooks) создают пару захвата (одну для каждого узла). Крючок узла формируется в момент связывания и определяет, как узел может быть подключен. Данные идут в двух направлениях вдоль ребер (edges) от узла к узлу. Когда узел получает пакет данных, он его обрабатывает и затем отправляет другому узлу. Узел может быть источником/потребителем данных, например, если он связан с аппаратной частью, или может просто добавлять/удалять заголовки, выполнять мультиплексирование и т.п. С каждой новой версией системы количество узлов увеличивалось. Так для FreeBSD 6.х уже были доступны модули, обеспечивающие поддержку: PPPoE, ATM, ISDN,Bluetooth, HDLC, EtherChannel, Frame Relay, L2TP и др. Система построена так, что добавить новый модуль очень легко. В новой версии FreeBSD 7.0 появились новые узлы: ng_car (алгоритмы ограничения трафика и rate-лимитов), ng_deflate (поддержка Deflate сжатия для PPP) и ng_pred1 (Predictor-1 сжатие для PPP). Многие программы завязаны на netgraph. Например, реализация PPP для FreeBSD MPD (mpd.sf.net) использует интерфейс netgraph, благодаря чему большинство операций выполняется на уровне ядра системы, и тем самым повышается скорость работы.

Поддержка ядром

Как правило, специально включать поддержку netgraph в ядре не требуется. Все, что необходимо, доступно в виде модулей. В чем можно убедиться во время работы того же MPD при помощи команды kldstat. Просмотреть все имеющиеся KLD модули узлов, можно введя команду:

> ls /boot/kernel/ng_*.ko
/boot/kernel/ng_UI.ko		/boot/kernel/ng_deflate.ko	/boot/kernel/ng_hole.ko		/boot/kernel/ng_one2many.ko	/boot/kernel/ng_sync_ar.ko
/boot/kernel/ng_async.ko	/boot/kernel/ng_device.ko	/boot/kernel/ng_hub.ko		/boot/kernel/ng_ppp.ko		/boot/kernel/ng_sync_sr.ko

Плюс еще модуль netgraph.ko, который является основным.

При пересборке ядра следует включить группу параметров, найти которую просто:

# grep NETGRAPH /usr/src/sys/conf/NOTES
options NETGRAPH # поддержка netgraph
options NETGRAPH_PPP # поддержка PPP в netgraph
options NETGRAPH_PPTPGRE # поддержка gre-туннелирования
...
netgraph.txt · Последние изменения: 2015/07/22 19:25 (внешнее изменение)