NS là một bộ mô phỏng hướng sự kiện. Có bốn bộ lập lịch sự kiện khác nhau sẵn có trong bộ mô phỏng, mỗi bộ lập lịch sử dụng một cấu trúc dữ liệu khác nhau: bộ lập lịch danh sách “List”, bộ lập lịch xếp đống “Heap”, bộ lập lịch xếp lịch “Calendar” và bộ lập lịch thời gian thực “RealTime”. Bộ lập lịch xếp lịch được sử dụng mặc định khi mô phỏng, trong trường hợp sử dụng bộ lập lịch khác cần phải khai báo. Bộ lập lịch thời gian thực cho phép bộ mô phỏng tương tác được với mạng thực. Hiện tại, tính năng tương tác với mạng thực đang trong quá trình phát triển. Bộ lập lịch sự kiện được sử dụng để lập lịch cho các sự kiện, như khi nào thì gói tin sinh ra, được gửi, nhận hay bị loại,… Bộ lập lịch sự kiện cũng được sử dụng để mô phỏng độ trễ của các gói tin.
Hình 3.4 Bộ lập lịch sự kiện
Mỗi sự kiện trong NS là một cấu trúc bản ghi, gồm bốn thành phần như: sự kiện tiếp theo (next_), đối tượng điều khiển sự kiện (handler_), thời
gian sẵn sàng thực hiện sự kiện (time_) và định danh riêng của sự kiện (uid_), được biểu diễn bởi một phần tử trong danh sách các sự kiện.
Hình 3.4 mô tả hoạt động của đối tượng mạng sử dụng bộ lập lịch sự kiện. Khi một đối tượng mạng phát ra một sự kiện, ngay lập tức sự kiện được chèn vào đúng vị trí trong hàng đợi các sự kiện dựa vào thời gian, và sẽ được xử lý tại thời gian đã được lập lịch. Cần lưu ý rằng, đường dữ liệu (data path) giữa các đối tượng mạng khác với đường sự kiện (event path). Thực tế, các gói tin được xử lý từ một đối tượng mạng tới một đối tượng mạng khác bằng cách sử dụng phương thức send(Packet* p) {target_->recv(p)} ở đối tượng gửi, và phương thức nhận recv(Packet*,Handler* h = 0) ở đối tượng nhận.
Phương thức nhận recv sẽ được gọi bởi bên gửi khi gửi dữ liệu.
Hoạt động của các bộ lập lịch sự kiện là chọn một sự kiện tiếp theo sớm nhất để thực hiện, trong quá trình thực hiện một sự kiện có thể tạo ra một hay nhiều sự kiện khác sẽ được thực hiện sau đó, bằng cách đưa chúng vào danh sách các sự kiện. Sau đó quay trở lại chờ thực kiện sự kiện tiếp theo.