|
The sxp (also known as the SNAP ) driver is a loadable, clonable, STREAMS driver that supports the connectionless Data Link Provider
Interface ( dlpi(7P))
over one or more FDDI adapters (Rockwell
2200 Series). The cloning character-special devices (/dev/sxp, /dev/snap, /dev/llc, /dev/mac) are used to access the 2200 Series adapter(s). The /dev/sxp device is equivalent to /dev/snap. /dev/sxp is used so that the name SXP will show up in ifconfig. All messages transmitted
on a SNAP device have the 802.2 LLC and Sub-Network Access Protocol (SNAP) and the FDDI MAC headers ( RFC
-1188) prepended. For an LLC device,
the LLC and MAC headers are prepended, and for a MAC
device only the MAC header is prepended.
Received FDDI frames are delivered to
the appropriate open device. In response to a DL_INFO_REQ, the SNAP driver returns the
following values in the DL_INFO_ACK
primitive:
- The maximum SDU is 4500.
- The minimum SDU
is 0.
- The DLSAP address
length is 8 (always true in the Solaris environment).
- The address offset is 0 (prior
to being attached).
- The MAC type
is DL_FDDI.
- The sap length value is -2, which indicates that within the DLSAP address, the physical address component is followed immediately
by a 2-byte service access point ( SAP
) component.
- The service mode is DL_CLDLS.
- The quality of service (QOS) fields are 0, because optional QOS is not supported.
- The provider style is DL_STYLE2.
- The broadcast address value is the IEEE broadcast address (FF:FF:FF:FF:FF:FF).
Because the SNAP driver is a "style
2" Data Link Service provider, an explicit DL_ATTACH_REQ message from the user is required to associate the
opened stream with a particular network device (that is, ppa). The dl_ppa field within the DL_ATTACH_REQ indicates the instance (unit)
number of the network device. If no currently attached ppa has the same instance number and there are no unattached ppas available, the driver returns an error (DL_ERROR_ACK). Once in the DL_ATTACHED
state, a DL_BIND_REQ is required
to associate a particular SAP with the
stream.
Once in the DL_ATTACHED
state, a DL_BIND_REQ is required
to associate a particular Service Access Point ( SAP ) with the stream. For the sap field within the DL_BIND_REQ, valid values are in the range
[0-0xFFFF]. Values for 0-0xFF will give LLC
802.2 service without SNAP encapsulation,
unless a later DL_HIERARCHIAL_BIND DL_SUBS_BIND_REQ is made. Values from
0x100-0xFFFF will give LLC 802.2 with SNAP encapsulation without the need for a DL_SUBS_BIND_REQ. Note that DL_HIERARCHIAL_BIND class DL_SUBS_BIND_REQs are only supported on streams bound to the 0xAA SAP. After successful completion of the DL_BIND_REQ, the ppa is initialized and the stream is ready for
use. In addition to the DL_HIERARCHIAL_BIND class of DL_SUBS_BUD_REQ,
the DL_PEER_BIND class can be
used to bind multiple SAP s with a stream.
Frames may be transmitted on the FDDI
ring by sending DL_UNITDATA_REQ
messages to the SNAP driver. The DLSAP address contained within the DL_UNITDATA_REQ must consist of both the SAP and physical (FDDI) components.
For a SNAP device, the SAP portion of the DLSAP address
is placed in the EtherType field of the 802.2 SNAP header. The DSAP and SSAP fields of the 802.2 LLC header are both set to the value 170, indicating a SNAP message and a MAC frame_type of LLC. For an LLC device, the SAP
portion of the DLSAP address is placed
in the DSAP field of the 802.2 LLC header. The SSAP
field is set to the SAP bound to the stream.
The MAC frame_type is LLC. For a MAC
device, the SAP portion of the DLSAP address is placed in the frame_control field of the MAC header. Received FDDI frames are routed up the correct stream(s)
as DL_UNITDATA_IND messages (containing
the DLSAP address). The stream(s) are found
by:
- Comparing the EtherType field of the SNAP header with the bound SAP of all of the SNAP streams
- Comparing the DSAP
field of the LLC header with the bound SAP of all the LLC streams
- Comparing the frame_control
field of the MAC header with the bound SAP of all the MAC
streams.
If necessary, messages are duplicated. In addition to the mandatory
connectionless DLPI message set, the driver
also supports the following primitives: DL_ENABMULTI_REQ, DL_DISABMULTI_REQ, DL_PROMISCON_REQ, DL_PROMISCOFF_REQ, DL_PHYS_ADDR_REQ.
The DL_ENABMULTI_REQ and DL_DISABMULTI_REQ primitives enable or
disable reception of individual multicast group addresses. Using these primitives,
a set of multicast group addresses may be iteratively created and modified
on a per-stream basis. These primitives are accepted by the driver in any
state following a successful DL_ATTACH_REQ. The DL_PROMISCON_REQ
and DL_PROMISCOFF_REQ primitives
(with the DL_PROMISC_PHYS flag
set in the dl_levelfield) enable or
disable reception of all (promiscuous mode) frames on the media, including
frames generated by the local host. When used with the DL_PROMISC_SAP flag (set), this enables or disables reception
of all sap values. When used with the DL_PROMISC_MULTI flag (set), this enables or disables reception of all multicast
group addresses. The affect of each primitive is always on a per-stream
basis, and is independent of the other sap and physical level configurations
on this stream (or other streams). In the DL_PHYS_ADDR_ACK message, the DL_PHYS_ADDR_REQ primitive returns the 6-octet FDDI address (in canonical form) currently associated with the
stream. This primitive is valid only in states following a successful DL_ATTACH_REQ. The driver also supports
the following ioctls (I/O controls): DLIOCRAW, SL_RAW, SL_DATA_ENABLE, SL_DATA_DISABLE, and DRV_CONFIG. As defined by Solaris, the DLIOCRAW ioctl puts the stream into
raw mode, which causes the driver to send the full MAC -level packet up the stream in an M_DATA message, instead of transforming it to the DL_UNITDATA_IND form. On this stream, the driver will also accept
formatted M_DATA messages for
transmission. To disable raw mode, the stream must be closed. The DLIOCRAW ioctl
requires no arguments. As defined by Rockwell, the SL_RAW ioctl puts the stream into raw
mode, similar to the DLIOCRAW ioctl except that the frame-type field of the MAC header is considered to be a long word instead of a byte,
preserving alignment. The SL_RAW ioctl requires no arguments. As defined by Rockwell, the SL_DATA_ENABLE and SL_DATA_DISABLE ioctls enable or disable
the transmission of data on the stream. By default, transmission is enabled.
The SL_DATA_ENABLE and SL_DATA_DISABLE ioctls
require no arguments.
|