commit 998274cd7c559bd04d7b7f6e615ad120af915d86
Author: Paul Jakma <
[email protected]>
Date: Tue Jul 21 15:21:20 2009 +0100
[build] Bump release to 0.99.14
commit 638b70ba9893705bb3268aa00c25b8cb0e060b32
Author: Vasilis Tsiligiannis <
[email protected]>
Date: Mon Jul 20 01:25:16 2009 +0300
[bgp] Fix nexthop reachability check on confederations
* bgp_route.c: (bgp_update_main) Nexthop reachability should be checked for
confederations too in case a prefix is received from more than one
confederation peers.
commit a294365797da8b72e51507cbf92dbc6940e5103b
Author: Paul Jakma <
[email protected]>
Date: Tue Jul 21 14:02:04 2009 +0100
[bgpd] fix typo made by paul in previous commit
commit e8eb000e15e2bbe63467d7c056f2b21b72ba7bd6
Author: Timo Teräs <
[email protected]>
Date: Tue Feb 17 12:14:23 2009 +0200
[bgpd] Avoid zombie accepted peer entries
Currently, when accepting the connection, it can be left as zombie, when the
peer just initiates a connection, but never sends data (and the TCP
connection end packets are lost). This happens because for accepted
connections a temporary new peer entry is created until OPEN message is
exchanged, and this temporary peer entry does not get the hold time
parameter set at all.
* bgp_network.c: (bgp_accept) Set hold time and keepalive values for ACCEPT
peers.
commit e7cc3b383e5e9190aa7784554c605a3a661ebe2b
Author: Nick Hilliard <
[email protected]>
Date: Tue Mar 17 22:14:25 2009 +0000
[bgpd] Small buffer overrun in bgp_clear_node_queue_init
* bgp_route.c: (bgp_clear_node_queue_init) fix buffer
overrun.
commit 67b9467f6cad5097a3e4c6e49348be4d6c17a5bb
Author: Chris Caputo <
[email protected]>
Date: Sat Jul 18 04:02:26 2009 +0000
[zebra] Silence noisy process_subq
zebra_rib.c: process_subq(): #ifdef out debug code.
commit 228da42898c4f7bd72d9c1ee4135108e8d40d860
Author: Chris Caputo <
[email protected]>
Date: Sat Jul 18 05:44:03 2009 +0000
[bgpd] Stability fixes including bugs 397, 492
I've spent the last several weeks working on stability fixes to bgpd.
These patches fix all of the numerous crashes, assertion failures, memory
leaks and memory stomping I could find. Valgrind was used extensively.
Added new function bgp_exit() to help catch problems. If "debug bgp" is
configured and bgpd exits with status of 0, statistics on remaining
lib/memory.c allocations are printed to stderr. It is my hope that other
developers will use this to stay on top of memory issues.
Example questionable exit:
bgpd: memstats: Current memory utilization in module LIB:
bgpd: memstats: Link List : 6
bgpd: memstats: Link Node : 5
bgpd: memstats: Hash : 8
bgpd: memstats: Hash Bucket : 2
bgpd: memstats: Hash Index : 8
bgpd: memstats: Work queue : 3
bgpd: memstats: Work queue item : 2
bgpd: memstats: Work queue name string : 3
bgpd: memstats: Current memory utilization in module BGP:
bgpd: memstats: BGP instance : 1
bgpd: memstats: BGP peer : 1
bgpd: memstats: BGP peer hostname : 1
bgpd: memstats: BGP attribute : 1
bgpd: memstats: BGP extra attributes : 1
bgpd: memstats: BGP aspath : 1
bgpd: memstats: BGP aspath str : 1
bgpd: memstats: BGP table : 24
bgpd: memstats: BGP node : 1
bgpd: memstats: BGP route : 1
bgpd: memstats: BGP synchronise : 8
bgpd: memstats: BGP Process queue : 1
bgpd: memstats: BGP node clear queue : 1
bgpd: memstats: NOTE: If configuration exists, utilization may be expected.
Example clean exit:
bgpd: memstats: No remaining tracked memory utilization.
This patch fixes bug #397: "Invalid free in bgp_announce_check()".
This patch fixes bug #492: "SIGBUS in bgpd/bgp_route.c:
bgp_clear_route_node()".
My apologies for not separating out these changes into individual patches.
The complexity of doing so boggled what is left of my brain. I hope this
is all still useful to the community.
This code has been production tested, in non-route-server-client mode, on
a linux 32-bit box and a 64-bit box.
Release/reset functions, used by bgp_exit(), added to:
bgpd/bgp_attr.c,h
bgpd/bgp_community.c,h
bgpd/bgp_dump.c,h
bgpd/bgp_ecommunity.c,h
bgpd/bgp_filter.c,h
bgpd/bgp_nexthop.c,h
bgpd/bgp_route.c,h
lib/routemap.c,h
File by file analysis:
* bgpd/bgp_aspath.c: Prevent re-use of ashash after it is released.
* bgpd/bgp_attr.c: #if removed uncalled cluster_dup().
* bgpd/bgp_clist.c,h: Allow community_list_terminate() to be called from
bgp_exit().
* bgpd/bgp_filter.c: Fix aslist->name use without allocation check, and
also fix memory leak.
* bgpd/bgp_main.c: Created bgp_exit() exit routine. This function frees
allocations made as part of bgpd initialization and, to some extent,
configuration. If "debug bgp" is configured, memory stats are printed
as described above.
* bgpd/bgp_nexthop.c: zclient_new() already allocates stream for
ibuf/obuf, so bgp_scan_init() shouldn't do it too. Also, made it so
zlookup is global so bgp_exit() can use it.
* bgpd/bgp_packet.c: bgp_capability_msg_parse() call to bgp_clear_route()
adjusted to use new BGP_CLEAR_ROUTE_NORMAL flag.
* bgpd/bgp_route.h: Correct reference counter "lock" to be signed.
bgp_clear_route() now accepts a bgp_clear_route_type of either
BGP_CLEAR_ROUTE_NORMAL or BGP_CLEAR_ROUTE_MY_RSCLIENT.
* bgpd/bgp_route.c:
- bgp_process_rsclient(): attr was being zero'ed and then
bgp_attr_extra_free() was being called with it, even though it was
never filled with valid data.
- bgp_process_rsclient(): Make sure rsclient->group is not NULL before
use.
- bgp_processq_del(): Add call to bgp_table_unlock().
- bgp_process(): Add call to bgp_table_lock().
- bgp_update_rsclient(): memset clearing of new_attr not needed since
declarationw with "= { 0 }" does it. memset was already commented
out.
- bgp_update_rsclient(): Fix screwed up misleading indentation.
- bgp_withdraw_rsclient(): Fix screwed up misleading indentation.
- bgp_clear_route_node(): Support BGP_CLEAR_ROUTE_MY_RSCLIENT.
- bgp_clear_node_queue_del(): Add call to bgp_table_unlock() and also
free struct bgp_clear_node_queue used for work item.
- bgp_clear_node_complete(): Do peer_unlock() after BGP_EVENT_ADD() in
case peer is released by peer_unlock() call.
- bgp_clear_route_table(): Support BGP_CLEAR_ROUTE_MY_RSCLIENT. Use
struct bgp_clear_node_queue to supply data to worker. Add call to
bgp_table_lock().
- bgp_clear_route(): Add support for BGP_CLEAR_ROUTE_NORMAL or
BGP_CLEAR_ROUTE_MY_RSCLIENT.
- bgp_clear_route_all(): Use BGP_CLEAR_ROUTE_NORMAL.
Bug 397 fixes:
- bgp_default_originate()
- bgp_announce_table()
* bgpd/bgp_table.h:
- struct bgp_table: Added reference count. Changed type of owner to be
"struct peer *" rather than "void *".
- struct bgp_node: Correct reference counter "lock" to be signed.
* bgpd/bgp_table.c:
- Added bgp_table reference counting.
- bgp_table_free(): Fixed cleanup code. Call peer_unlock() on owner if
set.
- bgp_unlock_node(): Added assertion.
- bgp_node_get(): Added call to bgp_lock_node() to code path that it was
missing from.
* bgpd/bgp_vty.c:
- peer_rsclient_set_vty(): Call peer_lock() as part of peer assignment
to owner. Handle failure gracefully.
- peer_rsclient_unset_vty(): Add call to bgp_clear_route() with
BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.
* bgpd/bgp_zebra.c: Made it so zclient is global so bgp_exit() can use it.
* bgpd/bgpd.c:
- peer_lock(): Allow to be called when status is "Deleted".
- peer_deactivate(): Supply BGP_CLEAR_ROUTE_NORMAL purpose to
bgp_clear_route() call.
- peer_delete(): Common variable listnode pn. Fix bug in which rsclient
was only dealt with if not part of a peer group. Call
bgp_clear_route() for rsclient, if appropriate, and do so with
BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.
- peer_group_get(): Use XSTRDUP() instead of strdup() for conf->host.
- peer_group_bind(): Call bgp_clear_route() for rsclient, and do so with
BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.
- bgp_create(): Use XSTRDUP() instead of strdup() for peer_self->host.
- bgp_delete(): Delete peers before groups, rather than after. And then
rather than deleting rsclients, verify that there are none at this
point.
- bgp_unlock(): Add assertion.
- bgp_free(): Call bgp_table_finish() rather than doing XFREE() itself.
* lib/command.c,h: Compiler warning fixes. Add cmd_terminate(). Fixed
massive leak in install_element() in which cmd_make_descvec() was being
called more than once for the same cmd->strvec/string/doc.
* lib/log.c: Make closezlog() check fp before calling fclose().
* lib/memory.c: Catch when alloc count goes negative by using signed
counts. Correct #endif comment. Add log_memstats_stderr().
* lib/memory.h: Add log_memstats_stderr().
* lib/thread.c: thread->funcname was being accessed in thread_call() after
it had been freed. Rearranged things so that thread_call() frees
funcname. Also made it so thread_master_free() cleans up cpu_record.
* lib/vty.c,h: Use global command_cr. Add vty_terminate().
* lib/zclient.c,h: Re-enable zclient_free().
commit 54a15182e05ca757db3bb90a4135e9f8fd3c84f2
Author: Chris Caputo <
[email protected]>
Date: Sat Jul 18 05:42:34 2009 +0000
[bgpd] Fix compiler warnings related to MD5
This patch fixes:
bgp_network.c: In function 'bgp_md5_set':
bgp_network.c:107: warning: cast from pointer to integer of different size
bgp_network.c: In function 'bgp_socket':
bgp_network.c:447: warning: cast to pointer from integer of different size
commit 62c9f504bdd4b09df6cf677e96367f3b31ef9dea
Author: Paul Jakma <
[email protected]>
Date: Sun Jul 19 17:33:21 2009 +0100
[build] fix default CFLAGS and squish warning
* configure.ac: Move down the AC_SYS_LARGEFILE test - it was setting CFLAGS
and so disabling the default CFLAGS setting section.
Squish warning by adding AC_CONFIG_MACRO_DIR on the reccommendation of
autoreconf.
commit fd35b948dbb35674cd9ded431f94b59aeced40cc
Author: Paul Jakma <
[email protected]>
Date: Thu Jul 16 19:27:32 2009 +0100
[bgpd] Bug #533: Fix crash with copy/pasted commands, inc 'no bgp ...'
* bgpd.c: Removal of (struct bgp *) from the master list was being left to
bgp_free time. This meant there was a window of time between bgp_delete
and refcounts hitting 0 (e.g. routes to be processed) where bgp_lookup's
could return a deleted (struct bgp *).
(bgp_delete) This is the logical place where a (struct bgp *) should lose
its visibility, so move the deletion from the bgp-master list to here,
from bgp_free.
Many thanks to Fritz Reichmann for his thorough debugging of the problem
and testing of fixes and Chris Caputo for his further analysis.
commit 3fa3f957e70f594cc2c1cac03644ddf48554c178
Author: Stephen Hemminger <
[email protected]>
Date: Sat Jul 11 21:27:51 2009 -0700
[lib] Fix IPv6 normalisation
* lib/sockunion.c: (sockunion_normalise_mapped) The code to normalize
address was not copying port value - probably reason why IPV4 in IPV6
never worked right.
commit 9b4ef258a9d9c5f1052afe0e19ebaef9f6740fa2
Author: Tom Henderson <
[email protected]>
Date: Thu Jul 16 17:20:37 2009 +0100
[ospf6d] Fix regression in monotonic time patch - LSA max-aging broke
* ospf6_lsa.c: (ospf6_lsa_premature_aging) set age to MAX_AGE - don't
rely on 0 magically meaning same.
(ospf6_lsa_age_current) handle MAXAGE.
commit 41b2373cece77f0cc9a06fba076c99a7be653593
Author: Paul Jakma <
[email protected]>
Date: Tue Jun 30 16:12:49 2009 +0100
[lib/cleanup] Use a typedef for the thread type
* lib/thread.{c,h}: As per subject. This will avoid head-scratching for next
person who adds a thread-type and gets strange breakage.
commit bd2462425205a681d75e04c94a94bf4cea5da58b
Author: Joakim Tjernlund <
[email protected]>
Date: Mon Jan 5 17:44:46 2009 +0100
[ospfd] Do not use stale Network/Router LSAs
Should a self originated Network/Router LSA with higher
LS seq. nr. be received we should flood and install it in
the LSDB but we cannot use it for our internal calculations
as it is stale.
Reorginate an new LSA to replace the stale one as soon
as possible.
commit 650f76c2e1b0b12e1c46fdd3be22c5f505245d83
Author: Paul Jakma <
[email protected]>
Date: Thu Jun 25 18:06:31 2009 +0100
[bgpd] Log a debug/update warning if filters are configured but don't exist
* bgp_route.c: (bgp_{input,output}_filter) Log a debug warning if a route is
received or sent and a filter name is configured for a prefix, as or
distribute list but none is found - guaranteed configuration mistake.
commit 439c52f19007badffc6707673121f5a76784e728
Author: Joakim Tjernlund <
[email protected]>
Date: Mon Dec 1 16:25:06 2008 +0100
Add test for Internet checksum.
Add 2 impl. of the Internet Checksum. One new optimized nad
one form RFC 1071. Turns out that the current Quagga in_cksum()
is buggy. On Big Endian routers it miscalculates odd sized buffers.
commit 77a1c4e05ca5a7d7bf07456758f7c934ee867884
Author: Joakim Tjernlund <
[email protected]>
Date: Sun Feb 1 11:12:11 2009 +0100
[ospfd] compare ifIndex too when matching paths
ospf_path_lookup(), ospf_route_match_same() and
ospf_ase_route_match_same() needs to
compare if the interface matches too.
commit cbcd9bfc503f08b99f5360b1aae3a5362d25a665
Author: Joakim Tjernlund <
[email protected]>
Date: Mon Feb 16 09:40:39 2009 +0100
[doc] Add "--disable-doc" to configure
Configure option "--disable-doc" will prevent building
the documents under doc. Saves build time and the need to
have document building tools installed. Useful when your build
machine is different from your development machine.
commit 3d8617b853af511ca5f019b2f51c7902e2689212
Author: Joakim Tjernlund <
[email protected]>
Date: Wed Feb 4 15:05:19 2009 +0100
[ospfd] external LSA route_unlock_node() fixes
A few route_unlock_node() calls was missing.
commit f65431380428c3cb8eb5c0a0ac93debc30717a3f
Author: Joakim Tjernlund <
[email protected]>
Date: Tue Nov 4 13:37:29 2008 +0000
[ospfd] Fix a few LSA performance "bugs"
ospf_lsa_install() will calculate LSA checksum so no
need to do it before calling ospf_lsa_install().
Set the OSPF_LSA_SELF_CHECKED flag on own LSA's to
save ospf_lsa_is_self_originated() some work.
Do not memset() memory that is about to overwritten
with memcpy().
commit c3a5606302777cdd33d4025fc30bed723fc84d79
Author: Joakim Tjernlund <
[email protected]>
Date: Wed Jun 24 19:15:36 2009 +0200
zebra: Static route does not reach kernel.
A static route like below: ip route 172.16.1.0/30 192.168.101.162 11
does not move properly to a new interface when the
interface used goes down. Zebra reports that it have
moved but kernel isn't informed so the route is lost.
* zebra_rib.c: (nexthop_active_update) if ifindex has changed, then the
route should be considered to have changed.
Signed-off-by: Joakim Tjernlund <
[email protected]>
commit 3f4ab7f9e9ffaee7c448744f45d6e5e2176cce89
Author: Tomasz Pala <
[email protected]>
Date: Wed Jun 24 22:23:11 2009 +0100
[vtysh] Save vtysh history to a file
vtsh_main.c: save 1000 last lines of history to $HOME/.history_quagga (the
file must be created by hand first, this is intended behaviour)
commit 80abd9fe37d8aa5d929686f3d4a717b72bfacb3c
Author: Tomasz Pala <
[email protected]>
Date: Wed Jun 24 22:09:46 2009 +0100
[configure] Allow for large-file support, e.g. for log files >2GB
commit 3fc1eca92a7022f1c5b567505a7d86aab0d3cbd4
Author: Tomasz Pala <
[email protected]>
Date: Wed Jun 24 21:48:22 2009 +0100
[cleanup] Add log.h includes
commit 2a71e9ce89c6f76c099dea67dddbe8da454d9de7
Author: Tomasz Pala <
[email protected]>
Date: Wed Jun 24 21:36:50 2009 +0100
[bgpd] Add 'show ip bgp view WORD neighbors IP (advertised|received)-routes'
* bgp_route.c: Was missing these commands.
commit c9035ccd13078b6a5d53566979a66c1ac892b47a
Author: Dmitry Tejblum <
[email protected]>
Date: Wed Jun 24 20:14:30 2009 +0400
[ospfd] discount IP header size from a new LSA pkt
commit 014b670e02cc1f38e8e4e786269fc1787412f9b7
Author: Denis Ovsienko <
[email protected]>
Date: Tue Jun 23 21:10:45 2009 +0400
[bgpd] review 32-bit AS-path hotfix for 0.99.12
The patch by Chris Caputo, which was used to prepare 0.99.12
release, consists of three parts:
1. memory allocation fix itself
2. fix for warnings about constant variables
3. fix for printf format specs (%d was used instead of %u)
It was confirmed later, that:
a. a much simpler bugfix was available for memory allocation
b. committed version of the bugfix wasn't optimal CPU-wise
At this point I consider reasonable to revert the allocation
portion of that patch and to replace it with the shorter
version, which is:
-#define ASN_STR_LEN (5 + 1)
+#define ASN_STR_LEN (10 + 1)
Other two parts of Mr. Caputo's patch remain intact.
commit d13c3b4fcf802f904ef47ad82fdc9763fc704fdf
Author: Mathieu Goessens <
[email protected]>
Date: Tue Jun 23 15:59:45 2009 +0100
[zebra] linux policy routing support with ipv6
Quagga support linux policy routing (ip route ... table $X) with zebra.conf
table $X option. It works fine on ipv4. On ipv6 the parameter is ignored
(table 0 is used).
* zebra/...: Pass appropriate table arg to rib_{add,delete}_ipv6
commit 3523bea8cbe98c83e3d1bdeb60180c8e59622773
Author: Jingjing Duan <
[email protected]>
Date: Tue Jun 23 17:28:23 2009 +0400
[trivia] work around ksh93 builtin name (#451)
ksh93 script cannot have 'stop' functions w/o cancelling
existing definition first. Fixed.
commit 50aef6f3b0e36b56cfa9f3d374be0c1d25c30c45
Author: Chris Caputo <
[email protected]>
Date: Tue Jun 23 06:06:49 2009 +0000
Fix "show ip bgp dampened-paths" garbage output.
* bgpd/bgp_damp.c: Make bgp_damp_reuse_time_vty() accept a buffer and
length, rather than returning a local var buffer whose contents can get
trounced. Remove duplicate BGP_UPTIME_LEN define.
* bgpd/bgp_damp.h: bgp_damp_reuse_time_vty() prototype change.
* bgpd/bgp_route.c: Provide bgp_damp_reuse_time_vty() with a buffer and
length. Remove duplicate BGP_UPTIME_LEN define.
This problem was noticed in 2005...
http://hibernia.jakma.org/~paul/patches/quagga-test.diff
...but the fix didn't make it into the code.
Signed-off-by: Chris Caputo <
[email protected]>
commit 6e79f8bba438823d84b7464a9acc1e6fc9126a27
Author: Chris Caputo <
[email protected]>
Date: Tue Jun 23 05:55:57 2009 +0000
Fix vtysh based "write term" output.
* vtysh/vtysh.c: "end" should be printed at the bottom, not the top.
* vtysh/vtysh_config.c: PROTOCOL_NODE was not being handled, and thus was
being displayed at the top of a config, rather than in its rightful
place near the bottom.
Signed-off-by: Chris Caputo <
[email protected]>
commit 2b35ae41c2c5d39801c943fa740c72fc15613141
Author: Chris Caputo <
[email protected]>
Date: Tue Jun 23 05:34:29 2009 +0000
Fixes to RFC2385/MD5 BGP
* bgpd/bgp_network.c: Fix MD5 listen in IPv4 version of bgp_socket() by
adding listen socket to listen_sockets list so that MD5 passwords can
get set.
* lib/sockopt.c: (sockopt_tcp_signature) Fix bogus "% Error while applying
TCP-Sig to session(s)" / "can't set TCP_MD5SIG option" startup error
messages by not returning error when there isn't one.
commit 774eb1524c3a1e0a9567e6aff3315b4686ab3e75
Author: Dmitry Tejblum <
[email protected]>
Date: Tue Jun 23 17:16:32 2009 +0400
[ospfd] cancel OSPF timer hack in nsm_change_state
This piece of code causes all Quagga routers on a broadcast link to
send a HELLO packet simultaneously if they see a new neighbor. It also
resets the HELLO timer, so all the quagga routers will continue to
send HELLO packets simultaneously in the future. This is not good
(especially on networks with a lot of Quagga routers connected), and
is explicitly discouraged by the OSPF standard, RFC 2328 (chapter
4.4.Timers).
I suggest to remove the code snippet, it does not provide much benefit
anyway.
commit b60668d092f1778395b6c10b406059b8cbf235b8
Author: Chris Caputo <
[email protected]>
Date: Sun May 3 04:40:57 2009 +0000
RFC 4191 Default Router Preference support for router advertisements
Adds "ipv6 nd router-preference (high|medium|low)" and
"no ipv6 nd router-preference" interface commands.
Files modified:
doc/ipv6.texi
zebra/interface.c
zebra/interface.h
zebra/rtadv.c
zebra/rtadv.h
Signed-off-by: Chris Caputo <
[email protected]>