Mô tả các thuộc tính, phương thức trong file C++

Một phần của tài liệu Đánh giá hiệu năng những thuật toán cấp phát động băng thông đa bước sóng cài đặt cho mạng WDM PON (Trang 70 - 74)

CHƯƠNG 4 CÀI ĐẶT CÁC THUẬT TOÁN VÀ ĐÁNH GIÁ HIỆU NĂNG

4.2 Cài đặt thuật toán trong NS2

4.2.3 Mô tả các thuộc tính, phương thức trong file C++

Như ta đã biết trong C++ NS2 sử dụng để :

 Mô phỏng chi tiết cho các giao thức yêu cầu ngôn ngữ lập trình hệ thống.

 Thao tác trên byte, xử lý gói, thực thi thuật toán.

 Tốc độ thời gian thực (run-time speed) là quan trọng nhất.

 Thực hiện bất kỳ việc gì mà cần phải xử lý từng packet của một luồng.

Dưới đây là bảng mô tả thuộc tính cũng như phương thức sử dụng trong file Agent-edba.cc và Agent-edba.h. Agent-Dborn kế thừa trực tiếp từ lớp Agent nên nó có đầy đủ các phương thức cũng như thuộc tính của lớp Agent. Dưới đây tác giả chỉ trình bày về Agent-edba, còn về lớp Agent sẽ được giải thích chi tiết trong phụ lục.

Chúng ta có sơ đồ khối của file Agent-edba.h/Agent-edba.cc như sau (chú ý là sơ đồ này cũng được dùng cho các file cài đặt của các thuật toán Agent-dba.h/Agent- dba.cc và Agent-ipact.h/Agent-ipact.h):

Source update()

local_buff sendlocalmsg()

Insert_local_pkt()

send_buff

send_report()

recv() forward()

take_buff

take_packet()

Rx Tx

send_gate()

Gate_Timer Data_Timer

FDL_handle

send_to()

Hình 32 – Sơ đồ khối của file Agent-edba.h/Agent-edba.cc

60

Trong sơ đồ này, chúng ta thấy một nút mạng (node) được khai báo trong file tcl sẽ hoạt động dựa trên những phương thức mà tôi đã định nghĩa trong file Agent- edba.h/Agent-edba.cc.

Để người đọc nắm rõ hơn file đã cài đặt Thiết kế chi tiết lớp Agent-Dborn, tôi xin liệt kê một số thuộc tính và phương thức quan trọng trong file:

Kiểu dữ liệu(C++) Tên thuộc tính Ý nghĩa

unsigned int buffsize[] Kích thước buffsize

nsaddr_t NextNodeAddr_ Địa chỉ của node tiếp

theo trong mạng

Int DbornPort_ Khai báo cổng Dborn

FDLHandler fdl_handler

Int num_wavelength,useNode,

checkTable[MAXNodes], srctest;

Số lượng bước sóng trong mạng

GATETimer gate_scheduler Lập lịch cho bản tin

Gate

DATATimer data_scheduler Lập lịch cho bản tin data

unsigned int NodeOLT, NodeSPLIT Kiểm tra là node là OLT ,ONU hay coupler double PollingTable[MAXNodes], usePoll;

int ONUNumber_,pollTable_,

win_max_

Số lượng ONU, cửa sổ truyền cực đại,

double guardTime_,delay_,link_bw,timetes t,waitTime;

Khai báo thời gian trễ, thời gian chờ ,thời gian bảo vệ …

int CurrentSizeinBuffer,

getNumberPktBuffer

Kích thước gói tin trong buffer, Số lượng gói tin trong Buffer

Bảng 2: Thuộc tính lớp Agent-Dborn

61 Các phương thức:

Kiểu trả về (C++) Tên phương thức Ý nghĩa

int CurrentSizeinBuffer() Trả về kích thước gói

tin trong buffer

void initial_agent() Khai báo giá trị cho

các biến trong agent

void init_variables() Khởi tạo các biến

void take_packet() Lấy gói tin trong

hàng đợi

virtual void recv(Packet* , Handler *) Kiểm tra xem gói tin nhận được đến từ đâu virtual void sendto (int /*nbytes*/, const char*

nsaddr_t dest_)

Địa chỉ và kích thước gói tin được gửi đến

void sendREPORT() Gửi bản tin Report

void sendGATE(int) Gửi bản tin Gate

void insert_local_pkt();

void update_stat(int, Packet* = NULL) Cập nhật trạng thái gói tin

void update_drop(Packet*)

void output_stat(const char*) Đưa dữ liệu ra file void output_data(const char*) Đưa dữ liệu ra file virtual int command(int argc, const

char*const* argv)

Tạo ra interface, xử lý các lệnh từ tcl . Bảng 3: Các phương thức trong Agent-Dborn

Trong đó các phương thức quan trọng là : command, send, recv. Các phương thức này sẽ quy định cách xử lý đối với một gói tin của giao thức.

 Hàm insert_local_pkt() (insert local packet):

62

o Đầu vào nhận các thông tin từ các hàm send_report(), sent_gate() và sendlocalmsg()

o Nhằm mục đích đưa thông tin từ local lên network

o Để truyền thông tin dữ liệu thì khi có yêu cầu từ sendlocalmsg() hàm lấy thông tin cần gửi ở bộ đệm dữ liệu send_buff rồi gửi ( hàm deque() trong chương trình)

 Hàm recv() (receive):

o Nhận thông tin truyền vào

o Có bộ xử lý lập lịch (FDL handle) o Tại đây nó sẽ kiểm tra gói tin

 Nếu là nodeSPLIT (addr() == NodeSPLIT) thì nó sẽ gọi đến hàm forward() để chuyển gói tin đi. Sau đó gói tìn này được hàm forward() chuyển tiếp trực tiếp đưa lên mạng

 Nếu là nodeOLT (addr() == NodeOLT) thì nó sẽ kiểm tra loại thông tin gửi đến thuộc loại thông tin gì.

 Nếu là MSG_GATE: thông tin về gate thì sẽ có một thông báo lỗi

 Nếu là MSG_REPORT: thì sẽ gọi đến hàm Algorithme()

 Nếu là MSG_DATA: thì dữ liệu sẽ được chuyển tới bộ đệm take_buff bằng hàm enque(). Khi nào cần thiết thì hàm take_packet() sẽ lấy dữ liệu từ bộ đệm này ra để xử lý

 Nếu không phải hai loại trên ((addr() != NodeOLT)&&(addr()

!= NodeSPLIT)) thì sẽ kiểm tra thông tin một lần nữa

 Nếu là MSG_GATE: thì nó sẽ gửi thông tin này cho hàm sendlocalmsg() để sử dụng khi cần

 Nếu là các loại khác thì sẽ loại bỏ gói tin vì không phụ hợp bằng hàm drop().

 Hàm send_to()và update():

o Nhận thông tin của nguồn local

o Tại đây nó sẽ tạo các electronic packet từ thông tin của nguồn

63

o Sau đó nó sẽ sử dụng hàm update_stat() để cập nhật các thông tin các gói tin (local packet) trước khi đưa nó vào trong bộ đệm local_buff bằng hàm enque().

 Hàm sendlocalmsg():

o Có bộ định thời/ lập lịch

o Nhận thông tin MSG_GATE từ hàm recv()

o Khi được sử dụng thì hàm này sẽ lấy thông từ từ local_buff để chuyển những thông tin này ra sent_buff trước khi đưa vào hàm insert_local_pkt() trước khi truyền những thông tin local này đi

o Nếu trong khi xử lý thông tin trong hai bộ đệm buff có lỗi thì hàm này sẽ phát ra một thông báo thông qua hàm send_report()

Một phần của tài liệu Đánh giá hiệu năng những thuật toán cấp phát động băng thông đa bước sóng cài đặt cho mạng WDM PON (Trang 70 - 74)

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

(99 trang)