diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:43:11 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:43:11 +0000 |
commit | fc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch) | |
tree | ce1e3bce06471410239a6f41282e328770aa404a /po/ru/man2/bpf.2.po | |
parent | Initial commit. (diff) | |
download | manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip |
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'po/ru/man2/bpf.2.po')
-rw-r--r-- | po/ru/man2/bpf.2.po | 3117 |
1 files changed, 3117 insertions, 0 deletions
diff --git a/po/ru/man2/bpf.2.po b/po/ru/man2/bpf.2.po new file mode 100644 index 00000000..6f66c2d4 --- /dev/null +++ b/po/ru/man2/bpf.2.po @@ -0,0 +1,3117 @@ +# Russian translation of manpages +# This file is distributed under the same license as the manpages-l10n package. +# Copyright © of this file: +# Artyom Kunyov <artkun@guitarplayer.ru>, 2012. +# Azamat Hackimov <azamat.hackimov@gmail.com>, 2012. +# Dmitriy Ovchinnikov <dmitriyxt5@gmail.com>, 2012. +# Dmitry Bolkhovskikh <d20052005@yandex.ru>, 2017. +# ITriskTI <ITriskTI@gmail.com>, 2012. +# Yuri Kozlov <yuray@komyakino.ru>, 2011-2019. +# Иван Павлов <pavia00@gmail.com>, 2017. +msgid "" +msgstr "" +"Project-Id-Version: manpages-l10n\n" +"POT-Creation-Date: 2024-03-01 16:53+0100\n" +"PO-Revision-Date: 2019-08-27 07:22+0000\n" +"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" +"Language-Team: Russian <man-pages-ru-talks@lists.sourceforge.net>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || " +"(n%100>=11 && n%100<=14)? 2 : 3);\n" + +#. type: TH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "bpf" +msgstr "bpf" + +#. type: TH +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, no-wrap +msgid "2023-11-01" +msgstr "1 ноября 2023 г." + +#. type: TH +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, no-wrap +msgid "Linux man-pages 6.06" +msgstr "Linux man-pages 6.06" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "NAME" +msgstr "ИМЯ" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "bpf - perform a command on an extended BPF map or program" +msgstr "bpf - выполняет команду с расширенной картой BPF или программу" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "SYNOPSIS" +msgstr "СИНТАКСИС" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<#include E<lt>linux/bpf.hE<gt>>\n" +msgstr "B<#include E<lt>linux/bpf.hE<gt>>\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<int bpf(int >I<cmd>B<, union bpf_attr *>I<attr>B<, unsigned int >I<size>B<);>\n" +msgstr "B<int bpf(int >I<cmd>B<, union bpf_attr *>I<attr>B<, unsigned int >I<size>B<);>\n" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "DESCRIPTION" +msgstr "ОПИСАНИЕ" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The B<bpf>() system call performs a range of operations related to extended " +"Berkeley Packet Filters. Extended BPF (or eBPF) is similar to the original " +"(\"classic\") BPF (cBPF) used to filter network packets. For both cBPF and " +"eBPF programs, the kernel statically analyzes the programs before loading " +"them, in order to ensure that they cannot harm the running system." +msgstr "" +"Системный вызов B<bpf>() выполняет набор операций, связанных с расширенными " +"пакетными фильтрами Беркли (Berkeley Packet Filters). Расширенные BPF (или " +"eBPF) подобны первоначальным («классическим») BPF (cBPF), которые " +"используются для фильтрации сетевых пакетов. Перед загрузкой программы cBPF " +"и eBPF анализируются ядром на предмет их безвредности для работающей системы." + +#. See 'enum bpf_func_id' in include/uapi/linux/bpf.h +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"eBPF extends cBPF in multiple ways, including the ability to call a fixed " +"set of in-kernel helper functions (via the B<BPF_CALL> opcode extension " +"provided by eBPF) and access shared data structures such as eBPF maps." +msgstr "" +"Набор eBPF расширяет cBPF в разных направлениях, включая способность вызова " +"фиксированного набора вспомогательных функций ядра (через расширенный код " +"операции B<BPF_CALL>, предоставляемый eBPF) и доступа к общим структурам " +"данных, таким как карты eBPF." + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Extended BPF Design/Architecture" +msgstr "Структура/архитектура расширенных BPF" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"eBPF maps are a generic data structure for storage of different data types. " +"Data types are generally treated as binary blobs, so a user just specifies " +"the size of the key and the size of the value at map-creation time. In " +"other words, a key/value for a given map can have an arbitrary structure." +msgstr "" +"Карты eBPF — это обобщённая структура данных, которая позволяет хранить " +"данных различных типов. Типы данных, в общем случае, считаются двоичными " +"объектами (binary blobs), поэтому пользователь просто указывает размер ключа " +"и размер значения при создании карты. Другими словами, ключ/значение " +"задаваемой карты могут иметь произвольную структуру." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A user process can create multiple maps (with key/value-pairs being opaque " +"bytes of data) and access them via file descriptors. Different eBPF " +"programs can access the same maps in parallel. It's up to the user process " +"and eBPF program to decide what they store inside maps." +msgstr "" +"Пользовательский процесс может создать несколько карт (с парами ключ/" +"значение нераспознаваемых байт данных (opaque bytes of data)) и работать с " +"ними через файловые дескрипторы. Несколько программ eBPF могут получать " +"доступ к одним и тем же картам параллельно. Решение, что хранить в картах, " +"полностью отдано пользовательскому процессу и программе eBPF." + +#. Defined by the kernel constant MAX_TAIL_CALL_CNT in include/linux/bpf.h +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"There's one special map type, called a program array. This type of map " +"stores file descriptors referring to other eBPF programs. When a lookup in " +"the map is performed, the program flow is redirected in-place to the " +"beginning of another eBPF program and does not return back to the calling " +"program. The level of nesting has a fixed limit of 32, so that infinite " +"loops cannot be crafted. At run time, the program file descriptors stored " +"in the map can be modified, so program functionality can be altered based on " +"specific requirements. All programs referred to in a program-array map must " +"have been previously loaded into the kernel via B<bpf>(). If a map lookup " +"fails, the current program continues its execution. See " +"B<BPF_MAP_TYPE_PROG_ARRAY> below for further details." +msgstr "" +"Существует специальный карточный тип, называемый программным массивом " +"(program array). В данном типе карты хранятся файловые дескрипторы, " +"указывающие на другие программы eBPF. Когда выполняется поиск в карте " +"программный поток в этом месте перенаправляется в начало другой программы " +"eBPF и не возвращается в вызывающую программу. Уровень вложенности ограничен " +"32, поэтому бесконечные циклы невозможны. Во время выполнения программные " +"файловые дескрипторы, хранящиеся в карте, не могут быть изменены, поэтому " +"функциональность программы можно изменить только на основе специальных " +"требований. Все программы, на которые есть ссылки из карты программного " +"массива, должны заранее загружаться в ядро с помощью B<bpf>(). Если поиск по " +"карте завершился с ошибкой, то текущая программа продолжает выполняться. " +"Подробней смотрите далее в описании B<BPF_MAP_TYPE_PROG_ARRAY>." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Generally, eBPF programs are loaded by the user process and automatically " +"unloaded when the process exits. In some cases, for example, B<tc-bpf>(8), " +"the program will continue to stay alive inside the kernel even after the " +"process that loaded the program exits. In that case, the tc subsystem holds " +"a reference to the eBPF program after the file descriptor has been closed by " +"the user-space program. Thus, whether a specific program continues to live " +"inside the kernel depends on how it is further attached to a given kernel " +"subsystem after it was loaded via B<bpf>()." +msgstr "" +"Обычно, программы eBPF загружаются пользовательским процессом и выгружаются " +"при его завершении. В некоторых случаях, например, B<tc-bpf>(8), программа " +"продолжает работать внутри ядра даже после того, как процесс загрузивший " +"программу, закончил работать. В этом случае ссылку на программу eBPF после " +"того, как файловый дескриптор был закрыт программой из пользовательского " +"пространства, содержит подсистема tc. То есть, будет ли специальная " +"программа продолжать работать внутри ядра, зависит от того, будет ли она " +"присоединена к указанной подсистеме ядра после загрузки через B<bpf>()." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Each eBPF program is a set of instructions that is safe to run until its " +"completion. An in-kernel verifier statically determines that the eBPF " +"program terminates and is safe to execute. During verification, the kernel " +"increments reference counts for each of the maps that the eBPF program uses, " +"so that the attached maps can't be removed until the program is unloaded." +msgstr "" +"Программа eBPF представляет собой набор инструкций, безопасно выполняющаяся " +"от начала и до конца. Ядерный механизм проверки статически определяет, что " +"программа eBPF завершится и её безопасно запускать. Во время проверки ядро " +"увеличивает счётчик ссылок для каждой карты, которая используется программой " +"eBPF, поэтому присоединённые карты невозможно удалить пока не будет " +"выгружена программа." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"eBPF programs can be attached to different events. These events can be the " +"arrival of network packets, tracing events, classification events by network " +"queueing disciplines (for eBPF programs attached to a B<tc>(8) classifier), " +"and other types that may be added in the future. A new event triggers " +"execution of the eBPF program, which may store information about the event " +"in eBPF maps. Beyond storing data, eBPF programs may call a fixed set of in-" +"kernel helper functions." +msgstr "" +"Программы eBPF могут быть присоединены к различным событиям. Эти события " +"могут возникать при поступлении сетевых пакетов, это могут быть события " +"трассировки, события распределения по сетевым очередям (для программ eBPF, " +"присоединённых к классификатору B<tc>(8)) и другие типы событий, которые " +"могут быть добавлены в будущем. Новое событие активирует выполнение " +"программы eBPF, которое может сохранить информацию о событии в картах eBPF. " +"Кроме сохранения данных, программы eBPF могут вызывать фиксированный набор " +"вспомогательных функций ядра." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The same eBPF program can be attached to multiple events and different eBPF " +"programs can access the same map:" +msgstr "" +"Программа eBPF может быть присоединена к нескольким событиям, а различные " +"программы eBPF могут иметь доступ к одной карте:" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, fuzzy, no-wrap +#| msgid "" +#| "tracing tracing tracing packet packet packet\n" +#| "event A event B event C on eth0 on eth1 on eth2\n" +#| " | | | | | \\(ha\n" +#| " | | | | v |\n" +#| " --E<gt> tracing E<lt>-- tracing socket tc ingress tc egress\n" +#| " prog_1 prog_2 prog_3 classifier action\n" +#| " | | | | prog_4 prog_5\n" +#| " |--- -----| |------| map_3 | |\n" +#| " map_1 map_2 --| map_4 |--\n" +msgid "" +"tracing tracing tracing packet packet packet\n" +"event A event B event C on eth0 on eth1 on eth2\n" +" | | | | | \\[ha]\n" +" | | | | v |\n" +" --E<gt> tracing E<lt>-- tracing socket tc ingress tc egress\n" +" prog_1 prog_2 prog_3 classifier action\n" +" | | | | prog_4 prog_5\n" +" |--- -----| |------| map_3 | |\n" +" map_1 map_2 --| map_4 |--\n" +msgstr "" +"tracing tracing tracing packet packet packet\n" +"event A event B event C on eth0 on eth1 on eth2\n" +" | | | | | \\(ha\n" +" | | | | v |\n" +" --E<gt> tracing E<lt>-- tracing socket tc ingress tc egress\n" +" prog_1 prog_2 prog_3 classifier action\n" +" | | | | prog_4 prog_5\n" +" |--- -----| |------| map_3 | |\n" +" map_1 map_2 --| map_4 |--\n" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Arguments" +msgstr "Аргументы" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, fuzzy +#| msgid "" +#| "The operation to be performed by the B<bpf>() system call is determined " +#| "by the I<cmd> argument. Each operation takes an accompanying argument, " +#| "provided via I<attr>, which is a pointer to a union of type I<bpf_attr> " +#| "(see below). The I<size> argument is the size of the union pointed to by " +#| "I<attr>." +msgid "" +"The operation to be performed by the B<bpf>() system call is determined by " +"the I<cmd> argument. Each operation takes an accompanying argument, " +"provided via I<attr>, which is a pointer to a union of type I<bpf_attr> (see " +"below). The unused fields and padding must be zeroed out before the call. " +"The I<size> argument is the size of the union pointed to by I<attr>." +msgstr "" +"В аргументе I<cmd> указывается операция, которая будет выполнена системным " +"вызовом B<bpf>(). Для каждой операции в I<attr> задаётся соответствующий " +"аргумент, который является объединением типа I<bpf_attr> (смотрите далее). В " +"аргументе I<size> указывается размер объединения, на который ссылается " +"I<attr>." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The value provided in I<cmd> is one of the following:" +msgstr "Значением I<cmd> может быть одно из:" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_MAP_CREATE>" +msgstr "B<BPF_MAP_CREATE>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Create a map and return a file descriptor that refers to the map. The close-" +"on-exec file descriptor flag (see B<fcntl>(2)) is automatically enabled for " +"the new file descriptor." +msgstr "" +"Создать карту и вернуть файловый дескриптор, который указывает на эту карту. " +"Для нового файлового дескриптора флаг close-on-exec (смотрите B<fcntl>(2)) " +"устанавливается автоматически." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_MAP_LOOKUP_ELEM>" +msgstr "B<BPF_MAP_LOOKUP_ELEM>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Look up an element by key in a specified map and return its value." +msgstr "Найти элемент по ключу в указанной карте и вернуть его значение." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_MAP_UPDATE_ELEM>" +msgstr "B<BPF_MAP_UPDATE_ELEM>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Create or update an element (key/value pair) in a specified map." +msgstr "Создать или обновить элемент (пару ключ/значение) в указанной карте." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_MAP_DELETE_ELEM>" +msgstr "B<BPF_MAP_DELETE_ELEM>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Look up and delete an element by key in a specified map." +msgstr "Найти и удалить элемент по ключу в указанной карте." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_MAP_GET_NEXT_KEY>" +msgstr "B<BPF_MAP_GET_NEXT_KEY>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Look up an element by key in a specified map and return the key of the next " +"element." +msgstr "" +"Найти элемент по ключу в указанной карте и вернуть ключ следующего элемента." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_PROG_LOAD>" +msgstr "B<BPF_PROG_LOAD>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Verify and load an eBPF program, returning a new file descriptor associated " +"with the program. The close-on-exec file descriptor flag (see B<fcntl>(2)) " +"is automatically enabled for the new file descriptor." +msgstr "" +"Проверить и загрузить программу eBPF; возвращается новый файловый " +"дескриптор, связанный с программой. Для нового файлового дескриптора флаг " +"close-on-exec (смотрите B<fcntl>(2)) устанавливается автоматически." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The I<bpf_attr> union consists of various anonymous structures that are used " +"by different B<bpf>() commands:" +msgstr "" +"Объединение I<bpf_attr> состоит из различных анонимных структур, которые " +"используются в различных командах B<bpf>():" + +#. commit 2541517c32be2531e0da59dfd7efc1ce844644f5 +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, fuzzy, no-wrap +#| msgid "" +#| " struct { /* Used by BPF_PROG_LOAD */\n" +#| " __u32 prog_type;\n" +#| " __u32 insn_cnt;\n" +#| " __aligned_u64 insns; /* 'const struct bpf_insn *' */\n" +#| " __aligned_u64 license; /* 'const char *' */\n" +#| " __u32 log_level; /* verbosity level of verifier */\n" +#| " __u32 log_size; /* size of user buffer */\n" +#| " __aligned_u64 log_buf; /* user supplied 'char *'\n" +#| " buffer */\n" +#| " __u32 kern_version;\n" +#| " /* checked when prog_type=kprobe\n" +#| " (since Linux 4.1) */\n" +#| " };\n" +#| "} __attribute__((aligned(8)));\n" +msgid "" +"union bpf_attr {\n" +" struct { /* Used by BPF_MAP_CREATE */\n" +" __u32 map_type;\n" +" __u32 key_size; /* size of key in bytes */\n" +" __u32 value_size; /* size of value in bytes */\n" +" __u32 max_entries; /* maximum number of entries\n" +" in a map */\n" +" };\n" +"\\&\n" +" struct { /* Used by BPF_MAP_*_ELEM and BPF_MAP_GET_NEXT_KEY\n" +" commands */\n" +" __u32 map_fd;\n" +" __aligned_u64 key;\n" +" union {\n" +" __aligned_u64 value;\n" +" __aligned_u64 next_key;\n" +" };\n" +" __u64 flags;\n" +" };\n" +"\\&\n" +" struct { /* Used by BPF_PROG_LOAD */\n" +" __u32 prog_type;\n" +" __u32 insn_cnt;\n" +" __aligned_u64 insns; /* \\[aq]const struct bpf_insn *\\[aq] */\n" +" __aligned_u64 license; /* \\[aq]const char *\\[aq] */\n" +" __u32 log_level; /* verbosity level of verifier */\n" +" __u32 log_size; /* size of user buffer */\n" +" __aligned_u64 log_buf; /* user supplied \\[aq]char *\\[aq]\n" +" buffer */\n" +" __u32 kern_version;\n" +" /* checked when prog_type=kprobe\n" +" (since Linux 4.1) */\n" +" };\n" +"} __attribute__((aligned(8)));\n" +msgstr "" +" struct { /* используется в BPF_PROG_LOAD */\n" +" __u32 prog_type;\n" +" __u32 insn_cnt;\n" +" __aligned_u64 insns; /* 'const struct bpf_insn *' */\n" +" __aligned_u64 license; /* 'const char *' */\n" +" __u32 log_level; /* уровень детализации\n" +" при проверке */\n" +" __u32 log_size; /* размер пользовательского\n" +" буфера */\n" +" __aligned_u64 log_buf; /* буфер 'char *'\n" +" выделяемый пользователем */\n" +" __u32 kern_version;\n" +" /* проверяется, если\n" +" prog_type=kprobe\n" +" (начиная с Linux 4.1) */\n" +" };\n" +"} __attribute__((aligned(8)));\n" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "eBPF maps" +msgstr "Карты eBPF" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Maps are a generic data structure for storage of different types of data. " +"They allow sharing of data between eBPF kernel programs, and also between " +"kernel and user-space applications." +msgstr "" +"Карты представляют собой обобщённую структуру данных, которая позволяет " +"хранить данных различных типов. Карты позволяют использовать данные " +"нескольким ядерным программам eBPF одновременно, а также ядру и приложениям " +"пользовательского пространства." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Each map type has the following attributes:" +msgstr "Каждый тип карты имеет следующие атрибуты:" + +#. type: IP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "\\[bu]" +msgstr "\\[bu]" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "type" +msgstr "тип" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "maximum number of elements" +msgstr "максимальное количество элементов" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "key size in bytes" +msgstr "размер ключа в байтах" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "value size in bytes" +msgstr "размер значения в байтах" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The following wrapper functions demonstrate how various B<bpf>() commands " +"can be used to access the maps. The functions use the I<cmd> argument to " +"invoke different operations." +msgstr "" +"Следующие обёрточные функции показывают как для доступа к картам можно " +"использовать различные команды B<bpf>(). Для указания вызываемой операции " +"служит параметр I<cmd>." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The B<BPF_MAP_CREATE> command creates a new map, returning a new file " +"descriptor that refers to the map." +msgstr "" +"Команда B<BPF_MAP_CREATE> создаёт новую карту, возвращая новый файловый " +"дескриптор, который указывает на карту." + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, fuzzy, no-wrap +#| msgid "" +#| "int\n" +#| "bpf_create_map(enum bpf_map_type map_type,\n" +#| " unsigned int key_size,\n" +#| " unsigned int value_size,\n" +#| " unsigned int max_entries)\n" +#| "{\n" +#| " union bpf_attr attr = {\n" +#| " .map_type = map_type,\n" +#| " .key_size = key_size,\n" +#| " .value_size = value_size,\n" +#| " .max_entries = max_entries\n" +#| " };\n" +msgid "" +"int\n" +"bpf_create_map(enum bpf_map_type map_type,\n" +" unsigned int key_size,\n" +" unsigned int value_size,\n" +" unsigned int max_entries)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_type = map_type,\n" +" .key_size = key_size,\n" +" .value_size = value_size,\n" +" .max_entries = max_entries\n" +" };\n" +"\\&\n" +" return bpf(BPF_MAP_CREATE, &attr, sizeof(attr));\n" +"}\n" +msgstr "" +"int\n" +"bpf_create_map(enum bpf_map_type map_type,\n" +" unsigned int key_size,\n" +" unsigned int value_size,\n" +" unsigned int max_entries)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_type = map_type,\n" +" .key_size = key_size,\n" +" .value_size = value_size,\n" +" .max_entries = max_entries\n" +" };\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The new map has the type specified by I<map_type>, and attributes as " +"specified in I<key_size>, I<value_size>, and I<max_entries>. On success, " +"this operation returns a file descriptor. On error, -1 is returned and " +"I<errno> is set to B<EINVAL>, B<EPERM>, or B<ENOMEM>." +msgstr "" +"Новая карта имеет тип, указанный в I<map_type>, и атрибуты, в соответствии с " +"I<key_size>, I<value_size> и I<max_entries>. При успешном выполнении этой " +"операции возвращается файловый дескриптор. При ошибке возвращается -1 и в " +"I<errno> записывается B<EINVAL>, B<EPERM> или B<ENOMEM>." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The I<key_size> and I<value_size> attributes will be used by the verifier " +"during program loading to check that the program is calling " +"B<bpf_map_*_elem>() helper functions with a correctly initialized I<key> " +"and to check that the program doesn't access the map element I<value> beyond " +"the specified I<value_size>. For example, when a map is created with a " +"I<key_size> of 8 and the eBPF program calls" +msgstr "" +"Атрибуты I<key_size> и I<value_size> будут использоваться механизмом " +"проверки при загрузке программы для проверки того, что программа вызывает " +"вспомогательные функции B<bpf_map_*_elem>() с корректно инициализированным " +"I<key> и что программа не обращается к элементу карты I<value> за пределами, " +"задаваемыми I<value_size>. Например, когда карта создана с I<key_size> " +"равным 8 и программа eBPF вызывает" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "bpf_map_lookup_elem(map_fd, fp - 4)\n" +msgstr "bpf_map_lookup_elem(map_fd, fp - 4)\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "the program will be rejected, since the in-kernel helper function" +msgstr "" +"то программа не будет загружена, так как от вспомогательной ядерной функции" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "bpf_map_lookup_elem(map_fd, void *key)\n" +msgstr "bpf_map_lookup_elem(map_fd, void *key)\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"expects to read 8 bytes from the location pointed to by I<key>, but the " +"I<fp\\ -\\ 4> (where I<fp> is the top of the stack) starting address will " +"cause out-of-bounds stack access." +msgstr "" +"ожидается чтение 8 байт из места, указанного I<key>, но начальный адрес " +"I<fp\\ -\\ 4> (где I<fp> — вершина стека) выходит за границы стека." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Similarly, when a map is created with a I<value_size> of 1 and the eBPF " +"program contains" +msgstr "" +"Аналогично, когда карта создаётся с I<value_size> равным 1 и программа eBPF " +"содержит" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "" +"value = bpf_map_lookup_elem(...);\n" +"*(u32 *) value = 1;\n" +msgstr "" +"value = bpf_map_lookup_elem(...);\n" +"*(u32 *) value = 1;\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"the program will be rejected, since it accesses the I<value> pointer beyond " +"the specified 1 byte I<value_size> limit." +msgstr "" +"то программа не будет загружена, так как она обращается к указателю I<value> " +"вне ограничения I<value_size>, равного 1 байту." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Currently, the following values are supported for I<map_type>:" +msgstr "В настоящее время поддерживаются следующие значения I<map_type>:" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, fuzzy, no-wrap +#| msgid "" +#| "enum bpf_map_type {\n" +#| " BPF_MAP_TYPE_UNSPEC, /* Reserve 0 as invalid map type */\n" +#| " BPF_MAP_TYPE_HASH,\n" +#| " BPF_MAP_TYPE_ARRAY,\n" +#| " BPF_MAP_TYPE_PROG_ARRAY,\n" +#| " BPF_MAP_TYPE_PERF_EVENT_ARRAY,\n" +#| " BPF_MAP_TYPE_PERCPU_HASH,\n" +#| " BPF_MAP_TYPE_PERCPU_ARRAY,\n" +#| " BPF_MAP_TYPE_STACK_TRACE,\n" +#| " BPF_MAP_TYPE_CGROUP_ARRAY,\n" +#| " BPF_MAP_TYPE_LRU_HASH,\n" +#| " BPF_MAP_TYPE_LRU_PERCPU_HASH,\n" +#| " BPF_MAP_TYPE_LPM_TRIE,\n" +#| " BPF_MAP_TYPE_ARRAY_OF_MAPS,\n" +#| " BPF_MAP_TYPE_HASH_OF_MAPS,\n" +#| " BPF_MAP_TYPE_DEVMAP,\n" +#| " BPF_MAP_TYPE_SOCKMAP,\n" +#| " BPF_MAP_TYPE_CPUMAP,\n" +#| "};\n" +msgid "" +"enum bpf_map_type {\n" +" BPF_MAP_TYPE_UNSPEC, /* Reserve 0 as invalid map type */\n" +" BPF_MAP_TYPE_HASH,\n" +" BPF_MAP_TYPE_ARRAY,\n" +" BPF_MAP_TYPE_PROG_ARRAY,\n" +" BPF_MAP_TYPE_PERF_EVENT_ARRAY,\n" +" BPF_MAP_TYPE_PERCPU_HASH,\n" +" BPF_MAP_TYPE_PERCPU_ARRAY,\n" +" BPF_MAP_TYPE_STACK_TRACE,\n" +" BPF_MAP_TYPE_CGROUP_ARRAY,\n" +" BPF_MAP_TYPE_LRU_HASH,\n" +" BPF_MAP_TYPE_LRU_PERCPU_HASH,\n" +" BPF_MAP_TYPE_LPM_TRIE,\n" +" BPF_MAP_TYPE_ARRAY_OF_MAPS,\n" +" BPF_MAP_TYPE_HASH_OF_MAPS,\n" +" BPF_MAP_TYPE_DEVMAP,\n" +" BPF_MAP_TYPE_SOCKMAP,\n" +" BPF_MAP_TYPE_CPUMAP,\n" +" BPF_MAP_TYPE_XSKMAP,\n" +" BPF_MAP_TYPE_SOCKHASH,\n" +" BPF_MAP_TYPE_CGROUP_STORAGE,\n" +" BPF_MAP_TYPE_REUSEPORT_SOCKARRAY,\n" +" BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE,\n" +" BPF_MAP_TYPE_QUEUE,\n" +" BPF_MAP_TYPE_STACK,\n" +" /* See /usr/include/linux/bpf.h for the full list. */\n" +"};\n" +msgstr "" +"enum bpf_map_type {\n" +" BPF_MAP_TYPE_UNSPEC, /* 0 зарезервирован для карты неправильного типа */\n" +" BPF_MAP_TYPE_HASH,\n" +" BPF_MAP_TYPE_ARRAY,\n" +" BPF_MAP_TYPE_PROG_ARRAY,\n" +" BPF_MAP_TYPE_PERF_EVENT_ARRAY,\n" +" BPF_MAP_TYPE_PERCPU_HASH,\n" +" BPF_MAP_TYPE_PERCPU_ARRAY,\n" +" BPF_MAP_TYPE_STACK_TRACE,\n" +" BPF_MAP_TYPE_CGROUP_ARRAY,\n" +" BPF_MAP_TYPE_LRU_HASH,\n" +" BPF_MAP_TYPE_LRU_PERCPU_HASH,\n" +" BPF_MAP_TYPE_LPM_TRIE,\n" +" BPF_MAP_TYPE_ARRAY_OF_MAPS,\n" +" BPF_MAP_TYPE_HASH_OF_MAPS,\n" +" BPF_MAP_TYPE_DEVMAP,\n" +" BPF_MAP_TYPE_SOCKMAP,\n" +" BPF_MAP_TYPE_CPUMAP,\n" +"};\n" + +#. FIXME We need an explanation of why one might choose each of +#. these map implementations +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"I<map_type> selects one of the available map implementations in the kernel. " +"For all map types, eBPF programs access maps with the same " +"B<bpf_map_lookup_elem>() and B<bpf_map_update_elem>() helper functions. " +"Further details of the various map types are given below." +msgstr "" +"Для I<map_type> выбирается одна из доступных реализаций карт в ядре. Для " +"всех типов карт программы eBPF получают доступ через одни и те же " +"вспомогательные функции B<bpf_map_lookup_elem>() и B<bpf_map_update_elem>(). " +"Подробности о различных типах карт приведены далее." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The B<BPF_MAP_LOOKUP_ELEM> command looks up an element with a given I<key> " +"in the map referred to by the file descriptor I<fd>." +msgstr "" +"Команда B<BPF_MAP_LOOKUP_ELEM> ищет элемент с заданным I<key> в карте, на " +"которую ссылается файловый дескриптор I<fd>." + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, fuzzy, no-wrap +#| msgid "" +#| "int\n" +#| "bpf_lookup_elem(int fd, const void *key, void *value)\n" +#| "{\n" +#| " union bpf_attr attr = {\n" +#| " .map_fd = fd,\n" +#| " .key = ptr_to_u64(key),\n" +#| " .value = ptr_to_u64(value),\n" +#| " };\n" +msgid "" +"int\n" +"bpf_lookup_elem(int fd, const void *key, void *value)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" .value = ptr_to_u64(value),\n" +" };\n" +"\\&\n" +" return bpf(BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr));\n" +"}\n" +msgstr "" +"int\n" +"bpf_lookup_elem(int fd, const void *key, void *value)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" .value = ptr_to_u64(value),\n" +" };\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"If an element is found, the operation returns zero and stores the element's " +"value into I<value>, which must point to a buffer of I<value_size> bytes." +msgstr "" +"Если элемент найден, то возвращается ноль и значение элемента сохраняется в " +"I<value>, которое должно указывать на буфер размером I<value_size> байт." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"If no element is found, the operation returns -1 and sets I<errno> to " +"B<ENOENT>." +msgstr "" +"Если элемент не найден, то возвращается -1, а в I<errno> записывается " +"B<ENOENT>." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The B<BPF_MAP_UPDATE_ELEM> command creates or updates an element with a " +"given I<key/value> in the map referred to by the file descriptor I<fd>." +msgstr "" +"Команда B<BPF_MAP_UPDATE_ELEM> создаёт или обновляет элемент с заданными " +"I<key/value> в карте, на которую ссылается файловый дескриптор I<fd>." + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, fuzzy, no-wrap +#| msgid "" +#| "int\n" +#| "bpf_update_elem(int fd, const void *key, const void *value,\n" +#| " uint64_t flags)\n" +#| "{\n" +#| " union bpf_attr attr = {\n" +#| " .map_fd = fd,\n" +#| " .key = ptr_to_u64(key),\n" +#| " .value = ptr_to_u64(value),\n" +#| " .flags = flags,\n" +#| " };\n" +msgid "" +"int\n" +"bpf_update_elem(int fd, const void *key, const void *value,\n" +" uint64_t flags)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" .value = ptr_to_u64(value),\n" +" .flags = flags,\n" +" };\n" +"\\&\n" +" return bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr));\n" +"}\n" +msgstr "" +"int\n" +"bpf_update_elem(int fd, const void *key, const void *value,\n" +" uint64_t flags)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" .value = ptr_to_u64(value),\n" +" .flags = flags,\n" +" };\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The I<flags> argument should be specified as one of the following:" +msgstr "В аргументе I<flags> должно быть указано одно из:" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_ANY>" +msgstr "B<BPF_ANY>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Create a new element or update an existing element." +msgstr "Создать новый элемент или обновить существующий." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_NOEXIST>" +msgstr "B<BPF_NOEXIST>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Create a new element only if it did not exist." +msgstr "Создать новый элемент, только если он не существует." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_EXIST>" +msgstr "B<BPF_EXIST>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Update an existing element." +msgstr "Обновить существующий элемент." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"On success, the operation returns zero. On error, -1 is returned and " +"I<errno> is set to B<EINVAL>, B<EPERM>, B<ENOMEM>, or B<E2BIG>. B<E2BIG> " +"indicates that the number of elements in the map reached the I<max_entries> " +"limit specified at map creation time. B<EEXIST> will be returned if " +"I<flags> specifies B<BPF_NOEXIST> and the element with I<key> already exists " +"in the map. B<ENOENT> will be returned if I<flags> specifies B<BPF_EXIST> " +"and the element with I<key> doesn't exist in the map." +msgstr "" +"При успешном выполнении операции возвращается ноль. При ошибке возвращается " +"-1, а в I<errno> записывается B<EINVAL>, B<EPERM>, B<ENOMEM> или B<E2BIG>. " +"Значение B<E2BIG> показывает, что количество элементов в карте достигло " +"ограничения I<max_entries>, заданного при создании карты. Значение B<EEXIST> " +"устанавливается, если в I<flags> указано B<BPF_NOEXIST> и элемент с I<key> " +"уже существует в карте. Значение B<ENOENT> устанавливается, если в I<flags> " +"указано B<BPF_EXIST> и элемент с I<key> не существует в карте." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The B<BPF_MAP_DELETE_ELEM> command deletes the element whose key is I<key> " +"from the map referred to by the file descriptor I<fd>." +msgstr "" +"Команда B<BPF_MAP_DELETE_ELEM> удаляет элемент с ключом I<key> из карты, на " +"которую ссылается файловый дескриптор I<fd>." + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, fuzzy, no-wrap +#| msgid "" +#| "int\n" +#| "bpf_delete_elem(int fd, const void *key)\n" +#| "{\n" +#| " union bpf_attr attr = {\n" +#| " .map_fd = fd,\n" +#| " .key = ptr_to_u64(key),\n" +#| " };\n" +msgid "" +"int\n" +"bpf_delete_elem(int fd, const void *key)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" };\n" +"\\&\n" +" return bpf(BPF_MAP_DELETE_ELEM, &attr, sizeof(attr));\n" +"}\n" +msgstr "" +"int\n" +"bpf_delete_elem(int fd, const void *key)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" };\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"On success, zero is returned. If the element is not found, -1 is returned " +"and I<errno> is set to B<ENOENT>." +msgstr "" +"При успешном выполнении возвращается ноль. Если элемент не найден, то " +"возвращается -1, а I<errno> присваивается значение B<ENOENT>." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The B<BPF_MAP_GET_NEXT_KEY> command looks up an element by I<key> in the map " +"referred to by the file descriptor I<fd> and sets the I<next_key> pointer to " +"the key of the next element." +msgstr "" +"Команда B<BPF_MAP_GET_NEXT_KEY> ищет элемент по ключу I<key> в карте, на " +"которую указывает файловый дескриптор I<fd>, и присваивает указателю " +"I<next_key> ключ следующего элемента." + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, fuzzy, no-wrap +#| msgid "" +#| "int\n" +#| "bpf_get_next_key(int fd, const void *key, void *next_key)\n" +#| "{\n" +#| " union bpf_attr attr = {\n" +#| " .map_fd = fd,\n" +#| " .key = ptr_to_u64(key),\n" +#| " .next_key = ptr_to_u64(next_key),\n" +#| " };\n" +msgid "" +"int\n" +"bpf_get_next_key(int fd, const void *key, void *next_key)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" .next_key = ptr_to_u64(next_key),\n" +" };\n" +"\\&\n" +" return bpf(BPF_MAP_GET_NEXT_KEY, &attr, sizeof(attr));\n" +"}\n" +msgstr "" +"int\n" +"bpf_get_next_key(int fd, const void *key, void *next_key)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" .next_key = ptr_to_u64(next_key),\n" +" };\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"If I<key> is found, the operation returns zero and sets the I<next_key> " +"pointer to the key of the next element. If I<key> is not found, the " +"operation returns zero and sets the I<next_key> pointer to the key of the " +"first element. If I<key> is the last element, -1 is returned and I<errno> " +"is set to B<ENOENT>. Other possible I<errno> values are B<ENOMEM>, " +"B<EFAULT>, B<EPERM>, and B<EINVAL>. This method can be used to iterate over " +"all elements in the map." +msgstr "" +"Если I<key> найден, то операция возвращает ноль и устанавливает указатель " +"I<next_key> равным ключу следующего элемента. Если I<key> не найден, то " +"операция возвращает ноль и устанавливает указатель I<next_key> равным ключу " +"первого элемента. Если I<key> — последний элемент, то возвращается -1 и " +"I<errno> присваивается значение B<ENOENT>. Другие возможные значения " +"I<errno>: B<ENOMEM>, B<EFAULT>, B<EPERM> и B<EINVAL>. Данный метод можно " +"использовать для обхода всех элементов в карте." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<close(map_fd)>" +msgstr "B<close(map_fd)>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Delete the map referred to by the file descriptor I<map_fd>. When the user-" +"space program that created a map exits, all maps will be deleted " +"automatically (but see NOTES)." +msgstr "" +"Данный вызов удаляет карту, на которую ссылается файловый дескриптор " +"I<map_fd>. Когда программа пользовательского пространства, создавшая карту, " +"завершает работу, все карты удаляются автоматически (но смотрите ЗАМЕЧАНИЯ)." + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "eBPF map types" +msgstr "Типы карт eBPF" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The following map types are supported:" +msgstr "Поддерживаются следующие типы карт:" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_MAP_TYPE_HASH>" +msgstr "B<BPF_MAP_TYPE_HASH>" + +#. commit 0f8e4bd8a1fc8c4185f1630061d0a1f2d197a475 +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Hash-table maps have the following characteristics:" +msgstr "Карты в виде хэш-таблицы имеют следующие характеристики:" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Maps are created and destroyed by user-space programs. Both user-space and " +"eBPF programs can perform lookup, update, and delete operations." +msgstr "" +"Карты создаются и уничтожаются программами пользовательского пространства. " +"Из пользовательских и eBPF программ можно выполнять операции поиска, " +"обновления и удаления." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The kernel takes care of allocating and freeing key/value pairs." +msgstr "За выделение/освобождения места для пар ключ/значение отвечает ядро." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The B<map_update_elem>() helper will fail to insert new element when the " +"I<max_entries> limit is reached. (This ensures that eBPF programs cannot " +"exhaust memory.)" +msgstr "" +"Вспомогательная функция B<map_update_elem>() завершится с ошибкой при " +"вставке нового элемента при достижении ограничения I<max_entries> (то есть, " +"программы eBPF не смогут занять всю память)." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "B<map_update_elem>() replaces existing elements atomically." +msgstr "" +"Функция B<map_update_elem>() выполняет атомарную замену существующего " +"элемента." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Hash-table maps are optimized for speed of lookup." +msgstr "Карты в виде хэш-таблицы оптимизированы под скоростной поиск." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_MAP_TYPE_ARRAY>" +msgstr "B<BPF_MAP_TYPE_ARRAY>" + +#. commit 28fbcfa08d8ed7c5a50d41a0433aad222835e8e3 +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Array maps have the following characteristics:" +msgstr "Карты в виде массива имеют следующие характеристики:" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Optimized for fastest possible lookup. In the future the verifier/JIT " +"compiler may recognize lookup() operations that employ a constant key and " +"optimize it into constant pointer. It is possible to optimize a non-" +"constant key into direct pointer arithmetic as well, since pointers and " +"I<value_size> are constant for the life of the eBPF program. In other " +"words, B<array_map_lookup_elem>() may be 'inlined' by the verifier/JIT " +"compiler while preserving concurrent access to this map from user space." +msgstr "" +"Оптимизированы под самый быстрый поиск. В будущем механизм проверки/" +"компилятор JIT смогут распознавать операции lookup(), которые выдают ключ-" +"константу и оптимизировать его в указатель-константу. Также возможно " +"оптимизировать ключ не константу в явный указатель арифметически, так как " +"указатели и I<value_size> являются константами на всём протяжении жизни " +"программы eBPF. Другими словами, B<array_map_lookup_elem>() может быть " +"«встроена» механизмом проверки/компилятором JIT, одновременно сохраняя " +"доступ к этой карте из пространства пользователя." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "All array elements pre-allocated and zero initialized at init time" +msgstr "" +"Место под все элементы массива выделяется заранее и заполняется нулями при " +"инициализации." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The key is an array index, and must be exactly four bytes." +msgstr "Ключом является индекс массива, и он всегда занимает четыре байта." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"B<map_delete_elem>() fails with the error B<EINVAL>, since elements cannot " +"be deleted." +msgstr "" +"Функция B<map_delete_elem>() завершается с ошибкой B<EINVAL>, так как " +"элементы нельзя удалять." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"B<map_update_elem>() replaces elements in a B<nonatomic> fashion; for " +"atomic updates, a hash-table map should be used instead. There is however " +"one special case that can also be used with arrays: the atomic built-in " +"B<__sync_fetch_and_add()> can be used on 32 and 64 bit atomic counters. For " +"example, it can be applied on the whole value itself if it represents a " +"single counter, or in case of a structure containing multiple counters, it " +"could be used on individual counters. This is quite often useful for " +"aggregation and accounting of events." +msgstr "" +"Функция B<map_update_elem>() заменяет элементы B<не атомарным> образом; для " +"атомарных обновлений нужно использовать карту в виде хэш-таблицы. Однако " +"есть особый случай при работе и с массивами: можно использовать встроенную " +"атомарную функцию B<__sync_fetch_and_add()> для работы с 32 и 64-битными " +"атомарными указателями. Например, это можно использовать, если само значение " +"целиком представляет собой одиночный счётчик, или если есть структура с " +"несколькими счётчиками, то функцию можно применять для отдельных счётчиков. " +"Это довольно часто полезно для агрегирования событий и учёта." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Among the uses for array maps are the following:" +msgstr "Возможные варианты использования карт в виде массивов:" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"As \"global\" eBPF variables: an array of 1 element whose key is (index) 0 " +"and where the value is a collection of 'global' variables which eBPF " +"programs can use to keep state between events." +msgstr "" +"«Глобальные» переменные eBPF: массив из одного элемента 1, чей ключ (индекс) " +"равен 0, а значение — набор «глобальных» переменных, в которых программы " +"eBPF могут хранить состояние между событиями." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Aggregation of tracing events into a fixed set of buckets." +msgstr "Агрегация событий трассировки в постоянный набор блоков (buckets)." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Accounting of networking events, for example, number of packets and packet " +"sizes." +msgstr "Учёт сетевых событий, например, количество и размер пакетов." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_MAP_TYPE_PROG_ARRAY> (since Linux 4.2)" +msgstr "B<BPF_MAP_TYPE_PROG_ARRAY> (начиная с Linux 4.2)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A program array map is a special kind of array map whose map values contain " +"only file descriptors referring to other eBPF programs. Thus, both the " +"I<key_size> and I<value_size> must be exactly four bytes. This map is used " +"in conjunction with the B<bpf_tail_call>() helper." +msgstr "" +"Карта в виде программного массива — специальный вариант карты в виде " +"массива, в которой значения содержат только файловые дескрипторы, " +"указывающие на другие программы eBPF. То есть I<key_size> и I<value_size> " +"должны занимать по четыре байта. Данная карта используется вместе с функцией " +"B<bpf_tail_call>()." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This means that an eBPF program with a program array map attached to it can " +"call from kernel side into" +msgstr "" +"Это означает, что программу eBPF с картой в виде программного массива можно " +"присоединить из ядра с помощью вызова" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "" +"void bpf_tail_call(void *context, void *prog_map,\n" +" unsigned int index);\n" +msgstr "" +"void bpf_tail_call(void *context, void *prog_map,\n" +" unsigned int index);\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"and therefore replace its own program flow with the one from the program at " +"the given program array slot, if present. This can be regarded as kind of a " +"jump table to a different eBPF program. The invoked program will then reuse " +"the same stack. When a jump into the new program has been performed, it " +"won't return to the old program anymore." +msgstr "" +"и, таким образом, заменить свой программный поток потоком из элемента " +"массива заданной программы, если он есть. Это можно рассматривать как " +"подобие таблицы переходов к другой программе eBPF. Вызываемая программа " +"использует тот же стек. При выполнении перехода в новую программу возврат к " +"старой более невозможен." + +#. MAX_TAIL_CALL_CNT +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"If no eBPF program is found at the given index of the program array (because " +"the map slot doesn't contain a valid program file descriptor, the specified " +"lookup index/key is out of bounds, or the limit of 32 nested calls has been " +"exceed), execution continues with the current eBPF program. This can be " +"used as a fall-through for default cases." +msgstr "" +"Если программа eBPF с указанным индексом не найдена в программном массиве " +"(так как элемент карты не содержит корректного программного файлового " +"дескриптора, поиск индекса/ключа вне границ диапазона или превышено " +"ограничение на количество вложенных вызовов (32)), то продолжается " +"выполнение текущей программы eBPF. Это можно использовать для обработки " +"значений по умолчанию." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A program array map is useful, for example, in tracing or networking, to " +"handle individual system calls or protocols in their own subprograms and use " +"their identifiers as an individual map index. This approach may result in " +"performance benefits, and also makes it possible to overcome the maximum " +"instruction limit of a single eBPF program. In dynamic environments, a user-" +"space daemon might atomically replace individual subprograms at run-time " +"with newer versions to alter overall program behavior, for instance, if " +"global policies change." +msgstr "" +"Например, карта в виде программного массива полезна, если при трассировке " +"или работе с сетью нужно передать обработку отдельных системных вызовов или " +"протоколов их собственным подпрограммам и использовать их идентификаторы как " +"отдельные индексы карт. Такой подход позволяет достичь преимуществ в " +"производительности, а также преодолеть возможное ограничение на количество " +"инструкций одной программы eBPF. В динамичных окружениях пользовательский " +"демон может атомарно заменить отдельные подпрограммы во время выполнения на " +"новые версии, чтобы полностью изменить работу программы, например, при " +"глобальном изменении политик." + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "eBPF programs" +msgstr "Программы eBPF" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The B<BPF_PROG_LOAD> command is used to load an eBPF program into the " +"kernel. The return value for this command is a new file descriptor " +"associated with this eBPF program." +msgstr "" +"Команда B<BPF_PROG_LOAD> используется для загрузки программы eBPF в ядро. " +"Возвращаемым значением является новый файловый дескриптор, связанный с этой " +"программой eBPF." + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, fuzzy, no-wrap +#| msgid "" +#| "int\n" +#| "bpf_prog_load(enum bpf_prog_type type,\n" +#| " const struct bpf_insn *insns, int insn_cnt,\n" +#| " const char *license)\n" +#| "{\n" +#| " union bpf_attr attr = {\n" +#| " .prog_type = type,\n" +#| " .insns = ptr_to_u64(insns),\n" +#| " .insn_cnt = insn_cnt,\n" +#| " .license = ptr_to_u64(license),\n" +#| " .log_buf = ptr_to_u64(bpf_log_buf),\n" +#| " .log_size = LOG_BUF_SIZE,\n" +#| " .log_level = 1,\n" +#| " };\n" +msgid "" +"char bpf_log_buf[LOG_BUF_SIZE];\n" +"\\&\n" +"int\n" +"bpf_prog_load(enum bpf_prog_type type,\n" +" const struct bpf_insn *insns, int insn_cnt,\n" +" const char *license)\n" +"{\n" +" union bpf_attr attr = {\n" +" .prog_type = type,\n" +" .insns = ptr_to_u64(insns),\n" +" .insn_cnt = insn_cnt,\n" +" .license = ptr_to_u64(license),\n" +" .log_buf = ptr_to_u64(bpf_log_buf),\n" +" .log_size = LOG_BUF_SIZE,\n" +" .log_level = 1,\n" +" };\n" +"\\&\n" +" return bpf(BPF_PROG_LOAD, &attr, sizeof(attr));\n" +"}\n" +msgstr "" +"int\n" +"bpf_prog_load(enum bpf_prog_type type,\n" +" const struct bpf_insn *insns, int insn_cnt,\n" +" const char *license)\n" +"{\n" +" union bpf_attr attr = {\n" +" .prog_type = type,\n" +" .insns = ptr_to_u64(insns),\n" +" .insn_cnt = insn_cnt,\n" +" .license = ptr_to_u64(license),\n" +" .log_buf = ptr_to_u64(bpf_log_buf),\n" +" .log_size = LOG_BUF_SIZE,\n" +" .log_level = 1,\n" +" };\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "I<prog_type> is one of the available program types:" +msgstr "Значением I<prog_type> может быть один из типов программ:" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, fuzzy, no-wrap +#| msgid "" +#| "enum bpf_map_type {\n" +#| " BPF_MAP_TYPE_UNSPEC, /* Reserve 0 as invalid map type */\n" +#| " BPF_MAP_TYPE_HASH,\n" +#| " BPF_MAP_TYPE_ARRAY,\n" +#| " BPF_MAP_TYPE_PROG_ARRAY,\n" +#| " BPF_MAP_TYPE_PERF_EVENT_ARRAY,\n" +#| " BPF_MAP_TYPE_PERCPU_HASH,\n" +#| " BPF_MAP_TYPE_PERCPU_ARRAY,\n" +#| " BPF_MAP_TYPE_STACK_TRACE,\n" +#| " BPF_MAP_TYPE_CGROUP_ARRAY,\n" +#| " BPF_MAP_TYPE_LRU_HASH,\n" +#| " BPF_MAP_TYPE_LRU_PERCPU_HASH,\n" +#| " BPF_MAP_TYPE_LPM_TRIE,\n" +#| " BPF_MAP_TYPE_ARRAY_OF_MAPS,\n" +#| " BPF_MAP_TYPE_HASH_OF_MAPS,\n" +#| " BPF_MAP_TYPE_DEVMAP,\n" +#| " BPF_MAP_TYPE_SOCKMAP,\n" +#| " BPF_MAP_TYPE_CPUMAP,\n" +#| "};\n" +msgid "" +"enum bpf_prog_type {\n" +" BPF_PROG_TYPE_UNSPEC, /* Reserve 0 as invalid\n" +" program type */\n" +" BPF_PROG_TYPE_SOCKET_FILTER,\n" +" BPF_PROG_TYPE_KPROBE,\n" +" BPF_PROG_TYPE_SCHED_CLS,\n" +" BPF_PROG_TYPE_SCHED_ACT,\n" +" BPF_PROG_TYPE_TRACEPOINT,\n" +" BPF_PROG_TYPE_XDP,\n" +" BPF_PROG_TYPE_PERF_EVENT,\n" +" BPF_PROG_TYPE_CGROUP_SKB,\n" +" BPF_PROG_TYPE_CGROUP_SOCK,\n" +" BPF_PROG_TYPE_LWT_IN,\n" +" BPF_PROG_TYPE_LWT_OUT,\n" +" BPF_PROG_TYPE_LWT_XMIT,\n" +" BPF_PROG_TYPE_SOCK_OPS,\n" +" BPF_PROG_TYPE_SK_SKB,\n" +" BPF_PROG_TYPE_CGROUP_DEVICE,\n" +" BPF_PROG_TYPE_SK_MSG,\n" +" BPF_PROG_TYPE_RAW_TRACEPOINT,\n" +" BPF_PROG_TYPE_CGROUP_SOCK_ADDR,\n" +" BPF_PROG_TYPE_LWT_SEG6LOCAL,\n" +" BPF_PROG_TYPE_LIRC_MODE2,\n" +" BPF_PROG_TYPE_SK_REUSEPORT,\n" +" BPF_PROG_TYPE_FLOW_DISSECTOR,\n" +" /* See /usr/include/linux/bpf.h for the full list. */\n" +"};\n" +msgstr "" +"enum bpf_map_type {\n" +" BPF_MAP_TYPE_UNSPEC, /* 0 зарезервирован для карты неправильного типа */\n" +" BPF_MAP_TYPE_HASH,\n" +" BPF_MAP_TYPE_ARRAY,\n" +" BPF_MAP_TYPE_PROG_ARRAY,\n" +" BPF_MAP_TYPE_PERF_EVENT_ARRAY,\n" +" BPF_MAP_TYPE_PERCPU_HASH,\n" +" BPF_MAP_TYPE_PERCPU_ARRAY,\n" +" BPF_MAP_TYPE_STACK_TRACE,\n" +" BPF_MAP_TYPE_CGROUP_ARRAY,\n" +" BPF_MAP_TYPE_LRU_HASH,\n" +" BPF_MAP_TYPE_LRU_PERCPU_HASH,\n" +" BPF_MAP_TYPE_LPM_TRIE,\n" +" BPF_MAP_TYPE_ARRAY_OF_MAPS,\n" +" BPF_MAP_TYPE_HASH_OF_MAPS,\n" +" BPF_MAP_TYPE_DEVMAP,\n" +" BPF_MAP_TYPE_SOCKMAP,\n" +" BPF_MAP_TYPE_CPUMAP,\n" +"};\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "For further details of eBPF program types, see below." +msgstr "Дополнительную информацию о типах программ eBPF смотрите далее." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The remaining fields of I<bpf_attr> are set as follows:" +msgstr "Остальные поля I<bpf_attr> заполняются следующим образом:" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "I<insns> is an array of I<struct bpf_insn> instructions." +msgstr "Поле I<insns> — массив инструкций I<struct bpf_insn>." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"I<insn_cnt> is the number of instructions in the program referred to by " +"I<insns>." +msgstr "" +"Поле I<insn_cnt> — количество инструкций в программе, на которую ссылается " +"I<insns>." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"I<license> is a license string, which must be GPL compatible to call helper " +"functions marked I<gpl_only>. (The licensing rules are the same as for " +"kernel modules, so that also dual licenses, such as \"Dual BSD/GPL\", may be " +"used.)" +msgstr "" +"Поле I<license> — строка лицензии, которая должна быть совместима с GPL, " +"чтобы можно было вызывать вспомогательные функции, помеченные как " +"I<gpl_only> (условия лицензии такие же как и для модулей ядра, то есть также " +"можно использовать двойные лицензии, например «Dual BSD/GPL»)." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"I<log_buf> is a pointer to a caller-allocated buffer in which the in-kernel " +"verifier can store the verification log. This log is a multi-line string " +"that can be checked by the program author in order to understand how the " +"verifier came to the conclusion that the eBPF program is unsafe. The format " +"of the output can change at any time as the verifier evolves." +msgstr "" +"Поле I<log_buf> — указатель на буфер, выделенный вызывающим, в котором " +"ядерный механизм проверки может хранить журнал проверки. Данный журнал " +"представляет собой многострочный текст, из которого автор программы может " +"понять как механизм проверки сделал вывод, что программа eBPF небезопасна. " +"Формат вывода может поменяться в любое время, поскольку механизм проверки " +"ещё дорабатывается." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"I<log_size> size of the buffer pointed to by I<log_buf>. If the size of the " +"buffer is not large enough to store all verifier messages, -1 is returned " +"and I<errno> is set to B<ENOSPC>." +msgstr "" +"Поле I<log_size> — размер буфера, на который указывает I<log_buf>. Если " +"размер буфера недостаточен для хранения всех сообщений от механизма " +"проверки, то возвращается -1, а I<errno> присваивается B<ENOSPC>." + +#. type: Plain text +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, fuzzy +#| msgid "" +#| "I<log_level> verbosity level of the verifier. A value of zero means that " +#| "the verifier will not provide a log; in this case, I<log_buf> must be a " +#| "NULL pointer, and I<log_size> must be zero." +msgid "" +"I<log_level> verbosity level of the verifier. A value of zero means that " +"the verifier will not provide a log; in this case, I<log_buf> must be a null " +"pointer, and I<log_size> must be zero." +msgstr "" +"Поле I<log_level> — степень подробности отчёта механизма проверки. Значение " +"ноль означает, что механизм проверки не будет вести журнал; в этом случае " +"значение I<log_buf> должно быть равно указателю NULL, а I<log_size> равно " +"нулю." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Applying B<close>(2) to the file descriptor returned by B<BPF_PROG_LOAD> " +"will unload the eBPF program (but see NOTES)." +msgstr "" +"При применении B<close>(2) к файловому дескриптору, полученному от " +"B<BPF_PROG_LOAD>, происходит выгрузка программы eBPF (но смотрите ЗАМЕЧАНИЯ)." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Maps are accessible from eBPF programs and are used to exchange data between " +"eBPF programs and between eBPF programs and user-space programs. For " +"example, eBPF programs can process various events (like kprobe, packets) and " +"store their data into a map, and user-space programs can then fetch data " +"from the map. Conversely, user-space programs can use a map as a " +"configuration mechanism, populating the map with values checked by the eBPF " +"program, which then modifies its behavior on the fly according to those " +"values." +msgstr "" +"Карты доступны из программ eBPF и используются для обмена данными между " +"программами eBPF, а также между программами eBPF и приложениями " +"пользовательского пространства. Например, программы eBPF могут обрабатывать " +"различные события (kprobe, пакеты) и сохранять свои данные в карте, а затем " +"программы пользовательского пространства могут выбирать данные из карты. И " +"наоборот, программы пользовательского пространства могут использовать карту " +"в качестве механизма настройки, заполняя карту значениями, читаемыми " +"программой eBPF, которая затем, согласно этим значениям, изменяет своё " +"поведение на лету." + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "eBPF program types" +msgstr "Типы программ eBPF" + +#. FIXME +#. Somewhere in this page we need a general introduction to the +#. bpf_context. For example, how does a BPF program access the +#. context? +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, fuzzy +#| msgid "" +#| "The eBPF program type (I<prog_type>) determines the subset of kernel " +#| "helper functions that the program may call. The program type also " +#| "determines the program input (context)\\(emthe format of I<struct " +#| "bpf_context> (which is the data blob passed into the eBPF program as the " +#| "first argument)." +msgid "" +"The eBPF program type (I<prog_type>) determines the subset of kernel helper " +"functions that the program may call. The program type also determines the " +"program input (context)\\[em]the format of I<struct bpf_context> (which is " +"the data blob passed into the eBPF program as the first argument)." +msgstr "" +"Типом программы eBPF (I<prog_type>) определяется поднабор вспомогательных " +"функций ядра, который программа может вызывать. Тип программы также " +"определяет входящие данные программы (контекст) — в виде формата I<struct " +"bpf_context> (который представляет собой двоичный объект данных, " +"передаваемый в программу eBPF первым параметром)." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"For example, a tracing program does not have the exact same subset of helper " +"functions as a socket filter program (though they may have some helpers in " +"common). Similarly, the input (context) for a tracing program is a set of " +"register values, while for a socket filter it is a network packet." +msgstr "" +"Например, программа трассировки не имеет доступа к тому же поднабору " +"вспомогательных функций, как у программы фильтрации сокетов (хотя они могут " +"обращаться к некоторым одинаковым функциям). Также, входные данные " +"(контекст) программы трассировки — это набор значений регистров, а у фильтра " +"сокетов — сетевой пакет." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The set of functions available to eBPF programs of a given type may increase " +"in the future." +msgstr "" +"Набор функций, доступных программам eBPF определённого типа, может " +"увеличиться в будущем." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The following program types are supported:" +msgstr "Поддерживаются следующие типы программ:" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_PROG_TYPE_SOCKET_FILTER> (since Linux 3.19)" +msgstr "B<BPF_PROG_TYPE_SOCKET_FILTER> (начиная с Linux 3.19)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Currently, the set of functions for B<BPF_PROG_TYPE_SOCKET_FILTER> is:" +msgstr "" +"В настоящее время, набор функций для B<BPF_PROG_TYPE_SOCKET_FILTER> такой:" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "" +"bpf_map_lookup_elem(map_fd, void *key)\n" +" /* look up key in a map_fd */\n" +"bpf_map_update_elem(map_fd, void *key, void *value)\n" +" /* update key/value */\n" +"bpf_map_delete_elem(map_fd, void *key)\n" +" /* delete key in a map_fd */\n" +msgstr "" +"bpf_map_lookup_elem(map_fd, void *key)\n" +" /* поиск ключа в map_fd */\n" +"bpf_map_update_elem(map_fd, void *key, void *value)\n" +" /* обновление ключа/значения */\n" +"bpf_map_delete_elem(map_fd, void *key)\n" +" /* удаление ключа из map_fd */\n" + +#. FIXME: We need some text here to explain how the program +#. accesses __sk_buff. +#. See 'struct __sk_buff' and commit 9bac3d6d548e5 +#. Alexei commented: +#. Actually now in case of SOCKET_FILTER, SCHED_CLS, SCHED_ACT +#. the program can now access skb fields. +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The I<bpf_context> argument is a pointer to a I<struct __sk_buff>." +msgstr "" +"Аргумент I<bpf_context> представляет собой указатель на I<struct __sk_buff>." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_PROG_TYPE_KPROBE> (since Linux 4.1)" +msgstr "B<BPF_PROG_TYPE_KPROBE> (начиная с Linux 4.1)" + +#. commit 94caee8c312d96522bcdae88791aaa9ebcd5f22c +#. commit a8cb5f556b567974d75ea29c15181c445c541b1f +#. FIXME Document this program type +#. Describe allowed helper functions for this program type +#. Describe bpf_context for this program type +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "[To be documented]" +msgstr "[Будет описано]" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_PROG_TYPE_SCHED_CLS> (since Linux 4.1)" +msgstr "B<BPF_PROG_TYPE_SCHED_CLS> (начиная с Linux 4.1)" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<BPF_PROG_TYPE_SCHED_ACT> (since Linux 4.1)" +msgstr "B<BPF_PROG_TYPE_SCHED_ACT> (начиная с Linux 4.1)" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Events" +msgstr "События" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Once a program is loaded, it can be attached to an event. Various kernel " +"subsystems have different ways to do so." +msgstr "" +"После того как программа загружена, к ней можно присоединить событие. " +"Различные подсистемы ядра делают это по-разному." + +#. commit 89aa075832b0da4402acebd698d0411dcc82d03e +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Since Linux 3.19, the following call will attach the program I<prog_fd> to " +"the socket I<sockfd>, which was created by an earlier call to B<socket>(2):" +msgstr "" +"Начиная с Linux 3.19, следующий вызов присоединяет программу I<prog_fd> к " +"сокету I<sockfd>, который был создан вызовом B<socket>(2) ранее:" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "" +"setsockopt(sockfd, SOL_SOCKET, SO_ATTACH_BPF,\n" +" &prog_fd, sizeof(prog_fd));\n" +msgstr "" +"setsockopt(sockfd, SOL_SOCKET, SO_ATTACH_BPF,\n" +" &prog_fd, sizeof(prog_fd));\n" + +#. commit 2541517c32be2531e0da59dfd7efc1ce844644f5 +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Since Linux 4.1, the following call may be used to attach the eBPF program " +"referred to by the file descriptor I<prog_fd> to a perf event file " +"descriptor, I<event_fd>, that was created by a previous call to " +"B<perf_event_open>(2):" +msgstr "" +"Начиная с Linux 4.1, следующий вызов можно использовать для присоединения " +"программы eBPF, на которую ссылается файловый дескриптор I<prog_fd>, к " +"файловому дескриптору событий perf I<event_fd>, созданному вызовом " +"B<perf_event_open>(2) ранее:" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "ioctl(event_fd, PERF_EVENT_IOC_SET_BPF, prog_fd);\n" +msgstr "ioctl(event_fd, PERF_EVENT_IOC_SET_BPF, prog_fd);\n" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "RETURN VALUE" +msgstr "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "For a successful call, the return value depends on the operation:" +msgstr "" +"При успешном выполнении возвращаемое значение зависит от используемой " +"команды:" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The new file descriptor associated with the eBPF map." +msgstr "Новый файловый дескриптор, связанный с картой eBPF." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The new file descriptor associated with the eBPF program." +msgstr "Новый файловый дескриптор, связанный с программой eBPF." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "All other commands" +msgstr "Все остальные команды" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Zero." +msgstr "Ноль." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "On error, -1 is returned, and I<errno> is set to indicate the error." +msgstr "" +"В случае ошибки возвращается -1, а I<errno> устанавливается в значение " +"ошибки." + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "ERRORS" +msgstr "ОШИБКИ" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<E2BIG>" +msgstr "B<E2BIG>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The eBPF program is too large or a map reached the I<max_entries> limit " +"(maximum number of elements)." +msgstr "" +"Программа eBPF слишком большая или достигнуто ограничение I<max_entries> " +"(максимальное количество элементов) в карте." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<EACCES>" +msgstr "B<EACCES>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"For B<BPF_PROG_LOAD>, even though all program instructions are valid, the " +"program has been rejected because it was deemed unsafe. This may be because " +"it may have accessed a disallowed memory region or an uninitialized stack/" +"register or because the function constraints don't match the actual types or " +"because there was a misaligned memory access. In this case, it is " +"recommended to call B<bpf>() again with I<log_level = 1> and examine " +"I<log_buf> for the specific reason provided by the verifier." +msgstr "" +"Для B<BPF_PROG_LOAD>: хотя все инструкции программы корректны, программа " +"считается ошибочной, так как признана небезопасной. Это может возникать из-" +"за доступа к запрещённой области или неинициализированного стека/регистра " +"или функциональные ограничения не совпадают с типами или выполняется " +"невыровненный доступ к памяти. В этом случае рекомендуется вызвать B<bpf>() " +"ещё раз с I<log_level = 1> и посмотреть I<log_buf> на предмет причины, " +"указанной механизмом проверки." + +#. type: TP +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, no-wrap +msgid "B<EAGAIN>" +msgstr "B<EAGAIN>" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +msgid "" +"For B<BPF_PROG_LOAD>, indicates that needed resources are blocked. This " +"happens when the verifier detects pending signals while it is checking the " +"validity of the bpf program. In this case, just call B<bpf>() again with " +"the same parameters." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<EBADF>" +msgstr "B<EBADF>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "I<fd> is not an open file descriptor." +msgstr "I<fd> не является открытым файловым дескриптором." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<EFAULT>" +msgstr "B<EFAULT>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"One of the pointers (I<key> or I<value> or I<log_buf> or I<insns>) is " +"outside the accessible address space." +msgstr "" +"Значение одного из указателей (I<key>, I<value>, I<log_buf> или I<insns>) " +"находится вне доступного адресного пространства." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<EINVAL>" +msgstr "B<EINVAL>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The value specified in I<cmd> is not recognized by this kernel." +msgstr "Значение I<cmd> не распознано ядром." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "For B<BPF_MAP_CREATE>, either I<map_type> or attributes are invalid." +msgstr "" +"Для B<BPF_MAP_CREATE>: некорректное значение атрибутов или I<map_type>." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"For B<BPF_MAP_*_ELEM> commands, some of the fields of I<union bpf_attr> that " +"are not used by this command are not set to zero." +msgstr "" +"Для команд B<BPF_MAP_*_ELEM>: некоторые поля I<union bpf_attr>, не " +"используемые этой командой, не обнулены." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"For B<BPF_PROG_LOAD>, indicates an attempt to load an invalid program. eBPF " +"programs can be deemed invalid due to unrecognized instructions, the use of " +"reserved fields, jumps out of range, infinite loops or calls of unknown " +"functions." +msgstr "" +"Для B<BPF_PROG_LOAD>: попытка загрузить некорректную программу. Программы " +"eBPF могут быть признаны некорректными из-за нераспознанных инструкций, " +"использования зарезервированных полей, переходов за пределы диапазона, " +"бесконечных циклов или вызовов неизвестных функций." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<ENOENT>" +msgstr "B<ENOENT>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"For B<BPF_MAP_LOOKUP_ELEM> or B<BPF_MAP_DELETE_ELEM>, indicates that the " +"element with the given I<key> was not found." +msgstr "" +"Для B<BPF_MAP_LOOKUP_ELEM> и B<BPF_MAP_DELETE_ELEM>: элемент с заданным " +"I<key> не найден." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<ENOMEM>" +msgstr "B<ENOMEM>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Cannot allocate sufficient memory." +msgstr "Невозможно выделить достаточно памяти." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<EPERM>" +msgstr "B<EPERM>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The call was made without sufficient privilege (without the B<CAP_SYS_ADMIN> " +"capability)." +msgstr "Вызов запущен без необходимых прав (без мандата B<CAP_SYS_ADMIN>)." + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "STANDARDS" +msgstr "СТАНДАРТЫ" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +msgid "Linux." +msgstr "Linux." + +#. type: SH +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "HISTORY" +msgstr "ИСТОРИЯ" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +#, fuzzy +#| msgid "Linux" +msgid "Linux 3.18." +msgstr "Linux" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "NOTES" +msgstr "ЗАМЕЧАНИЯ" + +#. commit 1be7f75d1668d6296b80bf35dcf6762393530afc +#. [Linux 5.6] mtk: The list of available functions is, I think, governed +#. by the check in net/core/filter.c::bpf_base_func_proto(). +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Prior to Linux 4.4, all B<bpf>() commands require the caller to have the " +"B<CAP_SYS_ADMIN> capability. From Linux 4.4 onwards, an unprivileged user " +"may create limited programs of type B<BPF_PROG_TYPE_SOCKET_FILTER> and " +"associated maps. However they may not store kernel pointers within the maps " +"and are presently limited to the following helper functions:" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "get_random" +msgstr "get_random" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "get_smp_processor_id" +msgstr "get_smp_processor_id" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "tail_call" +msgstr "tail_call" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "ktime_get_ns" +msgstr "ktime_get_ns" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Unprivileged access may be blocked by writing the value 1 to the file I</" +"proc/sys/kernel/unprivileged_bpf_disabled>." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"eBPF objects (maps and programs) can be shared between processes. For " +"example, after B<fork>(2), the child inherits file descriptors referring to " +"the same eBPF objects. In addition, file descriptors referring to eBPF " +"objects can be transferred over UNIX domain sockets. File descriptors " +"referring to eBPF objects can be duplicated in the usual way, using " +"B<dup>(2) and similar calls. An eBPF object is deallocated only after all " +"file descriptors referring to the object have been closed." +msgstr "" +"Объекты eBPF (карты и программы) могут использоваться несколькими процессами " +"одновременно. Например, после B<fork>(2) потомок наследует файловые " +"дескрипторы, ссылающиеся на одинаковые объекты eBPF. Также, файловые " +"дескрипторы, ссылающиеся на объекты eBPF, можно передавать через доменные " +"сокеты UNIX. Файловые дескрипторы, ссылающиеся на объекты eBPF, можно " +"дублировать обычным образом с помощью B<dup>(2) и подобных вызовов. Объекты " +"eBPF уничтожаются только после закрытия всех файловых дескрипторов, " +"ссылающихся на объект." + +#. There are also examples for the tc classifier, in the iproute2 +#. project, in examples/bpf +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"eBPF programs can be written in a restricted C that is compiled (using the " +"B<clang> compiler) into eBPF bytecode. Various features are omitted from " +"this restricted C, such as loops, global variables, variadic functions, " +"floating-point numbers, and passing structures as function arguments. Some " +"examples can be found in the I<samples/bpf/*_kern.c> files in the kernel " +"source tree." +msgstr "" +"Программы eBPF можно писать на специализированной версии языка C, которая " +"компилируется (с помощью компилятора B<clang>) в байт-код eBPF. В этой " +"версии C отсутствуют различные свойства, например, глобальные переменные, " +"функции с переменным числом аргументов, числа с плавающей запятой и нельзя " +"передавать структуры в качестве аргументов. Примеры можно найти в файлах " +"I<samples/bpf/*_kern.c> из дерева исходного кода ядра." + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, fuzzy +#| msgid "" +#| "The kernel contains a just-in-time (JIT) compiler that translates eBPF " +#| "bytecode into native machine code for better performance. In kernels " +#| "before Linux 4.15, the JIT compiler is disabled by default, but its " +#| "operation can be controlled by writing one of the following integer " +#| "strings to the file I</proc/sys/net/core/bpf_jit_enable>:" +msgid "" +"The kernel contains a just-in-time (JIT) compiler that translates eBPF " +"bytecode into native machine code for better performance. Before Linux " +"4.15, the JIT compiler is disabled by default, but its operation can be " +"controlled by writing one of the following integer strings to the file I</" +"proc/sys/net/core/bpf_jit_enable>:" +msgstr "" +"В ядре имеется оперативный компилятор (JIT), который с целью " +"производительности транслирует байт-код eBPF в машинный код. В ядрах Linux " +"до версии 4.15 по умолчанию компилятор JIT отключён, но эта возможность " +"контролируется записью следующих строк целых чисел в файл I</proc/sys/net/" +"core/bpf_jit_enable>:" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<0>" +msgstr "B<0>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Disable JIT compilation (default)." +msgstr "Выключить компиляцию JIT (по умолчанию)." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<1>" +msgstr "B<1>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Normal compilation." +msgstr "Обычная компиляция." + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<2>" +msgstr "B<2>" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Debugging mode. The generated opcodes are dumped in hexadecimal into the " +"kernel log. These opcodes can then be disassembled using the program " +"I<tools/net/bpf_jit_disasm.c> provided in the kernel source tree." +msgstr "" +"Режим отладки. Генерируемый код операций сбрасывается в виде " +"шестнадцатеричных чисел в журнал ядра. Затем его можно дизассемблировать с " +"помощью программы I<tools/net/bpf_jit_disasm.c>, которая находится в дереве " +"исходного кода ядра." + +#. commit 290af86629b25ffd1ed6232c4e9107da031705cb +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Since Linux 4.15, the kernel may configured with the " +"B<CONFIG_BPF_JIT_ALWAYS_ON> option. In this case, the JIT compiler is " +"always enabled, and the I<bpf_jit_enable> is initialized to 1 and is " +"immutable. (This kernel configuration option was provided as a mitigation " +"for one of the Spectre attacks against the BPF interpreter.)" +msgstr "" +"Начиная с Linux 4.15, ядро можно настраивать через параметр " +"B<CONFIG_BPF_JIT_ALWAYS_ON>. В этом случае компилятор JIT всегда включён и " +"I<bpf_jit_enable> устанавливается в 1 и это нельзя изменить (данный параметр " +"ядра был добавлен для предотвращения одной из атак «Спектр», направленной на " +"интерпретатор BPF)." + +#. Last reviewed in Linux 4.18-rc by grepping for BPF_ALU64 in arch/ +#. and by checking the documentation for bpf_jit_enable in +#. Documentation/sysctl/net.txt +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The JIT compiler for eBPF is currently available for the following " +"architectures:" +msgstr "" +"В настоящее время компилятор JIT для eBPF доступен на следующих архитектурах:" + +#. commit 0a14842f5a3c0e88a1e59fac5c3025db39721f74 +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "x86-64 (since Linux 3.18; cBPF since Linux 3.0);" +msgstr "x86-64 (начиная с Linux 3.18; cBPF начиная с Linux 3.0);" + +#. commit ddecdfcea0ae891f782ae853771c867ab51024c2 +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "ARM32 (since Linux 3.18; cBPF since Linux 3.4);" +msgstr "ARM32 (начиная с Linux 3.18; cBPF начиная с Linux 3.4);" + +#. commit 2809a2087cc44b55e4377d7b9be3f7f5d2569091 +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "SPARC 32 (since Linux 3.18; cBPF since Linux 3.5);" +msgstr "SPARC 32 (начиная с Linux 3.18; cBPF начиная с Linux 3.5);" + +#. commit e54bcde3d69d40023ae77727213d14f920eb264a +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "ARM-64 (since Linux 3.18);" +msgstr "ARM-64 (начиная с Linux 3.18);" + +#. commit c10302efe569bfd646b4c22df29577a4595b4580 +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "s390 (since Linux 4.1; cBPF since Linux 3.7);" +msgstr "s390 (начиная с Linux 4.1; cBPF начиная с Linux 3.7);" + +#. commit 0ca87f05ba8bdc6791c14878464efc901ad71e99 +#. commit 156d0e290e969caba25f1851c52417c14d141b24 +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "PowerPC 64 (since Linux 4.8; cBPF since Linux 3.1);" +msgstr "PowerPC 64 (начиная с Linux 4.8; cBPF начиная с Linux 3.1);" + +#. commit 7a12b5031c6b947cc13918237ae652b536243b76 +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "SPARC 64 (since Linux 4.12);" +msgstr "SPARC 64 (начиная с Linux 4.12);" + +#. commit 03f5781be2c7b7e728d724ac70ba10799cc710d7 +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "x86-32 (since Linux 4.18);" +msgstr "x86-32 (начиная с Linux 4.18);" + +#. commit c6610de353da5ca6eee5b8960e838a87a90ead0c +#. commit f381bf6d82f032b7410185b35d000ea370ac706b +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "MIPS 64 (since Linux 4.18; cBPF since Linux 3.16);" +msgstr "MIPS 64 (начиная с Linux 4.18; cBPF начиная с Linux 3.16);" + +#. commit 2353ecc6f91fd15b893fa01bf85a1c7a823ee4f2 +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "riscv (since Linux 5.1)." +msgstr "riscv (начиная с Linux 5.1)." + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "EXAMPLES" +msgstr "ПРИМЕРЫ" + +#. == atomic64_add +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, fuzzy, no-wrap +#| msgid "" +#| " struct bpf_insn prog[] = {\n" +#| " BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), /* r6 = r1 */\n" +#| " BPF_LD_ABS(BPF_B, ETH_HLEN + offsetof(struct iphdr, protocol)),\n" +#| " /* r0 = ip-E<gt>proto */\n" +#| " BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4),\n" +#| " /* *(u32 *)(fp - 4) = r0 */\n" +#| " BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), /* r2 = fp */\n" +#| " BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), /* r2 = r2 - 4 */\n" +#| " BPF_LD_MAP_FD(BPF_REG_1, map_fd), /* r1 = map_fd */\n" +#| " BPF_CALL_FUNC(BPF_FUNC_map_lookup_elem),\n" +#| " /* r0 = map_lookup(r1, r2) */\n" +#| " BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),\n" +#| " /* if (r0 == 0) goto pc+2 */\n" +#| " BPF_MOV64_IMM(BPF_REG_1, 1), /* r1 = 1 */\n" +#| " BPF_XADD(BPF_DW, BPF_REG_0, BPF_REG_1, 0, 0),\n" +#| " /* lock *(u64 *) r0 += r1 */\n" +#| " BPF_MOV64_IMM(BPF_REG_0, 0), /* r0 = 0 */\n" +#| " BPF_EXIT_INSN(), /* return r0 */\n" +#| " };\n" +msgid "" +"/* bpf+sockets example:\n" +" * 1. create array map of 256 elements\n" +" * 2. load program that counts number of packets received\n" +" * r0 = skb-E<gt>data[ETH_HLEN + offsetof(struct iphdr, protocol)]\n" +" * map[r0]++\n" +" * 3. attach prog_fd to raw socket via setsockopt()\n" +" * 4. print number of received TCP/UDP packets every second\n" +" */\n" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" int sock, map_fd, prog_fd, key;\n" +" long long value = 0, tcp_cnt, udp_cnt;\n" +"\\&\n" +" map_fd = bpf_create_map(BPF_MAP_TYPE_ARRAY, sizeof(key),\n" +" sizeof(value), 256);\n" +" if (map_fd E<lt> 0) {\n" +" printf(\"failed to create map \\[aq]%s\\[aq]\\en\", strerror(errno));\n" +" /* likely not run as root */\n" +" return 1;\n" +" }\n" +"\\&\n" +" struct bpf_insn prog[] = {\n" +" BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), /* r6 = r1 */\n" +" BPF_LD_ABS(BPF_B, ETH_HLEN + offsetof(struct iphdr, protocol)),\n" +" /* r0 = ip-E<gt>proto */\n" +" BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4),\n" +" /* *(u32 *)(fp - 4) = r0 */\n" +" BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), /* r2 = fp */\n" +" BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), /* r2 = r2 - 4 */\n" +" BPF_LD_MAP_FD(BPF_REG_1, map_fd), /* r1 = map_fd */\n" +" BPF_CALL_FUNC(BPF_FUNC_map_lookup_elem),\n" +" /* r0 = map_lookup(r1, r2) */\n" +" BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),\n" +" /* if (r0 == 0) goto pc+2 */\n" +" BPF_MOV64_IMM(BPF_REG_1, 1), /* r1 = 1 */\n" +" BPF_XADD(BPF_DW, BPF_REG_0, BPF_REG_1, 0, 0),\n" +" /* lock *(u64 *) r0 += r1 */\n" +" BPF_MOV64_IMM(BPF_REG_0, 0), /* r0 = 0 */\n" +" BPF_EXIT_INSN(), /* return r0 */\n" +" };\n" +"\\&\n" +" prog_fd = bpf_prog_load(BPF_PROG_TYPE_SOCKET_FILTER, prog,\n" +" sizeof(prog) / sizeof(prog[0]), \"GPL\");\n" +"\\&\n" +" sock = open_raw_sock(\"lo\");\n" +"\\&\n" +" assert(setsockopt(sock, SOL_SOCKET, SO_ATTACH_BPF, &prog_fd,\n" +" sizeof(prog_fd)) == 0);\n" +"\\&\n" +" for (;;) {\n" +" key = IPPROTO_TCP;\n" +" assert(bpf_lookup_elem(map_fd, &key, &tcp_cnt) == 0);\n" +" key = IPPROTO_UDP;\n" +" assert(bpf_lookup_elem(map_fd, &key, &udp_cnt) == 0);\n" +" printf(\"TCP %lld UDP %lld packets\\en\", tcp_cnt, udp_cnt);\n" +" sleep(1);\n" +" }\n" +"\\&\n" +" return 0;\n" +"}\n" +msgstr "" +" struct bpf_insn prog[] = {\n" +" BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), /* r6 = r1 */\n" +" BPF_LD_ABS(BPF_B, ETH_HLEN + offsetof(struct iphdr, protocol)),\n" +" /* r0 = ip-E<gt>proto */\n" +" BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4),\n" +" /* *(u32 *)(fp - 4) = r0 */\n" +" BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), /* r2 = fp */\n" +" BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), /* r2 = r2 - 4 */\n" +" BPF_LD_MAP_FD(BPF_REG_1, map_fd), /* r1 = map_fd */\n" +" BPF_CALL_FUNC(BPF_FUNC_map_lookup_elem),\n" +" /* r0 = map_lookup(r1, r2) */\n" +" BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),\n" +" /* if (r0 == 0) goto pc+2 */\n" +" BPF_MOV64_IMM(BPF_REG_1, 1), /* r1 = 1 */\n" +" BPF_XADD(BPF_DW, BPF_REG_0, BPF_REG_1, 0, 0),\n" +" /* lock *(u64 *) r0 += r1 */\n" +" BPF_MOV64_IMM(BPF_REG_0, 0), /* r0 = 0 */\n" +" BPF_EXIT_INSN(), /* вернуть r0 */\n" +" };\n" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Some complete working code can be found in the I<samples/bpf> directory in " +"the kernel source tree." +msgstr "" +"Другой рабочий код можно найти в каталоге I<samples/bpf> дерева исходного " +"кода ядра." + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "SEE ALSO" +msgstr "СМ. ТАКЖЕ" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "B<seccomp>(2), B<bpf-helpers>(7), B<socket>(7), B<tc>(8), B<tc-bpf>(8)" +msgstr "B<seccomp>(2), B<bpf-helpers>(7), B<socket>(7), B<tc>(8), B<tc-bpf>(8)" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Both classic and extended BPF are explained in the kernel source file " +"I<Documentation/networking/filter.txt>." +msgstr "" +"Классический и расширенный BPF описаны в файле исходного кода ядра " +"I<Documentation/networking/filter.txt>." + +#. type: TH +#: debian-bookworm +#, no-wrap +msgid "2023-02-05" +msgstr "5 февраля 2023 г." + +#. type: TH +#: debian-bookworm +#, no-wrap +msgid "Linux man-pages 6.03" +msgstr "Linux man-pages 6.03" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"union bpf_attr {\n" +" struct { /* Used by BPF_MAP_CREATE */\n" +" __u32 map_type;\n" +" __u32 key_size; /* size of key in bytes */\n" +" __u32 value_size; /* size of value in bytes */\n" +" __u32 max_entries; /* maximum number of entries\n" +" in a map */\n" +" };\n" +msgstr "" +"union bpf_attr {\n" +" struct { /* используется в BPF_MAP_CREATE */\n" +" __u32 map_type;\n" +" __u32 key_size; /* размер ключа в байтах */\n" +" __u32 value_size; /* размер значения в байтах */\n" +" __u32 max_entries; /* максимальное количество\n" +" элементов в карте */\n" +" };\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" struct { /* Used by BPF_MAP_*_ELEM and BPF_MAP_GET_NEXT_KEY\n" +" commands */\n" +" __u32 map_fd;\n" +" __aligned_u64 key;\n" +" union {\n" +" __aligned_u64 value;\n" +" __aligned_u64 next_key;\n" +" };\n" +" __u64 flags;\n" +" };\n" +msgstr "" +" struct { /* используется в командах BPF_MAP_*_ELEM\n" +" и BPF_MAP_GET_NEXT_KEY */\n" +" __u32 map_fd;\n" +" __aligned_u64 key;\n" +" union {\n" +" __aligned_u64 value;\n" +" __aligned_u64 next_key;\n" +" };\n" +" __u64 flags;\n" +" };\n" + +#. commit 2541517c32be2531e0da59dfd7efc1ce844644f5 +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "" +#| " struct { /* Used by BPF_PROG_LOAD */\n" +#| " __u32 prog_type;\n" +#| " __u32 insn_cnt;\n" +#| " __aligned_u64 insns; /* 'const struct bpf_insn *' */\n" +#| " __aligned_u64 license; /* 'const char *' */\n" +#| " __u32 log_level; /* verbosity level of verifier */\n" +#| " __u32 log_size; /* size of user buffer */\n" +#| " __aligned_u64 log_buf; /* user supplied 'char *'\n" +#| " buffer */\n" +#| " __u32 kern_version;\n" +#| " /* checked when prog_type=kprobe\n" +#| " (since Linux 4.1) */\n" +#| " };\n" +#| "} __attribute__((aligned(8)));\n" +msgid "" +" struct { /* Used by BPF_PROG_LOAD */\n" +" __u32 prog_type;\n" +" __u32 insn_cnt;\n" +" __aligned_u64 insns; /* \\[aq]const struct bpf_insn *\\[aq] */\n" +" __aligned_u64 license; /* \\[aq]const char *\\[aq] */\n" +" __u32 log_level; /* verbosity level of verifier */\n" +" __u32 log_size; /* size of user buffer */\n" +" __aligned_u64 log_buf; /* user supplied \\[aq]char *\\[aq]\n" +" buffer */\n" +" __u32 kern_version;\n" +" /* checked when prog_type=kprobe\n" +" (since Linux 4.1) */\n" +" };\n" +"} __attribute__((aligned(8)));\n" +msgstr "" +" struct { /* используется в BPF_PROG_LOAD */\n" +" __u32 prog_type;\n" +" __u32 insn_cnt;\n" +" __aligned_u64 insns; /* 'const struct bpf_insn *' */\n" +" __aligned_u64 license; /* 'const char *' */\n" +" __u32 log_level; /* уровень детализации\n" +" при проверке */\n" +" __u32 log_size; /* размер пользовательского\n" +" буфера */\n" +" __aligned_u64 log_buf; /* буфер 'char *'\n" +" выделяемый пользователем */\n" +" __u32 kern_version;\n" +" /* проверяется, если\n" +" prog_type=kprobe\n" +" (начиная с Linux 4.1) */\n" +" };\n" +"} __attribute__((aligned(8)));\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"int\n" +"bpf_create_map(enum bpf_map_type map_type,\n" +" unsigned int key_size,\n" +" unsigned int value_size,\n" +" unsigned int max_entries)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_type = map_type,\n" +" .key_size = key_size,\n" +" .value_size = value_size,\n" +" .max_entries = max_entries\n" +" };\n" +msgstr "" +"int\n" +"bpf_create_map(enum bpf_map_type map_type,\n" +" unsigned int key_size,\n" +" unsigned int value_size,\n" +" unsigned int max_entries)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_type = map_type,\n" +" .key_size = key_size,\n" +" .value_size = value_size,\n" +" .max_entries = max_entries\n" +" };\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" return bpf(BPF_MAP_CREATE, &attr, sizeof(attr));\n" +"}\n" +msgstr "" +" return bpf(BPF_MAP_CREATE, &attr, sizeof(attr));\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"int\n" +"bpf_lookup_elem(int fd, const void *key, void *value)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" .value = ptr_to_u64(value),\n" +" };\n" +msgstr "" +"int\n" +"bpf_lookup_elem(int fd, const void *key, void *value)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" .value = ptr_to_u64(value),\n" +" };\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" return bpf(BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr));\n" +"}\n" +msgstr "" +" return bpf(BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr));\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"int\n" +"bpf_update_elem(int fd, const void *key, const void *value,\n" +" uint64_t flags)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" .value = ptr_to_u64(value),\n" +" .flags = flags,\n" +" };\n" +msgstr "" +"int\n" +"bpf_update_elem(int fd, const void *key, const void *value,\n" +" uint64_t flags)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" .value = ptr_to_u64(value),\n" +" .flags = flags,\n" +" };\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" return bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr));\n" +"}\n" +msgstr "" +" return bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr));\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"int\n" +"bpf_delete_elem(int fd, const void *key)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" };\n" +msgstr "" +"int\n" +"bpf_delete_elem(int fd, const void *key)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" };\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" return bpf(BPF_MAP_DELETE_ELEM, &attr, sizeof(attr));\n" +"}\n" +msgstr "" +" return bpf(BPF_MAP_DELETE_ELEM, &attr, sizeof(attr));\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"int\n" +"bpf_get_next_key(int fd, const void *key, void *next_key)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" .next_key = ptr_to_u64(next_key),\n" +" };\n" +msgstr "" +"int\n" +"bpf_get_next_key(int fd, const void *key, void *next_key)\n" +"{\n" +" union bpf_attr attr = {\n" +" .map_fd = fd,\n" +" .key = ptr_to_u64(key),\n" +" .next_key = ptr_to_u64(next_key),\n" +" };\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" return bpf(BPF_MAP_GET_NEXT_KEY, &attr, sizeof(attr));\n" +"}\n" +msgstr "" +" return bpf(BPF_MAP_GET_NEXT_KEY, &attr, sizeof(attr));\n" +"}\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "char bpf_log_buf[LOG_BUF_SIZE];\n" +msgstr "char bpf_log_buf[LOG_BUF_SIZE];\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"int\n" +"bpf_prog_load(enum bpf_prog_type type,\n" +" const struct bpf_insn *insns, int insn_cnt,\n" +" const char *license)\n" +"{\n" +" union bpf_attr attr = {\n" +" .prog_type = type,\n" +" .insns = ptr_to_u64(insns),\n" +" .insn_cnt = insn_cnt,\n" +" .license = ptr_to_u64(license),\n" +" .log_buf = ptr_to_u64(bpf_log_buf),\n" +" .log_size = LOG_BUF_SIZE,\n" +" .log_level = 1,\n" +" };\n" +msgstr "" +"int\n" +"bpf_prog_load(enum bpf_prog_type type,\n" +" const struct bpf_insn *insns, int insn_cnt,\n" +" const char *license)\n" +"{\n" +" union bpf_attr attr = {\n" +" .prog_type = type,\n" +" .insns = ptr_to_u64(insns),\n" +" .insn_cnt = insn_cnt,\n" +" .license = ptr_to_u64(license),\n" +" .log_buf = ptr_to_u64(bpf_log_buf),\n" +" .log_size = LOG_BUF_SIZE,\n" +" .log_level = 1,\n" +" };\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" return bpf(BPF_PROG_LOAD, &attr, sizeof(attr));\n" +"}\n" +msgstr "" +" return bpf(BPF_PROG_LOAD, &attr, sizeof(attr));\n" +"}\n" + +#. type: Plain text +#: debian-bookworm debian-unstable opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"I<log_level> verbosity level of the verifier. A value of zero means that " +"the verifier will not provide a log; in this case, I<log_buf> must be a NULL " +"pointer, and I<log_size> must be zero." +msgstr "" +"Поле I<log_level> — степень подробности отчёта механизма проверки. Значение " +"ноль означает, что механизм проверки не будет вести журнал; в этом случае " +"значение I<log_buf> должно быть равно указателю NULL, а I<log_size> равно " +"нулю." + +#. type: SH +#: debian-bookworm +#, no-wrap +msgid "VERSIONS" +msgstr "ВЕРСИИ" + +#. type: Plain text +#: debian-bookworm +msgid "The B<bpf>() system call first appeared in Linux 3.18." +msgstr "Системный вызов B<bpf>() впервые появился в Linux 3.18." + +#. type: Plain text +#: debian-bookworm +msgid "The B<bpf>() system call is Linux-specific." +msgstr "Системный вызов B<bpf>() есть только в Linux." + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"/* bpf+sockets example:\n" +" * 1. create array map of 256 elements\n" +" * 2. load program that counts number of packets received\n" +" * r0 = skb-E<gt>data[ETH_HLEN + offsetof(struct iphdr, protocol)]\n" +" * map[r0]++\n" +" * 3. attach prog_fd to raw socket via setsockopt()\n" +" * 4. print number of received TCP/UDP packets every second\n" +" */\n" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" int sock, map_fd, prog_fd, key;\n" +" long long value = 0, tcp_cnt, udp_cnt;\n" +msgstr "" +"/* пример bpf+sockets:\n" +" * 1. создать карту в виде массива из 256 элементов\n" +" * 2. загрузить программу, подсчитывающую количество принятых пакетов\n" +" * r0 = skb-E<gt>data[ETH_HLEN + offsetof(struct iphdr, protocol)]\n" +" * map[r0]++\n" +" * 3. присоединить prog_fd к неструктурированному сокету от setsockopt()\n" +" * 4. напечатать количество пакетов TCP/UDP, принимаемых каждую секунду\n" +" */\n" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" int sock, map_fd, prog_fd, key;\n" +" long long value = 0, tcp_cnt, udp_cnt;\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, fuzzy, no-wrap +#| msgid "" +#| " map_fd = bpf_create_map(BPF_MAP_TYPE_ARRAY, sizeof(key),\n" +#| " sizeof(value), 256);\n" +#| " if (map_fd E<lt> 0) {\n" +#| " printf(\"failed to create map \\(aq%s\\(aq\\en\", strerror(errno));\n" +#| " /* likely not run as root */\n" +#| " return 1;\n" +#| " }\n" +msgid "" +" map_fd = bpf_create_map(BPF_MAP_TYPE_ARRAY, sizeof(key),\n" +" sizeof(value), 256);\n" +" if (map_fd E<lt> 0) {\n" +" printf(\"failed to create map \\[aq]%s\\[aq]\\en\", strerror(errno));\n" +" /* likely not run as root */\n" +" return 1;\n" +" }\n" +msgstr "" +" map_fd = bpf_create_map(BPF_MAP_TYPE_ARRAY, sizeof(key),\n" +" sizeof(value), 256);\n" +" if (map_fd E<lt> 0) {\n" +" printf(\"ошибка при создании карты '%s'\\en\", strerror(errno));\n" +" /* вероятно, запущена без прав root */\n" +" return 1;\n" +" }\n" + +#. == atomic64_add +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" struct bpf_insn prog[] = {\n" +" BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), /* r6 = r1 */\n" +" BPF_LD_ABS(BPF_B, ETH_HLEN + offsetof(struct iphdr, protocol)),\n" +" /* r0 = ip-E<gt>proto */\n" +" BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4),\n" +" /* *(u32 *)(fp - 4) = r0 */\n" +" BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), /* r2 = fp */\n" +" BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), /* r2 = r2 - 4 */\n" +" BPF_LD_MAP_FD(BPF_REG_1, map_fd), /* r1 = map_fd */\n" +" BPF_CALL_FUNC(BPF_FUNC_map_lookup_elem),\n" +" /* r0 = map_lookup(r1, r2) */\n" +" BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),\n" +" /* if (r0 == 0) goto pc+2 */\n" +" BPF_MOV64_IMM(BPF_REG_1, 1), /* r1 = 1 */\n" +" BPF_XADD(BPF_DW, BPF_REG_0, BPF_REG_1, 0, 0),\n" +" /* lock *(u64 *) r0 += r1 */\n" +" BPF_MOV64_IMM(BPF_REG_0, 0), /* r0 = 0 */\n" +" BPF_EXIT_INSN(), /* return r0 */\n" +" };\n" +msgstr "" +" struct bpf_insn prog[] = {\n" +" BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), /* r6 = r1 */\n" +" BPF_LD_ABS(BPF_B, ETH_HLEN + offsetof(struct iphdr, protocol)),\n" +" /* r0 = ip-E<gt>proto */\n" +" BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4),\n" +" /* *(u32 *)(fp - 4) = r0 */\n" +" BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), /* r2 = fp */\n" +" BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), /* r2 = r2 - 4 */\n" +" BPF_LD_MAP_FD(BPF_REG_1, map_fd), /* r1 = map_fd */\n" +" BPF_CALL_FUNC(BPF_FUNC_map_lookup_elem),\n" +" /* r0 = map_lookup(r1, r2) */\n" +" BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),\n" +" /* if (r0 == 0) goto pc+2 */\n" +" BPF_MOV64_IMM(BPF_REG_1, 1), /* r1 = 1 */\n" +" BPF_XADD(BPF_DW, BPF_REG_0, BPF_REG_1, 0, 0),\n" +" /* lock *(u64 *) r0 += r1 */\n" +" BPF_MOV64_IMM(BPF_REG_0, 0), /* r0 = 0 */\n" +" BPF_EXIT_INSN(), /* вернуть r0 */\n" +" };\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" prog_fd = bpf_prog_load(BPF_PROG_TYPE_SOCKET_FILTER, prog,\n" +" sizeof(prog) / sizeof(prog[0]), \"GPL\");\n" +msgstr "" +" prog_fd = bpf_prog_load(BPF_PROG_TYPE_SOCKET_FILTER, prog,\n" +" sizeof(prog) / sizeof(prog[0]), \"GPL\");\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " sock = open_raw_sock(\"lo\");\n" +msgstr " sock = open_raw_sock(\"lo\");\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" assert(setsockopt(sock, SOL_SOCKET, SO_ATTACH_BPF, &prog_fd,\n" +" sizeof(prog_fd)) == 0);\n" +msgstr "" +" assert(setsockopt(sock, SOL_SOCKET, SO_ATTACH_BPF, &prog_fd,\n" +" sizeof(prog_fd)) == 0);\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" for (;;) {\n" +" key = IPPROTO_TCP;\n" +" assert(bpf_lookup_elem(map_fd, &key, &tcp_cnt) == 0);\n" +" key = IPPROTO_UDP;\n" +" assert(bpf_lookup_elem(map_fd, &key, &udp_cnt) == 0);\n" +" printf(\"TCP %lld UDP %lld packets\\en\", tcp_cnt, udp_cnt);\n" +" sleep(1);\n" +" }\n" +msgstr "" +"пакетов for (;;) {\n" +" key = IPPROTO_TCP;\n" +" assert(bpf_lookup_elem(map_fd, &key, &tcp_cnt) == 0);\n" +" key = IPPROTO_UDP;\n" +" assert(bpf_lookup_elem(map_fd, &key, &udp_cnt) == 0);\n" +" printf(\"TCP %lld UDP %lld пакетов\\en\", tcp_cnt, udp_cnt);\n" +" sleep(1);\n" +" }\n" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" return 0;\n" +"}\n" +msgstr "" +" return 0;\n" +"}\n" + +#. type: TH +#: debian-unstable opensuse-tumbleweed +#, no-wrap +msgid "2023-07-28" +msgstr "28 июля 2023 г." + +#. type: TH +#: debian-unstable opensuse-tumbleweed +#, no-wrap +msgid "Linux man-pages 6.05.01" +msgstr "Linux man-pages 6.05.01" + +#. type: TH +#: opensuse-leap-15-6 +#, no-wrap +msgid "2023-03-30" +msgstr "30 марта 2023 г." + +#. type: TH +#: opensuse-leap-15-6 +#, no-wrap +msgid "Linux man-pages 6.04" +msgstr "Linux man-pages 6.04" |