diff --git a/docs/manual.md b/docs/manual.md index 305e190..9ba6ff1 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -1673,7 +1673,7 @@ function csum_udp_fix(raw_ip_header, raw_udp_header, payload) Но если у вас особый случай, например вам нужно сконструировать icmp, то вам придется собирать его по частям и использовать rawsend для отсылки. csum_ip4_fix вам наверняка понадобится. -### Отсылка пакетов +### Прием и отсылка пакетов ``` function rawsend(raw_data, rawsend_opts) @@ -1684,6 +1684,13 @@ function rawsend_dissect(dissect, rawsend_opts, reconstruct_opts) * rawsend_dissect собирает пакет из диссекта и отправляет * dissect представляет собой таблицу, описанную в соответствующем разделе +``` +function raw_packet(ctx) +``` + +LUA функции получают готовый диссект текущего пакета при вызове. raw представление требуется редко, поэтому +в целях экономии ресурсов оно не выдается в desync. +Его можно получить по запросу через функцию raw_packet. ### Работа с пейлоадами @@ -1721,3 +1728,59 @@ function resolve_range(blob,l7payload_type,marker_list[,strict,zero_based_pos]) * resolve_range ресолвит список из ровно 2 маркеров, представляющих собой диапазон внутри пейлоада. Если strict = true, и любой маркер не ресолвится, возвращается nil. Иначе если первый маркер не ресолвится - он заменяется на 0. Если не ресолвится второй маркер - он заменяется на длину пейлоада. Если не ресолвятся оба - возвращается nil. * если задано zero_based_pos=true, все позиции начинаются с 0, иначе с 1, как это принято в LUA. * при невалидных значениях l7payload_type, marker, marker_list, если количество маркеров не равно 2 для resolve_range - вызывается error + +### Управление выполнением инстансов + +``` +function instance_cutoff(ctx, direction) +``` + +Добровольное само-отсечение инстанса по выбранному направлению. +Инстанс перестает вызываться в рамках текущего потока. +* direction = true - исходящее направление +* direction = false - входящее направление +* direction = nil - оба направления + +``` +function instance_cutoff(ctx, direction) +``` + +Аналогично `instance_cutoff`, но от потока отсекается весь профиль. +При смене профиля после получения hostname или обнаружения протокола потока lua cutoff сбрасывается, +поскольку в новом профиле совершенно другой набор инстансов, которые не просили их отсекать. + +``` +function execution_plan(ctx) +``` + +Получить массив информации о всех последующих , еще не выполненных, инстансах текущего профиля, +их внутрипрофильных фильтрах и аргументах. + +Содержимое элемента plan +| Поле | Тип | Описание | +|:------|:----|:---------| +| func | string | имя desync функции | +| func_n | number | номер инстанса внутри профиля | +| func_instance | string | название инстанса | производная имени функции, номера инстанса и номера профиля | +| range | table | эффективный диапазон счетчиков `--in-range` или `--out-range` в зависимости от текущего направления | +| payload_filter | string | эффективный `--payload-filter` . список названий пейлоадов через запятую | + +range +| Поле | Тип | Описание | +|:------|:------|:---------| +| from | table | позиция нижней границы | +| to | table | позиция верхней границы | +| upper_cutoff | bool | true = верхняя граница невключительна, false = включительна | + +pos - from,to +| Поле | Тип | Описание | +|:------|:-------|:---------| +| mode | string | режим счетчика - a, x, n, d, b, s, p | +| pos | number | значение счетчика | + +``` +function execution_plan_cancel(ctx) +``` + +Однократная отмена выполнения всех следующих инстансов внутри профиля. +Инстанс, выполняющий отмену, берет на себя координацию дальнейших действий и называется оркестратором.