3.  Goals

      The networking system was designed with the goal of supporting multiple protocol families and addressing styles. This required information to be ``hidden'' in common data structures which could be manipulated by all the pieces of the system, but which required interpretation only by the protocols which ``controlled'' it. The system described here attempts to minimize the use of shared data structures to those kept by a suite of protocols (a protocol family), and those used for rendezvous between ``synchronous'' and ``asynchronous'' portions of the system (e.g. queues of data packets are filled at interrupt time and emptied based on user requests).

      A major goal of the system was to provide a framework within which new protocols and hardware could be easily be supported. To this end, a great deal of effort has been extended to create utility routines which hide many of the more complex and/or hardware dependent chores of networking. Later sections describe the utility routines and the underlying data structures they manipulate.