NED File src/inet/common/queue/REDDropper.ned
Name | Type | Description |
---|---|---|
REDDropper | simple module |
This module implements Random Early Detection (RED). |
Source code
// // Copyright (C) 2012 Opensim Ltd. // Author: Tamas Borbely // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program; if not, see <http://www.gnu.org/licenses/>. // package inet.common.queue; // // This module implements Random Early Detection (RED). // // It has n input and n output gates (specified by the 'numGates' // parameter). Packets arrived at the ith input gate are // forwarded to the ith output gate, or dropped. The output // gates must be connected to simple modules implementing // the IQueueAccess C++ interface (e.g. FIFOQueue). // // The module sums the used buffer space of the queues attached // to the output gates. If it is below a minimum threshold, // the packet won't be dropped, if above a maximum threshold, // it will be dropped, if it is between the minimum and // maximum threshold, it will be dropped by a given probability. // This probability determined by a linear function which is // 0 at the minth and maxp at maxth. // // The queue length can be smoothed by specifying the 'wq' // parameter. The average queue length used in the tests // are computed by the formula: // // avg = (1-wq)*avg + wq*qlen // // The minth, maxth, and maxp parameters can be specified // separately for each input gate, so this module can be // used to implement different packet drop priorities. // simple REDDropper { parameters: int numGates = default(1); double wq = default(0.002); // weight of the current queue length in the averaged queue length string minths = default("5"); // minimum thresholds for avg queue length (one number for each gate, last one repeated if needed) string maxths = default("50"); // maximum thresholds for avg queue length (=buffer capacity) (one number for each gate, last one repeated if needed) string maxps = default("0.02"); // maximum value for pbs (one number for each gate, last one repeated if needed) string pkrates = default("150"); // average packet rate for calculations when queue is empty @display("i=block/downarrow"); gates: input in[numGates]; output out[numGates]; }