| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes a reported assert() in 'no neighbor xxx'.
It also fixes other issues found when reviewing and testing that.
Also fixed is a reported segfault caused by prefix lists without explicit
sequence numbers.
Peer State
==========
Tightened up the peer state handling, including:
* shades of pIdle -- depending on some peer flags and the session, if any
* state transitions -- particularly pEstablished -> pIdle or pClearing
* handling if deleting peer and associated session
* handling of PEER_DOWN_XXX -- why peer was last downed
* handling of last NOTIFICATION sent/received
RS Client RIBs
==============
Cleared up places where RS Client RIBs were not disposed of properly when a
peer's afi/safi state changed, in particular:
-- when deactivating an afi/safi
-- when unsetting the rs client state for an afi/safi
-- when binding a peer to a group for an afi/safi
In the past these issues were probably invisible, except for a slight leak of
memory. With the newer code these issues triggered some asserts when closing
down a peer or the entire program.
Program Termination
===================
Now terminates by deleting all peers -- essentially 'no neighbor' for all
peers. Each time a peer is set to be deleted bm->peer_linger_count is
incremented, when the peer finally is deleted, the count is decremented.
So while in program_terminating state, all nexuses continue to run until
the Routing Engine spots that there are no peers left to delete. Then all
nexuses are shut down and the program finally terminates. To do this, when
termination starts a new Routing Engine foreground task is added, which
calls program_terminate_if_all_peers_deleted().
Accept() Status for Session
===========================
The accept() code needs to find the session associated with the incoming IP
address. Then it needs to see if can accept the incoming connection.
It looks up the IP address in the Peer Index (under its Mutex).
Previously: the Peer Index entry contained a pointer to the accepting
connection (if any), and the session had a pointer to the Peer Index entry
so that it could set/clear the accept field in that entry.
Now: have removed the accept field in the Peer Index entry, and the pointer
from the session to that entry.
There is now an "accept" flag in the session structure -- so setting/clearing
accept does not have to fiddle with any state to do with the peer. Which
seems cleaner.
To find the session, the accept() code goes via the Peer Index and then via
the peer to find the session. This is done under the Peer Index Mutex. To
support that, the Routing Engine only changes the peer->session pointer under
the same Mutex.
General Changes
===============
1. name changes: peer_lock -> bgp_peer_lock etc.
2. bgp_notify_send -> bgp_peer_down_error
bgp_notify_send_with_data -> bgp_peer_down_error_with_data
3. name changes: bgp_peer_sIdle -> bgp_peer_pIdle etc.
4. changing int to bool
5. added "received" flag to bgp_notify structure
Files Affected
==============
configure.ac -- set version to 0.99.15ex02
bgpd/bgp.h -- format changes only
bgpd/bgp_advertise.c -- (1)
bgpd/bgp_attr.c -- (2)
bgpd/bgp_common.h -- (3)
bgpd/bgp_connection.c -- (4) for session->active
- adding session->accept flag
- removing peer index accept entry
- adding bgp_connection_query_accept()
bgpd/bgp_connection.h -- adding bgp_connection_query_accept()
bgpd/bgp_debug.c -- (3) (5)
- changed bgp_notify_print() to remove "sending"
parameter and use (5)
bgpd/bgp_debug.h -- changed bgp_notify_print()
bgpd/bgp_fsm.c -- added TODO for NSF and for
CollisionDetectEstablishedState
bgpd/bgp_main.c -- (4) for various flags
- added static bool program_terminating
- used "mqb_priority" name instead of "1"
- ignore SIGHUP and SIGTERM messages once is
"program_terminating"
- added program_terminate_if_all_peers_deleted()
- in SIGTERM: set program_terminating and add
the foreground hook.
bgpd/bgp_mplsvpn.c -- (3)
bgpd/bgp_msg_read.c -- (5) set the "received" flag on incoming
notifications
- update call of bgp_notify_print()
bgpd/bgp_msg_write.c -- update call of bgp_notify_print()
bgpd/bgp_network.c -- (4)
bgpd/bgp_nexthop.c -- (3)
bgpd/bgp_notification.c -- add "received" flag to notification structure,
which is false by default.
bgpd/bgp_notification.h -- add "received" flag to notification structure
- add bgp_notify_set_received()
- add bgp_notify_get_received()
bgpd/bgp_open.c -- (2)
bgpd/bgp_open_state.c -- in bgp_peer_open_state_receive():
- copy the session->hold_timer_interval
and session->keepalive_timer_interval
values (as negotiated by the BGP Engine)
into the peer
- set PEER_CAP_RESTART_RCV if have
- fix typo, use: open_recv->can_preserve
not: open_recv->can_g_restart
bgpd/bgp_packet.c -- delete bgp_notify_send() and
bgp_notify_send_with_data()
- (1) (2) (3)
- bgp_clear_route_normal() -> bgp_clear_routes()
and now returns "completed" state.
bgpd/bgp_packet.h -- delete: bgp_keepalive_send()
bgp_open_send()
bgp_notify_send()
bgp_notify_send_with_data()
bgpd/bgp_peer.c -- changed:
bgp_session_has_established()
bgp_session session()
bgp_session_has_disabled()
to void and to take session, not peer.
- removed lock of session structure in
bgp_session_do_event() -- was holding the lock
for far longer than necessary, particularly
when clearing routes !
- in bgp_session_has_established():
- lock session structure where and only where
required
- tidied up timer handling
- in bgp_session_has_stopped():
- extend IdleHoldTime
- examine notification etc to see why session
came down.
- invoke bgp_peer_down_notify(), which will
start the process of downing the peer.
- in bgp_session_has_disabled():
- removed defer_enable
- removed calls to bgp_peer_stop() etc. That
is done in bgp_peer_down() et all.
- now if session is marked delete_me, then do
that; otherwise, can enable again.
- removed program_terminate_if_all_disabled(),
replaced by new mechanism
- in bgp_peer_stop():
- changed to void function and added nsf
parameter.
- sets pClearing state.
- MUST now only be called when pEstablished.
- removed some code to bgp_peer_reset_idle().
So... bgp_peer_stop() brings pEstablished
peer to halt, while bgp_peer_reset_idle()
prepares it for new session.
- now passes nsf to bgp_clear_all_routes(),
which returns flag to say whether task is
complete or whether it continues in
background.
- clearing of NSF_MODE and flags moved to
bgp_peer_reset_idle().
- sets pIdle state if route clearing completed
- renamed peer_nsf_stop() -> bgp_peer_nsf_stop()
- if is pIdle or pClearing and have NSF
routes, then stops timers and clears out
all the NSF routes.
- added bgp_peer_clear_all_stale_routes()
- added bgp_peer_shutdown() -- used when peer
is downed for PEER_DOWN_USER_SHUTDOWN !
- added bgp_peer_reset_idle() -- used when peer
goes pIdle or is about to enable session.
- deleted bgp_peer_timers_stop() -- see
bgp_peer_change_status().
- replaced bgp_peer_clearing_completed()
- if pClearing, sets pIdle and enables if can
- if pDeleting, unlocks peer
- replaced bgp_timer_set() by
bgp_peer_timers_set() -- deals in new peer
states only.
- renamed peer_new() -> bgp_peer_new()
- renamed peer_create() -> bgp_peer_create()
- added setting of PEER_STATUS_REAL_PEER
- changed auto activation to reflect what
actually happens.
- changed bgp_session_init_new() call because
it now sets peer->session.
- sets timers suitable for pIdle. before any
auto enable.
- renamed peer_delete() -> bgp_peer_delete()
- removed call of peer_nsf_stop()
- added bgp_peer_down() with
PEER_DOWN_NEIGHBOR_DELETE -- which does all
the work of flattening an active peer, and
returns it pIdle or pClearing.
- if pClearing, lock the peer so that when
clearing completes, it can unlock it.
- sets pDeleting state, and increments
bm->peer_linger_count.
- tightened procedure for dealing with various
references to peer -- including use of the
PEER_STATUS_REAL_PEER flag.
- tidied up dealing with rsclient RIBs and
shared pointers to group versions of same.
- removed call of bgp_timer_set(), now done
in bgp_peer_change_status().
- now unregisters the peer immediately, so
can register a new one before this one
is completely deleted.
- deletes session if it can.
- moved peer_lock() & peer_unlock() from bgpd.c
and renamed bgp_peer_lock() & bgp_peer_unlock()
- renamed peer_free() bgp_peer_free() and made
static.
- peer must be pDeleting -- so have been
through bgp_peer_delete()
- peer->session must be NULL
- decrements bm->peer_linger_count
- deleted peer->clear_node_queue handling
- deleted bgp_session_free() -- that's done
in bgp_peer_delete() or elsewhere.
- unlocked bgp at end
- assert peer->session == NULL, to be sure
- set peer->lock == -54321
- in bgp_peer_enable():
- recast as switch() on peer state
- added bgp_peer_reset)idle() before enabling
the session.
- renamed bgp_peer_disable() -> bgp_peer_down()
- takes PEER_DOWN_XXX argument, which drives
what notification is sent, and sets the
peer->last_reset status. A small number of
PEER_DOWN_XXX are special.
- removed the IdleHoldTimer stuff.
- copies outbound notification to session.
- for PEER_DOWN_NSF_CLOSE_SESSION, keep non-
stale routes.
- for PEER_DOWN_USER_SHUTDOWN, do
bgp_peer_shutdown()
- after disabling any session and doing any
shutdown, proceed as per peer->status:
pIdle -- flush stale routes
bgp_peer_enable()
pEstablished -- bgp_peer_stop()
pClearing -- flush stale routes
- added bgp_peer_down_notify().
- added bgp_peer_down_error(), which replaces
bgp_notify_send().
- added bgp_peer_down_error_with_data(), which
replaces bgp_notify_send_with_data()
The "down_error" functions calculate the
appropriate PEER_DOWN_XXX value, and call
bgp_peer_down_notify().
- added bgp_peer_map_peer_down(), to map
PEER_DOWN_XXX to a notification message.
- added bgp_peer_map_notification, to map
notification message to a PEER_DOWN_XXX.
- renamed peer_change_status() ->
bgp_peer_change_status()
- do most things only if state changes.
- add call to bgp_peer_reset_idle() as enter
pIdle state.
- at all times do bgp_peer_timer_set()
- renamed peer_timers_set() ->
bgp_peer_timers_set()
- commoned up code for Graceful Restart and
Graceful Restart Stale timers and stale routes.
- changed Graceful Restart Stale time to cope if
it should expire before Graceful Restart !
bgpd/bgp_peer.h -- added PEER_DOWN_XXX values and tidied up
+ PEER_DOWN_NULL
+ PEER_DOWN_UNSPECIFIED
+ PEER_DOWN_CONFIG_CHANGE
+ PEER_DOWN_AF_DEACTIVATE
+ PEER_DOWN_PASSWORD_CHANGE
+ PEER_DOWN_ALLOWAS_IN_CHANGE
+ PEER_DOWN_INTERFACE_DOWN
+ PEER_DOWN_MAX_PREFIX
+ PEER_DOWN_HEADER_ERROR
+ PEER_DOWN_OPEN_ERROR
+ PEER_DOWN_UPDATE_ERROR
+ PEER_DOWN_HOLD_TIMER
+ PEER_DOWN_FSM_ERROR
+ PEER_DOWN_DYN_CAP_ERROR
- PEER_DOWN_NOTIFY_SEND (deleted)
- added typedef peer_down_t
- struct peer:
- deleted redundant clear_node_queue
- removed PEER_STATUS_ACCEPT_PEER flag
- added PEER_STATUS_REAL_PEER flag
- (3)
- deleted bgp_peer_reenable() -- redundant
- deleted bgp_peer_stop() -- now static
- replaced bgp_peer_disable() by bgp_peer_down()
- added bgp_peer_down_error()
- added bgp_peer_down_error_with_data()
- deleted peer_change_status() -- now static
- renamed peer_new() -> bgp_peer_new()
- renamed peer_create() -> bgp_peer_create()
- renamed peer_delete() -> bgp_peer_delete()
- added bgp_peer_lock()
- added bgp_peer_unlock()
- deleted peer_free()
- deleted peer_nsf_stop()
bgpd/bgp_peer_index.c -- removed accept entry from bgp_peer_index_entry
structure
- added explicit next_free entry to the structure
- sets next_free to point at self in entries
which are in use -- and checks this.
- change bgp_peer_index_seek_accept() to link to
session via the peer data structure, and to
call bgp_connection_query_accept() under the
Peer Index Mutex.
- (4) for bgp_peer_index_seek_accept()
bgpd/bgp_peer_index.h -- removed accept entry from bgp_peer_index_entry
structure
- added explicit next_free entry to the structure
- (4) for bgp_peer_index_seek_accept()
bgpd/bgp_route.c -- (1) (2) (3)
- in bgp_process_rsclient(), bgp_process_main(),
and bgp_processq_del():
- extra dasserts()
- clear rn->wq_next
- unlock table *after* unlock node (bug fix)
- in bgp_process(), lock bgp before table.
- in bgp_maximum_prefix_restart_timer(), replace
call of peer_clear() by unset of flag and
bgp_peer_enable() -- peer is already down.
- added bgp_maximum_prefix_cancel_timer()
- deleted bgp_clear_this_route() -- code now
inline in only caller.
- renamed bgp_clear_route_normal() ->
bgp_clear_routes()
- takes an "nsf" argument to invoke NSF
"clearing", iff nsf set for afi/safi. Sets
PEER_STATUS_NSF_WAIT if so.
- returns bool "completed" if clearing has
completed immediately -- ie no background
work left to be done.
- renamed bgp_clear_route_all() ->
bgp_clear_all_routes()
- takes "nsf" argument and returns "completed"
as for bgp_clear_routes().
- removed call: bgp_peer_clearing_completed()
- renamed bgp_clear_route_rsclient() ->
bgp_clear_rsclient_rib()
- deleted bgp_cleanup_routes() -- was used
during termination, no longer required because
termination deletes all peers.
bgpd/bgp_route.h -- deleted bgp_cleanup_routes() -- program
termination now deletes all peers, which
implicitly cleans up all routes.
- renamed: bgp_clear_route_normal() ->
bgp_clear_routes()
- renamed: bgp_clear_route_rsclient() ->
bgp_clear_rsclient_rib()
- renamed: bgp_clear_route_all() ->
bgp_clear_all_routes()
- added: bgp_maximum_prefix_cancel_timer()
bgpd/bgp_session.c -- (3)
- deleted bgp_session_defer_if_limping()
- in bgp_session_init_new()
- changed to void and removed session argument
-- always creates a new session
- peer MUST not have a session
- removed Peer Index pointer stuff as Peer
Index no longer has accept field
- sets session->peer and locks peer
- sets peer->session under Peer Index Mutex
- sets session->delete_me false
- sets session->accept flag false
- replaced bgp_session_free() by
bgp_session_delete()
- changed to void function
- if session is active, set the delete_me flag
so session will be deleted when goes
sDisabled.
- make sure that session Mutex has been
released by the BGP Engine before destroying
it... otherwise: tears.
- unhook session from peer under Peer Index
mutex -- for accept() stuff.
- unhook peer from session.
- unlock peer.
- in bgp_session_enable()
- assert that peer is pIdle.
- clear delete_me for completeness
- clear additional fields
- in bgp_session_disable()
- clear session->accept
- in bgp_session_is_active()
- no longer interested in Peer Index stuff
- deleted bgp_session_defer_if_limping()
bgpd/bgp_session.h -- in bgp_session structure:
- removed index_entry pointer to Peer Index
- added delete_me flag
- removed defer_enable flag
- added accept flag
- removed session parameter from
bgp_session_init_new()
- deleted bgp_session_free()
- added bgp_session_delete()
- bgp_session_is_active() now returns bool
bgpd/bgp_table.c -- bgp_node_free() sets lock count = -54321
- in bgp_table_free():
- assert that route node is empty
- set lock count = -54321
- bgp_node_delete() asserts that is not on_wq
- (1)
bgpd/bgp_vty.c -- (1) (3) (4)
- change peer_af_flag_modify_vty() to call
peer_af_flag_modify() not set or unset.
- change name: bgp_clear_route_rsclient() ->
bgp_clear_rsclient_rib()
- in peer_rsclient_set_vty():
- add peer to bgp->rsclient list after all
validation is complete
- in peer_rsclient_unset_vty():
- removed code for deleting the rsclient RIB
etc to peer_rsclient_unset().
- added peer_rsclient_unset()
bgpd/bgp_zebra.c -- bgp_peer_disable() -> bgp_peer_down() and now
takes PEER_DOWN_INTERFACE_DOWN argument.
bgpd/bgpd.c -- (1) (3)
- replaced setting peer->last_reset and call of
bgp_notify_send() by call of the new
bgp_peer_down().
- bgp_router_id_set()
... PEER_DOWN_RID_CHANGE
- bgp_cluster_id_set()
... PEER_DOWN_CLID_CHANGE
- bgp_cluster_id_unset()
... PEER_DOWN_CLID_CHANGE
- bgp_confederation_id_set()
... PEER_DOWN_CONFED_ID_CHANGE
... PEER_DOWN_CONFED_ID_CHANGE
- bgp_confederation_id_unset()
... PEER_DOWN_CONFED_ID_CHANGE
- bgp_confederation_peers_add()
... PEER_DOWN_CONFED_PEER_CHANGE
- bgp_confederation_peers_remove()
... PEER_DOWN_CONFED_PEER_CHANGE
- peer_as_change()
... PEER_DOWN_REMOTE_AS_CHANGE
- peer_activate()
... PEER_DOWN_AF_ACTIVATE
- peer_deactivate()
... PEER_DOWN_AF_DEACTIVATE
- peer_group_bind()
... PEER_DOWN_RMAP_BIND
- peer_group_unbind()
... PEER_DOWN_RMAP_UNBIND
- peer_change_action()
... why_changed
... why_changed
- peer_flag_modify_action()
... action->peer_down
- peer_update_source_if_set()
... PEER_DOWN_UPDATE_SOURCE_CHANGE
... PEER_DOWN_UPDATE_SOURCE_CHANGE
- peer_update_source_addr_set()
... PEER_DOWN_UPDATE_SOURCE_CHANGE
... PEER_DOWN_UPDATE_SOURCE_CHANGE
- peer_update_source_unset()
... PEER_DOWN_UPDATE_SOURCE_CHANGE
... PEER_DOWN_UPDATE_SOURCE_CHANGE
- peer_local_as_set()
... PEER_DOWN_LOCAL_AS_CHANGE
... PEER_DOWN_LOCAL_AS_CHANGE
- peer_local_as_unset()
... PEER_DOWN_LOCAL_AS_CHANGE
... PEER_DOWN_LOCAL_AS_CHANGE
- peer_password_set()
... PEER_DOWN_PASSWORD_CHANGE
... PEER_DOWN_PASSWORD_CHANGE
- peer_password_unset()
... PEER_DOWN_PASSWORD_CHANGE
... PEER_DOWN_PASSWORD_CHANGE
- peer_clear()
... PEER_DOWN_USER_RESET
- bgp_terminate()
... PEER_DOWN_USER_RESET
- deleted peer_lock() & peer_unlock(). See
bgp_peer_lock() & bgp_peer_unlock() in bgp_peer
- in peer_as_change(), move downing of peer to
after all config changes have been made.
- in peer_remote_as() implicitly activate iff
!BGP_FLAG_NO_DEFAULT and is IPv4/Unicast.
(but only ever called with IPv4/Unicast or
nothing at all.)
- in peer_deactivate()
- if cannot dynamically reconfigure, then will
down the peer PEER_DOWN_AF_DEACTIVATE.
- uses new peer_rsclient_unset() to tidy away
any rsclient RIB etc.
- in peer_change_action():
- added 'why_down' argument
- replace if's by switch()
- in struct peer_flag_action, updated entry types
- in peer_flag_action_list[], added the
appropriate PEER_DOWN_XXX values.
- in peer_af_flag_action_list[]
- added the appropriate PEER_DOWN_XXX values
- added multiple flag entries
- in peer_flag_action_set():
- changed to return const address of
peer_flag_action structure -- or NULL.
- table may now contain entries which the
given flag must be a subset of.
- in peer_flag_modify_action():
- now takes peer_flag_action* and whether flag
has been set or not.
- allow *only* peer_change_none or
peer_change_reset
- deal with clearing PEER_FLAG_SHUTDOWN,
otherwise bgp_peer_down().
- in peer_group_bind():
- uses new peer_rsclient_unset() to tidy away
any rsclient RIB etc.
- in peer_flag_modify():
- takes bool set flag
- changed to suit peer_flag_action_set() and
peer_flag_modify_action()
- in peer_flag_set() and peer_flag_unset()
changed to bool flag
- added peer_af_flag_modify_action(), common
code for use in peer_af_flag_modify().
- in peer_af_flag_modify():
- takes bool set flag
- changed to suit peer_flag_action_set() and
peer_flag_modify_action()
- use peer_af_flag_modify_action()
- in peer_af_flag_set() and peer_af_flag_unset()
changed to bool flag
- in peer_clear(): adjust for new bgp_peer_down()
mechanics.
- in bgp_master_init(): account for
peer_linger_count (starting at 0)
- in bgp_terminate():
- removed program_terminating -- see flag now
in bgp_main.c
- implement "retain_mode" by using
BGP_OPT_NO_FIB flag to turn off changing
the FIB as routes are deleted.
- either bgp_peer_delete() if terminating
or bgp_peer_down() all peers.
- flush process queues.
- deleted program_terminate_if_all_disabled()
- in peer_lookup(), removed handling of
PEER_STATUS_ACCEPT_PEER().
- deleted peer_lookup_with_open().
- in bgp_config_write_family(), removed handling
of PEER_STATUS_ACCEPT_PEER().
- in bgp_config_write(), removed handling
of PEER_STATUS_ACCEPT_PEER().
bgpd/bgpd.h -- add peer_linger_count entry to the
bgp_master structure.
- remove: peer_lock(), peer_unlock() and
peer_delete()
- (4) for peer_af_flag_modify()
- added peer_rsclient_unset()
lib/plist.c -- fixed handling of prefix lists with no
explicit sequence numbers.
lib/qpnexus.c -- (4) for main_thread & terminate flags
- change qpn_terminate() so does nothing if
terminate flag is already set.
lib/qpnexus.h -- (4) for main_thread & terminate flags
tests/bgp_capability_test.c -- (3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These changes mean that Quagga copes a little better when there are
very large numbers of updates/withrawal messages arriving all at
once...
...it is not possible to cure the problem of overloading Quagga by
throwing too much at it. However, these changes at least mean that
when BGP sessions drop, the Routing Engine will notice that in a
reasonable time, and can clear up all routes associated with
the session (throwing away any updates/withdraws already received,
but not yet dealt with.)
Amonst these changes are Chris Caputo's patches for bgp_node locking
issues -- see quagga-dev 7960 mailing list message.
|
|
|
|
|
|
|
|
| |
Implemented less onerous ways of including descriptions of errors
and IP addresses in logging and other messages.
Implemented mapping of error numbers to error names, which is
generally more meaningful.
|
|
|
|
|
|
|
| |
Various bug fixes and improvements.
Running with a fair amount of debug/assert code, which must be
removed at some date.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
bgpd/bgp_advertise.c
bgpd/bgp_advertise.h
The adj_in and adj_out objects are now put on a list based
on the peer to whom the route belongs.
The adj_in and adj_out objects also now point to the bgp_node
which they are routes for.
This substantially reduces the work needed to shut down a peer.
bgpd/bgp_damp.c
Changes to adj_in and adj_out forced small change to macros
used in bgp_damp.c to manage its lists.
bgpd/bgp_debug.c
Replaced direct access to vty->node by the required vty_get_node().
bgpd/bgp_dump.c
Changes to the names of fields in bgp_info structures.
bgpd/bgp_engine.h
Modified the debug and trace functions.
bgpd/bgp_fsm.c
Make use of sockunion2str() consistent with common usage.
Improved some documentation.
bgpd/bgp_main.c
Use the newly extended qpn_add_hook_function() facility.
bgpd/bgp_mplsvpn.c
Changes to the names of fields in bgp_info structures.
bgpd/bgp_msg_read.c
Bug fix: correct handling of capability code length.
Improvement: better casting in calculation of message length.
bgpd/bgp_msg_write.c
Bug fix: correct byte ordering of bgp_id in open message.
bgpd/bgp_network.c
Bug fix: correct handling of incoming connections.
Takes advantage of improvements in sockunion.c.
bgpd/bgp_nexthop.c
Changes to the names of fields in bgp_info structures.
bgpd/bgp_open_state.c
Remove mistaken #include of memtypes.h
bgpd/bgp_packet.c
Improvements to handling of withdrawing routes for peers.
bgpd/bgp_peer.c
Tidying up the state of peers as they are enabled and disabled.
Improvements to handling of withdrawing routes for peers.
bgpd/bgp_peer.h
Adding list bases for lists of routes originated by the peer.
bgpd/bgp_peer_index.c
Bug fix: correct freeing of peer indexes.
bgpd/bgp_route.c
Implement lists of bgp_info based in the owning peer. Adjust
for name changes to bgp_info fields.
Reimplemented all the clearing functions to use the lists of
items that belong to the peer -- rather than searching route
tables for stuff to withdraw.
Changed work queue handling for added/changed routes, so
that queues run through existing items, rather than having
queues of auxiliary items -- lower memory overhead.
bgpd/bgp_route.h
Added fields to bgp_info to allow all bgp_info originated by
each peer to live on lists based in the peer. And changed the
name of existing fields to avoid confusion.
bgpd/bgp_routemap.c
Removing redundant code and fixing a memory leak.
bgpd/bgp_table.h
Based work queue for added/changed routes directly in the
table, rather than having auxiliary structures.
bgpd/bgp_vty.c
Use vty_get_node() and vty_set_node() rather than direct
access to the vty field.
bgpd/bgpd.c
Implement changes to route clearing.
bgpd/bgpd.h
Changes to work queue handling.
lib/buffer.c
Changes to allow embedded buffer structures.
lib/buffer.h
Moved struct buffer here so that could have embedded buffer
structurs.
lib/command.c
Substantial tidy up and document exercise.
Restructured the top level command processing and finding
of descriptions and command completion.
Removal of unpleasant messing around with the insides of
vector structures.
Movement of some command actions to vty.c.
Uses uty.h to pick up the "private" functions from vty.c
et al.
lib/command.h
Moved the "node" values to node_type.h, so that can use an
enum node_type in places where cannot include command.h.
lib/command_queue.c
Updated to cope with the called command changing the node
value.
Improved handling of revoked commands, so the the command
line handler does not get stuck waiting for a command to
complete which has been revoked !
lib/command_queue.h
Improved message format.
lib/if.c
Use vty_set_node().
lib/keychain.c
Use vty_set_node().
new lib/keystroke.c
new lib/keystroke.h
New code to implement a keystroke FIFO.
This moves some complexity out of the command handler.
The handling of mixtures of escapes and Telnet IACs is
tightened up.
It would be possible to extend this to, say, UTF-8.
Regularises the "stealing" of keystrokes for the "--more--"
output handling... which was a bit hit and miss.
new lib/list_util.c
new lib/list_util.h
New code to implement various forms of linked list,
where the list pointers are embedded in structures.
lib/log.c
Changed the handling of log messages, so that all types
of log output (except syslog) use the same message buffer
scheme, and the message is constructed once and once
only.
Changes to the handling of VTY_LOCK() etc.
Uses uty.h to pick up the "private" functions from vty.c
et al.
lib/log.h
Changes to the buffering of log messages.
new lib/mem_tracker.c
New code to track memory allocation/deallocation, for
debug purposes.
lib/memory.c
lib/memory.h
Updated to allow the use of the mem_tracker.
lib/memtypes.awk
Made the memtypes into a named enum MTYPE.
lib/memtypes.c
Various new memory types.
lib/mqueue.c
lib/mqueue.h
Add mqueue_finish function for close-down.
lib/network.c
lib/network.h
Added non-blocking read_nb() and write_nb().
new lib/node_type.h
As above.
lib/plist.c
Remove vty_puts() which wasn't a good idea.
lib/qlib_init.c
Added qps_init() to first stage and mqueue_finish to
finish.
lib/qpnexus.c
lib/qpnexus.h
More flexible hooks for in_thread_init and in_thread_final.
lib/qpselect.c
lib/qpselect.h
Added qps_start_up() to build the required maps once and
for all.
Added qdebug to control the debug checks and validation.
Improved validation and test functions.
new lib/qstring.c
new lib/qstring.h
New code for limited flexible string handling.
lib/qtimers.c
Added qdebug to control the debug checks and validation.
lib/routemap.c
Use vty_set_node().
lib/sockunion.c
lib/sockunion.h
Tidied up and regularised the handling of sin_len and
sin6_len.
Created common function for setting port into socket.
Created common function for initialisation/allocation of
new sockunion.
Reduced various functions by using common sub-functions.
Rationalised some code.
Added sockunion_listen() and sockunion_new_sockaddr().
Renamed sockunion_new() to sockunion_new_prefix().
Improved some logging messages.
Added documentation.
new lib/uty.h
Functions etc. used only by vty/command/log/vty_io and
vty_cli.
lib/vector.c
lib/vector.h
Added vector_t type.
Removed VECTOR_INDEX, vector_only_wrapper_free() and
vector_only_index_free() -- following improvement of
code in command.c.
Added vector_set_min_length(), vector_set_new_min_length()
and vector_length() functions.
new lib/vio_fifo.c
new lib/vio_fifo.h
New code to manage simple FIFO of indefinite length.
lib/vty.c
lib/vty.h
Reworked. Broken into vty.c, vty_io.c and vty_cli.c.
new lib/vty_cli.c
new lib/vty_cli.h
CLI handling parts of the vty family.
new lib/vty_io.c
new lib/vty_io.h
I/O parts of the vty family.
lib/workqueue.h
Introduced tyedefs for the various call-back entries.
new tests/test-list_util.c
Tests for the list-util stuff.
vtysh/vtysh.c
Small change to interface for cmd_execute_command()
|
|
|
|
|
|
| |
modified: bgpd/bgp_main.c
modified: bgpd/bgp_msg_read.c
deleted: bgpd/bgpd.cx -- bogus file
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Updated quagga thread handling to use qtimers when using the new
qpnexus -- so all timers are qtimers in the new scheme.
Updated work queue handling so that each work queue item is a single
malloced structure, not three. (Only bgpd and zebra use the work
queue system.)
When using qpnexus the background thread queue is no longer a timer
queue, but simply a list of pending background threads. When a
background thread is waiting on a timer, it is in the qtimer pile,
same like any other thread.
When using qpnexus, the only remaining quagga thread queues are the
event and ready queues.
Revised the qpnexus loop so that only when there is nothing else to
do will it consider the background threads.
Revised write I/O in the BGP Engine so that all writing is via the
connection's write buffer. Revised the write I/O in the Routeing
Engine, so that it passes groups of updates in a single mqueue
message. This all reduces the number of TCP packets sent (because
BGP messages are collected together in the connection's write buffer)
and reduces the number of mqueue messages involved.
(No need for TCP_CORK.)
Code and comments review for the new code.
modified: bgpd/bgp_advertise.c
modified: bgpd/bgp_common.h
modified: bgpd/bgp_connection.c
modified: bgpd/bgp_connection.h
modified: bgpd/bgp_engine.h
modified: bgpd/bgp_fsm.c
modified: bgpd/bgp_main.c
modified: bgpd/bgp_msg_read.c
modified: bgpd/bgp_msg_write.c
modified: bgpd/bgp_network.c
modified: bgpd/bgp_packet.c
modified: bgpd/bgp_packet.h
modified: bgpd/bgp_peer.c
modified: bgpd/bgp_peer_index.h
modified: bgpd/bgp_route.c
modified: bgpd/bgp_route_refresh.h
modified: bgpd/bgp_session.c
modified: bgpd/bgp_session.h
modified: bgpd/bgpd.c
new file: bgpd/bgpd.cx
modified: lib/mqueue.h
modified: lib/qpnexus.c
modified: lib/qpnexus.h
modified: lib/qpselect.c
modified: lib/qtimers.c
modified: lib/qtimers.h
modified: lib/sigevent.c
modified: lib/stream.c
modified: lib/stream.h
modified: lib/thread.c
modified: lib/thread.h
modified: lib/workqueue.c
modified: lib/workqueue.h
modified: tests/heavy-wq.c
modified: zebra/zebra_rib.c
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
it runs in the routing_nexus. Makefile tidied. Fixed a few warnings.
Re-enabled zclient, horrors of horrors bpg_nexthop thought it OK to
poke arround with zclients threads directly. Now fixed, all private to
zclient.
|
|
|
|
|
| |
Changed names of peer states. Writed in peering engine side of sending
route_refresh.
|
|
|
|
|
| |
program terminate code that waits for all sissions to become disabled
before terminating pthreads and running exit code.
|
|
|
|
|
|
| |
HUP. Shutdown needs mechanism to know when bgp_engine has closed
everything. HUP don't understand how it is supposed to cope with added/
deleted/retained peers and get them going again.
|
|
|
|
|
|
| |
Removed some of the temporary debuggery in qtimers that only worked in 1
thread. Initialised the mqueue mutex. Stopped peer_index from
zeroizing its mutex after it had been initialized.
|
|
|
|
|
|
|
| |
Correctly stepping along list of listeners in bgp_md5_set_listeners.
Added reset function for peer index and remove spurious argument
for bgp_peer_index_mutex_init.
|
| |
|
|
|
|
| |
with having 1 or multiple nexus (and pthreads).
|
|
|
|
|
| |
pthreads then all point at same nexus object. Do necessary in-thread
initialization and finalization. Fix some minor warnings.
|
|
|
|
| |
new. Still work in progress.
|
|
|
|
| |
TODOs.
|
|
|
|
| |
wiring. New queue I/F handling. Routing engine nexus.
|
| |
|
| |
|
|
|
|
|
| |
before and after reading config file. Announce on all vty when shutting
down.
|
| |
|
| |
|
|
|
|
| |
thread to run in. Add qlib_init stuff. Add -t parameter for "threaded".
|
| |
|
|
|
|
| |
Each has its own nexus.
|
|
|
|
| |
Needs debugging.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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().
|
|
|
|
|
| |
Check result of daemon() call to fix warning
Make local variables static
|
|
|
|
|
|
| |
2008-05-29 Martin Nagy <mnagy@redhat.com>
* */*main.c: Sanity check port numbers before using.
|
| |
|
|
|
|
|
|
|
|
| |
2007-11-13 Paul Jakma <paul.jakma@sun.com>
* bgp_main.c: Small fix, format string parameters should never
be NULL - it's not strictly valid and some libc's don't let
you away with.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* bgp_main.c: Add 'listenon' argument, to pass address to bind
to.
* bgp_network.c: (bgp_socket) Extend to take bind address.
* bgpd.c: (bgp_init) Pass stored address.
* bgpd.h: (struct bgp_master) storage for bind address
2007-11-01 Paul Jakma <paul.jakma@sun.com>
* tools/multiple-bgpd.sh: New, quick script to launch a bunch of
bgpds.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
syntax
2006-10-04 Oliver Hookins <ohookins@gmail.com>
* bgpd/bgp_main.c: Add configuration check option, with
'-C' rather than '-c' for consistency between daemons.
* isisd/isis_main.c: ditto
* ospf6d/ospf6_main.c: ditto
* ospfd/ospf_main.c: ditto
* ripngd/ripng_main.c: ditto
* vtysh/vtysh_main.c: ditto
* ripd/rip_main.c: Change the config check option to
'-C' and tidy up the code.
* zebra/main.c: ditto
2006-10-04 Stergiakis Alexandros <astergiakis@antcor.com>
* ripd/rip_main.c: This trivial patch introduces a new
command-line option '-c', which instructs zebra/ripd
to check its configuration file for validity, print
any error message, and then exit. This is useful when
the configuration file is edited by hand or otherwise,
and you simply want to validate it without any other
effect.
* zebra/main.c: ditto
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
2006-01-19 Paul Jakma <paul.jakma@sun.com>
* (general) various miscellaneous compiler warning fixes.
Remove redundant break statements from switch clauses
which return.
return from main, not exit, cause it annoys SOS.
Remove stray semi-colons which cause empty-statement
warnings.
* zebra/main.c: (sighup) remove private declaration of external
function.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* configure.ac: Add the test for Solaris least-privileges. Set
defines for whether capabilities are supported and whether of
the linux or solaris variety.
Add missing-prototypes, missing-declarations, char-subscripts
and cast-qual warnings to default cflags, cause Hasso enjoys warnings,
and we really should clean the remaining ones up. (ie isisd..).
* (*/*main.c) Update the zebra_capabilities_t arrays in the various
daemons to match the changes made in lib/privs.h.
* zebra.h: Solaris capabilities requires priv.h to be included.
* privs.{c,h}: Add support for Solaris Least-Privileges.
privs.h: Reduce some of the abstract capabilities, which do
not have rough equivalents on both systems. Rename the net
related caps to _NET, as they should have been in first
place.
(zprivs_terminate) should take the zebra_privs_t as argument so
that it can update change pointer.
Add an additional privilege state, ZPRIVS_UNKNOWN.
* privs.c: (various capability functions) Add
Solaris privileges variants.
(zprivs_state) Use privs.c specific generic types to
represent various capability/privilege related types, so that
each can be typedef'd as appropriate on each platform.
(zprivs_null_state) static added, to hold the state the null
method should report (should be raised by default, and
LOWERED if zprivs_terminate has been called)
(zprivs_state_null) Report back the zprivs_null_state.
(cap_map) Make it able to map abstract capability to multiple
system capabilities.
(zcaps2sys) Map to abstract capabilities to multiple system
privileges/capabilities.
(zprivs_init) move capability related init to seperate
function, zprivs_caps_init.
(zprivs_terminate) ditto, moved to zprivs_caps_terminate.
Set the change_state callback to the NULL state, so the
user can continue to run and use the callbacks.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* bgp_main.c: (sigint) Use zlog_notice for termination message.
(main) Use zlog_notice for startup announcement.
* isis_main.c: (sigint,sigterm) Use zlog_notice for termination message.
(terminate) This function should be static, not global.
(main) Use zlog_notice for startup announcement, and remove
ifdef ZEBRA_VERSION.
* version.h.in: Remove declaration for pid_output_lock, this function
is now static, not global.
* pid_output.c: (pid_output_lock) This function should be static, not
global. And remove "old umask" error message, since it was really
an unimportant debug message, not an error.
(pid_output) Need to declare static function pid_output_lock.
* ospf6_main.c: (sigint,sigterm) Use zlog_notice for termination
message.
(main) Remove commented-out call to pid_output_lock (which should
never be called other than from inside pid_output). And use
zlog_notice to print the startup message, which now includes
the vty port.
* ospf_main.c: (sigint) Use zlog_notice for termination message.
(main) Issue a startup announcement using zlog_notice.
* rip_main.c: (sigint) Use zlog_notice for termination message.
(main) Add a startup announcement using zlog_notice.
* ripng_main.c: (sighup) Remove spurious terminating message.
(sigint) Use zlog_notice for termination message.
(main) Issue a startup announcement using zlog_notice.
* main.c: (sigint) Use zlog_notice for termination message.
(main) Add a startup announcement using zlog_notice.
|
| |
|
|
|
|
|
|
|
| |
* Update with fix in debian bug id 222930.
* bgp_main.c: Add ZCAP_RAW, needed to bind to interfaces.
bgp_network.c: (....) raise/lower privs around call to
SO_BINDTODEVICE sockopt.
|
|
|
|
|
|
|
|
|
|
|
| |
* (global) more const'ification and fixups of types to clean up code.
* bgp_mplsvpn.{c,h}: (str2tag) fix abuse. Still not perfect,
should use something like the VTY_GET_INTEGER macro, but without
the vty_out bits..
* bgp_routemap.c: (set_aggregator_as) use VTY_GET_INTEGER_RANGE
(no_set_aggregator_as) ditto.
* bgpd.c: (peer_uptime) fix unlikely bug, where no buffer is
returned, add comments about troublesome return value.
|
|
|
|
| |
to read system one.
|
| |
|
|
|
|
|
|
|
|
|
| |
* (many) reference <lib/version.h> rather than "version.h",
because version.h is a generated file and not present in the
source tree when using objdir builds.
(committed by gdt)
works fine with normal builds; didn't try objdir
|