Commit Graph

123 Commits

Author SHA1 Message Date
Denis Ovsienko
aee567450e ospfd: reduce ospf_verify_header()
Protocol version checks fits ospf_packet_examin() better (like it is
implemented in ospf6d), and packet type check is already there.
2012-03-12 11:05:45 +01:00
Denis Ovsienko
bd5651f0ec ospfd: bring ospf_check_auth() into focus
The old ospf_check_auth() function did two different jobs depending on
AuType. For Null and Simple cases it actually authenticated the packet,
but for Cryptographic case it only checked declared packet size (not
taking the actual number of bytes on wire into account). The calling
function, ospf_verify_header(), had its own set of MD5/checksum checks
dispatched depending on AuType.

This commit makes the packet size check work against the real number of
bytes and moves it to ospf_packet_examine(). All MD5/checksum
verification is now performed in ospf_check_auth() function.

* ospf_packet.c
  * ospf_packet_examin(): check length with MD5 bytes in mind
  * ospf_verify_header(): remove all AuType-specific code
  * ospf_check_auth(): completely rewrite
2012-03-12 11:05:38 +01:00
Denis Ovsienko
b29adf9c3e ospfd: fix packet length check for auth/LLS cases
An OSPFv2 packet with trailing data blocks (authentication and/or
link-local signaling) failed the recently implemented packet length
check, because trailing data length isn't counted in the packet header
"length" field. This commit fixes respective check conditions.

* ospf_packet.c
  * ospf_packet_examin(): use "bytesdeclared" instead of "bytesonwire"
2012-03-12 11:05:30 +01:00
Denis Ovsienko
4e31de792e ospfd: introduce ospf_lsa_minlen[] (BZ#705)
This commit ports more packet checks to OSPFv2, in particular, LSA size
verification and Router-LSA link blocks verification.

* ospf_lsa.h: add LSA size macros
* ospf_packet.h: add struct ospf_ls_update
* ospf_packet.c
  * ospf_lsa_minlen[]: a direct equivalent of ospf6_lsa_minlen[]
  * ospf_router_lsa_links_examin(): new function, verifies trailing
    part of a Router-LSA
  * ospf_lsa_examin(): new function like ospf6_lsa_examin()
  * ospf_lsaseq_examin(): new function like ospf6_lsaseq_examin()
  * ospf_packet_examin(): add type-specific deeper level checks
2012-03-12 11:05:28 +01:00
Denis Ovsienko
2d8223c547 ospfd: review ospf_check_md5_digest()
Rewrite some pointer arithmetics without the additional variables and
move byte order conversion inside the function.
2012-03-12 11:05:22 +01:00
Denis Ovsienko
e52591481e ospfd: review ospf_check_auth()
1. The only purpose of "ibuf" argument was to get stream size, which
was always equal to OSPF_MAX_PACKET_SIZE + 1, exactly as initialized
in ospf_new().

2. Fix the packet size check condition, which was incorrect for very
large packets, at least in theory.
2012-03-12 11:05:19 +01:00
Denis Ovsienko
75c8eabbb5 ospfd: introduce ospf_packet_minlen[] (BZ#705)
This commit ports some of the OSPFv3 packet reception checks
to OSPFv2.

* ospf_packet.c
  * ospf_packet_minlen[]: a direct equivalent of ospf6_packet_minlen[]
  * ospf_packet_examin(): new function designed after the first part
    of ospf6_packet_examin()
  * ospf_read(): verify received packet with ospf_packet_examin()
* ospf_packet.h: add convenience macros
2012-03-12 11:05:14 +01:00
Denis Ovsienko
7e0e2cb14c ospfd: fix ospf_packet_add_top() to use LOOKUP() 2012-03-12 11:05:11 +01:00
Denis Ovsienko
272ca1e330 ospfd: use LOOKUP() for ospf_packet_type_str
* ospf_packet.h: add proper str/max extern declarations
* ospf_packet.c
  * ospf_packet_type_str: rewrite in "struct message", add max value
  * ospf_packet_add(): use LOOKUP()
  * ospf_write(): ditto
  * ospf_hello(): ditto
  * ospf_read(): ditto
* ospf_dump.h: the declaration does not belong here
* ospf_dump.c
  * ospf_header_dump(): use LOOKUP()
  * show_debugging_ospf(): ditto
2012-03-12 11:04:54 +01:00
Paul Jakma
f63f06da2e general: remove inline qualifiers and move in-header functions to objects
* (general) Move functions in headers into files, to be compiled into
  shared object files. Remove inline qualifier from functions. Let the
  compiler do the work.
2012-01-06 16:18:18 +00:00
Dmitrij Tejblum
de5ccb9602 ospfd: fix packet reception for FreeBSD 10.
* ospf_packet.c (ospf_recv_packet): FreeBSD, starting from version 10, will not
  subtract the IP header size from ip_len.

This is the patch from FreeBSD's ports/net/quagga/files/patch-ospfd__ospf_packet.c,
by Boris Kovalenko.
2012-01-02 18:37:32 +04:00
Jaroslav Fojtik
223da1a912 ospfd: more info in LSA checksum warning (BZ#685) 2011-12-21 16:42:35 +04:00
YAMAMOTO Shigeru
3aad46bdaa ospfd: fix regression in recent commit
commit '717750433839762d23a5f8d88fe0b4d57c8d490a' causes SEGV error,
when 'oi = ospf_if_lookup_recv_if (ospf, iph->ip_src, ifp);' returns
NULL.

* ospf_packet.c
  * ospf_read(): change a place of calling 'ospf_verify_header()'
2011-09-29 16:27:29 +04:00
Denis Ovsienko
7177504338 ospfd: CVE-2011-3325 part 2 (OSPF pkt type segv)
This vulnerability (CERT-FI #514838) was reported by CROSS project.

The error is reproducible only when ospfd debugging is enabled:
  * debug ospf packet all
  * debug ospf zebra
When incoming packet header type field is set to 0x0a, ospfd will crash.

* ospf_packet.c
  * ospf_verify_header(): add type field check
  * ospf_read(): perform input checks early
2011-09-26 18:46:54 +04:00
Denis Ovsienko
61ab030160 ospfd: CVE-2011-3325 part 1 (OSPF header underrun)
This vulnerability (CERT-FI #514838) was reported by CROSS project.

When only 14 first bytes of a Hello packet is delivered, ospfd crashes.

* ospf_packet.c
  * ospf_read(): add size check
2011-09-26 18:46:42 +04:00
Greg Troxel
8ced4e82e6 Merge remote-tracking branch 'polymorf/master' 2011-07-13 13:20:06 -04:00
Paul Jakma
aa276fd783 ospfd: Prioritise hellos for sending by queueing to head of output buffer
* It's possible for the packet output buffer to be filled up with a long
  series of non-Hello packets in between Hellos packets, such that the
  router's neighbours don't receive the Hello packet in time, even though
  the hello-timer ran at about the right time. Fix this by prioritising
  Hello packets, letting them skip the queue and go ahead of any packets
  already on the queue.

  This problem can occur when there are lots of LSAs and slow links.

* ospf_packet.h: (ospf_hello_send_sub) not used outside of ospf_packet.c
* ospf_packet.c: (ospf_fifo_push_head) add packet to head of fifo (so its
  no longer really a fifo, but hey)
  (ospf_packet_add_top) add packet to top of the packet output queue.
  (ospf_hello_send_sub) Put Hello's at the top of the packet output queue.
  make it take in_addr_t parameter, so that this
  ospf_hello_send can re-use this code too.
  (ospf_hello_send) consolidate code by using ospf_hello_send_sub
  (ospf_poll_send,ospf_hello_reply_timer) adjust for ospf_hello_send_sub.
2010-12-08 17:11:19 +00:00
Paul Jakma
57c5c6526d ospfd: Reset neighbour inactivity timer for any packet arrival
* The hello protocol monitors connectivity in 2 different ways:

  a) local -> remote
  b) remote -> local

  Connectivity is required in both directions (2-way) for adjacencies to
  form.

  The first requires a round-trip to detect, and is done by advertising
  which other hosts a router knows about in its hello messages.  This allows
  a host to detect which other routers are and are not receiving its
  message.  If a remote neighbour delists the local router, then the local
  router raises a "1-Way Received" event.

  The latter is straight-forward, and is detected by setting a timer for the
  neighbour. If another Hello packet is not received within this time then
  the neighbour is dead, and a separate "Inactive" event is raised.

  These are 2 different and relatively independent measures.

  Knowing that we can optimise the 2nd, remote->local measure and reset
  the timer when /any/ packet arrives from that neighbour. For any packet
  is as good as a Hello packet. This can help in marginal situations, where
  the number of protocol messages that must be sent sometimes can exceed
  the capacity of the network to transmit the messages within the configured
  dead-time. I.e. an OSPF network with lots of LSAs, slow links and/or
  slow hosts (e.g. O(10k) LSAs, O(100kbit) links, embedded CPUs, and O(10s)
  dead-times).

  This optimisation allows an OSPF network to run closer to this margin,
  and/or allows networks to perhaps better cope with rare periods of
  exceptional load, where otherwise they would not.

  It's fully compatible with plain OSPF implementations and doesn't
  prejudice dead-neighbour detection.

* ospf_nsm.h: Rename HelloReceived event to PacketReceived.
* ospf_nsm.c: (nsm_hello_received) -> nsm_packet_received
* ospf_packet.c: Schedule PacketReceived whenever a valid message is
  received.
2010-12-08 17:11:18 +00:00
Paul Jakma
2c9f8e36c4 ospfd: OSPF_MIN_LS_ARRIVAL compare should be >= to match ospf_flood
* ospf_packet.c: (ospf_ls_upd) the corresponding test on the arrival side
  in (ospf_flood) is <, so this should be >=, not >, purely for consistency.

  There is no practical effect here though.
2010-12-08 17:11:18 +00:00
David BÉRARD
0150c9c969 Fix ip_len byte order in DragonFly's raw socket 2010-05-11 10:17:53 +02:00
Paul Jakma
2cd754de60 ospfd: Fix debug messages that were masked by DISCARD_LSA
* ospf_packet.c: (ospf_ls_upd) DISCARD_LSA continues, and so should be
after debug messages, not before them.
2010-01-14 16:26:12 +03:00
Paul Jakma
11637435b2 ospfd: Make "Packet ... received on wrong link" conditional on debug
* ospf_packet.c: make this message conditional on 'debug ospf event', as it
  be easily triggered with, e.g., multiple subnets sharing same physical
  network. E.g, see bug #532.
2009-08-11 12:25:42 +01:00
Joakim Tjernlund
05cf46badb ospfd: Make ospf_if_lookup_recv_if() find the right unnumbered i/f
This function will return the interface for the first matching
remote address for PtP i/f's. That won't work for multiple
unnumbered i/f's as these may all have the same address.

Pass in the struct interface pointer, ifp, to find the
correct set of oi's to search in. This also reduces the
size of the search list, making it faster.

* ospfd/ospf_interface.c: Add struct interface * param to
  ospf_if_lookup_recv_if() to select the right list to search in.
* ospfd/ospf_interface.h: ditto.
* ospfd/ospf_packet.c: Pass new ifp argument to ospf_if_lookup_recv_if()
2009-07-28 18:47:43 +01:00
Dmitry Tejblum
c9035ccd13 [ospfd] discount IP header size from a new LSA pkt 2009-06-24 20:14:30 +04:00
Joakim Tjernlund
491eddc20e [ospfd] Move passive interface check
* ospf_packet.c: Apply passive check and drop for all packages
  and not just Hellos.

Signed-off-by: Paul Jakma <paul@quagga.net>
2008-09-24 17:03:59 +01:00
Joakim Tjernlund
53d0deceeb Set destination for PtP links to OSPF_ALLSPFROUTERS.
Update ospf_db_desc_send(), ospf_ls_upd_queue_send() and ospf_ls_req_send()
to always use OSPF_ALLSPFROUTERS for PtP links.

See RFC 2328, chap 8.1 for details:

    "The IP destination address for the packet is selected as
     follows.  On physical point-to-point networks, the IP
     destination is always set to the address AllSPFRouters."

Without this, it won't be possible to establish adjacencies on
multiple unnumbered links to the same router.
ChangeLog:
2008-07-25 Joakim Tjernlund <Joakim.Tjernlund@transmode.se>

	* ospfd/ospf_packet.c: Set destination for PtP links to
	  OSPF_ALLSPFROUTERS.
2008-08-25 09:52:06 +02:00
Denis Ovsienko
b7fe414112 Bug #362 is fixed now. 2007-08-21 16:32:56 +00:00
Paul Jakma
6f0e3f6e17 [autoconf] bugs 162,303,178: Fix 'present but can not be compiled' warnings
2007-05-09 Paul Jakma <paul.jakma@sun.com>

	* configure.ac: sys/conf.h depends on sys/param.h, at least on
	  FBSD 6.2.
	  (bug #363) Should check for in_pktinfo for IRDP

2006-05-27 Paul Jakma <paul.jakma@sun.com>

	* configure.ac: General cleanup of header and type checks, introducing
	  an internal define, QUAGGA_INCLUDES, to build up a list of
	  stuff to include so as to avoid 'present but cant be compiled'
	  warnings.
	  Misc additional checks of things missing according to autoscan.
	  Add LIBM, for bgpd's use of libm, so as to avoid burdening
	  LIBS, and all the binaries, with libm linkage.
	  Remove the bad practice of using m4 changequote(), just
	  quote the []'s in the case statements properly.
	  This should fix bugs 162, 303 and 178.
	* */*.{c,h}: Update all HAVE_* to the standard autoconf namespaced
	  HAVE_* defines. I.e. HAVE_SA_LEN -> HAVE_STRUCT_SOCKADDR_SA_LEN,
	* bgpd/Makefile.am: Add LIBM to bgpd's LDADD, for pow().
2007-05-10 02:38:51 +00:00
Paul Jakma
7ffa8fa232 [ospfd] Add passive-interface default support
2006-10-22 Yar Tikhiy <yar@comp.chem.msu.su>

	* (general) Add support for passive-interface default (with
	  minor edits by Paul Jakma).
	* ospf_interface.h: Add OSPF_IF_PASSIVE_STATUS macro, looking
	  at configured value, or the global 'default' value, as
	  required.
	* ospf_interface.c: (ospf_if_new_hook) Leave passive
	  unconfigured per default, allowing global 'default' to
	  take effect for unconfigured interfaces.
	* ospf_packet.c: (various) use OSPF_IF_PASSIVE_STATUS
	* ospf_vty.c: (ospf_passive_interface_default) new function,
	  unset passive from all interfaces if default is enabled, as
	  the per-iface settings become redundant.
	  (ospf_passive_interface_update) new func, update passive
	  setting taking global default into account.
	  ({no,}ospf_passive_interface_addr_cmd) Add support for
	  'default' variant of command.
	  (show_ip_ospf_interface_sub) Update to take global
	  default into account when printing passive status.
	  (ospf_config_write) ditto.
	* ospfd.c: (ospf_new) set global passive-interface default.
	* ospfd.h: (struct ospf) Add field for global
          passive-interface.
2006-10-22 20:07:53 +00:00
Andrew J. Schorr
08c8367197 [ospfd] Improve some warning messages.
2006-09-25 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_packet_dup, ospf_make_md5_digest)
	  Fix zlog_warn messages to eliminate compiler warnings.
	  (ospf_hello) Improve warning messages to show why we
	  are complaining.
2006-09-25 13:26:14 +00:00
Paul Jakma
b5aeb4410a [ospfd] Fix assertion in DB-exchange fix, hit by ogier-db-ex-opt commit
2006-08-28 Andy Gay <andy@andynet.net>

	* ospf_packet.c: (ospf_make_db_desc) Assert added with More-bit
	  fixes does not hold up with addition of Ogier DB-Exchange
	  optimisation, which can empty the db-summary list in between
	  sent DD packets. Remove assert, update More-bit always when
	  in Exchange.
2006-08-30 18:47:37 +00:00
Paul Jakma
2518efd15b [ospfd] Bug #134, ospfd should be more robust to backward time change
2006-08-25 Paul Jakma <paul.jakma@sun.com>

	* (general) Bug #134. Be more robust to backward time changes,
	  use the newly added libzebra time functions.
	  In most cases: recent_time -> recent_relative_time()
	  gettimeofday -> quagga_gettime (QUAGGA_CLK_MONOTONIC, ..)
	  time -> quagga_time.
	  (ospf_make_md5_digest) time() call deliberately not changed.
	  (ospf_external_lsa_refresh) remove useless gettimeofday, LSA
	  tv_orig time was already set in ospf_lsa_new, called via
	  ospf_external_lsa_new.
2006-08-27 06:49:29 +00:00
Paul Jakma
f0894cf8c3 [ospfd] draft-ogier-ospf-dbex-opt DB-exchange optimisation
2006-08-03 Paul Jakma <paul.jakma@sun.com>

	* ospf_packet.c: (ospf_make_db_desc) Implement
	  draft-ogier-ospf-dbex-opt DB-exchange optimisation.
2006-08-27 06:40:04 +00:00
Paul Jakma
8dd24ee6d7 [ospfd] Raise ExchangeDone earlier, avoid often needless round of DD packets
2006-08-03 Paul Jakma <paul.jakma@sun.com>

	* ospf_packet.c: (ospf_make_db_desc) Unset the DD More bit
	  after constructing the packet, if appropriate.
	  (ospf_db_desc_proc) Speed up Exchange, slave should raise
	  ExchangeDone earlier, as RFC mandates, by forming its reply
	  before deciding whether both sides are done, avoids a
	  needless round of empty DD packet exchanges at the end of
	  Exchange, hence speeding up ExchangeDone.
	  (ospf_db_desc) use UNSET_FLAG macro.
2006-08-27 06:29:30 +00:00
Paul Jakma
1fe6ed38cd [ospfd] Allow ospf_lsa_unlock to NULL out callers' LSA pointers upon free
2006-07-26 Paul Jakma <paul.jakma@sun.com>

	* ospf_lsa.{c,h}: (ospf_lsa_unlock) Change to take a double pointer
	  to the LSA to be 'unlocked', so that, if the LSA is freed, the
	  callers pointer to the LSA can be NULLed out, allowing any further
	  use of that pointer to provoke a crash sooner rather than later.
	* ospf_*.c: (general) Adjust callers of ospf_lsa_unlock to match
	  previous. Try annotate 'locking' somewhat to show which 'locks'
	  are protecting what LSA reference, if not obvious.
	* ospf_opaque.c: (ospf_opaque_lsa_install) Trivial: remove useless
	  goto, replace with return.
	* ospf_packet.c: (ospf_make_ls_ack) Trivial: merge two list loops,
	  the dual-loop predated the delete-safe list-loop macro.
2006-07-26 09:37:26 +00:00
Andrew J. Schorr
13cd3dc1e8 [ospfd] Improve Hello NetworkMask mismatch warning to give more info
2006-07-10 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_hello) Improve NetworkMask mismatch warning
	  message to include interface name and conflicting prefix lengths.
2006-07-11 01:50:30 +00:00
Paul Jakma
429ac78cc6 [ospfd] Fix multicast membership drop bug
2006-06-15 Paul Jakma <paul.jakma@sun.com>

	* Reported by Milan Koci
	* ospf_interface.h: (struct ospf_if_info) Add reference counts
	  for multicast group memberships. Add various macros to help
	  manipulate/check membership state.
	* ospf_interface.c: (ospf_if_set_multicast) Maintain the
	  ospf_if_info reference counts, and only actually drop
	  memberships if it hits 0, to avoid losing membership when
	  OSPF is disabled on an interface with multiple active OSPF
	  interfaces.
	* ospf_packet.c: (ospf_{hello,read}) Use the new macros to
	  check/set
	  multicast membership.
	* ospf_vty.c: (show_ip_ospf_interface_sub) ditto.
2006-06-15 18:40:49 +00:00
Paul Jakma
88871b1d1e [ospfd] suppres mostly uninteresting debug message unless debug is set
2006-05-30 Paul Jakma <paul.jakma@sun.com>

	* ospf_packet.c: (ospf_read) Debug message about packets
	  received on unenabled interfaces should be conditional on
	  debug being set.
2006-06-15 11:41:19 +00:00
paul
c6371718f3 [ospfd/zserv] adjust to new format
2006-01-17 Paul Jakma <paul.jakma@sun.com>

	* ospf_packet.c: (ospf_verify_header) print out the types
	  involved if there's a mismatch.
	* ospf_zebra.c: (ospf_zebra_add) Adjust to new zserv format.
2006-01-17 17:49:53 +00:00
paul
818e56cf27 [ospfd] fix undefined effect expression
2006-01-10 Juris Kalnins <juris@mt.lv>

	* ospf_packet.c: (ospf_make_md5_digest) fix odd, if not
	  undefined effect, assignment of an increment expression.
2006-01-10 23:27:05 +00:00
paul
6d45276f0c 2005-11-03 Paul Jakma <paul.jakma@sun.com>
* ospf_packet.c: Change level of some warnings to
	  informational.
2005-11-03 11:15:44 +00:00
paul
484315fd27 2005-11-03 Paul Jakma <paul.jakma@sun.com>
* ospf_apiserver.c: (apiserver_sync_callback) stray semi-colon
	* ospf_packet.c: include checksum.h, remove the in_cksum extern
	* prototypes.
	* ospf_te.h: Add braces, quell warning.
2005-11-03 09:08:29 +00:00
paul
d24f6e2a34 2005-10-21 Paul Jakma <paul.jakma@sun.com>
* (general) SPF millisecond resolution timer with adaptive,
	  linear back-off holdtime. Prettification of ospf_timer_dump.
	* ospf_dump.c: (ospf_timeval_dump) new function. The guts of
	  ospf_timer_dump, but made to be more dynamic in printing out
	  the relative timeval, sliding the precision printed out
	  according to the value.
	  (ospf_timer_dump) guts moved to ospf_timeval_dump.
	* ospf_dump.h: export ospf_timeval_dump.
	* ospf_flood.c: (ospf_flood) remove gettimeofday, use
	  the libzebra exported recent_time instead, as it's not
	  terribly critical to have time exactly right - the dropped
	  LSA will be retransmited to us if we don't ACK it.
	* ospf_packet.c: (ospf_ls_upd_timer) Ditto, but here we're
	  not transmitting, just putting LSA back on update transmit list.
	* ospfd.h: delay and holdtimes should be unsigned.
	  Add spf_max_holdtime and spf_hold_multiplier.
	  Update default defines for delay and hold time to be in msec.
	  (struct ospf) change the SPF timestamp to a struct timeval.
	  Remove ospf_timers_spf_(un)?set.
	* ospfd.c: (ospf_timers_spf_{set,unset}) removed.
	  (ospf_new) initialise spf_max_holdtime and spf_hold_multiplier
	* ospf_spf.c: (ospf_spf_calculate) SPF timestamp is a timeval
	  now, update with gettimeofday.
	  (ospf_spf_calculate_schedule) Change SPF timers to millisecond
	  resolution.
	  Make the holdtime be adaptive, with a linear increase in
	  holdtime ever consecutive SPF run which occurs within holdtime
	  of previous SPF, bounded by spf_max_holdtime.
	* ospf_vty.c: Update spf timers commands.
	  (ospf_timers_spf_set) trivial helper.
	  (ospf_timers_throttle_spf_cmd) new command to set SPF delay,
	  initial hold and max hold times with millisecond resolution.
	  (ospf_timers_spf_cmd) Deprecated. Accept the old values,
	  convert to msec, truncate to new limits.
	  (no_ospf_timers_throttle_spf_cmd) set timers to defaults.
	  (no_ospf_timers_spf_cmd) deprecated form, same as previous.
	  (show_ip_ospf_cmd) Display SPF parameters and times.
	  (show_ip_ospf_neighbour_header) Centralise the 'sh ip os ne'
	  header.
	  (show_ip_ospf_neighbor_sub) Fix the field widths. Get rid of
	  the multiple spaces which were making the lines even longer.
	  (show_ip_ospf_neighbor_cmd) Use show_ip_ospf_neighbour_header
	  (show_ip_ospf_neighbor_all_cmd) ditto and fix the field
	  widths for NBMA neighbours.
	  (show_ip_ospf_neighbor_int) Use header function.
	  (show_ip_ospf_nbr_nbma_detail_sub) use sizeof for timebuf,
	  local array - safer.
	  (show_ip_ospf_neighbor_detail_sub) ditto
	  (ospf_vty_init) install the new SPF throttle timer commands.
2005-10-21 09:23:12 +00:00
paul
f9ad937f53 2005-10-21 Paul Jakma <paul.jakma@sun.com>
* (general) OSPF fast, sub-second hello and 1s dead-interval
	  support. A warning fix. Millisec support for ospf_timer_dump.
	  Change auto-cost ref-bandwidth to add a comment to write out
	  of config, rather than printing annoying messages to vty on
	  startup.
	* ospf_dump.c: (ospf_timer_dump) Print out milliseconds too.
	  Callers typically specify a length of 9, so most see
	  millisecs unless they specify the additional length.
	* ospf_interface.h: (struct ospf_interface) new interface param,
	  fast_hello.
	* ospf_interface.c: (ospf_if_table_lookup) add brackets,
	  gcc warning fix.
	  (ospf_new_if_params) Initialise fast_hello param.
	  (ospf_free_if_params) Check whether fast_hello is configured.
	  (ospf_if_new_hook) set fast_hello to default.
	* ospf_ism.h: Wrap OSPF_ISM_TIMER_ON inside do {} while (0) to
	  prevent funny side-effects from its if statement when this
	  macro is used conditionally by other macros.
	  (OSPF_ISM_TIMER_MSEC_ON) new macro, set in milliseconds.
	  (OSPF_HELLO_TIMER_ON) new macro to set hello timer according
	  to whether fast_hello is set.
	* ospf_ism.c: Update all setting of the hello timer to use
	  either OSPF_ISM_TIMER_MSEC_ON or OSPF_HELLO_TIMER_ON. The
	  former is used when hello is to be sent immediately.
	* ospf_nsm.c: ditto
	* ospf_packet.c: (ospf_hello) hello-interval is not checked
	  for mismatch if fast_hello is set.
	  (ospf_read) Annoying nit, fix "no ospf_interface" to be debug
	  rather than a warning, as it can be perfectly normal to
	  receive packets when logical subnets are used.
	  (ospf_make_hello) Set hello-interval to 0 if fast-hellos are
	  configured.
	* ospf_vty.c: (ospf_auto_cost_reference_bandwidth) annoying
	  nit, don't vty_out if this command is given, it gets tired
	  quick.
	  (show_ip_ospf_interface_sub) Print the hello-interval
	  according to whether fast-hello is set or not.
	  Print the extra 5 millisec characters from (ospf_timer_dump)
	  if fast-hello is configured.
	  (ospf_vty_dead_interval_set) new function, common to all
	  forms of dead-interval command, to set dead-interval and
	  fast-hello correctly. If a dead-interval is given, unset
	  fast-hello, else if a hello-multiplier is set, set
          dead-interval to 1 and fast-hello to given multiplier.
	  (ip_ospf_dead_interval_addr_cmd) use
	  ospf_vty_dead_interval_set().
	  (ip_ospf_dead_interval_minimal_addr_cmd) ditto.
	  (no_ip_ospf_dead_interval) Unset fast-hello.
	  (no_ip_ospf_hello_interval) Bug-fix, unset of hello-interval
	  should set it to OSPF_HELLO_INTERVAL_DEFAULT, not
	  OSPF_ROUTER_DEAD_INTERVAL_DEFAULT.
	  (config_write_interface) Write out fast-hello.
	  (ospf_config_write) Write a comment about
	  "auto-cost reference-bandwidth" having to be equal on all
	  routers. Hopefully just as noticeable as old practice of
	  writing to vty, but less annoying.
	  (ospf_vty_if_init) install the two new dead-interval
	  commands.
	* ospfd.h: Add defines for OSPF_ROUTER_DEAD_INTERVAL_MINIMAL
	  and OSPF_FAST_HELLO_DEFAULT.
2005-10-21 00:45:17 +00:00
paul
3623814abc 2005-10-11 Paul Jakma <paul.jakma@sun.com>
* ospf_api.c: sign warnings.
	* ospf_apiserver.c: sign warning and convert all the struct
	  in_addr initialisations so as not to make assumptions about
	  how this struct is organised, initialise the s_addr member
	  explicitely.
	* ospf_packet.c: Add const qualifier to auth_key.
2005-10-11 04:12:54 +00:00
vincent
ba68253771 2005-09-29 Alain Ritoux <alain.ritoux@6wind.com>
* ospfd/ospf_vty.c: forece default route LSA to be re_issued whenever
      cost is changed ( [no] ip ospf area XXX default-cost YYY)
      Support ignore-mtu option
    * ospfd/ospfd.h: define OSPF_MTU_IGNORE_DEFAULT
    * ospfd/ospf_packet.c: support ignore-mtu option
    * ospfd/ospf_interface.h: field added for skipping MTU check
    * ospfd/ospf_interface.c: fix memory leak in ospf_crypt_key_delete()
      Set mtu_ignore field to default value
    * ospfd/ospf_abr.[ch]: export ospf_abr_announce_network_to_area()
    * ospfd/ospf_ism.h: add MACRO to convert internal ISM status into SNMP
      correct values
    * ospfd/ospf_snmp.c: add sanity check on LSA type in lsdb_lookup_next()
      convert OSPFIFSTATE internal status into SNMP values
2005-09-29 13:52:57 +00:00
vincent
c1a03d4774 2005-09-28 Alain Ritoux <alain.ritoux@6wind.com>
* lib/md5-gnu.h: removed
    * lib/md5.h: replaces md5-gnu.h
    * lib/Makefile.am: use correct md5.h
    * lib/md5.c: import from WIDE
    * ospfd/ospf_packet.c: use new md5 API
    * ripd/ripd.c: use new md5 API
2005-09-28 15:47:44 +00:00
paul
69310a679a 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.
2005-05-11 18:09:59 +00:00
paul
4dadc291e5 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.
2005-05-06 21:37:42 +00:00
paul
1eb8ef2584 2005-04-07 Paul Jakma <paul.jakma@sun.com>
* (global): Fix up list loops to match changes in lib/linklist,
	  and some basic auditing of usage.
	* configure.ac: define QUAGGA_NO_DEPRECATED_INTERFACES
	* HACKING: Add notes about deprecating interfaces and commands.
	* lib/linklist.h: Add usage comments.
	  Rename getdata macro to listgetdata.
	  Rename nextnode to listnextnode and fix its odd behaviour to be
	  less dangerous.
	  Make listgetdata macro assert node is not null, NULL list entries
          should be bug condition.
          ALL_LIST_ELEMENTS, new macro, forward-referencing macro for use
          with for loop, Suggested by Jim Carlson of Sun.
          Add ALL_LIST_ELEMENTS_RO for cases which obviously do not need the
          "safety" of previous macro.
	  LISTNODE_ADD and DELETE macros renamed to ATTACH, DETACH, to
	  distinguish from the similarly named functions, and reflect their
	  effect better.
	  Add a QUAGGA_NO_DEPRECATED_INTERFACES define guarded section
	  with the old defines which were modified above,
	  for backwards compatibility - guarded to prevent Quagga using it..
	* lib/linklist.c: fix up for linklist.h changes.
	* ospf6d/ospf6_abr.c: (ospf6_abr_examin_brouter) change to a single
	  scan of the area list, rather than scanning all areas first for
	  INTER_ROUTER and then again for INTER_NETWORK. According to
	  16.2, the scan should be area specific anyway, and further
	  ospf6d does not seem to implement 16.3 anyway.
2005-04-07 07:30:20 +00:00