Bản thân bộ mô phỏng NS2, phiên bản 2.34 đã hỗ trợ các giao thức định tuyến MANET sau: AODV, DSDV, DSR và TORA. Tuy nhiên trong bốn giao thức trên thì với giao thức định tuyến TORA, phần mềm NS2 khi chạy trong môi trường Linux, ở một số phiên bản (như version 2.34 được cài trên máy của tôi), thường gặp một số lỗi trong các tệp tora.h và tora.cc và khi gặp lời gọi hàm của lệnh command tora. Qua tìm kiếm các ý kiến trao đổi trên các diễn đàn trên Internet về NS2, tôi đã thử sửa đổi các tệp theo nhiều cách để khắc phục lỗi trên. Đến khi đọc tài liệu [21], tôi đã sửa được lỗi này bằng cách thay đổi các tệp này theo cách sau:
+ Với tệp tora.h: Ta thêm các dòng sau trong phần khai báo biến protected protected:
/* for passing packets up to agents */ PortClassifier *dmux_;
};
+ Với tệp tora.cc: Ta thêm đoạn mã sau vào lệnh else cuối cùng của định nghĩa hàm
else if (strcmp(argv[1], "port-dmux") == 0) {
dmux_ = (PortClassifier
*)TclObject::lookup(argv[2]); if (dmux_ == 0) {
fprintf (stderr, "%s: %s lookup of %s
failed\n", __FILE__, argv[1], argv[2]); return TCL_ERROR; } return TCL_OK; }
Sau đó chúng ta tiến hành biên dịch lại chương trình NS2 (trên máy của tôi là bộ Ns-allinone phiên bản 2.34), cụ thể bằng các thao tác sau đây:
ü Đầu tiên cần kiểm tra các gói phần mềm cần thiết cho việc biên dịch lại NS2 đã được cài đặt sẵn hay chưa, ví dụ như: gcc, glib-header, zlib... Để cài đặt gói gcc
chẳng hạn, chạy lệnh như sau (trên Ubuntu 9.04 và có kết nối mạng Internet): sudo apt-get install gcc
ü Tiếp theo vào thư mục gốc của bộ mô phỏng ns-2.34 chạy lệnh như sau sudo ./install
ü Trong quá trình cài đặt nếu có thông báo lỗi thiếu gói dữ liệu nào thì có thể cài thêm tương tự như cài đặt ở trên hoặc có thể tham khảo một số lỗi tại http://www.isi.edu/nsnam/ns/ns-problems.html
ü Nếu không có vấn đề gì thì khoảng 10-15 phút (trên máy của tôi) quá trình biên dịch lại bộ mô phỏng NS2 sẽ hoàn thành.
ü Để kiểm tra việc cài đặt có thành công không, chúng ta có thể sử dụng công cụ validate như sau trong thư mục ns-2.34:
sudo ./validate
Tuy nhiên, một lỗi nghiêm trọng khác xảy ra khi chạy mô phỏng với giao thức TORA là chương trình dường như rơi vào chu kỳ chết và không có phản hồi nào cho kết quả mô phỏng. Qua quá trình tìm hiểu trên Internet, tôi phát hiện ra vấn đề nằm ở tệp imep/imep.cc trong bộ mô phỏng NS2 [19]. Tiến hành sửa đổi tệp này bằng cách ở dòng 504 ta thay dòng lệnh
rexmitTimer.start(rexat - CURRENT_TIME); bằng đoạn mã
if (rexat-CURRENT_TIME<0.000001) // Preventing eternal loop.
rexmitTimer.start(0.000001); else
rexmitTimer.start(rexat - CURRENT_TIME);
Sau đó tiến hành biên dịch lại bộ mô phỏng NS2, theo cách tương tự như mô tả ở trên. Với việc sửa đổi như vậy, tôi đã chạy được giao thức TORA với số nút tham gia là 3 và thời gian mô phỏng ngắn khoảng 100s. Với số nút và thời gian mô phỏng
lớn hơn, việc rơi vào chu kỳ chết lại xảy ra. Do thời gian thực hiện luận văn cao học có thời hạn, mà việc sửa đổi để giao thức TORA chạy đúng cần rất nhiều thời gian, nên tôi quyết định để lại việc mô phỏng với giao thức định tuyến TORA cho các nghiên cứu sau. Tôi tin rằng mình có thể làm được hoặc trong cộng đồng nghiên cứu cũng đã có người giải quyết được vấn đề này.
Với giao thức định tuyến OLSR, để tích hợp vào bộ mô phỏng NS2 chúng ta cần tải mã nguồn tại http://sourceforge.net/projects/um-olsr/ sau đó copy tệp um-olsr- 0.8.8.tgz vào thư mục ns-allinone-2.34/ns-2.34 và chạy các câu lệnh như sau:
$ cd ns-allinone-2.34/ns-2.34/ $ tar -zxvf um-olsr-0.8.8.tgz $ ln -s ./um-olsr-0.8.8 ./olsr
$ patch -p1 < olsr/um-olsr-2.34_v0.8.8.patch
Tệp sửa lỗi patch tải tại http://masimum.inf.um.es/downloads/um-olsr- 2.34_v0.8.8.patch. Tiến hành biên dịch lại bộ mô phỏng NS2 để tích hợp giao thức OLSR vào bộ mô phỏng NS2. Quá trình biên dịch lại NS2 theo cách tương tự như đã trình bày ở mục trên.