paul [Mon, 5 Sep 2005 11:54:13 +0000 (11:54 +0000)]
2005-09-05 Paul Jakma <paul.jakma@sun.com>
* command.c: (install_element) be more robust. Eg, cmd_init
need not have been called, some applications may use other
library subsystems, which call install_element, without the
application wanting commands and hence not calling cmd_init.
* *.c: Try to be less verbose by default (without any debug options
on).
* isis_lsp.c (lsp_build_nonpseudo): Use stream_reset() instead of
touching endp directly.
* isis_lsp.c (lsp_build_pseudo): Ditto.
* random.c, spgrid.[ch]: Fix warnings with hope that I didn't broke
anything. These floats to longs and vice versa casts are starnge
indeed.
* isis_pdu.c: As we don't use %z for size_t for now because we support
older compilers, cast them to unsigned long.
Also fix previous changelog entry. Isisd compiles cleanly now again.
* isis_adjacency.c, isis_lsp.c, isisd.c: Replace XMALLOC && memset
with XCALLOC.
* isis_lsp.c (lsp_build_pseudo): Fix adding ES neighbour.
* isis_tlv.c: More compact free_tlvs() function.
* isis_lsp.c (lsp_build_nonpseudo) : Try to fix one more regression
introduced by stream cleanup. Seek enp to the right place before
starting to fill stream with TLVs.
hasso [Sat, 27 Aug 2005 06:05:47 +0000 (06:05 +0000)]
* zebra_rib.c, rib.h: Add distance and metric arguments to the
rib_add_ipv6() function so that IPv6 routes in RIB can have correct
metric. No IPv6 routing daemon uses distance yet though.
* zserv.c, connected.c, kernel_socket.c, rt_netlink.c,
rtread_proc.c,zserv.c: Pass metric and distance info to the
rib_add_ipv6().
hasso [Fri, 26 Aug 2005 12:58:38 +0000 (12:58 +0000)]
* bgp_route.c: Third (?) attempt to fix best selection breakage
introduced long time ago with route server patch. Hopefully
it's last case to fix - route-server client not in peer group.
paul [Thu, 25 Aug 2005 14:50:05 +0000 (14:50 +0000)]
2005-08-25 Paul Jakma <paul@jakma.org>
* configure.ac: Add -fno-omit-frame-pointer after -Os in default
cflags, just to be sure.
Fedora's readline library does not itself link to termcap, hence
we must pass the result of termcap tests in via OTHER-LIBRARIES
argument, otherwise the test of main in readline will fail due to
missing termcap systems. On systems like Debian, -ltermcap
is not needed for the readline test, because libreadline already
links to it.
paul [Mon, 22 Aug 2005 22:34:41 +0000 (22:34 +0000)]
2005-08-22 Paul Jakma <paul.jakma@sun.com>
* 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.
paul [Tue, 16 Aug 2005 17:23:15 +0000 (17:23 +0000)]
2005-08-16 Paul Jakma <paul.jakma@sun.com>
* 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.
paul [Tue, 16 Aug 2005 15:22:14 +0000 (15:22 +0000)]
2005-08-16 Paul Jakma <paul.jakma@sun.com>
* 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.
paul [Wed, 10 Aug 2005 15:46:11 +0000 (15:46 +0000)]
2005-08-09 Paul Jakma <paul.jakma@sun.com>
* 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.
gdt [Wed, 10 Aug 2005 15:11:21 +0000 (15:11 +0000)]
add INSTALL.quagga.txt to the distribution, so that people who apply
patches and lose because of old autoconf/automake versions have the
opportunity to find tout what to do.
gdt [Wed, 10 Aug 2005 13:20:03 +0000 (13:20 +0000)]
2005-08-10 Greg Troxel <gdt@fnord.ir.bbn.com>
* 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.
hasso [Fri, 5 Aug 2005 07:40:15 +0000 (07:40 +0000)]
* ospf_zebra.c: Don't assert/stop before type == ZEBRA_ROUTE_MAX if
dealing with routemaps. There is ospf->route_map[ZEBRA_ROUTE_MAX]
for default-information.
paul [Fri, 29 Jul 2005 14:36:00 +0000 (14:36 +0000)]
2005-07-29 Paul Jakma <paul.jakma@sun.com>
* 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.
2005-07-26 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* 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.
paul [Tue, 12 Jul 2005 20:04:22 +0000 (20:04 +0000)]
2005-07-12 Paul Jakma <paul.jakma@sun.com>
* 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.
paul [Tue, 28 Jun 2005 17:17:12 +0000 (17:17 +0000)]
2005-06-28 Paul Jakma <paul.jakma@sun.com>
* (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
paul [Tue, 28 Jun 2005 12:44:16 +0000 (12:44 +0000)]
2005-06-28 Paul Jakma <paul.jakma@sun.com>
* (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.
paul [Tue, 28 Jun 2005 00:19:48 +0000 (00:19 +0000)]
2005-06-28 Paul Jakma <paul.jakma@sun.com>
* 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.
hasso [Fri, 24 Jun 2005 08:17:51 +0000 (08:17 +0000)]
* ospf6_message.c: Changed to be insensitive to changes of neighbors'
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.
hasso [Fri, 24 Jun 2005 07:50:12 +0000 (07:50 +0000)]
* ospf6_interface.c: fix the way inactivity_timer is called. Because
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).
paul [Wed, 15 Jun 2005 19:15:35 +0000 (19:15 +0000)]
2005-06-15 Paul Jakma <paul.jakma@sun.com>
* 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.
paul [Wed, 15 Jun 2005 11:00:11 +0000 (11:00 +0000)]
2005-06-15 Paul Jakma <paul.jakma@sun.com>
* 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.
paul [Tue, 14 Jun 2005 14:07:07 +0000 (14:07 +0000)]
2005-06-14 Paul Jakma <paul.jakma@sun.com>
* 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
paul [Mon, 13 Jun 2005 13:57:16 +0000 (13:57 +0000)]
2005-06-13 Paul Jakma <paul.jakma@sun.com>
* 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.
paul [Fri, 3 Jun 2005 18:01:50 +0000 (18:01 +0000)]
2005-06-03 Paul Jakma <paul.jakma@sun.com>
* 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.
paul [Thu, 2 Jun 2005 16:33:53 +0000 (16:33 +0000)]
2005-06-02 Paul Jakma <paul.jakma@sun.com>
* 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.
paul [Thu, 2 Jun 2005 08:20:53 +0000 (08:20 +0000)]
2005-06-01 Paul Jakma <paul.jakma@sun.com>
* 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
paul [Wed, 1 Jun 2005 11:17:05 +0000 (11:17 +0000)]
2005-06-01 Paul Jakma <paul.jakma@sun.com>
* 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
hasso [Tue, 31 May 2005 10:24:28 +0000 (10:24 +0000)]
* ospf6d.c: No need for double ';'. Fixes parsing "show ipv6 ospf6
database ..." commands for vtysh by extract.pl. Remove duplicate
install_element calls.
paul [Tue, 31 May 2005 08:38:50 +0000 (08:38 +0000)]
2005-05-31 Paul Jakma <paul.jakma@sun.com>
* 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.
paul [Sun, 29 May 2005 11:27:24 +0000 (11:27 +0000)]
2005-05-29 Paul Jakma <paul@dishone.st>
* ripd.c: (rip_output_process) fix error which crept in my
previous rip auth untanglement commit - it had become impossible
to not have authentication (even for v1).
paul [Wed, 25 May 2005 12:21:13 +0000 (12:21 +0000)]
2005-05-25 Paul Jakma <paul@dishone.st>
* isisd.c: (show_isis_generated_topology) change to _RO version
of list macro. remove the extra listnode variable. one of the
macros had had incorrect number of arguments.
paul [Mon, 23 May 2005 13:42:46 +0000 (13:42 +0000)]
2005-05-23 Paul Jakma <paul@dishone.st>
* workqueue.h: Add a WQ_QUEUE_BLOCKED item_status return code,
to allow a queue function to indicate the queue is not
ready/blocked - rather than any problem with the item at hand.
Add a notion of being able to 'plug' and 'unplug' a queue.
Add helpers to plug/unplug a queue.
Add a completion callback, to be called when a queue is emptied.
* workqueue.c: (work_queue_new) remove useless list_free.
(work_queue_schedule) new internal helper function to schedule
queue, if appropriate.
(work_queue_add) use work_queue_schedule
(show_work_queues) Print 'P' if queue is plugged.
(work_queue_plug) new API function, plug a queue - ie prevent it
from 'drained' / processed / scheduled.
(work_queue_unplug) unplug a queue, allowing it to be drained
/ scheduled / processed again.
(work_queue_run) Add support for WQ_QUEUE_BLOCKED.
Add comment for RETRY_NOW case.
Make hysteris more aggresive in ramping up granularity, improves
performance significantly.
Add support for calling completion callback when queue is emptied,
possibly useful for knowing when to unplug a queue.
paul [Mon, 23 May 2005 12:43:34 +0000 (12:43 +0000)]
2005-05-23 Paul Jakma <paul@dishone.st>
* routemap.c: (rmap_onmatch_goto) fix crash if 'continue' command
is used, which does not supply an argv[0].
this is a backport candidate /iff/ the trailing ; is removed
from VTY_GET_INTEGER_RANGE
* vty.h: fix the VTY_GET macros, do {..} while(0) so they have
correct function like syntax in usage.
paul [Mon, 23 May 2005 12:33:58 +0000 (12:33 +0000)]
2005-05-23 Paul Jakma <paul@dishone.st>
* memtypes.awk: use character classes, which work correctly in
all LC_COLLATE environments, unlike A-Z, which doesnt work in
eg estonian collate order. Reported by Hasso.
paul [Thu, 19 May 2005 02:12:25 +0000 (02:12 +0000)]
2005-05-19 Paul Jakma <paul@dishone.st>
* bgp_network.c: (bgp_accept) use XSTRDUP
* bgpd.c: (peer_delete) XFREE the correct memtype, not free.
(peer_create) use XSTRDUP
* bgp_packet.c: (bgp_stream_dup) deleted, stream_dup should be used
(various) update -> s/bgp_stream_dup/stream_dup
paul [Thu, 19 May 2005 01:50:11 +0000 (01:50 +0000)]
2005-05-19 Paul Jakma <paul@dishone.st>
* bgp_fsm.c: (bgp_stop) use sockunion_free, not XFREE..
* bgp_network.c: (bgp_getsockname) ditto
* bgp_routemap.c: (route_match_peer) ditto, als use a ret value and
remove one sockunion_free.
* bgpd.c: (peer_delete) ditto
paul [Thu, 19 May 2005 01:30:53 +0000 (01:30 +0000)]
2005-05-19 Paul Jakma <paul@dishone.st>
* thread.c: (thread_cancel_event) the number of pending events
cancelled is potentially useful information, dont throw it away,
pass it back to the caller.
paul [Wed, 18 May 2005 23:29:57 +0000 (23:29 +0000)]
2005-05-19 Paul Jakma <paul.jakma@sun.com>
* ospf_interface.c: (ospf_if_table_lookup) Fix a serious bug
a less serious one.
1: this function is supposed to lookup
entries in the oifs ospf_interface route_table and return either
an existing oi or NULL to indicate not found, its caller depends
on this, yet this function uses route_node_get which /always/
returns a route_node - one is created if none exists. Use
route_node_lookup instead. This should fix root cause of the
reports of the (ospf_add_to_if) assert being hit.
2: oi's are inserted into this table with prefixlength set to
/32 (indeed, it should be a hash table, not a route_table),
however prefixlength to lookup was not changed, if no valid entry
can be inserted other than /32, then nothng but /32 should be
looked up. This possibly only worked by fluke..
Fix confirmed by 2 reporters (one list, one IRC), definitely a
backport candidate once it has been incubated in HEAD for a while.
Thanks to Patrick Friedel and Ivan Warren for testing.
paul [Sun, 15 May 2005 14:25:08 +0000 (14:25 +0000)]
2005-05-15 Paul Jakma <paul@dishone.st>
* getopt.h: It's not just __GNU_LIBRARY__ which defines
getopt, eg __EXTENSIONS__ does too on SunOS. It still seems
awfully fragile though.
* getopt.c: include zebra.h after config.h, before including
getopt.h so that things at least are consistent..
* getopt1.c: ditto
paul [Fri, 13 May 2005 20:11:53 +0000 (20:11 +0000)]
- revert the commenting of touch doc/quagga.info, wont work because
defines.texi is autogenerated every configure time so it will always
be newer than quagga.info, and hence require quagga.info to be built. drat.
paul [Fri, 13 May 2005 07:26:07 +0000 (07:26 +0000)]
2005-05-13 Paul Jakma <paul.jakma@sun.com>
* prototype.daemons.in: Move the Solaris 10 SMF specific stuff to
a seperate package.
* depend.smf: dependencies for smf package
* pkginfo.smf.tmpl.in: pkginfo for smf
* prototype.smf.in: prototype for smf
* Makefile.am: Add smf to pkg_names
paul [Fri, 13 May 2005 07:15:35 +0000 (07:15 +0000)]
2005-05-13 Paul Jakma <paul.jakma@sun.com>
* quagga.xml.in: Sigh, XML child elements are order-sensitive.
* prototype.doc.in: info/dir doesnt get created always.. comment
out for now, likely needs to be done with an install method.
paul [Fri, 13 May 2005 07:09:50 +0000 (07:09 +0000)]
2005-05-13 Paul Jakma <paul.jakma@sun.com>
* configure.ac: Comment out the touch doc/quagga.info hack. I'm
hoping it's not needed anymore, cause it breaks out of tree builds
which i've become fond of.. Plus I think we sorted out most of
the original problems (updated texinfo.tex, moved the version
info to an autogenerated by automake version.texi). Dist users
most definitely wont be affected.
paul [Wed, 11 May 2005 18:09:59 +0000 (18:09 +0000)]
2005-05-11 Paul Jakma <paul.jakma@sun.com>
* (general) Fix memory leaks in opaque AS-scope LSAs, reported and
with much debugging done by by scott collins <scollins@agile.tv>.
(possible backport candidate?)
* ospf_lsa.c: (ospf_discard_from_db) dont call
ospf_ase_unregister_external_lsa for opaque-lsa's, opaques are
never registered with ase in the first place.
* ospf_packet.c: (general) Disabuse opaque related code of its
tendency to try gather up things into temporary lists.
(ospf_ls_upd) remove the temporary lists opaque uses, call
opaque functions inline, just like all other types.
(ospf_ls_ack) ditto.
(ospf_recv_packet) fixup sign warning.
* ospf_opaque.c: (general) fix the unneeded use of lists, and
untwist some of the logic.
(ospf_opaque_self_originated_lsa_received) take a single LSA
as argument, not a list of them. Remove the list loop. Logic
otherwise unchanged.
(ospf_opaque_ls_ack_received) Mostly ditto. But untwist the logic,
move the actions up into the switch block, remove the goto's and
sanitise the logic near the end a bit.
* ospf_opaque.h: Adjust definitions of aforementioned functions
in ospf_opaque.c to match.
paul [Sat, 7 May 2005 02:22:51 +0000 (02:22 +0000)]
2005-05-07 Yar Tikhiy <yar@comp.chem.msu.su>
* configure.ac: Check for OSes which support passing ifindex in
struct ip_mreq.
* lib/sockopt.c: Add support for BSD style ifindex in ip_mreq.
* ospfd/ospf_network.c: Log ifindex on multicast membership leave/join
events.
paul [Fri, 6 May 2005 21:37:42 +0000 (21:37 +0000)]
2005-05-06 Paul Jakma <paul.jakma@sun.com>
* (general) extern and static qualifiers added.
unspecified arguments in definitions fixed, typically they should
be 'void'.
function casts added for callbacks.
Guards added to headers which lacked them.
Proper headers included rather than relying on incomplete
definitions.
gcc noreturn function attribute where appropriate.
* ospf_opaque.c: remove the private definition of ospf_lsa's
ospf_lsa_refresh_delay.
* ospf_lsa.h: export ospf_lsa_refresh_delay
* ospf_packet.c: (ospf_make_md5_digest) make *auth_key const,
correct thing to do - removes need for the casts later.
* ospf_vty.c: Use vty.h's VTY_GET_INTEGER rather than ospf_vty's
home-brewed versions, shuts up several warnings.
* ospf_vty.h: remove VTY_GET_UINT32. VTY_GET_IPV4_ADDRESS and
VTY_GET_IPV4_PREFIX moved to lib/vty.h.
* ospf_zebra.c: (ospf_distribute_list_update_timer) hacky
overloading of the THREAD_ARG pointer should at least use
uintptr_t.
paul [Fri, 6 May 2005 21:25:49 +0000 (21:25 +0000)]
2005-05-06 Paul Jakma <paul@dishone.st>
* (general) extern and static'ification of functions in code and
header.
Cleanup any definitions with unspecified arguments.
Add casts for callback assignments where the callback is defined,
typically, as passing void *, but the function being assigned has
some other pointer type defined as its argument, as gcc complains
about casts from void * to X* via function arguments.
Fix some old K&R style function argument definitions.
Add noreturn gcc attribute to some functions, as appropriate.
Add unused gcc attribute to some functions (eg ones meant to help
while debugging)
Add guard defines to headers which were missing them.
* command.c: (install_node) add const qualifier, still doesnt shut
up the warning though, because of the double pointer.
(cmp_node) ditto
* keychain.c: (key_str2time) Add GET_LONG_RANGE() macro, derived
fromn vty.h ones to fix some of the (long) < 0 warnings.
* thread.c: (various) use thread_empty
(cpu_record_hash_key) should cast to uintptr_t, a stdint.h type
* vty.h: Add VTY_GET_IPV4_ADDRESS and VTY_GET_IPV4_PREFIX so they
removed from ospfd/ospf_vty.h
* zebra.h: Move definition of ZEBRA_PORT to here, to remove
dependence of lib on zebra/zserv.h