Многоцелевое расширение почты Интернет

         

Исходный словарь RPSL, пример действий политики и фильтры


dictionary: RPSL
rp-attribute: # меньшие значения соответствуют более высокому предпочтению pref

operator=(integer[0, 65535])

rp-attribute: # атрибут BGP multi_exit_discriminator

med
# установить med равным 10: med = 10;
# установить med метрике IGP: med = igp_cost;
operator=(union integer[0, 65535], enum[igp_cost])

rp-attribute: # атрибут предпочтения места назначения BGP (dpa)

dpa
operator=(integer[0, 65535])

rp-attribute: # атрибут BGP aspath

aspath
# prepends AS numbers from last to first order
prepend(as_number, ...)

typedef: # значение community в RPSL равно:

# - 4-байтовому целому (ok to use 3561:70 notation)
# - internet, no_export, no_advertise (смотри RFC-1997)
community_elm union
integer[1, 4294967295],
enum[internet, no_export, no_advertise],

typedef: # список значений community { 40, no_export, 3561:70 }

community_list list of community_elm

rp-attribute: # атрибут BGP community

community
# set to a list of communities
operator=(community_list)
# добавить значения community
operator.=(community_list)
append(community_elm, ...)
# удалить значения community
delete(community_elm, ...)
# фильтр: true если содержится одно из значений community
contains(community_elm, ...)
# shortcut to contains: community(no_export, 3561:70)
operator()(community_elm, ...)
# сравнение равенства, независящее от порядка
operator==(community_list)
rp-attribute:# следующий маршрутизатор в статическом маршруте next-hop
# установить равным 7.7.7.7: next-hop = 7.7.7.7;
# установить собственный адрес маршрутизатора: next-hop = self;
operator=(union ipv4_address, enum[self])
rp-attribute:# цена статического маршрута cost
operator=(integer[0, 65535])
protocol:BGP4
# номер AS маршрутизатора партнера
MANDATORY asno(as_number)
# разрешить гашение осцилляций маршрута
OPTIONAL flap_damp()
OPTIONAL flap_damp(integer[0,65535],
# penalty per flap
integer[0,65535],
# penalty value for supression
integer[0,65535],
# penalty value for reuse
integer[0,65535],
# halflife in secs when up
integer[0,65535],
# halflife in secs when down
integer[0,65535])
# максимальный штраф


protocol: OSPF
protocol: RIP
protocol: IGRP
protocol: IS-IS
protocol: STATIC
protocol: RIPng
protocol: DVMRP
protocol: PIM-DM
protocol: PIM-SM
protocol: CBT
protocol: MOSPF

Рис. .27. Словарь RPSL

На рис. . 27 показан исходный словарь RPSL. Он имеет семь rp-атрибутов: pref для присвоения локального предпочтения воспринимаемым маршрутам; med для присвоения значения атрибуту MULTI_EXIT_DISCRIMINATOR BGP; dpa для присвоения значения атрибуту DPA BGP; aspath для присвоения значения атрибуту AS_PATH BGP; community для присвоения или проверки значения атрибута community BGP; next-hop для назначения следующих маршрутизаторов в случае статических маршрутов; cost для назначения цены статических маршрутов. Словарь определяет два типа: community_elm и community_list. Тип community_elm является либо 4-байтовым целым числом без знака, либо одним из ключевых слов Интернет, no_export или no_advertise. Целое число может быть специфицировано с помощью двух 2-байтовых чисел, разделенных двоеточием ":", чтобы разделить пространство кода community так, чтобы провайдер мог использовать номер AS первых двух байт, и определить семантику выбора последних двух байт.

Исходный словарь (рис. .27) определяет только опции для BGP (Border Gateway Protocol): asno и flap_damp. Обязательная опция asno является номером AS партнера-маршрутизатора. Опция flap_damp инструктирует маршрутизатор гасить осцилляции маршрутов [21], при импортировании маршрутов от маршрутизатора-партнера. Она может быть специфицирована с или без параметров. Если параметры опущены, принимаются значения по умолчанию:

flap_damp(1000, 2000, 750, 900, 900, 20000)

То есть, назначается штраф 1000 для каждого переключения маршрута, маршрут закрывается, когда штраф достигает 2000. Штраф снижается вдвое после 15 минут стабильного режима вне зависимости оттого открыт путь или нет. Закрытый маршрут используется вновь, когда штраф падает ниже 750. Максимальный штраф маршрута может достигать 20,000 (т.e. максимальное время закрытия маршрута после стабилизации ситуации составляет около 75 минут).

Действия политики и фильтров, использующих rp-атрибуты

Синтаксис действия политики или фильтра, использующего rp-атрибут x выглядит следующим образом:

x.method(arguments)
x "op" argument

где method представляет собой метод, а "op" - метод оператора rp-атрибута x. Если метод оператора используется при спецификации составного фильтра политики, он определяется раньше, чем операторы составных фильтров политики (т.e. AND, OR, NOT или оператор). rp-атрибуту pref может быть присвоено положительное целое число следующим образом:

pref = 10;

rp-атрибуту med может быть присвоено положительное целое число или слово "igp_cost" следующим образом:

med = 0;
med = igp_cost;

rp-атрибуту dpa может быть присвоено положительное целое число следующим образом:

dpa = 100;

Значением атрибута community BGP является список, который состоит из 4-байтовых целых чисел, каждое их которых характеризует "community". Следующие примеры демонстрируют, как добавлять новые значения community к этому rp-атрибуту:

community .= { 100 };
community .= { NO_EXPORT };
community .= { 3561:10 };

В последнем случае, 4-байтовое целое число, сформированное так, что наиболее значимые два байта равны 3561, а менее значимые два байта равны 10. Следующие примеры показывают, как удалять элементы из rp-атрибута community:

community.delete(100, NO_EXPORT, 3561:10);

Фильтры, которые используют rp-атрибут community могут быть определены, как это показано в следующем примере:

community.contains(100, NO_EXPORT, 3561:10);

community(100, NO_EXPORT, 3561:10); # shortcut

rp-атрибуту community может быть присвоено значение, соответствующее списку community следующим образом:

community = {100, NO_EXPORT, 3561:10, 200};
community = {};

В этом первом случае, rp-атрибут community содержит значения (communities) 100, NO_EXPORT, 3561:10 и 200. В последнем случае, rp-атрибут community обнулен. rp-атрибут community может быть сравнен со списком communities следующим образом:

community == {100, NO_EXPORT, 3561:10, 200}; # точное соответствие

Чтобы повлиять на выбор маршрута, rp-атрибут BGP as_path может быть сделан длиннее путем предварительной прописи номеров AS следующим образом:

aspath.prepend(AS1);
aspath.prepend(AS1, AS1, AS1);

Следующие примеры некорректны:
med = -50;# -50 лежит вне диапазона
med = igp;# igp не является одним из значений enum
med.assign(10);# заданный метод не определен
community.append(AS3561:20);
# первый аргумент должен быть равен 3561. На рис. .28 показан более продвинутый пример, использующий rp-атрибут community. В этом примере, AS3561 базирует свое предпочтение при выборе маршрута на атрибуте community. Другие AS могут апосредовано влиять на выбор маршрутов AS3561 путем включения соответствующих значений communities в их оповещения о маршрутах.



aut-num: AS1
export: to AS2 action community.={3561:90};
to AS3 action community.={3561:80};
announce AS1
as-set: AS3561:AS-PEERS
members: AS2, AS3

aut-num: AS3561
import:from AS3561:AS-PEERS
action pref = 10;
accept community(3561:90)
import:from AS3561:AS-PEERS
action pref = 20;
accept community(3561:80)
import:from AS3561:AS-PEERS
action pref = 20;
accept community(3561:70)
import:from AS3561:AS-PEERS
action pref = 0;
accept ANY
Рис. .28. Пример политики с использованием rp-атрибута community.


Содержание раздела