Content-type: text/html
The network interfaces are named mast 0 mast 1 and so on, as many as desired. They are created with the "ip tunnel" command.
Host X-- Host A  ----------------tunnel---------- cisco D------Host E
          \                                          |
           \                                        /
             +------Host B----------Host C----------+
   # route add default B
   # ifconfig ipipN  A D netmask 0xffffffff  up
   # route add E D
   On Host D (Cisco):
   Interface TunnelX    
    ip unnumbered D   ! e.g. address from Ethernet interface
    tunnel source D   ! e.g. address from Ethernet interface
    tunnel destination A
   ip route C <some interface and mask>
   ip route A mask C
   ip route X mask tunnelX
   OR
   On Host D (NetBSD):
   # route add default C
   # ifconfig ipipN D A 
The MAST device permits people to create them with:
        struct device *mast;
        mast = mast_init(family, callbacks, flags, desired_unit, max_flowref, 
                         context)
- A new MAST device is create per address family. This is not really
  necessary, but simplies the design.
where the callbacks are provided as follows:
callbacks
        packet_send(mast, context, skb, flowref)
        link_inquire(mast, context)
The packet_send() function is called by the mast device when a packet has been forwarded into the MAST device in some fashion. The MAST device will extract an appropriate flow reference number from the packet (or use its default) and provide this as the flowref argument.
The link_inquire() function is a request from the MAST device to have its
link status updated by the tunnel apparatus. Link status can be updated with:
        mast_linkstat(mast, flowref, status)
 
where status = up=1/down=0. Some MAST devices may maintain per-flowref link
status, in which case the flowref should be provided. A flowref of -1 updates 
the global link status.
Each MAST device may have a series of point-to-point links (PPP) which may be represented in the rt_cache - that is, may produce up/down events on the routing socket based upon its link status.
A MAST device may have its default reference set via:
        mast_setreference(mast, defaultSA#)
A MAST device examines packets that it receives, looks at the appropriate parts of the nfmark and turns that into the reference #. If these bits are zero, then the default reference is used. If the default reference is not set, then the packet is dropped as a transmit error.