+--- /dev/null Thu Aug 24 12:00:32 2000
++++ doc/readme.lazylinks Fri Apr 12 16:47:36 2002
+@@ -0,0 +1,46 @@
++Concept
++~~~~~~~
++The idea behind lazy links is that leafs often don't need much of the
++state information they are sent. Currently, only lazy channels are
++implemented; this means lazy leafs will only be burst channels that
++they have local users on.
++
++Protocol
++~~~~~~~~
++If a leaf has FEAT_LAZY_LEAF set, it sends a +l flag in the SERVER message
++it sends to its hub (note that if FEAT_HUB is also set, it takes precedence
++over FEAT_LAZY_LEAF). The hub will then mark this leaf as 'lazy', and will
++not burst any channels to it. The hub will also keep a bitmask of which leaves
++know which channels. Subsequently, when the leaf tries to announce a channel
++to its hub (via a BURST, JOIN or CREATE) and the leaf doesn't "know" about
++that channel from the hub's point of view, the hub will send a full BURST of
++the channel back to the leaf, and mark the channel as "known" to the leaf.
++Note that a server with FEAT_LAZY_LEAF set *will* accept BURST messages outside
++of net.burst. When a channel has no more local clients, the leaf will send a
++FORGET message to the hub and destroy the channel locally. Upon receipt of this
++meessage, the hub will remove the "known" bit for that channel/leaf pair, and
++it will burst the channel again if the leaf tries to create it later on. The
++FORGET message has the following syntax:
++ <server numeric> FO <#channel>
++
++Code
++~~~~
++struct Server has a ll_mask field which is assigned to each lazy leaf on its
++uplink hub. Every leaf gets a bit, so the maximum number of leafs is 32 on
++32-bit machines. struct Channel now has a ll_bits bitmask field which stores
++which leaves "know" the channel. A new sendcmd_to_mask_butone function was
++used instead of sendcmdto_serv_butone which doesn't send to lazy leaves that
++don't match the specified mask (currently, chptr->ll_bits).
++
++Bugs
++~~~~
++This documentation is less than complete.
++
++Commands like LIST, TOPIC, MODE issued on a lazy leaf for channels that hasn't
++been burst to it will incorrectly report the channels doesn't exist. This should
++be handled by forwarding those messages to its uplink.
++
++joinbuf_flush now sends each join/part as a separate message, because they each
++have to be matched against the leaves' "known channel" bits.
++
++Probably more.
+--- /dev/null Thu Aug 24 12:00:32 2000
++++ ircd/m_forget.c Wed Apr 3 23:07:14 2002