Go to file
Paul Jakma b881c7074b bgpd: Implement revised error handling for partial optional/trans. attributes
* BGP error handling generally boils down to "reset session". This was fine
  when all BGP speakers pretty much understood all BGP messages. However
  the increasing deployment of new attribute types has shown this approach
  to cause problems, in particular where a new attribute type is "tunneled"
  over some speakers which do not understand it, and then arrives at a speaker
  which does but considers it malformed (e.g. corruption along the way, or
  because of early implementation bugs/interop issues).

  To mitigate this drafts before the IDR (likely to be adopted) propose to
  treat errors in partial (i.e.  not understood by neighbour), optional
  transitive attributes, when received from eBGP peers, as withdrawing only
  the NLRIs in the affected UPDATE, rather than causing the entire session
  to be reset.  See:

   http://tools.ietf.org/html/draft-scudder-idr-optional-transitive

* bgp_aspath.c: (assegments_parse) Replace the "NULL means valid, 0-length
  OR an error" return value with an error code - instead taking
  pointer to result structure as arg.
  (aspath_parse) adjust to suit previous change, but here NULL really
  does mean error in the external interface.
* bgp_attr.h (bgp_attr_parse) use an explictly typed and enumerated
  value to indicate return result.
  (bgp_attr_unintern_sub) cleans up just the members of an attr, but not the
  attr itself, for benefit of those who use a stack-local attr.
* bgp_attr.c: (bgp_attr_unintern_sub) split out from bgp_attr_unintern
  (bgp_attr_unintern) as previous.
  (bgp_attr_malformed) helper function to centralise decisions on how to
  handle errors in attributes.
  (bgp_attr_{aspathlimit,origin,etc..}) Use bgp_attr_malformed.
  (bgp_attr_aspathlimit) Subcode for error specifc to this attr should be
  BGP_NOTIFY_UPDATE_OPT_ATTR_ERR.
  (bgp_attr_as4_path) be more rigorous about checks, ala bgp_attr_as_path.
  (bgp_attr_parse) Adjust to deal with the additional error level that
  bgp_attr_ parsers can raise, and also similarly return appropriate
  error back up to (bgp_update_receive). Try to avoid leaking as4_path.
* bgp_packet.c: (bgp_update_receive) Adjust to deal with BGP_ATTR_PARSE_WITHDRAW
  error level from bgp_attr_parse, which should lead to a withdraw, by
  making the attribute parameter in call to (bgp_nlri_parse) conditional
  on the error, so the update case morphs also into a withdraw.
  Use bgp_attr_unintern_sub from above, instead of doing this itself.
  Fix error case returns which were not calling bgp_attr_unintern_sub
  and probably leaking memory.
* tests/aspath_test.c: Fix to work for null return with bad segments
2011-03-21 13:51:14 +00:00
bgpd bgpd: Implement revised error handling for partial optional/trans. attributes 2011-03-21 13:51:14 +00:00
doc bgpd: Remove AS Path limit/TTL functionality 2011-03-21 13:51:14 +00:00
guile [administrivia] Git should ignore backup files and .loT files 2008-08-22 20:00:46 +01:00
init [administrivia] Git should ignore backup files and .loT files 2008-08-22 20:00:46 +01:00
isisd isisd: change ISIS_METHOD to use C preprocessor 2010-04-28 20:15:44 -04:00
lib lib: zlog should clean up its memory 2011-03-21 13:30:54 +00:00
m4 [trivia] Make 'make dist' happy about ChangeLog expunge 2008-08-23 08:36:42 +01:00
ospf6d ospf6d: Extend the "[no] debug ospf6 route" vty commands 2011-03-21 13:31:16 +00:00
ospfclient [cleanup] Add log.h includes 2009-06-24 21:49:53 +01:00
ospfd ospfd: Remove oi field from LSA, have network_lsa_refresh look up when needed 2010-12-08 17:13:19 +00:00
pkgsrc [administrivia] Git should ignore backup files and .loT files 2008-08-22 20:00:46 +01:00
ports [administrivia] Git should ignore backup files and .loT files 2008-08-22 20:00:46 +01:00
redhat [rpm] some defaults for Fedora are way out of date 2008-11-29 16:42:04 +00:00
ripd ripd: resolve debug statements issue (bug 442) 2011-02-24 13:52:14 +03:00
ripngd ripngd: copy debug statements fix from ripd 2011-03-13 01:14:08 +03:00
solaris [trivia] work around ksh93 builtin name (#451) 2009-06-23 17:28:23 +04:00
tests bgpd: Implement revised error handling for partial optional/trans. attributes 2011-03-21 13:51:14 +00:00
tools tools/multiple-bgpd.sh: set some community attributes to help test them 2011-03-21 13:51:14 +00:00
vtysh [vtysh] Save vtysh history to a file 2009-06-24 22:26:38 +01:00
watchquagga all: check return value from daemon() call 2009-08-13 10:21:13 +01:00
zebra Zebra zserv: bogus conditional 2010-08-19 13:44:05 -04:00
.cvsignore Ignore <dist tarball>.asc - i always seem to have one hanging around from 2005-01-12 23:49:05 +00:00
.gitignore build: ignore mkinstalldirs and texinfo.tex 2010-04-28 20:57:44 -04:00
AUTHORS Initial revision 2002-12-13 20:15:29 +00:00
bootstrap.sh autoreconf -i 2007-02-06 19:28:28 +00:00
ChangeLog [trivia] Make 'make dist' happy about ChangeLog expunge 2008-08-23 08:36:42 +01:00
configure.ac release: 0.99.17 2010-08-19 13:36:43 +04:00
COPYING Initial revision 2002-12-13 20:15:29 +00:00
COPYING.LIB Initial revision 2002-12-13 20:15:29 +00:00
HACKING infrastructure: Express preference for published git repos 2010-11-03 07:37:23 -04:00
HACKING.pending Adjust description of tomhenderson repo. 2010-11-03 07:16:32 -04:00
INSTALL.quagga.txt de-support NetBSD 1.6, and note that FreeBSD 4 is on thin ice. 2007-02-06 19:56:31 +00:00
Makefile.am [doc] Add "--disable-doc" to configure 2009-06-25 14:01:19 +01:00
NEWS + note the meta-queue in NEWS 2008-06-07 17:54:38 +00:00
README 2004-11-12 Paul Jakma <paul@dishone.st> 2004-11-12 10:30:21 +00:00
README.NetBSD build/extra: Enhance README.NetBSD make/gmake decision. 2010-04-20 12:44:21 -04:00
REPORTING-BUGS Update for git and emphasize asking for good reports. 2010-05-05 07:51:26 -04:00
SERVICES 2607/tcp is already used by ospfapi. 2003-12-23 10:42:45 +00:00
stamp-h.in Initial revision 2002-12-13 20:15:29 +00:00
TODO [TODO] Note MED functionality we should implement 2006-03-30 14:36:23 +00:00
update-autotools * README.NetBSD: use update-autotools instead of autoreconf 2007-02-02 16:52:38 +00:00

Quagga is free software that manages various IPv4 and IPv6 routing
protocols.

Currently Quagga supports BGP4, BGP4+, OSPFv2, OSPFv3, RIPv1,
RIPv2, and RIPng as well as very early support for IS-IS.
  
See the file INSTALL.quagga.txt for building and installation instructions.
  
See the file REPORTING-BUGS to report bugs.
  
Quagga is free software. See the file COPYING for copying conditions.