A system for testing communication software, such as a network stack that
may be used in a personal computer or other computing device. The system
includes software to emulate the functionality of hardware of two or more
computers. This software may be executed on a single computer, thereby
simplifying testing or providing greater control over the test
environment by avoiding unintended interactions with hardware connected
over a physical network connection. The emulation software includes
interfaces that emulate the interfaces used in hardware drivers for
network cards in the computers. These interfaces allow the emulation
software to interface to the same test applications and tools that would
be used in a hardware test so that testing using emulation software may
be used instead of or in conjunction with testing using hardware. The
emulation software is customizable through the use of modular components,
including a component through which user provided code may be readily
integrated into the emulation software.