Архитектура eBPF

Архитектура eBPF

PDF

Приведенный ниже включаемый файл (include) с переведенными на русский язык комментариями содержит определения пакета ebpf в одноименной модели. Файл ebpf.p4 размещается в каталоге p4include пакета p4c и доступен по ссылке.

/*
Copyright 2013-present Barefoot Networks, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0 

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

#ifndef _EBPF_MODEL_P4_
#define _EBPF_MODEL_P4_

#include <core.p4>

/**
   Массив счетчиков представляет собой плотный (dense) или разреженный 
   (sparse) массив 32-битовых целых чисел без знака, видимый плоскости
   управления как отображение EBPF (массив или хэш). Каждый счетчик 
   адресуется 32-битовым индексом. Счетчики могут инкрементироваться
   лишь плоскостью данных, но могут считываться и сбрасываться 
   плоскостью управления.
 */
extern CounterArray {
    /** Выделяется массив счетчиков.
     * @param max_index  Максимальный поддерживаемый индекс счетчика.
     * @param sparse     Массив счетчиков считается разреженным. */
    CounterArray(bit<32> max_index, bool sparse);
    /** Инкрементирование счетчика с заданным индексом. */
    void increment(in bit<32> index);
    /** Увеличение значения счетчика с заданным индексом. */
    void add(in bit<32> index, in bit<32> value);
}

/*
 Каждая таблица должна иметь свойство реализации array_table или hash_table.
*/

/**
 Свойство реализации таблиц, показывающее, что таблицу нужно реализовать с 
 использованием отображения в массив EBPF. Однако для таблиц с сопоставлением
 LPM свойство реализации служит лишь для размера и используемая таблица 
 является префиксным деревом LPM (trie).
*/
extern array_table {
    /// @param size Максимальное число записей в таблице.
    array_table(bit<32> size);
}

/**
 Свойство реализации для таблиц, показывающее, что таблицу нужно реализовать с 
 использованием отображения в хэш EBPF.
*/
extern hash_table {
    /// @param size: maximum number of entries in table
    hash_table(bit<32> size);
}

/* Архитектурная модель для архитектуры фильтрации пакетов EBPF */

parser parse<H>(packet_in packet, out H headers);
control filter<H>(inout H headers, out bool accept);

package ebpfFilter<H>(parse<H> prs,
                      filter<H> filt);

#endif

Николай Малых

nmalykh@protocols.ru

Запись опубликована в рубрике Сетевое программирование. Добавьте в закладки постоянную ссылку.

Добавить комментарий