Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
contentionslot.cc
Package: WiMAX_Protocol_Code.rar [view]
Upload User: hzie11
Upload Date: 2013-10-07
Package Size: 1487k
Code Size: 4k
Category:
Linux Network
Development Platform:
C/C++
- /* This software was developed at the National Institute of Standards and
- * Technology by employees of the Federal Government in the course of
- * their official duties. Pursuant to title 17 Section 105 of the United
- * States Code this software is not subject to copyright protection and
- * is in the public domain.
- * NIST assumes no responsibility whatsoever for its use by other parties,
- * and makes no guarantees, expressed or implied, about its quality,
- * reliability, or any other characteristic.
- * <BR>
- * We would appreciate acknowledgement if the software is used.
- * <BR>
- * NIST ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
- * DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING
- * FROM THE USE OF THIS SOFTWARE.
- * </PRE></P>
- * @author rouil
- */
- #include "contentionslot.h"
- #include <random.h>
- #include <math.h>
- /*
- * Creates a contention slot for the given frame
- * @param frame The frame map
- */
- ContentionSlot::ContentionSlot (FrameMap *map)
- {
- assert (map);
- map_ = map;
- }
- /**
- * Destructor
- */
- ContentionSlot::~ContentionSlot() {}
- /*
- * Set the initial contention slot window size
- * @param backoff_start the initial contention slot window size
- */
- void ContentionSlot::setBackoff_start( int backoff_start )
- {
- backoff_start_ = backoff_start;
- }
- /*
- * Set the final contention slot window size
- * @param backoff_stop the final contention slot window size
- */
- void ContentionSlot::setBackoff_stop( int backoff_stop )
- {
- backoff_stop_ = backoff_stop;
- }
- /**
- * Resume the timers for the requests
- */
- void ContentionSlot::resumeTimers () {}
- /**
- * Pause the timers for the requests
- */
- void ContentionSlot::pauseTimers () {}
- /**** Methods for Ranging Contention slot ****/
- /*
- * Creates a contention slot for the given frame
- * @param frame The frame map
- */
- RngContentionSlot::RngContentionSlot (FrameMap *map) : ContentionSlot (map)
- {
- request_ = NULL;
- }
- /**
- * Destructor
- */
- RngContentionSlot::~RngContentionSlot()
- {
- if (request_)
- delete request_;
- }
- /*
- * Add a ranging request
- * @param p The packet to be sent during the ranging opportunity
- */
- void RngContentionSlot::addRequest (Packet *p)
- {
- assert (request_ == NULL);
- request_ = new RangingRequest (this, p);
- }
- /*
- * Remove the pending request
- */
- void RngContentionSlot::removeRequest ()
- {
- //assert (request_);
- if (request_) {
- delete request_;
- request_ = NULL;
- }
- }
- /**
- * Resume the timers for the requests
- */
- void RngContentionSlot::resumeTimers ()
- {
- if (request_)
- request_->resume();
- }
- /**
- * Pause the timers for the requests
- */
- void RngContentionSlot::pauseTimers ()
- {
- if (request_)
- request_->pause();
- }
- /**** Methods for Bandwidth Contention slot ****/
- /*
- * Creates a contention slot for the given frame
- * @param frame The frame map
- */
- BwContentionSlot::BwContentionSlot (FrameMap *map) : ContentionSlot (map)
- {
- LIST_INIT (&request_list_);
- }
- /**
- * Destructor
- */
- BwContentionSlot::~BwContentionSlot() {}
- /*
- * Add a bandwidth request
- * @param p The packet to be sent during the ranging opportunity
- * @param cid The CID of the bandwidth request
- * @param len The size in bytes of the bandwidth request
- */
- void BwContentionSlot::addRequest (Packet *p, int cid, int len)
- {
- assert (getRequest (cid)==NULL);
- BwRequest *b = new BwRequest (this, p, cid, len);
- b->insert_entry_head (&request_list_);
- }
- /*
- * Remove the pending request
- */
- void BwContentionSlot::removeRequest (int cid)
- {
- BwRequest *b = getRequest (cid);
- if (b!=NULL) {
- b->remove_entry ();
- delete b;
- }
- }
- /*
- * Remove all pending reuquest
- */
- void BwContentionSlot::removeRequests ()
- {
- for (BwRequest *c = (BwRequest *)request_list_.lh_first; c ; c=(BwRequest *)request_list_.lh_first) {
- c->remove_entry();
- delete c;
- }
- }
- /*
- * Get the request for the given CID
- * @param cid The CID for the request
- */
- BwRequest* BwContentionSlot::getRequest (int cid)
- {
- for (BwRequest *c = (BwRequest *)request_list_.lh_first; c ; c=(BwRequest *)(c->next_entry())) {
- if (c->getCID()==cid)
- return c;
- }
- return NULL;
- }
- /**
- * Resume the timers for the requests
- */
- void BwContentionSlot::resumeTimers ()
- {
- for (BwRequest *c = (BwRequest *)request_list_.lh_first; c ; c=(BwRequest *)(c->next_entry())) {
- c->resume();
- }
- }
- /**
- * Pause the timers for the requests
- */
- void BwContentionSlot::pauseTimers ()
- {
- for (BwRequest *c = (BwRequest *)request_list_.lh_first; c ; c=(BwRequest *)(c->next_entry())) {
- c->pause();
- }
- }