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 | Реалізація стиснення Якобсона. |
Див. також
Примітки
- tech-net: NetBSD port of the freebsd netgraph environment/
- 6WIND, комерційний закритий порт.