1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
|
Network Working Group R. Ogier
Request for Comments: 3684 SRI International
Category: Experimental F. Templin
Nokia
M. Lewis
SRI International
February 2004
Topology Dissemination Based on Reverse-Path Forwarding (TBRPF)
Status of this Memo
This memo defines an Experimental Protocol for the Internet
community. It does not specify an Internet standard of any kind.
Discussion and suggestions for improvement are requested.
Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2004). All Rights Reserved.
Abstract
Topology Dissemination Based on Reverse-Path Forwarding (TBRPF) is a
proactive, link-state routing protocol designed for mobile ad-hoc
networks, which provides hop-by-hop routing along shortest paths to
each destination. Each node running TBRPF computes a source tree
(providing paths to all reachable nodes) based on partial topology
information stored in its topology table, using a modification of
Dijkstra's algorithm. To minimize overhead, each node reports only
*part* of its source tree to neighbors. TBRPF uses a combination of
periodic and differential updates to keep all neighbors informed of
the reported part of its source tree. Each node also has the option
to report additional topology information (up to the full topology),
to provide improved robustness in highly mobile networks. TBRPF
performs neighbor discovery using "differential" HELLO messages which
report only *changes* in the status of neighbors. This results in
HELLO messages that are much smaller than those of other link-state
routing protocols such as OSPF.
Ogier, et al. Experimental [Page 1]
^L
RFC 3684 TBRPF February 2004
Table of Contents
1. Introduction. . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Requirements. . . . . . . . . . . . . . . . . . . . . . . . . 4
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4
4. Applicability Section . . . . . . . . . . . . . . . . . . . . 5
5. TBRPF Overview. . . . . . . . . . . . . . . . . . . . . . . . 6
5.1. Overview of Neighbor Discovery . . . . . . . . . . . . 6
5.2. Overview of the Routing Module. .. . . . . . . . . . . 8
6. TBRPF Packets . . . . . . . . . . . . . . . . . . . . . . . . 10
6.1. TBRPF Packet Header. . . . . . . . . . . . . . . . . . 10
6.2. TBRPF Packet Body. . . . . . . . . . . . . . . . . . . 11
6.2.1. Padding Options (TYPE = 0 thru 1). . . . . . . 12
6.2.2. Messages (TYPE = 2 thru 10). . . . . . . . . . 13
7. TBRPF Neighbor Discovery. . . . . . . . . . . . . . . . . . . 13
7.1. HELLO Message Format . . . . . . . . . . . . . . . . . 13
7.2. Neighbor Table . . . . . . . . . . . . . . . . . . . . 14
7.3. Sending HELLO Messages . . . . . . . . . . . . . . . . 15
7.4. Processing a Received HELLO Message. . . . . . . . . . 16
7.5. Expiration of Timer nbr_life . . . . . . . . . . . . . 18
7.6. Link-Layer Failure Notification. . . . . . . . . . . . 18
7.7. Optional Link Metrics. . . . . . . . . . . . . . . . . 18
7.8. Configurable Parameters. . . . . . . . . . . . . . . . 19
8. TBRPF Routing Module. . . . . . . . . . . . . . . . . . . . . 19
8.1. Conceptual Data Structures . . . . . . . . . . . . . . 19
8.2. TOPOLOGY UPDATE Message Format . . . . . . . . . . . . 21
8.3. Interface, Host, and Network Prefix Association
Message Formats. . . . . . . . . . . . . . . . . . . . 23
8.4. TBRPF Routing Operation. . . . . . . . . . . . . . . . 24
8.4.1. Periodic Processing. . . . . . . . . . . . . . 24
8.4.2. Updating the Source Tree and Topology
Graph. . . . . . . . . . . . . . . . . . . . . 25
8.4.3. Updating the Routing Table . . . . . . . . . . 26
8.4.4. Updating the Reported Node Set . . . . . . . . 27
8.4.5. Generating Periodic Updates. . . . . . . . . . 29
8.4.6. Generating Differential Updates. . . . . . . . 29
8.4.7. Processing Topology Updates. . . . . . . . . . 30
8.4.8. Expiring Topology Information. . . . . . . . . 32
8.4.9. Optional Reporting of Redundant Topology
Information. . . . . . . . . . . . . . . . . . 32
8.4.10. Local Topology Changes . . . . . . . . . . . . 33
8.4.11. Generating Association Messages. . . . . . . . 34
8.4.12. Processing Association Messages. . . . . . . . 36
8.4.13. Non-Relay Operation. . . . . . . . . . . . . . 37
8.5. Configurable Parameters. . . . . . . . . . . . . . . . 38
9. TBRPF Flooding Mechanism. . . . . . . . . . . . . . . . . . . 38
10. Operation of TBRPF in Mobile Ad-Hoc Networks. . . . . . . . . 39
10.1. Data Link Layer Assumptions. . . . . . . . . . . . . . 39
Ogier, et al. Experimental [Page 2]
^L
RFC 3684 TBRPF February 2004
10.2. Network Layer Assumptions. . . . . . . . . . . . . . . 39
10.3. Optional Automatic Address Resolution. . . . . . . . . 40
10.4. Support for Multiple Interfaces and/or
Alias Addresses. . . . . . . . . . . . . . . . . . . . 40
10.5. Support for Network Prefixes . . . . . . . . . . . . . 40
10.6. Support for non-MANET Hosts. . . . . . . . . . . . . . 40
10.7. Internet Protocol Considerations . . . . . . . . . . . 41
10.7.1. IPv4 Operation . . . . . . . . . . . . . . . . 41
10.7.2. IPv6 Operation . . . . . . . . . . . . . . . . 41
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41
12. Security Considerations . . . . . . . . . . . . . . . . . . . 42
13. Acknowledgements. . . . . . . . . . . . . . . . . . . . . . . 42
14. References. . . . . . . . . . . . . . . . . . . . . . . . . . 42
14.1. Normative References . . . . . . . . . . . . . . . . . 42
14.2. Informative References . . . . . . . . . . . . . . . . 43
Authors' Addresses. . . . . . . . . . . . . . . . . . . . . . . . 45
Full Copyright Statement. . . . . . . . . . . . . . . . . . . . . 46
1. Introduction
Topology Dissemination Based on Reverse-Path Forwarding (TBRPF) is a
proactive, link-state routing protocol designed for mobile ad-hoc
networks (MANETs), which provides hop-by-hop routing along shortest
paths to each destination. Each node running TBRPF computes a source
tree (providing shortest paths to all reachable nodes) based on
partial topology information stored in its topology table, using a
modification of Dijkstra's algorithm. To minimize overhead, each
node reports only *part* of its source tree to neighbors.
TBRPF uses a combination of periodic and differential updates to keep
all neighbors informed of the reported part of its source tree. Each
node also has the option to report addition topology information (up
to the full topology), to provide improved robustness in highly
mobile networks.
TBRPF performs neighbor discovery using "differential" HELLO messages
which report only *changes* in the status of neighbors. This results
in HELLO messages that are much smaller than those of other link-
state routing protocols such as OSPF [6].
TBRPF consists of two modules: the neighbor discovery module and the
routing module (which performs topology discovery and route
computation). An overview of these modules is given in Section 5.
Ogier, et al. Experimental [Page 3]
^L
RFC 3684 TBRPF February 2004
2. Requirements
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL", when
they appear in this document, are to be interpreted as described in
BCP 14, RFC 2119 [1].
This document also makes use of internal conceptual variables to
describe protocol behavior and external variables that an
implementation must allow system administrators to change. The
specific variable names, how their values change, and how their
settings influence protocol behavior are provided to demonstrate
protocol behavior. An implementation is not required to have them in
the exact form described here, so long as its external behavior is
consistent with that described in this document.
3. Terminology
The following terms are used to describe TBRPF:
node
A router that implements TBRPF.
router ID
Each node is identified by a unique 32-bit router ID (RID), which
for IPv4 is typically equal to the IP address of one of its
interfaces. The term "node u" denotes the node whose RID is equal
to u.
interface
A node's attachment to a communication facility or medium through
which it can communicate with other nodes. A node can have
multiple interfaces. An interface can be wireless or wired, and
can be broadcast (e.g., Ethernet) or point-to-point. Each
interface is identified by its IP address. The term "interface I"
denotes the interface whose IP address is I.
link
A link is an ordered pair of interfaces (I,J) where I and J are on
two different nodes, and where interface I has recently received
packets sent from interface J. A link (i,j) from node i to node j
is said to exist if node i has an interface I and node j has an
interface J such that (I,J) is a link. Nodes i and j are called
the "tail" and "head" of the link, respectively.
bidirectional link
A link (I,J) such that interfaces I and J can both hear each
other. Also called a 2-way link.
Ogier, et al. Experimental [Page 4]
^L
RFC 3684 TBRPF February 2004
neighbor node
A node j is said to be a neighbor of node i if node i can hear
node j on some interface. Node j is said to be a 2-way neighbor
if there is a bidirectional link between i and j.
MANET interface
Any wireless interface such that two neighbor nodes on the
interface need not be neighbors of each other. MANET nodes
typically have at least one MANET interface, but this is not a
requirement.
topology
The topology of the network is described by a graph G = (V, E),
where V is the set of nodes u and E is the set of links (u,v) in
the network.
source tree
The directed tree (denoted T) computed by each node that provides
shortest paths to all other reachable nodes.
topology update
A message that reports the state of one or more links.
parent
The parent of node i for node u is the next node on the computed
shortest path from node i to node u.
predecessor
The predecessor of a node v on the source tree is the node u such
that the link (u,v) is in the source tree.
leaf node
A leaf node of the source tree is a node on the source tree that
is not the predecessor of any other node on the source tree.
proactive routing protocol
A routing protocol in which each node maintains routes to all
reachable destinations at all times, whether or not there is
currently any need to deliver packets to those destinations. In
contrast, an "on-demand" routing protocol discovers and maintains
routes only when they are needed.
4. Applicability Section
TBRPF is a proactive routing protocol designed for mobile ad-hoc
networks (MANETs). It can support networks with up to a few hundred
nodes, and can be combined with hierarchical routing techniques to
support much larger networks. Because it employs techniques to
Ogier, et al. Experimental [Page 5]
^L
RFC 3684 TBRPF February 2004
greatly reduce control traffic, TBRPF can support much larger and
denser networks than routing protocols based on the classical link-
state algorithm (e.g., OSPF).
The number of nodes that can be supported depends on several factors,
including the MAC data rate, the rate of topology changes, and the
network density (average number of neighbors). Simulations have been
reported in which TBRPF has supported as many as 500 nodes. In
simulations with 100 nodes and 20 traffic streams (sources), using
IEEE 802.11 with a data rate of 2 Mbps, TBRPF was found to generate
approximately 80-120 kb/s of routing control traffic for the
scenarios considered, which compared favorably with other MANET
routing protocols [7][8]. A proof of correctness for TBRPF can be
found in references [8] and [9].
5. TBRPF Overview
TBRPF consists of two main modules: the neighbor discovery module,
and the routing module (which performs topology discovery and route
computation).
5.1. Overview of Neighbor Discovery
The TBRPF Neighbor Discovery (TND) protocol allows each node i to
quickly detect the neighbor nodes j such that a bidirectional link
(I,J) exists between an interface I of node i and an interface J of
node j. The protocol also quickly detects when a bidirectional link
breaks or becomes unidirectional.
The key feature of TND is that it uses "differential" HELLO messages
which report only *changes* in the status of links. This results in
HELLO messages that are much smaller than those of other link-state
routing protocols such as OSPF, in which each HELLO message includes
the IDs of *all* neighbors. As a result, HELLO messages can be sent
more frequently, which allows faster detection of topology changes.
TND is designed to be fully modular and independent of the routing
module. TND performs ONLY neighbor sensing, i.e., it determines
which nodes are (1-hop) neighbors. In particular, it does not
discover 2-hop neighbors (which is handled by the routing module).
As a result, TND can be used by other routing protocols, and TBRPF
can use another neighbor discovery protocol in place of TND, e.g.,
one provided by the link layer.
Nodes with multiple interfaces run TND separately on each interface,
similar to OSPF. Thus, a neighbor table is maintained for each local
interface, and a HELLO sent on a particular interface contains only
information regarding neighbors heard on that interface.
Ogier, et al. Experimental [Page 6]
^L
RFC 3684 TBRPF February 2004
We note that, in wireless networks, it is possible for a single
interface I to receive packets from multiple interfaces J associated
with the same neighbor node. This could happen, for example, if the
neighbor uses a directional antenna with different interfaces
representing different beams. For this reason, TBRPF includes
neighbor interface addresses in HELLO messages, unlike OSPF, which
includes only router IDs in HELLO packets.
Each TBRPF node maintains a neighbor table for each local interface
I, which stores state information for each neighbor interface J heard
on that interface, i.e., for each link (I,J) between interface I and
a neighbor interface J. The status of each link can be 1-WAY, 2-WAY,
or LOST. The neighbor table for interface I determines the contents
of HELLO messages sent on interface I, and is updated based on HELLO
messages received on interface I (and possibly on link-layer
notifications).
Each TBRPF node sends (on each interface) at least one HELLO message
per HELLO_INTERVAL. Each HELLO message contains three (possibly
empty) lists of neighbor interface addresses (which are formatted as
three message subtypes): NEIGHBOR REQUEST, NEIGHBOR REPLY, and
NEIGHBOR LOST. Each HELLO message also contains the current HELLO
sequence number (HSEQ), which is incremented with each transmitted
HELLO.
In the following overview of the operation of TND, we assume that
interface I belongs to node i, and interface J belongs to node j.
When a node i changes the status of a link (I,J), it includes the
neighbor interface address J in the appropriate list (NEIGHBOR
REQUEST/REPLY/LOST) in at most NBR_HOLD_COUNT (typically 3)
consecutive HELLOs sent on interface I. This ensures that node j
will either receive one of these HELLOs on interface J, or will miss
NBR_HOLD_COUNT HELLOs and thus declare the link (J,I) to be LOST.
This technique makes it unnecessary for a node to include each 1-WAY
or 2-WAY neighbor in HELLOs indefinitely, unlike OSPF.
To avoid establishing a link that is likely to be short lived (i.e.,
to employ hysteresis), node i must receive (on interface I) at least
HELLO_ACQUIRE_COUNT (e.g., 2) of the last HELLO_ACQUIRE_WINDOW (e.g.,
3) HELLOs sent from a neighbor interface J, before declaring the link
(I,J) to be 1-WAY. When this happens, node i includes J in the
NEIGHBOR REQUEST list in each of its next NBR_HOLD_COUNT HELLO
messages sent on interface I, or until a NEIGHBOR REPLY message
containing I is received on interface I from neighbor interface J.
If node j receives (on interface J) one of the HELLOs sent from
interface I that contains J in the NEIGHBOR REQUEST list, then node j
declares the link (J,I) to be 2-WAY (unless it is already 2-WAY), and
Ogier, et al. Experimental [Page 7]
^L
RFC 3684 TBRPF February 2004
includes I in the NEIGHBOR REPLY list in each of its next
NBR_HOLD_COUNT HELLO messages sent on interface J. Upon receiving
one of these HELLOs on interface I, node i declares the link (I,J) to
be 2-WAY.
If node i receives a HELLO on interface I, sent from neighbor
interface J, whose HSEQ indicates that at least NBR_HOLD_COUNT HELLOs
were missed, or if node i receives no HELLO on interface I sent from
interface J within NBR_HOLD_TIME seconds, then node i changes the
status of link (I,J) to LOST (unless it is already LOST), and
includes J in the NEIGHBOR LOST list in each of its next
NBR_HOLD_COUNT HELLO messages sent on interface I (unless the link
changes status before these transmissions are complete). Node j will
either receive one of these HELLOs on interface J or will miss
NBR_HOLD_COUNT HELLOs; in either case, node j will declare the link
(J,I) to be LOST. In this manner, both nodes will agree that the
link between I and J is no longer bidirectional, even if node j can
still hear HELLOs from node i.
Each node may maintain and update one or more link metrics for each
link (I,J) from a local interface I to a neighbor interface J,
representing the quality of the link. Such link metrics can be used
as additional conditions for changing the status of a neighbor, based
on the link metric going above or below some threshold. TBRPF also
allows link metrics to be advertised in topology updates, and to be
used for computing shortest paths.
5.2. Overview of the Routing Module
Each node running TBRPF maintains a source tree, denoted T, which
provides shortest paths to all reachable nodes. Each node computes
and updates its source tree based on partial topology information
stored in its topology table, using a modification of Dijkstra's
algorithm. To minimize overhead, each node reports only part of its
source tree to neighbors. The main idea behind the current version
of TBRPF came from PTSP [10], another protocol in which each node
reports only part of its source tree. (However, TBRPF differs from
PTSP in several ways.) The current version of TBRPF should not be
confused with its previous version [11], which is a full-topology
routing protocol.
The part of T that a node reports to neighbors is called the
"reported subtree" and is denoted RT. Each node reports RT to
neighbors in *periodic* topology updates (e.g., every 5 seconds), and
reports changes (additions and deletions) to RT in more frequent
*differential* updates (e.g., every 1 second). Periodic updates
inform new neighbors of RT, and ensure that each neighbor eventually
learns RT even if it does not receive all updates. Differential
Ogier, et al. Experimental [Page 8]
^L
RFC 3684 TBRPF February 2004
updates ensure the fast propagation of each topology update to all
nodes that are affected by the update. A received topology update is
not forwarded, but *may* result in a change to RT, which will be
reported in the next differential or periodic update. Whenever
possible, topology updates are included in the same packet as a HELLO
message, to minimize the number of control packets sent. TBRPF does
not require reliable or sequenced delivery of messages, and does not
use ACKs or NACKs.
TBRPF supports multiple interfaces, associated hosts, and network
prefixes. Information regarding associated interfaces, hosts, and
prefixes is disseminated efficiently in periodic and differential
updates, similar to the dissemination of topology updates.
The reported subtree RT consists of links (u,v) of T such that u is
in the "reported node set" RN, which is computed as follows. Node i
includes a neighbor j in RN if and only if node i determines that one
of its neighbors may select i to be its next hop on its shortest path
to j. To make this determination, node i computes the shortest
paths, up to 2 hops, from each neighbor to each other neighbor, using
only neighbors (or node i itself) as an intermediate node, and using
relay priority (included in HELLO messages) and router ID to break
ties. After a node determines which neighbors are in RN, each
reachable node u is included in RN if and only if the next hop on the
shortest path to u is in RN. A node also includes itself in RN. As
a result, the reported subtree RT includes the subtrees of T that are
rooted at neighbors in RN, and also includes all local links to
neighbors.
We note that neighbors in RN are analogous to multipoint relay (MPR)
selectors [12]. Thus, if node i selects neighbor j to be in RN, then
node i effectively selects itself to be an MPR of node j. This is
quite different from [12], in which a node does not select itself to
be an MPR, but selects a subset of its neighbors to be MPRs.
A node with a larger relay priority reports a larger part of its
source tree (on average), and is more likely to be selected as a
next-hop relay by its neighbors. A node with relay priority equal to
0 is called a non-relay node, and never forwards packets originating
from other nodes.
TBRPF does not use sequence numbers for topology updates, thus
reducing message overhead and avoiding wraparound problems. Instead,
a technique similar to SPTA [13] is used in which, for each link
(u,v) reported by one or more neighbors, only the next hop p(u) to u
is believed regarding the state of the link. (However, in SPTA each
node reports the full topology.) Using this technique, each node
maintains a topology graph TG, consisting of links that are believed
Ogier, et al. Experimental [Page 9]
^L
RFC 3684 TBRPF February 2004
to be up, and computes T as the shortest-path tree within TG. To
allow immediate rerouting, the restriction that each link (u,v) in TG
must be reported by p(u) is relaxed temporarily if p(u) changes to a
neighbor that is not reporting the link.
Each node is required to report RT, but may report additional links,
e.g., to provide increased robustness in highly mobile networks.
More precisely, a node may maintain any subgraph H of TG that
contains T, and report the reported subgraph RH, which consists of
links (u,v) of H such that u is in RN. For example, H can equal TG,
which would provide each node with the full network topology if this
is done by all nodes. H can also be a biconnected subgraph that
contains T, which would provide each node with two disjoint paths to
each other node, if this is done by all nodes.
TBRPF allows the option to include link metrics in topology updates,
and to compute paths that are shortest with respect to the metric.
This allows packets to be sent along paths that are higher quality
than minimum-hop paths.
TBRPF allows path optimality to be traded off in order to reduce the
amount of control traffic in networks with a large diameter, where
the degree of approximation is determined by the configurable
parameter NON_TREE_PENALTY.
6. TBRPF Packets
Nodes send TBRPF protocol data in contiguous units known as packets.
Each packet includes a header, optional header extensions, and a body
comprising one or more messages and padding options as needed. To
facilitate efficient receiver processing, senders SHOULD insert
padding options as necessary to align multi-octet words within the
TBRPF packet on natural boundaries (i.e., modulo-8/4/2 addresses for
64/32/16-bit words, respectively). Receivers MUST be capable of
processing multi-octet words whether or not aligned on natural
boundaries. The following sections specify elements of the TBRPF
packet in more detail.
6.1. TBRPF Packet Header
TBRPF packet headers are variable-length (minimum one octet). The
format for the packet header is as follows:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Vers |L|I|R|R| Reserved | Header Extensions ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Ogier, et al. Experimental [Page 10]
^L
RFC 3684 TBRPF February 2004
Version (4 bits)
The TBRPF version number. This specification documents version 4
of the protocol.
Flags (4 bits)
Two bits (L,I) specify which header extensions (if any) follow.
Two bits (R) are reserved for future use, and MUST be zero. Any
extensions specified by these bits MUST appear in the same order
as the bits (i.e., first L, then I) as follows:
L - Length included
If the underlying delivery service provides a length field, the
sender MAY set L = '0' and omit the length extension. Otherwise,
the sender MUST set L = '1' and include a 16-bit unsigned integer
length immediately after any previous header field. The length
includes all header and data bytes and is written into the length
field in network byte order.
Receivers examine the L bit to determine whether the length field
is present. If L = '1', the receiver reads the length field to
determine the length of the TBRPF packet, including the TBRPF
packet header. Receivers discard any TBRPF packet if neither the
underlying delivery service nor the TBRPF packet header provide
packet length.
I - Router ID (RID) included
If the underlying delivery service encodes the sender's RID, the
sender MAY set I = '0' and omit the RID field. Otherwise, the
sender MUST set I = '1' and include a 4-octet RID in network byte
order immediately after any previous header fields. The RID
option provides a mechanism for implicit network-level address
resolution. A receiver that detects a RID option SHOULD create a
binding between the RID and the source address that appears in the
network-level header.
Reserved
Reserved for future use; MUST be zero.
6.2. TBRPF Packet Body
The TBRPF packet body consists of the concatenation of one or more
TBRPF messages (and padding options where necessary). Messages and
padding options within the TBRPF packet body are encoded using the
following format:
+-+-+-+-+-+-+-+-+- - - - -
|OPTIONS| TYPE | VALUE
+-+-+-+-+-+-+-+-+- - - - -
Ogier, et al. Experimental [Page 11]
^L
RFC 3684 TBRPF February 2004
OPTIONS (4 bits)
Four option bits that depend on TYPE.
TYPE (4 bits)
Identifier for message type or padding option.
VALUE
Variable-length field. (Format and length depend on TYPE, as
described in the following sections.)
The sequence of elements MUST be processed strictly in the order they
appear within the TBRPF packet body; a receiver must not, for
example, scan through the packet body looking for a particular type
of element prior to processing all preceding elements [2]. TBRPF
packet elements include padding options and messages as described
below.
6.2.1. Padding Options (TYPE = 0 thru 1)
Senders MAY insert two types of padding options where necessary,
e.g., to satisfy alignment requirements for other elements [2].
Padding options may occur anywhere within the TBRPF packet body. The
following two padding options are defined:
Pad1 option (TYPE = 0)
+-+-+-+-+-+-+-+-+
| 0 | 0 |
+-+-+-+-+-+-+-+-+
The Pad1 option inserts one octet of padding into the TBRPF packet
body; the VALUE field is omitted. If more than one octet of padding
is required, the PadN option (described next) should be used, rather
than multiple Pad1 options.
PadN option (TYPE = 1)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - - -
| 0 | 1 | LEN | Zero-valued Octets
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - - -
The PadN option inserts two or more octets of padding into the TBRPF
packet body. The first octet of the VALUE field contains an 8-bit
unsigned integer length containing a value between 0 - 253 which
specifies the number of zero-valued octets that immediately follow,
yielding a maximum total of 255 padding octets.
Ogier, et al. Experimental [Page 12]
^L
RFC 3684 TBRPF February 2004
6.2.2. Messages (TYPE = 2 thru 10)
Additional message types are described as they occur in the following
sections. Senders encode messages as specified by the individual
message formats. Receivers detect errors in message construction,
e.g., messages with unrecognized types, messages with a non-integral
number of elements, or with fewer elements than indicated, etc. In
all cases, upon detecting an error, the receiver MUST discontinue
processing the current TBRPF packet and discard any unprocessed
elements.
7. TBRPF Neighbor Discovery
This section describes the TBRPF Neighbor Discovery (TND) protocol,
which allows each node to quickly detect bidirectional links (I,J)
between a local interface I and a neighbor interface J, and to
quickly detect the loss of such links. The interface between TND and
the routing module is defined by the neighbor table maintained by TND
and the three procedures Link_Up(I,J), Link_Down(I,J), and
Link_Change(I,J), which are called by TND to announce a new link, the
loss of a link, and a change in the metric of a link, respectively.
7.1. HELLO Message Format
The HELLO message has the following three subtypes:
- NEIGHBOR REQUEST (TYPE = 2)
- NEIGHBOR REPLY (TYPE = 3)
- NEIGHBOR LOST (TYPE = 4)
Each HELLO subtype has the following format:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 | TYPE | HSEQ | Pri | n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor Interface Address (1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor Interface Address (2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor Interface Address (n) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
HSEQ (8 bits)
The HELLO sequence number.
Ogier, et al. Experimental [Page 13]
^L
RFC 3684 TBRPF February 2004
Pri (4 bits)
This field indicates the sending node's relay priority, which is
an integer between 0 and 15. A node with a higher relay priority
is more likely to be selected as the next hop on a route. The
value 0 is reserved for non-relay nodes, i.e., nodes that should
never forward packets originating from other nodes. A router in
normal operation SHOULD have a relay priority equal to 7. A
router can change its relay priority dynamically, e.g., when its
power supply becomes critical.
n (12 bits)
The number of 32-bit neighbor interface addresses in the message.
A HELLO message is the concatenation of a NEIGHBOR REQUEST message, a
NEIGHBOR REPLY message, and a NEIGHBOR LOST message, where each of
the last two messages is omitted if its list of neighbor interface
addresses is empty. Thus, a HELLO message always includes a
(possibly empty) NEIGHBOR REQUEST.
7.2. Neighbor Table
Each node maintains, for each of its local interfaces I, a neighbor
table, which stores state information for each neighbor interface J
from which HELLO messages have recently been received by interface I.
The entry for neighbor interface J, in the neighbor table for I,
contains the following variables:
nbr_rid(I,J) - The router ID of the node associated with neighbor
interface J.
nbr_status(I,J) - The current status of the link (I,J), which can
be LOST, 1-WAY, or 2-WAY.
nbr_life(I,J) - The amount of time (in seconds) remaining before
nbr_status(I,J) must be changed to LOST if no further HELLO
message from interface J is received. Set to NBR_HOLD_TIME
whenever a HELLO is received on interface I from interface J.
nbr_hseq(I,J) - The value of HSEQ in the last HELLO message
received on interface I from interface J. Used to determine the
number of HELLOs that have been missed.
nbr_count(I,J) - The remaining number of times a NEIGHBOR REQUEST/
REPLY/LOST message containing J must be sent on interface I.
hello_history(I,J) - A list of the sequence numbers of the last
HELLO_ACQUIRE_WINDOW HELLO messages received on interface I from
interface J.
Ogier, et al. Experimental [Page 14]
^L
RFC 3684 TBRPF February 2004
nbr_metric(I,J) - An optional measure of the quality of the link
(I,J), represented by an integer between 1 and 255, where smaller
values indicate better quality. Defaults to 1 if not used.
nbr_pri(I,J) - The relay priority of the node associated with
interface J.
The entry for interface J in the neighbor table for interface I may
be deleted if no HELLO has been received on interface I from
interface J within the last 2*NBR_HOLD_TIME seconds. (It is kept
while NEIGHBOR LOST messages containing J are being transmitted.)
The absence of an entry for a given interface J is equivalent to an
entry with nbr_status(I,J) = LOST and hello_history(I,J) = NULL.
The three possible values of nbr_status(I,J) have the following
informal meanings (the exact meanings are defined by the protocol):
LOST
Interface I has not received a sufficient number of HELLO messages
recently from Interface J.
1-WAY
Interface I has received a sufficient number of HELLO messages
recently from Interface J, but the link is not 2-WAY.
2-WAY
Interfaces I and J have both received a sufficient number of HELLO
messages recently from each other.
7.3. Sending HELLO Messages
Each node MUST send, on each local interface, at least one HELLO
message per HELLO_INTERVAL. HELLO messages MAY be sent more
frequently than this (e.g., for faster detection of topology
changes). However, to avoid the possibility that HSEQ wraps around
to the same number before a neighbor that stops receiving HELLO
messages changes the status of the link to LOST, the time between two
consecutive HELLO messages (sent on a given interface) MUST be
greater than NBR_HOLD_TIME/128 second.
To avoid synchronization of control messages, which can result in
collisions, HELLO messages SHOULD NOT be transmitted at equal
intervals. To achieve this, a node MAY choose the interval between
consecutive HELLO messages to be HELLO_INTERVAL - jitter, where
jitter is selected randomly from the interval [0, MAX_JITTER].
Ogier, et al. Experimental [Page 15]
^L
RFC 3684 TBRPF February 2004
Each HELLO message always includes a NEIGHBOR REQUEST message, even
if its list of neighbor addresses is empty. The NEIGHBOR REQUEST
message includes the sequence number HSEQ, which is incremented by 1
(modulo 256) each time a HELLO is sent. The HELLO message also
includes a NEIGHBOR REPLY message if its list of neighbor addresses
is nonempty, and a NEIGHBOR LOST message if its list of neighbor
addresses is nonempty. The contents of these three messages are
determined by the following steps at node i for each interface I:
1. For each interface J such that nbr_status(I,J) = LOST and
nbr_count(I,J) > 0, include J in the NEIGHBOR LOST message and
decrement nbr_count(I,J).
2. For each interface J such that nbr_status(I,J) = 1-WAY and
nbr_count(I,J) > 0, include J in the NEIGHBOR REQUEST message and
decrement nbr_count(I,J).
3. For each interface J such that nbr_status(I,J) = 2-WAY and
nbr_count(I,J) > 0, include J in the NEIGHBOR REPLY message and
decrement nbr_count(I,J).
If a node restarts, so that all entries are removed from the neighbor
table, then the node MUST ensure that (for each interface) at least
one of the following two conditions is satisfied:
1. The difference between the transmission times of the first HELLO
sent after restarting and the last HELLO sent before restarting is
at least 2*NBR_HOLD_TIME.
2. Letting HSEQ_LAST denote the sequence number of the last HELLO
that was sent before restarting, the sequence number of the first
HELLO sent after restarting is set to HSEQ_LAST + NBR_HOLD_COUNT +
1 (modulo 256).
Either of these conditions ensures that, if node i with interface I
restarts, then each neighbor of node i that has a link (J,I) to
interface I will set the status of the link to LOST.
7.4. Processing a Received HELLO Message
When a node receives a HELLO message, it obtains the IP address of
the sending interface from the IP header. If the TBRPF packet header
of the received HELLO contains the RID option, then the RID of the
sending node is obtained from the TBRPF packet header; otherwise it
is equal to the IP address of the sending interface. If node i (with
RID equal to i) receives a HELLO message on interface I, sent by node
j (with RID equal to j) on interface J, with sequence number HSEQ and
relay priority PRI, then node i performs the following steps:
Ogier, et al. Experimental [Page 16]
^L
RFC 3684 TBRPF February 2004
1. If the neighbor table for interface I does not contain an entry
for interface J, create one with nbr_rid(I,J) = j, nbr_status(I,J)
= LOST (temporarily), nbr_count(I,J) = 0, and nbr_hseq(I,J) =
HSEQ.
2. Update hello_history(I,J) to reflect the received HELLO message.
If nbr_hseq(I,J) > HSEQ (due to wraparound), set nbr_hseq(I,J) =
nbr_hseq(I,J) - 256.
3. If nbr_status(I,J) = LOST and hello_history(I,J) indicates that
HELLO_ACQUIRE_COUNT of the last HELLO_ACQUIRE_WINDOW HELLO
messages from interface J have been received:
a. If interface I does not appear in the NEIGHBOR REQUEST list or
the NEIGHBOR REPLY list, set nbr_status(I,J) = 1-WAY and
nbr_count(I,J) = NBR_HOLD_COUNT.
b. Else, set nbr_status(I,J) = 2-WAY and nbr_count(I,J) =
NBR_HOLD_COUNT. Call Link_Up(I,J).
4. Else, if nbr_status(I,J) = 1-WAY:
a. If HSEQ - nbr_hseq(I,J) > NBR_HOLD_COUNT, then set
nbr_status(I,J) = LOST and nbr_count(I,J) = NBR_HOLD_COUNT.
b. Else, if interface I appears in the NEIGHBOR REQUEST list, set
nbr_status(I,J) = 2-WAY and nbr_count(I,J) = NBR_HOLD_COUNT.
Call Link_Up(I,J).
c. Else, if interface I appears in the NEIGHBOR REPLY list, set
nbr_status(I,J) = 2-WAY and nbr_count(I,J) = 0. Call
Link_Up(I,J).
5. Else, if nbr_status(I,J) = 2-WAY:
a. If interface I appears in the NEIGHBOR LOST list, set
nbr_status(I,J) = LOST and nbr_count(I,J) = 0. Call
Link_Down(I,J).
b. Else, if HSEQ - nbr_hseq(I,J) > NBR_HOLD_COUNT, set
nbr_status(I,J) = LOST and nbr_count(I,J) = NBR_HOLD_COUNT.
Call Link_Down(I,J).
c. Else, if interface I appears in the NEIGHBOR REQUEST list and
nbr_count(I,J) = 0, set nbr_count(I,J) = NBR_HOLD_COUNT.
6. Set nbr_life(I,J) = NBR_HOLD_TIME, nbr_hseq(I,J) = HSEQ, and
nbr_pri(I,J) = PRI.
Ogier, et al. Experimental [Page 17]
^L
RFC 3684 TBRPF February 2004
7.5. Expiration of Timer nbr_life
Upon expiration of the timer nbr_life(I,J) in the neighbor table for
interface I, node i performs the following step:
If nbr_status(I,J) = 1-WAY or 2-WAY, set nbr_status(I,J) = LOST
and nbr_count(I,J) = NBR_HOLD_COUNT. Call Link_Down(I,J).
7.6. Link-Layer Failure Notification
Some link-layer protocols (e.g., IEEE 802.11) provide a notification
that the link to a particular neighbor has failed, e.g., after
attempting a maximum number of retransmissions. If such an
notification is provided by the link layer, then node i SHOULD
perform the following step upon receipt of a link-layer failure
notification for the link (I,J) from local interface I to neighbor
interface J:
If nbr_status(I,J) = 2-WAY, set nbr_status(I,J) = LOST and
nbr_count(I,J) = NBR_HOLD_COUNT. Call Link_Down(I,J).
7.7. Optional Link Metrics
Each node MAY maintain and update one or more link metrics for each
link (I,J), representing the quality of the link, e.g., signal
strength, number of HELLOs received over some time interval,
reliability, stability, bandwidth, etc. Each node MUST declare a
neighbor to be LOST if either NBR_HOLD_COUNT HELLOs are missed or if
no HELLO is received within NBR_HOLD_TIME seconds; however, a node
MAY also declare a neighbor to be LOST based on a link metric being
above or below some threshold. Each node MUST receive at least
HELLO_ACQUIRE_COUNT of the last HELLO_ACQUIRE_WINDOW HELLOs from a
neighbor before declaring the neighbor 1-WAY or 2-WAY; however, a
node MAY require an additional condition based on a link metric being
above or below some threshold, before declaring the neighbor 1-WAY or
2-WAY. This document does not specify any particular link metric,
but an implementation of TBRPF that uses such metrics is considered
to be compliant with this specification.
The function Link_Change(I,J) is called to alert the routing module
whenever nbr_metric(I,J) changes significantly. If the configurable
parameter USE_METRICS is equal to 1, then the metrics nbr_metric(I,J)
are used by the routing module for route computation, as described in
Section 8.
Ogier, et al. Experimental [Page 18]
^L
RFC 3684 TBRPF February 2004
7.8. Configurable Parameters
This section lists the parameters used by the neighbor discovery
protocol, and their proposed default values. All nodes MUST be
configured to have the same value for all of the following
parameters.
Parameter Name Default Value
-------------- -------------
HELLO_INTERVAL 1 second
MAX_JITTER 0.1 second
NBR_HOLD_TIME 3 seconds
NBR_HOLD_COUNT 3
HELLO_ACQUIRE_COUNT 2
HELLO_ACQUIRE_WINDOW 3
8. TBRPF Routing Module
This section describes the TBRPF routing module, which performs
topology discovery and route computation.
8.1. Conceptual Data Structures
In addition to the information required by the neighbor discovery
protocol, each node running TBRPF maintains a topology table TT,
which stores information for each known node and link in the network.
Nodes are identified by their RIDs, i.e., node u is the node whose
RID is u. The following information is stored in the topology table
at node i for each node u and link (u,v):
T(u,v) - Equal to 1 if (u,v) is in node i's source tree T, and 0
otherwise. The previous source tree is also maintained as old_T.
RN(u) - Equal to 1 if u is in node i's reported node set RN, and 0
otherwise. The previous reported node set is also maintained as
old_RN.
RT(u,v) - Equal to 1 if (u,v) is in node i's reported subtree RT,
and 0 otherwise. Since RT is defined as the set of links (u,v) in
T such that u is in RN, this variable need not be maintained
explicitly.
TG(u,v) - Equal to 1 if (u,v) is in node i's topology graph TG,
and 0 otherwise.
N - The set of 2-way neighbors of node i.
Ogier, et al. Experimental [Page 19]
^L
RFC 3684 TBRPF February 2004
r(u,v) - The list of neighbors that are reporting link (u,v) in
their reported subtree RT. The set of links (u,v) reported by
neighbor j is denoted RT_j.
r(u) - The list of neighbors that are reporting node u in their
reported node set RN.
p(u) - The current parent for node u, equal to the next node on
the shortest path to u.
pred(u) - The node that is the predecessor of node u in the source
tree T. Equal to NULL if node u is not reachable.
pred(j,u) - The node that is the predecessor of node u in the
subtree RT_j reported by neighbor j.
d(u) - The length of the shortest path to node u. If USE_METRICS
= 0, d(u) is the number of hops to node u.
reported(u,v) - Equal to 1 if link (u,v) in TG is reported by
p(u), and 0 otherwise.
tg_expire(u) - Expiration time for links (u,v) in TG.
rt_expire(j,u) - Expiration time for links (u,v) in RT_j.
nr_expire(u,v) - Expiration time for a link (u,v) in TG such that
reported(u,v) = 0. Such non-reported links can be used
temporarily during rerouting.
metric(j,u,v) - The metric for link (u,v) reported by neighbor j.
metric(u,v) - The metric for link (u,v) in TG. For a neighbor j,
metric(i,j) is the minimum of nbr_metric(I,J) over all 2-WAY links
(I,J) from i to j.
cost(u,v) - The cost for link (u,v), equal to metric(u,v) if
USE_METRICS = 1, and otherwise equal to 1.
local_if(j) - The address of the preferred local interface for
forwarding packets to neighbor j.
nbr_if(j) - The address of the preferred interface of neighbor j.
Ogier, et al. Experimental [Page 20]
^L
RFC 3684 TBRPF February 2004
The routing table consists of a list of tuples of the form (rt_dest,
rt_next, rt_dist, rt_if_id), where rt_dest is the destination IP
address or prefix, rt_next is the interface address of the next hop
of the route, rt_dist is the length of the route, and rt_if_id is the
ID of the local interface through which the next hop can be reached.
Each node also maintains three tables that describe associated IP
addresses or prefixes: the "interface table", which associates
interface IP addresses with router IDs, the "host table", which
associates host IP addresses with router IDs, and the "network prefix
table", which associates network prefixes with router IDs.
The "interface table" consists of tuples of the form (if_addr,
if_rid, if_expire), where if_addr is an interface IP address
associated with the router with RID = if_rid, and if_expire is the
time at which the tuple expires and MUST be removed. The interface
table at a node does NOT contain an entry in which if_addr equals the
node's own RID; thus, a node does not advertise its own RID as an
associated interface.
The "host table" consists of tuples of the form (h_addr, h_rid,
h_expire), where h_addr is a host IP address associated with the
router with RID = h_rid, and h_expire is the time at which the tuple
expires and MUST be removed.
The "network prefix table" consists of tuples of the form
(net_prefix, net_length, net_rid, net_expire), where net_prefix and
net_length describe a network prefix associated with the router with
RID = net_rid, and net_expire is the time at which the tuple expires
and MUST be removed. A MANET may be configured as a "stub" network,
in which case one or more gateway routers may announce a default
prefix such that net_prefix = net_length = 0. Two copies of each
table are kept: an "old" copy that was last reported to neighbors,
and the current copy that is updated when association messages are
received.
8.2. TOPOLOGY UPDATE Message Format
The TOPOLOGY UPDATE message has the two formats, depending on the
size of the message. The normal format is as follows, and is used
whenever n, NRL, and NRNL all do not exceed 255:
Ogier, et al. Experimental [Page 21]
^L
RFC 3684 TBRPF February 2004
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|M|D|0|0| TYPE | n | NRL | NRNL |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Router ID of u |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Router ID of v_1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Router ID of v_n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| metric 1 | metric 2 | ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The message body contains the n+1 router IDs for nodes u,
v_1,...,v_n, which represent the links (u,v_1),..., (u,v_n). The
first NRL of the v_k are reported leaf nodes, the next NRNL of the
v_k are reported non-leaf nodes, and the last n - (NRL+NRNL) of the
v_k are not reported (not in RN).
The M bit indicates whether or not link metrics are included in the
message. If M = 1, then a 1-octet metric is included for each of the
links (u,v_1),..., (u,v_n), following the last router ID.
The D bit indicates whether or not implicit deletion is used, and
must be set to 1 if and only if IMPLICIT_DELETION = 1.
The TOPOLOGY UPDATE message has the following three subtypes:
FULL (TYPE = 5)
A FULL update (FULL, n, NRL, NRNL, u, v_1,..., v_n) reports that
the links (u,v_1),..., (u,v_n) belong to the sending router's
reported subtree RT, and that RT contains no other links with tail
u.
ADD (TYPE = 6)
An ADD update (ADD, n, NRL, NRNL, u, v_1,..., v_n) reports that
the links (u,v_1),..., (u,v_n) have been added to the sending
router's reported subtree RT.
DELETE (TYPE = 7)
A DELETE update (DELETE, n, NRL, NRNL, u, v_1,..., v_n) reports
that the links (u,v_1),..., (u,v_n) have been deleted from the
sending router's reported subtree RT.
Ogier, et al. Experimental [Page 22]
^L
RFC 3684 TBRPF February 2004
If n, NRL, or NRNL is larger than 255, then the long format of the
TOPOLOGY UPDATE message is used, in which the first 4 octets of the
normal format are replaced by the following 8 octets:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|M|D|1|0| TYPE | 0 | n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NRL | NRNL |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
8.3. Interface, Host, and Network Prefix Association Message Formats
The INTERFACE ASSOCIATION (TYPE = 8) and HOST ASSOCIATION (TYPE = 9)
messages have the following format:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|ST | 0 | TYPE | Reserved | n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Router ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The message body contains the router ID of the originating node, and
n IP addresses of interfaces (TYPE = 8) or hosts (TYPE = 9) that are
associated with the router ID. The ST field is defined below.
The NETWORK PREFIX ASSOCIATION message (TYPE = 10) has the following
format:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|ST | 0 | TYPE | Reserved | n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Router ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PrefixLength | Prefix byte 1 | Prefix byte 2 | ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... | PrefixLength | Prefix byte 1 | Prefix byte 2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Ogier, et al. Experimental [Page 23]
^L
RFC 3684 TBRPF February 2004
The message body contains the router ID of the originating node, and
n network prefixes, each specified by a 1-octet prefix length
followed immediately by the prefix, using the minimum number of whole
octets required. To minimize overhead, the prefix lengths and
prefixes are NOT aligned along word boundaries.
The INTERFACE ASSOCIATION, HOST ASSOCIATION, and NETWORK PREFIX
ASSOCIATION messages each have the following three subtypes (similar
to those for the TOPOLOGY UPDATE message):
FULL (ST = 0)
Indicates that this is a FULL update that includes all interface
addresses, host addresses, or network prefixes associated with the
given router ID.
ADD (ST = 1)
Indicates that the included IP addresses or network prefixes are
associated with the router ID, but may not include all such IP
addresses or network prefixes.
DELETE (ST = 2)
Indicates that the included IP addresses or network prefixes are
no longer associated with the router ID.
8.4. TBRPF Routing Operation
This section describes the operation of the TBRPF routing module.
The operation is divided into the following subsections: periodic
processing, updating the source tree and topology graph, updating the
routing table, updating the reported node set, generating periodic
updates, generating differential updates, processing topology
updates, expiring topology information, optional reporting of
redundant topology information, local topology changes, generating
association messages, processing association messages, and non-relay
operation. The operation is described in terms of procedures (e.g.,
Update_All), which may be executed periodically or in response to
some event, and may be called by other procedures. In all
procedures, node i is the node executing the procedure.
8.4.1. Periodic Processing
Each node executes the procedure Update_All() periodically, at least
once every DIFF_UPDATE_INTERVAL seconds, which is typically equal to
HELLO_INTERVAL. This procedure is defined as follows:
Ogier, et al. Experimental [Page 24]
^L
RFC 3684 TBRPF February 2004
Update_All()
1. For each interface I, create empty message list msg_list(I).
2. For each interface I, generate a HELLO message for
interface I and add it to msg_list(I).
3. Expire_Links().
4. Update_Source_Tree().
5. Update_Routing_Table().
6. If REPORT_FULL_TREE = 0, execute Update_RN(); otherwise (the
full source tree is reported) Update_RN_Simple().
7. If current_time >= next_periodic:
7.1. Generate_Periodic_Update().
7.2. Set next_periodic = current_time + PER_UPDATE_INTERVAL.
8. Else, Generate_Diff_Update().
9. Generate_Association_Messages().
10. For each interface I, send the msg_list(I) on interface I.
11. Set old_T = T and old_RN = RN.
8.4.2. Updating the Source Tree and Topology Graph
The procedure Update_Source_Tree() is a variant of Dijkstra's
algorithm, which is called periodically and in response to topology
changes, to update the source tree T and the topology graph TG. This
algorithm computes shortest paths subject to two link cost penalties.
The penalty NON_REPORT_PENALTY is added to the cost of links (u,v)
that are not currently reported by the parent p(u) so that, whenever
possible, a link (u,v) is included in T only if it is currently
reported by the parent. To allow immediate rerouting when p(u)
changes, it may be necessary to temporarily use a link (u,v) that is
not currently reported by the new parent. The penalty
NON_TREE_PENALTY is added to the cost of links (u,v) that are not
currently in T, to reduce the number of changes to T. When there
exist multiple paths of equal cost to a given node, router ID is used
to break ties.
The algorithm is defined as follows (where node i is the node
executing the procedure):
Update_Source_Tree()
1. For each node v in TT, set d(v) = INFINITY, pred(v) = NULL,
old_p(v) = p(v), and p(v) = NULL.
2. Set d(i) = 0, p(i) = i, pred(i) = i.
3. Set S = {i}. (S is the set of labeled nodes.)
4. For each node j in N, set d(j) = c(i,j), pred(j) = i,
and p(j) = j. (If USE_METRICS = 0, then all link costs
c(i,j) are 1.)
Ogier, et al. Experimental [Page 25]
^L
RFC 3684 TBRPF February 2004
5. While there exists an unlabeled node u in TT such that
d(u) < INFINITY:
5.1. Let u be an unlabeled node in TT with minimum d(u).
(A heap should be used to find u efficiently.)
5.2. Add u to S (u becomes labeled).
5.3. If p(u) is not equal to old_p(u) (parent has changed):
5.3.1. For each link (u,v) in TG with tail u, if
reported(u,v) = 1, set reported(u,v) = 0 and set
nr_expire(u,v) = current_time + PER_UPDATE_INTERVAL.
5.3.2. If p(u) is in r(u) (p(u) is reporting u):
5.3.2.1. Set tg_expire(u) = rt_expire(p(u),u).
5.3.2.2. If p(u) = u (u is a neighbor), remove all links
(u,v) with tail u from TG.
5.3.2.3. For each link (u,v) with p(u) in r(u,v):
5.3.2.3.1. Add (u,v) to TG and set reported(u,v) = 1.
5.3.2.3.2. Set metric(u,v) = metric(p(u),u,v).
If USE_METRICS=1, set c(u,v)=metric(u,v).
5.4. For each node v such that (u,v) is in TG:
5.4.1. If reported(u,v) = 0,
set cost = c(u,v) + NON_REPORT_PENALTY.
(This penalizes (u,v) if not reported by p(u).)
5.4.2. Else, if p(u) = u AND u is not in r(v),
set cost = c(u,v) + NON_REPORT_PENALTY.
(This penalizes (u,v) if u is a neighbor and is not
reporting v.)
5.4.3. If (u,v) is not in old_T and p(u) != u,
set cost = cost + NON_TREE_PENALTY.
5.4.4. If (d(u) + cost, u) is lexicographically less
than (d(v), pred(v)), set d(v) = d(u) + c(u,v),
pred(v) = u, and p(v) = p(u).
6. Update the source tree T as follows:
6.1. Remove all links from T.
6.2. For each node u other than i such that pred(u) is not
NULL, add the link (pred(u), u) to T.
8.4.3. Updating the Routing Table
The routing table is updated following any change to the source tree
or the association tables (interface table, host table, or network
prefix table). The routing table is updated according to procedure
Update_Routing_Table(), which is defined as follows:
Update_Routing_Table()
1. Remove all tuples from the routing table.
Ogier, et al. Experimental [Page 26]
^L
RFC 3684 TBRPF February 2004
2. For each node u in TT (other than this node) such that p(u) is
not NULL, add the tuple (rt_dest, rt_next, rt_dist, rt_if_id)
to the routing table, where:
rt_dest = u,
rt_if_id = local_if(p(u)),
rt_next = nbr_if(p(u)),
rt_dist = d(u).
3. For each tuple (if_addr, if_rid, if_expire) in the interface
table, if a routing table entry (rt_dest, rt_next, rt_dist,
rt_if_id) exists such that rt_dest = if_rid, add the tuple
(if_addr, rt_next, rt_dist, rt_if_id) to the routing table.
4. For each tuple (h_addr, h_rid, h_expire) in the host table, if
there exists a routing table entry (rt_dest, rt_next, rt_dist,
rt_if_id) such that rt_dest = h_rid, add the tuple (h_addr,
rt_next, rt_dist, rt_if_id) to the routing table, unless an
entry already exists with the same value for h_addr and a
lexicographically smaller value for (rt_dist, rt_dest).
5. For each tuple (net_prefix, net_length, net_rid, net_expire)
in the network prefix table, if there exists a routing table
entry (rt_dest, rt_next, rt_dist, rt_if_id) such that
rt_dest = net_rid, add the tuple (net_prefix/net_length,
rt_next, rt_dist, rt_if_id) to the routing table, unless an
entry already exists with the same value for
net_prefix/net_length and a lexicographically smaller value
for (rt_dist, rt_dest).
8.4.4. Updating the Reported Node Set
Recall that the reported subtree RT is defined to be the set of links
(u,v) in T such that u is in the reported node set RN. Each node
updates its RN immediately before generating periodic or differential
topology updates.
If REPORT_FULL_TREE = 1 (so that a node reports its entire source
tree), then RN simply consists of all reachable nodes, i.e., all
nodes u such that pred(u) is not NULL. The procedure that computes
RN in this manner is called Update_RN_Simple(). The rest of this
section describes how RN is computed assuming REPORT_FULL_TREE = 0.
A node first determines which of its neighbors belong to RN. Node i
includes a neighbor j in RN if and only if node i determines that one
of its neighbors may select i to be its next hop on its shortest path
to j. To make this determination, node i computes the shortest
paths, up to 2 hops, from each neighbor to each other neighbor, using
only neighbors (or node i itself) as an intermediate node, and using
Ogier, et al. Experimental [Page 27]
^L
RFC 3684 TBRPF February 2004
relay priority and router ID to break ties. If a link metric is
used, then shortest paths are computed with respect to the link
metric; otherwise min-hop paths are computed.
After a node determines which neighbors are in RN, each node u (other
than node i) in the topology table is included in RN if and only if
the next hop p(u) to u is in RN. Equivalently, node u is included in
RN if and only if u is in the subtree of T rooted at some neighbor j
that is in RN. Thus, the reported subtree RT includes the subtrees
of T that are rooted at neighbors in RN. Node i also includes itself
in RN; thus RT also includes all local links (i,j) to neighbors j.
The precise procedure for updating RN is defined as follows:
Update_RN()
1. Set RN = empty.
2. For each neighbor s in N such that s is in r(s), i.e.,
such that s is reporting itself:
(Initialize to run Dijkstra for source s, for 2 hops.)
2.1. For each node j in N+{i}, set dist(j) = INFINITY and
par(j) = NULL.
2.2. Set dist(s) = 0 and par(s) = s.
2.3. For each node j in N+{i} such that (s,j) is in TG:
2.3.1. Set dist(j) = metric(s,j), par(j) = j.
2.3.2. For each node k in N such that (j,k) is in TG:
2.3.2.1. Set cost = metric(j,k).
2.3.2.2. If (dist(j) + cost, nbr_pri(j), j)
is lexicographically less than
(dist(k), nbr_pri(par(k)), par(k)),
set dist(k) = dist(j) + cost and par(k) = j.
2.4. For each neighbor j in N, add j to RN if par(j) = i.
3. Add i to RN. (Node i is always in RN.)
4. For each node u in the topology table, add u to RN if p(u)
is in RN.
In some cases it may be desirable to limit the radius (number of
hops) that topology information is propagated. Since each TBRPF
packet is sent only to immediate (1-hop) neighbors, this cannot be
achieved by using a time-to-live field. Instead, the propagation of
topology information can be limited to a radius of K hops by limiting
RN (at all nodes) to include only nodes that are at most K-1 hops
away. Assuming min-hop routing is used, so that d(u) is the number
of hops to node u, this can be done by modifying Step 4 of
Update_RN() as follows:
4. For each node u in the topology table, add u to RN if p(u)
is in RN and d(u) <= K-1.
Ogier, et al. Experimental [Page 28]
^L
RFC 3684 TBRPF February 2004
8.4.5. Generating Periodic Updates
Every PER_UPDATE_INTERVAL seconds, each node generates and transmits,
on all interfaces, a set of FULL TOPOLOGY UPDATE messages (one
message for each node in RN that is not a leaf of T), which describes
the reported subtree RT. Whenever possible, these messages are
included in a single packet, in order to minimize the number of
control packets transmitted.
Each topology update message contains the router IDs for n+1 nodes u,
v_1,...,v_n, which represent the n links (u,v_1),..., (u,v_n). The n
head nodes v_1,..., v_n are divided into three lists in order to
convey additional information and thus reduce the number of messages
that must be generated. In particular, the first NRL head nodes are
leaves of T, thus avoiding the need to generate separate topology
update messages for leaf nodes u. Similarly, the last n-(NRL+NRNL)
head nodes are not in RN, thus avoiding the need to generate separate
topology update messages for nodes u that have been removed from RN.
Periodic update messages are generated according to procedure
Generate_Periodic_Update(), defined as follows (where node i is the
node executing the procedure):
Generate_Periodic_Update()
For each node u in RN (including node i) that is not a leaf of T,
add the update (FULL, n, NRL, NRNL, u, v_1,..., v_n)
to msg_list(I) for each interface I, where:
(a) v_1,..., v_n are the nodes v such that (u,v) is in T,
the first NRL of these are nodes in RN that are leaves of T,
the next NRNL of these are nodes in RN that are not leaves
of T, and the last n-(NRL+NRNL) of these are not in RN.
(b) If USE_METRICS = 1, then the M (metrics) bit is set to 1 and
the link metrics metric(u,v_1),..., metric(u,v_n) are
included in the message.
8.4.6. Generating Differential Updates
Every DIFF_UPDATE_INTERVAL seconds, if it is not time to generate a
periodic update, and if RT has changed since the last time a topology
update was generated, a set of TOPOLOGY UPDATE messages describing
the changes to RT is generated and transmitted on all interfaces.
These messages are constructed according to procedure
Generate_Differential_Update(), defined as follows:
Ogier, et al. Experimental [Page 29]
^L
RFC 3684 TBRPF February 2004
Generate_Differential_Update()
For each node u in RN:
1. If u is not in old_RN (u was added to RN) and is not a leaf
of T, add the update (FULL, n, NRL, NRNL, u, v_1,..., v_n)
to msg_list(I) for each I, where:
(a) v_1,..., v_n, NRL, and NRNL are defined as above for
periodic updates.
(b) If USE_METRICS = 1, then the M (metrics) bit is set to 1
and the link metrics metric(u,v_1),..., metric(u,v_n)
are included in the message.
2. Else, if u is in old_RN and is not a leaf of T:
2.1. Let v_1,..., v_n be the nodes v such that (u,v) is in T
AND at least one of the following 3 conditions holds:
(a) (u,v) is not in old_T, or
(b) v is in old_RN but not in RN, or
(c) v is a leaf and is in RN but not in old_RN.
2.2. If this set of nodes is nonempty, add the update
(ADD, n, NRL, NRNL, u, v_1,..., v_n) to msg_list(I) for
each interface I, where:
(a) NRL and NRNL are defined as above.
(b) If USE_METRICS = 1, then the M (metrics) bit is
set to 1 and the link metrics metric(u,v_1),...,
metric(u,v_n) are included in the message.
3. If u is in old_RN:
3.1. Let v_1,..., v_n be the nodes v such that (u,v) is in
old_T but not in TG, and either IMPLICIT_DELETION = 0
or pred(v) is not in RN (or is NULL).
(If IMPLICIT_DELETION = 1 and pred(v) is in RN, then
the deletion of (u,v) is implied by an ADD update for
another link (w,v).)
3.2. If this set of nodes is nonempty, add the update
(DELETE, n, u, v_1,..., v_n) to msg_list(I) for each I.
8.4.7. Processing Topology Updates
When a packet containing a list (msg_list) of TOPOLOGY UPDATE
messages is received from node j, the list is processed according to
the procedure Process_Updates(j, msg_list), defined as follows. In
particular, this procedure updates TT, TG, and the reporting neighbor
lists r(u) and r(u,v). If any link in T has been deleted from TG,
then Update_Source_Tree() and Update_Routing_Table() are called to
provide immediate rerouting.
Process_Updates(j, msg_list)
1. For each update = (subtype, n, NRL, NRNL, u, v_1,..., v_n)
in msg_list:
Ogier, et al. Experimental [Page 30]
^L
RFC 3684 TBRPF February 2004
1.1. Create an entry for u in TT if it does not exist.
1.2. If subtype = FULL, Process_Full_Update(j, update).
1.3. If subtype = ADD, Process_Add_Update(j, update).
1.4. If subtype = DELETE, Process_Delete_Update(j, update).
2. If there exists any link in T that is not in TG:
2.1. Update_Source_Tree().
2.2. Update_Routing_Table().
Process_Full_Update(j, update)
1. Add j to r(u).
2. Set rt_expire(j,u) = current_time + TOP_HOLD_TIME.
3. For each link (u,v) s.t. j is in r(u,v):
3.1. Remove j from r(u,v).
3.2. If pred(j,v) = u, set pred(j,v) = NULL.
4. If j = p(u) OR p(u) = NULL:
4.1. Set tg_expire(u) = current_time + TOP_HOLD_TIME.
4.2. For each v s.t. (u,v) is in TG,
If reported(u,v) = 1, remove (u,v) from TG.
5. Process_Add_Update(j, update).
Process_Add_Update(j, update)
For m = 1,..., n:
((u,v_m) is the mth link in update.)
1. Let v = v_m.
2. Create an entry for v in TT if it does not exist.
3. Add j to r(u,v).
4. If j = p(u) OR p(u) = NULL:
4.1. Add (u,v) to TG.
4.2. Set reported(u,v) = 1.
5. If the M (metrics) bit in update is 1:
5.1. Set metric(j,u,v) to the m-th metric in the update.
5.2. If j = p(u) OR p(u) = NULL:
5.2.1. Set metric(u,v) = metric(j,u,v).
5.2.2. If USE_METRICS = 1, set c(u,v) = metric(u,v).
6. If the D (implicit deletion) bit in update is 1:
6.1. Set w = pred(j,v).
6.2. If (w != NULL AND w != u):
6.2.1. Remove j from r(w,v).
6.2.2. If j = p(w), remove (w,v) from TG.
7. Set pred(j,v) = u. (Set new predecessor.)
8. If m <= NRL (v = v_m is a reported leaf):
8.1. Set leaf_update = (FULL, 0, 0, 0, v).
8.2. Process_Full_Update(j, leaf_update).
9. If m > NRL + NRNL (v = v_m is not reported by j):
9.1. Remove j from r(v).
9.2. Set rt_expire(j,v) = 0.
9.3. For each node w s.t. j is in r(v,w),
remove j from r(v,w).
Ogier, et al. Experimental [Page 31]
^L
RFC 3684 TBRPF February 2004
9.4. If j = p(v), then for each node w s.t. (v,w) is in TG
and reported(v,w) = 1, set reported(v,w) = 0 and set
nr_expire(v,w) = current_time + PER_UPDATE_INTERVAL.
Process_Delete_Update(j, update)
For m = 1,..., n:
((u,v_m) is the mth link in update.)
1. Let v = v_m.
2. Remove j from r(u,v).
3. If pred(j,v) = u, set pred(j,v) = NULL.
4. If j = p(u), remove (u,v) from TG.
8.4.8. Expiring Topology Information
Each node periodically checks for outdated topology information based
on the expiration timers tg_expire(u), rt_expire(j,u), and
nr_expire(u,v), and removes any expired entries from TG and from the
lists r(u) and r(u,v). This is done according to the following
procedure Expire_Links(), which is called periodically just before
the source tree is updated.
Expire_Links()
For each node u in TT other than node i:
1. If tg_expire(u) < current_time, then for each v s.t.
(u,v) is in TG, remove (u,v) from TG.
2. Else, for each v s.t. (u,v) is in TG,
if reported(u,v) = 0 AND nr_expire(u,v) < current_time,
remove (u,v) from TG.
3. For each node j in r(u), if rt_expire(j,u) < current_time:
3.1. Remove j from r(u).
3.2. For each link (u,v) s.t. j is in r(u,v),
remove j from r(u,v).
In addition, the following cleanup steps SHOULD be executed
periodically to remove unnecessary entries from the topology table
TT. A link (u,v) should be removed from TT if it is not in TG and
not in old_T. A node u should be removed from TT if all of the
following conditions hold: r(u) is empty, r(w,u) is empty for all w,
and no link of TG has u as either the head or the tail.
8.4.9. Optional Reporting of Redundant Topology Information
Each node is required to report its reported subtree RT to neighbors.
However, each node (independently of the other nodes) MAY report
additional links, e.g., to provide increased robustness in highly
mobile networks. For example, a node may compute any subgraph H of
TG that contains T, and may report the "reported subgraph" RH which
consists of links (u,v) of H such that u is in RN. In this case,
Ogier, et al. Experimental [Page 32]
^L
RFC 3684 TBRPF February 2004
each periodic update describes RH instead of RT, and each
differential update describes changes to RH. If this option is used,
then the parameter IMPLICIT_DELETION MUST be set to 0, since the
deletion of a link cannot be implied by the addition of another link
if redundant topology information is reported.
8.4.10. Local Topology Changes
This section describes the procedures that are followed when the
neighbor discovery module detects a new link, the loss of a link, or
a change in the metric for a link.
When a link (I,J) from a local interface I to a neighbor interface J
is discovered via the neighbor discovery module, the procedure
Link_Up(I,J) is executed, as defined below. Letting j be the
neighbor node associated with interface J, Link_Up(I,J) adds j to N
(if it does not already belong), updates the preferred local
interface local_if(j) and neighbor interface nbr_if(j) so that the
link from local_if(j) to nbr_if(j) has the minimum metric among all
links from i to j, and updates metric(i,j) to be this minimum metric.
Link_Up(I,J)
1. Let j = nbr_rid(I,J).
2. If j is not in N:
2.1. Add j to N.
2.2. Add (i,j) to TG.
2.3. Set reported(i,j) = 1.
3. If nbr_metric(I,J) < metric(i,j), set local_if(j) = I,
nbr_if(j) = J, and metric(i,j) = nbr_metric(I,J).
4. If USE_METRICS = 1, set cost(i,j) = metric(i,j).
When the loss of a link (I,J) from a local interface I to a neighbor
interface J is detected via the neighbor discovery module, the
procedure Link_Down(I,J) is executed, as defined below. Note that
routes are updated immediately when a link is lost, and if the lost
link is due to a link-layer failure notification, a differential
topology update is sent immediately.
Link_Down(I,J)
1. Let j = nbr_rid(I,J).
2. If there does not exist a link (K,L) from node i to
node j with nbr_status(K,L) = 2-WAY:
2.1. Remove j from N.
2.2. Remove (i,j) from TG.
3. If j is in N:
3.1. Let (K,L) be a link from i to j such that
nbr_metric(K,L) is the minimum metric among
all links from i to j.
Ogier, et al. Experimental [Page 33]
^L
RFC 3684 TBRPF February 2004
3.2. Set local_if(j) = K, nbr_if(j) = L, and
metric(i,j) = nbr_metric(K,L).
3.3. If USE_METRICS = 1, set cost(i,j) = metric(i,j).
5. Update_Source_Tree().
6. Update_Routing_Table().
7. If j is not in N and lost link is due to link-layer failure
notification:
7.1. If (REPORT_FULL_TREE = 0) Update_RN().
7.2. Else, Update_RN_Simple().
7.3. Set msg_list = empty.
7.4. Generate_Diff_Update().
7.5. Send msg_list on all interfaces.
7.6. Set old_T = T and old_RN = RN.
If the metric of a link (I,J) from a local interface I to a neighbor
interface J changes via the neighbor discovery module, the following
procedure Link_Change(I,J) is executed.
Link_Change(I,J)
1. Let j = nbr_rid(I,J).
2. Let (K,L) be a link from i to j such that
nbr_metric(K,L) is the minimum metric among
all links from i to j.
3. Set local_if(j) = K, nbr_if(j) = L, and
metric(i,j) = nbr_metric(K,L).
4. If USE_METRICS = 1, set cost(i,j) = metric(i,j).
8.4.11. Generating Association Messages
This section describes the procedures used to generate INTERFACE
ASSOCIATION, HOST ASSOCIATION, and NETWORK PREFIX ASSOCIATION
messages. Addresses or prefixes in the interface table, host table,
and network prefix table are reported to neighbors periodically every
IA_INTERVAL, HA_INTERVAL, and NPA_INTERVAL seconds, respectively. In
addition, differential changes to the tables are reported every
DIFF_UPDATE_INTERVAL seconds if it is not time for a periodic update
(similar to differential topology updates). Each node reports only
addresses or prefixes that are associated with nodes in the reported
node set RN; this ensures the efficient broadcast of all associated
addresses and prefixes to all nodes in the network.
The generated messages are sent on each interface. Whenever
possible, these messages are combined into the same packet, in order
to minimize the number of control packets transmitted.
Generate_Association_Messages()
1. Generate_Interface_Association_Messages().
2. Generate_Host_Association_Messages().
Ogier, et al. Experimental [Page 34]
^L
RFC 3684 TBRPF February 2004
3. Generate_Network_Prefix_Association_Messages().
Generate_Interface_Association_Messages()
1. If current_time > next_ia_time:
1.1. Set next_ia_time = current_time + IA_INTERVAL.
1.2. For each node u in RN:
1.2.1. Let addr_1,..., addr_n be the interface IP
addresses associated with RID u in the current
interface table.
1.2.2. If this list is nonempty, add the INTERFACE
ASSOCIATION message (FULL, n, u, addr_1,..., addr_n)
to msg_list(I) for each I.
2. Else, for each node u in RN:
2.1. Add the INTERFACE ASSOCIATION message (ADD, n, u,
addr_1,..., addr_n) to msg_list(I) for each I, where
addr_1,..., addr_n are the interface IP addresses that
are associated with RID u in the current interface table
but not in the old interface table.
2.2. Add the INTERFACE ASSOCIATION message (DELETE, n, u,
addr_1,..., addr_n) to msg_list(I) for each I, where
addr_1,..., addr_n are the interface IP addresses that
are associated with RID u in the old interface table
but not in the current interface table.
Generate_Host_Association_Messages()
1. If current_time > next_ha_time:
1.1. Set next_ha_time = current_time + HA_INTERVAL.
1.2. For each node u in RN:
1.2.1. Let addr_1,..., addr_n be the host IP addresses
associated with RID u in the current host table.
1.2.2. If this list is nonempty, add the HOST ASSOCIATION
message (FULL, n, u, addr_1,..., addr_n) to
msg_list(I) for each I.
2. Else, for each node u in RN:
2.1. Add the HOST ASSOCIATION message (ADD, n, u,
addr_1,..., addr_n) to msg_list(I) for each I, where
addr_1,..., addr_n are the host IP addresses that
are associated with RID u in the current host table
but not in the old host table.
2.2. Add the HOST ASSOCIATION message (DELETE, n, u,
addr_1,..., addr_n) to msg_list(I) for each I, where
addr_1,..., addr_n are the host IP addresses that
are associated with RID u in the old host table
but not in the current host table.
Ogier, et al. Experimental [Page 35]
^L
RFC 3684 TBRPF February 2004
Generate_Network_Prefix_Association_Messages()
1. If current_time > next_npa_time:
1.1. Set next_npa_time = current_time + NPA_INTERVAL.
1.2. For each node u in RN:
1.2.1. Let length_1, prefix_1,..., length_n, prefix_n
be the network prefix lengths and prefixes associated
with RID u in the current network prefix table.
1.2.2. If this list is nonempty, add the NETWORK PREFIX
ASSOCIATION message (FULL, n, u, length_1, prefix_1,
..., length_n, prefix_n) to msg_list(I) for each I.
2. Else, for each node u in RN:
2.1. Add the NETWORK PREFIX ASSOCIATION message
(ADD, n, u, prefix_1,..., prefix_n) to msg_list(I) for
each I, where prefix_1,..., prefix_n are the network
prefixes that are associated with RID u in the current
prefix table but not in the old prefix table.
2.1. Add the NETWORK PREFIX ASSOCIATION message
(DELETE, n, u, prefix_1,..., prefix_n) to msg_list(I) for
each I, where prefix_1,..., prefix_n are the network
prefixes that are associated with RID u in the old prefix
table but not in the current prefix table.
8.4.12. Processing Association Messages
When an INTERFACE ASSOCIATION, HOST ASSOCIATION, or NETWORK PREFIX
ASSOCIATION message is received from node j, the interface table,
host table, or network prefix table, respectively, is updated as
described in the following three procedures.
Process_Interface_Association_Messages(j, msg_list)
For each message (subtype, n, u, addr_1,..., addr_n) in msg_list
such that j = p(u):
1. If subtype = FULL, remove all entries with if_rid = u
from the interface table.
2. If subtype = FULL or ADD, then for m = 1,..., n,
add the tuple (if_addr, if_rid, if_expire) to the
interface table, where:
if_addr = addr_m,
if_rid = u,
if_expire = current_time + IA_HOLD_TIME.
3. If subtype = DELETE, then for m = 1,..., n,
remove the tuple (if_addr, if_rid, if_expire) from the
interface table, where if_addr = addr_m and if_rid = u.
Ogier, et al. Experimental [Page 36]
^L
RFC 3684 TBRPF February 2004
Process_Host_Association_Messages(j, msg_list)
For each message (subtype, n, u, addr_1,..., addr_n) in msg_list
such that j = p(u):
1. If subtype = FULL, remove all entries with h_rid = u
from the host table.
2. If subtype = FULL or ADD, then for m = 1,..., n,
add the tuple (h_addr, h_rid, h_expire) to the
host table, where:
h_addr = addr_m,
h_rid = u,
h_expire = current_time + HA_HOLD_TIME.
3. If subtype = DELETE, then for m = 1,..., n,
remove the tuple (h_addr, h_rid, h_expire) from the
host table, where h_addr = addr_m and h_rid = u.
Process_Network_Prefix_Association_Messages(j, msg_list)
For each message (subtype, n, u, length_1, prefix_1, ...,
length_n, prefix_n) in msg_list such that j = p(u):
1. If subtype = FULL, remove all entries with net_rid = u
from the prefix table.
2. If subtype = FULL or ADD, then for m = 1,..., n,
add the tuple (net_prefix, net_length, net_rid,
net_expire) to the network prefix table, where:
net_prefix = prefix_m,
net_length = length_m,
net_rid = u,
net_expire = current_time + NPA_HOLD_TIME.
3. If subtype = DELETE, then for m = 1,..., n,
remove the tuple (net_prefix, net_length, net_rid,
net_expire) from the network prefix table, where
net_prefix = prefix_m, net_length = length_m,
and net_rid = u.
8.4.13. Non-Relay Operation
Nodes with relay priority equal to zero are called non-relay nodes,
and do not forward packets (of any type) that are received from other
nodes. A non-relay node is implemented simply by not generating or
transmitting any TOPOLOGY UPDATE messages. A non-relay node may
report (in association messages) addresses or prefixes that are
associated with itself, but not those associated with other nodes.
HELLO messages must be transmitted in order to establish links with
neighbor nodes. The following procedures can be omitted in non-relay
nodes: Update_RN(), Generate_Periodic_Update(), and
Generate_Diff_Update().
Ogier, et al. Experimental [Page 37]
^L
RFC 3684 TBRPF February 2004
8.5. Configurable Parameters
This section lists the configurable parameters used by the routing
module, and their proposed default values. All nodes MUST have the
same value for all of the following parameters except
REPORT_FULL_TREE and IMPLICIT_DELETION.
Parameter Name Default Value
-------------- -------------
DIFF_UPDATE_INTERVAL 1 second
PER_UPDATE_INTERVAL 5 seconds
TOP_HOLD_TIME 15 seconds
NON_REPORT_PENALTY 1.01
NON_TREE_PENALTY 0.01
IA_INTERVAL 10 seconds
IA_HOLD_TIME 3 * IA_INTERVAL
HA_INTERVAL 10 seconds
HA_HOLD_TIME 3 * HA_INTERVAL
NPA_INTERVAL 10 seconds
NPA_HOLD_TIME 3 * NPA_INTERVAL
USE_METRICS 0
REPORT_FULL_TREE 0
IMPLICIT_DELETION 1
9. TBRPF Flooding Mechanism
This section describes a mechanism for the efficient best-effort
flooding (or network-wide broadcast) of packets to all nodes of a
connected ad-hoc network. This mechanism can be considered an
optimization of the classical flooding algorithm in which each packet
is transmitted by every node of the network. In TBRPF flooding,
information provided by TBRPF is used to decide whether a given
received flooded packet should be forwarded. As a result, each
packet is transmitted by only a relatively small subset of nodes,
thus consuming much less bandwidth than classical flooding.
This document specifies that the flooding mechanism use the IPv4
multicast address 224.0.1.20 (currently assigned by IANA for "any
private experiment"). Every node maintains a duplicate cache to keep
track of which flooded packets have already been received. The
duplicate cache contains, for each received flooded packet, the
flooded packet identifier (FPI), which for IPv4 is composed of the
source IP address, the IP identification, and the fragment offset
values obtained from the IP header [14].
When a node receives a packet whose destination IP address is the
flooding address (224.0.1.20), it checks its duplicate cache for an
entry that matches the packet. If such an entry exists, the node
Ogier, et al. Experimental [Page 38]
^L
RFC 3684 TBRPF February 2004
silently discards the flooded packet since it has already been
received. Otherwise, the node retransmits the packet on all
interfaces (see the exception below) if and only if the following
conditions hold:
1. The TBRPF node associated with the source IP address of the packet
belongs to the set RN of reported nodes computed by TBRPF.
2. When decremented, the 'ip_ttl' in the IPv4 packet header
(respectively, the 'hop_count' in the IPv6 packet header) is
greater than zero.
If the packet is to be retransmitted, it is sent after a small random
time interval in order to avoid collisions. If the interface on
which the packet was received is not a MANET interface (see the
Terminology section), then the packet should not be retransmitted on
that interface.
10. Operation of TBRPF in Mobile Ad-Hoc Networks
TBRPF is particularly well suited to MANETs consisting of mobile
nodes with wireless network interfaces operating in peer-to-peer
fashion over a multiple access communications channel. Although
applicable across a much broader field of use, TBRPF is particularly
well suited for supporting the standard DARPA Internet protocols
[3][2]. In the following sections, we discuss practical
considerations for the operation of TBRPF on MANETs.
10.1. Data Link Layer Assumptions
We assume a MANET data link layer that supports broadcast, multicast
and unicast addressing with best-effort (not guaranteed) delivery
services between neighbors (i.e., a pair of nodes within operational
communications range of one another). We further assume that each
interface belonging to a node in the MANET is assigned a unicast data
link layer address that is unique within the MANET's scope. While
such uniqueness is not strictly guaranteed, the assumption of
uniqueness is consistent with current practices for deployment of the
Internet protocols on specific link layers. Methods for duplicate
link layer address detection and deconfliction are beyond the scope
of this document.
10.2. Network Layer Assumptions
MANETs are formed as collections of routers and non-routing nodes
that use network layer addresses when calculating the MANET topology.
We assume that each node has at least one data link layer interface
(described above) and that each such interface is assigned a network
Ogier, et al. Experimental [Page 39]
^L
RFC 3684 TBRPF February 2004
layer address that is unique within the MANET. (Methods for network
layer address assignment and duplicate address detection are beyond
the scope of this document.) We further assume that each node will
select a unique Router ID (RID) for use in TBRPF protocol messages,
whether or not the node acts as a MANET router. Finally, we assume
that each MANET router supports the multi-hop relay paradigm at the
network layer; i.e., each router provides an inter-node forwarding
service via network layer host routes which reflect the current MANET
topology as perceived by TBRPF.
10.3. Optional Automatic Address Resolution
TBRPF employs a proactive neighbor discovery protocol at the network
layer that maintains bi-directional link state for neighboring nodes
through the periodic transmission of messages. Since TBRPF neighbor
discovery messages contain both the data link and network layer
address of the sender, implementations MAY perform automatic
network-to-data link layer address resolution for the nodes with
which they form links. An implementation may use such a mechanism to
avoid additional message overhead and potential for packet loss
associated with on-demand address resolution mechanisms such as ARP
[15] or IPv6 Neighbor Discovery [16]. Implementations MUST respond
to on-demand address resolution requests in the normal manner.
10.4. Support for Multiple Interfaces and/or Alias Addresses
MANET nodes may comprise multiple interfaces; each with a unique
network layer address. Additionally, MANET nodes may wish to publish
alias addresses such as when multiple network layer addresses are
assigned to the same interface or when the MANET node is serving as a
Mobile IP [17] home agent. Multiple interfaces and alias addresses
are advertised in INTERFACE ASSOCIATION messages, which bind each
such address to the node's RID.
10.5. Support for Network Prefixes
MANET routers may advertise network prefixes which the router
discovered via attached networks, external routes advertised by other
protocols, or other means. Network prefixes are advertised in
NETWORK PREFIX ASSOCIATION messages, which bind each such prefix to
the node's RID.
10.6. Support for non-MANET Hosts
Non-MANET hosts may establish connections to MANET routers through
on-demand mechanisms such as ARP or IPv6 Neighbor Discovery. Such
connections do not constitute a MANET link and therefore are not
reported in TBRPF topology updates. Non-MANET hosts are advertised
Ogier, et al. Experimental [Page 40]
^L
RFC 3684 TBRPF February 2004
in HOST ASSOCIATION messages, which bind the IP address of each host
to the node's RID.
10.7. Internet Protocol Considerations
TBRPF packets are communicated using UDP/IP. Port 712 has been
assigned by IANA for exclusive use by TBRPF. Implementations in
private networks MAY employ alternate data delivery services (i.e.,
raw IP or local data-link encapsulation). The selection of an
alternate data delivery service MUST be consistent among all MANET
routers in the private network. In all implementations, the data
delivery service MUST provide a checksum facility.
The following sections specify the operation of TBRPF over UDP/IP.
10.7.1. IPv4 Operation
When IPv4 is used, TBRPF nodes obey IPv4 host and router requirements
[4][5]. TBRPF packets are sent to the multicast address 224.0.0.2
(All Routers) and thus reach all TBRPF routers within single-hop
transmission range of the sender. TBRPF routers MUST NOT forward
packets sent to this multicast address.
Since non-negligible packet loss due to link failure, interference,
etc. can occur, implementations SHOULD avoid IPv4 fragmentation/
reassembly whenever possible, by splitting large TBRPF protocol
packets into multiple smaller packets at the application layer. When
fragmentation is unavoidable, senders SHOULD NOT send TBRPF packets
that exceed the minimum reassembly buffer size ([4], section 3.3.2)
for all receivers in the network.
10.7.2. IPv6 Operation
The specification of TBRPF for IPv6 is the same as for IPv4, except
that 32-bit IPv4 addresses are replaced by 128-bit IPv6 addresses.
However, to minimize overhead, router IDs remain at 32 bits, similar
to OSPF for IPv6 [18].
11. IANA Considerations
The IANA has assigned port number 712 for TBRPF.
The TBRPF flooding mechanism specified in this document uses the IPv4
multicast address 224.0.1.20, which is currently assigned by IANA for
"any private experiment". In the event that this specification is
advanced to standards track, a new multicast address assignment would
be requested for this purpose.
Ogier, et al. Experimental [Page 41]
^L
RFC 3684 TBRPF February 2004
12. Security Considerations
Wireless networks are vulnerable to a variety of attacks, including
denial-of-service attacks (e.g., flooding and jamming), man-in-the-
middle attacks (e.g., interception, insertion, deletion,
modification, replaying) and service theft. To counter such attacks,
it is important to prevent the spoofing (impersonation) of TBRPF
nodes, and to prevent unauthorized nodes from joining the network via
neighbor discovery. To achieve this, TBRPF packets can be
authenticated using the IP Authentication Header [19][20]. In
addition, the Encapsulating Security Payload (ESP) header [21] can be
used to provide confidentiality (encryption) of TBRPF packets.
The IETF SEcuring Neighbor Discovery (SEND) Working Group analyzes
trust models and threats for ad hoc networks [22]. TBRPF can be
extended in a straightforward manner to use SEND mechanisms, e.g.,
[23].
13. Acknowledgements
The authors would like to thank the Army Systems Engineering Office
(ASEO) for funding part of this work.
The authors would like to thank several members of the MANET working
group for many helpful comments and suggestions, including Thomas
Clausen, Philippe Jacquet, and Joe Macker.
The authors would like to thank Bhargav Bellur for major
contributions to the original (full-topology) version of TBRPF,
Ambatipudi Sastry for his support and advice, and Julie S. Wong for
developing a new implementation of TBRPF and suggesting several
clarifications to the TBRPF Routing Operation section.
14. References
14.1. Normative References
[1] Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels", BCP 14, RFC 2119, March 1997.
[2] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6)
Specification", RFC 2460, December 1998.
[3] Postel, J., "Internet Protocol", STD 5, RFC 791, September 1981.
[4] Braden, R., Ed., "Requirements for Internet Hosts -
Communication Layers", STD 3, RFC 1122, October 1989.
Ogier, et al. Experimental [Page 42]
^L
RFC 3684 TBRPF February 2004
[5] Baker, F., Ed., "Requirements for IP Version 4 Routers", RFC
1812, June 1995.
14.2. Informative References
[6] Moy, J., "OSPF Version 2", STD 54, RFC 2328, April 1998.
[7] Ogier, R., Message in IETF email archive for MANET,
ftp://ftp.ietf.org/ietf-mail-archive/manet/2002-02.mail,
February 2002.
[8] Ogier, R., "Topology Dissemination Based on Reverse-Path
Forwarding (TBRPF): Correctness and Simulation Evaluation",
Technical Report, SRI International, October 2003.
[9] Ogier, R., Message in IETF email archive for MANET,
ftp://ftp.ietf.org/ietf-mail-archive/manet/2002-03.mail, March
2002.
[10] Ogier, R., "Efficient Routing Protocols for Packet-Radio
Networks Based on Tree Sharing", Proc. Sixth IEEE Intl. Workshop
on Mobile Multimedia Communications (MOMUC'99), November 1999.
[11] Bellur, B. and R. Ogier, "A Reliable, Efficient Topology
Broadcast Protocol for Dynamic Networks", Proc. IEEE INFOCOM
'99, New York", March 1999.
[12] Clausen, T. and P. Jacquet, Eds., "Optimized Link State Routing
Protocol (OLSR)", RFC 3626, October 2003.
[13] Bertsekas, D. and R. Gallager, "Data Networks", Prentice-Hall,
1987.
[14] Perkins, C., Belding-Royer, E. and S. Das, "IP Flooding in Ad
Hoc Mobile Networks", Work in Progress, November 2001.
[15] Plummer, D., "Ethernet Address Resolution Protocol: Or
converting network protocol addresses to 48.bit Ethernet address
for transmission on Ethernet hardware", STD 37, RFC 826,
November 1982.
[16] Narten, T., Nordmark, E. and W. Simpson, "Neighbor Discovery for
IP Version 6 (IPv6)", RFC 2461, December 1998.
[17] Perkins, C., Ed., "IP Mobility Support for IPv4", RFC 3344,
August 2002.
Ogier, et al. Experimental [Page 43]
^L
RFC 3684 TBRPF February 2004
[18] Coltun, R., Ferguson, D. and J. Moy, "OSPF for IPv6", RFC 2740,
December 1999.
[19] Kent, S. and R. Atkinson, "Security Architecture for the
Internet Protocol", RFC 2401, November 1998.
[20] Kent, S. and R. Atkinson, "IP Authentication Header", RFC 2402,
November 1998.
[21] Kent, S. and R. Atkinson, "IP Encapsulating Security Payload
(ESP)", RFC 2406, November 1998.
[22] Nikander, P., "IPv6 Neighbor Discovery Trust Models and
Threats", Work in Progress, April 2003.
[23] Arkko, J., "SEcure Neighbor Discovery (SEND)", Work in Progress,
June 2003.
Ogier, et al. Experimental [Page 44]
^L
RFC 3684 TBRPF February 2004
Authors' Addresses
Richard G. Ogier
SRI International
333 Ravenswood Ave.
Menlo Park, CA 94025
USA
Phone: +1 650 859-4216
Fax: +1 650 859-4812
EMail: ogier@erg.sri.com
Fred L. Templin
Nokia
313 Fairchild Drive
Mountain View, CA 94043
USA
Phone: +1 650 625 2331
Fax: +1 650 625 2502
EMail: ftemplin@iprg.nokia.com
Mark G. Lewis
SRI International
333 Ravenswood Ave.
Menlo Park, CA 94025
USA
Phone: +1 650 859-4302
Fax: +1 650 859-4812
EMail: lewis@erg.sri.com
Ogier, et al. Experimental [Page 45]
^L
RFC 3684 TBRPF February 2004
Full Copyright Statement
Copyright (C) The Internet Society (2004). This document is subject
to the rights, licenses and restrictions contained in BCP 78 and
except as set forth therein, the authors retain all their rights.
This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE
REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE
INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Intellectual Property
The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed
to pertain to the implementation or use of the technology
described in this document or the extent to which any license
under such rights might or might not be available; nor does it
represent that it has made any independent effort to identify any
such rights. Information on the procedures with respect to
rights in RFC documents can be found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use
of such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository
at http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention
any copyrights, patents or patent applications, or other
proprietary rights that may cover technology that may be required
to implement this standard. Please address the information to the
IETF at ietf-ipr@ietf.org.
Acknowledgement
Funding for the RFC Editor function is currently provided by the
Internet Society.
Ogier, et al. Experimental [Page 46]
^L
|