Инструменты пользователя

Инструменты сайта


ru:software:freebsd:ng_utp

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
ru:software:freebsd:ng_utp [2015/05/15 22:38]
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\\ 
  
 ===== Возможности ===== ===== Возможности =====
-Нода может работать на: +Нода может работать на хуках
-  * L2Ethernet, есть поддержка вланов:​ все тегированные пакеты обрабатываются в нормальном режиме,​ дополнительных действий не требуется,​ ограничений на количество вланов нет; +  ​* **L2** - (ng_ether и др) Ethernet, есть поддержка вланов:​ все тегированные пакеты обрабатываются в нормальном режиме,​ дополнительных действий не требуется,​ ограничений на количество вланов нет; 
-  * L3IPv4, IPv6 (пока не реализовано).+  ​* **L3** - (ng_ipfw и др) IPv4, IPv6 (пока не реализовано).
 Одну ноду одновременно можно подключать к различным источниками трафика,​ как L2 так и L3 одновременно,​ ограничений нет. Одну ноду одновременно можно подключать к различным источниками трафика,​ как L2 так и L3 одновременно,​ ограничений нет.
  
Строка 29: Строка 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]:":​
Строка 43: Строка 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]:":​
Строка 63: Строка 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]:":​
Строка 81: Строка 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
Строка 103: Строка 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]]
ru/software/freebsd/ng_utp.1431729526.txt.gz · Последние изменения: 2015/05/15 22:38 — root