Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
ru:software:freebsd:ng_utp [2015/05/15 22:48] root |
ru:software:freebsd:ng_utp [2015/05/21 19:12] (текущий) root [Возможности] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== uTP (udp torrent) netgraph node ====== | + | ====== FreeBSD uTP (udp torrent) netgraph node ====== |
+ | Средство для работы с uTP проколом, заменяет [[ru:software:freebsd:utp_ctrl_daemon|uTPControl - block uTP torrent proto]]\\ | ||
+ | |||
+ | **Скачать**: [[http://www.netlab.linkpc.net/download/software/FreeBSD/ng_utp/|ng_utp]]\\ | ||
+ | **Лицензия**: BSD\\ | ||
===== Возможности ===== | ===== Возможности ===== | ||
- | Нода может работать на: | + | Нода может работать на хуках: |
- | * L2: Ethernet, есть поддержка вланов: все тегированные пакеты обрабатываются в нормальном режиме, дополнительных действий не требуется, ограничений на количество вланов нет; | + | * **L2** - (ng_ether и др) Ethernet, есть поддержка вланов: все тегированные пакеты обрабатываются в нормальном режиме, дополнительных действий не требуется, ограничений на количество вланов нет; |
- | * L3: IPv4, IPv6 (пока не реализовано). | + | * **L3** - (ng_ipfw и др) IPv4, IPv6 (пока не реализовано). |
Одну ноду одновременно можно подключать к различным источниками трафика, как L2 так и L3 одновременно, ограничений нет. | Одну ноду одновременно можно подключать к различным источниками трафика, как L2 так и L3 одновременно, ограничений нет. | ||
Строка 32: | Строка 37: | ||
NGM_UTP_SET_NODE_CFG("**setcfg**") - установить новые параметры конфигурации.\\ | NGM_UTP_SET_NODE_CFG("**setcfg**") - установить новые параметры конфигурации.\\ | ||
- | параметры:\\ | + | Параметры |
- | **ip_conns_max** (uint32_t) - максимальное количество отслеживаемых L3-L4 соединений.\\ | + | * **ip_conns_max** (uint32_t) - максимальное количество отслеживаемых L3-L4 соединений. |
- | **utp_conns_max** (uint32_t) - максимальное количество отслеживаемых uTP (L5) внутри L3-L4 соединений, должно быть больше ip_conns_max.\\ | + | * **utp_conns_max** (uint32_t) - максимальное количество отслеживаемых uTP (L5) внутри L3-L4 соединений, должно быть больше ip_conns_max. |
- | **conn_ack_timeout** (uint32_t) - время (секунды) в течении которого должен придти ответный uTP пакет в соединении. Если пакет пришёл позднее - действия не применяются.\\ | + | * **conn_ack_timeout** (uint32_t) - время (секунды) в течении которого должен придти ответный uTP пакет в соединении. Если пакет пришёл позднее - действия не применяются. |
- | **conn_idle_timeout** (uint32_t) - максимальное время (секунды) не активности после которого соединение удаляется из таблицы.\\ | + | * **conn_idle_timeout** (uint32_t) - максимальное время (секунды) не активности после которого соединение удаляется из таблицы. |
<code>ngctl msg ipfw:1000 getcfg | <code>ngctl msg ipfw:1000 getcfg | ||
Rec'd response "getcfg" (1) from "[1a]:": | Rec'd response "getcfg" (1) from "[1a]:": | ||
Строка 44: | Строка 49: | ||
==== Статус ноды ==== | ==== Статус ноды ==== | ||
NGM_UTP_GET_NODE_STATUS("**getstatus**") - возвращает текущее состояние ноды\\ | NGM_UTP_GET_NODE_STATUS("**getstatus**") - возвращает текущее состояние ноды\\ | ||
- | Все счётчики uint64_t.\\ | + | Все счётчики uint64_t. |
- | **ipv4_conns** - количество IPv4+UDPv4 соединений в таблице\\ | + | * **ipv4_conns** - количество IPv4+UDPv4 соединений в таблице |
- | **ipv6_conns** - количество IPv6+UDPv6 соединений в таблице\\ | + | * **ipv6_conns** - количество IPv6+UDPv6 соединений в таблице |
- | **ip_conns_total** - общее количество IP+UDP соединений, сумма двух предыдущих\\ | + | * **ip_conns_total** - общее количество IP+UDP соединений, сумма двух предыдущих |
- | **ip_conns_max** - максимально возможное количество IP+UDP соединений. Обычно чуть больше или равно тому что задано в конфиге.\\ | + | * **ip_conns_max** - максимально возможное количество IP+UDP соединений. Обычно чуть больше или равно тому что задано в конфиге. |
- | **utpv0_conns** - количество utp v0 соединений в таблице\\ | + | * **utpv0_conns** - количество utp v0 соединений в таблице |
- | **utpv1_conns** - количество utp v1 соединений в таблице\\ | + | * **utpv1_conns** - количество utp v1 соединений в таблице |
- | **utp_conns_total** - общее количество utp соединений, сумма двух предыдущих\\ | + | * **utp_conns_total** - общее количество utp соединений, сумма двух предыдущих |
- | **utp_conns_max** - максимально возможное количество utp соединений. Обычно чуть больше или равно тому что задано в конфиге.\\ | + | * **utp_conns_max** - максимально возможное количество utp соединений. Обычно чуть больше или равно тому что задано в конфиге. |
- | **mem_ip_conns** - всего памяти использовано для хранения информации об IP-UDP соединениях\\ | + | * **mem_ip_conns** - всего памяти использовано для хранения информации об IP-UDP соединениях |
- | **mem_utp_conns** - всего памяти использовано для хранения информации об uTP соединениях\\ | + | * **mem_utp_conns** - всего памяти использовано для хранения информации об uTP соединениях |
- | **mem_total** - всего памяти, сумма двух предыдущих\\ | + | * **mem_total** - всего памяти, сумма двух предыдущих |
<code>ngctl msg ipfw:1000 getstatus | <code>ngctl msg ipfw:1000 getstatus | ||
Rec'd response "getstatus" (3) from "[1a]:": | Rec'd response "getstatus" (3) from "[1a]:": | ||
Строка 66: | Строка 70: | ||
NGM_UTP_CLR_NODE_STAT("**clrstat**") - очистить\\ | NGM_UTP_CLR_NODE_STAT("**clrstat**") - очистить\\ | ||
NGM_UTP_GETCLR_NODE_STAT("**getclrstat**") - получить и очистить\\ | NGM_UTP_GETCLR_NODE_STAT("**getclrstat**") - получить и очистить\\ | ||
- | Все счётчики uint64_t.\\ | + | Все счётчики uint64_t. |
- | **ipv4_conns** - всего IPv4 соединений было добавлено в таблицу\\ | + | * **ipv4_conns** - всего IPv4 соединений было добавлено в таблицу |
- | **ipv6_conns** - всего IPv6 соединений было добавлено в таблицу\\ | + | * **ipv6_conns** - всего IPv6 соединений было добавлено в таблицу |
- | **ip_conns_total** - всего IP соединений, сумма двух предыдущих\\ | + | * **ip_conns_total** - всего IP соединений, сумма двух предыдущих |
- | **utpv0_conns** - всего uTPv0 соединений было добавлено в таблицу\\ | + | * **utpv0_conns** - всего uTPv0 соединений было добавлено в таблицу |
- | **utpv1_conns** - всего uTPv1 соединений было добавлено в таблицу\\ | + | * **utpv1_conns** - всего uTPv1 соединений было добавлено в таблицу |
- | **utp_conns_total** - всего uTP соединений, сумма двух предыдущих\\ | + | * **utp_conns_total** - всего uTP соединений, сумма двух предыдущих |
- | **memoryFailures** - ошибок выделения памяти\\ | + | * **memoryFailures** - ошибок выделения памяти |
<code>ngctl msg ipfw:1000 getstat | <code>ngctl msg ipfw:1000 getstat | ||
Rec'd response "getstat" (4) from "[1a]:": | Rec'd response "getstat" (4) from "[1a]:": | ||
Строка 107: | Строка 110: | ||
**l3_proto** (uint16_t) - тип фильтра: 0 в случае ethernet, 0x0800 - для IPv4, 0x86DD - для IPv6\\ | **l3_proto** (uint16_t) - тип фильтра: 0 в случае ethernet, 0x0800 - для IPv4, 0x86DD - для IPv6\\ | ||
**action** (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 соединениям (см флаги UTP_FLT_FLAG_MARK_L2 и UTP_FLT_FLAG_MARK_L3)\\ | + | * **1** - UTP_FLT_ACCTION_PASS_MARK - маркировать все uTP пакеты относящиеся к uTP соединениям (см флаги 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) - флаги: | **flags** (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 - не пропускать транзитом, только сгенерированные RST будут отправлены\\ | + | * **0x00000004** - UTP_FLT_FLAG_NO_PASS - не пропускать транзитом, только сгенерированные RST будут отправлены |
- | **0x00000010** - UTP_FLT_FLAG_MARK_L2 - маркировать на L2 пакеты относящиеся к uTP соединениями. Действие фильтра должно быть UTP_FLT_ACCTION_PASS_MARK. Метка - PCP хранится в label_l2, первые 3 бита.\\ | + | * **0x00000010** - UTP_FLT_FLAG_MARK_L2 - маркировать на L2 пакеты относящиеся к uTP соединениями. Действие фильтра должно быть UTP_FLT_ACCTION_PASS_MARK. Метка - PCP хранится в label_l2, первые 3 бита. |
- | **0x00000020** - UTP_FLT_FLAG_MARK_L3 - маркировать на L3 пакеты относящиеся к uTP соединениями. Действие фильтра должно быть UTP_FLT_ACCTION_PASS_MARK. Метка - DSCP хранится в label_l3, первые 6 бит.\\ | + | * **0x00000020** - UTP_FLT_FLAG_MARK_L3 - маркировать на L3 пакеты относящиеся к uTP соединениями. Действие фильтра должно быть UTP_FLT_ACCTION_PASS_MARK. Метка - DSCP хранится в label_l3, первые 6 бит. |
- | **0x00000100** - UTP_FLT_FLAG_CSUM_IP_CHK - проверять контрольную сумму IPv4 пакетов.\\ | + | * **0x00000100** - UTP_FLT_FLAG_CSUM_IP_CHK - проверять контрольную сумму IPv4 пакетов. |
- | **0x00000200** - UTP_FLT_FLAG_CSUM_UDP_CHK - проверять контрольную сумму UDP пакетов.\\ | + | * **0x00000200** - UTP_FLT_FLAG_CSUM_UDP_CHK - проверять контрольную сумму UDP пакетов. |
- | **0x00000400** - UTP_FLT_FLAG_CSUM_UDP_NO_CSUMM - не рассчитывать контрольную сумму для сгенерированных uTP RST пакетов.\\ | + | * **0x00000400** - UTP_FLT_FLAG_CSUM_UDP_NO_CSUMM - не рассчитывать контрольную сумму для сгенерированных uTP RST пакетов. |
**label_l2** (uint8_t) - L2 - Priority Code Point метка пакета, первые 3 бита.\\ | **label_l2** (uint8_t) - L2 - Priority Code Point метка пакета, первые 3 бита.\\ | ||
**label_l3** (uint8_t) - L3 ip_tos/Traffic Class code (rfc2474) метка пакета, первые 6 бит.\\ | **label_l3** (uint8_t) - L3 ip_tos/Traffic Class code (rfc2474) метка пакета, первые 6 бит.\\ | ||
Строка 153: | Строка 156: | ||
NGM_UTP_CLR_FILTER_STATS ("**clrfilterstats**")\\ | NGM_UTP_CLR_FILTER_STATS ("**clrfilterstats**")\\ | ||
NGM_UTP_GETCLR_FILTER_STATS ("**getclrfilterstats**")\\ | NGM_UTP_GETCLR_FILTER_STATS ("**getclrfilterstats**")\\ | ||
- | Все счётчики uint64_t.\\ | + | Все счётчики uint64_t. |
- | **Octets** - байт прошло через фильтр.\\ | + | * **Octets** - байт прошло через фильтр. |
- | **Packets** - количество пакетов прошедших через фильтр.\\ | + | * **Packets** - количество пакетов прошедших через фильтр. |
- | **IPv4_Packets** - количество IPv4 пакетов прошедших через фильтр.\\ | + | * **IPv4_Packets** - количество IPv4 пакетов прошедших через фильтр. |
- | **IPv6_Packets** - количество IPv6 пакетов прошедших через фильтр.\\ | + | * **IPv6_Packets** - количество IPv6 пакетов прошедших через фильтр. |
- | **MatchedPackets** - пакеты опознанные как uTP, к которым были применены действия.\\ | + | * **MatchedPackets** - пакеты опознанные как uTP, к которым были применены действия. |
- | **BypassPackets** - пакетов прошедшие через фильтр без изменений.\\ | + | * **BypassPackets** - пакетов прошедшие через фильтр без изменений. |
- | **DroppedPackets** - отброшенные пакеты.\\ | + | * **DroppedPackets** - отброшенные пакеты. |
- | **recvErrors** - ошибки приёма: отсутствует заголовок, не удалось выделить память, неправильный заголовок, ошибочная контрольная сумма и тп.\\ | + | * **recvErrors** - ошибки приёма: отсутствует заголовок, не удалось выделить память, неправильный заголовок, ошибочная контрольная сумма и тп. |
- | **xmitErrors** - ошибки отправки.\\ | + | * **xmitErrors** - ошибки отправки. |
<code>ngctl msg ipfw:1000 getfilterstats '"in"' | <code>ngctl msg ipfw:1000 getfilterstats '"in"' | ||
Rec'd response "getfilterstats" (9) from "[1a]:": | Rec'd response "getfilterstats" (9) from "[1a]:": | ||
Строка 168: | Строка 171: | ||
- | + | ==== Проверка работоспособности ==== | |
- | ===== Исходники ===== | + | см [[ru:software:freebsd:utp_ctrl_daemon#Проверка работоспособности|uTPControl - block uTP torrent proto]] |
- | [[http://www.netlab.linkpc.net/download/software/FreeBSD/ng_utp/|http://www.netlab.linkpc.net/download/software/FreeBSD/ng_utp/]] | + |