4.3.3.1. Thiết lập các nút
MobileNode là đối tượng cơ bản của NS2, đối tượng Node cùng với các chức năng thêm vào như sự di chuyển, khả năng truyền và nhận trên một kênh cho phép tạo môi các truờng di động (mobile), môi trường mô phỏng mạng vô tuyến. Lớp MobileNode có xuất phát từ lớp cơ sở Node. MobileNode là một đối tượng tách biệt. Các tính năng mobile gồm có di chuyển node, cập nhập vị trí định kỳ, duy trì đường biên của đồ hình mạng,… được thực thi trong C++ trong khi tìm kiếm các thành phần của mạng bên trong của MobileNode (như các phân lớp, dmux, LL, Mac, Channel,…) đã được thực thi trong Otcl.
Trước hết chúng ta cần định nghĩa các kiểu của những thành phần mạng này nhờ sử dụng một mảng opt() trong ngôn ngữ Tcl:
set opt(chan) Channel/WirelessChannel ;# Chọn kiểu kênh truyền thông set opt(prop) Propagation/TwoRayGround ;# Mô hình truyền thông set opt(netif) Phy/WirelessPhy ;# Kiểu giao diện mạng tầng vật lý set opt(mac) Mac/802_11 ;# Kiểu MAC
set opt(ifq) Queue/DropTail/PriQueue ;# Kiểu của giao diện hàng đợi set opt(ll) LL ;# Kiểu tầng liên kết dữ liệu
set opt(ant) Antenna/OmniAntenna ;# Mô hình anten
set opt(ifqlen) 50 ;# Số gói tin lớn nhất có trong hàng đợi giao diện set opt(nn) 50 ;# Thiết lập số mobile node mạng trong cần mô phỏng set opt(rp) AODV ;# Chọn giao thức định tuyến đã sửa đổi mã nguồn
set opt(x) 500 ; #Mảng X, Y chứa diện tích địa hình mô phỏng set opt(y) 500
Một số thay đổi quan trọng trong AODV:
- Thay đổi file: aodv_packet.h Struct hdr_aodv_request {
u_int8_t rq_type; // Packet Type u_int8_t reserved[2];
u_int8_t rq_hop_count; // Hop Count u_int32_t rq_bcast_id; // Broadcast ID
nsaddr_t predecessor; // predecessor address nsaddr_t rq_dst; // Destination IP Address
Lớp ứng dụng CBR FTP Telnet Lớp giao vận TCP UDP Lớp ứng dụng DSDV DSR TORA AODV OLSR AODV Lớp liên kết kiểu số liệu 802.11 TDMA SMAC Lớp vật lý Các kiểu phát vô tuyến với suy giảm bậc 4
84
u_int32_t rq_dst_seqno; // Destination Sequence Number nsaddr_t rq_src; // Source IP Address
u_int32_t rq_src_seqno; // Source Sequence Number double rq_timestamp; // when REQUEST sent;
double rq_min_energy; // Nang luong cua node
…..
}
- Thay đổi file: aodv_rtable.h
….
protected:
LIST_ENTRY(aodv_rt_entry) rt_link; nsaddr_t rt_dst;
u_int32_t rt_seqno;
u_int16_t rt_hops; // hop count
int rt_last_hop_count; // last valid hop count
double rt_energy; // Bien nang luong cua tuyen
nsaddr_t rt_nexthop; // next hop IP address /* list of precursors */
aodv_precursors rt_pclist;
double rt_expire; // when entry expires u_int8_t rt_flags;
….
- Thay đổi file: aodv_rtable.cc
/*
The Routing Table
*/ aodv_rt_entry::aodv_rt_entry() { int i; rt_req_timeout = 0.0; rt_req_cnt = 0; rt_dst = 0; rt_seqno = 0;
rt_hops = rt_last_hop_count = INFINITY2;
rt_energy = 0; // Truong nang luong
rt_nexthop = 0;
LIST_INIT(&rt_pclist); rt_expire = 0.0;
rt_flags = RTF_DOWN;
85 - Thay đổi file: aodv.cc
…
if ( (rq->rq_src_seqno > rt0->rt_seqno ) || ((rq->rq_src_seqno == rt0->rt_seqno) && (rq->rq_hop_count/rq->rq_min_energy < rt0->rt_hops/rt0->rt_energy)) ) {
// Kiem tra duong theo tieu chi moi
rt_update(rt0, rq->rq_src_seqno, rq->rq_hop_count, ih->saddr(),
max(rt0->rt_expire, (CURRENT_TIME + REV_ROUTE_LIFE)), rq->rq_min_energy);
…
Ngoài ra, còn một số thay đổi khác nữa trong file aodv.cc.
Sau đó chúng ta cần phải thiết lập một đối tượng tô pô mạng để ghi lại sự di động của mobile node trong một vùng giới hạn. Trong ví dụ sau, ta thiết lập các mobile node di chuyển trong một vùng 500m x 500m:
set topo [new Topography] $topo load_flatgrid $opt(x) $opt(y)
Cuối cùng ta thực hiện cấu hình các thành phần mạng với đối tượng bộ mô phỏng. Việc cấu hình này sử dụng các hàm API như sau:
$ns_ node-config -adhocRouting $opt(rp) \ llType $opt(ll) \ macType $opt(mac) \ ifqType $opt(ifq) \ ifqLen $opt(ifqlen) \ antType $opt(ant) \ propType $opt(prop) \ phyType $opt(netif) \ channelType $opt(chan) \ topoInstance $topo \ wiredRouting ON \ agentTrace ON \ routerTrace ON \ macTrace ON \ movementTrace OFF \
# Khởi tạo các mức năng lượng.
energyModel $opt(energymodel) \ idlePower 1.0 \ rxPower 1.0 \ txPower 3.0 \ sleepPower 0.001 \ transitionPower 0.2 \ transitionTime 0.005 \
86
Tiếp theo là phương pháp tạo ra các MobileNode:
set rng [new RNG]
for {set i 0} {$i < $opt(nn) } {incr i} { set energy [$rng uniform 80 120] $ns_ node-config -initialEnergy $energy set node_($i) [$ns_ node]
$node_($i) random-motion 1; }
4.3.3.2 Gắn kết các tác nhân Sensor:
Lệnh này tạo ra một tác nhân Sensor cho mỗi nút Sensor và gắn kết tác nhân này với nút tường ứng.
set Sensor ($i) [new \ Agent/SensorAgent] $ns attach-agent $node ($i) \
$Sensor ($i)
[$node ($i) set ll (1)] \ up-target $Sensor ($i)
4.3.3.3 Gắn kết một tác nhân UDP và ứng dụng Sensor cho mỗi nút
Thí dụ sau minh hoạ việc thiết lập ứng dụng Sensor: set src ($i) [new Agent/UDP]
$ns attach-agent $node ($i) \ $src ($i)
$ns connect $src ($i) $sink
set app ($i) [new \ Application/SensorApp] $app ($i) attach-agent $src ($i)