# Russian translation of manpages # This file is distributed under the same license as the manpages-l10n package. # Copyright © of this file: # Artyom Kunyov , 2012. # Azamat Hackimov , 2012. # Dmitriy Ovchinnikov , 2012. # Dmitry Bolkhovskikh , 2017. # ITriskTI , 2012. # Yuri Kozlov , 2011-2019. # Иван Павлов , 2017. msgid "" msgstr "" "Project-Id-Version: manpages-l10n\n" "POT-Creation-Date: 2024-06-01 05:43+0200\n" "PO-Revision-Date: 2019-08-27 07:22+0000\n" "Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \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 debian-unstable opensuse-tumbleweed #, no-wrap msgid "2024-05-02" msgstr "2 мая 2024 г." #. type: TH #: archlinux debian-unstable #, fuzzy, no-wrap #| msgid "Linux man-pages 6.7" msgid "Linux man-pages 6.8" msgstr "Linux man-pages 6.7" #. 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 Elinux/bpf.hE>\n" msgstr "B<#include Elinux/bpf.hE>\n" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "BIB<, union bpf_attr *>IB<, unsigned int >IB<);>\n" msgstr "BIB<, union bpf_attr *>IB<, unsigned int >IB<);>\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() 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() выполняет набор операций, связанных с расширенными " "пакетными фильтрами Беркли (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 opcode extension " "provided by eBPF) and access shared data structures such as eBPF maps." msgstr "" "Набор eBPF расширяет cBPF в разных направлениях, включая способность вызова " "фиксированного набора вспомогательных функций ядра (через расширенный код " "операции B, предоставляемый 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(). If a map lookup " "fails, the current program continues its execution. See " "B below for further details." msgstr "" "Существует специальный карточный тип, называемый программным массивом " "(program array). В данном типе карты хранятся файловые дескрипторы, " "указывающие на другие программы eBPF. Когда выполняется поиск в карте " "программный поток в этом месте перенаправляется в начало другой программы " "eBPF и не возвращается в вызывающую программу. Уровень вложенности ограничен " "32, поэтому бесконечные циклы невозможны. Во время выполнения программные " "файловые дескрипторы, хранящиеся в карте, не могут быть изменены, поэтому " "функциональность программы можно изменить только на основе специальных " "требований. Все программы, на которые есть ссылки из карты программного " "массива, должны заранее загружаться в ядро с помощью B(). Если поиск по " "карте завершился с ошибкой, то текущая программа продолжает выполняться. " "Подробней смотрите далее в описании B." #. 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(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()." msgstr "" "Обычно, программы eBPF загружаются пользовательским процессом и выгружаются " "при его завершении. В некоторых случаях, например, B(8), программа " "продолжает работать внутри ядра даже после того, как процесс загрузивший " "программу, закончил работать. В этом случае ссылку на программу eBPF после " "того, как файловый дескриптор был закрыт программой из пользовательского " "пространства, содержит подсистема tc. То есть, будет ли специальная " "программа продолжать работать внутри ядра, зависит от того, будет ли она " "присоединена к указанной подсистеме ядра после загрузки через B()." #. 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(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(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 tracing E-- 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 tracing E-- 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 tracing E-- 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() system call is determined " #| "by the I argument. Each operation takes an accompanying argument, " #| "provided via I, which is a pointer to a union of type I " #| "(see below). The I argument is the size of the union pointed to by " #| "I." msgid "" "The operation to be performed by the B() system call is determined by " "the I argument. Each operation takes an accompanying argument, " "provided via I, which is a pointer to a union of type I (see " "below). The unused fields and padding must be zeroed out before the call. " "The I argument is the size of the union pointed to by I." msgstr "" "В аргументе I указывается операция, которая будет выполнена системным " "вызовом B(). Для каждой операции в I задаётся соответствующий " "аргумент, который является объединением типа I (смотрите далее). В " "аргументе I указывается размер объединения, на который ссылается " "I." #. 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 is one of the following:" msgstr "Значением I может быть одно из:" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. 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(2)) is automatically enabled for " "the new file descriptor." msgstr "" "Создать карту и вернуть файловый дескриптор, который указывает на эту карту. " "Для нового файлового дескриптора флаг close-on-exec (смотрите B(2)) " "устанавливается автоматически." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. 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" msgstr "B" #. 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" msgstr "B" #. 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" msgstr "B" #. 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" msgstr "B" #. 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(2)) " "is automatically enabled for the new file descriptor." msgstr "" "Проверить и загрузить программу eBPF; возвращается новый файловый " "дескриптор, связанный с программой. Для нового файлового дескриптора флаг " "close-on-exec (смотрите B(2)) устанавливается автоматически." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The I union consists of various anonymous structures that are used " "by different B() commands:" msgstr "" "Объединение I состоит из различных анонимных структур, которые " "используются в различных командах B():" #. 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() commands " "can be used to access the maps. The functions use the I argument to " "invoke different operations." msgstr "" "Следующие обёрточные функции показывают как для доступа к картам можно " "использовать различные команды B(). Для указания вызываемой операции " "служит параметр I." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B command creates a new map, returning a new file " "descriptor that refers to the map." msgstr "" "Команда B создаёт новую карту, возвращая новый файловый " "дескриптор, который указывает на карту." #. 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, and attributes as " "specified in I, I, and I. On success, " "this operation returns a file descriptor. On error, -1 is returned and " "I is set to B, B, or B." msgstr "" "Новая карта имеет тип, указанный в I, и атрибуты, в соответствии с " "I, I и I. При успешном выполнении этой " "операции возвращается файловый дескриптор. При ошибке возвращается -1 и в " "I записывается B, B или B." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The I and I attributes will be used by the verifier " "during program loading to check that the program is calling " "B() helper functions with a correctly initialized I " "and to check that the program doesn't access the map element I beyond " "the specified I. For example, when a map is created with a " "I of 8 and the eBPF program calls" msgstr "" "Атрибуты I и I будут использоваться механизмом " "проверки при загрузке программы для проверки того, что программа вызывает " "вспомогательные функции B() с корректно инициализированным " "I и что программа не обращается к элементу карты I за пределами, " "задаваемыми I. Например, когда карта создана с I " "равным 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, but the I (where I is the top of the stack) starting address will cause " "out-of-bounds stack access." msgstr "" "ожидается чтение 8 байт из места, указанного I, но начальный адрес I (где I — вершина стека) выходит за границы стека." #. 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 of 1 and the eBPF " "program contains" msgstr "" "Аналогично, когда карта создаётся с I равным 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 pointer beyond " "the specified 1 byte I limit." msgstr "" "то программа не будет загружена, так как она обращается к указателю I " "вне ограничения I, равного 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:" msgstr "В настоящее время поддерживаются следующие значения I:" #. 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 selects one of the available map implementations in the kernel. " "For all map types, eBPF programs access maps with the same " "B() and B() helper functions. " "Further details of the various map types are given below." msgstr "" "Для I выбирается одна из доступных реализаций карт в ядре. Для " "всех типов карт программы eBPF получают доступ через одни и те же " "вспомогательные функции B() и B(). " "Подробности о различных типах карт приведены далее." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B command looks up an element with a given I " "in the map referred to by the file descriptor I." msgstr "" "Команда B ищет элемент с заданным I в карте, на " "которую ссылается файловый дескриптор I." #. 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, which must point to a buffer of I bytes." msgstr "" "Если элемент найден, то возвращается ноль и значение элемента сохраняется в " "I, которое должно указывать на буфер размером I байт." #. 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 to " "B." msgstr "" "Если элемент не найден, то возвращается -1, а в I записывается " "B." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B command creates or updates an element with a " "given I in the map referred to by the file descriptor I." msgstr "" "Команда B создаёт или обновляет элемент с заданными " "I в карте, на которую ссылается файловый дескриптор I." #. 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 argument should be specified as one of the following:" msgstr "В аргументе I должно быть указано одно из:" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. 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" msgstr "B" #. 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" msgstr "B" #. 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 is set to B, B, B, or B. B " "indicates that the number of elements in the map reached the I " "limit specified at map creation time. B will be returned if " "I specifies B and the element with I already exists " "in the map. B will be returned if I specifies B " "and the element with I doesn't exist in the map." msgstr "" "При успешном выполнении операции возвращается ноль. При ошибке возвращается " "-1, а в I записывается B, B, B или B. " "Значение B показывает, что количество элементов в карте достигло " "ограничения I, заданного при создании карты. Значение B " "устанавливается, если в I указано B и элемент с I " "уже существует в карте. Значение B устанавливается, если в I " "указано B и элемент с I не существует в карте." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B command deletes the element whose key is I " "from the map referred to by the file descriptor I." msgstr "" "Команда B удаляет элемент с ключом I из карты, на " "которую ссылается файловый дескриптор I." #. 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 is set to B." msgstr "" "При успешном выполнении возвращается ноль. Если элемент не найден, то " "возвращается -1, а I присваивается значение B." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B command looks up an element by I in the map " "referred to by the file descriptor I and sets the I pointer to " "the key of the next element." msgstr "" "Команда B ищет элемент по ключу I в карте, на " "которую указывает файловый дескриптор I, и присваивает указателю " "I ключ следующего элемента." #. 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 is found, the operation returns zero and sets the I " "pointer to the key of the next element. If I is not found, the " "operation returns zero and sets the I pointer to the key of the " "first element. If I is the last element, -1 is returned and I " "is set to B. Other possible I values are B, " "B, B, and B. This method can be used to iterate over " "all elements in the map." msgstr "" "Если I найден, то операция возвращает ноль и устанавливает указатель " "I равным ключу следующего элемента. Если I не найден, то " "операция возвращает ноль и устанавливает указатель I равным ключу " "первого элемента. Если I — последний элемент, то возвращается -1 и " "I присваивается значение B. Другие возможные значения " "I: B, B, B и B. Данный метод можно " "использовать для обхода всех элементов в карте." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. 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. When the user-" "space program that created a map exits, all maps will be deleted " "automatically (but see NOTES)." msgstr "" "Данный вызов удаляет карту, на которую ссылается файловый дескриптор " "I. Когда программа пользовательского пространства, создавшая карту, " "завершает работу, все карты удаляются автоматически (но смотрите ЗАМЕЧАНИЯ)." #. 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" msgstr "B" #. 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() helper will fail to insert new element when the " "I limit is reached. (This ensures that eBPF programs cannot " "exhaust memory.)" msgstr "" "Вспомогательная функция B() завершится с ошибкой при " "вставке нового элемента при достижении ограничения I (то есть, " "программы eBPF не смогут занять всю память)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "B() replaces existing elements atomically." msgstr "" "Функция B() выполняет атомарную замену существующего " "элемента." #. 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" msgstr "B" #. 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 are constant for the life of the eBPF program. In other " "words, B() may be 'inlined' by the verifier/JIT " "compiler while preserving concurrent access to this map from user space." msgstr "" "Оптимизированы под самый быстрый поиск. В будущем механизм проверки/" "компилятор JIT смогут распознавать операции lookup(), которые выдают ключ-" "константу и оптимизировать его в указатель-константу. Также возможно " "оптимизировать ключ не константу в явный указатель арифметически, так как " "указатели и I являются константами на всём протяжении жизни " "программы eBPF. Другими словами, B() может быть " "«встроена» механизмом проверки/компилятором 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() fails with the error B, since elements cannot " "be deleted." msgstr "" "Функция B() завершается с ошибкой B, так как " "элементы нельзя удалять." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B() replaces elements in a B 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() заменяет элементы 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 (since Linux 4.2)" msgstr "B (начиная с 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 and I must be exactly four bytes. This map is used " "in conjunction with the B() helper." msgstr "" "Карта в виде программного массива — специальный вариант карты в виде " "массива, в которой значения содержат только файловые дескрипторы, " "указывающие на другие программы eBPF. То есть I и I " "должны занимать по четыре байта. Данная карта используется вместе с функцией " "B()." #. 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 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 используется для загрузки программы 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 is one of the available program types:" msgstr "Значением I может быть один из типов программ:" #. 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 are set as follows:" msgstr "Остальные поля I заполняются следующим образом:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I is an array of I instructions." msgstr "Поле I — массив инструкций I." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I is the number of instructions in the program referred to by " "I." msgstr "" "Поле I — количество инструкций в программе, на которую ссылается " "I." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I is a license string, which must be GPL compatible to call helper " "functions marked I. (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 — строка лицензии, которая должна быть совместима с GPL, " "чтобы можно было вызывать вспомогательные функции, помеченные как " "I (условия лицензии такие же как и для модулей ядра, то есть также " "можно использовать двойные лицензии, например «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 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 — указатель на буфер, выделенный вызывающим, в котором " "ядерный механизм проверки может хранить журнал проверки. Данный журнал " "представляет собой многострочный текст, из которого автор программы может " "понять как механизм проверки сделал вывод, что программа eBPF небезопасна. " "Формат вывода может поменяться в любое время, поскольку механизм проверки " "ещё дорабатывается." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I size of the buffer pointed to by I. If the size of the " "buffer is not large enough to store all verifier messages, -1 is returned " "and I is set to B." msgstr "" "Поле I — размер буфера, на который указывает I. Если " "размер буфера недостаточен для хранения всех сообщений от механизма " "проверки, то возвращается -1, а I присваивается B." #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, fuzzy #| msgid "" #| "I verbosity level of the verifier. A value of zero means that " #| "the verifier will not provide a log; in this case, I must be a " #| "NULL pointer, and I must be zero." msgid "" "I verbosity level of the verifier. A value of zero means that " "the verifier will not provide a log; in this case, I must be a null " "pointer, and I must be zero." msgstr "" "Поле I — степень подробности отчёта механизма проверки. Значение " "ноль означает, что механизм проверки не будет вести журнал; в этом случае " "значение I должно быть равно указателю NULL, а I равно " "нулю." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Applying B(2) to the file descriptor returned by B " "will unload the eBPF program (but see NOTES)." msgstr "" "При применении B(2) к файловому дескриптору, полученному от " "B, происходит выгрузка программы 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) 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 (which is the data blob passed into the eBPF program as the " #| "first argument)." msgid "" "The eBPF program type (I) 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 (which is " "the data blob passed into the eBPF program as the first argument)." msgstr "" "Типом программы eBPF (I) определяется поднабор вспомогательных " "функций ядра, который программа может вызывать. Тип программы также " "определяет входящие данные программы (контекст) — в виде формата I (который представляет собой двоичный объект данных, " "передаваемый в программу 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 (since Linux 3.19)" msgstr "B (начиная с 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 is:" msgstr "" "В настоящее время, набор функций для B такой:" #. 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 argument is a pointer to a I." msgstr "" "Аргумент I представляет собой указатель на I." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B (since Linux 4.1)" msgstr "B (начиная с 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 (since Linux 4.1)" msgstr "B (начиная с 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 (since Linux 4.1)" msgstr "B (начиная с 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 to " "the socket I, which was created by an earlier call to B(2):" msgstr "" "Начиная с Linux 3.19, следующий вызов присоединяет программу I к " "сокету I, который был создан вызовом B(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 to a perf event file " "descriptor, I, that was created by a previous call to " "B(2):" msgstr "" "Начиная с Linux 4.1, следующий вызов можно использовать для присоединения " "программы eBPF, на которую ссылается файловый дескриптор I, к " "файловому дескриптору событий perf I, созданному вызовом " "B(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 is set to indicate the error." msgstr "" "В случае ошибки возвращается -1, а I устанавливается в значение " "ошибки." #. 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" msgstr "B" #. 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 limit " "(maximum number of elements)." msgstr "" "Программа eBPF слишком большая или достигнуто ограничение I " "(максимальное количество элементов) в карте." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "For B, 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() again with I and examine " "I for the specific reason provided by the verifier." msgstr "" "Для B: хотя все инструкции программы корректны, программа " "считается ошибочной, так как признана небезопасной. Это может возникать из-" "за доступа к запрещённой области или неинициализированного стека/регистра " "или функциональные ограничения не совпадают с типами или выполняется " "невыровненный доступ к памяти. В этом случае рекомендуется вызвать B() " "ещё раз с I и посмотреть I на предмет причины, " "указанной механизмом проверки." #. type: TP #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed msgid "" "For B, 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() 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" msgstr "B" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I is not an open file descriptor." msgstr "I не является открытым файловым дескриптором." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. 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 or I or I or I) is " "outside the accessible address space." msgstr "" "Значение одного из указателей (I, I, I или I) " "находится вне доступного адресного пространства." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. 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 is not recognized by this kernel." msgstr "Значение I не распознано ядром." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "For B, either I or attributes are invalid." msgstr "" "Для B: некорректное значение атрибутов или I." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "For B commands, some of the fields of I that " "are not used by this command are not set to zero." msgstr "" "Для команд B: некоторые поля I, не " "используемые этой командой, не обнулены." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "For B, 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: попытка загрузить некорректную программу. Программы " "eBPF могут быть признаны некорректными из-за нераспознанных инструкций, " "использования зарезервированных полей, переходов за пределы диапазона, " "бесконечных циклов или вызовов неизвестных функций." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "For B or B, indicates that the " "element with the given I was not found." msgstr "" "Для B и B: элемент с заданным " "I не найден." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. 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" msgstr "B" #. 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 " "capability)." msgstr "Вызов запущен без необходимых прав (без мандата B)." #. 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() commands require the caller to have the " "B capability. From Linux 4.4 onwards, an unprivileged user " "may create limited programs of type B 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." 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(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(2) and similar calls. An eBPF object is deallocated only after all " "file descriptors referring to the object have been closed." msgstr "" "Объекты eBPF (карты и программы) могут использоваться несколькими процессами " "одновременно. Например, после B(2) потомок наследует файловые " "дескрипторы, ссылающиеся на одинаковые объекты eBPF. Также, файловые " "дескрипторы, ссылающиеся на объекты eBPF, можно передавать через доменные " "сокеты UNIX. Файловые дескрипторы, ссылающиеся на объекты eBPF, можно " "дублировать обычным образом с помощью B(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 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 files in the kernel " "source tree." msgstr "" "Программы eBPF можно писать на специализированной версии языка C, которая " "компилируется (с помощью компилятора B) в байт-код eBPF. В этой " "версии C отсутствуют различные свойства, например, глобальные переменные, " "функции с переменным числом аргументов, числа с плавающей запятой и нельзя " "передавать структуры в качестве аргументов. Примеры можно найти в файлах " "I из дерева исходного кода ядра." #. 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:" 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:" msgstr "" "В ядре имеется оперативный компилятор (JIT), который с целью " "производительности транслирует байт-код eBPF в машинный код. В ядрах Linux " "до версии 4.15 по умолчанию компилятор JIT отключён, но эта возможность " "контролируется записью следующих строк целых чисел в файл I:" #. 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 provided in the kernel source tree." msgstr "" "Режим отладки. Генерируемый код операций сбрасывается в виде " "шестнадцатеричных чисел в журнал ядра. Затем его можно дизассемблировать с " "помощью программы I, которая находится в дереве " "исходного кода ядра." #. commit 290af86629b25ffd1ed6232c4e9107da031705cb #. type: Plain text #: archlinux debian-unstable fedora-rawhide opensuse-tumbleweed #, fuzzy #| msgid "" #| "Since Linux 4.15, the kernel may configured with the " #| "B option. In this case, the JIT compiler is " #| "always enabled, and the I 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.)" msgid "" "Since Linux 4.15, the kernel may be configured with the " "B option. In this case, the JIT compiler is " "always enabled, and the I 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. В этом случае компилятор JIT всегда включён и " "I устанавливается в 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-Eproto */\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-Edata[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 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-Eproto */\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-Eproto */\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 directory in " "the kernel source tree." msgstr "" "Другой рабочий код можно найти в каталоге I дерева исходного " "кода ядра." #. 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(2), B(7), B(7), B(8), B(8)" msgstr "B(2), B(7), B(7), B(8), B(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." msgstr "" "Классический и расширенный BPF описаны в файле исходного кода ядра " "I." #. 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 opensuse-leap-15-6 msgid "" "I verbosity level of the verifier. A value of zero means that " "the verifier will not provide a log; in this case, I must be a NULL " "pointer, and I must be zero." msgstr "" "Поле I — степень подробности отчёта механизма проверки. Значение " "ноль означает, что механизм проверки не будет вести журнал; в этом случае " "значение I должно быть равно указателю NULL, а I равно " "нулю." #. type: SH #: debian-bookworm #, no-wrap msgid "VERSIONS" msgstr "ВЕРСИИ" #. type: Plain text #: debian-bookworm msgid "The B() system call first appeared in Linux 3.18." msgstr "Системный вызов B() впервые появился в Linux 3.18." #. type: Plain text #: debian-bookworm msgid "The B() system call is Linux-specific." msgstr "Системный вызов B() есть только в Linux." #. commit 290af86629b25ffd1ed6232c4e9107da031705cb #. type: Plain text #: debian-bookworm fedora-40 mageia-cauldron opensuse-leap-15-6 msgid "" "Since Linux 4.15, the kernel may configured with the " "B option. In this case, the JIT compiler is " "always enabled, and the I 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. В этом случае компилятор JIT всегда включён и " "I устанавливается в 1 и это нельзя изменить (данный параметр " "ядра был добавлен для предотвращения одной из атак «Спектр», направленной на " "интерпретатор BPF)." #. 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-Edata[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-Edata[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 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 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 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-Eproto */\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-Eproto */\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 #: fedora-40 mageia-cauldron #, no-wrap msgid "2023-11-01" msgstr "1 ноября 2023 г." #. type: TH #: fedora-40 mageia-cauldron #, no-wrap msgid "Linux man-pages 6.06" msgstr "Linux man-pages 6.06" #. type: TH #: fedora-rawhide #, no-wrap msgid "2024-03-18" msgstr "18 марта 2024 г." #. type: TH #: fedora-rawhide #, no-wrap msgid "Linux man-pages 6.7" msgstr "Linux man-pages 6.7" #. 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" #. type: TH #: opensuse-tumbleweed #, fuzzy, no-wrap #| msgid "Linux man-pages 6.7" msgid "Linux man-pages (unreleased)" msgstr "Linux man-pages 6.7"