xcp.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* -*-  Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*-
  2.  *
  3.  * Copyright (C) 2004 by USC/ISI
  4.  *
  5.  * All rights reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms are permitted
  8.  * provided that the above copyright notice and this paragraph are
  9.  * duplicated in all such forms and that any documentation, advertising
  10.  * materials, and other materials related to such distribution and use
  11.  * acknowledge that the software was developed by the University of
  12.  * Southern California, Information Sciences Institute.  The name of the
  13.  * University may not be used to endorse or promote products derived from
  14.  * this software without specific prior written permission.
  15.  *
  16.  * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  17.  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  18.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  19.  *
  20.  * The copyright of this module includes the following
  21.  * linking-with-specific-other-licenses addition:
  22.  *
  23.  * In addition, as a special exception, the copyright holders of
  24.  * this module give you permission to combine (via static or
  25.  * dynamic linking) this module with free software programs or
  26.  * libraries that are released under the GNU LGPL and with code
  27.  * included in the standard release of ns-2 under the Apache 2.0
  28.  * license or under otherwise-compatible licenses with advertising
  29.  * requirements (or modified versions of such code, with unchanged
  30.  * license).  You may copy and distribute such a system following the
  31.  * terms of the GNU GPL for this module and the licenses of the
  32.  * other code concerned, provided that you include the source code of
  33.  * that other code when and as the GNU GPL requires distribution of
  34.  * source code.
  35.  *
  36.  * Note that people who make modified versions of this module
  37.  * are not obligated to grant this special exception for their
  38.  * modified versions; it is their choice whether to do so.  The GNU
  39.  * General Public License gives permission to release a modified
  40.  * version without this exception; this exception also makes it
  41.  * possible to release a modified version which carries forward this
  42.  * exception.
  43.  *
  44.  * @(#) $Header: /cvsroot/nsnam/ns-2/xcp/xcp.h,v 1.9 2006/05/30 20:30:30 pradkin Exp $
  45.  */
  46. #ifndef NS_XCP
  47. #define NS_XCP
  48. #include "packet.h"
  49. #include "queue.h"
  50. #include "xcpq.h"
  51. enum {XCPQ=0, TCPQ=1, OTHERQ=2, MAX_QNUM};
  52. // code points for separating XCP/TCP flows
  53. #define CP_XCP 10
  54. #define CP_TCP 20
  55. #define CP_OTHER 30
  56. class XCPWrapQ : public Queue {
  57. public:
  58. XCPWrapQ();
  59. int command(int argc, const char*const* argv);
  60. void recv(Packet*, Handler*);
  61. protected:
  62. Queue *q_[MAX_QNUM];
  63. XCPQueue  *xcpq_; // same as q_[XCPQ]
  64. unsigned int    routerId_;
  65.   
  66. int qToDq_;                 // current queue being dequed
  67. double wrrTemp_[MAX_QNUM];     // state of queue being serviced
  68. double queueWeight_[MAX_QNUM]; // queue weight for each queue (dynamic)
  69. int spread_bytes_;
  70. bool tcp_xcp_on_;     // true if XCP/TCP sharing is enables
  71. // Modified functions
  72. virtual void enque(Packet* pkt); // high level enque function
  73. virtual Packet* deque();         // high level deque function
  74.     
  75. void addQueueWeights(int queueNum, int weight);
  76. int queueToDeque();              // returns qToDq
  77. int queueToEnque(int codePt);    // returns queue based on codept
  78. void mark(Packet *p);             // marks pkt based on flow type
  79. int getCodePt(Packet *p);        // returns codept in pkt hdr
  80. void setVirtualQueues();         // setup virtual queues(for xcp/tcp)
  81. };
  82. #endif //NS_XCP