4. Передача элементов ORF в BGP
Элементы ORF передаются в сообщениях BGP ROUTE-REFRESH [BGP-RR].
Узел BGP может отличать входящие сообщения ROUTE-REFRESH с одним или несколькими элементами ORF от обычных сообщений ROUTE-REFRESH с помощью поля Message Length в заголовке сообщения BGP.
В одном сообщении ROUTE-REFRESH может содержаться множество элементов ORF для одного или множества фильтров ORF, при условии, что для всех этих элементов значения AFI/SAFI совпадают.
С точки зрения кодирования каждый элемент ORF состоит из общей части и зависимой от типа части, как показано на рисунках 1 и 2.
Общая часть включает поля <AFI/SAFI, ORF-Type, Action, Match> и представляется следующим образом:
Компонента AFI/SAFI элемента ORF представляется полями AFI/SAFI сообщения ROUTE-REFRESH.
Вслед за компонентой AFI/SAFI размещается 1-октетное поле When-to-refresh, которое может принимать значения IMMEDIATE (0x01) или DEFER (0x02). Семантика значений IMMEDIATE и DEFER обсуждается ниже в параграфе «Функционирование».
Вслед за полем When-to-refresh помещается один или множество ORF, сгруппированных по ORF-Type.
Компонента ORF-Type представляет 1 октетом.
Компонента Length of ORF entries представляет собой 2-октетное поле, содержащую общий размер последующих однотипных элементов ORF в октетах.
+------------------------------------------------+ | Address Family Identifier (2 октета) | +------------------------------------------------+ | Резерв (1 октет) | +------------------------------------------------+ | Subsequent Address Family Identifier (1 октет) | +------------------------------------------------+ | When-to-refresh (1 октет) | +------------------------------------------------+ | ORF Type (1 октет) | +------------------------------------------------+ | Length of ORF entries (2 октета) | +------------------------------------------------+ | Первый элемент ORF (перем.) | +------------------------------------------------+ | Второй элемент ORF (перем.) | +------------------------------------------------+ | ... | +------------------------------------------------+ | N-й элемент ORF (перем.) | +------------------------------------------------+ | ORF Type (1 октет) | +------------------------------------------------+ | Length of ORF entries (2 октета) | +------------------------------------------------+ | Первый элемент ORF (перем.) | +------------------------------------------------+ | Второй элемент ORF (перем.) | +------------------------------------------------+ | ... | +------------------------------------------------+ | N-й элемент ORF (перем.) | +------------------------------------------------+ | ... | +------------------------------------------------+ Рисунок 1: Передача элементов ORF в сообщении ROUTE-REFRESH
Остальные компоненты общей части кодируются в первом октете каждого элемента ORF (отсчет от старшего бита), как показано на рисунке 2.
Поле Action занимает 2 бита и может принимать значения 0 (ADD), 1 (REMOVE) и 2 (REMOVE-ALL).
Поле Match занимает 1 бит. Значение 0 означает операцию PERMIT, а 1 — DENY. Это поле имеет смысл только в тех случаях, когда в поле Action указано значение ADD или REMOVE.
Резервное поле занимает 5 битов и должно содержать нулевые значения при передаче и игнорироваться на приемной стороне.
+---------------------------------+ | Action (2 бита) | +---------------------------------+ | Match (1 бит) | +---------------------------------+ | Резерв (5 битов) | +---------------------------------+ | Зависящая от типа часть (перем) | +---------------------------------+ Рисунок 2: Представление записи ORF
Если компонента Action записи ORF задает значение REMOVE-ALL, данный элемент содержит только общую часть.