Commit 8815d846 authored by Ondrej Zajicek's avatar Ondrej Zajicek
Browse files

BGP Extended communities documentation.

parent 42a0c054
Loading
Loading
Loading
Loading
+45 −6
Original line number Diff line number Diff line
@@ -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/&tilde;/ 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.