mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-17 08:38:42 +00:00
BGP Extended communities documentation.
This commit is contained in:
parent
42a0c05408
commit
8815d846bf
@ -746,27 +746,48 @@ incompatible with each other (that is to prevent you from shooting in the foot).
|
||||
<cf/.ip/ which extracts the IP address from the pair, and <cf/.len/, which separates prefix
|
||||
length from the pair. So <cf>1.2.0.0/16.pxlen = 16</cf> is true.
|
||||
|
||||
<tag/int|pair|quad|ip|prefix|enum set/
|
||||
<tag/ec/ This is a specialized type used to represent BGP
|
||||
extended community values. It is essentially a 64bit value,
|
||||
literals of this type are usually written as <cf>(<m/kind/,
|
||||
<m/key/, <m/value/)</cf>, where <cf/kind/ is a kind of
|
||||
extended community (e.g. <cf/rt/ / <cf/ro/ for a route
|
||||
target / route origin communities), the format and possible
|
||||
values of <cf/key/ and <cf/value/ are usually integers, but
|
||||
it depends on the used kind. Similarly to pairs, ECs can be
|
||||
constructed using expressions for <cf/key/ and
|
||||
<cf/value/ parts, (e.g. <cf/(ro, myas, 3*10)/, where
|
||||
<cf/myas/ is an integer variable).
|
||||
|
||||
<tag/int|pair|quad|ip|prefix|ec|enum set/
|
||||
Filters recognize four types of sets. Sets are similar to strings: you can pass them around
|
||||
but you can't modify them. Literals of type <cf>int set</cf> look like <cf>
|
||||
[ 1, 2, 5..7 ]</cf>. As you can see, both simple values and ranges are permitted in
|
||||
sets.
|
||||
|
||||
For pair sets, expressions like <cf/(123,*)/ can be used to denote ranges (in
|
||||
that case <cf/(123,0)..(123,65535)/). You can also use <cf/(123,5..100)/ for range
|
||||
<cf/(123,5)..(123,100)/. You can also use <cf/*/ and <cf/a..b/ expressions
|
||||
in the first part of a pair, note that such expressions are translated to a set
|
||||
of intervals, which may be memory intensive. E.g. <cf/(*,4..20)/ is translated to
|
||||
<cf/(0,4..20), (1,4..20), (2,4..20), ... (65535, 4..20)/.
|
||||
You can also use expressions for both, pair sets and int sets. However it must
|
||||
|
||||
EC sets use similar expressions like pair sets, e.g. <cf/(rt, 123, 10..20)/
|
||||
or <cf/(ro, 123, *)/. Expressions requiring the translation (like <cf/(rt, *, 3)/)
|
||||
are not allowed (as they usually have 4B range for ASNs).
|
||||
|
||||
You can also use expressions for int, pair and EC set values. However it must
|
||||
be possible to evaluate these expressions before daemon boots. So you can use
|
||||
only constants inside them. E.g.
|
||||
<code>
|
||||
define one=1;
|
||||
define myas=64500;
|
||||
int set odds;
|
||||
pair set ps;
|
||||
ec set es;
|
||||
|
||||
odds = [ one, (2+1), (6-one), (2*2*2-1), 9, 11 ];
|
||||
odds = [ one, 2+1, 6-one, 2*2*2-1, 9, 11 ];
|
||||
ps = [ (1,one+one), (3,4)..(4,8), (5,*), (6,3..6), (7..9,*) ];
|
||||
es = [ (rt, myas, 3*10), (rt, myas+one, 0..16*16*16-1), (ro, myas+2, *) ];
|
||||
</code>
|
||||
|
||||
Sets of prefixes are special: their literals does not allow ranges, but allows
|
||||
@ -835,7 +856,7 @@ incompatible with each other (that is to prevent you from shooting in the foot).
|
||||
Clist is similar to a set, except that unlike other sets, it
|
||||
can be modified. The type is used for community list (a set
|
||||
of pairs) and for cluster list (a set of quads). There exist
|
||||
no literals of this type. There are two special operators on
|
||||
no literals of this type. There are three special operators on
|
||||
clists:
|
||||
|
||||
<cf>add(<m/C/,<m/P/)</cf> adds pair (or quad) <m/P/ to clist
|
||||
@ -858,6 +879,14 @@ incompatible with each other (that is to prevent you from shooting in the foot).
|
||||
<cf><m/C/.add(<m/P/);</cf> if <m/C/ is appropriate route
|
||||
attribute (for example <cf/bgp_community/). Similarly for
|
||||
<cf/delete/ and <cf/filter/.
|
||||
|
||||
<tag/eclist/
|
||||
Eclist is a data type used for BGP extended community lists.
|
||||
Eclists are very similar to clists, but they are sets of ECs
|
||||
instead of pairs. The same operations (like <cf/add/,
|
||||
<cf/delete/, or <cf/˜/ membership operator) can be
|
||||
used to modify or test eclists, with ECs instead of pairs as
|
||||
arguments.
|
||||
</descrip>
|
||||
|
||||
<sect>Operators
|
||||
@ -1013,12 +1042,16 @@ capability negotiation
|
||||
(RFC 3392<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc3392.txt">),
|
||||
MD5 password authentication
|
||||
(RFC 2385<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc2385.txt">),
|
||||
extended communities
|
||||
(RFC 4360<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4360.txt">),
|
||||
route reflectors
|
||||
(RFC 4456<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4456.txt">),
|
||||
multiprotocol extensions
|
||||
(RFC 4760<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4760.txt">),
|
||||
and 4B AS numbers
|
||||
(RFC 4893<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4893.txt">).
|
||||
4B AS numbers
|
||||
(RFC 4893<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc4893.txt">),
|
||||
and 4B AS numbers in extended communities
|
||||
(RFC 5668<htmlurl url="ftp://ftp.rfc-editor.org/in-notes/rfc5668.txt">).
|
||||
|
||||
|
||||
For IPv6, it uses the standard multiprotocol extensions defined in
|
||||
@ -1331,6 +1364,12 @@ with `<tt/O/') are optional.
|
||||
its own routing policy, it also has a complete freedom about which community
|
||||
attributes it defines and what will their semantics be.
|
||||
|
||||
<tag>eclist <cf/bgp_ext_community/ [O]</tag> List of extended community
|
||||
values associated with the route. Extended communities have similar usage
|
||||
as plain communities, but they have an extended range (to allow 4B ASNs)
|
||||
and a nontrivial structure with a type field. Individual community values are
|
||||
represented using an <cf/ec/ data type inside the filters.
|
||||
|
||||
<tag>quad <cf/bgp_originator_id/ [I, O]</tag> This attribute is created by the
|
||||
route reflector when reflecting the route and contains the router ID of the
|
||||
originator of the route in the local AS.
|
||||
|
Loading…
Reference in New Issue
Block a user