[ Previous | Next | Contents | Home | Search ]
AIX Version 4.3 Kernel Extensions and Device Support Programming Concepts

High-Performance (8fa2) Token-Ring Device Driver

The 8fa2 Token-Ring device driver is a dynamically loadable device driver that will run on a system running AIX Version 4.1 (or later). The device driver is automatically loaded into the system at device configuration time as part of the configuration process.

The interface to the device is through the kernel services known as Network Services.

Interfacing to the device driver is achieved by calling the device driver's entry points for opening the device, closing the device, transmitting data, doing a remote dump, and issuing device control commands.

The Token-Ring device driver interfaces with the Token-Ring High-Performance Network Adapter (8fa2). It provides a Micro Channel-based connection to a Token-Ring network. The adapter is IEEE 802.5 compatible and supports both 4 and 16 megabit per second networks. The adapter supports only a RJ-45 connection.

Configuration Parameters for 8fa2 Token-Ring Device Driver

The following lists the configuration parameters necessary to use the device driver.

Ring Speed Indicates the Token-Ring speed. The speed is set at 4 or16 megabits per second or autosense.
4 Specifies that the device driver will open the adapter with 4 Mbits. It will return an error if ring speed does not match the network speed.
16 Specifies that the device driver will open the adapter with 16 Mbits. It will return an error if ring speed does not match the network speed.
autosense Specifies that the adapter will open with the speed used determined as follows:
  • If it is an open on an existing network, the speed will be the ring speed of the network.
  • If it is an open on a new network:
    • If the adapter is a new adapter, 16 Mbits is used.
    • If the adapter had successfully opened, the ring speed will be the ring speed of the last successful open.
Software Transmit Queue Specifies a transmit request pointer that can be set to store between 32 and 2048 transmit request pointers. Each transmit request pointer corresponds to a transmit request which may be for several buffers of data.
Attention MAC frames Indicates if attention MAC frames should be received.
Beacon MAC frames Indicates if beacon MAC frames should be received.
Priority Data Transmission Specifies a request priority transmission of the data packets.
Network Address Specifies the use of the device's hardware address as the network address or an alternate network address configured through software. When an alternate address is used, any valid Individual Address can be used. The most significant bit of the address must be set to zero (definition of an Individual Address).

Device Driver Configuration and Unconfiguration

The tok_config entry point performs configuration functions Token-Ring device driver.

Device Driver Open

The tok_open function is called to open the specified network device.

The Token Ring device driver does a synchronous open. The device will be initialized at this time. When the resources have been successfully allocated, the device will start the process of attaching the device to the network.

If the connection is successful, the NDD_RUNNING flag will be set in the ndd_flags field and a NDD_CONNECTED status block will be sent.

If the device connection fails, the NDD_LIMBO flag will be set in the ndd_flags field and a NDD_LIMBO_ENTRY status block will be sent.

If the device is eventually connected, the NDD_LIMBO flag will be turned off and the NDD_RUNNING flag will be set in the ndd_flags field. Both NDD_CONNECTED and NDD_LIMBO_EXIT status blocks will be set.

Device Driver Close

The tok_close function is called to close the specified network device. This function resets the device to a known state and frees system resources associated with the device.

The device will not be detached from the network until the device's transmit queue is allowed to drain.

Data Transmission

The tok_output function transmits data using the network device.

The device driver does not support mbufs from user memory (which have the M_EXT flag set).

If the destination address in the packet is a broadcast address the M_BCAST flag in the p_mbuf->m_flags field should be set prior to entering this routine. A broadcast address is defined as 0xFFFF FFFF FFFF or 0xC000 FFFF FFFF. If the destination address in the packet is a multicast address the M_MCAST flag in the p_mbuf->m_flags field should be set prior to entering this routine. A multicast address is defined as a non-individual address other than a broadcast address. The device driver will keep statistics based upon the M_BCAST and M_MCAST flags.

If a packet is transmitted with a destination address which matches the adapter's address, the packet will be received. This is true for the adapter's physical address, broadcast addresses (0xC000 FFFF FFFF or 0xFFFF FFFF FFFF), enabled functional addresses, or an enabled group address.

Data Reception

When the Token-Ring device driver receives a valid packet from the network device, the Token-Ring device driver calls the nd_receive function that is specified in the ndd_t structure of the network device. The nd_receive function is part of a CDLI network demuxer. The packet is passed to the nd_receive function in mbufs.

The Token-Ring device driver will only pass one packet to the nd_receive function at a time.

The device driver will set the M_BCAST flag in the p_mbuf->m_flags field when a packet is received which has an all stations broadcast address. This address is defined as 0xFFFF FFFF FFFF or 0xC000 FFFF FFFF.

The device driver will set the M_MCAST flag in the p_mbuf->m_flags field when a packet is received which has a non-individual address which is different than the all-stations broadcast address.

The adapter will not pass invalid packets to the device driver.

Asynchronous Status

When a status event occurs on the device, the Token-Ring device driver builds the appropriate status block and calls the nd_status function that is specified in the ndd_t structure of the network device. The nd_status function is part of a CDLI network demuxer.

The following Status Blocks are defined for the Token-Ring device driver.

Hard Failure

When a hard failure has occurred on the Token-Ring device, the following status blocks can be returned by the Token-Ring device driver. One of these status blocks indicates that a fatal error occured.

NDD_PIO_FAIL

Indicates that when a PIO error occurs, it is retried 3 times. If the error persists, it is considered unrecoverable and the following status block is generated:

code Set to NDD_HARD_FAIL
option[0] Set to NDD_PIO_FAIL
option[] The remainder of the status block is used to return additional status information.
NDD_HARD_FAIL

Indicates that when a transmit error occurs it is retried. If the error is unrecoverable, the following status block is generated:

code Set to NDD_HARD_FAIL
option[0] Set to NDD_HARD_FAIL
option[] The remainder of the status block is used to return additional status information.
NDD_ADAP_CHECK

Indicates that when an adapter check has occurred, the following status block is generated:

code Set to NDD_ADAP_CHECK
option[] The remainder of the status block is used to return additional status information.
NDD_DUP_ADDR

Indicates that the device detected a duplicated address in the network and the following status block is generated:

code Set to NDD_DUP_ADDR
option[] The remainder of the status block is used to return additional status information.
NDD_CMD_FAIL

Indicates that the device detected an error in a command that the device driver issued. The following status block is generated:

code Set to NDD_CMD_FAIL
option[0] Set to the command code
option[] Set to error information from the command.
TOK_RING_SPEED

Indicates that when a ring speed error occurs while the device is being open, the following status block is generated:

code Set to NDD_LIMBO_ENTER
option[] Set to error information.

Enter Network Recovery Mode

Indicates that when the device driver has detected an error which requires initiating recovery logic that will make the device temporarily unavailable, the following status block is returned by the device driver.

Note: While the device driver is in this recovery logic, the device may not be fully functional. The device driver will notify users when the device is fully functional by way of an NDD_LIMBO_EXIT asynchronous status block.
code Set to NDD_LIMBO_ENTER
option[0] Set to one of the following:
  • NDD_CMD_FAIL
  • TOK_WIRE_FAULT
  • NDD_BUS_ERROR
  • NDD_ADAP_CHECK
  • NDD_TX_TIMEOUT
  • TOK_BEACONING
option[] The remainder of the status block is used to return additional status information by the device driver.

Exit Network Recovery Mode

Indicates that when the device driver has successfully completed recovery logic from the error that made the device temporarily unavailable, the following status block is returned by the device driver. This status block indicates the device is now fully functional.

code Set to NDD_LIMBO_EXIT
option[] N/A

Device Connected

Indicates that when the device is successfully connected to the network the following status block is returned by the device driver:

code Set to NDD_CONNECTED
option[] N/A

Device Control Operations

The tok_ctl function is used to provide device control functions.

NDD_GET_STATS

The user should pass in the tok_ndd_stats_t structure as defined in <sys/cdli_tokuser.h>. The driver will fail a call with a buffer smaller than the structure.

The structure must be in a kernel heap so that the device driver can copy the statistics into it; and it must be pinned.

NDD_PROMISCUOUS_ON

Setting promiscuous mode will not cause non-LLC frames to be received by the driver unless the user also enables those filters (Attention MAC frames, Beacon MAC frames).

The driver will maintain a counter of requests.

NDD_PROMISCUOUS_OFF

This command will release a request from a user to PROMISCUOUS_ON; it will not exit the mode on the adapter if more requests are outstanding.

NDD_MIB_QUERY

The arg parameter specifies the address of the token_ring_all_mib_t structure. This structure is defined in the /usr/include/sys/tokenring_mibs.h file.

The device driver does not support any variables for read_write or write only. If the syntax of a member of the structure is some integer type, the level of support flag will be stored in the whole field, regardless of the size of the field. For those fields which are defined as character arrays, the value will be returned only in the first byte in the field.

NDD_MIB_GET

The arg parameter specifies the address of the token_ring_all_mib_t structure. This structure is defined in the /usr/include/sys/tokenring_mibs.h file.

NDD_ENABLE_ADDRESS

This command enables the receipt of packets with a functional or a group address. The functional address indicator (bit 0 "the MSB" of byte 2) indicates whether the address is a functional address (the bit is a 0) or a group address (the bit is a 1). The length field is not used because the address must be 6 bytes in length.

Functional Address

The specified address is ORed with the currently specified functional addresses and the resultant address is set as the functional address for the device. Functional addresses are encoded in a bit-significant format, thereby allowing multiple individual groups to be designated by a single address.

The Token-Ring network architecture provides bit-specific functional addresses for widely used functions, such as configuration report server. Ring stations use functional address "masks" to identify these functions. For example, if function G is assigned a functional address of 0xC000 0008 0000, and function M is assigned a function address of 0xC000 0000 0040, then ring station Y, whose node contains function G and M, would have a mask of 0xC000 0008 0040. Ring station Y would receive packets addressed to either function G or M or to an address like 0xC000 0008 0048 since that address contains bits specified in the "mask".

The NDD_ALTADDRS and TOK_RECEIVE_FUNC flags in the ndd_flags field are set.

Since functional addresses are encoded in a bit-significant format, reference counts are kept on each of the 31 least significant bits of the address.

Group Address

The device support 256 general group addresses. The promiscuous mode will be turned on when the group address needed to be set are more than 256. The device driver will maintain a reference count on this operation.

The NDD_ALTADDRS and TOK_RECEIVE_GROUP flags in the ndd_flags field are set.

NDD_DISABLE_ADDRESS

This command disables the receipt of packets with a functional or a group address. The functional address indicator (bit 0 "the MSB" of byte 2) indicates whether the address is a functional address (the bit is a 0) or a group address (the bit is a 1). The length field is not used because the address must be 6 bytes in length.

Functional Address

The reference counts are decremented for those bits in the functional address that are one (meaning on). If the reference count for a bit goes to zero, the bit will be "turned off" in the functional address for the device.

If no functional addresses are active after receipt of this command, the TOK_RECEIVE_FUNC flag in the ndd_flags field is reset. If no functional or group addresses are active after receipt of this command, the NDD_ALTADDRS flag in the ndd_flags field is reset.

Group Address

If the number of group address enabled is less than 256, the driver sends a command to the device to disable the receipt of the packets with the specified group address. Otherwise, the driver just deletes the group address from the group address table.

If there are less than 256 group addresses enabled after the receipt of this command, the promiscuous mode is turned off.

If no group address is active after receipt of this command, the TOK_RECEIVE_GROUP flag in the ndd_flags field is reset. If no functional or group addresses are active after receipt of this command, the NDD_ALTADDRS flag in the ndd_flags field is reset.

NDD_PRIORITY_ADDRESS

The driver returns the address of the device driver's priority transmit routine.

NDD_MIB_ADDR

The driver will return at least three addresses: device physical address (or alternate address specified by user) and two broadcast addresses (0xFFFF FFFF FFFF and 0xC000 FFFF FFFF). Additional addresses specified by the user, such as functional address and group addresses, may also be returned.

NDD_CLEAR_STATS

The counters kept by the device are zeroed.

NDD_GET_ALL_STATS

The arg parameter specifies the address of the mon_all_stats_t structure. This structure is defined in the /usr/include/sys/cdli_tokuser.h file.

The statistics returned include statistics obtained from the device. If the device is inoperable, the statistics returned do not contain the current device statistics. The copy of the ndd_flags field can be checked to determine the state of the device.

Trace Points and Error Log Templates for 8fa2 Token-Ring Device Driver

The Token-Ring device driver has four trace points. The IDs are defined in the /usr/include/sys/cdli_tokuser.h file.

The Token-Ring error log templates are :

ERRID_MPS_ADAP_CHECK The microcode on the device performs a series of diagnostic checks when the device is idle. These checks can find errors and they are reported as adapter checks. If the device was connected to the network when this error occurred, the device driver goes into Network Recovery Mode to try to recover from the error. The device is temporarily unavailable during the recovery procedure. User intervention is not required unless the problem persists.
ERRID_MPS_ADAP_OPEN The device driver was enable to open the device. The device driver goes into Network Recovery Mode to try to recover from the error. The device is temporarily unavailable during the recovery procedure. User intervention is not required unless the problem persists.
ERRID_MPS_AUTO_RMV An internal hardware error following the beacon automatic removal process has been detected. The device driver goes into Network Recovery Mode to try to recover from the error. The device is temporarily unavailable during the recovery procedure. User intervention is not required unless the problem persists.
ERRID_MPS_RING_SPEED The ring speed (or ring data rate) is probably wrong. Contact the network administrator to determine the speed of the ring. The device driver only retries twice at 2 minute intervals when this error log entry is generated.
ERRID_MPS_DMAFAIL The device detected an DMA error in a TX or RX operation. The device driver goes into Network Recovery Mode to try to recover from the error. The device is temporarily unavailable during the recovery procedure. User intervention is not required unless the problem persists.
ERRID_MPS_BUS_ERR The device detected a Micro Channel bus error. The device driver goes into Network Recovery Mode to try to recover from the error. The device is temporarily unavailable during the recovery procedure. User intervention is not required unless the problem persists.
ERRID_MPS_DUP_ADDR The device has detected that another station on the ring has an device address which is the same as the device address being tested. Contact the network administrator to determine why.
ERRID_MPS_MEM_ERR An error occurred while allocating memory or timer control block structures.
ERRID_MPS_PERM_HW The device driver could not reset the card. For example, it did not receive status from the adapter within the retry period.
ERRID_MPS_RCVRY_EXIT The error which caused the device driver to go into error recovery mode has been corrected.
ERRID_MPS_RMV_ADAP The device has received a remove ring station MAC frame indicating that a network management function has directed this device to get off the ring. Contact the network administrator to determine why.
ERRID_MPS_WIRE_FAULT There is probably a loose (or bad) cable between the device and the MAU. There is some chance that it might be a bad device. The device driver goes into Network Recovery Mode to try to recover from the error. The device is temporarily unavailable during the recovery procedure. User intervention is required for this error.
ERRID_MPS_RX_ERR The device detected a receive error. The device driver goes into Network Recovery Mode to try to recover from the error. The device is temporarily unavailable during the recovery procedure. User intervention is not required unless the problem persists.
ERRID_MPS_TX_TIMEOUT The transmit watchdog timer expired before transmitting a frame is complete. The device driver goes into Network Recovery Mode to try to recover from the error. The device is temporarily unavailable during the recovery procedure. User intervention is not required unless the problem persists.
ERRID_MPS_CTL_ERR The IOCTL watchdog timer expired before the device driver received a response from the device. The device driver goes into Network Recovery Mode to try to recover from the error. The device is temporarily unavailable during the recovery procedure. User intervention is not required unless the problem persists.

[ Previous | Next | Contents | Home | Search ]