Рисунок .26. Предопределенные типы аргументов
За целочисленными и действительными предопределенными типами могут следовать младшие или старшие секции, которые позволяют специфицировать набор допустимых значений аргумента. Спецификация диапазона является опционной. Для представления целых действительных значений и символьных строк используется нотация языка Си (ANSI). За типом enum следует список имен RPSL, которые являются значениями данного типа. Булев тип может принимать значение true или false. as_number, ipv4_address, address_prefix и dns_name типы имеют те же значения, что типы фильтра (раздел 2) и фильтры политики (раздел 6). Значения фильтра следует помещать в скобки.
Синтаксис типа union имеет следующий вид:
union <type-1>, ... , <type-N>
где <type-i> является типом RPSL. Тип union может иметь тип в интервале от <type-1> до <type-N>.
Синтаксис списочного типа приведен ниже:
list [<min_elems>:<max_elems>] of <type>
В этом случае элементы списка представляют <type>, а список содержит по крайней мере <min_elems> элементов, но не больше чем <max_elems>>. Размер спецификации является опционным. Если спецификация отсутствует, то никаких регламентаций на число элементов в списке не накладывается. Значение списочного типа представляется в виде последовательности элементов, разделенных символом запятой "," и заключенных в фигурные скобки "{" и "}". Атрибут typedef в словаре определяет именованный тип следующим образом:
typedef: <name> <type>
где <name> - имя типа <type>. Атрибут typedef является особенно полезным, когда тип не является предопределенным (напр., список объединений [union], список списков и т.д.). Атрибут класса словаря protocol определяет протокол и набор параметров пиринга для этого протокола, которые используются в классе inet-rtr (раздел 9). Его синтаксис представлен ниже:
protocol: | <name> |
MANDATORY | OPTIONAL <parameter-1>( | |
<type-1-N1> [,"..."]) | |
... | |
MANDATORY | OPTIONAL <parameter-M>( | <type-M-1>,..., |
<type-M-NM> [,"..."]) |
operator=(integer[0, 65535]) |
med | |
# установить med равным 10: med = 10; | |
# установить med метрике IGP: med = igp_cost; | |
operator=(union integer[0, 65535], enum[igp_cost]) |
dpa | |
operator=(integer[0, 65535]) |
aspath | |
# prepends AS numbers from last to first order | |
prepend(as_number, ...) |
# - 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], |
community_list list of community_elm |
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]) | |
# максимальный штраф |