File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / mrouted / ChangeLog
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jul 21 23:59:21 2013 UTC (10 years, 10 months ago) by misho
Branches: mrouted, MAIN
CVS tags: v3_9_6p0, v3_9_6, HEAD
3.9.6

    1: #+TITLE:    mrouted | Change Log
    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.
   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>