HDK Technical Reference

Multicast addresses and failover

Special issues arise for failover and drivers that support different numbers of multicast addresses. For DDI drivers, the mdi_get_mctable(D3mdi) and mdi_valid_mca(D3mdi) functions can be used during ioctl processing and packet reception, respectively, to help manage these issues.

The mdi_get_mctable( ) function returns the entire multicast state, including each individual active multicast address plus the mac_all_mca flag. Drivers should call this function when processing the MACIOC_SETMCA or MACIOC_DELMCA ioctls. All MDI drivers are linked under dlpi/netX and so can never get more than one MACIOC_SETMCA and one MACIOC_DELMCA ioctl per multicast address.

The data path for packet reception is different than that for ioctls. If drivers call mdi_valid_mca(D3mdi) every time a multicast packet is received and search through what may be a very large table, performance is degraded. Instead, drivers can call the mdi_valid_mca(D3mdi) function to perform a quick hash table lookup with no address comparison to determine if some DLS user is interested in that packet. Additional address comparisons are done during SAP demultiplexing to determine whether to send the DL_UNITDATA_IND upstream or to drop the frame.

The Network Driver Test Suites verify the ability to handle an arbitrary number of multicast addresses in the dlpi_mdi test of the ant suite for SCO OpenServer 5 and the nd-dlpmdi test of the ndtests suite for SVR5. Currently these tests verify 90 multicast addresses although the interface does not limit the number of multicast addresses that can be used. Problems arise if a device is asked to handle more multicast addresses than it supports. A user could set the limit too high, but the more common situation arises during failover if the primary adapter has more multicast addresses active than can be handled by the failover device. Drivers should be coded to ensure that this situation does not cause data corruption (and possibly a system panic) in this situation. Most current hardware is capable of enabling all multicast address reception, so if the hardware's multicast address limit is reached, the driver can enable all multicast address reception and filter out received multicast packets using mdi_valid_mca( ).

© 2005 The SCO Group, Inc. All rights reserved.
OpenServer 6 and UnixWare (SVR5) HDK - June 2005