Netgraph

netgraph — модульна мережева підсистема ядра FreeBSD, заснована на принципі графів. У Netgraph будується граф з вузлів різних типів, вузол кожного типу має деяку кількість входів/виходів (хуків, англ. hooks). Вузол netgraph дозволяє виробляти певні дії над пакетом, що проходить через нього. Деякі Netgraph вузли надають підтримку різних протоколів, інкапсуляцій, таких як L2TP, PPTP, PPPoE, PPP, ATM, bluetooth, інші служать для зв'язки модулів і сортування/маршрутизації між вузлами netgraph, наприклад bpf, split.

Netgraph також портований на інші операційні системи: NetBSD[1] і Ядро Linux 2.4 і 2.6 від 6WIND[2].

Історія

netgraph був розроблений і вперше реалізований Джуліаном Елішером (англ. Julian Elischer) за участю Арчі Кобса (англ. Archie Cobbs) в Whistle Communications, Inc. для роутера Whistle InterJet, який працював під управлінням модифікованої FreeBSD 2.2. До основного дерева FreeBSD netgraph був включений у версії 3.4.

Типи вузлів

ТипОпис
Мережеві інтерфейси, пристрої та сокети
etherЯвляє собою існуючий Ethernet-інтерфейс, створюється автоматично.
gifЯвляє собою існуючий gif-інтерфейс, створюється автоматично.
ttyЯвляє собою підключення до терміналу (TTY).
ifaceЯвляє собою мережевий інтерфейс. Для кожного нового вузла створюється новий пристрій ng*. Створений інтерфейс за допомогою ifconfig можна налаштувати як широкомовний або точка-точка.
eifaceЯвляє собою Ethernet-інтерфейс. Для кожного нового вузла створюється новий пристрій ngeth*. Створений інтерфейс можна налаштувати за допомогою ifconfig.
deviceЯвляє собою системний пристрій. Для кожного нового вузла створюється новий пристрій ngd*, доступний для операцій open, close, read та write.
socketАвтоматично створюваний вузол, представляє сокет типу NG_CONTROL. Дозволяє додаткам взаємодіяти з підсистемою netgraph.
ksocketСтворює новий BSD-сокет, що дозволяє підсистемі netgraph взаємодіяти з іншими хостами або службами (антипод socket). Підтримує тільки один хук, ім'я якого у вигляді сімейство/тип/протокол визначає тип створюваного сокета.
Мережеві протоколи
ciscoІнкапсулює і декапсулює дані по протоколу Cisco HDLC. Хук downstream має бути з'єднаний до синхронної лінії. Хуки inet, inet6, atalk, і ipx використовуються для передачі пакетів однойменних протоколів і, зазвичай, з'єднуються з відповідними типами вузлів.
frame_relayРобе інкапсуляцію, декапсуляцію і мультиплексування даних за протоколом Frame relay. Хук downstream має бути з'єднаний до синхронної лінії. Хуки dlci* можуть з'єднуватися з відповідним каналом DLCI.
gif_demuxІнкапсулює і декапсулює дані gif-інтерфейсу. Хук gif має бути з'єднаний c вузлом типу gif, хуки inet, inet6, atalk, ipx, atm , natm і ns відповідають однойменним протоколам.
l2tpРеалізує інкапсуляцію протоколу L2TP відповідно до RFC 2661.
lmiПідтримка LMI frame relay.
mppcПідтримка стиснення і шифрування MPPC/MPPE.
pppМультиплексування даних PPP.
pppoeПодтримка PPPoE.
pptpgreРеалізація GRE над IP за протоколом PPTP до відповідності з RFC 2637.
vlanМультиплексування кадрів IEEE 802.1Q VLAN.
Комутація
bridgeРеалізує Ethernet-міст на одному або декількох з'єднаннях. Кожне з'єднання (відповідне приєднаному хуку) використовується для прийому і передачі кадрів Ethernet, принцип дії аналогічний комутатора.
hubНадає найпростіший механізм розподілу даних по декількох з'єднанням. Принцип дії аналогічний концентратору: дані, прийняті з будь-якого хука пересилаються на всі інші хуки.
one2manyНадає механізм розподілу даних з одного з'єднання по декількох. При цьому алгоритм розподілу або копіює дані з хука one на всі хуки many* (як hub), або тільки на один послідовно (кожен пакет відправляється на різні хуки). Дані, що приходять з будь-якого хука many*, копіюються на хук one.
teeНадає можливість «підслуховувати» обмін даними між двома вузлами. Дані, отримані через хук right копіюються на хуки left і right2left, а отримані через left — на right і left2right.
splitДілить один двоспрямований потік даних на два односпрямованих.
etfФільтрує і розподіляє дані на підставі типу Ethernet-пакета.
Тестування та налагодження
echoПовертає будь-які дані і керуючі повідомлення відправнику.
holeВідкидає всі отримані дані і керуючі повідомлення.
Інші
atm
async
atmllc
bluetooth
bpfДозволяє здійснювати фільтрацію/сортування пакетів на основі правил BPF.
bt3c
btsocket
fecАгрегує кілька Ethernet інтерфейсів за технологією EtherChannel.
h4
hci
ip_inputПакети що передаються на цей вузол потрапляють в ip_input операційної системи і далі обробляються так само, як і ті що прийшли з іншого вузла по мережі.
l2cap
netflowРеалізація протоколу Netflow.
rfc1490
spppРеалізація PPP з'єднань для послідовний каналів всередині Netgraph.
sscfu
sscop
ubt
UI
uni
vjcРеалізація стиснення Якобсона.

Див. також

Примітки

  1. tech-net: NetBSD port of the freebsd netgraph environment/
  2. 6WIND, комерційний закритий порт.

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.