| Age | Commit message (Collapse) | Author | 
|---|
|  | * bgp_route.h: (struct bgp_info) add a new flag, BGP_INFO_REMOVED.
	  BGP_INFO_VALID is already overloaded, don't care to do same thing
	  to STALE or HISTORY.
	* bgpd.h: (BGP_INFO_HOLDDOWN) Add INFO_REMOVED to the macro, as a
	  route which should generally be ignored.
	* bgp_route.c: (bgp_info_delete) Just set the REMOVE flag, rather
	  than doing actual work, so that bgp_process (called directly,
	  or indirectly via the scanner) can catch withdrawn routes.
	  (bgp_info_reap) Actually remove the route, what bgp_info_delete
	  used to do, only for use by bgp_process.
	  (bgp_best_selection) reap any REMOVED routes, other than the old
	  selected route.
	  (bgp_process_rsclient) reap the old-selected route, if appropriate
	  (bgp_process_main) ditto
	  (bgp_rib_withdraw, bgp_rib_remove) make them more consistent with
	  each other. Don't play games with the VALID flag, bgp_process
	  is async now, so it didn't make a difference anyway.
	  Remove the 'force' argument from bgp_rib_withdraw, withdraw+force
	  is equivalent to bgp_rib_remove. Update all its callers.
	  (bgp_update_rsclient) bgp_rib_withdraw and force set is same as
	  bgp_rib_remove.
	  (route_vty_short_status_out) new helper to print the leading
	  route-status string used in many command outputs. Consolidate.
	  (route_vty_out, route_vty_out_tag, damp_route_vty_out,
	   flap_route_vty_out) use route_vty_short_status_out rather than
	  duplicate.
	  (route_vty_out_detail) print state of REMOVED flag.
	  (BGP_SHOW_SCODE_HEADER) update for Removed flag. | 
|  | Interface should be specified by name now.
	[backport candidate] | 
|  | print info about it.
	Fixes bugzilla #213. [backport candidate] | 
|  |  | 
|  | * README.txt: point to the opensolaris.org sources for the SMF
	  manifest class scripts. Make step 3 slightly more explicit about
	  what 'this directory' is. | 
|  | * ripd.c: (general) Fix previous commit, broke multicast bind and
	  hence setting of source port, which broke communication with
	  non-borken ripd. Fix removes more stuff from rip_interface.c
	  than it adds to ripd.c ;)
	  (rip_create_socket) the to argument really is a from argument,
	  rename it. Set the source port to RIP port unconditionally, it's
	  required.
	  (rip_send_packet) Set from address correctly for multicast.
	  (rip_output_process) trivial: num can be BSS specified, rather
	  than in body.
	* rip_interface.c: (rip_interface_multicast_set) strip out
	  redundant stuff related to bind, which rip_create_socket does.
	  Just make it set the multicast socket option, as per the
	  interface concerned, no more. | 
|  | * Makefile.am: (EXTRA_DIST) Add the trailing slash back in which
	  greg left out - tools bits weren't being included in dist,
	  which broke rpm builds :). | 
|  | * ospf6_asbr.c: (ospf6_asbr_redistribute_add) Fix sense of testing
	  of route_map_apply return code, it can return many things other
	  than RMAP_MATCH which do not indicate DENY. Should test explicitly
	  for equality to RMAP_DENYMATCH instead.
	[backport candidate] | 
|  | patches and lose because of old autoconf/automake versions have the
opportunity to find tout what to do. | 
|  | values.h, where MAXLONG is defined, is deprecated as well.
	Thanks to Greg for noticing and to Rivo for fix. | 
|  | clarify make (BSD make not working is a bug, and GNU make not working
is a really serious bug)
declare POSIX.2 as a semi-requirement, with notion that workarounds
for non-posix must be clean.
list OS versions for which not working is a bug.
add instructions for using info and emacs/info, and remove admonition
to use pinfo
add note about GNU awk (really needed?  BSD awk)
Note that NetBSD 2.99.15 has texinfo 4.7 | 
|  | * getopt.h: Don't declare getopt (rather than getopt_long), since
        quagga doesn't need it.
        * getopt.c (getopt): Don't define getopt.
Fixes build breakage on NetBSD, and seems likely to work on most
platforms since it avoids the entire issue of system getopt
declarations and whether they conform to POSIX.2.  Note that this
change doesn't address system getopt_long declarations, but also
doesn't change anything about getopt_long. | 
|  | dealing with routemaps. There is ospf->route_map[ZEBRA_ROUTE_MAX]
	  for default-information.
	Fixes bugzilla #208.
	[backport candidate] | 
|  | 2005-05-27. While ecommunity fix seems to be correct, community case
	  isn't.
	Fixes bugzilla #209.
	[backport candidate] | 
|  | * interface.c: (if_delete_update) should always be available, not
	  just on RTM_IFANNOUNCE/NETLINK systems.
	* kernel_socket.c: (ifan_read) only call if_delete_update when
	  interface departs, dont if_delete, because we wish to retain
	  interface configuration state even when interfaces are removed.
	  (ifm_read) If we dont have RTM_IFANNOUNCE, then transitioning
	  to down state is only chance we have to clean up interface in case
	  it is deleted (eg Solaris down -> unplumb -> plumb up).
	* redistribute.c: (zebra_interface_delete_update) should always be
	  available, we /will/ call it now on all systems, via
	  if_delete_update.
	* zserv.c: (zsend_interface_delete) ditto
	  (zsend_interface_address) Update the call-flow diagramme, to
	  reflect that if_delete_update /is/ now called on all systems,
	  potentially.
	* zserv.h: (zsend_interface_delete) unconditionally exported, as
	  above. | 
|  | * prefix.c: (prefix_ipv4_new, prefix_ipv6_new): Call prefix_new
	  to allocate the memory to make sure that all struct prefix pointers
	  point to objects of the same length (avoids memory overruns
	  on struct prefix assignments).
	  (prefix_ipv4_free, prefix_ipv6_free): Simply call prefix_free.
	  It is interesting to note that these functions are never actually
	  called anywhere in the code.  Instead prefix_free was already
	  being called directly, despite the previous MTYPE incompatibility.
	[backport candidate] | 
|  | * prefix.c: (ip_masklen) While loop should test that 'pnt' pointer is
	  in range before dereferencing it.
	[backport candidate] | 
|  | * ospf_abr.c: (ospf_abr_announce_network_to_area) SET_FLAG
	  should be on lsa not old, which may be freed for one thing,
	  obviously. | 
|  | * ospfd.h: add OSPF_ABR_DEFAULT for convenience, make
	  OSPF_ABR_CISCO be the default ABR type.
	* ospfd.c: (ospf_new) initialise abr_type to OSPF_ABR_DEFAULT
	* ospf_vty.c: (no_ospf_abr_type_cmd) add standard as a negatable
	  abr_type. default abr_type should be OSPF_ABR_DEFAULT.
	  (ospf_config_write) test whether default abr_type against
	  OSPF_ABR_DEFAULT, rather than any specific ABR_TYPE. | 
|  | ARM in general. | 
|  | * vtysh_user.c: rename struct user to struct vtysh_user to avoid
	  clashes with sys/user.h on ARM. | 
|  | [backport candidate] | 
|  | * kernel_socket.c: (RTA_{ADDR,ATTR}_GET) fix mistake, NULL check
	  should be on DEST argument | 
|  | * (global) Extern and static'ification, with related fixups
	  of declarations, ensuring files include their own headers, etc.
	  if_ioctl.c: (interface_info_ioctl) fix obvious arg mis-order in
	  list loop | 
|  | * (global) The great bgpd extern and static'ification.
	* bgp_routemap.c: remove unused ROUTE_MATCH_ASPATH_OLD code
	  (route_set_metric_compile) fix u_int32_t to ULONG_MAX comparison
	  warnings.
	* bgp_route.h: (bgp_process, bgp_withdraw, bgp_update) export these
	  used by various files which had their own private declarations,
	  in the case of mplsvpn - incorrect. | 
|  | * INSTALL.quagga.txt: GNU make is required now, because of manual
	  automatic rules in solaris/Makefile.am. (If someone knows how
	  to do these in a better way..).
	  GNU AWK is required for CVS checkout builds. | 
|  | support and area import and export lists support. | 
|  | IP source address in the OSPF packets. It was sometimes problematic
	  in actual operation (needed some operational cost: restarting
	  all-neighbor routers when I/F NIC was changed). Due to this change,
	  a previously safe case, attaching multiple interface to the same
	  link will now be dengerous and will not work. Remedy to that should
	  be applied later.
	[port from GNU Zebra] | 
|  | inactivity_timer() deletes the neighbor from the neighbor_list, it
	  cannot be called by thread_execute() from inner side of the
	  neighbor_list for-loop.
	  (Although crash was already fixed in Quagga, it's better follow the
	  GNU Zebra logic).
	[port from GNU Zebra] | 
|  | * getopt.h: add further tests for full getopt declaration on
	  various systems. | 
|  |  | 
|  | [backport candidate] | 
|  | * memtypes.h: update autobuilt file to match memtypes.c changes | 
|  | * bgpd.c: (bgp_terminate) workqueue's are lazy allocated and its
	  possible to terminate bgpd before workqueues were setup, causing
	  an abort/crash. Reported by Ashish Mehta of Sun. | 
|  | * README.txt: updated to match changed SMF manifest and
	  its changed service, instance and property group names. | 
|  | * quagga.xml.in: Pass the FMRI to the method, removing need for
	  daemon_name property and deducing the FMRI.
	  remove the empty config_file and pid_file definitions, they just
	  make things difficult in the method script, cause it then has to
	  deal with svcprop returning "" for defined empty properties.
	  Remove daemon_name everywhere.
	* quagga.init.in: Take the FMRI as an argument
	  Remove deducing the FMRI from the defunct daemon_name property.
	  Use svcprop -q to test for presence of a property first.
	  Default vty_port to 0 and vty_addr to 127.1 if equivalent
	  SMF properties are not set.
	  Deduce the pid_file, we can infer it from @quagga_statedir@ I
	  think, it's probably not useful to allow it to be configurable
	  as a property anyway.
	  /var/run/ is on tmpfs on Solaris, so we probably will need
	  to create @quagga_statedir@ first run after boot.
	  Use @sbindir@, not /usr/local/sbin. | 
|  | * kernel_socket.c: consolidate the IFAM{ADDR,MASK}GET and
	  RTM{ADDR,MASK}GET macros into generic rta_addrs macros,
	  RTA_{ADDR,ATTR}_GET.
	  (af_check) could use 'inline' attribute
	  (ifam_read_mesg) remove IFAM{ADDR,MASK}GET macro, change to
	  generic macro.
	  (rtm_read_mesg) similar | 
|  | * ospf_spf.c: Try get more information on a SEGV under
	  ospf_spf_vertex_add_parent.
	  (ospf_vertex_free) NULL out the child and nexthop lists
	  (ospf_vertex_add_parent) nexthop and child can not be NULL
	  vertex_nexthop's parent->child list can not be NULL
	  (ospf_spf_next) w and cw are per-loop iteration variables, move
	  declarations into loop body. | 
|  | * rt_netlink.c (netlink_parse_info): Fix debug messages - nlmsg_pid is
	  unsigned and one zlog call had swapped arguments.
	* rt_netlink.c (netlink_route_multipath): Fix compile with disabled
	  IPv6 support.
	[backport candidate] - with stuff commited to rt_netlink.c before to
	fix logging in netlink_route_multipath(). | 
|  | changes - oi->ifp->status doesn't give to us info about ISM,
	  oi->state does.
	[backport candidate] | 
|  | * ripd.c: (rip_create_socket) Make it static.
	  Remove the getservbyname stuff, as RFC2453 3.9.2 says non-RIP
	  port messages should be discarded, quagga doesnt accept them,
	  no need to lookup port.
	  Take a 'to' argument, if socket should be bound to something else.
	  setsockopt_so_recvbuf might need privs, move it to the raised
	  privileges section.
	  dont forget to close the socket if bind fails.
	  (rip_send_packet) use strncpy, just in case (address is under
	  our control anyway, but still).
	  dont duplicate rip_create_socket - just use it.
	  (rip_create) rip_create_socket takes an argument now, modify. | 
|  | * ripd.c: (rip_create_socket) move it up so rip_send_packet
	  can use it too. | 
|  | * quagga.xml.in: Fix mistake in bgpd definition. Change dependency
	  on zebra to optional. Remove the duplicated stability statements.
	* quagga.init.in: svcprop should check PACKAGE_TARNAME, not _NAME.
	  no need to check for config file either, there's already a
	  dependency in the manifest. | 
|  | * NEWS: bgpd work queues and ripd auth-mode change | 
|  | * rip_interface.c: Fix authentication, no-auth impossible to specify
	  (rip_interface_new) default to RIP_NO_AUTH
	  (rip_interface_reset) ditto
	  (rip_interface_config_write) write out config for simple | 
|  | * ospf_ism.c (ospf_elect_bdr/ospf_elect_dr): Fix DR election bug. | 
|  | * bgpd/(general) refcount struct peer and bgp_info, hence allowing us
	  add work_queues for bgp_process.
	* bgpd/bgp_route.h: (struct bgp_info) Add 'lock' field for refcount.
	  Add bgp_info_{lock,unlock} helper functions.
	  Add bgp_info_{add,delete} helpers, to remove need for
	  users managing locking/freeing of bgp_info and bgp_node's.
	* bgpd/bgp_table.h: (struct bgp_node) Add a flags field, and
	  BGP_NODE_PROCESS_SCHEDULED to merge redundant processing of
	  nodes.
	* bgpd/bgp_fsm.h: Make the ON/OFF/ADD/REMOVE macros lock and unlock
	  peer reference as appropriate.
	* bgpd/bgp_damp.c: Remove its internal prototypes for
	  bgp_info_delete/free. Just use bgp_info_delete.
	* bgpd/bgpd.h: (struct bgp_master) Add work_queue pointers.
	  (struct peer) Add reference count 'lock'
	  (peer_lock,peer_unlock) New helpers to take/release reference
	  on struct peer.
	* bgpd/bgp_advertise.c: (general) Add peer and bgp_info refcounting
	  and balance how references are taken and released.
	  (bgp_advertise_free) release bgp_info reference, if appropriate
	  (bgp_adj_out_free) unlock peer
	  (bgp_advertise_clean) leave the adv references alone, or else
	  call bgp_advertise_free cant unlock them.
	  (bgp_adj_out_set) lock the peer on new adj's, leave the reference
	  alone otherwise. lock the new bgp_info reference.
	  (bgp_adj_in_set) lock the peer reference
	  (bgp_adj_in_remove) and unlock it here
	  (bgp_sync_delete) make hash_free on peer conditional, just in
	  case.
	* bgpd/bgp_fsm.c: (general) document that the timers depend on
	  bgp_event to release a peer reference.
	  (bgp_fsm_change_status) moved up the file, unchanged.
	  (bgp_stop) Decrement peer lock as many times as cancel_event
	  canceled - shouldnt be needed but just in case.
	  stream_fifo_clean of obuf made conditional, just in case.
	  (bgp_event) always unlock the peer, regardless of return value
	  of bgp_fsm_change_status.
	* bgpd/bgp_packet.c: (general) change several bgp_stop's to BGP_EVENT's.
	  (bgp_read) Add a mysterious extra peer_unlock for ACCEPT_PEERs
	  along with a comment on it.
	* bgpd/bgp_route.c: (general) Add refcounting of bgp_info, cleanup
	  some of the resource management around bgp_info. Refcount peer.
	  Add workqueues for bgp_process and clear_table.
	  (bgp_info_new) make static
	  (bgp_info_free) Ditto, and unlock the peer reference.
	  (bgp_info_lock,bgp_info_unlock) new exported functions
	  (bgp_info_add) Add a bgp_info to a bgp_node in correct fashion,
	  taking care of reference counts.
	  (bgp_info_delete) do the opposite of bgp_info_add.
	  (bgp_process_rsclient) Converted into a work_queue work function.
	  (bgp_process_main) ditto.
	  (bgp_processq_del) process work queue item deconstructor
	  (bgp_process_queue_init) process work queue init
	  (bgp_process) call init function if required, set up queue item
	  and add to queue, rather than calling process functions directly.
	  (bgp_rib_remove) let bgp_info_delete manage bgp_info refcounts
	  (bgp_rib_withdraw) ditto
	  (bgp_update_rsclient) let bgp_info_add manage refcounts
	  (bgp_update_main) ditto
	  (bgp_clear_route_node) clear_node_queue work function, does
	  per-node aspects of what bgp_clear_route_table did previously
	  (bgp_clear_node_queue_del) clear_node_queue item delete function
	  (bgp_clear_node_complete) clear_node_queue completion function,
	  it unplugs the process queues, which have to be blocked while
	  clear_node_queue is being processed to prevent a race.
	  (bgp_clear_node_queue_init) init function for clear_node_queue
	  work queues
	  (bgp_clear_route_table) Sets up items onto a workqueue now, rather
	  than clearing each node directly. Plugs both process queues to
	  avoid potential race.
	  (bgp_static_withdraw_rsclient) let bgp_info_{add,delete} manage
	  bgp_info refcounts.
	  (bgp_static_update_rsclient) ditto
	  (bgp_static_update_main) ditto
	  (bgp_static_update_vpnv4) ditto, remove unneeded cast.
	  (bgp_static_withdraw) see bgp_static_withdraw_rsclient
	  (bgp_static_withdraw_vpnv4) ditto
	  (bgp_aggregate_{route,add,delete}) ditto
	  (bgp_redistribute_{add,delete,withdraw}) ditto
	* bgpd/bgp_vty.c: (peer_rsclient_set_vty) lock rsclient list peer
	  reference
	  (peer_rsclient_unset_vty) ditto, but unlock same reference
	* bgpd/bgpd.c: (peer_free) handle frees of info to be kept for lifetime
	  of struct peer.
	  (peer_lock,peer_unlock) peer refcount helpers
	  (peer_new) add initial refcounts
	  (peer_create,peer_create_accept) lock peer as appropriate
	  (peer_delete) unlock as appropriate, move out some free's to
	  peer_free.
	  (peer_group_bind,peer_group_unbind) peer refcounting as
	  appropriate.
	  (bgp_create) check CALLOC return value.
	  (bgp_terminate) free workqueues too.
	* lib/memtypes.c: Add MTYPE_BGP_PROCESS_QUEUE and
	  MTYPE_BGP_CLEAR_NODE_QUEUE | 
|  | database ..." commands for vtysh by extract.pl. Remove duplicate
	  install_element calls.
	Fixes bugzilla #194. [backport candidate] | 
|  |  | 
|  | * zserv.c: (zsend_route_multipath) Fix bug if route is sent
	  with no NEXTHOP_FLAG_FIB nexthops. As ZAPI_MESSAGE_IFINDEX
	  and ZAPI_MESSAGE_NEXTHOP are always set, clients would try
	  read non-existent nexthop information and hit stream assert.
	  Zserv is still broken for multi-nexthop messages, but it always was. |