This shows you the differences between two versions of the page.
Next revision | Previous revisionNext revisionBoth sides next revision | ||
software:freebsd:ng_utp [2015/05/15 22:38] – создано root | software:freebsd:ng_utp [2015/05/21 19:10] – [FreeBSD uTP (udp torrent) netgraph node] root | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== uTP (udp torrent) netgraph node ====== | + | ====== |
+ | Средство для работы с uTP проколом, | ||
+ | |||
+ | **Скачать**: | ||
+ | **Лицензия**: | ||
===== Возможности ===== | ===== Возможности ===== | ||
Line 29: | Line 34: | ||
===== Работа с нодой ===== | ===== Работа с нодой ===== | ||
==== Конфигурация ==== | ==== Конфигурация ==== | ||
- | NGM_UTP_GET_NODE_CFG(" | + | NGM_UTP_GET_NODE_CFG(" |
- | NGM_UTP_SET_NODE_CFG(" | + | NGM_UTP_SET_NODE_CFG(" |
- | параметры:\\ | + | Параметры |
- | **ip_conns_max** (uint32_t) - максимальное количество отслеживаемых L3-L4 соединений.\\ | + | |
- | **utp_conns_max** (uint32_t) - максимальное количество отслеживаемых uTP (L5) внутри L3-L4 соединений, | + | |
- | **conn_ack_timeout** (uint32_t) - время (секунды) в течении которого должен придти ответный uTP пакет в соединении. Если пакет пришёл позднее - действия не применяются.\\ | + | |
- | **conn_idle_timeout** (uint32_t) - максимальное время (секунды) не активности после которого соединение удаляется из таблицы.\\ | + | |
< | < | ||
Rec'd response " | Rec'd response " | ||
Line 43: | Line 48: | ||
==== Статус ноды ==== | ==== Статус ноды ==== | ||
- | NGM_UTP_GET_NODE_STATUS(" | + | NGM_UTP_GET_NODE_STATUS(" |
- | Все счётчики uint64_t.\\ | + | Все счётчики uint64_t. |
- | **ipv4_conns** - количество IPv4+UDPv4 соединений в таблице\\ | + | |
- | **ipv6_conns** - количество IPv6+UDPv6 соединений в таблице\\ | + | |
- | **ip_conns_total** - общее количество IP+UDP соединений, | + | |
- | **ip_conns_max** - максимально возможное количество IP+UDP соединений. Обычно чуть больше или равно тому что задано в конфиге.\\ | + | |
- | **utpv0_conns** - количество utp v0 соединений в таблице\\ | + | |
- | **utpv1_conns** - количество utp v1 соединений в таблице\\ | + | |
- | **utp_conns_total** - общее количество utp соединений, | + | |
- | **utp_conns_max** - максимально возможное количество utp соединений. Обычно чуть больше или равно тому что задано в конфиге.\\ | + | |
- | **mem_ip_conns** - всего памяти использовано для хранения информации об IP-UDP соединениях\\ | + | |
- | **mem_utp_conns** - всего памяти использовано для хранения информации об uTP соединениях\\ | + | |
- | **mem_total** - всего памяти, | + | |
< | < | ||
Rec'd response " | Rec'd response " | ||
Line 63: | Line 67: | ||
==== Статистика ноды ==== | ==== Статистика ноды ==== | ||
- | NGM_UTP_GET_NODE_STAT(" | + | NGM_UTP_GET_NODE_STAT(" |
- | NGM_UTP_CLR_NODE_STAT(" | + | NGM_UTP_CLR_NODE_STAT(" |
- | NGM_UTP_GETCLR_NODE_STAT(" | + | NGM_UTP_GETCLR_NODE_STAT(" |
- | Все счётчики uint64_t.\\ | + | Все счётчики uint64_t. |
- | **ipv4_conns** - всего IPv4 соединений было добавлено в таблицу\\ | + | |
- | **ipv6_conns** - всего IPv6 соединений было добавлено в таблицу\\ | + | |
- | **ip_conns_total** - всего IP соединений, | + | |
- | **utpv0_conns** - всего uTPv0 соединений было добавлено в таблицу\\ | + | |
- | **utpv1_conns** - всего uTPv1 соединений было добавлено в таблицу\\ | + | |
- | **utp_conns_total** - всего uTP соединений, | + | |
- | **memoryFailures** - ошибок выделения памяти\\ | + | |
< | < | ||
Rec'd response " | Rec'd response " | ||
Line 81: | Line 84: | ||
==== Очистка таблицы соединений IP-UDP ==== | ==== Очистка таблицы соединений IP-UDP ==== | ||
- | NGM_UTP_FLUSH_CONN4 (" | + | NGM_UTP_FLUSH_CONN4 ("**flushconn4**") - IPv4\\ |
- | NGM_UTP_FLUSH_CONN6 (" | + | NGM_UTP_FLUSH_CONN6 ("**flushconn6**") - IPv6\\ |
< | < | ||
==== Дамп таблицы соединений IP-UDP ==== | ==== Дамп таблицы соединений IP-UDP ==== | ||
- | NGM_UTP_GET_CONN_TABLE4 (" | + | NGM_UTP_GET_CONN_TABLE4 ("**getconntbl4**") - IPv4\\ |
- | < | + | < |
< | < | ||
Line 103: | Line 106: | ||
==== Добавление фильтра ==== | ==== Добавление фильтра ==== | ||
- | NGM_UTP_ADD_FILTER(" | + | NGM_UTP_ADD_FILTER(" |
- | [u]l3_proto[/u] (uint16_t) - тип фильтра: | + | **l3_proto** (uint16_t) - тип фильтра: |
- | [u]action[/u] (uint16_t) - действие выполняемое фильтром: | + | **action** (uint16_t) - действие выполняемое фильтром: |
- | 0 - UTP_FLT_ACCTION_PASS - ничего не делать с uTP, только выстраивать таблицу соединений | + | * **0** - UTP_FLT_ACCTION_PASS - ничего не делать с uTP, только выстраивать таблицу соединений |
- | 1 - UTP_FLT_ACCTION_PASS_MARK - маркировать все uTP пакеты относящиеся к uTP соединениям (см флаги | + | * **1** - UTP_FLT_ACCTION_PASS_MARK - маркировать все uTP пакеты относящиеся к uTP соединениям (см флаги UTP_FLT_FLAG_MARK_L2 и UTP_FLT_FLAG_MARK_L3) |
- | UTP_FLT_FLAG_MARK_L2 и UTP_FLT_FLAG_MARK_L3) | + | * **2** - UTP_FLT_ACCTION_DROP - уничтожать все uTP пакеты относящиеся к uTP соединениям |
- | 2 - UTP_FLT_ACCTION_DROP - уничтожать все uTP пакеты относящиеся к uTP соединениям | + | * **3** - UTP_FLT_ACCTION_SND_RST - заменять на uTP RST все uTP пакеты относящиеся к uTP соединениям |
- | 3 - UTP_FLT_ACCTION_SND_RST - заменять на uTP RST все uTP пакеты относящиеся к uTP соединениям | + | **flags** (uint32_t) - флаги: |
- | [u]flags[/u] (uint32_t) - флаги: | + | * **0x00000001** - UTP_FLT_FLAG_FORCE_QUEUE_H0 |
- | 0x00000001 - UTP_FLT_FLAG_FORCE_QUEUE_H0 | + | * **0x00000002** - UTP_FLT_FLAG_FORCE_QUEUE_H1 - принудительно использовать очередь для хука в фильтре. Включение очередей может помочь равномерно распределять нагрузку между процессорами. |
- | 0x00000002 - UTP_FLT_FLAG_FORCE_QUEUE_H1 - принудительно использовать очередь для хука в фильтре. Включение | + | * **0x00000004** - UTP_FLT_FLAG_NO_PASS - не пропускать транзитом, |
- | | + | * **0x00000010** - UTP_FLT_FLAG_MARK_L2 - маркировать на L2 пакеты относящиеся к uTP соединениями. Действие фильтра должно быть UTP_FLT_ACCTION_PASS_MARK. Метка - PCP хранится в label_l2, первые 3 бита. |
- | 0x00000004 - UTP_FLT_FLAG_NO_PASS - не пропускать транзитом, | + | * **0x00000020** - UTP_FLT_FLAG_MARK_L3 - маркировать на L3 пакеты относящиеся к uTP соединениями. Действие фильтра должно быть UTP_FLT_ACCTION_PASS_MARK. Метка - DSCP хранится в label_l3, первые 6 бит. |
- | 0x00000010 - UTP_FLT_FLAG_MARK_L2 - маркировать на L2 пакеты относящиеся к uTP соединениями. Действие фильтра | + | * **0x00000100** - UTP_FLT_FLAG_CSUM_IP_CHK - проверять контрольную сумму IPv4 пакетов. |
- | | + | * **0x00000200** - UTP_FLT_FLAG_CSUM_UDP_CHK - проверять контрольную сумму UDP пакетов. |
- | 0x00000020 - UTP_FLT_FLAG_MARK_L3 - маркировать на L3 пакеты относящиеся к uTP соединениями. Действие фильтра | + | * **0x00000400** - UTP_FLT_FLAG_CSUM_UDP_NO_CSUMM - не рассчитывать контрольную сумму для сгенерированных uTP RST пакетов. |
- | | + | **label_l2** (uint8_t) - L2 - Priority Code Point метка пакета, |
- | 0x00000100 - UTP_FLT_FLAG_CSUM_IP_CHK - проверять контрольную сумму IPv4 пакетов. | + | **label_l3** (uint8_t) - L3 ip_tos/ |
- | 0x00000200 - UTP_FLT_FLAG_CSUM_UDP_CHK - проверять контрольную сумму UDP пакетов. | + | **h0** (char) - \\ |
- | 0x00000400 - UTP_FLT_FLAG_CSUM_UDP_NO_CSUMM - не рассчитывать контрольную сумму для сгенерированных uTP RST пакетов. | + | **h1** (char) - имя хука добавляемого в фильтр\\ |
- | [u]label_l2[/u] (uint8_t) - L2 - Priority Code Point метка пакета, | + | |
- | [u]label_l3[/ | + | |
- | [u]h0[/u] (char) - | + | |
- | [u]h1[/u] (char) - имя хука добавляемого в фильтр | + | |
- | Для L2 | + | Для L2: |
- | [code]ngctl mkpeer vlan777: utp lower lower | + | <code>ngctl mkpeer vlan777: utp lower lower |
ngctl connect vlan777: vlan777: | ngctl connect vlan777: vlan777: | ||
- | ngctl msg vlan777: | + | ngctl msg vlan777: |
- | Для L3-IPv4 | + | Для L3-IPv4: |
- | [code]ngctl mkpeer ipfw: utp 1000 in | + | <code>ngctl mkpeer ipfw: utp 1000 in |
ngctl connect ipfw: ipfw:1000 1001 out | ngctl connect ipfw: ipfw:1000 1001 out | ||
- | ngctl msg ipfw:1000 addfilter '{ l3_proto=0x0800 action=3 flags=0x00000000 h0=" | + | ngctl msg ipfw:1000 addfilter '{ l3_proto=0x0800 action=3 flags=0x00000000 h0=" |
(здесь по идее достаточно одного хука, но такое " | (здесь по идее достаточно одного хука, но такое " | ||
- | [b]Получить настройки фильтра[/b] | + | ==== Получить настройки фильтра |
- | NGM_UTP_GET_FILTER (" | + | NGM_UTP_GET_FILTER ("**getfilter**") - получить настройки фильтра по имени одного из хуков, который в него входит. |
- | [code]ngctl msg ipfw:1000 getfilter '" | + | <code>ngctl msg ipfw:1000 getfilter '" |
Rec'd response " | Rec'd response " | ||
- | Args: { l3_proto=0x800 action=3 flags=0x3 h0=" | + | Args: { l3_proto=0x800 action=3 flags=0x3 h0=" |
- | [/code] | + | |
+ | ==== Удаление фильтра ==== | ||
+ | NGM_UTP_DEL_FILTER (" | ||
+ | < | ||
- | [b]Удаление фильтра[/ | ||
- | NGM_UTP_DEL_FILTER (" | ||
- | [code]ngctl msg ipfw:1000 delfilter '" | ||
- | + | ==== Статистика фильтра | |
- | [b]Статистика фильтра[/b] | + | NGM_UTP_GET_FILTER_STATS ("**getfilterstats**")\\ |
- | NGM_UTP_GET_FILTER_STATS (" | + | NGM_UTP_CLR_FILTER_STATS ("**clrfilterstats**")\\ |
- | NGM_UTP_CLR_FILTER_STATS (" | + | NGM_UTP_GETCLR_FILTER_STATS ("**getclrfilterstats**")\\ |
- | NGM_UTP_GETCLR_FILTER_STATS (" | + | |
Все счётчики uint64_t. | Все счётчики uint64_t. | ||
- | [u]Octets[/u] - байт прошло через фильтр. | + | * **Octets** - байт прошло через фильтр. |
- | [u]Packets[/u] - количество пакетов прошедших через фильтр. | + | * **Packets** - количество пакетов прошедших через фильтр. |
- | [u]IPv4_Packets[/u] - количество IPv4 пакетов прошедших через фильтр. | + | * **IPv4_Packets** - количество IPv4 пакетов прошедших через фильтр. |
- | [u]IPv6_Packets[/u] - количество IPv6 пакетов прошедших через фильтр. | + | * **IPv6_Packets** - количество IPv6 пакетов прошедших через фильтр. |
- | [u]MatchedPackets[/u] - пакеты опознанные как uTP, к которым были применены действия. | + | * **MatchedPackets** - пакеты опознанные как uTP, к которым были применены действия. |
- | [u]BypassPackets[/u] - пакетов прошедшие через фильтр без изменений. | + | * **BypassPackets** - пакетов прошедшие через фильтр без изменений. |
- | [u]DroppedPackets[/u] - отброшенные пакеты. | + | * **DroppedPackets** - отброшенные пакеты. |
- | [u]recvErrors[/u] - ошибки приёма: | + | * **recvErrors** - ошибки приёма: |
- | [u]xmitErrors[/u] - ошибки отправки. | + | * **xmitErrors** - ошибки отправки. |
- | + | <code>ngctl msg ipfw:1000 getfilterstats '" | |
- | [code]ngctl msg ipfw:1000 getfilterstats '" | + | |
Rec'd response " | Rec'd response " | ||
- | Args: { Octets=5982246 Packets=38489 IPv4_Packets=38492 MatchedPackets=8760 BypassPackets=38978 recvErrors=8760 }[/code] | + | Args: { Octets=5982246 Packets=38489 IPv4_Packets=38492 MatchedPackets=8760 BypassPackets=38978 recvErrors=8760 }</code> |
- | [b][size=11pt]Исходники[/ | + | ==== Проверка работоспособности ==== |
- | [url=http:// | + | см [[ru:software:freebsd: |