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
|
Network Working Group R. Braden
Request For Comments: 2209 ISI
Category: Informational L. Zhang
UCLA
September 1997
Resource ReSerVation Protocol (RSVP) --
Version 1 Message Processing Rules
Status of this Memo
This memo provides information for the Internet community. It does
not specify an Internet standard of any kind. Distribution of this
memo is unlimited.
Abstract
This memo contains an algorithmic description of the rules used by an
RSVP implementation for processing messages. It is intended to
clarify the version 1 RSVP protocol specification.
This memo provides a generic description of the rules for the
operation of Version 1 of RSVP [RFC 2205]. It is intended to outline
a set of algorithms that will accomplish the needed function,
omitting many details.
1. GENERIC DATA STRUCTURES
This memo assumes the generic interface calls defined in [RFC 2005]
and the following data structures. An actual implementation may use
additional or different data structures and interfaces. The data
structure fields that are shown are required unless they are
explicitly labelled as optional.
o PSB -- Path State Block
Each PSB holds path state for a particular (session, sender)
pair, defined by SESSION and SENDER_TEMPLATE objects,
respectively, received in a PATH message.
Braden & Zhang Informational [Page 1]
RFC 2209 RSVP-Message Processing September 1997
PSB contents include the following values from a PATH message:
- Session
- Sender_Template
- Sender_Tspec
- The previous hop IP address and the Logical Interface
Handle (LIH) from a PHOP object
- The remaining IP TTL
- POLICY_DATA and/or ADSPEC objects (optional)
- Non_RSVP flag
- E_Police flag
- Local_Only flag
In addition, the PSB contains the following information provided
by routing: OutInterface_list, which is the list of outgoing
interfaces for this (sender, destination), and IncInterface,
which is the expected incoming interface. For a unicast
destination, OutInterface_list contains one entry and
IncInterface is undefined.
Note that there may be more than one PSB for the same (session,
sender) pair but different incoming interfaces. At most one of
these, which will have the Local_Only flag off, will be the PSB
used for forwarding PATH messages downstream; we will refer to
it as the "forwarding PSB" in the following. The other PSB's
will have the Local_Only flag on and an empty
OutInterface_list.h The Local_Only flag is needed to correctly
match PSB's against RSB's, by the rules of [RFC 2205].
o RSB -- Reservation State Block
Each RSB holds a reservation request that arrived in a
particular RESV message, corresponding to the triple: (session,
next hop, Filter_spec_list). Here "Filter_spec_list" may be a
list of FILTER_SPECs (for SE style), a single FILTER_SPEC (FF
style), or empty (WF style). We define the virtual object type
"FILTER_SPEC*" for such a data structure.
Braden & Zhang Informational [Page 2]
RFC 2209 RSVP-Message Processing September 1997
RSB contents include:
- Session specification
- Next hop IP address
- Filter_spec_list
- The outgoing (logical) interface OI on which the
reservation is to be made or has been made.
- Style
- Flowspec
- A SCOPE object (optional, depending upon style)
- RESV_CONFIRM object that was received (optional)
o TCSB -- Traffic Control State Block
Each TCSB holds the reservation specification that has been
handed to traffic control for a specific outgoing interface. In
general, TCSB information is derived from RSB's for the same
outgoing interface. Each TCSB defines a single reservation for
a particular triple: (session, OI, Filter_spec_list). TCSB
contents include:
- Session
- OI (Outgoing Interface)
- Filter_spec_list
- TC_Flowspec, the effective flowspec, i.e., the LUB over the
corresponding FLOWSPEC values from matching RSB's.
TC_Flowspec is passed to traffic control to make the actual
reservation.
- Fwd_Flowspec, the updated object to be forwarded
after merging.
- TC_Tspec, equal to Path_Te, the effective sender Tspec.
- Police Flags
The flags are E_Police_Flag, M_Police_Flag, and
B_Police_Flag.
Braden & Zhang Informational [Page 3]
RFC 2209 RSVP-Message Processing September 1997
- Rhandle, F_Handle_list
Handles returned by the traffic control interface,
corresponding to a flowspec and perhaps a list of filter
specs.
- A RESV_CONFIRM object to be forwarded.
o BSB -- Blockade State Block
Each BSB contains an element of blockade state. Depending upon
the reservation style in use, the BSB's may be per (session,
sender_template) pair or per (session, PHOP) pair. In practice,
an implementation might embed a BSB within a PSB; however, for
clarity we describe BSB's independently.
The contents of a BSB include:
- Session
- Sender_Template (which is also a filter spec)
- PHOP
- FLOWSPEC Qb
- Blockade timer Tb
The following Boolean Flag variables are used in this section:
Path_Refresh_Needed, Resv_Refresh_Needed, Tear_Needed,
Need_Scope, B_Merge, and NeworMod. Refresh_PHOP_list is a
variable-length list of PHOPs to be refreshed.
2. PROCESSING RULES
MESSAGE ARRIVES
Verify version number and RSVP checksum, and discard message if any
mismatch is found.
If the message type is not PATH or PTEAR or RACK and if the IP
destination address does not match any of the addresses of the local
interfaces, then forward the message to IP destination address and
return.
Parse the sequence of objects in the message. If any required
objects are missing or the length field of the common header does not
match an object boundary, discard the message and return.
Braden & Zhang Informational [Page 4]
RFC 2209 RSVP-Message Processing September 1997
Verify the INTEGRITY object, if any. If the check fails, discard the
message and return.
Verify the consistent use of port fields. If the DstPort in the
SESSION object is zero but the SrcPort in a SENDER_TEMPLATE or
FILTER_SPEC object is non-zero, then the message has a "conflicting
source port" error; silently discard the message and return.
Processing of POLICY_DATA objects will be specified in the future.
Further processing depends upon message type.
PATH MESSAGE ARRIVES
Assume the PATH message arrives on interface InIf.
Process the sender descriptor object sequence in the message as
follows. The Path_Refresh_Needed and Resv_Refresh_Needed flags are
initially off.
o Search for a path state block (PSB) whose (session,
sender_template) pair matches the corresponding objects in the
message, and whose IncInterface matches InIf.
During this search:
1. If a PSB is found whose session matches the
DestAddress and Protocol Id fields of the received
SESSION object, but the DstPorts differ and one is
zero, then build and send a "Conflicting Dst Port"
PERR message, drop the PATH message, and return.
2. If a PSB is found with a matching sender host but the
Src Ports differ and one of the SrcPorts is zero, then
build and send an "Ambiguous Path" PERR message, drop
the PATH message, and return.
3. If a forwarding PSB is found, i.e., a PSB that matches
the (session, sender_template) pair and whose
Local_Only flag is off, save a pointer to it in the
variable fPSB. If none is found, set fPSB to NULL.
o If there was no matching PSB, then:
1. Create a new PSB.
2. Copy contents of the SESSION, SENDER_TEMPLATE,
SENDER_TSPEC, and PHOP (IP address and LIH) objects
Braden & Zhang Informational [Page 5]
RFC 2209 RSVP-Message Processing September 1997
into the PSB.
3. If the sender is from the local API, set
OutInterface_List to the single interface whose
address matches the sender address, and make
IncInterface undefined. Otherwise, turn on the
Local_Only flag.
4. Turn on the Path_Refresh_Needed flag.
o Otherwise (there is a matching PSB):
- If the PHOP IP address, the LIH, or Sender_Tspec
differs between the message and the PSB, copy the new
value into the PSB and turn on the Path_Refresh_Needed
flag. If the PHOP IP address or the LIH differ, also
turn on the Resv_Refresh_Needed flag.
o Call the resulting PSB the "current PSB" (cPSB). Update
the cPSB, as follows:
- Start or Restart the cleanup timer for the PSB.
- If the message contains an ADSPEC object, copy it into
the PSB.
- Copy E_Police flag from SESSION object into PSB.
- Store the received TTL into the PSB.
If the received TTL differs from Send_TTL in the RSVP
common header, set the Non_RSVP flag on in the PSB.
o If the PSB is new or if there is no route change
notification in place, then perform the following routing
manipulations, but not if the cPSB is from the local API.
1. Invoke the appropriate Route_Query routine using
DestAddress from SESSION and (for multicast routing)
SrcAddress from Sender_Template.
Call the results (Rt_OutL, Rt_InIf).
2. If the destination is multicast and Rt_InIf differs
from IncInterface in the cPSB, but fPSB points to the
cPSB, then do the following.
- Turn on the Local_Only flag and clear the
OutInterface_list of the fPSB. Set the fPSB
Braden & Zhang Informational [Page 6]
RFC 2209 RSVP-Message Processing September 1997
pointer to NULL.
- Search for a PSB for the same (session,
sender_template) pair whose IncInterface matches
Rt_InIf. If one is found, set fPSB to point to
it.
3. If the destination is multicast and Rt_InIf is the
same as IncInterface in the cPSB, but fPSB does not
point to the cPSB, then do the following.
- Copy into the cPSB the OutInterface_list from the
PSB, if any, pointed to by fPSB. Clear
OutInterface_list and turn on the Local_Only flag
in the PSB pointed to by fPSB, if any.
- Turn off the Local_Only flag in the cPSB and set
fPSB to point to cPSB.
4. If Rt_OutL differs from OutInterface_list of the PSB
pointed to by fPSB, then:
- Update the OutInterface_list of the PSB from
Rt_OutL, and then execute the PATH LOCAL REPAIR
event sequence below.
o If the Path_Refresh_Needed flag is now off, drop the PATH
message and return.
Otherwise (the path state is new or modified), do
refreshes, upcalls, and state updates as follows.
1. If this PATH message came from a network interface and
not from a local application, make a Path Event upcall
for each local application for this session:
Call: <Upcall_Proc>( session-id, PATH_EVENT,
flags, sender_tspec, sender_template
[ , ADSPEC] [ , POLICY_DATA] )
2. If OutInterface_list is not empty, execute the PATH
REFRESH event sequence (below) for the sender defined
by the PSB.
3. Search for any matching reservation state, i.e., an
RSB whose Filter_spec_list includes a FILTER_SPEC
matching the SENDER_TEMPLATE and whose OI appears in
the OutInterface_list, and make this the `active RSB'.
Braden & Zhang Informational [Page 7]
RFC 2209 RSVP-Message Processing September 1997
If none is found, drop the PATH message and return.
4. Execute the RESV REFRESH sequence (below) for the PHOP
in the PSB.
5. Execute the event sequence UPDATE TRAFFIC CONTROL to
update the local traffic control state if necessary.
This sequence will turn on the Resv_Refresh_Needed
flag if the traffic control state has been modified in
a manner that should trigger a reservation refresh.
If so, execute the RESV REFRESH sequence for the PHOP
in the PSB.
o Drop the PATH message and return.
PTEAR MESSAGE ARRIVES
o Search for a PSB whose (Session, Sender_Template) pair
matches the corresponding objects in the message. If no
matching PSB is found, drop the PTEAR message and return.
o Forward a copy of the PTEAR message to each outgoing
interface listed in OutInterface_list of the PSB.
o Find each RSB that matches this PSB, i.e., whose
Filter_spec_list matches Sender_Template in the PSB and
whose OI is included in OutInterface_list.
1. If the RSB style is explicit, then:
- Delete from Filter_spec_list the FILTER_SPEC that
matches the PSB.
- if Filter_spec_list is now empty, delete the RSB.
2. Otherwise (RSB style is wildcard) then:
- If this RSB matches no other PSB, then delete the
RSB.
3. If an RSB was found, execute the event sequence UPDATE
TRAFFIC CONTROL (below) to update the traffic control
state to be consistent with the current reservation
and path state.
o Delete the PSB.
o Drop the PTEAR message and return.
Braden & Zhang Informational [Page 8]
RFC 2209 RSVP-Message Processing September 1997
PERR MESSAGE ARRIVES
o Search for a PSB whose (SESSION, SENDER_TEMPLATE) pair
matches the corresponding objects in the message. If no
matching PSB is found, drop the PERR message and return.
o If the previous hop address in the PSB is the local API,
make an error upcall to the application:
Call: <Upcall_Proc>( session-id, PATH_ERROR,
Error_code, Error_value, Node_Addr,
Sender_Template [ , Policy_Data] )
Any SENDER_TSPEC or ADSPEC object in the message is
ignored.
Otherwise, send a copy of the PERR message to the PHOP IP
address.
o Drop the PERR message and return.
RESV MESSAGE ARRIVES
Initially, Refresh_PHOP_list is empty and the
Resv_Refresh_Needed and NeworMod flags are off. These variables
are used to control immediate reservation refreshes.
o Determine the Outgoing Interface OI
The logical outgoing interface OI is taken from the LIH in
the NHOP object. (If the physical interface is not implied
by the LIH, it can be learned from the interface matching
the IP destination address).
o Check the path state
1. If there are no existing PSB's for SESSION then build
and send a RERR message (as described later)
specifying "No path information", drop the RESV
message, and return.
2. If a PSB is found with a matching sender host but the
SrcPorts differ and one of the SrcPorts is zero, then
build and send an "Ambiguous Path" PERR message, drop
the RESV message, and return.
Braden & Zhang Informational [Page 9]
RFC 2209 RSVP-Message Processing September 1997
o Check for incompatible styles.
If any existing RSB for the session has a style that is
incompatible with the style of the message, build and send
a RERR message specifying "Conflicting Style", drop the
RESV message, and return.
Process the flow descriptor list to make reservations, as
follows, depending upon the style. The following uses a filter
spec list struct Filtss of type FILTER_SPEC* (defined earlier).
For FF style: execute the following steps independently for each
flow descriptor in the message, i.e., for each (FLOWSPEC,
Filtss) pair. Here the structure Filtss consists of the
FILTER_SPEC from the flow descriptor.
For SE style, execute the following steps once for (FLOWSPEC,
Filtss), with Filtss consisting of the list of FILTER_SPEC
objects from the flow descriptor.
For WF style, execute the following steps once for (FLOWSPEC,
Filtss), with Filtss an empty list.
o Check the path state, as follows.
1. Locate the set of PSBs (senders) that route to OI and
whose SENDER_TEMPLATEs match a FILTER_SPEC in Filtss.
If this set is empty, build and send an error message
specifying "No sender information", and continue with
the next flow descriptor in the RESV message.
2. If the style has explicit sender selection (e.g., FF
or SE) and if any FILTER_SPEC included in Filtss
matches more than one PSB, build and send a RERR
message specifying "Ambiguous filter spec" and
continue with the next flow descriptor in the RESV
message.
3. If the style is SE and if some FILTER_SPEC included in
Filtss matches no PSB, delete that FILTER_SPEC from
Filtss.
4. Add the PHOP from the PSB to Refresh_PHOP_list, if the
PHOP is not already on the list.
Braden & Zhang Informational [Page 10]
RFC 2209 RSVP-Message Processing September 1997
o Find or create a reservation state block (RSB) for
(SESSION, NHOP). If the style is distinct, Filtss is also
used in the selection. Call this the "active RSB".
o If the active RSB is new:
1. Set the session, NHOP, OI and style of the RSB from
the message.
2. Copy Filtss into the Filter_spec_list of the RSB.
3. Copy the FLOWSPEC and any SCOPE object from the
message into the RSB.
4. Set NeworMod flag on.
o If the active RSB is not new, check whether Filtss from the
message contains FILTER_SPECs that are not in the RSB; if
so, add the new FILTER_SPECs and turn on the NeworMod flag.
o Start or restart the cleanup timer on the active RSB, or,
in the case of SE style, on each FILTER_SPEC of the RSB
that also appears in Filtss.
o If the active RSB is not new, check whether STYLE, FLOWSPEC
or SCOPE objects have changed; if so, copy changed object
into RSB and turn on the NeworMod flag.
o If the message contained a RESV_CONFIRM object, copy it
into the RSB and turn on NeworMod flag.
o If the NeworMod flag is off, continue with the next flow
descriptor in the RESV message, if any.
o Otherwise (the NeworMod flag is on, i.e., the active RSB is
new or modified), execute the UPDATE TRAFFIC CONTROL event
sequence (below). If the result is to modify the traffic
control state, this sequence will turn on the
Resv_Refresh_Needed flag and make a RESV_EVENT upcall to
any local application.
If the UPDATE TRAFFIC CONTROL sequence fails with an error,
then delete a new RSB but restore the original reservation
in an old RSB.
o Continue with the next flow descriptor.
Braden & Zhang Informational [Page 11]
RFC 2209 RSVP-Message Processing September 1997
o When all flow descriptors have been processed, check the
Resv_Refresh_Needed flag. If it is now on, execute the
RESV REFRESH sequence (below) for each PHOP in
Refresh_PHOP_list.
o Drop the RESV message and return.
If processing a RESV message finds an error, a RERR message
is created containing flow descriptor and an ERRORS object.
The Error Node field of the ERRORS object is set to the IP
address of OI, and the message is sent unicast to NHOP.
RTEAR MESSAGE ARRIVES
Processing of a RTEAR message roughly parallels the processing
of the corresponding RESV message
A RTEAR message arrives with an IP destination address matching
outgoing interface OI. Flag Resv_Refresh_Needed is initially
off and Refresh_PHOP_list is empty.
o Determine the Outgoing Interface OI
The logical outgoing interface OI is taken from the LIH in
the NHOP object. (If the physical interface is not implied
by the LIH, it can be learned from the interface matching
the IP destination address).
o Process the flow descriptor list in the RTEAR message to
tear down local reservation state, as follows, depending
upon the style. The following uses a filter spec list
struct Filtss of type FILTER_SPEC* (defined earlier).
For FF style: execute the following steps independently for
each flow descriptor in the message, i.e., for each
(FLOWSPEC, Filtss) pair. Here the structure Filtss
consists of the FILTER_SPEC from the flow descriptor.
For SE style, execute the following steps once for
(FLOWSPEC, Filtss), with Filtss consisting of the list of
FILTER_SPEC objects from the flow descriptor.
For WF style, execute the following steps once for
(FLOWSPEC, Filtss), with Filtss an empty list.
Braden & Zhang Informational [Page 12]
RFC 2209 RSVP-Message Processing September 1997
1. Find an RSB matching (SESSION, NHOP). If the style is
distinct, Filtss is also used in the selection. Call
this the "active RSB". If no active RSB is found,
continue with next flow descriptor.
2. Check the style
If the active RSB has a style that is incompatible
with the style of the message, drop the RTEAR message
and return.
3. Delete from the active RSB each FILTER_SPEC that
matches a FILTER_SPEC in Filtss.
4. If all FILTER_SPECs have now been deleted from the
active RSB, delete the active RSB.
5. Execute the UPDATE TRAFFIC CONTROL event sequence
(below) to update the traffic control state to be
consistent with the reservation state. If the result
is to modify the traffic control state, the
Resv_Refresh_Needed flag will be turned on and a
RESV_EVENT upcall will be made to any local
application.
6. Continue with the next flow descriptor.
o All flow descriptors have been processed.
Build and send any RTEAR messages to be forwarded, in the
following manner.
1. Select each PSB that routes to the outgoing interface
OI, and, for distinct style, that has a
SENDER_TEMPLATE matching Filtss.
2. Select a flow descriptor (Qj,Fj) (where Fj may be a
list) in the RTEAR message whose FILTER_SPEC matches
the SENDER_TEMPLATE in the PSB. If not match is
found, return for next PSB.
- Search for an RSB (for any outgoing interface) to
which the PSB routes and whose Filter_spec_list
includes the SENDER_TEMPLATE from the PSB.
- If an RSB is found, add the PHOP of the PSB to
the Refresh_PHOP_list.
Braden & Zhang Informational [Page 13]
RFC 2209 RSVP-Message Processing September 1997
- Otherwise (no RSB is found), add the flow
descriptor (Qj,Fj) to the new RTEAR message being
built, in a manner appropriate to the style.
- Continue with the next PSB.
3. If the next PSB is for a different PHOP or the last
PSB has been processed, forward any RTEAR message that
has been built.
o If any PSB's were found in the preceding step, and if the
Resv_Refresh_Needed flag is now on, execute the RESV
REFRESH sequence (below) for each PHOP in
Refresh_PHOP_list.
o Drop the RTEAR message and return.
RERR MESSAGE ARRIVES
A RERR message arrives through the (real) incoming interface
In_If.
o If there is no path state for SESSION, drop the RERR
message and return.
o If the Error Code = 01 (Admission Control failure), do
special processing as follows:
1. Find or create a Blockade State Block (BSB), in the
following style-dependent manner.
For WF (wildcard) style, there will be one BSB per
(session, PHOP) pair.
For FF style, there will be one BSB per (session,
filter_spec) pair. Note that an FF style RERR message
carries only one flow descriptor.
For SE style, there will be one BSB per (session,
filter_spec), for each filter_spec contained in the
filter spec list of the flow descriptor.
2. For each BSB in the preceding step, set (or replace)
its FLOWSPEC Qb with FLOWSPEC from the message, and
set (or reset) its timer Tb to Kb*R seconds. If the
BSB is new, set its PHOP value, and set its
Sender_Template equal to the appropriate filter_spec
from the message.
Braden & Zhang Informational [Page 14]
RFC 2209 RSVP-Message Processing September 1997
3. Execute the RESV REFRESH event sequence (shown below)
for the previous hop PHOP, but only with the B_Merge
flag off. That is, if processing in the RESV REFRESH
sequence reaches the point of turning the B_Merge flag
on (because all matching reservations are blockaded),
do not turn it on but instead exit the REFRESH
sequence and return here.
o Execute the following for each RSB for this session whose
OI differs from In_If and whose Filter_spec_list has at
least one filter spec in common with the FILTER_SPEC* in
the RERR message. For WF style, empty FILTER_SPEC*
structures are assumed to match.
1. If Error_Code = 01 and the InPlace flag in the
ERROR_SPEC is 1 and one or more of the BSB's
found/created above has a Qb that is strictly greater
than Flowspec in the RSB, then continue with the next
matching RSB, if any.
2. If NHOP in the RSB is the local API, then:
- If the FLOWSPEC in the RERR message is strictly
greater than the RSB Flowspec, then turn on the
NotGuilty flag in the ERROR_SPEC.
- Deliver an error upcall to application:
Call: <Upcall_Proc>( session-id, RESV_ERROR,
Error_code, Error_value,
Node_Addr, Error_flags,
Flowspec, Filter_Spec_List
[ , Policy_data] )
and continue with the next RSB.
3. If the style has wildcard sender selection, use the
SCOPE object SC.In from the RERR message to construct
a SCOPE object SC.Out to be forwarded. SC.Out should
contain those sender addresses that appeared in SC.In
and that route to OI, as determined by scanning the
PSB's. If SC.Out is empty, continue with the next
RSB.
4. Create a new RERR message containing the error flow
descriptor and send to the NHOP address specified by
the RSB. Include SC.Out if the style has wildcard
sender selection.
Braden & Zhang Informational [Page 15]
RFC 2209 RSVP-Message Processing September 1997
5. Continue with the next RSB.
o Drop the RERR message and return.
RESV CONFIRM ARRIVES
o If the (unicast) IP address found in the RESV_CONFIRM
object in the RACK message matches an interface of the
node, a confirmation upcall is made to the matching
application:
Call: <Upcall_Proc>( session-id, RESV_CONFIRM,
Error_code, Error_value, Node_Addr,
LUB-Used, nlist, Flowspec,
Filter_Spec_List, NULL, NULL )
o Otherwise, forward the RACK message to the IP address in
its RESV_CONFIRM object.
Drop the RACK message and return.
UPDATE TRAFFIC CONTROL
The sequence is invoked by many of the message arrival sequences
to set or adjust the local traffic control state in accordance
with the current reservation and path state. An implicit
parameter of this sequence is the `active' RSB.
If the result is to modify the traffic control state, this
sequence notifies any matching local applications with a
RESV_EVENT upcall. If the state change is such that it should
trigger immediate RESV refresh messages, it also turns on the
Resv_Refresh_Needed flag.
o Compute the traffic control parameters using the following
steps.
1. Initially the local flag Is_Biggest is off.
2. Consider the set of RSB's matching SESSION and OI from
the active RSB. If the style of the active RSB is
distinct, then the Filter_spec_list must also be
matched.
- Compute the effective kernel flowspec,
TC_Flowspec, as the LUB of the FLOWSPEC values in
these RSB's.
Braden & Zhang Informational [Page 16]
RFC 2209 RSVP-Message Processing September 1997
- Compute the effective traffic control filter spec
(list) TC_Filter_Spec* as the union of the
Filter_spec_lists from these RSB's.
- If the active RSB has a FLOWSPEC larger than all
the others, turn on the Is_Biggest flag.
3. Scan all RSB's matching session and Filtss, for all
OI. Set TC_B_Police_flag on if TC_Flowspec is smaller
than, or incomparable to, any FLOWSPEC in those RSB's.
4. Locate the set of PSBs (senders) whose
SENDER_TEMPLATEs match Filter_spec_list in the active
RSB and whose OutInterface_list includes OI.
5. Set TC_E_Police_flag on if any of these PSBs have
their E_Police flag on. Set TC_M_Police_flag on if it
is a shared style and there is more than one PSB in
the set.
6. Compute Path_Te as the sum of the SENDER_TSPEC objects
in this set of PSBs.
o Search for a TCSB matching SESSION and OI; for distinct
style (FF), it must also match Filter_spec_list.
If none is found, create a new TCSB.
o If TCSB is new:
1. Store TC_Flowspec, TC_Filter_Spec*, Path_Te, and the
police flags into TCSB.
2. Turn the Resv_Refresh_Needed flag on and make the
traffic control call:
TC_AddFlowspec( OI, TC_Flowspec,
Path_Te, police_flags)
-> Rhandle, Fwd_Flowspec
3. If this call fails, build and send a RERR message
specifying "Admission control failed" and with the
InPlace flag off. Delete the TCSB, delete any
RESV_CONFIRM object from the active RSB, and return.
Braden & Zhang Informational [Page 17]
RFC 2209 RSVP-Message Processing September 1997
4. Otherwise (call succeeds), record Rhandle and
Fwd_Flowspec in the TCSB. For each filter_spec F in
TC_Filter_Spec*, call:
TC_AddFilter( OI, Rhandle, Session, F)
-> Fhandle
and record the returned Fhandle in the TCSB.
o Otherwise, if TCSB is not new but no effective kernel
flowspec TC_Flowspec was computed earlier, then:
1. Turn on the Resv_Refresh_Needed flag.
2. Call traffic control to delete the reservation:
TC_DelFlowspec( OI, Rhandle )
3. Delete the TCSB and return.
o Otherwise, if TCSB is not new but the TC_Flowspec, Path_Te,
and/or police flags just computed differ from corresponding
values in the TCSB, then:
1. If the TC_Flowspec and/or Path_Te values differ, turn
the Resv_Refresh_Needed flag on.
2. Call traffic control to modify the reservation:
TC_ModFlowspec( OI, Rhandle, TC_Flowspec,
Path_Te, police_flags )
-> Fwd_Flowspec
3. If this call fails, build and send a RERR message
specifying "Admission control failed" and with the
InPlace bit on. Delete any RESV_CONFIRM object from
the active RSB and return.
4. Otherwise (the call succeeds), update the TCSB with
the new values and save Fwd_Flowspec in the TCSB.
o If the TCSB is not new but the TC_Filter_Spec* just
computed differs from the FILTER_SPEC* in the TCSB, then:
1. Make an appropriate set of TC_DelFilter and
TC_AddFilter calls to transform the Filter_spec_list
in the TCSB into the new TC_Filter_Spec*.
Braden & Zhang Informational [Page 18]
RFC 2209 RSVP-Message Processing September 1997
2. Turn on the Resv_Refresh_Needed flag.
o If the active RSB contains a RESV_CONFIRM object, then:
1. If the Is_Biggest flag is on, move the RESV_CONFIRM
object into the TCSB and turn on the
Resv_Refresh_Needed flag. (This will later cause the
RESV REFRESH sequence to be invoked, which will either
forward or return the RESV_CONFIRM object, deleting it
from the TCSB in either case).
2. Otherwise, create and send a RACK message to the
address in the RESV_CONFIRM object. Include the
RESV_CONFIRM object in the RACK message. The RACK
message should also include an ERROR_SPEC object whose
Error_Node parameter is IP address of OI from the TCSB
and that specifies "No Error".
o If the Resv_Refresh_Needed flag is on and the RSB is not
from the API, make a RESV_EVENT upcall to any matching
application:
Call: <Upcall_Proc>( session-id, RESV_EVENT,
style, Flowspec, Filter_spec_list [ ,
POLICY_DATA] )
where Flowspec and Filter_spec_list come from the TCSB and
the style comes from the active RSB.
o Return to the event sequence that invoked this one.
PATH REFRESH
This sequence sends a path refresh for a particular sender,
i.e., a PSB. This sequence may be entered by either the
expiration of a refresh timer or directly as the result of the
Path_Refresh_Needed flag being turned on during the processing
of a received PATH message.
o Insert TIME_VALUES object into the PATH message being
built. Compute the IP TTL for the PATH message as one less
than the TTL value received in the message. However, if
the result is zero, return without sending the PATH
message.
o Create a sender descriptor containing the SENDER_TEMPLATE,
SENDER_TSPEC, and POLICY_DATA objects, if present in the
PSB, and pack it into the PATH message being built.
Braden & Zhang Informational [Page 19]
RFC 2209 RSVP-Message Processing September 1997
o Send a copy of the PATH message to each interface OI in
OutInterface_list. Before sending each copy:
1. If the PSB has the E_Police flag on and if interface
OI is not capable of policing, turn the E_Police flag
on in the PATH message being built.
2. Pass the ADSPEC object and Non_RSVP flag present in
the PSB to the traffic control call TC_Advertise.
Insert the modified ADSPEC object that is returned
into the PATH message being built.
3. Insert into its PHOP object the interface address and
the LIH for the interface.
RESV REFRESH
This sequence sends a reservation refresh towards a particular
previous hop with IP address PH. This sequence may be entered
by the expiration of a refresh timer, or invoked from the PATH
MESSAGE ARRIVES, RESV MESSAGE ARRIVES, RTEAR MESSAGE ARRIVES, or
RERR MESSAGE ARRIVES sequence.
In general, this sequence considers each of the PSB's with PHOP
address PH. For a given PSB, it scans the TCSBs for matching
reservations and merges the styles, FLOWSPECs and
Filter_spec_list's appropriately. It then builds a RESV message
and sends it to PH. The details depend upon the attributes of
the style(s) included in the reservations.
Initially the Need_Scope flag is off and the new_SCOPE object is
empty.
o Create an output message containing INTEGRITY (if
configured), SESSION, RSVP_HOP, and TIME_VALUES objects.
o Determine the style for these reservations from the first
RSB for the session, and move the STYLE object into the
proto-message. (Note that the present set of styles are
never themselves merged; if future styles can be merged,
these rules will become more complex).
o If style is wildcard and if there are PSB's from more than
one PHOP and if the multicast routing protocol does not use
shared trees, set the Need_Scope flag on.
Braden & Zhang Informational [Page 20]
RFC 2209 RSVP-Message Processing September 1997
o Select each sender PSB whose PHOP has address PH. Set the
local flag B_Merge off and execute the following steps.
1. Select all TCSB's whose Filter_spec_list's match the
SENDER_TEMPLATE object in the PSB and whose OI appears
in the OutInterface_list of the PSB.
2. If the PSB is from the API, then:
- If TCSB contains a CONFIRM object, then create
and send a RACK message containing the object and
delete the CONFIRM object from the TCSB.
- Continue with next PSB.
3. If B_Merge flag is off then ignore a blockaded TCSB,
as follows.
- Select BSB's that match this TCSB. If a selected
BSB is expired, delete it. If any of the
unexpired BSB's has a Qb that is not strictly
larger than TC_Flowspec, then continue processing
with the next TCSB.
However, if steps 1 and 2 result in finding that all
TCSB's matching this PSB are blockaded, then:
- If this RESV REFRESH sequence was invoked from
RESV ERROR RECEIVED, then return to the latter.
- Otherwise, turn on the B_Merge flag and restart
at step 1, immediately above.
4. Merge the flowspecs from this set of TCSB's, as
follows:
- If B_Merge flag is off, compute the LUB over the
flowspec objects. From each TCSB, use the
Fwd_Flowspec object if present, else use the
normal Flowspec object.
Braden & Zhang Informational [Page 21]
RFC 2209 RSVP-Message Processing September 1997
While computing the LUB, check for a RESV_CONFIRM
object in each TCSB. If a RESV_CONFIRM object is
found:
- If the flowspec (Fwd_Flowspec or Flowspec)
in that TCSB is larger than all other (non-
blockaded) flowspecs being compared, then
save this RESV_CONFIRM object for forwarding
and delete from the TCSB.
- Otherwise (the corresponding flowspec is not
the largest), create and send a RACK message
to the address in the RESV_CONFIRM object.
Include the RESV_CONFIRM object in the RACK
message. The RACK message should also
include an ERROR_SPEC object whose
Error_Node parameter is IP address of OI
from the TCSB and specifying "No Error".
- Delete the RESV_CONFIRM object from the
TCSB.
- Otherwise (B_Merge flag is on), compute the GLB
over the Flowspec objects of this set of TCSB's.
While computing the GLB, delete any RESV_CONFIRM
object object in any of these TCSB's.
5. (All matching TCSB's have been processed). The next
step depends upon the style attributes.
Distinct reservation (FF) style
Use the Sender_Template as the merged
FILTER_SPEC. Pack the merged (FLOWSPEC,
FILTER_SPEC, F_POLICY_DATA) triplet into the
message as a flow descriptor.
Shared wildcard reservation (WF) style
There is no merged FILTER_SPEC. Merge (compute
the LUB of) the merged FLOWSPECS from the TCSB's,
across all PSB's for PH.
Braden & Zhang Informational [Page 22]
RFC 2209 RSVP-Message Processing September 1997
Shared distinct reservation (SE) style
Using the Sender_Template as the merged
FILTER_SPEC, form the union of the FILTER_SPECS
obtained from the TCSB's. Merge (compute the LUB
of) the merged FLOWSPECS from the TCSB's, across
all PSB's for PH.
6. If the Need_Scope flag is on and the sender specified
by the PSB is not the local API:
- Find each RSB that matches this PSB, i.e., whose
Filter_spec_list matches Sender_Template in the
PSB and whose OI is included in
OutInterface_list.
- If the RSB either has no SCOPE list or its SCOPE
list includes the sender IP address from the PSB,
insert the sender IP address into new_SCOPE.
o (All PSB's for PH have been processed). Finish the RESV
message.
1. If Need_Scope flag is on but new_SCOPE is empty, no
RESV message should be sent; return. Otherwise, if
Need_Scope is on, move new_SCOPE into the message.
2. If a shared reservation style is being built, move the
final merged FLOWSPEC object and filter spec list into
the message.
3. If a RESV_CONFIRM object was saved earlier, move it
into the new RESV message.
4. Set the RSVP_HOP object in the message to contain the
IncInterface address through which it will be sent and
the LIH from (one of) the PSB's.
o Send the message to the address PH.
ROUTE CHANGE NOTIFICATION
This sequence is triggered when routing sends a route change
notification to RSVP.
o Each PSB is located whose SESSION matches the destination
address and whose SENDER_TEMPLATE matches the source
address (for multicast).
Braden & Zhang Informational [Page 23]
RFC 2209 RSVP-Message Processing September 1997
1. If the OutInterface_list from the notification differs
from that in the PSB, execute the PATH LOCAL REPAIR
sequence.
2. If the IncInterface from the notification differs from
that in the PSB, update the PSB.
PATH LOCAL REPAIR
The sequence is entered to effect local repair after a route
change for a given PSB.
o Wait for a delay time of W seconds.
o Execute the PATH REFRESH event sequence (above) for the
PSB.
References
[Baker96] Baker, F., "RSVP Cryptographic Authentication", Work in
Progress.
[RFC 2205] Braden, R., Ed., Zhang, L., Berson, S., Herzog, S., and
S. Jamin, "Resource ReSerVation Protocol (RSVP) -- Version 1
FunctionalSpecification", RFC 2205, September 1997.
[RFC 2207] Berger, L. and T. O'Malley, "RSVP Extensions for IPSEC
IPv4 Data Flows", RFC 2207, September 1997.
[RSVP93] Zhang, L., Deering, S., Estrin, D., Shenker, S., and D.
Zappala, "RSVP: A New Resource ReSerVation Protocol", IEEE
Network, September 1993.
Security Considerations
Processing the RSVP INTEGRITY object [Baker96] is only mentioned in
this memo, because the processing rules are described here only in
general terms. The RSVP support for IPSEC [RFC 2207] will imply
modifications that have not yet been incorporated into these
processing rules.
Braden & Zhang Informational [Page 24]
RFC 2209 RSVP-Message Processing September 1997
Authors' Addresses
Bob Braden
USC Information Sciences Institute
4676 Admiralty Way
Marina del Rey, CA 90292
Phone: (310) 822-1511
EMail: Braden@ISI.EDU
Lixia Zhang
UCLA Computer Science Department
4531G Boelter Hall
Los Angeles, CA 90095-1596 USA
Phone: 310-825-2695
EMail: lixia@cs.ucla.edu
Braden & Zhang Informational [Page 25]
|