Ключевые слова:netgraph, freebsd, (найти похожие документы)
From: Eugene Mychlo <http://forum.bestcom.ru/index.php?showuser=8>
Newsgroups: http://forum.bestcom.ru
Date: Mon, 29 Jan 2006 18:21:07 +0000 (UTC)
Subject: [FreeBSD] Перевод руководства по ng_one2many
Оригинал: http://forum.bestcom.ru/index.php?showtopic=31
NG_ONE2MANY Руководство по интерфейсам ядра FreeBSD
ИМЯ
ng_one2many - пакетный мультиплексирующий тип узла netgraph
СИНТАКСИС
#include <sys/types.h>
#include <netinet/in.h>
#include <netgraph/netflow/ng_netflow.h>
ОПИСАНИЕ
one2many обеспечивает простой механизм маршрутизации пакетов между
несколькими связями по типу "один ко многим" (и в обратном
направлении, "многие к одному"). Существует единственный крюк с именем
one и множество крюков с именами many0, many1 и т.д. Пакеты,
полученные на любом из крюков many* отправляются в крюк one. Пакеты,
полученные на крюке one отправляются в один или несколько крюков many;
в какой (какие) из крюков отправлять пакеты - определяется
конфигурацией алгоритма передачи этого узла. В любом случае пакеты
остаются неизменными.
Предполагается, что каждый из линков many* может быть либо включен
(up), либо выключен (down). Пакеты никогда не отправляются в
выключенные крюки many. Способ определеня состояния линка зависит от
конфигурации алгоритма обнаружения сбоев этого узла.
Прежде чем интерфейс или линк может быть вставлен в группу, его статус
должен быть помечен как "up". Обычно это устанавливется на
стадииначальной загрузки, в rc.conf (5). Также можно изменить
статус интерфейса на "up" используя ifconfig(8).АЛГОРИТМЫ ПЕРЕДАЧИ
NG_ONE2MANY_XMIT_ROUNDROBIN
Пакеты отправляются в крюки many в последовательно. Каждый последующий
пакет выходит через другой many-крюк.
NG_ONE2MANY_XMIT_ALL
Пакеты отравляются сразу во все крюки many. Каждый пакет уходит через
каждый many-крюк.
В будущем, могут быть добавлены также другие алгоритмы.
ОБНАРУЖЕНИЕ СБОЕВ СВЯЗИ
В настоящее время, единственным алгоритм определения отказов связи,
кроме случая отсоединения крюка, является "ручной" алгоритмом:
используя контрольные сообщения NGM_ONE2MANY_SET_CONFIG (см. ниже),
узлу явно говорится, какие из линков включены. Новые подключенные
линки будут выключены, пока они не будут сконфигурированы иначе.
В будущем, возможно будут добавлены другие алгоритмы.
КРЮЧКИ (HOOKS)
Данный тип узел поддерживает до NG_ONE2MANY_MAX_LINKS крючков, с
именами many0, many1, и т.д., и один крюк с именем one.
УПРАВЛЯЮЩИЕ СООБЩЕНИЯ
Этот тип узла поддерживает стандартные управляющие сообщения.
Дополнительные сообщения:
NGM_ONE2MANY_SET_CONFIG
Устанавливает конфигурацию узла, используя структуру struct
ng_one2many_link_config как аргумент сообщения:
/*структура конфигурации узла*/
struct ng_one2many_config {
u_int32_t xmitAlg; /* как распределять пакеты */
u_int32_t failAlg; /* как обнаруживать отказ связи */
u_char EnabledLinks[NG_ONE2MANY_MAX_LINKS];
};
В настоящее время, для поля xmitAlg возможны значения -
NG_ONE2MANY_XMIT_ROUNDROBIN (по умолчанию) или NG_ONE2MANY_XMIT_ALL.
Для поля failAlg возможно единственное значение -
NG_ONE2MANY_FAIL_MANUAL; оно также является значением по умолчанию.
NGM_ONE2MANY_GET_CONFIG
Возвращает текущую конфигурацию узла в виде структуры struct
ng_one2many_link_config.
NGM_ONE2MANY_GET_STATS
Команда принимает в качестве аргумента 32-х битный номер линка и
возвращает структуру struct ng_one2many_link_stats, содержащую
статистику для соответствующего линка many, который, в текущий момент,
может быть как подкюченн ым, так и отключенным:
/* структура статистики (одинакова для всех линков) */
struct ng_one2many_link_stats {
u_int64_t recvOctets; /*общее количество байт получех из линка */
u_int64_t recvPackets; /*общее количество пакетов получех из линка */
u_int64_t xmitOctets; /*общее количество байт отправленных в линк */
u_int64_t xmitPackets; /*общее количество пакетов отправленных в линк */
};
Для доступа к статистике линка one, нужно использоват номер линка -1.
NGM_ONE2MANY_CLR_STATS
Команда принимает в качестве аргумента 32-х битный номер линка и
очищает статистику этого линка.
NGM_ONE2MANY_GETCLR_STATS
То же что и NGM_ONE2MANY_GET_STATS, но автоматически очищает
статистику для данного линка.
ЗАКРЫТИЕ
Узел закрывается при получении сообщения NGM_SHUTDOWN, или при
отключении всех крюков.
ПРИМЕРЫ
Следующие команды настраивают Ethernet интерфейс fxp0, так чтобы
отправлять пакеты, чередуя физическиe интерфейсы, соответствующие
сетевым интерфейсам fxp0 - fxp3:
# Скрепляем узлы вместе
ngctl mkpeer fxp0: one2many upper one
ngctl connect fxp0: fxp0:upper lower many0
ngctl connect fxp1: fxp0:upper lower many1
ngctl connect fxp2: fxp0:upper lower many2
ngctl connect fxp3: fxp0:upper lower many3
# Позволяем fxp1 - fxp3 отправлять/получать фрэймы fxp0
ngctl msg fxp1: setpromisc 1
ngctl msg fxp2: setpromisc 1
ngctl msg fxp3: setpromisc 1
ngctl msg fxp1: setautosrc 0
ngctl msg fxp2: setautosrc 0
ngctl msg fxp3: setautosrc 0
# Включаем все линки
ngctl msg fxp0:upper setconfig "{ xmitAlg=1 failAlg=1 enabledLinks=[ 1 1 1 1 ] }"
# Поднимаем интерфейс
ifconfig fxp0 192.168.1.1 netmask 0xfffffffc
Проделывая подобное на другой машине (используя адрес 192.168.1.2),
получаем Ethernet соединение типа "точка-точка" с 4-х кратной
пропускной способ ностью.
ОШИБКИ
Необходима поддержка большего числа алгоритмов передачи и обнаружения
сбоев. Хороший кандидат - технология Cisco Etherchannel.
СМОТРИ ТАКЖЕ
netgraph (4), ng_bridge (4), ng_ether (4), ng_hub (4),
ifconfig (8), ngctl (8)
АВТОРЫ
Узел netgraph one2many (с алгоритмом round-robin) был написан Archie
Cobbs <archie@FreeBSD.org.">archie@FreeBSD.org>. Весь алгоритм был добавлен Rogier R.
Mulhuijzen <drwilco@drwilco.net.">drwilco@drwilco.net>.
Превод: Eugene Mychlo