[bgpd] Add support for AS_PATHLIMIT / draft-ietf-idr-as-pathlimit

2007-07-31 Paul Jakma <paul.jakma@sun.com>

	* (general) Support for draft-ietf-idr-as-pathlimit-03.
	* bgp_attr.h: (struct attr) Add pathlimit struct
          bgp_attr.c: (attr_str) Add BGP_ATTR_AS_PATHLIMIT string.
          (attrhash_key_make) tally pathlimit too
          (attrhash_cmp) cmp pathlimit attr
          (bgp_attr_aspathlimit) New, parse AS_PATHLIMIT attr.
          (bgp_attr_parse) ditto
          (bgp_packet_attribute) Write out AS_PATHLIMIT when set
          (bgp_dump_routes_attr) ditto
         * bgp_route.h: (struct bgp_static) Add TTL field
         * bgp_route.c: (bgp_announce_check) Drop paths that are over
           their hop-count TTL before sending via EBGP.
           Mangle ASN in pathlimit for confeds/private as best we can.
           (bgp_static_update_{rsclient,main}) Add any configure pathlimit
           information.
           (bgp_pathlimit_update_parents) New, update atomic-aggr setting for
           parents of an aspathlimit'ed static.
           (bgp_static_set) Add TTL argument, for all the 'bgp network'
           commands.
           Call previous for TTL changed statics.
           (bgp_static_unset) Call pathlimit_update_parents.
           (various bgp network commands) Add 'pathlimit <0-255>' qualifier
           to all the various forms, bar route-map - which can set ttl
           itself.
         * bgp_routemap.c: (general) Add support for 'set pathlimit ttl' and
           'match pathlimit as'.
         * doc/bgpd.texi: Document 'network ... pathlimit <ttl>'
diff --git a/doc/ChangeLog b/doc/ChangeLog
index b8c81e7..5fcb195 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2007-07-31 Paul Jakma <paul.jakma@sun.com>
+
+	* bgpd.texi: Document 'network ... pathlimit <ttl>'
+
 2007-05-01 David L Stevens <dlstevens@us.ibm.com>
 
 	* main.texi: added route-map, prefix-list, ip protocol
diff --git a/doc/bgpd.texi b/doc/bgpd.texi
index d82f6c3..bdfd6e4 100644
--- a/doc/bgpd.texi
+++ b/doc/bgpd.texi
@@ -145,10 +145,33 @@
 @end example
 This configuration example says that network 10.0.0.0/8 will be
 announced to all neighbors.  Some vendors' routers don't advertise
-routes if they aren't present in their IGP routing tables; @code{bgp}
+routes if they aren't present in their IGP routing tables; @code{bgpd}
 doesn't care about IGP routes when announcing its routes.
 @end deffn
 
+@deffn {BGP} {network @var{A.B.C.D/M} pathlimit <0-255>} {}
+This command configures a route to be originated into BGP, just as with the
+previous command, but additionally sets an AS-Pathlimit TTL to be advertised
+on the route. See draft-ietf-idr-as-pathlimit.
+
+Specifying a TTL of 0 can be used to remove pathlimit from a previously
+configured network statement.
+
+Note that when advertising prefixes with AS-Pathlimit set, all less-specific
+prefixes advertised SHOULD also have the Atomic-Aggregate attribute set.
+Failure to do so increases the risks of accidental routing loops occuring.
+
+This implementation will try to automatically set Atomic-Aggregate as
+appropriate on any less-specific prefixes originated by the same speaker,
+however it will not (and often can not) do so where @b{other} speakers in
+the AS are originating more specifics.
+
+Hence the system administrator must take care to ensure that all
+less-specific prefixes originated carry atomic-aggregate as appropriate, by
+manually configuring speakers originating less-specifics to set
+Atomic-Aggregate on those advertisements!
+@end deffn
+
 @deffn {BGP} {no network @var{A.B.C.D/M}} {}
 @end deffn
 
diff --git a/doc/routemap.texi b/doc/routemap.texi
index db3e72d..9ac001c 100644
--- a/doc/routemap.texi
+++ b/doc/routemap.texi
@@ -155,6 +155,10 @@
 Matches the specified  @var{community_list}
 @end deffn
 
+@deffn {Route-map Command} {match pathlimit as @var{ASN}} {}
+Matches the specified AS-Pathlimit @var{ASN}.
+@end deffn
+
 @node Route Map Set Command
 @section Route Map Set Command
 
@@ -190,6 +194,16 @@
 Set the BGP-4+ link local IPv6 nexthop address.
 @end deffn
 
+@deffn {Route-map Command} {set pathlimit ttl @var{ttl}} {}
+Sets the specified AS-Pathlimit @var{ttl} on the route. This will also cause
+the AS to be set to the local AS. 
+
+Note that the AS-Pathlimit RFC specifies that speakers advertising this
+attribute should set Atomic-aggregate on all less specific routes. Setting
+AS-Pathlimit by route-map does not do this, the user must do so themselves,
+as they wish. 
+@end deffn
+
 @node Route Map Call Command
 @section Route Map Call Command