RFC 7391 Forwarding and Control Element Separation (ForCES) Protocol Extensions

Internet Engineering Task Force (IETF)                     J. Hadi Salim
Request for Comments: 7391                             Mojatatu Networks
Updates: 5810, 7121                                         October 2014
Category: Standards Track
ISSN: 2070-1721

Forwarding and Control Element Separation (ForCES) Protocol Extensions

Расширения протокола ForCES

PDF

Аннотация

Опыт реализации и развертывания архитектуры ForCES1 показал необходимость добавления нескольких небольших расширений для упрощения программируемости и повышения эффективности некоторых транзакций. Протокол ForCES расширяется путем добавления операции table range (диапазон таблицы) и нового расширения для обработки ошибок. Этот документ обновляет семантику RFC 5810 и RFC 7121 для достижения этой цели.

Статус документа

Документ является проектом стандарт Internet (Internet Standards Track).

Документ является результатом работы IETF2 и представляет согласованный взгляд сообщества IETF. Документ прошел открытое обсуждение и был одобрен для публикации IESG3. Не все одобренные IESG документы претендуют на статус Internet Standard (см. раздел 2 в RFC 5741).

Информацию о текущем статусе документа, ошибках и способах обратной связи можно найти по ссылке http://www.rfc-editor.org/info/rfc7391.

Авторские права

Авторские права (Copyright (c) 2014) принадлежат IETF Trust и лицам, указанным в качестве авторов документа. Все права защищены.

К документу применимы права и ограничения, перечисленные в BCP 78 и IETF Trust Legal Provisions и относящиеся к документам IETF (http://trustee.ietf.org/license-info), на момент публикации данного документа. Прочтите упомянутые документы внимательно, поскольку. Фрагменты программного кода, включённые в этот документ, распространяются в соответствии с упрощённой лицензией BSD, как указано в параграфе 4.e документа Trust Legal Provisions, без каких-либо гарантий (как указано в Simplified BSD License).

1. Введение

Опыт реализации и развертывания архитектуры ForCES показал необходимость добавления нескольких небольших расширений для упрощения программируемости и повышения эффективности некоторых транзакций. Этот документ описывает несколько расширений семантики протокола ForCES [RFC5810] для решения этой задачи.

Этот документ описывает и обосновывает необходимость двух небольших расширений, совместимых с предшественниками. Документ также разъясняет детали выгрузки (dumping) больших страниц, находящихся в элементах пересылки FE (Forwarding Element).

  1. Операция table range позволяет контроллеру или управляющему приложению запросить произвольный диапазон строки таблицы.

  2. Добавлены коды ошибок возвращаемых контроллеру (или управляющему приложению) элементом FE. Кроме того, добавлено расширение для передачи деталей ошибки. В результате документ обновляет определение логического функционального блока (LFB4) FEPO5 из [RFC7121].

  3. Отклик FE на запрос GET для большой таблицы, не помещающийся в одно сообщение протокольного уровня (PL6)поддерживается, хотя и не описан в [RFC5810]. Этот документ разъясняет детали.

1.1. Термины и соглашения

1.1.1. Уровни требований

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не нужно (SHALL NOT), следует (SHOULD), не следует (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе должны интерпретироваться в соответствии с [RFC2119].

1.1.2. Терминология

Этот документ использует термины, определенные в нескольких документах ForCES ([RFC3746], [RFC5810], [RFC5811], [RFC5812]) ради четкости контекста.

Control Element (CE).

Forwarding Element (FE).

FE Model – модель FE.

LFB (Logical Functional Block) Class – класс (или тип) LFB.

LFB Instance – экземпляр LFB.

LFB Model – модель LFB.

LFB Metadata – метаданные LFB.

ForCES Component – компонента ForCES.

LFB Component – компонента LFB.

ForCES Protocol Layer (ForCES PL) – протокольный уровень ForCES.

ForCES Protocol Transport Mapping Layer (ForCES TML) – уровень транспортного отображения протокола ForCES.

2. Представление проблемы

В этом разделе представлены примеры для иллюстрации каждого решенного вопроса.

2.1. Диапазоны таблиц

В качестве примера рассмотрим таблицу FE с 1 миллионом строк, заполненных достаточно редко. Предположим также, что имеется 2000 редко заполненных строк в интервале между номерами 23 и 10023.

Опыт реализации показывает, что имеющиеся подходы для извлечения или удаления достаточно большого числа строк программно неэффективны в плане использования как вычислительных ресурсов, так и среду передачи (кабеля).

По определению в ForCES к запросам GET и DEL от контроллера (управляющего приложения) добавляется в начале компонента пути и запрос передается FE. В случае индексируемых таблиц компонента пути может указывать таблицу или строку в ней.

Например, если управляющее приложение пытается извлечь из таблицы первые две тысячи строк, появляющиеся между строками с индексом 23 и 10023, задачу можно решить приведенными ниже способами.

  • Выгрузить всю таблицу и отфильтровать нужные 2000 строк.

  • Передать 10000 запросов ForCES PL, инкрементируя индекс на 1 каждый раз с остановкой при получении нужных 2000 записей.

  • Если приложению известно, какие строки существуют в таблице (это реально, поскольку контроллер предполагается осведомленным о состоянии элемента сети), приложение может воспользоваться пакетной обработкой ForCES для отправки меньшего числа сообщений (2000 сообщений с разной компонентой пути).

Как уже было отмечено, все эти варианты весьма утомительны.

2.2. Коды ошибок

В [RFC5810] определен базовый набор кодов ошибок, которые будут возвращаться CE от FE. Опыт развертывания показал, что будет полезно иметь более детализированные коды ошибок. Например, код E_NOT_SUPPORTED может соответствовать множеству причин ошибок FE и должен интерпретироваться вызывающей стороной на основе ее понимания природы отправленного запроса. Это повышает трудоемкость отлаживания.

3. Обновление протокола

В этом разделе описаны нормативные обновления протокола ForCES для решения проблем, отмеченных в разделе 2.

3.1. Диапазоны таблиц

Определяется новый блок TLV – TABLERANGE-TLV (тип 0x0117), связанный с PATH-DATA-TLV в стиле KEYINFO-TLV. Структура TLV показана на рисунке 1.

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Type (0x0117)              |     Length                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Start Index                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         End Index                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Рисунок 1. Схема запроса диапазона таблицы ForCES.

На рисунке 2 показан запрос GET для диапазона строк 11 – 23 таблицы с компонентой пути 1/6.

      OPER = GET-TLV
             PATH-DATA-TLV:
               flags = F_SELTABRANGE, IDCount = 2, IDs = {1,6}
               TABLERANGE-TLV content = {11,23}

Рисунок 2. Пример запроса диапазона таблицы ForCES.


Флаг пути F_SELTABRANGE (0x2, т. е. бит 1, где бит 0 – F_SELKEY определен в [RFC5810]) должен быть установлен для индикации наличия TABLERANGE-TLV. Флаг F_SELTABRANGE может применяться только в запросах GET или DEL я является взаимоисключающим с флагом F_SELKEY. Элемент FE должен соблюдать ограничения для флагов и гарантировать принадлежность выбранного пути к определенной и индексированной табличной компоненте. Любое нарушение этих ограничений должно отвергаться с кодом ошибки E_INVALID_TFLAGS и указанием того, что проблема возникла при использовании расширенного отчета об ошибках (см. параграф 3.2).

Имеются комбинации механизмов выбора пути, которые ради простоты не следует применять совместно. К ним относятся TABLERANGE-TLV и KEYINFO-TLV, а также вложенные TABLERANGE-TLV.

TABLERANGE-TLV включает:

  • 32-битовый индекс начала, 0 указывает первую строку таблицы;

  • 32-битовый индекс окончания, 0xFFFFFFFF указывает последнюю запись таблицы.

Отклик на запрос диапазона таблицы может иметь одну из приведенных ниже форм.

  • Запрошенные данные из таблицы (при доступности хотя бы одной строки). В этом случае CE передается отклик с путем, указывающим на таблицу, и запрошенными строками. Данные должны инкапсулироваться в SPARSEDATA-TLV. Содержимое SPARSEDATA-TLV будет иметь I (ILV7) для каждой строки таблицы.

  • EXTENDEDRESULT-TLV (см. параграф 3.2.3) в случаях, когда:

    • запрос диапазона задан для удаления и приводит к одному из вариантов:

      • успешному завершению с удалением любой из запрошенных строк;

      • возврату подходящего кода ошибки, если ни одна из запрошенных строк не была удалена;

    • данные отсутствуют и используется код ошибки E_EMPTY с необязательной строкой, описывающей природу ошибки (см. параграф 3.2);

    • ключ пути и диапазон были указаны во флагах пути исходного запроса; в таких случаях применяется код ошибки E_INVALID_TFLAGS необязательной строкой, описывающей природу ошибки (см. параграф 3.2);

    • возникла другая стандартная ошибка ForCES (например, ACL8, при попытке извлечь содержимое не разрешенной для чтения таблицы, обратиться к неизвестной компоненте и т. п.).

3.2. Коды ошибок

В этом документе определены:

  1. новый набор кодов ошибок;

  2. некоторые коды ошибок для приватного использования;

  3. новый блок TLV – EXTENDEDRESULT-TLV (0x0118) для передачи кодов (надмножество кодов, определенных в [RFC5810]), а также необязательного текста (см. рисунок 3).

3.2.1. Новые коды

В EXTENDEDRESULT-TLV поле Result Value имеет размер 32 бита и является надмножеством RESULT-TLV Result Value из [RFC5810]. Новое поле имеет размер 32 бита в отличии от прежнего 8-битового [RFC5810]. Первые 8-битовые значения (256 кодов) являются общими для обоих.

Таблица 1. Новые коды ошибок.

Код

Обозначение

Описание

0x18

E_TIMED_OUT

Тайм-аут при обработке сообщения

0x19

E_INVALID_TFLAGS

Недействительные флаги таблицы

0x1A

E_INVALID_OP

Запрошенная операция не пригодна

0x1B

E_CONGEST_NT

Уведомление о перегрузке узла

0x1C

E_COMPONENT_NOT_A_TABLE

Компонента не является таблицей

0x1D

E_PERM

Операция не разрешена

0x1F

E_EMPTY

Таблица пуста

0x20

E_UNKNOWN

Базовый универсальный код ошибки. Сопровождается строкой для дополнительного анализа причины ошибки.

3.2.2. Приватные коды производителей

Коды 0x100 – 0x200 зарезервированы для приватного использования. Поскольку они доступны свободно, предполагается, что реализации на стороне FE и CE будут одинаково трактовать эти коды без конфликтов.

3.2.3. TLV расширенного результата

  •  0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |   Type = EXTENDEDRESULT-TLV   |              Length           |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                        Result Value                           |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                    Optional Cause Content                     |
    .                                                               .
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    Рисунок 3. EXTENDEDRESULT-TLV.

    Подобно всем другим TLV в ForCES, для блока EXTENDEDRESULT-TLV предполагается выравнивание по 32-битовой границе.

  • EXTENDEDRESULT-TLV Result Value использует и расширяет то же пространство имен, которое применяется в RESULT-TLV, определенном в параграфе 7.1.7 [RFC5810]. Основное различие заключается в том, что значение Result Value стало 32-битовым (было 8 битов).

  • Определено поле Optional Cause Content для устранения неоднозначности Result Value. Предполагается использование в этом поле строк UTF-8. Содержимое Result Value предназначено для оператора (человека) и реализации могут задавать разные тексты для одного кода ошибки. Для будущих кодов может задаваться содержимое поля, отличное от символьной строки.

  • Рекомендуется ограничивать размер строки описания причины 32 байтами. Документ не стандартизует строки описания причины.

3.2.3.1. Совместимость расширенных результатов с прежними реализациями

Для поддержки совместимости с прежними версиями обновлен блок FEPO LFB (Приложение A) до версии 1.2 и добавлен идентификатор компоненты 16 (EResultAdmin), а также идентификатор возможности 32 (EresultCapab).

FE будет анонсировать свою возможность поддержки расширенных TLV в таблице EResultCapab. Когда элемент FE может отвечать на расширенные и старые TLV, он будет иметь в таблице две строки, по одной для каждого поддерживаемого значения. По умолчанию FE, поддерживающий оба режима, будет предполагать наименьший общий делитель (т. е. EResultAdmin будет EResultNotSupported) и выдавать отклики с использованием RESULT-TLV. Следует отметить, что FE, анонсирующий FEPO v1.2, должен поддерживать как минимум EXTENDEDRESULT-TLV.

На FE, поддерживающем RESULT-TLV и EXTENDEDRESULT-TLV элемент CE может включить поддержку расширенных результатов путем установки EResultAdmin = 2, в результате чего FE должен переключиться в режим передачи только EXTENDEDRESULT-TLV. Ведущий CE может отключить расширенные результаты путем записи 1 в EResultAdmin. FE, не поддерживающий тот или другой режим, должен отвергать установку неподдерживаемого значения EresultAdmin, отвечая кодом ошибки E_NOT_SUPPORTED. Предполагается, что CE, участвующие в режиме высокой доступности (HA9), способны поддерживать FEPO версии 1.2 при установке в EResultAdmin строгой поддержки EXTENDEDRESULT-TLV. Согласование между CE в режиме HA по части установки EXTENDEDRESULT-TLV выходит за рамки этого документа.

3.3. Выгрузка большой таблицы

Представим запрос GET для пути, который является таблицей, т. е. выгрузку таблицы (table dump). Такой запрос передается FE с конкретным коррелятором, скажем X. Представим, что эта таблица в FE имеет большое число записей (например, миллион). Это потребует от FE доставки откликов в большом количестве сообщений, использующих коррелятор X.

Спецификация протокола ForCES [RFC5810] не содержит адекватного описания доставки многокомпонентного сообщения с откликом на GET и приведенный ниже текст разъясняет это применительно к одной таблице.

Опыт реализации выгрузки больших таблиц показывает возможность применения флагов транзакции для индикации начала, средней части и конца многокомпонентного сообщения с откликом GET. Иными словами, «отражается» эффект неделимой транзакции от CE к FE.

CE PL                                                  FE PL
  |                                                      |
  | (0) Query, Path-to-a-large-table, OP=GET             |
  |----------------------------------------------------->|
  |                correlator = X                        |
  |                                                      |
  | (1) Query-Response, SOT,AT, OP=GET-RESPONSE, DATA    |
  |<-----------------------------------------------------|
  |                correlator = X                        |
  |             DATA TLV (SPARSE/FULL)                   |
  |                                                      |
  | (2) Query-Response, MOT,AT, OP=GET-RESPONSE, DATA    |
  |<-----------------------------------------------------|
  |                correlator = X                        |
  |             DATA TLV (SPARSE/FULL)                   |
  |                                                      |
  | (3) Query-Response, MOT,AT, OP=GET-RESPONSE, DATA    |
  |<-----------------------------------------------------|
  |                correlator = X                        |
  |             DATA TLV (SPARSE/FULL)                   |
  .                                                      .
  .                                                      .
  .                                                      .
  .                                                      .
  |                                                      |
  | (N) Query-Response, MOT,AT, OP=GET-RESPONSE, DATA    |
  |<-----------------------------------------------------|
  |                correlator = X                        |
  |             DATA TLV (SPARSE/FULL)                   |
  |                                                      |
  | (N) Query-Response, EOT,AT, OP=GET-RESPONSE          |
  |<-----------------------------------------------------|
  |                correlator = X                        |
  |             RESULT-TLV (SUCCESS)                     |
  |                                                      |

Рисунок 4. Последовательность выгрузки большой таблицы.


Последнему сообщению, приходящему на CE с флагом завершения транзакции EOT (End Of Transaction), недопустимо содержать данные. Это позволяет «отразить» двухфазное представление сообщений ForCES (2PC – two-phase commit) [RFC5810], в котором последнее сообщение является пустым. Отклик GET в этом случае будет содержать RESULT-TLV.

4. Взаимодействие с IANA

Документ обновляет <https://www.iana.org/assignments/forces>, как описано ниже.

Регистрируются два новых TLV верхнего уровня и два новых флага пути, а также обновляется зарегистрированный IANA логический функциональный блок FE Protocol Object Logical Functional Block (LFB).

В Приложении A приведено обновление FE Protocol Object LFB до версии 1.2. Запись для FE Protocol Object LFB v1.2 добавлена в субреестр «Logical Functional Block (LFB) Class Names and Class Identifiers».

Перечисленные ниже TLV были определены и добавлены в субреестр «TLV Types».

  • TABLERANGE-TLV (тип 0x0117).

  • EXTENDEDRESULT-TLV (тип 0x0118).

Субреестр «RESULT-TLV Result Values» был обновлен, как показано ниже.

  • Коды 0x21 – 0xFE помечены как не распределенные (Unassigned).

  • Коды 0x18 – 0x20 определены параграфом 3.2.1 данного документа.

  • Коды 0x100-0x200 зарезервированы для приватного использования.

Создан новый субреестр «EXTENDEDRESULT-TLV Result Values». Коды 0x00 – 0xFF взяты из субреестра «RESULT-TLV Result Values». Все будущие назначения кодов из диапазона 0x21 — 0xFE должны будут включаться лишь в субреестр «EXTENDEDRESULT-TLV Result Values», но не в «RESULT-TLV Result Values». Коды 0x100 – 0x200 зарезервированы для приватного использования, а коды 0x21 – 0xFE и 0x201 – 0xFFFFFFFF помечены как не распределенные (Unassigned) с выделением значений по процедуре IANA Specification Required [RFC5226]. Назначенный эксперт (DE – Designated Expert) должен убедиться, что новое назначение не нарушает имеющихся развертываний. DE следует передать запрос кода в почтовую конференцию рабочей группы ForCES (или группы, назначенной вместо нее руководителем направления) для рецензий и комментариев. Затем DE следует одобрить или отвергнуть запрос на регистрацию, опубликовав свое решение в почтовой конференции ForCES или пришедшей на замену группы, а также информировать IANA о своем решении. Уведомление об отказе должно быть обосновано объяснением и по возможности конкретными предложениями по изменению запроса для его удовлетворения.

5. Вопросы безопасности

Вопросы безопасности, рассмотренные в спецификации протокола ForCES [RFC5810] применимы и здесь.

6. Литература

6.1. Нормативные документы

[RFC2119] Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels”, BCP 14, RFC 2119, March 1997, <http://www.rfc-editor.org/info/rfc2119>.

[RFC5226] Narten, T. and H. Alvestrand, “Guidelines for Writing an IANA Considerations Section in RFCs”, BCP 26, RFC 5226, May 2008, <http://www.rfc-editor.org/info/rfc5226>.

[RFC5810] Doria, A., Hadi Salim, J., Haas, R., Khosravi, H., Wang, W., Dong, L., Gopal, R., and J. Halpern, “Forwarding and Control Element Separation (ForCES) Protocol Specification”, RFC 5810, March 2010, <http://www.rfc-editor.org/info/rfc5810>.

[RFC5811] Hadi Salim, J. and K. Ogawa, “SCTP-Based Transport Mapping Layer (TML) for the Forwarding and Control Element Separation (ForCES) Protocol”, RFC 5811, March 2010, <http://www.rfc-editor.org/info/rfc5811>.

[RFC5812] Halpern, J. and J. Hadi Salim, “Forwarding and Control Element Separation (ForCES) Forwarding Element Model”, RFC 5812, March 2010, <http://www.rfc-editor.org/info/rfc5812>.

[RFC7121] Ogawa, K., Wang, W., Haleplidis, E., and J. Hadi Salim, “High Availability within a Forwarding and Control Element Separation (ForCES) Network Element”, RFC 7121, February 2014, <http://www.rfc-editor.org/info/rfc7121>.

6.2. Дополнительная литература

[RFC3746] Yang, L., Dantu, R., Anderson, T., and R. Gopal, “Forwarding and Control Element Separation (ForCES) Framework”, RFC 3746, April 2004, <http://www.rfc-editor.org/info/rfc3746>.

Приложение A. Новая версия FEPO

Эта версия FEPO обновляет [RFC7121]. Код XML проверен на соответствие схеме, определенной в [RFC5812].

  <LFBLibrary xmlns="urn:ietf:params:xml:ns:forces:lfbmodel:1.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="lfb-schema.xsd" provides="FEPO">
     <!-- XXX -->
     <dataTypeDefs>
        <dataTypeDef>
           <name>CEHBPolicyValues</name>
           <synopsis>
              Возможные значения политики CE heartbeat
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>CEHBPolicy0</name>
                    <synopsis>
                        CE будет передавать heartbeat FE каждый
                        интервал CEHDI если не было других сообщений.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>CEHBPolicy1</name>
                    <synopsis>
                        CE не будет передавать heartbeat элементу FE.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>FEHBPolicyValues</name>
           <synopsis>
               Возможные значения политики FE heartbeat
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>FEHBPolicy0</name>
                    <synopsis>
                       FE не будет генерировать heartbeat для CE.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>FEHBPolicy1</name>
                    <synopsis>
                       FE генерирует heartbeat для CE каждый
                       интервал FEHI, если не было других
                       сообщений для CE.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>FERestartPolicyValues</name>
           <synopsis>
              Возможные значения политики перезапуска FE
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>FERestartPolicy0</name>
                    <synopsis>
                       FE перезапускает свое состояние «с нуля».
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>HAModeValues</name>
           <synopsis>Возможные значения режимов HA.</synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>NoHA</name>
                    <synopsis>FE не работает в режиме HA.</synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>ColdStandby</name>
                    <synopsis>
                       FE работает в режиме HA cold standby.
                    </synopsis>
                 </specialValue>
                 <specialValue value="2">
                    <name>HotStandby</name>
                    <synopsis>
                       FE работает в режиме HA hot standby.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>CEFailoverPolicyValues</name>
           <synopsis>
              Возможные значения политики восстановления CE
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>CEFailoverPolicy0</name>
                    <synopsis>
                        FE следует немедленно прекратить работу
                        и перейти в состояние OperDisable.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>CEFailoverPolicy1</name>
                    <synopsis>
                        FE следует продолжать пересылку даже без
                        связанного CE для CEFTI. FE переходит в 
                        OperDisable, когда CEFTI истекает и нет
                        ассоциации. Нужна поддержка аккуратного перезапуска.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>FEHACapab</name>
           <synopsis>Поддерживаемые возможности HA.</synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>GracefullRestart</name>
                    <synopsis>
                       FE поддерживает аккуратный перезапуск.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>HA</name>
                    <synopsis>FE поддерживает HA.</synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>CEStatusType</name>
           <synopsis>Значения статуса для каждого CE</synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <specialValues>
                 <specialValue value="0">
                    <name>Disconnected</name>
                    <synopsis>Еще не было попытки соединения с CE.
                    </synopsis>
                 </specialValue>
                 <specialValue value="1">
                    <name>Connected</name>
                    <synopsis>Соединение FE с CE в TML организовано.
                    </synopsis>
                 </specialValue>
                 <specialValue value="2">
                    <name>Associated</name>
                    <synopsis>FE связан с CE.</synopsis>
                 </specialValue>
                 <specialValue value="3">
                    <name>IsMaster</name>
                    <synopsis>CE является ведущим (и связан).
                    </synopsis>
                 </specialValue>
                 <specialValue value="4">
                    <name>LostConnection</name>
                    <synopsis>FE был связан с CE но соединение
                       потеряно.
                    </synopsis>
                 </specialValue>
                 <specialValue value="5">
                    <name>Unreachable</name>
                    <synopsis>CE считается недоступным для FE.</synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
        <dataTypeDef>
           <name>StatisticsType</name>
           <synopsis>Определение статистики</synopsis>
           <struct>
              <component componentID="1">
                 <name>RecvPackets</name>
                 <synopsis>Принято пакетов</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="2">
                 <name>RecvErrPackets</name>
                 <synopsis>Принято пакетов от CE с ошибками</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="3">
                 <name>RecvBytes</name>
                 <synopsis>Принято байтов от CE</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="4">
                 <name>RecvErrBytes</name>
                 <synopsis>Принято байтов от CE с ошибками</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="5">
                 <name>TxmitPackets</name>
                 <synopsis>Передано пакетов CE</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="6">
                 <name>TxmitErrPackets</name>
                 <synopsis>Передано CE пакетов с ошибками</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="7">
                 <name>TxmitBytes</name>
                 <synopsis>Передано байтов CE</synopsis>
                 <typeRef>uint64</typeRef>
              </component>
              <component componentID="8">
                 <name>TxmitErrBytes</name>
                 <synopsis>Передано байтов CE в пакетах с ошибками
                 </synopsis>
                 <typeRef>uint64</typeRef>
              </component>
           </struct>
        </dataTypeDef>
        <dataTypeDef>
           <name>AllCEType</name>
           <synopsis>Тип таблицы для компоненты AllCE</synopsis>
           <struct>
              <component componentID="1">
                 <name>CEID</name>
                 <synopsis>Идентификатор CE</synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="2">
                 <name>Statistics</name>
                 <synopsis>Статистика для CE</synopsis>
                 <typeRef>StatisticsType</typeRef>
              </component>
              <component componentID="3">
                 <name>CEStatus</name>
                 <synopsis>Статус CE</synopsis>
                 <typeRef>CEStatusType</typeRef>
              </component>
           </struct>
        </dataTypeDef>
        <dataTypeDef>
           <name>ExtendedResultType</name>
           <synopsis>Возможна поддержка расширенных результатов
           </synopsis>
           <atomic>
              <baseType>uchar</baseType>
              <rangeRestriction>
                <allowedRange min="1" max="2"/>
              </rangeRestriction>
              <specialValues>
                 <specialValue value="1">
                    <name>EResultNotSupported</name>
                    <synopsis>
                        Расширенные результаты не поддерживаются
                    </synopsis>
                 </specialValue>
                 <specialValue value="2">
                    <name>EResultSupported</name>
                    <synopsis>
                        Расширенные результаты поддерживаются.
                    </synopsis>
                 </specialValue>
              </specialValues>
           </atomic>
        </dataTypeDef>
     </dataTypeDefs>
     <LFBClassDefs>
        <LFBClassDef LFBClassID="2">
           <name>FEPO</name>
           <synopsis>
              FE Protocol Object с расширенными результатами
           </synopsis>
           <version>1.2</version>
           <components>
              <component componentID="1" access="read-only">
                 <name>CurrentRunningVersion</name>
                 <synopsis>Используемая версия ForCES</synopsis>
                 <typeRef>uchar</typeRef>
              </component>
              <component componentID="2" access="read-only">
                 <name>FEID</name>
                 <synopsis>Unicast FEID</synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="3" access="read-write">
                 <name>MulticastFEIDs</name>
                 <synopsis>
                    Таблица всех групповых идентификаторов
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>uint32</typeRef>
                 </array>
              </component>
              <component componentID="4" access="read-write">
                 <name>CEHBPolicy</name>
                 <synopsis>Правила CE Heartbeat</synopsis>
                 <typeRef>CEHBPolicyValues</typeRef>
              </component>
              <component componentID="5" access="read-write">
                 <name>CEHDI</name>
                 <synopsis>
                    Интервал CE Heartbeat Dead в миллисекундах
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="6" access="read-write">
                 <name>FEHBPolicy</name>
                 <synopsis>Правила FE Heartbeat</synopsis>
                 <typeRef>FEHBPolicyValues</typeRef>
              </component>
              <component componentID="7" access="read-write">
                 <name>FEHI</name>
                 <synopsis>
                    Интервал FE Heartbeat Dead в миллисекундах
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="8" access="read-write">
                 <name>CEID</name>
                 <synopsis>
                    Основной CE, с которым связан данный FE
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="9" access="read-write">
                 <name>BackupCEs</name>
                 <synopsis>
                    Таблица всех резервных CE (без основного)
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>uint32</typeRef>
                 </array>
              </component>
              <component componentID="10" access="read-write">
                 <name>CEFailoverPolicy</name>
                 <synopsis>Правила CE Failover</synopsis>
                 <typeRef>CEFailoverPolicyValues</typeRef>
              </component>
              <component componentID="11" access="read-write">
                 <name>CEFTI</name>
                 <synopsis>
                    Тайм-аут CE Failover в миллисекундах
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="12" access="read-write">
                 <name>FERestartPolicy</name>
                 <synopsis>Правила перезапуска FE</synopsis>
                 <typeRef>FERestartPolicyValues</typeRef>
              </component>
              <component componentID="13" access="read-write">
                 <name>LastCEID</name>
                 <synopsis>
                    Основной CE, с которым был связан FE в последний раз
                 </synopsis>
                 <typeRef>uint32</typeRef>
              </component>
              <component componentID="14" access="read-write">
                 <name>HAMode</name>
                 <synopsis>Используемый режим HA</synopsis>
                 <typeRef>HAModeValues</typeRef>
              </component>
              <component componentID="15" access="read-only">
                 <name>AllCEs</name>
                 <synopsis>Таблица всех CE</synopsis>
                 <array type="variable-size">
                    <typeRef>AllCEType</typeRef>
                 </array>
               </component>
               <component componentID="16" access="read-write">
                 <name>EResultAdmin</name>
                 <synopsis>
                     Включить/выключить расширенные результаты,
                     по умолчанию выключены.
                 </synopsis>
                 <typeRef>ExtendedResultType</typeRef>
                 <defaultValue>1</defaultValue>
              </component>
           </components>
           <capabilities>
              <capability componentID="30">
                 <name>SupportableVersions</name>
                 <synopsis>
                    Таблица версий ForCES, поддерживаемых FE
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>uchar</typeRef>
                 </array>
              </capability>
              <capability componentID="31">
                 <name>HACapabilities</name>
                 <synopsis>
                    Таблица возможностей HA, поддерживаемых FE
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>FEHACapab</typeRef>
                 </array>
              </capability>
               <capability componentID="32">
                 <name>EResultCapab</name>
                 <synopsis>
                    Таблица поддерживаемых возможностей для результата
                 </synopsis>
                 <array type="variable-size">
                    <typeRef>ExtendedResultType</typeRef>
                 </array>
             </capability>
           </capabilities>
           <events baseID="61">
              <event eventID="1">
                 <name>PrimaryCEDown</name>
                 <synopsis>Основной CE сменен.</synopsis>
                 <eventTarget>
                    <eventField>LastCEID</eventField>
                 </eventTarget>
                 <eventChanged/>
                 <eventReports>
                    <eventReport>
                       <eventField>LastCEID</eventField>
                    </eventReport>
                 </eventReports>
              </event>
              <event eventID="2">
                 <name>PrimaryCEChanged</name>
                 <synopsis>Основной CE выбран.</synopsis>
                 <eventTarget>
                    <eventField>CEID</eventField>
                 </eventTarget>
                 <eventChanged/>
                 <eventReports>
                    <eventReport>
                       <eventField>CEID</eventField>
                    </eventReport>
                 </eventReports>
              </event>
           </events>
        </LFBClassDef>
     </LFBClassDefs>
  </LFBLibrary>

Благодарности

Спасибо Evangelos Haleplidis и Joel Halpern за дискуссии, которые сделали этот документ лучше. Adrian Farrel представил отличную рецензию AD для документа, значительно улучшившую его качество. Tobias Gondrom подготовил рецензию Security Directorate, Brian Carpenter – Gen-ART, а Nevil Brownlee – рецензию Operations Directorate. Большую работу по части публикации документа выполнил S. Moonesamy (SM), а Pearl Liang решил вопросы, связанные с текстом IANA.

Улучшить финальный вариант документа помогли рецензии и замечания членов IESG – Alia Atlas, Barry Leiba, Brian Haberman, Kathleen Moriarty, Richard Barnes и Spencer Dawkins.

Адрес автора

Jamal Hadi Salim

Mojatatu Networks

Suite 400, 303 Moodie Dr.

Ottawa, Ontario K2H 9R4

Canada

EMail: hadi@mojatatu.com


Перевод на русский язык

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

nmalykh@protokols.ru

1Forwarding and Control Element Separation – разделение элементов управления и пересылки.

2Internet Engineering Task Force.

3Internet Engineering Steering Group.

4Logical Functional Block.

5FE Protocol Object – протокольный объект элемента пересылки.

6Protocol Layer.

7Index-Length-Value – индекс, размер, значение.

8Access Control List – список контроля доступа.

9High availability.

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