00001 /* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */ 00002 /* 00003 * Copyright (c) 1999 Regents of the University of California. 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 the MASH Research 00017 * Group at the University of California Berkeley. 00018 * 4. Neither the name of the University nor of the Research Group may be 00019 * used to endorse or promote products derived from this software without 00020 * specific prior written permission. 00021 * 00022 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 00023 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00024 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00025 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 00026 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00027 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00028 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00029 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00030 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00031 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00032 * SUCH DAMAGE. 00033 * 00034 * @(#) $Header: /cvsroot/nsnam/ns-2/satellite/sathandoff.h,v 1.5 1999/10/26 17:35:06 tomh Exp $ 00035 * 00036 * Contributed by Tom Henderson, UCB Daedalus Research Group, June 1999 00037 */ 00038 00039 #ifndef ns_sathandoff_h 00040 #define ns_sathandoff_h 00041 00042 #include "timer-handler.h" 00043 #include "rng.h" 00044 #include "node.h" 00045 #include <math.h> 00046 00047 // Handoff manager types 00048 #define LINKHANDOFFMGR_SAT 1 00049 #define LINKHANDOFFMGR_TERM 2 00050 00051 00052 class TermLinkHandoffMgr; 00053 class SatLinkHandoffMgr; 00054 00055 class TermHandoffTimer : public TimerHandler { 00056 public: 00057 TermHandoffTimer(TermLinkHandoffMgr *a) : TimerHandler() {a_ = a; } 00058 protected: 00059 virtual void expire(Event *e); 00060 TermLinkHandoffMgr *a_; 00061 }; 00062 00063 class SatHandoffTimer : public TimerHandler { 00064 public: 00065 SatHandoffTimer(SatLinkHandoffMgr *a) : TimerHandler() {a_ = a; } 00066 protected: 00067 virtual void expire(Event *e); 00068 SatLinkHandoffMgr *a_; 00069 }; 00070 00071 class SatLinkHead; 00072 class SatNode; 00073 00074 class LinkHandoffMgr : public TclObject { 00075 public: 00076 LinkHandoffMgr(); 00077 void start() { handoff(); } 00078 Node* node() { return node_; } // backpointer to node 00079 virtual int handoff() { return 0; } 00080 int command(int argc, const char*const* argv); 00081 SatNode* get_peer(SatLinkHead*); // helper function for handoff 00082 protected: 00083 Node* node_; 00084 static RNG handoff_rng_; 00085 static int handoff_randomization_; 00086 // 00087 // The remaining functions are helper functions for handoff 00088 // 00089 SatLinkHead* get_peer_next_linkhead(SatNode*); 00090 SatLinkHead* get_peer_linkhead(SatLinkHead*); 00091 }; 00092 00093 class SatLinkHandoffMgr : public LinkHandoffMgr { 00094 public: 00095 SatLinkHandoffMgr(); 00096 int handoff(); 00097 protected: 00098 SatHandoffTimer timer_; 00099 static double latitude_threshold_; 00100 static double longitude_threshold_; 00101 static int sat_handoff_int_; 00102 }; 00103 00104 class TermLinkHandoffMgr : public LinkHandoffMgr { 00105 public: 00106 TermLinkHandoffMgr(); 00107 int handoff(); 00108 protected: 00109 TermHandoffTimer timer_; 00110 static double elevation_mask_; 00111 static int term_handoff_int_; 00112 }; 00113 00114 #endif