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.