dump
Tham số: một dòng trong kết quả xuất của lệnh dump (String)
Giá trị trả về: địa chỉ IP đích xuất hiện trong kết quả dump (String)
Hình 3.17: Phương thức parseDest() của class Loadbalancer
e) Cuối cùng là phương thức quan trọng nhất của class Loadbalancer. Đó là
phương thức run(). Trong phương thức này sẽ thực hiện các công việc sau:
Đầu tiên, chương trình sẽ dump gói tin tại interface nối với mạng LAN. Sau đó lấy thơng tin IP đích mà gói tin đang cần gởi đến (phương thức parseDest()).
Tiếp theo, chương trình kiểm tra file database xem thử có từng ghi nhận trạng thái QoS của IP đích này hay chưa (phương thức lookupDatabase())? Nếu chưa thì tính tốn và sắp xếp cấp độ QoS (tức tỉ lệ rớt gói, độ trễ, biến thiên độ trễ) của từng đường (phương thức findBestGateway()).
Nếu QoS các đường đều bằng nhau thì chương trình sẽ route tĩnh gói tin đi hướng có băng thông trống (theo tỉ lệ) nhiều nhất (phương thức getBestRatedAvailableBW()). Ngược lại, thread này sẽ lần lượt quét từng interface theo đúng thứ tự xét từ interface có QoS cao nhất đến QoS thấp nhất. Nếu tìm được interface nào cịn trống băng thơng thì vịng lặp sẽ dừng lại mà không cần kiểm tra các interface còn lại (phương thức checkInterfaceHasAvailableBW()). Trong trường hợp này, chương trình sẽ route tĩnh địa chỉ IP đích về hướng kết nối có “QoS cao và băng thơng trống” vừa tìm được. Cịn trong trường hợp tất cả các interface đều khơng cịn trống băng thơng thì chương trình sẽ để hệ điều hành chọn hướng đi theo luật định tuyến hiện tại.
Vì chương trình chỉ dump gói tin, phân tích rồi đưa ra các lệnh route tĩnh hợp lý, nên trong lúc chương trình tính tốn thì gói tin vẫn đi bình thường theo luật định tuyến hiện tại.
3.2.4 Class DatabaseUpdate
Class này thuộc về một thread riêng biệt với thread Loadbalancer. Nhiệm vụ của nó là liên tục kiểm tra nội dung trong file database. Nếu phát hiện thơng tin nào khơng cịn chính xác với hiện tại thì nó lập tức cập nhật ngay. Mỗi dịng trong file database có định dạng sau:
<Địa chỉ IP đích> <Interface có QoS tốt nhất> <Interface có QoS tốt nhì> …
Ví dụ:
8.8.8.8 eth0 eth2 8.8.4.4 eth2 eth0
Dưới đây là các phương thức của class DatabaseUpdate:
readFile() writeFile() parseIPFromDatabaseLine() parseQoSFromDatabaseLine() lookupDatabase() compareQoSInDatabaseAndBest QoS() deleteLineInDatabaseFile() addInfoToGuessDabase() run()
Nội dung và chức năng của từng phương thức như sau: