This section describes how the design takes into account design issues as described in the SRS.
The design of FCM takes into account the portability requirement of running under Linux kernel version 2.4.18 by making use of tools and modules in this particular Linux kernel version, and also by adhering to any standards in place in version 2.4.18. Also, during implementation of FCM, version 2.4.18 of the kernel will be used. [SRS Reference 4.3.1.1]
To cater for the non-core requirement of running under Linux with no specific kernel version, the design of FCM (wherever possible) uses tools that are included in as many kernel versions as possible. [SRS Reference 4.3.1.2]
The design of SAM makes no direct use of the kernel, and runs entirely in user-space. Hence, SAM will run under version 2.4.18, and also under any past versions of the kernel. [SRS Reference 4.3.1.1, 4.3.1.2]
The code of FCM is likely to change, when users may need to change the window sizing algorithm. The design of FCM therefore is kept as simple as possible, with the window sizing algorithm being kept in one function only, so modification of it requires only one change. The function name also, modify_window, has been chosen to enable easy identification by users. During implementation, the coding standards as set out in the SQAP will be followed. Also, the documentation for the two kernel modules will be descriptive and helpful to ease maintainability. [SRS Reference 4.3.2]
The design of SAM incorporates the use of plugins for both analysis and output types. This means that at run-time, any analysis or output plugins found in the given directory (see 8.4.2) are loaded by SAM.
It is therefore easy to add new plugins without affecting the operation of SAM, by simply writing a new analysis or output plugin module, and registering it to be loaded. It is also easy to remove a plugin if it is no longer wanted, as SAM will simply not find it to load.
This also ensures that the design of individual plugins is not strict - the only interface a plugin must adhere to is to register a single function name that will get called by SAM. This means individual plugins can choose whatever design suits the plugin - a single function (for a simple plugin), classes or modules that get called from the registering function (for more complicated plugins). Clearly, this makes extending SAM extremely easy and fast. Refer to section 5.6 for the detailed design of the two plugin interfaces. [SRS Reference 4.3.3.1]
The design of SAM takes into account the non-core requirement of being extendible to adding in a traffic generator by having clearly defined interfaces to all classes and methods (by using Happydoc, see section 5.6). This ensures developers know exactly what each class does, and hence where it may be useful in their development. [SRS Reference 4.3.3.2, 4.3.3.3]
FCM is required to make use of the tools insmod and modprobe for loading into and removing from the kernel. Refer to section 6.2 for details of where the design takes this into account. [SRS Reference 4.3.4.1]
Also, any runtime options to FCM are required to be passed as symbol values to insmod. Refer to section 6.2 for where the design caters for this. [SRS Reference 4.3.4.2]
The usability requirements for SAM are catered for in the design by the use of Glade, which is a user interface development tool for GTK+:
Since FCM consists of kernel modules, it must firstly be fault tolerant (both to existing kernel faults and faults in FCM itself), and secondly be able to function continuously for at least 5 days. [SRS Reference 4.3.5]
This is how the design of FCM ensures that the reliability and availability requirements are met:
To ensure SAM is correct with respect to the requirements, any important algorithms or mathematical formulae needed will be included in the docstrings for the functions/classes (and thus in the Happydoc generated module interfaces, see section 5.6)). This ensures that, when implemented, the implementation of the class or method uses the given algorithm or formula. This is especially important in implementing the analysis plugins, as there are different definitions of each analysis in use.