llc(7) —
NAME
llc − Logical Link Control/Ethernet Program Interface
DESCRIPTION
The IEEE 802.3/Ethernet class of network interfaces are supported under STREAMS via the Link Provider Interface (LPI) protocol. Several forms of data encapsulation are supported with this interface, of which two forms are supported for the IEEE 802.3/Ethernet classes of device: IEEE 802.2 Logical Link Control Class 1 and Ethernet.
The llc Class 1 protocol is defined in the ANSI/IEEE standard, while the Ethernet protocol is as defined in the DEC-Intel-XEROX Ethernet Version 2 specification. The encapsulation is chosen by the Service Access Point (SAP) bound to. If the SAP value to be bound is a value larger than 255 (0xFF), then the type of encapsulation is taken to be the Ethernet style rather than llc Class 1. Rather than a SAP value, the value passed will be used as the Ethernet type field for the stream.
There are ten LPI primitives, four user initiated and six driver initiated. The user-initiated primitives are DL_INFO_REQ, DL_BIND_REQ, DL_UNBIND_REQ, and DL_UNITDATA_REQ. The driver-initiated primitives are DL_INFO_ACK, DL_BIND_ACK, DL_ERROR_ACK, DL_OK_ACK, DL_UNITDATA_IND, and DL_UDERR_IND.
The DL_BIND_REQ request uses the DL_bind_req structure defined in <sys/lihdr.h> and has the LLC_sap field filled in with the SAP desired. For DL_ETHER-style networks, the SAP value is the Ethernet type value desired. For DL_CSMACD-style networks, the SAP value is the IEEE 802.2 LSAP value desired as the source LSAP. Destination LSAPs are specified in the address used with the DL_UNITDATA_REQ primitive. The SubNetwork Access Point (SNAP) is understood and uses the values of the two GROWTH_field locations of DL_bind_req as the “organization” and “organization-specific” fields, respectively. GROWTH_field[0] is treated as a three-octet string containing the organization identifier in network order, and GROWTH_field[1] is the two-octet organization-specific identifier in local system byte ordering. By specifying an LSAP of −3, the Novell form of 802.3 usage is enabled. Use of this mode is discouraged since it violates the 802.3 standard usage.
The DL_UNITDATA_REQ primitive requires that a Remote Address be specified as part of the control message. The offset of the remote address from the beginning of the control portion of the message is specified in the RA_offset field of the DL_unitdata_req structure. The length of the remote address is specified in the RA_length field. For DL_CSMACD STREAMS, the address is the concatenation of the physical address and the destination LSAP. Data to be sent is in the data portion of the message. The header for the message is generated by the physical interface driver associated with the llc driver.
The llc driver is linked closely through function calls with one of several link layer drivers, currently all Ethernet drivers. It provides a generic hardware-independent interface to upper protocol layers to avoid duplicate code in each driver.
A number of ioctl operations are supported. If device-dependent actions are required, these are communicated to the device driver through a function call. Currently supported operations are:
DLGADDR Get the physical address of the interface. The argument to the ioctl is a six-byte buffer for the physical address.
DLSADDR Set the physical address of the interface. The argument to the ioctl is a six-byte buffer for the physical address.
DLGSTAT Get the link driver statistics values.
DLGCLRSTAT
Get the link driver statistics and zero the driver values.
DLGBROAD Get the broadcast address of the interface.
DLPROM Enable or disable promiscuous mode (accepting all packets).
DLRESET Reset driver and controller to power up condition.
DLSMULT Define a multicast address and enable reception of the multicast address in the hardware. The argument is the six-octet value of the multicast address to set.
DLDMULT Delete a multicast address from the multicast table. The argument is the six-octet multicast address to delete from the table.
DLGMULT Get the multicast table. With no buffer provided, it returns the number of entries in the multicast table. If a buffer argument is provided, the buffer will be filled with as many of the multicast table entries as will fit in the space provided.
All llc ioctl functions are implemented using the I_STR form of the STREAMS ioctl as described in streamio(7).
SEE ALSO
ec(7), wd(7).
streamio(7) in the INTERACTIVE UNIX System User’s/System Administrator’s Reference Manual. IEEE Standard 802.2 Logical Link Control.
\*U — Version 1.0