Xét một nút đích d và một nút i. Bất cứ khi nào nút i cập nhật số thứ tự đích cho d, số chặng được quảng bá tương ứng sẽ được khởi tạo. Cho trước một số thứ tự đích, đặt ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑘𝑑 là số chặng của con đường thứ k trong entry bảng định tuyến cho đích d tại nút i. Như vậy là
(𝑛𝑒𝑥𝑡_ℎ𝑜𝑝𝑖𝑘𝑑, 𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑖𝑘𝑑, ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑘𝑑) ∈ 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑. Khi nút i chuẩn bị gửi
quảng bá đường cho đích d, nó sẽ cập nhật số chặng được quảng bá như sau:
𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑘 = {max{ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑘𝑑}, 𝑖 ≠ 𝑑
0, i = d
Bất cứ khi nào một nút nhận được một quảng bá đường, nó sẽ áp dụng các quy tắc cập nhật đường của giao thức AOMDV được liệt kê trong Thuật toán 1. Trong thuật toán này, nút i gọi áp dụng các quy tắc này mỗi khi nó nhận được một quảng bá đường cho nút đích d từ một nút láng giềng j. Các biến
𝑠𝑒q_num𝑖𝑑, 𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑑, và 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑 tương ứng là chặng kế
tiếp, số chặng được quảng bá và danh sách đường cho đích d tại nút i (i # d). Các biến 𝑛𝑒𝑥𝑡_ℎ𝑜𝑝𝑖𝑘𝑑 và 𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑖𝑘𝑑 biểu diễn giá trị tương ứng của chặng kế tiếp và chặng cuối cùng của con đường thứ k trong entry bảng định tuyến cho
destination sequence number hop count next hop timeout
(a) AODV
destination sequence number advertised hop count route list
next_hop1 last_hop1 hop_count1 timeout1
next_hop2 last_hop2 hop_count2 timeout2
. . . . . . . . (b) AOMDV
đích d tại nút i. Các dòng (1) và (10) trong Thuật toán 1 đảm bảo tính không lặp vòng, trong khi các dòng (12) và (15) kiểm tra tính tách biệt theo liên kết.
1: if (𝑠𝑒𝑞_𝑛𝑢𝑚𝑖𝑑 < 𝑠𝑒𝑞_𝑛𝑢𝑚𝑖𝑑) then /* áp dụng quy tắc số thứ tự */ 2: 𝑠𝑒𝑞_𝑛𝑢𝑚𝑖𝑑 ∶= 𝑠𝑒𝑞_𝑛𝑢𝑚𝑖𝑑; 3: 𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑑 ∶=; 4: 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑 ∶= 𝑁𝑈𝐿𝐿; 5: if (𝑗 = 𝑑) then /*nút láng giềnglàđích*/ 6: insert (𝑗, 𝑖, 1) into 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑; 7: else 8: insert (𝑗, 𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑗𝑘𝑑, 𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑗𝑑+ 1) into 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑; 9: end if
10: else if (𝑠𝑒q_num𝑖𝑑 = 𝑠𝑒𝑞_𝑛𝑢𝑚𝑗𝑑) and (𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑑 > 𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑗𝑑) then /* áp dụng quy tắc số thứ tự */
11: if (𝑗 = 𝑑) then /*nút láng giềnglàđích*/
12: if ((∄𝑘1 ∶ (𝑛𝑒𝑥𝑡_ℎ𝑜𝑝𝑖𝑘𝑑1 = 𝑗))and (∄𝑘2 ∶ (𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑖𝑘𝑑2 = 𝑖))) then /*đảm bảo tính duy nhất của chặng kế tiếp và chặng cuối cùng */
13 insert (𝑗, 𝑖, 1) into 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑; 14: end if
15: else if ((∄𝑘3 ∶ (𝑛𝑒𝑥𝑡_ℎ𝑜𝑝𝑖𝑘𝑑3 = 𝑗))and (∄𝑘4 ∶ (𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑖𝑘𝑑4 = 𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑗𝑘𝑑 ))) then /*đảm bảo tính duy nhất của chặng kế tiếp và chặng cuối cùng */
16: insert (𝑗, 𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑗𝑘𝑑, 𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑗𝑑) into 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑; 17: end if
18: end if