Site Tools


software:freebsd:ng_utp

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revisionBoth sides next revision
software:freebsd:ng_utp [2015/05/15 22:38]
– создано root
software:freebsd:ng_utp [2015/05/21 19:12]
– [Возможности] root
Line 1: Line 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\\ 
  
 ===== Возможности ===== ===== Возможности =====
-Нода может работать на: +Нода может работать на хуках
-  * L2Ethernet, есть поддержка вланов: все тегированные пакеты обрабатываются в нормальном режиме, дополнительных действий не требуется, ограничений на количество вланов нет; +  * **L2** - (ng_ether и др) Ethernet, есть поддержка вланов: все тегированные пакеты обрабатываются в нормальном режиме, дополнительных действий не требуется, ограничений на количество вланов нет; 
-  * L3IPv4, IPv6 (пока не реализовано).+  * **L3** - (ng_ipfw и др) IPv4, IPv6 (пока не реализовано).
 Одну ноду одновременно можно подключать к различным источниками трафика, как L2 так и L3 одновременно, ограничений нет. Одну ноду одновременно можно подключать к различным источниками трафика, как L2 так и L3 одновременно, ограничений нет.
  
Line 29: Line 34:
 ===== Работа с нодой ===== ===== Работа с нодой =====
 ==== Конфигурация ==== ==== Конфигурация ====
-NGM_UTP_GET_NODE_CFG("getcfg") - прочитать конфигурацию.\\ +NGM_UTP_GET_NODE_CFG("**getcfg**") - прочитать конфигурацию.\\ 
-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]:":
Line 43: Line 48:
  
 ==== Статус ноды ==== ==== Статус ноды ====
-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]:":
Line 63: Line 67:
  
 ==== Статистика ноды ==== ==== Статистика ноды ====
-NGM_UTP_GET_NODE_STAT("getstat") - получить\\ +NGM_UTP_GET_NODE_STAT("**getstat**") - получить\\ 
-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]:":
Line 81: Line 84:
  
 ==== Очистка таблицы соединений IP-UDP ==== ==== Очистка таблицы соединений IP-UDP ====
-NGM_UTP_FLUSH_CONN4 ("flushconn4") - IPv4\\ +NGM_UTP_FLUSH_CONN4 ("**flushconn4**") - IPv4\\ 
-NGM_UTP_FLUSH_CONN6 ("flushconn6") - IPv6\\+NGM_UTP_FLUSH_CONN6 ("**flushconn6**") - IPv6\\
 <code>ngctl msg ipfw:1000 flushconn4</code> <code>ngctl msg ipfw:1000 flushconn4</code>
  
  
 ==== Дамп таблицы соединений IP-UDP ==== ==== Дамп таблицы соединений IP-UDP ====
-NGM_UTP_GET_CONN_TABLE4 ("getconntbl4") - IPv4\\ +NGM_UTP_GET_CONN_TABLE4 ("**getconntbl4**") - IPv4\\ 
-<del>NGM_UTP_GET_CONN_TABLE6 ("getconntbl6") - IPv6</del> - не реализовано.\\+<del>NGM_UTP_GET_CONN_TABLE6 ("**getconntbl6**") - IPv6</del> - не реализовано.\\
  
 <code>ngctl msg ipfw:1000 getconntbl4 <code>ngctl msg ipfw:1000 getconntbl4
Line 103: Line 106:
  
 ==== Добавление фильтра ==== ==== Добавление фильтра ====
-NGM_UTP_ADD_FILTER("addfilter") - добавить L2:Ethernet или L3:IPv4/IPv6 фильтр\\+NGM_UTP_ADD_FILTER("**addfilter**") - добавить L2:Ethernet или L3:IPv4/IPv6 фильтр\\
  
-[u]l3_proto[/u] (uint16_t) - тип фильтра: 0 в случае ethernet, 0x0800 - для IPv4, 0x86DD - для IPv6 +**l3_proto** (uint16_t) - тип фильтра: 0 в случае ethernet, 0x0800 - для IPv4, 0x86DD - для IPv6\\ 
-[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 - не пропускать транзитом, только сгенерированные RST будут отправлены 
-        очередей может помочь равномерно распределять нагрузку между процессорами. +  * **0x00000010** - UTP_FLT_FLAG_MARK_L2 - маркировать на L2 пакеты относящиеся к uTP соединениями. Действие фильтра должно быть UTP_FLT_ACCTION_PASS_MARK. Метка - PCP хранится в label_l2, первые 3 бита. 
-    0x00000004 - UTP_FLT_FLAG_NO_PASS - не пропускать транзитом, только сгенерированные RST будут отправлены +  * **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 пакетов. 
-        должно быть UTP_FLT_ACCTION_PASS_MARK. Метка - PCP хранится в label_l2, первые 3 бита. +  * **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 пакетов. 
-        должно быть UTP_FLT_ACCTION_PASS_MARK. Метка - DSCP хранится в label_l3, первые 6 бит. +**label_l2** (uint8_t) - L2 - Priority Code Point метка пакета, первые 3 бита.\\ 
-    0x00000100 - UTP_FLT_FLAG_CSUM_IP_CHK - проверять контрольную сумму IPv4 пакетов. +**label_l3** (uint8_t) - L3 ip_tos/Traffic Class code (rfc2474) метка пакета, первые 6 бит.\\ 
-    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 метка пакета, первые 3 бита. +
-[u]label_l3[/u]  (uint8_t) - L3 ip_tos/Traffic Class code (rfc2474) метка пакета, первые 6 бит. +
-[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:lower upper upper ngctl connect vlan777: vlan777:lower upper upper
-ngctl msg vlan777:lower addfilter '{ l3_proto=0 action=3 flags=0x00000000 h0="lower" h1="upper" }'[/code]+ngctl msg vlan777:lower addfilter '{ l3_proto=0 action=3 flags=0x00000000 h0="lower" h1="upper" }'</code>
  
-Для 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="in" h1="out" }'[/code]+ngctl msg ipfw:1000 addfilter '{ l3_proto=0x0800 action=3 flags=0x00000000 h0="in" h1="out" }'</code>
 (здесь по идее достаточно одного хука, но такое "одноногое" поведение пока не реализовано) (здесь по идее достаточно одного хука, но такое "одноногое" поведение пока не реализовано)
  
  
-[b]Получить настройки фильтра[/b] +==== Получить настройки фильтра ==== 
-NGM_UTP_GET_FILTER ("getfilter") - получить настройки фильтра по имени одного из хуков, который в него входит. +NGM_UTP_GET_FILTER ("**getfilter**") - получить настройки фильтра по имени одного из хуков, который в него входит. 
-[code]ngctl msg ipfw:1000 getfilter '"io"'+<code>ngctl msg ipfw:1000 getfilter '"io"'
 Rec'd response "getfilter" (13) from "[46]:": Rec'd response "getfilter" (13) from "[46]:":
-Args:   { l3_proto=0x800 action=3 flags=0x3 h0="io" } +Args:   { l3_proto=0x800 action=3 flags=0x3 h0="io" }</code>
-[/code]+
  
  
 +==== Удаление фильтра ====
 +NGM_UTP_DEL_FILTER ("**delfilter**") - удалить фильтр по имени одного из хуков, который в него входит, хуки при этом не отключаются от нод
 +<code>ngctl msg ipfw:1000 delfilter '"in"'</code>
  
-[b]Удаление фильтра[/b] 
-NGM_UTP_DEL_FILTER ("delfilter") - удалить фильтр по имени одного из хуков, который в него входит, хуки при этом не отключаются от нод 
-[code]ngctl msg ipfw:1000 delfilter '"in"'[/code] 
  
- +==== Статистика фильтра ==== 
-[b]Статистика фильтра[/b] +NGM_UTP_GET_FILTER_STATS ("**getfilterstats**")\\ 
-NGM_UTP_GET_FILTER_STATS ("getfilterstats"+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.
-[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 '"in"'
-[code]ngctl msg ipfw:1000 getfilterstats '"in"'+
 Rec'd response "getfilterstats" (9) from "[1a]:": Rec'd response "getfilterstats" (9) from "[1a]:":
-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]Исходники[/size][/b] +==== Проверка работоспособности ==== 
-[url=http://www.netlab.linkpc.net/download/software/FreeBSD/ng_utp/]http://www.netlab.linkpc.net/download/software/FreeBSD/ng_utp/[/url]+см [[ru:software:freebsd:utp_ctrl_daemon#Проверка работоспособности|uTPControl - block uTP torrent proto]]
software/freebsd/ng_utp.txt · Last modified: 2022/02/05 04:19 by root