Azinix is designed to be extensible.
The code base consists of approximately 30,000 lines of custom-written C code, in addition to the various libraries Azinix links to. Azinix's source code is organized as a set of packages; each is in a directory under
src. The basic organization is as follows:
evl: rule evaluation, action implementation
pkt: creation and manipulation
rlp: input parser
q: routines implementing queuing
os: OS specific code
nm: UI code, exports Azinix functions to Tcl
util: common data structures, utilities
util package includes the following data structures:
util_int_array (integer array),
var_set (bit-vector), and
bdd (binary decision diagram). It also has macros and defines for min/max, maxint; code timing; random numbers; and safe memory allocation. Packet capture and injection are managed by the
libnet libraries. The user interface is handled by
ctags system is very useful for browsing the code base.