/*
Copyright (c) 1997, 1998 Carnegie Mellon University. All Rights
Reserved.
Permission to use, copy, modify, and distribute this
software and its documentation is hereby granted (including for
commercial or for-profit use), provided that both the copyright notice and this permission notice appear in all copies of the software, derivative works, or modified versions, and any portions thereof, and that both notices appear in supporting documentation, and that credit is given to Carnegie Mellon University in all publications reporting on direct or indirect use of this code or its derivatives.
ALL CODE, SOFTWARE, PROTOCOLS, AND ARCHITECTURES DEVELOPED BY THE CMU
MONARCH PROJECT ARE EXPERIMENTAL AND ARE KNOWN TO HAVE BUGS, SOME OF
WHICH MAY HAVE SERIOUS CONSEQUENCES. CARNEGIE MELLON PROVIDES THIS
SOFTWARE OR OTHER INTELLECTUAL PROPERTY IN ITS ``AS IS'' CONDITION,
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE OR
INTELLECTUAL PROPERTY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
Carnegie Mellon encourages (but does not require) users of this
software or intellectual property to return any improvements or
extensions that they make, and to grant Carnegie Mellon the rights to redistribute these changes without encumbrance.
The AODV code developed by the CMU/MONARCH group was optimized and tuned by Samir Das and Mahesh Marina, University of Cincinnati. The work was partially done in Sun Microsystems.
*/
#ifndef __aodv_h__
#define __aodv_h__
//#include <agent.h>
//#include <packet.h>
//#include <sys/types.h>
//#include <cmu/list.h>
//#include <scheduler.h>
#include <cmu-trace.h>
#include <priqueue.h>
#include <aodv/aodv_rtable.h>
/*** added for multicast ***/
#include <aodv/aodv_mtable.h>
/**************************/
#include <aodv/aodv_rqueue.h>
//#define DEBUG
/*
Allows local repair of routes
*/
#define AODV_LOCAL_REPAIR
/*
Allows AODV to use link-layer (802.11) feedback in determining when
links are up/down.
*/
#define AODV_LINK_LAYER_DETECTION
/*** added for multicast ***/
#define MULTICAST
#define PRUNE_TIMER 2 * RREP_WAIT_TIME
/***************************/
/*** added for prediction ***/
//#define IMPROVEMENT
#define PREDICTION
#define PREDICTION_TIME_FOR_MULTICAST 1
#define PREDICTION_TIME_FOR_UNICAST 0.75
/*****************************/
/*** added for upper level agent ***/
//#define UPPER_LEVEL_RECEIVE
//#define UPPER_LEVEL_PORT 100
/***********************************/
/*
Causes AODV to apply a "smoothing" function to the link layer feedback
that is generated by 802.11. In essence, it requires that RT_MAX_ERROR
errors occurs within a window of RT_MAX_ERROR_TIME before the link
is considered bad.
*/
#define AODV_USE_LL_METRIC
/*
Only applies if AODV_USE_LL_METRIC is defined.
Causes AODV to apply omniscient knowledge to the feedback received
from 802.11. This may be flawed, because it does not account for
congestion.
*/
//#define AODV_USE_GOD_FEEDBACK
class AODV;
#define MY_ROUTE_TIMEOUT 10 // 100 seconds
#define ACTIVE_ROUTE_TIMEOUT 10 // 50 seconds
#define REV_ROUTE_LIFE 6 // 5 seconds
#define BCAST_ID_SAVE 6 // 3 seconds
// No. of times to do network-wide search before timing out for
// MAX_RREQ_TIMEOUT sec.
#define RREQ_RETRIES 3
// timeout after doing network-wide search RREQ_RETRIES times
#define MAX_RREQ_TIMEOUT 10.0 //sec
/* Various constants used for the expanding ring search */
#define TTL_START 5
#define TTL_THRESHOLD 7
#define TTL_INCREMENT 2
// This should be somewhat related to arp timeout
#define NODE_TRAVERSAL_TIME 0.03 // 30 ms
#define LOCAL_REPAIR_WAIT_TIME 0.15 //sec
// Should be set by the user using best guess (conservative)
#define NETWORK_DIAMETER 30 // 30 hops
// Must be larger than the time difference between a node propagates a route
// request and gets the route reply back.
//#define RREP_WAIT_TIME (3 * NODE_TRAVERSAL_TIME * NETWORK_DIAMETER) // ms
//#define RREP_WAIT_TIME (2 * REV_ROUTE_LIFE) // seconds
/*** modified for multicast ***/
//#define RREP_WAIT_TIME 1.0 // sec
#define RREP_WAIT_TIME 0.5 // sec
/******************************/
#define ID_NOT_FOUND 0x00
#define ID_FOUND 0x01
//#define INFINITY 0xff
// The followings are used for the forward() function. Controls pacing.
#define DELAY 1.0 // random delay
#define NO_DELAY -1.0 // no delay
// think it should be 30 ms
#define ARP_DELAY 0.01 // fixed delay to keep arp happy
#define HELLO_INTERVAL 1
/*** added for multicast ***/
#define GROUP_HELLO_INTERVAL 5
/**************************/
#define ALLOWED_HELLO_LOSS 3 // packets
#define BAD_LINK_LIFETIME 3 // 3000 ms
#define MaxHelloInterval (1.25 * HELLO_INTERVAL)
#define MinHelloInterval (0.75 * HELLO_INTERVAL)
/*
Timers (Broadcast ID, Hello, Neighbor Cache, Route Cache)
*/
class BroadcastTimer : public Handler {
public:
BroadcastTimer(AODV* a) : agent(a) {}
void handle(Event*);
private:
AODV *agent;
Event intr;
};
/*** added for multicast ***/
class PacketTimer : public Handler {
public:
PacketTimer(AODV* a) : agent(a) {}
void handle(Event*);
private:
AODV *agent;
Event intr;
};
/***************************/
class HelloTimer : public Handler {
public:
HelloTimer(AODV* a) : agent(a) {}
void handle(Event*);
private:
AODV *agent;
Event intr;
};
/*** added for multicast ***/
class GroupHelloTimer : public Handler {
public:
GroupHelloTimer(AODV *a) : agent(a){}
void handle(Event*);
private:
AODV *agent;
Event intr;
};
/**************************/
class NeighborTimer : public Handler {
public:
NeighborTimer(AODV* a) : agent(a) {}
void handle(Event*);
private:
AODV *agent;
Event intr;
};
class RouteCacheTimer : public Handler {
public:
RouteCacheTimer(AODV* a) : agent(a) {}
void handle(Event*);
private:
AODV *agent;
Event intr;
};
class LocalRepairTimer : public Handler {
public:
LocalRepairTimer(AODV* a) : agent(a) {}
void handle(Event*);
private:
AODV *agent;
Event intr;
};
/*** added for multicast ***/
class RREPWaitTimer: public Handler {
public:
RREPWaitTimer(AODV* a) : agent(a) {}
void handle(Event*);
private:
AODV *agent;
Event intr;
};
class PruneTimer: public Handler {
public:
PruneTimer(AODV* a) : agent(a) {}
void handle(Event*);
private:
AODV *agent;
Event intr;
};
/*************************/
/*
Broadcast ID Cache
*/
class BroadcastID {
friend class AODV;
public:
BroadcastID(nsaddr_t i, u_int32_t b) { src = i; id = b; }
protected:
LIST_ENTRY(BroadcastID) link;
nsaddr_t src;
u_int32_t id;
double expire; // now + BCAST_ID_SAVE s
};
LIST_HEAD(aodv_bcache,
maodv.rar_MAODV ns2_NS2 MAODV_maodv tcl_ns2 源码_ns2 脚本
版权申诉
45 浏览量
2022-09-24
03:11:43
上传
评论
收藏 69KB RAR 举报
局外狗
- 粉丝: 64
- 资源: 1万+
最新资源
- 目标跟踪-基于目标中心点同时进行目标检测+目标跟踪算法实现-项目源码-优质项目实战.zip
- Python《文本特征分析-全唐诗数据挖掘及分析 》+源代码
- Netron-Setup-4.5.0
- 可编辑的地图图形3-世界、各洲、美国地图.xls
- NineAi 新版ChatGPT AI系统网站源码
- Anaconda3-2022.10windows版本
- 基于Servlet的URL访问安全控制.doc
- 可编辑的地图图形-2-中国到省、到市、到县地图.xls
- 快慢指针法判断链表是否有环-go语言实现
- Python《金融新闻数据挖掘分析 (数据抓取、NLP算法分析、量化策略、回测框架等)》+源代码+项目说明
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈