实现一个手动配置路由表的无线路由协议
2013-07-04 11:22
267 查看
1.Agent and Connector
Connector is one of the most basic classes in ns-2. It has a "target_" object , handles "recv", "send" and "drop" activities. Agent is a child
class of Connector.
Basically, a routing agent is going to override "recv" function of agent.
The default behavior of "recv" in Agent is to calling the app_ 's "recv" function. However,
as routing agent is usually independent of the application, it has to override the virtual "recv" function.
We implement the new routing agent by modifying codes from DSDV source code in ns-2. As DSDV in ns-2 defines two additonal auxillary classes, the static routing agent also defines two new classes.
2.Routing Table Class
FixRTable is a class that store routing table entries. Each entry should have at least
<dst, next-hop and metric>. Often in DSDV or AODV, it has sequence numbers to determine if it is a newer routing message or not. For fixed routing, this is unnecessary. To use this new agent, change opt(rt) from AODV or DSDV to FIXRT in your wireless simulation
script.
In almost every routing protocol design, a packet queue is used to store those packets with valid destination but without valid routes yet. This is unnecessary for this static routing design. Thus, the router
will no longer need to have queues for each outgoing ports, we remove IP layer queues in "PacketQueue" member variable in class "fixrt_ent".
3.Routing Agent Class
The most important task for a routing agent is to detect link metrics and refresh routing table with special routing signaling messages such as periodic advertisements. However, in static routing, there is
no such a burden. Only two things need to be addressed:
1)Start-up function, called in the command "start-fixrt". In this function, we call makeRoutingtable function.
routing information will be "fscanf" from a file and adding to the tables. Here, we are going to use "fscanf" to read three parameters. "int32" "int32 ""uint16", to represent <dst, hop, metric>. The filename must be specified. Different nodes read different
sections of the routing table file. The special format of this file is:
<src><dst> <next-hop><number of hops>
0 3 1 3
.......
So, only those entries where 'src' addr is equal to its addresss will be read by a node.
The auto-generation of routing table could be easily implemented by an algorithm from the topology file.
2) Packets Forwarding functions: according to the routing table, the agent needs to handle both "broadcast" and "unicast" packets. "Forwarding" means determining the next-hop of a unicast packet. Once this field of the
header is set, it is done. In FIXRT, broadcast occurres only locally.
The agent's interface to MAC componet is a little complex:
1) Message interface: packets going to mac with next-hop set, ready for layer 2 transmission.
2) Function interface: once link of loss is detected, the MAC will "callback" (inform) routing agent to do correspondingly. In this Fix Routing agent, this would be useless. The agent will do nothing for "mac_callback" function in this static routing design.
4.Interface (Linkage) to Otcl
When a wireless node is created, its default routing agent is specified in the arguments, such as opt(rt). In /tcl/lib/ns-lib.tcl. the "create-wireless-node" procedure will check the routing protocol type. Here we can add a new type
as "FIXRT" in the "switch" block. Also add "set ragent [$self create-fixrt-agent $node]". For example,
the "create-fixrt-agent" procedure is also need to be defined. In this procedure, a "$self at 0.0 "$ragent start-fixrt" " will be given to the routing agent. Therefore, we
have to initialize routing table in the start-fixrt command.
After this, all packets coming will be handled by the "recv" function of the agent, and the agent will just route packets according to the table.
To use this new agent, change opt(rt) from DSDV/AODV to FIXRT in your wireless simulation script.
5. Benefits of Using Fix-Route Routing
When FIXRT is used as a routing protocol instead of DSDV, AODV, DSR, it is a more efficient routing protocol because the route is pre-calculated in an optimal way (e.g. shortest path). Thus, it stands as an upper bound of performance in all routing protocols,
if nodes are not moving. When nodes are mobile, as there are no adaptive changes for routing table, the performance will be sub-optimal.
The other big benefits is that routing messages are suppressed, and link loss are also ignored. So, it provides a basic and fair platform for comparing MAC protocol performance with the "ALWAYS SAME" route.!!!
This is important because routing protocol depends on MAC to propagate routing messages, If MAC is modified, the routing path could also be changed and the performance comparison is no longer accurate!
APPENDIX
Routing Table for 4*4 grid
0----1-----2-----3
| | | |
4----5-----6-----7
| | | |
8----9-----10---11
| | | |
12--13---14----15
0 1 1 1
0 2 1 2
0 3 1 3
0 4 1 2
0 5 1 3
0 6 1 4
0 7 1 3
0 8 1 3
0 9 1 4
0 10 1 4
0 11 1 5
0 12 1 5
0 13 1 6
0 14 1 4
1 0 0 1
1 2 2 1
1 3 2 2
1 4 4 1
1 5 4 2
1 6 4 3
1 7 4 2
1 8 4 2
1 9 4 3
1 10 4 3
1 11 4 4
1 12 4 4
1 13 4 5
1 14 2 3
2 0 1 2
2 1 1 1
2 3 3 1
2 4 5 2
2 5 5 1
2 6 5 2
2 7 5 3
2 8 5 2
2 9 5 2
2 10 5 4
2 11 5 3
2 12 5 3
2 13 5 4
2 14 3 2
3 0 2 3
3 1 2 2
3 2 2 1
3 4 6 3
3 5 6 2
3 6 6 1
3 7 6 4
3 8 6 3
3 9 6 2
3 10 6 5
3 11 6 3
3 12 6 2
3 13 6 4
3 14 14 1
4 0 1 2
4 1 1 1
4 2 5 2
4 3 5 3
4 5 5 1
4 6 5 2
4 7 7 1
4 8 8 1
4 9 8 2
4 10 7 2
4 11 8 3
4 12 8 3
4 13 8 4
4 14 5 4
5 0 4 3
5 1 4 2
5 2 2 1
5 3 6 2
5 4 4 1
5 6 6 1
5 7 8 2
5 8 8 1
5 9 9 1
5 10 8 3
5 11 9 2
5 12 9 2
5 13 9 3
5 14 6 3
6 0 5 4
6 1 5 3
6 2 5 2
6 3 3 1
6 4 5 2
6 5 5 1
6 7 9 3
6 8 9 2
6 9 9 1
6 10 9 4
6 11 12 2
6 12 12 1
6 13 12 3
6 14 3 2
7 0 4 3
7 1 4 2
7 2 8 3
7 3 8 4
7 4 4 1
7 5 8 2
7 6 8 3
7 8 8 1
7 9 8 2
7 10 10 1
7 11 8 3
7 12 8 3
7 13 8 4
7 14 8 5
8 0 4 3
8 1 4 2
8 2 5 2
8 3 9 3
8 4 4 1
8 5 5 1
8 6 9 2
8 7 7 1
8 9 9 1
8 10 7 2
8 11 9 2
8 12 9 2
8 13 9 3
8 14 9 4
9 0 8 4
9 1 8 3
9 2 5 2
9 3 6 2
9 4 8 2
9 5 5 1
9 6 6 1
9 7 8 2
9 8 8 1
9 10 8 3
9 11 11 1
9 12 12 1
9 13 11 2
9 14 6 3
10 0 7 4
10 1 7 3
10 2 7 4
10 3 7 5
10 4 7 2
10 5 7 3
10 6 7 4
10 7 7 1
10 8 7 2
10 9 7 3
10 11 7 4
10 12 7 4
10 13 7 5
10 14 7 6
11 0 9 5
11 1 9 4
11 2 9 3
11 3 12 3
11 4 9 3
11 5 9 2
11 6 12 2
11 7 9 3
11 8 9 2
11 9 9 1
11 10 9 4
11 12 12 1
11 13 13 1
11 14 12 4
12 0 9 5
12 1 9 4
12 2 9 3
12 3 6 2
12 4 9 3
12 5 9 2
12 6 6 1
12 7 9 3
12 8 9 2
12 9 9 1
12 10 9 4
12 11 11 1
12 13 11 2
12 14 6 3
13 0 11 6
13 1 11 5
13 2 11 4
13 3 11 4
13 4 11 4
13 5 11 3
13 6 11 3
13 7 11 4
13 8 11 3
13 9 11 2
13 10 11 5
13 11 11 1
13 12 11 2
13 14 11 5
14 0 3 4
14 1 3 3
14 2 3 2
14 3 3 1
14 4 3 4
14 5 3 3
14 6 3 2
14 7 3 5
14 8 3 4
14 9 3 3
14 10 3 6
14 11 3 4
14 12 3 3
14 13 3 5
Sourcecode:
There are two classes implemented. So, there are totally 4 files;
Fix Routing Agent Class
fixrt.cc
fixrt.h
Table Class
fixtb.cc
fixtb.h
After add those 4 files, you also need to change ns-lib.tcl file and Makefile before you make ns-2.
There are two matlab files which are useful to generating the static routing table for complex topologies. The required arguments for the matlab function is the metric array (weighted adjacency array) and source,
destination vectors.
shortest_path_routing.m
dijkstra_wu.m
Note that the "node" array in ns-2 begins from index 0. While in matlab, it begins from index 1.
网址:http://www.winlab.rutgers.edu/~zhibinwu/html/Routing_Agent.html#Agent
Connector is one of the most basic classes in ns-2. It has a "target_" object , handles "recv", "send" and "drop" activities. Agent is a child
class of Connector.
Basically, a routing agent is going to override "recv" function of agent.
The default behavior of "recv" in Agent is to calling the app_ 's "recv" function. However,
as routing agent is usually independent of the application, it has to override the virtual "recv" function.
We implement the new routing agent by modifying codes from DSDV source code in ns-2. As DSDV in ns-2 defines two additonal auxillary classes, the static routing agent also defines two new classes.
class FixRTable; // routing table class fixrt_ent; // routing table entry
2.Routing Table Class
FixRTable is a class that store routing table entries. Each entry should have at least
<dst, next-hop and metric>. Often in DSDV or AODV, it has sequence numbers to determine if it is a newer routing message or not. For fixed routing, this is unnecessary. To use this new agent, change opt(rt) from AODV or DSDV to FIXRT in your wireless simulation
script.
In almost every routing protocol design, a packet queue is used to store those packets with valid destination but without valid routes yet. This is unnecessary for this static routing design. Thus, the router
will no longer need to have queues for each outgoing ports, we remove IP layer queues in "PacketQueue" member variable in class "fixrt_ent".
3.Routing Agent Class
The most important task for a routing agent is to detect link metrics and refresh routing table with special routing signaling messages such as periodic advertisements. However, in static routing, there is
no such a burden. Only two things need to be addressed:
1)Start-up function, called in the command "start-fixrt". In this function, we call makeRoutingtable function.
routing information will be "fscanf" from a file and adding to the tables. Here, we are going to use "fscanf" to read three parameters. "int32" "int32 ""uint16", to represent <dst, hop, metric>. The filename must be specified. Different nodes read different
sections of the routing table file. The special format of this file is:
<src><dst> <next-hop><number of hops>
0 3 1 3
.......
So, only those entries where 'src' addr is equal to its addresss will be read by a node.
The auto-generation of routing table could be easily implemented by an algorithm from the topology file.
2) Packets Forwarding functions: according to the routing table, the agent needs to handle both "broadcast" and "unicast" packets. "Forwarding" means determining the next-hop of a unicast packet. Once this field of the
header is set, it is done. In FIXRT, broadcast occurres only locally.
The agent's interface to MAC componet is a little complex:
1) Message interface: packets going to mac with next-hop set, ready for layer 2 transmission.
2) Function interface: once link of loss is detected, the MAC will "callback" (inform) routing agent to do correspondingly. In this Fix Routing agent, this would be useless. The agent will do nothing for "mac_callback" function in this static routing design.
4.Interface (Linkage) to Otcl
When a wireless node is created, its default routing agent is specified in the arguments, such as opt(rt). In /tcl/lib/ns-lib.tcl. the "create-wireless-node" procedure will check the routing protocol type. Here we can add a new type
as "FIXRT" in the "switch" block. Also add "set ragent [$self create-fixrt-agent $node]". For example,
switch -exact $routingAgent_ { DSDV { set ragent [$self create-dsdv-agent $node] } FIXRT { set ragent [$self create-fixrt-agent $node] } ... }
the "create-fixrt-agent" procedure is also need to be defined. In this procedure, a "$self at 0.0 "$ragent start-fixrt" " will be given to the routing agent. Therefore, we
have to initialize routing table in the start-fixrt command.
Simulator instproc create-fixrt-agent { node } { # Create a fix-path routing agent for this node set ragent [new Agent/FixRT] # Setup address (supports hier-addr) for dsdv agent # and mobilenode set addr [$node node-addr] $ragent addr $addr $ragent node $node if [Simulator set mobile_ip_] { $ragent port-dmux [$node demux] } $node addr $addr $node set ragent_ $ragent $self at 0.0 "$ragent start-fixrt" ;# start updates return $ragent }
After this, all packets coming will be handled by the "recv" function of the agent, and the agent will just route packets according to the table.
To use this new agent, change opt(rt) from DSDV/AODV to FIXRT in your wireless simulation script.
5. Benefits of Using Fix-Route Routing
When FIXRT is used as a routing protocol instead of DSDV, AODV, DSR, it is a more efficient routing protocol because the route is pre-calculated in an optimal way (e.g. shortest path). Thus, it stands as an upper bound of performance in all routing protocols,
if nodes are not moving. When nodes are mobile, as there are no adaptive changes for routing table, the performance will be sub-optimal.
The other big benefits is that routing messages are suppressed, and link loss are also ignored. So, it provides a basic and fair platform for comparing MAC protocol performance with the "ALWAYS SAME" route.!!!
This is important because routing protocol depends on MAC to propagate routing messages, If MAC is modified, the routing path could also be changed and the performance comparison is no longer accurate!
APPENDIX
Routing Table for 4*4 grid
0----1-----2-----3
| | | |
4----5-----6-----7
| | | |
8----9-----10---11
| | | |
12--13---14----15
0 1 1 1
0 2 1 2
0 3 1 3
0 4 1 2
0 5 1 3
0 6 1 4
0 7 1 3
0 8 1 3
0 9 1 4
0 10 1 4
0 11 1 5
0 12 1 5
0 13 1 6
0 14 1 4
1 0 0 1
1 2 2 1
1 3 2 2
1 4 4 1
1 5 4 2
1 6 4 3
1 7 4 2
1 8 4 2
1 9 4 3
1 10 4 3
1 11 4 4
1 12 4 4
1 13 4 5
1 14 2 3
2 0 1 2
2 1 1 1
2 3 3 1
2 4 5 2
2 5 5 1
2 6 5 2
2 7 5 3
2 8 5 2
2 9 5 2
2 10 5 4
2 11 5 3
2 12 5 3
2 13 5 4
2 14 3 2
3 0 2 3
3 1 2 2
3 2 2 1
3 4 6 3
3 5 6 2
3 6 6 1
3 7 6 4
3 8 6 3
3 9 6 2
3 10 6 5
3 11 6 3
3 12 6 2
3 13 6 4
3 14 14 1
4 0 1 2
4 1 1 1
4 2 5 2
4 3 5 3
4 5 5 1
4 6 5 2
4 7 7 1
4 8 8 1
4 9 8 2
4 10 7 2
4 11 8 3
4 12 8 3
4 13 8 4
4 14 5 4
5 0 4 3
5 1 4 2
5 2 2 1
5 3 6 2
5 4 4 1
5 6 6 1
5 7 8 2
5 8 8 1
5 9 9 1
5 10 8 3
5 11 9 2
5 12 9 2
5 13 9 3
5 14 6 3
6 0 5 4
6 1 5 3
6 2 5 2
6 3 3 1
6 4 5 2
6 5 5 1
6 7 9 3
6 8 9 2
6 9 9 1
6 10 9 4
6 11 12 2
6 12 12 1
6 13 12 3
6 14 3 2
7 0 4 3
7 1 4 2
7 2 8 3
7 3 8 4
7 4 4 1
7 5 8 2
7 6 8 3
7 8 8 1
7 9 8 2
7 10 10 1
7 11 8 3
7 12 8 3
7 13 8 4
7 14 8 5
8 0 4 3
8 1 4 2
8 2 5 2
8 3 9 3
8 4 4 1
8 5 5 1
8 6 9 2
8 7 7 1
8 9 9 1
8 10 7 2
8 11 9 2
8 12 9 2
8 13 9 3
8 14 9 4
9 0 8 4
9 1 8 3
9 2 5 2
9 3 6 2
9 4 8 2
9 5 5 1
9 6 6 1
9 7 8 2
9 8 8 1
9 10 8 3
9 11 11 1
9 12 12 1
9 13 11 2
9 14 6 3
10 0 7 4
10 1 7 3
10 2 7 4
10 3 7 5
10 4 7 2
10 5 7 3
10 6 7 4
10 7 7 1
10 8 7 2
10 9 7 3
10 11 7 4
10 12 7 4
10 13 7 5
10 14 7 6
11 0 9 5
11 1 9 4
11 2 9 3
11 3 12 3
11 4 9 3
11 5 9 2
11 6 12 2
11 7 9 3
11 8 9 2
11 9 9 1
11 10 9 4
11 12 12 1
11 13 13 1
11 14 12 4
12 0 9 5
12 1 9 4
12 2 9 3
12 3 6 2
12 4 9 3
12 5 9 2
12 6 6 1
12 7 9 3
12 8 9 2
12 9 9 1
12 10 9 4
12 11 11 1
12 13 11 2
12 14 6 3
13 0 11 6
13 1 11 5
13 2 11 4
13 3 11 4
13 4 11 4
13 5 11 3
13 6 11 3
13 7 11 4
13 8 11 3
13 9 11 2
13 10 11 5
13 11 11 1
13 12 11 2
13 14 11 5
14 0 3 4
14 1 3 3
14 2 3 2
14 3 3 1
14 4 3 4
14 5 3 3
14 6 3 2
14 7 3 5
14 8 3 4
14 9 3 3
14 10 3 6
14 11 3 4
14 12 3 3
14 13 3 5
Sourcecode:
There are two classes implemented. So, there are totally 4 files;
Fix Routing Agent Class
fixrt.cc
fixrt.h
Table Class
fixtb.cc
fixtb.h
After add those 4 files, you also need to change ns-lib.tcl file and Makefile before you make ns-2.
There are two matlab files which are useful to generating the static routing table for complex topologies. The required arguments for the matlab function is the metric array (weighted adjacency array) and source,
destination vectors.
shortest_path_routing.m
dijkstra_wu.m
Note that the "node" array in ns-2 begins from index 0. While in matlab, it begins from index 1.
网址:http://www.winlab.rutgers.edu/~zhibinwu/html/Routing_Agent.html#Agent
相关文章推荐
- SSH安全配置实践,如何手动编译Dropbear实现SSH协议。
- Shell脚本实现动态配置IP与路由:解决嵌入式Android/Linux有线和无线网卡双网共存问题
- 用DOS写一个简单的虚拟WIFI工具,启动无线承载网络,自动配置实现共享
- 配置办公室无线路由实现ip统一具体方式
- 通过一个实例来理解路由与路由表
- 网络设备配置与管理---VLAN间路由实现部门间通信
- 用Python实现一个简单的文件传输协议
- 一个简易的配置类及其实现
- Hyper-V结合远程路由访问实现一个公网IP内部多个虚拟服务器的发布
- 一个简单的shell脚本-----实现虚拟机实验环境的简单配置
- 手动实现一个虚拟DOM算法
- 完成Ubuntu桌面版的Apache+php+mysql(手动配置LAMP)的全过程及实现细节
- 如何在ns2中实现一个简单的网络协议
- jquery 实现一个可以手动调节的进度条
- 通过socket和Udp协议简单实现一个群体聊天工具(控制台)
- Ubuntu 一个操作系统的实现环境配置
- 今天遇到一个问题才知道如果安装了命名实例 SSIS Service 需要手动更改配置文件
- 在VS2015下配置libvlc并实现一个简单RTSP的播放器
- 在无线J2ME设备上实现HTTP协议
- Spring 3整合Quartz 2实现手动设置定时任务:新增,修改,删除,暂停和恢复----每一个你不满意的当下,都有一个你不曾努力的过去