STREAMS Programming Guide

Appendix C STREAMS F.A.Q.

This appendix provides answers to frequently asked questions.

A source of information on STREAMS performance is the paper "The BSD Packet Filter: A New Architecture for User-level Packet Capture" by McCanne & Van Jacobson in the 1993 Winter USENIX proceedings (also available as It includes detailed NIT vs. in-kernel BPF performance measurements and some explanation of results obtained.

With decent code in the kernel (not STEAMS) an in-kernel filter is much faster.

Here are some Frequently asked IP interface questions, and answers

Q) Is there documentation that describes the interface between IP and network drivers, namely, the SUN specific requirements not outlined in the DLPI Version 2 specification?

A) IP is a STREAMS module in Solaris. Any module or driver interface with IP should follow the STREAMS mechanism. There are no specific requirements for the interface between IP and network drivers.

Q) When an ifconfig device0 plumb is issued, the driver immediately receives a DL_INFO_REQ. Exactly what is required in the DL_INFO_ACK from a Style 2 provider?

A) Look at dl_info_ack_t struct in /usr/include/sys/dlpi.h.

Q) Is it possible for the driver to be a CLONE driver and also a DLPI Style 2 provider?


Q) If so, how do I map the minor number selected in the open routine to an instance prior to a DL_ATTACH_REQ? The technique of using the minor number to obtain the instance in the getinfo routine is not valid prior to the DL_ATTACH_REQ. How do you suggest this be handled?

A) The DL_ATTACH_REQ request assigns a physical point of attachment (PPA) to a stream. The DL_ATTACH_REQ request can be issued any time after a file or stream being opened. I don't think the DL_ATTACH_REQ request has anything to do with assigning, retrieving or mapping minor/instance number. Of course, you can issue a DL_ATTACH_REQ request for a file or stream with desired major/minor number. To the question of mapping minor number to instance, usually the minor number (getminor(9F)) is the instance number.

Q) In the examples, a minor node is created each time the driver's attach routine is called. How would a CLONE driver attach to multiple boards, that is, have multiple instances, and still only create one minor node?

A) For the CLONE driver, I don't know if it is possible to do that. For the non-CLONE driver, it is possible to use the bits information in a particular minor number, for example FF, to map all other minor nodes.

Q) Do Solaris 2.1 ethernet drivers support LLI 2.0 interfaces?

A) Do you mean 'DLPI' (Data Link Provider interfaces) ? The Solaris 2.1 ethernet drivers, le and ie. both support DLPI. See man pages of le and ie.

Q) Does Solaris 2.1 DLPI provide both connection oriented services and connection less services. Also, is your DLPI Version 2.0, which includes multicast facilities?

A) Yes and yes. Please see man page of dlpi(7P).

Q) Is multicasting supported on SunOS 4? If not, how can the customer obtain this feature?

A) IP multicast is a standard supported feature in Solaris, but it is not supportted in SunOS 4. If the customer wants to run an unsupported IP multicast on their SunOS 4 machines, it can be got from public domain object distribution that Steve Deering, the inventor of IP multicast, distributes. This is available via anonymous FTP from in the file vmtp-ip/ipmulti-sunos41x.tar.Z.