• Main Page
  • Classes
  • Files
  • File List

/Users/yzchen/ns/ns-allinone-2.33/ns-2.33/pushback/logging-data-struct.h

00001 /* -*-  Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
00002 /*
00003  * Copyright (c) 2000  International Computer Science Institute
00004  * All rights reserved.
00005  *
00006  * Redistribution and use in source and binary forms, with or without
00007  * modification, are permitted provided that the following conditions
00008  * are met:
00009  * 1. Redistributions of source code must retain the above copyright
00010  *    notice, this list of conditions and the following disclaimer.
00011  * 2. Redistributions in binary form must reproduce the above copyright
00012  *    notice, this list of conditions and the following disclaimer in the
00013  *    documentation and/or other materials provided with the distribution.
00014  * 3. All advertising materials mentioning features or use of this software
00015  *    must display the following acknowledgement:
00016  *      This product includes software developed by ACIRI, the AT&T 
00017  *      Center for Internet Research at ICSI (the International Computer
00018  *      Science Institute).
00019  * 4. Neither the name of ACIRI nor of ICSI may be used
00020  *    to endorse or promote products derived from this software without
00021  *    specific prior written permission.
00022  *
00023  * THIS SOFTWARE IS PROVIDED BY ICSI AND CONTRIBUTORS ``AS IS'' AND
00024  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00025  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00026  * ARE DISCLAIMED.  IN NO EVENT SHALL ICSI OR CONTRIBUTORS BE LIABLE
00027  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00028  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00029  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00030  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00031  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00032  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00033  * SUCH DAMAGE.
00034  *
00035  */
00036 
00037 #ifndef ns_logging_data_struct_h
00038 #define ns_logging_data_struct_h
00039 
00040 #include "node.h"
00041 #include "packet.h"
00042 #include "route.h"
00043 #include "rate-estimator.h"
00044 #include "pushback-constants.h"
00045 
00046 class LoggingDataStructNode {
00047  public:
00048   int nid_;      //the neighbors id.
00049   RateEstimator * rateEstimator_;
00050 
00051   int pushbackSent_;  //whether pushback message was sent to this neighbor
00052   double limit_;      //limit specified in the pushback message sent to it.
00053   
00054   //status details of this neighbor.
00055   int gotStatus_;   
00056   double statusArrivalRate_;
00057   int countLessReportedRate_;   //variable used to protect low senders
00058     
00059   int sentRefresh_; //whether we have sent a refresh to this neighbor yet.
00060 
00061   LoggingDataStructNode * next_;
00062   
00063   LoggingDataStructNode(int id, LoggingDataStructNode * next); 
00064   ~LoggingDataStructNode();
00065   
00066   void sentRefresh(double limit);
00067   void pushbackSent(double limit, double expectedStatusRate);
00068   void registerStatus(double arrRate);
00069   void log(Packet *pkt);
00070 };
00071 
00072 
00073 class LoggingDataStruct {
00074 
00075  public:
00076   LoggingDataStructNode * first_;
00077   int count_;       //number of members in this struct
00078   int myID_;        // id of the my node, needed to figure out who sent the pkt.
00079 
00080   RateEstimator * rateEstimator_;   // rate estimator for all bytes coming in for this RLS.
00081 
00082   double reset_time_;  //time when logging was last reset.
00083 
00084   //consolidated status details.
00085   int gotStatusAll_;
00086   double statusArrivalRateAll_;
00087 
00088   RouteLogic * rtLogic_;
00089   
00090   LoggingDataStruct(Node *, RouteLogic *, int sampleAddress, double estimate);
00091   ~LoggingDataStruct();
00092 
00093   void log(Packet * pkt);
00094   int consolidateStatus();
00095   void registerStatus(int sender, double arrRate);
00096   LoggingDataStructNode * getNodeByID(int id);
00097   void resetStatus();
00098 };
00099 
00100 #endif

Generated on Tue Aug 10 2010 16:16:07 for ns-2.33 by  doxygen 1.7.1