----
Release 3.6
6/26/95
(mrouted-only)

The 3.6 release fixes the following bugs:

  o mrouted would dump core when attempting to report no routes (i.e. upon
    startup, if you have no enabled phyint's)

  o mrouted would dump core if requested to traceroute a source for which it
    had no route

  o neighbor flags were not always properly updated on probe or report

  o mrouted would sometimes reply to a multicast traceroute on a disabled
    phyint; now it uses the first configured phyint to reply to traceroutes.

  o host routes (i.e. netmask 0xffffffff) works now; it was discarding
    IGMP from the host because it was coming from the "broadcast address"
    of the subnet.

  o send_igmp() now treats the failure to send an mtrace or a neighbor
    reply as informational, as opposed to warning.

  o mrouted would go into an infinite loop trying to respond to a traceroute
    for a source with a netmask of 0xffffffff.

  o vifs_with_neighbors was not being reset if the mrouted was restarted
    with SIGHUP

  o the default route was not being properly advertised to neighbors (although
    it was accepted if it was advertised to it)

  o ANSI-fication for those who it helps, still-K&R-ish for those it doesn't.

  o mtrace now attempts to trace three hops past a non-responding router,
    in the hopes that it does support traceroute but just couldn't respond
    (i.e. unicast didn't work and it can't source multicast because all its
    phyints are disabled).

  o mrinfo now times out even on a multicast router.


----
Release 3.5
5/8/95

The 3.5 release has the following new features:

  o The kernel and mrouted make sure that each is the correct version, to
    prevent problems with mismatched kernel/mrouted versions.  A too-old
    mrouted will die with the error:

    can't enable DVMRP routing in kernel: Option not supported by protocol

  o mrouted can accept and propogate a default route (essential for
    heirarchical multicast routing)

  o Kernel route cache keeps source-specific routes instead of subnet routes,
    eliminating hashing and longest-match problems.
    (allows classless routing, longest-match and default routing)

  o Cached kernel routes only get deleted if no traffic is flowing, to
    facilitate multicast traceroute

  o mrouted has a new configuration file parser, which provides better error
    messages than before, and allows named boundaries (see man page)

  o added "netmask" to phyint configuration, at the suggestion of
    Anders Klemets

  o System V and FreeBSD compatibility from John Brezak <brezak@ch.hp.com>

  o phyint's can have additional subnets configured, for people with
    multiple subnets on one physical network.  mrouted.conf syntax is
    altnet 1.2.3.0, or altnet 1.2.3.0/24 if you need to specify
    a different netmask.  There can be as many altnet statements
    as you need.

  o both mrouted and the kernel now support classless addresses.

  o the kernel supports PIM assert processing by notifying the router
    when a packet arrives on the wrong interface

  o the kernel keeps additional counters, and mrouted can be compiled to
    support SNMP and the Multicast MIB

  o the packet classifier in the kernel now uses the following udp port
    ranges:
      [0, 16384) - lowest priority, unclassified
      [16384, 32768) - highest priority, i.e. audio
      [32768, 49152) - medium priority, i.e. whiteboard
      [49152, 65536) - low priority, i.e. video
    A future release of a session directory will allocate ports in these
    ranges.

  o the configuration code has been modified to default tunnels' rate_limit
    parameters to 500kbps.  This is easily modified with a rate_limit keyword
    in mrouted.conf, but should be a good default for the MBONE in general.

  o The tunnel sending code now caches a route for ip_output(), this should
    help performance on machines with lots of tunnels.

  o Dispatching for de-capsulating packets is now via protosw[], making
    reception of other raw protocols more efficient

  o Neighbor capabilities are discovered via a bitmask as opposed to
    version number.

  o Multicast traceroute code improved

  o mrouted can be compiled with Routing Support for Resource Reservation,
    required for RSVP.


The 3.5 release fixes the following bugs:

  o The IGMPv2 query timeout field was interpreted as being in units of
    200ms as opposed to 100ms, thus the maximum timeout was set to twice
    the expected value.  This is not fatal, as mrouted always queries
    twice in the expectation that a packet could get loss, but it does
    make it less robust in the face of packet loss.

  o IGMP could report membership in local-only groups (i.e. 224.0.0.X)

  o IGMP could get confused by hearing its own new membership reports, thus
    a router would never perform fast leave.

  o IGMP could reset timers for the wrong interface.

  o mrouted put a bogus value in the maximum timeout field of IGMPv2 query
    packets.

  o Non-querier mrouters would respond to IGMP leave messages

  o mrouted was not performing fast leave properly

  o If the last member goes away on a transit network, the upstream router
    would stop forwarding even if there are downstream members.

  o Kernel hash function improved

  o Eliminated possibility of panic(): timeout in cache maintenance

  o Reordered resource allocation when sending upcall to handle failure properly

  o some endian-ness bugs squashed in mrouted, probably more to go.

  o Multicast traceroute could send a reply on a disabled interface.

----
Release 3.4
3/2/95

The 3.4 release consists of the following improvements to the mrouted
code.

1) Fixed bug in the traceroute code which causes mrouted to exit when a
   route is not found. (found by Steve Casner)

2) Fixed timestamp value in the traceroute code to use 32-bit NTP
   timestamp. (reported by Steve Casner)

3) Fixed bug in updating neighbor state, where a change to an older
   version router caused mrouted to send out unnecessary route updates.

4) Fixed bug in the scoping rules which did not check for a scoped parent
   interface causing traffic to cross scoped boundaries. (found by Bill Fenner)

5) Cleaned up the output produced by mrouted in the debug mode. 
   (still needs work)

----
Release 3.3
8/26/94

This release contains the following new features:

	(1) True multicast delivery, rather than "truncated broadcast".

	    Each subnet in the topology (e.g., the MBone) forms the
	    root of a delivery tree for multicast packets originating
	    on that subnet.  The branches of the tree lead to every
	    other subnet in the topology, by the shortest path from
	    the origin subnet.  In previous releases (1.x, 2.x) of the
	    IP multicast code, a multicast packet originating on
	    subnet S, addressed to multicast group G, is delivered to
	    all subnets of the tree rooted at S, except the "leaf"
	    subnets that have no members of group G.  In this new
	    release, the packet is delivered to only those subnets
	    that either have members of group G or are on the shortest
	    path to those that have members of group G.

	    (Actually, the "shortest paths" are really "shortest reverse
	    paths", but ...)

	(2) Configurable rate-limiting of forwarded multicast traffic on
	    each physical interface or tunnel, using a token-bucket
	    limiter.

	    The rate limiting feature is invoked by adding a
	    "rate_limit <b>" parameter to tunnel or phyint lines in
	    the /etc/mrouted.conf file.  The limit, <b> is specified
	    in kilobits per second.  For example:

    tunnel 13.2.16.100 13.2.100.239 metric 1 threshold 64 rate_limit 500
			
	    sets a multicast data rate limit of 500,000 bits per
	    second on the specified tunnel.

	(3) Classification of packets into "drop priorities" which
	    determine which multicast packets get dropped when the
	    packet arrival rate exceeds the rate limit on an outgoing
	    interface or tunnel.  (NOTE:  The packet classifier isn't
	    ready yet; for testing purposes, this release uses a
	    wired-in mapping of a few well-known multicast addresses
	    to priority values.  A future release will contain a
	    more general classifier.)

	(4) Administrative scoping of certain addresses so that they
	    do not get forwarded beyond the boundary router. 

	    A group of multicast addresses (239.x.x.x) have been set
	    aside for scoping purposes. Scoping hard-configures a 
	    router to be a boundary for the scoped address. Traffic
	    on a scoped address does not cross the boundary router.
	    This permits address re-use within different domains
	    without the problem of traffic overlapping between
	    different domains. For example,

	    phyint 128.4.2.3 boundary 239.2.4.0/24

	    sets a hard-configured boundary for 239.2.4.x data on the
	    interface defined by the 128.4.2.3 interface.

	(5) Support for lower leave latency. The IGMP protocol has been
	    modified to include support for faster detection of hosts
	    leaving groups.

	(6) Support for multicast traceroute. This utility will aid in
	    debugging problems that are multicast specific. The spec.
	    for this is being written up.

	(7) Support for RSVP. Modifications have been made. The RSVP
	    folks will announce its functionality shortly. If you
	    would like to participate in future experiments with the
	    RSVP resource reservation protocol, please compile the
	    kernel with the RSVP_ISI option set. Further instructions
	    for the user-level daemon set-up will be provided later.


In addition to the above capabilities, the following bug-fixes and
features have been added to this release.

	(a) Deterministic Tie Breaking, when two paths of equal costs
	    caused the router to choose the path which was heard about
	    first. This feature enables accurate determination of the
	    exact path.

	(b) Elimination of kernel bugs, caused by race conditions in 
	    the timeout routines.

	(c) Elimination of a bug in the tunnel encapsulation code,
	    causing it to set a tunnel variable before the tunnel was
	    set-up resulting in setting up a one-way tunnel. This may
	    be the cause of many people reporting that they are not
	    able to receive/send any multicast packets upon starting
	    mrouted.

	(d) Increase and dither of prune life-times. The idea was 
	    proposed by George Michaelson (G.Michaelson@cc.uq.oz.au).

	(e) No more multicasting to a non-multicast socket.

	(f) No more Multicast TCP.

	(g) Separate dump of routing table and cache table information.

	(h) Includes FDDI fixes from SUN.

	(g) Fix to ip_icmp.c which could cause a potential "panic".

	(h) Enforcement of the phyint statement preceding the tunnel
	    statement in the mrouted.conf file.

	(i) Restarting mrouted using the HUP signal without killing
	    the process.

	(j) Interface names can replace local addresses in the 
	    mrouted.conf files for the phyint command only (host names
	    support coming up shortly).

	(k) Non-pruning mode capability with "-p" option on command line
	    or "pruning off" line in the mrouted.conf file. To be used
	    sparingly and for debugging purposes only.

	(l) Suppression of prunes/grafts to old version neighbors

	(m) Exponential backoff for graft messages.

	(n) Prune state cleanup on reception of probe message, where a
	    generation number uniquely identifies each probe, so that a
	    router that goes down and comes up, will force any upstream
	    routers to reset any prior state information.

	(o) Detection of one-way interfaces.

	(p) Faster detection of neighbor loss (it used to take upto 3 mins
	    to detect it).

	(q) Patch for netinet/in_pcb.c which fixes the clash on port
	    numbers (provided by Richard Black <Richard.Black@cl.cam.ac.uk>
	    ref message to mbone@isi.edu (07/28/'94)).

