Thiết lập mã lập trình mô phỏng

Một phần của tài liệu Đề xuất các thuật toán định tuyến đem lại hiệu quả năng lượng trong mạng cảm biến không dây (Trang 83)

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 ;# Chn giao thc đnh tuyến đã sa đi mã ngun

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)

Một phần của tài liệu Đề xuất các thuật toán định tuyến đem lại hiệu quả năng lượng trong mạng cảm biến không dây (Trang 83)

Tải bản đầy đủ (PDF)

(103 trang)