summaryrefslogtreecommitdiffstats
path: root/zebra/ipforward_proc.c
diff options
context:
space:
mode:
authorChris Hall <chris.hall@highwayman.com>2012-05-07 10:42:44 +0100
committerChris Hall <chris.hall@highwayman.com>2012-05-07 10:42:44 +0100
commit3f3eefca8629ba50b1621877f9ac56b5a77626ce (patch)
treebfa9d810c5ba9ecf5d3eb1709e9d613e6dd0cfeb /zebra/ipforward_proc.c
parent459df04013d375de338d081149ca55a46cc42f7b (diff)
downloadquagga-ex24b.tar.bz2
quagga-ex24b.tar.xz
Fix problems with handling of oversize BGP messagesex24b
The objective is to (as gracefully as possible) deal with outgoing UPDATE messages which simply do not in the maximum size BGP message. This can happen if very large AS_PATH or Community attributes come in, and are then extended. (Sending an UPDATE to an AS2 speaking peer can create a complete second copy of the AS_PATH !) Previous versions of Quagga would crash under these circumstances. Recent version were changed to tolerate and detect oversize messages. Any oversize message is logged as an error and discarded. This version will also withdraw prefixes if the selected route simply cannot be advertised. This version also corrects the handling of messages which are limited to the maximum BGP message size -- in particular UPDATE messages which carry a large number of IPv4/Unicast prefixes. (This was broken by the earlier efforts to handle oversize messages.) Changes in this commit: * update version to 0.99.20ex24b * where a set of attributes is too big to fit into a BGP message, or so big that not even one prefix will also fit into a BGP message, the following steps are now taken: - the BGP message is discarded and an error logged (as in other recent versions -- Quagga does not crash). - any prefixes which should have been advertised with the (broken) attributes will be withdrawn, if they have been advertised earlier with valid attributes. A further error is logged, listing the affected prefixes. - prefixes which are suppressed in this way are not counted as having been sent. At present there is no "show" command which will show which prefixes have been suppress -- TBA. * for all AFI/SAFI announce as many withdrawn prefixes as will fit in a BGP message. Previously, all AFI/SAFI other than IPv4/Unicast would send one withdrawn prefix per message. (This is still the case for announcements. It seems unlikely that many IPv6 prefixes will have the same attributes... so this does not seem worth fixing immediately.) * ensure that NOTIFICATION message cannot exceed the maximum length of a BGP message, no matter how much data is sent (!). * where IPv4/Unicast prefixes share the same attributes, they are now announced in the order received. Previously, when prefixes were added to the list hung off the 'struct bgp_advertise_attr', they were in LIFO order. * add SAFI name table. * log pthread attributes when creating a pthread. * fix scheduling of withdrawn prefixes to reduce number of BGP messages generated. Bug fixes: * fix discard of invalid IPv6 link-local nexthop (recent bug). * where amount of information that is put into a BGP message is limited by the maximum message size, fix so that this works again. (This was broken recently.) * set "Bottom of Stack" bit in MPLS VPN "tag" in MP_REACH and MP_UNREACH outgoing attributes.
Diffstat (limited to 'zebra/ipforward_proc.c')
0 files changed, 0 insertions, 0 deletions