Annotation of embedaddon/mrouted/ChangeLog, revision 1.1.1.2

1.1       misho       1: #+TITLE:    mrouted | Change Log
1.1.1.2 ! misho       2: #+AUTHOR:   Steve Deering, Ajit Thyagarajan, Bill Fenner
        !             3: 
        !             4: * Release 3.9.6: October 23, 2011
        !             5: ** Changes & New Features
        !             6:    - The Makefile now accepts CFLAGS from the environment instead of simply
        !             7:      overriding. The old USERFLAGS variable, previously intended for this
        !             8:      purpose, is still supported for backwards compatibility reasons.
        !             9: 
        !            10: ** Bug Fixes
        !            11: 
        !            12:    - Serious regression in route.c, introduced in 3.9.5, caused by the link
        !            13:      list refactor. Fix by Seth Hinze <ultrix@gmail.com>
        !            14: 
        !            15:    - Fix GCC 4.6 warnings for unused variables.
1.1       misho      16: 
                     17: * Release 3.9.5: March 5, 2011
                     18: ** Changes & New Features
                     19:   - The location of dump files have been moved from /var/tmp to /var/run/mrouted
                     20:     due to the insecure nature of /var/tmp.  See more below.
                     21: 
                     22:   - Add -r,--show-routes which sends SIGUSR1 to a running daemon, waits for the
                     23:     file /var/run/mrouted/mrouted.dump to be updated, and then displays the
                     24:     result on stdout.
                     25: 
                     26: ** Bug Fixes
                     27:   - The linked list implementation used in route.c caused several problems and
                     28:     as a result has been refactored.  This fixes several SIGSEGV crashes a couple
                     29:     of memory leaks as well as GitHub issue #7.
                     30: 
                     31:   - Ported from pimd after CVE-2011-0007: Insecure file creation in /var/tmp.
                     32:     "On USR1, pimd will write to /var/tmp/pimd.dump a dump of the multicast route
                     33:     table. Since /var/tmp is writable by any user, a user can create a symlink to any
                     34:     file he wants to destroy with the content of the multicast routing table."
                     35: 
                     36: * Release 3.9.4: November 19, 2010
                     37: 
                     38: ** Bug Fixes
                     39:   - ~kern.c:k_del_vif()~ does not work properly in Linux.
                     40: 
                     41:     When some interface (known by mrouted) goes down, mrouted tries to remove
                     42:     related VIF by calling ~stop_vif()~, which in turn calls ~k_del_vif()~.  After
                     43:     ~k_del_vif()~ is called, mrouted exits with the following error:
                     44: 
                     45:     setsockopt ~MRT_DEL_VIF~ on vif 3: Invalid argument
                     46: 
                     47:     The reason for this is due to differences in the Linux and *BSD ~MRT_DEL_VIF~
                     48:     API.  The Linux kernel expects to receive a ~struct vifctl~ associated with the
                     49:     VIF to be deleted, *BSD systems on the other hand expect to receive the index
                     50:     of that VIF.
                     51: 
                     52:     Fix contributed by Dan Kruchinin <mailto:dkruchinin@acm.org>
                     53: 
                     54: * Release 3.9.3: October 11, 2010
                     55: 
                     56: ** Changes & New Features
                     57:   - Update man page with =--long-options=, missing sections and improve debug help.
                     58: 
                     59:   - Cleanup Makefile for use with BSD PMake as well as GNU Make.
                     60: 
                     61: ** Bug Fixes
                     62: 
                     63:   - Fix =NULL= pointer dereference in conf file parser.  Problem will arise for all
                     64:     interfaces that at one point might not have an address.
                     65: 
                     66:     Reported by Dan Kruchinin <mailto:dkruchinin@acm.org>
                     67: 
                     68:   - Fix problem with running the tunnel directive on OpenVPN, PPTP, L2TP tunnels as
                     69:     well as PPP links.  All of which use a 255.255.255.255 netmask on their interfaces.
                     70: 
                     71:     See http://openvpn.net/archive/openvpn-users/2004-04/msg00003.html for original
                     72:     problem report.
                     73: 
                     74:     Fix contributed by Dan Kruchinin <mailto:dkruchinin@acm.org>
                     75: 
                     76:   - ~route.c:accept_probe()~: Fix missing check of ~malloc()~ return value.
                     77: 
                     78:   - ~vif.c:SetTimer()~: Dito.
                     79: 
                     80:   - ~route.c:accept_report()~: Fix potential stack overflow issue.  Also added checks
                     81:     to prevent overstepping array boundaries in local ~rt[]~ array when parsing route
                     82:     report messages.
                     83: 
                     84: * Release 3.9.2: August 16, 2010
                     85: 
                     86: ** Changes & New Features
                     87: 
                     88:   - Reduce code duplication on platforms carrying ~strlcpy()~ and ~strtonum()~.
                     89: 
                     90: ** Bug Fixes
                     91:   - Fix file paths for GNU/Linux installations, they too use ~/var/tmp~ rather than
                     92:     ~/usr/tmp~ today.
                     93: 
                     94:   - Code fixes in RSRR code (disabled by default).
                     95: 
                     96:   - Fix possible build error in strtonum.c on platforms not supporting ~LLONG_MIN/MAX~
                     97: 
                     98: * Release 3.9.1: April 10, 2010
                     99: 
                    100: Biggest news in this release is that all OpenBSD patches as of this date are merged.
                    101: 
                    102: ** Changes & New Featues
                    103: 
                    104:   - Change license to 3-clause BSD on mrinfo, RSRR and mrouted sources, thanks to
                    105:     hard working OpenBSD team!
                    106: 
                    107:   - Support for older yacc versions.
                    108: 
                    109: ** Bug Fixes
                    110: 
                    111:   - OpenBSD, all patches from their CVS repository have been merged.  Things like
                    112:     missing free for malloc, missing checks for malloc return value, restart syscalls
                    113:     after signal (=EINTR=).  As well as a heap of neat code cleanup and modernization.
                    114: 
                    115: * Release 3.9.0: January 23, 2010
                    116: 
                    117: ** Changes & New Features
                    118: 
                    119:   - Debian, build fixes for GNU/Linux.
                    120: 
                    121:   - FreeBSD ports collection, major API cleanups.
                    122: 
                    123:   - Buildroot, some minor cleanups of old deprecated APIs
                    124: 
                    125:   - Philippe Troin <mailto:phil@fifi.org>, added more compiler warnings and fixed the
                    126:     problems uncovered by that.
                    127: 
                    128: * 3.9-beta3: April 26, 1999
                    129: 
                    130: ** Changes & New Features
                    131: 
                    132:   - A ~blaster~ keyword for mrouted.conf, to turn on handling of routers (mostly
                    133:     ciscos) which overwhelm the socket buffers by blasting the whole routing table at
                    134:     once.
                    135: 
                    136:   - A ~notransit~ keyword; routes learned on a ~notransit~ vif will not be
                    137:     readvertised onto another ~notransit~ vif.
                    138: 
                    139:   - The 500 kbps default rate limit on tunnels has been removed.
                    140: 
                    141:   - An ICMP listener which logs ICMP errors which appear to be in response to
                    142:     tunnel packets that we sent.
                    143: 
                    144:   - A tunnel traffic encapsulator, which encapsulates control traffic inside the
                    145:     tunnel instead of unicasting it ~beside~ the tunnel.  This is turned off by
                    146:     default; use ~beside off~ to turn it on.
                    147: 
                    148:   - A ~force_leaf~ flag to ignore any potential neighbors on a given interface.
                    149: 
                    150: ** Bug Fixes
                    151: 
                    152:   - There was a bug handling routing updates which caused random black holes.
                    153: 
                    154:   - There was a race condition in the timer handlers causing free'd memory
                    155:     to sometimes get touched.
                    156: 
                    157:   - ~allow_nonpruners~ wasn't allowed in the configuration file (and almost
                    158:     nobody noticed! - probably a good sign)
                    159: 
                    160:   - When a prune times out and the source has been active "recently", mrouted now
                    161:     waits for further traffic instead of triggering a new prune.
                    162: 
                    163:   - mrouted now ignores unreachable routes when making a routing decision
                    164:     (previously it would blackhole, now it can find a less-specific)
                    165: 
                    166: * 3.9-beta2: June 11, 1997
                    167: 
                    168: There is no need to upgrade to 3.9-beta2 if you are not experiencing one of the
                    169: following bugs.
                    170: 
                    171: ** Bug Fixes
                    172: 
                    173:   - There was a bug in 3.9-beta1's raw socket buffer processing that
                    174:     would cause an immediate lockup on startup on some systems.
                    175: 
                    176:   - RSRR would not clear out the group membership information if
                    177:     further notification of changes to this route entry was not possible.
                    178: 
                    179: * 3.9-beta1: June 6, 1997
                    180: 
                    181: ** Changes & New Features
                    182: 
                    183:   - Longer prune lifetimes (2 hours) by default.  Prune lifetimes may be configured
                    184:     per-vif, with the ~prune_lifetime N~ mrouted.conf configuration file entry
                    185:     (where N is in seconds).  This helps to work around the black holes caused on
                    186:     restart when you have a Cisco upstream which does not handle genid's; if this is
                    187:     your situation the recommended value is 300.
                    188: 
                    189:   - mrouted's behavior of flooding new routes by default at startup in order to speed
                    190:     healing of paths during startup can be turned off per-vif or globally with the
                    191:     ~noflood~ configuration option.  Turning this option off means you are likely to
                    192:     experience black holes for a minute or two when you restart a router.  The
                    193:     default is to flood for a minute or two until mrouted is able to learn
                    194:     subordinate relationships.
                    195: 
                    196:   - mrouted now retransmits prunes by default on point-to-point links.  The
                    197:     mrouted.conf command ~rexmit_prunes [on|off]~ can be used to enable or disable
                    198:     this feature on a per-vif basis.  Prune retransmission helps on lossy links, and
                    199:     also helps when a router has forgotten about a prune (e.g. if it is out of memory
                    200:     and needs to shed state, or due to a bug).
                    201: 
                    202:   - The new ~passive~ mode causes mrouted to not actively send probes looking for
                    203:     neighbors.  This allows a dialup link to become quiescent if there is no DVMRP
                    204:     neighbor on the other end.  Configuring ~passive~ on both ends of a link will
                    205:     cause it to never come up.
                    206: 
                    207:   - mrouted defaults to not peering with DVMRP routers that do not prune.  Use the
                    208:     ~allow_nonpruners~ mrouted.conf option on a vif on which you want to allow such
                    209:     peerings.
                    210: 
                    211:   - mrouted now allows route filtering using ~allow~ and ~deny~ in ~mrouted.conf~.
                    212:     - Only ~accept~ or ~deny~ is allowed, no combinations.
                    213: 
                    214:     - Add ~bidir~ to apply the filter to output too, otherwise it's input only.
                    215: 
                    216:     - Expected usage:
                    217:       - Providers filter routes that customers send them
                    218:       - Martian removal
                    219:       - Topology modification (e.g. don't let the existence of private tunnel foo out
                    220:         into the world).
                    221: 
                    222:     - Syntax:
                    223:         - accept 13/8 :: All routes matching 13/8 (e.g. 13.2.116/22)
                    224:         - accept 13/8 exact :: If you want to accept exactly 13/8
                    225:         - deny 10/8 64/2 130/8 exact 172/8 exact :: Common MBone martians
                    226: 
                    227:   - mrouted now malloc's the buffer it uses for ~SIOCGIFCONF~, to allow
                    228:     for more interfaces.  Thanks to Danny Mitzel
                    229: 
                    230:   - mrouted now ignores multiple entries for a single interface name (temporary hack
                    231:     until mrouted understands interface aliases)
                    232: 
                    233:   - mrouted's ~-d~ flag has been modified to accept the names of the systems which
                    234:     you would like to debug:  packet, prunes, routes, peers, cache, timeout,
                    235:     interface, membership, traceroute, igmp
                    236: 
                    237:   - mrouted now times neighbors out fater, and fully detects and ignores routes from
                    238:     one-way peerings.
                    239: 
                    240:   - mrouted's route processing has been sped up, especially at startup.
                    241: 
                    242:   - mrouted uses the biggest ~SO_RCVBUF~ the operating system allows (up to 256 kb)
                    243: 
                    244:   - mrouted uses TOS =0xC0= ("Internet Control") for DVMRP messages.
                    245: 
                    246: ** Known Bugs
                    247: 
                    248:   - The startup message doesn't print properly if you have too many interfaces.
                    249: 
                    250: ** Bug Fixes
                    251: 
                    252:   - mrouted did not properly keep track of subordinates, and would not time out
                    253:     subordinateness.  This caused 2 major problems:
                    254: 
                    255:     1. pruning did not happen when there were equal-cost paths to the same
                    256:        multi-access link
                    257:     2. subordinateness which did not get cancelled by a non-poisoned route (e.g. in
                    258:        the face of route filtering) did not time out, causing traffic to continue to
                    259:        flow.
                    260: 
                    261:   - mrouted's IGMPv2 processing when it is not the querier now conforms to
                    262:     draft-ietf-idmr-igmp-v2-06.txt Thanks to Lorenzo VICISANO
                    263:     <mailto:L.Vicisano@cs.ucl.ac.uk> for finding a problem.
                    264: 
                    265:   - mrouted is much more careful about forgetting prunes; 3.8 would forget prunes
                    266:     whenever any route change ocurred.
                    267: 
                    268: * Release 3.8: November 29, 1995
                    269: 
                    270: ** Bug Fixes
                    271: 
                    272:   - mrouted would fail to forget prunes when a neighbor went away, thus potentially
                    273:     sending traffic down a tunnel after the tunnel endpoint has gone down.  This was
                    274:     due to some research code making it into the "emergency" 3.7 release, sigh.
                    275: 
                    276:   - mrouted could send prunes with negative lifetimes.  This causes slightly higher
                    277:     prune traffic but shouldn't be any major problem.
                    278: 
                    279: * Release 3.7: November 28, 1995
                    280: 
                    281: ** Changes & New Features
                    282: 
                    283:   - The configuration file can accept a hostname as the other end of a tunnel.  There
                    284:     must be a single name=>ip mapping for the given name, however, or mrouted will
                    285:     fail to start up.
                    286: 
                    287:   - mrinfo now sends requests to all interfaces of a multihomed host.
                    288: 
                    289:   - mtrace's passive mode has been implemented.
                    290: 
                    291:   - The first screen of mtrace statistics is shorter and more likely
                    292:     to fit on one screen.
                    293: 
                    294: ** Bug Fixes
                    295: 
                    296:   - mrouted now ignores route reports that include bogus netmasks.
                    297:     There was a bug in 3.5 that would mangle default routes into
                    298:     tens of bogus routes; this should prevent that bug from killing
                    299:     the MBONE.
                    300: 
                    301:     This solution can cause route flaps and black holes until the
                    302:     3.5's are gone or all of the 3.5's neighbors are 3.7 .
                    303: 
                    304:   - mrouted now ignores duplicate routes.  Ciscos and the above 3.5
                    305:     bug could cause two copies of the same route to appear in a single
                    306:     routing update; mrouted would insert two copies of the same route
                    307:     into its routing table and wreak all sorts of havoc.
                    308: 
                    309:   - mrouted now sends a group-specific query for both retransmissions
                    310:     of a g-s query; previous versions sent a general query the second
                    311:     time.
                    312: 
                    313:   - mrouted now loops back multicasted mtrace responses and
                    314:     group-specific membership queries
                    315: 
                    316:   - mrouted now performs deterministic tiebreaking between two
                    317:     neighbors on the same vif.
                    318: 
                    319:   - mrouted now only does duplicate suppression on traceroute requests,
                    320:     not all traceroute packets, so that a loop can be nicely detected
                    321:     via a duplicate router instead of just a timeout.
                    322: 
                    323:   - the buffer size that mrouted uses has been increased to allow
                    324:     more than 16 hops in mtrace messages.
                    325: 
                    326:   - mtrace's hop-by-hop termination is now more likely to be correct.
                    327: 
                    328:   - mrinfo now waits for the responses to its retransmitted queries.
                    329: 
                    330: * Release 3.6: June 26, 1995
                    331: 
                    332: ** Bug Fixes
                    333: 
                    334:   - mrouted would dump core when attempting to report no routes (i.e. upon
                    335:     startup, if you have no enabled phyint's)
                    336: 
                    337:   - mrouted would dump core if requested to traceroute a source for which it
                    338:     had no route
                    339: 
                    340:   - neighbor flags were not always properly updated on probe or report
                    341: 
                    342:   - mrouted would sometimes reply to a multicast traceroute on a disabled
                    343:     phyint; now it uses the first configured phyint to reply to traceroutes.
                    344: 
                    345:   - host routes (i.e. netmask =0xffffffff=) works now; it was discarding
                    346:     IGMP from the host because it was coming from the "broadcast address"
                    347:     of the subnet.
                    348: 
                    349:   - ~send_igmp()~ now treats the failure to send an mtrace or a neighbor
                    350:     reply as informational, as opposed to warning.
                    351: 
                    352:   - mrouted would go into an infinite loop trying to respond to a traceroute
                    353:     for a source with a netmask of =0xffffffff=.
                    354: 
                    355:   - ~vifs_with_neighbors~ was not being reset if the mrouted was restarted
                    356:     with =SIGHUP=.
                    357: 
                    358:   - the default route was not being properly advertised to neighbors (although
                    359:     it was accepted if it was advertised to it)
                    360: 
                    361:   - ANSI-fication for those who it helps, still-K&R-ish for those it doesn't.
                    362: 
                    363:   - mtrace now attempts to trace three hops past a non-responding router,
                    364:     in the hopes that it does support traceroute but just couldn't respond
                    365:     (i.e. unicast didn't work and it can't source multicast because all its
                    366:     phyints are disabled).
                    367: 
                    368:   - mrinfo now times out even on a multicast router.
                    369: 
                    370: * Release 3.5: May 8, 1995
                    371: 
                    372: ** Changes & New Features
                    373: 
                    374:   - The kernel and mrouted make sure that each is the correct version, to
                    375:     prevent problems with mismatched kernel/mrouted versions.  A too-old
                    376:     mrouted will die with the error:
                    377: 
                    378:     can't enable DVMRP routing in kernel: Option not supported by protocol
                    379: 
                    380:   - mrouted can accept and propogate a default route (essential for
                    381:     heirarchical multicast routing)
                    382: 
                    383:   - Kernel route cache keeps source-specific routes instead of subnet routes,
                    384:     eliminating hashing and longest-match problems.
                    385:     (allows classless routing, longest-match and default routing)
                    386: 
                    387:   - Cached kernel routes only get deleted if no traffic is flowing, to
                    388:     facilitate multicast traceroute
                    389: 
                    390:   - mrouted has a new configuration file parser, which provides better error
                    391:     messages than before, and allows named boundaries (see man page)
                    392: 
                    393:   - added ~netmask~ to phyint configuration, at the suggestion of
                    394:     Anders Klemets
                    395: 
                    396:   - System V and FreeBSD compatibility from John Brezak <mailto:brezak@ch.hp.com>
                    397: 
                    398:   - phyint's can have additional subnets configured, for people with multiple
                    399:     subnets on one physical network.  mrouted.conf syntax is altnet 1.2.3.0,
                    400:     or altnet 1.2.3.0/24 if you need to specify a different netmask.  There
                    401:     can be as many altnet statements as you need.
                    402: 
                    403:   - both mrouted and the kernel now support classless addresses.
                    404: 
                    405:   - the kernel supports PIM assert processing by notifying the router
                    406:     when a packet arrives on the wrong interface
                    407: 
                    408:   - the kernel keeps additional counters, and mrouted can be compiled to
                    409:     support SNMP and the Multicast MIB
                    410: 
                    411:   - the packet classifier in the kernel now uses the following udp port
                    412:     ranges.  A future release of a session directory will allocate ports in
                    413:     these ranges:
                    414: 
                    415:     - ~[0, 16384)~: lowest priority, unclassified
                    416: 
                    417:     - ~[16384, 32768)~: highest priority, i.e. audio
                    418: 
                    419:     - ~[32768, 49152)~: medium priority, i.e. whiteboard
                    420: 
                    421:     - ~[49152, 65536)~: low priority, i.e. video
                    422: 
                    423:   - the configuration code has been modified to default tunnels' ~rate_limit~
                    424:     parameters to 500kbps.  This is easily modified with a ~rate_limit~ keyword
                    425:     in mrouted.conf, but should be a good default for the MBONE in general.
                    426: 
                    427:   - The tunnel sending code now caches a route for ~ip_output()~, this should
                    428:     help performance on machines with lots of tunnels.
                    429: 
                    430:   - Dispatching for de-capsulating packets is now via protosw[], making
                    431:     reception of other raw protocols more efficient
                    432: 
                    433:   - Neighbor capabilities are discovered via a bitmask as opposed to
                    434:     version number.
                    435: 
                    436:   - Multicast traceroute code improved
                    437: 
                    438:   - mrouted can be compiled with Routing Support for Resource Reservation
                    439:     (RSRR), required for RSVP.
                    440: 
                    441: ** Bug Fixes
                    442: 
                    443:   - The IGMPv2 query timeout field was interpreted as being in units of 200ms
                    444:     as opposed to 100ms, thus the maximum timeout was set to twice the
                    445:     expected value.  This is not fatal, as mrouted always queries twice in the
                    446:     expectation that a packet could get loss, but it does make it less robust
                    447:     in the face of packet loss.
                    448: 
                    449:   - IGMP could report membership in local-only groups (i.e. 224.0.0.X)
                    450: 
                    451:   - IGMP could get confused by hearing its own new membership reports, thus
                    452:     a router would never perform fast leave.
                    453: 
                    454:   - IGMP could reset timers for the wrong interface.
                    455: 
                    456:   - mrouted put a bogus value in the maximum timeout field of IGMPv2 query
                    457:     packets.
                    458: 
                    459:   - Non-querier mrouters would respond to IGMP leave messages
                    460: 
                    461:   - mrouted was not performing fast leave properly
                    462: 
                    463:   - If the last member goes away on a transit network, the upstream router
                    464:     would stop forwarding even if there are downstream members.
                    465: 
                    466:   - Kernel hash function improved
                    467: 
                    468:   - Eliminated possibility of ~panic()~: timeout in cache maintenance
                    469: 
                    470:   - Reordered resource allocation when sending upcall to handle failure properly
                    471: 
                    472:   - some endian-ness bugs squashed in mrouted, probably more to go.
                    473: 
                    474:   - Multicast traceroute could send a reply on a disabled interface.
                    475: 
                    476: ** Included Files
                    477: 
                    478: | README-3.8.mrouted | this file                                             |
                    479: | mrouted/*          | version 3.8 of mrouted, mrinfo, map-mbone and mtrace. |
                    480: | ifconfig/*         | Changes to ifconfig to show multicast interfaces      |
                    481: | netstat/*          | Diffs to netstat                                      |
                    482: | ping/*             | sources for ping which support multicasting           |
                    483: | mtest/*            | utility for testing multicast group membership        |
                    484: 
                    485: # Local Variables:
                    486: #  mode: org
                    487: # End:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>