DiffQ+MORE Implementation
This page provides documentation on the implementation of MORE and
DiffQ+MORE on WiSeNet.
Introduction
MORE code-base, as obtained from the original authors, was built on top of the Click router and supported only a single flow. This code has been now modified as follows:
- Support for multiple flows has been incorporated.
- Dependency on Click has been removed.
- Support for rate-control, in the form of DiffQ+MORE has been incorporated.
The modified code consists of 5 separate components:
- Scripts to calculate credit-factors for all nodes for a flow.
- Bridge code to disseminate calculated credit-factors to all nodes.
- MORE application which performs source encoding and packet encoding/forwarding.
- DiffQ+MORE kernel module to perform scheduling of MORE packets in the kernel.
- Modified MadWifi? driver to perform packet prioritization.
Scripts to Calculate Credit-Factors
The script quickrun.py calcuates credit-factors for a single flow, while the script getMOREForwarders3.py repeatedly invokes quickrun.py to calculate and optionally disseminate credit-factors for multiple flows. The full description and usage of these two scripts can be found in
"DiffQ+MORE Scripts".
Bridge Code to Disseminate Calculated Credit-Factors
The credit-factors calculated above need to be disseminated to each node. This is done by a simple bridge application /wisenet/devel/usr/src/diffq-clo-more/setCF.c. This application simply sets up a UNIX message queue and sends credit-factors to the main MORE application /wisenet/devel/usr/src/diffq-clo-more/rctx2 (hence, this application needs to be running at this time). The setCF application needs to be invoked as follows:
setCF [srcIP] [srcPort] [dstIP] [dstPort] [routing metric] [credit factor] [fwdIP1, etx, creditf] [fwdIP2, etx, creditf] ...
- srcIP, dstIP: WiSeNet? IPs of source and destionation (10.0.XX.XX).
- srcPort, dstPort: Port numbers for that flow.
- routing metric: ETX of the node to the destination.
- credit factor: Credit-factor for that node for the particular flow.
- [fwdIP1, etx, creditf]: list of forwarding nodes (ip address, etx and credit-factors).
The list of forwarding nodes is not required for the current
DiffQ+MORE vesions but retained for compatiblity with older versions. Note that usually setCF is called by the script getMOREForwarders3.py automatically for each flow and for each node, so the user never needs to invoke setCF manually.
MORE Application
All logic of MORE is within the main MORE application in /wisenet/devel/usr/src/diffq-clo-more. It performs the following functions:
- If a node is a source, it will generate encoded packets.
- All nodes will forward encoded packets.
- If DiffQ+MORE is enabled, the source nodes will control their rates based on the queue size inside the DiffQ+MORE kernel module.
DiffQ+MORE Kernel Module
Modified MadWifi driver
The MadWifi driver was modified slightly to allow broadcast at 11 Mbps. The modification is at line 6934 in /wisenet/devel/usr/src/madwifi-ng-with-10prio/ath/if_ath.c, commented with "acw".
Otherwise, the MadWifi driver remains unchanged from the single-path applications. MORE packets set with a priority [0,7] will be transmitted with that priority.
-- Main.acwarrie - 07 Jul 2008