summaryrefslogtreecommitdiffstats
path: root/po/ru/man2/bpf.2.po
diff options
context:
space:
mode:
Diffstat (limited to 'po/ru/man2/bpf.2.po')
-rw-r--r--po/ru/man2/bpf.2.po3117
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"